diff options
author | Karl Berry <karl@freefriends.org> | 2011-11-25 00:12:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-11-25 00:12:36 +0000 |
commit | 5d91a4309dbff9d6757412edf6618f731fef9809 (patch) | |
tree | d181a66a46502d2d9c58145a3e5b96663f359654 | |
parent | 0ad65f7beaddd4e930a52720af50fa3aa6ba5958 (diff) |
ltxkeys 0.0.2 (20nov11)
git-svn-id: svn://tug.org/texlive/trunk@24653 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/ltxkeys/README | 21 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.cfg | 90 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.pdf | 11345 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.tex | 2732 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/ltxkeys/ltxkeys.sty | 3304 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/ltxkeys/pathkeys.sty | 615 | ||||
-rwxr-xr-x | Master/tlpkg/libexec/ctan2tds | 1 |
7 files changed, 16819 insertions, 1289 deletions
diff --git a/Master/texmf-dist/doc/latex/ltxkeys/README b/Master/texmf-dist/doc/latex/ltxkeys/README index ead54ad2089..b0820b4aa16 100644 --- a/Master/texmf-dist/doc/latex/ltxkeys/README +++ b/Master/texmf-dist/doc/latex/ltxkeys/README @@ -2,7 +2,7 @@ This is the README file for the ltxkeys package. VERSION -Version 0.0.1, July 2011 +Version 0.0.2, November 2011 SUMMARY @@ -17,22 +17,19 @@ among other features, it avoids character-wise parsing of key values (which is called selective sanitization by the xkeyval package). -It also provides additional functions for defining and -managing keys. +It also provides many new functions for defining and +managing keys, including pathkeys. -In the ltxkeys package, the notion of 'presetting' keys differs -from that of the xkeyval package. Only 'launched keys' are -preset in the ltxkeys package. LICENSE Copyright (c) 2011 Ahmed Musa. -This software is author-maintained. Permission is granted to copy, -distribute and/or modify this software under the terms of the -LaTeX Project Public License, version 1.3 or higher. This software -is provided 'as it is', without warranty of any kind, either -expressed or implied, including, but not limited to, the implied +This software is author-maintained. Permission is granted to copy, +distribute and/or modify this software under the terms of the +LaTeX Project Public License, version 1.3 or higher. This software +is provided 'as it is', without warranty of any kind, either +expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for any particular purpose. @@ -42,4 +39,4 @@ keyval.sty, xkeyval.sty AUTHOR -Ahmed Musa (amusa22@gmail.com)
\ No newline at end of file +Ahmed Musa (amusa22@gmail.com)
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.cfg b/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.cfg new file mode 100644 index 00000000000..3d1ad81c684 --- /dev/null +++ b/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.cfg @@ -0,0 +1,90 @@ +\ProvidesFile{ltxkeys-guide.cfg}% + [2011/11/01 v0.0.2 Configuration file for ltxkeys-guide.tex (AM)] + +\cptloadpackages{% + xwatermark|printwatermark; + array; + colortbl; + ltablex; +} +\new@def*\textpgfkeys{\texttt{pgf}~keys\sspace} + +\amltxoptions{% + geometryoptions = {left=3cm,right=3cm,top=2.5cm,% + bottom=2.5cm,includeheadfoot}, + reviewdocument = false, + parindent = false, + toc = false, + frontpagestyle = empty, + pretitleskip = 0ex, + posttitleskip = 1ex, + presuptitleskip = 15ex, + postsuptitleskip = 0ex, + presubtitleskip = 0ex, + postsubtitleskip = 0ex, + natbiboptions = {numbers,sort&compress}, + cmdcolor = xmagenta1, + stylecolor = xgreen1, + speccolor = teal, + sectionheadcolor = blue +} + +\ltsnewletcs*\sectionbreak\medbreak +\AtBeginDocument{\renewdef*\thefootnote{\fnsymbol{footnote}}} +\robust@def*\textnewkey{\mbox{\fx{\ltxkeys@new}xxx\fx{key}}\sspace} +\robust@def*\textltxkey{\mbox{\fx{\ltxkeys@}xxx\fx{key}}\sspace} +\new@def*\boldreddot{\makered{\textbf{.}}} +\new@def*\keydotchoice#1#2{\ang{#1}\unskip\boldreddot\unskip\ang{{#2}}} +\new@def*\mpkey{\fnl\bs{mp,key}\sspace} +\new@def*\ifmpkey{\mbox{\cmdtext{\bs if}\fnl{}{mp,key}}\sspace} +\new@def*\preffamkey{\fnl*'\bs{pref,fam,key}\sspace} +\new@def*\ipreffamkey#1{\mbox{\cmdtext{\bs#1}\fnl*{}{pref,fam,key}}} +\new@def*\jpreffamkey#1{\mbox{\fnl*'\bs{pref,fam,key}\unskip\fx{@#1}}} +\new@def*\jpreffam#1{\fnl*'\bs{pref,fam,#1}} + +\ifamd@subsidfile\else\ltsafterfi + +\usepackage[persistent,useincluput]{ltxtools-incluput} + +\fancypagenos[% + textalign = center, + show-on-page-one = false, + show-page-numbers = true, + show-headrule = true, + show-footrule = false, + y-position = -.44\paperheight, + x-position = 0, + scale = 1, + angle = 0, + style = \textsc{Page~\thepage~of~\pageref{xwmlastpage}}, + left-header = The \textcolor{macrocolor}{ltxkeys} package, + right-header = \ttcl{black}{\today} +] + +\newwatermark +[page=1,fontfamily=phv,fontsize=11pt,fontseries=m,align=center, + coordunit=pc,width=.975\paperwidth,angle=0,scale=1,xpos=-.62,ypos=30.35]{% + \xwmcolorbox[framesep=5pt,framerule=2pt,fillcolor=white, + outerframecolor=Orange,innerframecolor=brown,textalign=justified, + width=.975\paperwidth]{% + \normalfont\small\color{black}\vspace*{-1ex}% + \parbox{.95\paperwidth}{% + \ltsreddots{1.2}{\large\textsc{License}}\vspace*{1ex}% + This work (\ie, all the files in the \pkg{ltxkeys} manifest) may be distributed and/or + modified under the conditions of the \lppl, either version~1.3 of this license or any later + version. The \lppl maintenance status of this software is \quoted{author-maintained}. This + software is provided \quoted{as it 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. \makered{\CopyrightYear}\vspace*{\baselineskip}% + \ltsreddots{1}{\large\textsc{Summary}}\vspace*{1ex}% + The \pkg'{ltxkeys} provides facilities for creating and managing keys in the manner of the \pkg'{keyval, xkeyval}, but it is intended to be more robust and faster than these earlier packages. Yet it comes with many new functions. + \vspace*{1ex}% + }% + }% +} + +\ltsfi + +\endinput + +%%% End of file ltxkeys-guide.cfg %%% diff --git a/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.pdf b/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.pdf new file mode 100644 index 00000000000..636269abafe --- /dev/null +++ b/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.pdf @@ -0,0 +1,11345 @@ +%PDF-1.5 +% +1 0 obj +<< /S /GoTo /D (section.1) >> +endobj +4 0 obj +(1 Introduction) +endobj +5 0 obj +<< /S /GoTo /D (subsection.1.1) >> +endobj +8 0 obj +(1.1 Motivation) +endobj +9 0 obj +<< /S /GoTo /D (section.2) >> +endobj +12 0 obj +(2 Package options) +endobj +13 0 obj +<< /S /GoTo /D (section.3) >> +endobj +16 0 obj +(3 Defining keys) +endobj +17 0 obj +<< /S /GoTo /D (subsection.3.1) >> +endobj +20 0 obj +(3.1 Defining only definable keys) +endobj +21 0 obj +<< /S /GoTo /D (subsection.3.2) >> +endobj +24 0 obj +(3.2 Ordinary keys) +endobj +25 0 obj +<< /S /GoTo /D (subsubsection.3.2.1) >> +endobj +28 0 obj +(3.2.1 Ordinary keys that share the same attributes) +endobj +29 0 obj +<< /S /GoTo /D (subsection.3.3) >> +endobj +32 0 obj +(3.3 Command keys) +endobj +33 0 obj +<< /S /GoTo /D (subsubsection.3.3.1) >> +endobj +36 0 obj +(3.3.1 Command keys that share the same attributes) +endobj +37 0 obj +<< /S /GoTo /D (subsection.3.4) >> +endobj +40 0 obj +(3.4 Style keys) +endobj +41 0 obj +<< /S /GoTo /D (subsubsection.3.4.1) >> +endobj +44 0 obj +(3.4.1 Style keys that share the same attributes) +endobj +45 0 obj +<< /S /GoTo /D (subsection.3.5) >> +endobj +48 0 obj +(3.5 Boolean keys) +endobj +49 0 obj +<< /S /GoTo /D (subsubsection.3.5.1) >> +endobj +52 0 obj +(3.5.1 Boolean keys that share the same attributes) +endobj +53 0 obj +<< /S /GoTo /D (subsubsection.3.5.2) >> +endobj +56 0 obj +(3.5.2 Biboolean keys) +endobj +57 0 obj +<< /S /GoTo /D (subsection.3.6) >> +endobj +60 0 obj +(3.6 Choice keys) +endobj +61 0 obj +<< /S /GoTo /D (subsubsection.3.6.1) >> +endobj +64 0 obj +(3.6.1 Choice keys that share the same attributes) +endobj +65 0 obj +<< /S /GoTo /D (subsection.3.7) >> +endobj +68 0 obj +(3.7 Defining boolean and command keys with one command) +endobj +69 0 obj +<< /S /GoTo /D (subsection.3.8) >> +endobj +72 0 obj +(3.8 Defining all types of key with one command) +endobj +73 0 obj +<< /S /GoTo /D (subsubsection.3.8.1) >> +endobj +76 0 obj +(3.8.1 Defining keys of common type with ) +endobj +77 0 obj +<< /S /GoTo /D (subsection.3.9) >> +endobj +80 0 obj +(3.9 Need-value keys) +endobj +81 0 obj +<< /S /GoTo /D (subsection.3.10) >> +endobj +84 0 obj +(3.10 Cross-family keys) +endobj +85 0 obj +<< /S /GoTo /D (section.4) >> +endobj +88 0 obj +(4 Setting keys) +endobj +89 0 obj +<< /S /GoTo /D (subsection.4.1) >> +endobj +92 0 obj +(4.1 Setting defined keys) +endobj +93 0 obj +<< /S /GoTo /D (subsection.4.2) >> +endobj +96 0 obj +(4.2 Setting remaining keys) +endobj +97 0 obj +<< /S /GoTo /D (subsection.4.3) >> +endobj +100 0 obj +(4.3 Setting aliased keys) +endobj +101 0 obj +<< /S /GoTo /D (subsection.4.4) >> +endobj +104 0 obj +(4.4 Using key pointers) +endobj +105 0 obj +<< /S /GoTo /D (subsection.4.5) >> +endobj +108 0 obj +(4.5 Accessing the saved value of a key) +endobj +109 0 obj +<< /S /GoTo /D (subsection.4.6) >> +endobj +112 0 obj +(4.6 Pre-setting and post-setting keys) +endobj +113 0 obj +<< /S /GoTo /D (subsection.4.7) >> +endobj +116 0 obj +(4.7 Initializing keys) +endobj +117 0 obj +<< /S /GoTo /D (subsection.4.8) >> +endobj +120 0 obj +(4.8 Launching keys) +endobj +121 0 obj +<< /S /GoTo /D (subsubsection.4.8.1) >> +endobj +124 0 obj +(4.8.1 Non-initialize and non-launch keys) +endobj +125 0 obj +<< /S /GoTo /D (subsection.4.9) >> +endobj +128 0 obj +(4.9 Handling unknown keys and options) +endobj +129 0 obj +<< /S /GoTo /D (section.5) >> +endobj +132 0 obj +(5 Checking if a key is defined) +endobj +133 0 obj +<< /S /GoTo /D (section.6) >> +endobj +136 0 obj +(6 Disabling keys) +endobj +137 0 obj +<< /S /GoTo /D (section.7) >> +endobj +140 0 obj +(7 Option and non-option keys) +endobj +141 0 obj +<< /S /GoTo /D (section.8) >> +endobj +144 0 obj +(8 Handled keys) +endobj +145 0 obj +<< /S /GoTo /D (section.9) >> +endobj +148 0 obj +(9 Reserving and unreserving key path or bases) +endobj +149 0 obj +<< /S /GoTo /D (section.10) >> +endobj +152 0 obj +(10 Bad key names) +endobj +153 0 obj +<< /S /GoTo /D (section.11) >> +endobj +156 0 obj +(11 Declaring options) +endobj +157 0 obj +<< /S /GoTo /D (subsection.11.1) >> +endobj +160 0 obj +(11.1 Options that share the same attributes) +endobj +161 0 obj +<< /S /GoTo /D (subsection.11.2) >> +endobj +164 0 obj +(11.2 Declaring all types of option with one command) +endobj +165 0 obj +<< /S /GoTo /D (section.12) >> +endobj +168 0 obj +(12 Executing options) +endobj +169 0 obj +<< /S /GoTo /D (section.13) >> +endobj +172 0 obj +(13 Processing options) +endobj +173 0 obj +<< /S /GoTo /D (subsection.13.1) >> +endobj +176 0 obj +(13.1 Hooks for `before' and `after' processing options) +endobj +177 0 obj +<< /S /GoTo /D (section.14) >> +endobj +180 0 obj +(14 Key commands and key environments) +endobj +181 0 obj +<< /S /GoTo /D (subsection.14.1) >> +endobj +184 0 obj +(14.1 Final tokens of every environment) +endobj +185 0 obj +<< /S /GoTo /D (subsection.14.2) >> +endobj +188 0 obj +(14.2 Examples of key command and environment) +endobj +189 0 obj +<< /S /GoTo /D (section.15) >> +endobj +192 0 obj +(15 Pathkeys) +endobj +193 0 obj +<< /S /GoTo /D (subsection.15.1) >> +endobj +196 0 obj +(15.1 Shortened pathkeys commands) +endobj +197 0 obj +<< /S /GoTo /D (subsection.15.2) >> +endobj +200 0 obj +(15.2 Default and current paths) +endobj +201 0 obj +<< /S /GoTo /D (subsection.15.3) >> +endobj +204 0 obj +(15.3 Nested pathkeys) +endobj +205 0 obj +<< /S /GoTo /D (subsection.15.4) >> +endobj +208 0 obj +(15.4 Pathkeys as class or package options) +endobj +209 0 obj +<< /S /GoTo /D (section.16) >> +endobj +212 0 obj +(16 Some miscellaneous commands) +endobj +213 0 obj +<< /S /GoTo /D (subsection.16.1) >> +endobj +216 0 obj +(16.1 Trimming leading and trailing spaces) +endobj +217 0 obj +<< /S /GoTo /D (subsection.16.2) >> +endobj +220 0 obj +(16.2 Checking user inputs) +endobj +221 0 obj +<< /S /GoTo /D (subsection.16.3) >> +endobj +224 0 obj +(16.3 Does a test string exist in a string?) +endobj +225 0 obj +<< /S /GoTo /D (subsection.16.4) >> +endobj +228 0 obj +(16.4 Does a given pattern exist in the meaning of a macro?) +endobj +229 0 obj +<< /S /GoTo /D (subsection.16.5) >> +endobj +232 0 obj +(16.5 texcolorifcase for arbitrary strings) +endobj +233 0 obj +<< /S /GoTo /D (subsection.16.6) >> +endobj +236 0 obj +(16.6 Is the number of elements from a sublist found in a csv list n?) +endobj +237 0 obj +<< /S /GoTo /D (subsection.16.7) >> +endobj +240 0 obj +(16.7 Is the number of elements from a sublist found in a tsv list n?) +endobj +241 0 obj +<< /S /GoTo /D (subsection.16.8) >> +endobj +244 0 obj +(16.8 Is the number of elements in a csv list n or n?) +endobj +245 0 obj +<< /S /GoTo /D (subsection.16.9) >> +endobj +248 0 obj +(16.9 What is the numerical order of an element in a csv list?) +endobj +249 0 obj +<< /S /GoTo /D (subsection.16.10) >> +endobj +252 0 obj +(16.10 List normalization) +endobj +253 0 obj +<< /S /GoTo /D (subsection.16.11) >> +endobj +256 0 obj +(16.11 Parsing arbitrary csv or kv list) +endobj +257 0 obj +<< /S /GoTo /D (subsection.16.12) >> +endobj +260 0 obj +(16.12 Expandable list parser) +endobj +261 0 obj +<< /S /GoTo /D (subsection.16.13) >> +endobj +264 0 obj +(16.13 Remove one or all occurrences of elements from a csv list) +endobj +265 0 obj +<< /S /GoTo /D (subsection.16.14) >> +endobj +268 0 obj +(16.14 Replace one or all occurrences of elements in a csv list) +endobj +269 0 obj +<< /S /GoTo /D (subsection.16.15) >> +endobj +272 0 obj +(16.15 Stripping outer braces) +endobj +273 0 obj +<< /S /GoTo /D (section.17) >> +endobj +276 0 obj +(17 To-do list) +endobj +277 0 obj +<< /S /GoTo /D (subsection.17.1) >> +endobj +280 0 obj +(17.1 Patching key macros) +endobj +281 0 obj +<< /S /GoTo /D (subsection.17.2) >> +endobj +284 0 obj +(17.2 Modifying the dependant keys of an existing style key) +endobj +285 0 obj +<< /S /GoTo /D (subsection.17.3) >> +endobj +288 0 obj +(17.3 Toggle and switch keys) +endobj +289 0 obj +<< /S /GoTo /D (section.18) >> +endobj +292 0 obj +(18 Version history) +endobj +293 0 obj +<< /S /GoTo /D (0180000:0.0.2.2) >> +endobj +296 0 obj +(0.0.2 \(2011/09/01\)) +endobj +297 0 obj +<< /S /GoTo /D (0180000:0.0.1.2) >> +endobj +300 0 obj +(0.0.1 \(2011/07/30\)) +endobj +301 0 obj +<< /S /GoTo /D (section.18) >> +endobj +303 0 obj +(Index) +endobj +304 0 obj +<< /S /GoTo /D [305 0 R /Fit] >> +endobj +352 0 obj << +/Length 3303 +/Filter /FlateDecode +>> +stream +xr_3&w,I7vL:NfT +ƏIu,K=f_^>ƈ(ZׁU$j\W"+l?ee$?%(("YXr6gsL$aYQY<a=A#tmNjb1B +rm"-sݤ)rkjnW#/ˇbstܖռ;~e4 +H4"vG:ḠwH&ix$Hz P#9$!Q'$$чqFfѧҋ#t#RR$.κ|*6uCmb4Ӛܛ@o4 +,U 5`eֹ]k'+DSٺV{ŦXeGA@*Eo[BTs&@^kh.g$mu9oQ{,UǎM$B[X[D&GAd(FkbDG=$KD$UI̭̹lwAnhE[Ud@k{݁3:<o +{3dILؠg)xF#&@6K7
g}A>;t^iCT0=[:`Hz8pu_ܮ][ԩ[:&h#f֥A T\L2h`S$cPM +l8l0ԯςq>Y IK%
w3ׁJ`~vif 皒YL$^kTвOnMR#l} xewqVs$<@Y!aW)g5_M0=IЏ<>er@ +/"&4D=c!硚,)C$UiFA}7<qws Og68RALXIK%Ze,GhP,ꠟK $ix*脙OM)m/D
[AS0&N1vHb4sGl +Ovq?.1{$(v4^Yݭ١{ +, G 7O!U$&c3<NeNtqCB/bئ3O陣+RʕmLUmw.`+¥uϗb +ޫQ"'lff(##m*UIX օuW%bB2q$M(}-A3J7;usбDu8EU:]#a+Ӑ۬i%
R +vvMjt ͠-GI(ؙ"G +MՕޅUWkR%Ϡe'%?/lDڜmڋj 4*.ȴEV9FE/t:wt]=gdۇ9+wtF'X!φMTټ\ST
eI^*lۗE +}VScԅߗ<=> +4Z:Љs'`$1HN; ~z kjcEe=Kt7m@ +o 2T7^j~zoaz1BK~-8r`'SW\J{ +K4SSw{!Es""C/+M@Y? +c*Z4i:]@vo?\EY`gg"=$kFKżʵr]ѫ$ܤ+/ +ǠŲ&m=1PIOuԝ[L" +?P$}p +n?9= +_dOW-bַy=,|Ά}ur_CR!IˊCvjuYd_\c/ 9g=^'z +JgjѦNzzF!L +endstream +endobj +305 0 obj << +/Type /Page +/Contents 352 0 R +/Resources 351 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 378 0 R +/Annots [ 306 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 367 0 R 316 0 R 317 0 R 368 0 R 318 0 R 319 0 R 369 0 R 320 0 R 321 0 R 370 0 R 322 0 R 323 0 R 324 0 R 371 0 R 325 0 R 372 0 R 326 0 R 373 0 R 327 0 R 374 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 375 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 376 0 R 346 0 R 347 0 R 307 0 R 308 0 R ] +>> endobj +306 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [207.605 615.791 387.67 636.321] +/Subtype/Link/A<</Type/Action/S/URI/URI(http://mirror.ctan.org/macros/latex/contrib/ltxkeys/)>> +>> endobj +309 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 466.371 158.34 474.59] +/A << /S /GoTo /D (section.1) >> +>> endobj +310 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 455.128 165.082 463.247] +/A << /S /GoTo /D (subsection.1.1) >> +>> endobj +311 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 431.789 173.923 441.752] +/A << /S /GoTo /D (section.2) >> +>> endobj +312 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 410.194 162.287 420.157] +/A << /S /GoTo /D (section.3) >> +>> endobj +313 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 398.951 234.135 408.914] +/A << /S /GoTo /D (subsection.3.1) >> +>> endobj +314 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 387.708 177.978 397.671] +/A << /S /GoTo /D (subsection.3.2) >> +>> endobj +315 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 376.465 293.653 386.428] +/A << /S /GoTo /D (subsubsection.3.2.1) >> +>> endobj +367 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 367.25 213.133 375.469] +/A << /S /GoTo /D (subsubsection.3.2.1) >> +>> endobj +316 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 354.263 182.801 364.226] +/A << /S /GoTo /D (subsection.3.3) >> +>> endobj +317 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 343.02 293.653 352.983] +/A << /S /GoTo /D (subsubsection.3.3.1) >> +>> endobj +368 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 333.805 213.133 342.024] +/A << /S /GoTo /D (subsubsection.3.3.1) >> +>> endobj +318 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 320.818 161.302 330.781] +/A << /S /GoTo /D (subsection.3.4) >> +>> endobj +319 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 309.575 293.653 319.538] +/A << /S /GoTo /D (subsubsection.3.4.1) >> +>> endobj +369 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 300.36 190.04 308.579] +/A << /S /GoTo /D (subsubsection.3.4.1) >> +>> endobj +320 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 287.373 173.716 297.336] +/A << /S /GoTo /D (subsection.3.5) >> +>> endobj +321 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 276.13 293.653 286.093] +/A << /S /GoTo /D (subsubsection.3.5.1) >> +>> endobj +370 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 266.915 213.133 275.134] +/A << /S /GoTo /D (subsubsection.3.5.1) >> +>> endobj +322 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 253.928 211.141 263.891] +/A << /S /GoTo /D (subsubsection.3.5.2) >> +>> endobj +323 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 242.685 168.469 252.648] +/A << /S /GoTo /D (subsection.3.6) >> +>> endobj +324 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 231.442 293.653 241.405] +/A << /S /GoTo /D (subsubsection.3.6.1) >> +>> endobj +371 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 222.227 213.133 230.446] +/A << /S /GoTo /D (subsubsection.3.6.1) >> +>> endobj +325 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 209.24 293.653 219.203] +/A << /S /GoTo /D (subsection.3.7) >> +>> endobj +372 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 200.025 197.852 208.244] +/A << /S /GoTo /D (subsection.3.7) >> +>> endobj +326 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 187.038 293.653 197.001] +/A << /S /GoTo /D (subsection.3.8) >> +>> endobj +373 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 177.823 159.963 186.042] +/A << /S /GoTo /D (subsection.3.8) >> +>> endobj +327 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [119.062 164.836 293.653 174.799] +/A << /S /GoTo /D (subsubsection.3.8.1) >> +>> endobj +374 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 153.628 265.68 163.84] +/A << /S /GoTo /D (subsubsection.3.8.1) >> +>> endobj +328 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 464.627 402.949 474.59] +/A << /S /GoTo /D (subsection.3.9) >> +>> endobj +329 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 453.533 409.207 463.496] +/A << /S /GoTo /D (subsection.3.10) >> +>> endobj +330 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 432.684 374.096 442.646] +/A << /S /GoTo /D (section.4) >> +>> endobj +331 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 421.59 419.333 431.552] +/A << /S /GoTo /D (subsection.4.1) >> +>> endobj +332 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 410.496 435.734 420.458] +/A << /S /GoTo /D (subsection.4.2) >> +>> endobj +333 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 399.402 417.845 409.364] +/A << /S /GoTo /D (subsection.4.3) >> +>> endobj +334 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 388.308 413.509 398.27] +/A << /S /GoTo /D (subsection.4.4) >> +>> endobj +335 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 377.214 476.778 387.176] +/A << /S /GoTo /D (subsection.4.5) >> +>> endobj +336 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 366.12 471.6 376.082] +/A << /S /GoTo /D (subsection.4.6) >> +>> endobj +337 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 355.026 402.171 364.988] +/A << /S /GoTo /D (subsection.4.7) >> +>> endobj +338 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 343.932 400.764 353.894] +/A << /S /GoTo /D (subsection.4.8) >> +>> endobj +339 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [336.641 334.581 511.232 342.8] +/A << /S /GoTo /D (subsubsection.4.8.1) >> +>> endobj +375 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 321.879 385.329 331.841] +/A << /S /GoTo /D (subsubsection.4.8.1) >> +>> endobj +340 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 310.785 485.16 320.747] +/A << /S /GoTo /D (subsection.4.9) >> +>> endobj +341 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 289.935 445.282 299.898] +/A << /S /GoTo /D (section.5) >> +>> endobj +342 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 269.085 384.341 279.048] +/A << /S /GoTo /D (section.6) >> +>> endobj +343 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 248.235 447.194 258.198] +/A << /S /GoTo /D (section.7) >> +>> endobj +344 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 227.386 379.879 237.348] +/A << /S /GoTo /D (section.8) >> +>> endobj +345 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 206.536 511.232 216.499] +/A << /S /GoTo /D (section.9) >> +>> endobj +376 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 197.321 341.729 205.54] +/A << /S /GoTo /D (section.9) >> +>> endobj +346 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 174.727 387.824 184.69] +/A << /S /GoTo /D (section.10) >> +>> endobj +347 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 153.878 398.974 163.84] +/A << /S /GoTo /D (section.11) >> +>> endobj +307 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [201.895 125.811 424.065 137.688] +/Subtype/Link/A<</Type/Action/S/URI/URI(http://mirror.ctan.org/macros/latex/contrib/ltxkeys/)>> +>> endobj +308 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[0 1 1] +/Rect [305.397 96.918 383.416 108.415] +/Subtype/Link/A<</Type/Action/S/URI/URI(mailto:amusa22@gmail.com)>> +>> endobj +353 0 obj << +/D [305 0 R /XYZ 84.039 772.024 null] +>> endobj +359 0 obj << +/D [305 0 R /XYZ 85.039 734.162 null] +>> endobj +351 0 obj << +/Font << /F62 354 0 R /F45 355 0 R /F59 356 0 R /F34 357 0 R /F55 358 0 R /F18 360 0 R /F19 361 0 R /F32 362 0 R /F17 363 0 R /F33 364 0 R /F80 365 0 R /F53 366 0 R /F50 377 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +416 0 obj << +/Length 4286 +/Filter /FlateDecode +>> +stream +xڽ<k붕W"20V7bޤiiv?0J<69$%eEQy/R78曻Ձ2[DD@II!eKxNgM7n_挱pS<Ψ +tǻd1:| &hL43;zW-.cқb绛`$t$U8X£?q +m
g?ej +i}jE#<"8 +9##PQ&)8Ll6QϨ _wpcBX+s̷F[m/cF +_w(ARyo1?eÀr] o9ԚF{Z#\6fisNT(;4I6t72,G e{ߊp]&&R D +jXkҼ<\+H{ 1#E@*d!#!uB +
&["`G\'Ă:]qOIڍFd<w.Z? H7irfaZ&Yn[
2QRF鮶m;]ػr׳TAӲQ<M&Qp
st!aKwuDGDޕ^BSi +j2uDNXnwHuK(1.8/P:ʕ@fF|YB_^hɦ/umc[Ej|t\AO>_ SezB)wNt:0OCySaoUB_7iK2$/Z~hӪ⌭z
V|zj[xZwoo]ˏ#J;_Ԫ\?^E9|0w +ϗhJ)ZD13g4VRX!'Fu6ŇF*!
wNAH+0#m`EnXʠL۟qFasf<k41[~ +x.Gyv<iJQl:w%Ba<1\$lYE0c4JfoZ`8Uu\`e caOayj7OD6Hm%^t#Nڅ-r ýϊ[lC B,.vssix뮭<3jgꠂG悟 SH>DBfu79^AmR>P5!#v$iI{`ՏA(*51K6UZ[h8UueX#a3`Ul6HsŪUXݜگ4s6H<EnY" i98U9_$7Ht덒WDLfW9v#>#g֫f́@.ݰFp)h #~U@GI:g[VA"rʊCc@zHʴk
j)ޣo&!P#= +⁘Sxx01\u6@7
@5bgrT + +A]476ĖkB& +B9CϯќAmWG#,(ѓ},ਤXȖ[`:;Κ%H>p6Xġ~¿"~^gnוGH?R8㯃ΰJ7XsV2$C@lXKFbjN8$!v?e9)#J:,Jч}VACr1#wH+Ca +&-&/Y͛O3[݂0+L0XS-uh4S7Λ#έɊ;XPIa|C"[S{tz oq ܇bH<G^q:7o$ܗڄb
HP=,mX
7$[A?]np`lDEsƶ7}CI{xHhy|w ]$\O"q^n<>WZ$g"8Ղ9\8݃gE=8!g`&c4XU(O
jcy`2yIA}M8gçb=~|xIîAr&4?OZC +\s=|?;A7mYY
Y^w W|b7t\oo /JKDEJ"+|pl`!zu8U_|vwK39r蘜;(7UqXO(kTCH}pⴰHf[%|v.{ L/#5v :fNo]O@A +gUo`A䩈UM!iŜ?`.&jH
oOK3 +endstream +endobj +415 0 obj << +/Type /Page +/Contents 416 0 R +/Resources 414 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 378 0 R +/Annots [ 348 0 R 349 0 R 419 0 R 350 0 R 379 0 R 380 0 R 420 0 R 381 0 R 382 0 R 383 0 R 421 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 422 0 R 394 0 R 395 0 R 423 0 R 396 0 R 425 0 R 397 0 R 426 0 R 398 0 R 427 0 R 399 0 R 400 0 R 401 0 R 402 0 R 428 0 R 403 0 R 429 0 R 404 0 R 405 0 R 406 0 R 407 0 R 430 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R ] +>> endobj +348 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 721.459 278.488 731.422] +/A << /S /GoTo /D (subsection.11.1) >> +>> endobj +349 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 710.501 293.653 720.463] +/A << /S /GoTo /D (subsection.11.2) >> +>> endobj +419 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 701.285 159.963 709.504] +/A << /S /GoTo /D (subsection.11.2) >> +>> endobj +350 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 675.631 183.367 685.594] +/A << /S /GoTo /D (section.12) >> +>> endobj +379 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 655.457 186.375 665.42] +/A << /S /GoTo /D (section.13) >> +>> endobj +380 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 644.498 293.653 654.461] +/A << /S /GoTo /D (subsection.13.1) >> +>> endobj +420 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 633.539 181.111 643.275] +/A << /S /GoTo /D (subsection.13.1) >> +>> endobj +381 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 613.365 276.543 623.328] +/A << /S /GoTo /D (section.14) >> +>> endobj +382 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 602.406 258.498 612.369] +/A << /S /GoTo /D (subsection.14.1) >> +>> endobj +383 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 591.447 293.653 601.41] +/A << /S /GoTo /D (subsection.14.2) >> +>> endobj +421 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 582.232 151.008 590.003] +/A << /S /GoTo /D (subsection.14.2) >> +>> endobj +384 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 560.314 141.946 570.277] +/A << /S /GoTo /D (section.15) >> +>> endobj +385 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 549.355 245.851 559.318] +/A << /S /GoTo /D (subsection.15.1) >> +>> endobj +386 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 538.396 225.978 548.359] +/A << /S /GoTo /D (subsection.15.2) >> +>> endobj +387 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 527.437 187.209 537.4] +/A << /S /GoTo /D (subsection.15.3) >> +>> endobj +388 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 516.478 268.399 526.441] +/A << /S /GoTo /D (subsection.15.4) >> +>> endobj +389 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 498.048 243.436 506.267] +/A << /S /GoTo /D (section.16) >> +>> endobj +390 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 485.345 270.955 495.308] +/A << /S /GoTo /D (subsection.16.1) >> +>> endobj +391 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 474.386 205.658 484.349] +/A << /S /GoTo /D (subsection.16.2) >> +>> endobj +392 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 463.427 263.304 473.39] +/A << /S /GoTo /D (subsection.16.3) >> +>> endobj +393 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [97.866 452.469 293.653 462.431] +/A << /S /GoTo /D (subsection.16.4) >> +>> endobj +422 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 441.51 205.041 451.472] +/A << /S /GoTo /D (subsection.16.4) >> +>> endobj +394 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 721.459 448.299 731.422] +/A << /S /GoTo /D (subsection.16.5) >> +>> endobj +395 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 712.235 511.232 720.454] +/A << /S /GoTo /D (subsection.16.6) >> +>> endobj +423 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 699.912 449.043 709.495] +/A << /S /GoTo /D (subsection.16.6) >> +>> endobj +396 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 690.308 511.232 698.528] +/A << /S /GoTo /D (subsection.16.7) >> +>> endobj +425 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 677.985 448.531 687.569] +/A << /S /GoTo /D (subsection.16.7) >> +>> endobj +397 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 668.382 511.232 676.601] +/A << /S /GoTo /D (subsection.16.8) >> +>> endobj +426 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 656.059 387.914 665.642] +/A << /S /GoTo /D (subsection.16.8) >> +>> endobj +398 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 646.455 511.232 654.674] +/A << /S /GoTo /D (subsection.16.9) >> +>> endobj +427 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 635.496 412.719 643.715] +/A << /S /GoTo /D (subsection.16.9) >> +>> endobj +399 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 624.528 412.556 632.748] +/A << /S /GoTo /D (subsection.16.10) >> +>> endobj +400 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 611.817 463.17 621.78] +/A << /S /GoTo /D (subsection.16.11) >> +>> endobj +401 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 600.849 429.274 610.812] +/A << /S /GoTo /D (subsection.16.12) >> +>> endobj +402 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 591.625 511.232 599.844] +/A << /S /GoTo /D (subsection.16.13) >> +>> endobj +428 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 580.666 423.03 588.885] +/A << /S /GoTo /D (subsection.16.13) >> +>> endobj +403 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 567.955 511.232 577.917] +/A << /S /GoTo /D (subsection.16.14) >> +>> endobj +429 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 558.739 412.002 566.959] +/A << /S /GoTo /D (subsection.16.14) >> +>> endobj +404 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 546.028 428.348 555.991] +/A << /S /GoTo /D (subsection.16.15) >> +>> endobj +405 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 527.553 361.718 535.772] +/A << /S /GoTo /D (section.17) >> +>> endobj +406 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 514.842 422.031 524.804] +/A << /S /GoTo /D (subsection.17.1) >> +>> endobj +407 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 503.874 511.232 513.836] +/A << /S /GoTo /D (subsection.17.2) >> +>> endobj +430 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 492.915 407.862 502.878] +/A << /S /GoTo /D (subsection.17.2) >> +>> endobj +408 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [315.446 481.947 431.665 491.91] +/A << /S /GoTo /D (subsection.17.3) >> +>> endobj +409 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 461.728 388.108 471.691] +/A << /S /GoTo /D (section.18) >> +>> endobj +410 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [301.623 443.253 329.874 451.472] +/A << /S /GoTo /D (section.18) >> +>> endobj +411 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [275.213 301.735 287.366 314.494] +/A << /S /GoTo /D (hy@ltsfn11) >> +>> endobj +412 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [212.892 194.584 225.044 207.344] +/A << /S /GoTo /D (hy@ltsfn12) >> +>> endobj +413 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +417 0 obj << +/D [415 0 R /XYZ 84.039 772.024 null] +>> endobj +2 0 obj << +/D [415 0 R /XYZ 85.039 419.94 null] +>> endobj +436 0 obj << +/D [415 0 R /XYZ 89.556 159.191 null] +>> endobj +437 0 obj << +/D [415 0 R /XYZ 89.556 130.378 null] +>> endobj +414 0 obj << +/Font << /F8 418 0 R /F45 355 0 R /F53 366 0 R /F59 356 0 R /F55 358 0 R /F54 424 0 R /F80 365 0 R /F86 431 0 R /F87 432 0 R /F91 433 0 R /F32 362 0 R /F7 434 0 R /F6 435 0 R /F34 357 0 R /F33 364 0 R /F50 377 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +442 0 obj << +/Length 4522 +/Filter /FlateDecode +>> +stream +xڵ;]q+fNՊGA$*|IS\"u$O")Vݼ +S0֫$l_Tm@~]`#nQW9B"0JqI!g~9J0>,ݒQƣ%dlʵR8wC%[ 䱴{Y +GGD[DٷczdB|k|h6!VyϡfU. fI;a=;X5nKY)Q=;a 6z$&PS;E2wNckyC"::>q Ed-i^HN{DitL2D4[l#HAkS"9cмMge^]$bnB̅=( m +QbdqhH%
hC#
LBg8>mVLlۼ 4NyTeQr˼|LJ\Mݾ.a@FS'blÐ5P'$#U?$Q]ȵ&xnpeЁv(\qP{@wۺ_i}9$@MOPy;G1D1SWPx:̱˪[#,w#rFI}Gܫ$ӛ>Jo ïDMT13yyg2loaIys3".UsYqϓ. <y._9YM.=BfDC,%
{ըQFo'cA"uZ_ۗ/F97xp~/MUw:Z8W8>w|8a>O4g_Z`!%BոՆQgg34yt^z?2.AK~C־cSL453Ad|
(ӡ]̛_Wmk']{M@abӖW-LfioɌD7 +{ +0RkŌ|6<I8s:S +˂"' +S4'>V]ۜ.?ao6dS_\/}Zosrf0UQ~"}\&'k=,A:g #-6RC=TtيQc
M`x)NrN0j3D4y:I.yY%aL5yuԣJܗ17rceWҐ-*1`_71pi|鍎)S;_v@S 0{\E[]YwJ S:FWIS[^⬨(<&c4o7eZ[OV>2F
+&pΈr+a&g c-HD'4t6ΘN*S07.ֲY$u@pRO<~Xft%+AS :t2!pjWZpsV3p $KwTB9seUFYd첱Q#p.q02
{q_Cr^eQ6'Ckn](#aE]m$ޠ!Ә0:ݹuFAhsߔFӬ7,vKEK<־7h(:I.tҿ>M>rk
`N$ ^ji&`u}|7OO5X +Ȱ%wf6nw}xbs#Z rP>5:P!%ߘ;0KN|(]}0uo9#7`!?v[FRXe"ۏ|Q|L%Iٶ3tc(zO\]T$Bݑ)${AEiG}.qADh{ =0}GmoĠk +9+5Xɗ9 }]Nv8+0G]˱ì +!t\#wxkwS'G.oP*xɖ_pD"|5R/%9w9y9?Le +}ކ;19!U}=H3sb<,$8קDX<礢#F#\5S.ƚ)@D=9Y*U&4"\s܈?Y+Q@\n,StVfYfAQMO@zƚMcC$ +endstream +endobj +441 0 obj << +/Type /Page +/Contents 442 0 R +/Resources 440 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 378 0 R +/Annots [ 438 0 R 439 0 R ] +>> endobj +438 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [345.404 313.196 357.557 325.679] +/A << /S /GoTo /D (hy@ltsfn13) >> +>> endobj +439 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +443 0 obj << +/D [441 0 R /XYZ 84.039 772.024 null] +>> endobj +6 0 obj << +/D [441 0 R /XYZ 85.039 309.211 null] +>> endobj +446 0 obj << +/D [441 0 R /XYZ 89.556 124.876 null] +>> endobj +440 0 obj << +/Font << /F8 418 0 R /F14 444 0 R /F91 433 0 R /F32 362 0 R /F7 434 0 R /F80 365 0 R /F97 445 0 R /F33 364 0 R /F50 377 0 R /F34 357 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +479 0 obj << +/Length 4484 +/Filter /FlateDecode +>> +stream +xڽ<َFz3h'6]/m`l˒*nQLRuL$n`Ddܙh0&?Ofzr(2'Vjr7=f&Gؤ'n&?OAѾ>8U:&xU*H%L8QxkBXHoخiGmEn{ u<-o~5aO(xb.'2a"O7BƜbvF"9vW TLYCʹcCMhy+7m5TߧP%B -?%ndvξ){{N-n#+0R_?Uc0v{]v3úiiG 5ķ|W&0m +L&,#:,pö Bgr[ +d<Ya UWe3"S'r6nᲃ-KJC
28wk=1@u4fiI
v8=ig`k"8nyh)LBi/Ly5[/"{8 +~6ƘLG䐔&$(pLvyLl~ ҢhBC.LnvV-XVJ!#^ +JD,<<C=crpځ^@h ed(^Z:3| +c)8sq M"v߲ +j鬮ɣXO!A1A 0Ԩ}3C%th1InBGqCBG"!>Swv
. +WsAA +L'WjB}};*~IЕ/ͣfG'3Vݥ+(|%93gN?}P $`E8us}@_2@@S#LrMF!ڄZhDfhO؞=Po2q<9b\-%X(V +OH +,ˢ˱Q>^wy4;ǑuZ!K8uUf(I?:fd e<8^䓉&
ct_54۴֚tEwۗ#0. +-b}X*&DKJ)]YaWd4xD\Ϟ$HT</:/hM{XލAV#n{ԕ'IġYɫCbUf=ᣝT5ʞq>Ӧ sVVx+d+ 8l)mwײF&l}~TB]ע9?~6Y^pJ]gc7̑)5*=ؠC)eZn +.pPwf:!$ +J2> +x5SV@l/a %hPhW-KwnUwo yb8xz]!v|VPp~8Nn3͝e& +01ƻЍPzS~&W*y=7H.LȢa85iT6Uُb]K0Yl`cIa +Q8F!GF%<-(b;^& F]LO[2؊:MgUjJYb@b:O <5ڇ:|ҩ4ۿZC׃gKOy?! 'ܡj +2~ʟQ`AKzbfVP4 ɨaMc +EqӀ +A={NZؐ',N:`Zj-l~)g -\q e6r^8ǓG>~>tXM* A0ٱp[ƀ\Q?5?` eW{'axGJr[." ׀tMNk:VF +endstream +endobj +478 0 obj << +/Type /Page +/Contents 479 0 R +/Resources 477 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 378 0 R +/Annots [ 447 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R ] +>> endobj +447 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.208 661.545 260.879 672.393] +/A << /S /GoTo /D (table.1) >> +>> endobj +469 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [272.733 430.163 314.022 443.337] +/A << /S /GoTo /D (hy@ltablenote1.1) >> +>> endobj +470 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [492.957 416.813 504.856 431.757] +/A << /S /GoTo /D (hy@ltablenote1.2) >> +>> endobj +471 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [345.757 370.586 357.657 383.528] +/A << /S /GoTo /D (hy@ltablenote1.3) >> +>> endobj +472 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [340.502 336.365 382.595 347.324] +/A << /S /GoTo /D (section.15) >> +>> endobj +473 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [309.11 314.945 347.669 324.908] +/A << /S /GoTo /D (section.9) >> +>> endobj +474 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [359.022 256.215 370.922 269.157] +/A << /S /GoTo /D (hy@ltablenote1.4) >> +>> endobj +475 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.423 242.865 431.404 257.809] +/A << /S /GoTo /D (section.15) >> +>> endobj +476 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +480 0 obj << +/D [478 0 R /XYZ 84.039 772.024 null] +>> endobj +10 0 obj << +/D [478 0 R /XYZ 85.039 708.436 null] +>> endobj +481 0 obj << +/D [478 0 R /XYZ 85.039 502.143 null] +>> endobj +483 0 obj << +/D [478 0 R /XYZ 104.965 203.214 null] +>> endobj +485 0 obj << +/D [478 0 R /XYZ 104.965 121.521 null] +>> endobj +477 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F45 355 0 R /F53 366 0 R /F34 357 0 R /F100 482 0 R /F33 364 0 R /F35 484 0 R /F50 377 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +493 0 obj << +/Length 4666 +/Filter /FlateDecode +>> +stream +x<ksqWЕGUIX38WTGc|*C$$!" +o* ΒJC_T5Ҳ(-J,i/uRIDŽZ:(0uUgy?٦,5̕mѡ.@p<zd<X/5TS +*hfG`e1vֶI$\6Bi<9ۿa:!$Bc`"8o_oOa`2
+s!H$E<Bj:B"m8l#ke%2jkp H!?HHI_)AGN0橸Ί&>VNg}[~GM;elFLY,Ƒ +ڢ*A%vBI&q:i#RryDU0~7~ёb'2Q"zZH"z7)\i{copA_x?-Tfi|WW[ӦXmWf-*? +@oŌx)w &X˶ƗYHłx)q'[9R^TRlv j/ + $iX+MؖE%vްeUwQjgHmݮ\nPASrpA%>mkVYTv0p3S'ˁt?zeח}.YBGgljZrR +1DxVH ĥ7:`
y +μ
EvCT +ƜHpۿde#`s1g +GD(-/_?/ k鄋\"Q+Z>
~|مf%xBD&7Ϲ/ֺu6VEv8V:_GY]vP +$u]a[lʏ +҄m4#`=I͏b +Iö1OovCLX`1i?b(y .`{'2|LK0땊~RI#zau +.D=N9@skoŶ78BC]GFA`?n]NjJRiܗiciK'm8N݊< +3W<gW!jaP1`ag
[vV%6'ANV]G*NDȇGV[nc|L.`Hu%D
ЋIbLr˳Mhms/Àť.gJ`J>c @ѿv%Йsemd̩"'Ҹ2}`ZN8éi'bEI$]8_%i"pqPjg(q2JRSrt@['Tp>n2 +42ARs#M^$H$D%>κ#Z~A,5^_u!}(| +)Jiؒ}Gx' h)jr!L 9έ!62Z\"gnю2 +t9ʗ$J$̋Ȃ{6qdQKLP!M_ SA${b\>4cfBt*JD1LZ6f +_b8+!gꜤ00OJU |=v(U˹ ^400 +T^w_M~Y#㵓!7J/|-FYX%cx<0jA%n)R +RJt]A;(~9L7w{<Ү<3=3u7'?e#(:Gē(V:^CH-E_Cb3^ZI2s7;M{G{"c%^q~L-9t!N6y/9S
M؇b +?`ܒWxLvI㉰EȽȁ1aӖ$ixVv4QsPj2ڃ6}g!z|sFDq]B(b__ge2&^ +endstream +endobj +492 0 obj << +/Type /Page +/Contents 493 0 R +/Resources 491 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 378 0 R +/Annots [ 488 0 R 489 0 R 490 0 R ] +>> endobj +488 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [384.595 255.285 424.695 267.24] +/A << /S /GoTo /D (section.4) >> +>> endobj +489 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [496.313 196.062 508.465 208.545] +/A << /S /GoTo /D (hy@ltsfn14) >> +>> endobj +490 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +494 0 obj << +/D [492 0 R /XYZ 84.039 772.024 null] +>> endobj +486 0 obj << +/D [492 0 R /XYZ 104.965 669.305 null] +>> endobj +487 0 obj << +/D [492 0 R /XYZ 104.965 634.934 null] +>> endobj +14 0 obj << +/D [492 0 R /XYZ 85.039 595.526 null] +>> endobj +18 0 obj << +/D [492 0 R /XYZ 85.039 564.797 null] +>> endobj +22 0 obj << +/D [492 0 R /XYZ 85.039 384.885 null] +>> endobj +495 0 obj << +/D [492 0 R /XYZ 89.556 126.077 null] +>> endobj +491 0 obj << +/Font << /F8 418 0 R /F33 364 0 R /F50 377 0 R /F34 357 0 R /F80 365 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F32 362 0 R /F7 434 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +500 0 obj << +/Length 3886 +/Filter /FlateDecode +>> +stream +xr]_*?Z!qʱcW9V$!G[@9pM 6' MX6M/__6qi7bi͉V*y=Mޤ˷0ɛ+!D:[4_Ɓz||M.M]*fyg¤.g|%+lcNk.?]x_a,&/}PbIy"'N +hϒ.Bk{ xO6ZEp0*uN2 oͻ:dsƅ tl,\ 2Y
LPN%Ki-Q2*@hd\~~^=ځȏ* Rr5.8Q'F0C<z)B)+pAx +SR?dJVW5'Ha;1h!dl+!\.M%Up>[w0{*G<D +UI[[^7
WX3[jiŌ8[
*a;p&xwMiA,&` 6 +KiQ+8zv.}?]`oe$[8oDPн^k`qZaӇI @C`vꯢ-)&Ȁ,U!~v=F]1;A&ӕL +g 8>[Z&+`a'4[Ho:Lcͮ^'6j@* L +XxO3YK+%?gv +h5ߖ +m%A `4bQlαiMURgjZb84?:HrΓ*Q3V`DR74ˀʼ>p<0|k6t5"!l#2L"$?R:!H9&>0J3R3y(0º9i-G,mܸe}n>'o;F΅Lw;¢(YțެO&Y9qx&\gl:0؆|"\b/jhj^_gвcZQˑF-1#[54 ha_
z +AfiQT
)
Tā4IY;i/QdBx$wc
Q.C6(PM?OÁD3$x`8 +3njDCF0\Kv|$MFmhR2 +.0Daxk]eVY
y^v;8ߞ%M!? @}AqVTKa3tOtZb'j,cό9#[bzl4XW9G0adB3Ht +xI(]&_K8|ӶOY]zZA6Yc#ٙ cJ!Z(Jnm:m^҆mCRPXʜ9.X!-b2F!4̆kɌ=SقvciZxt!I<VyдSw£bq;4:EOV +\&+qi8~> Me$VHkMKC֑ +6ݲzaj|YOe
f?er~L7!uz{W/-ڟa-E +uMrxMPFnL4aJDbW+& >@YB(&8B6w'Z<Em +endstream +endobj +499 0 obj << +/Type /Page +/Contents 500 0 R +/Resources 498 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 378 0 R +/Annots [ 496 0 R 497 0 R ] +>> endobj +496 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [251.443 612.518 263.596 625.554] +/A << /S /GoTo /D (hy@ltsfn15) >> +>> endobj +497 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +501 0 obj << +/D [499 0 R /XYZ 84.039 772.024 null] +>> endobj +26 0 obj << +/D [499 0 R /XYZ 85.039 666.814 null] +>> endobj +30 0 obj << +/D [499 0 R /XYZ 85.039 503.482 null] +>> endobj +34 0 obj << +/D [499 0 R /XYZ 85.039 321.642 null] +>> endobj +38 0 obj << +/D [499 0 R /XYZ 85.039 162.562 null] +>> endobj +502 0 obj << +/D [499 0 R /XYZ 89.556 138.405 null] +>> endobj +498 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F14 444 0 R /F32 362 0 R /F7 434 0 R /F34 357 0 R /F33 364 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +506 0 obj << +/Length 4410 +/Filter /FlateDecode +>> +stream +xێ6}B@QD2x'ۇvmAw}HT=<A}!%ߤLbuxx$8I2J.⋿#I U*Ҋ%et=^eOHmM,%<^n0goCo鄙D8}t%۫d^+5brJ v4ԋICϞ'%D[ݹבX~WI9Db$z/ +h +t@` 9=# VsdDj0$X].~(buω%A"tDE"JcNCXrM +wBlo^}tN+td(,EEYtxJ!R]0$Q l?ÃM뛃0O&,91v8cc2&}ʎFÒ4}j=q,e9#HϵܳP6Q첍ie +&ecU R|g6C=^}: +3j#>n軇zL +#nl+w%0PiDfD5$f!Tw% +q26A]Xϝh0!utG$s [XzܚG`1Sفm Zfy-9*шZbmk 49-1*FyMCH]u^/{n9 +[ +ױ羏Cx><|i #a߁yLw]^MtVPftftu
]Yf貞;H2wv<KllvT*Wi@ÅОɦl@,cxwww +3.PP0ei-^NGPs&vO~!co
"âǨ77AqjOMF4]ofn06?KgCEib7e ^z'о=kxbޠ^a\^tpFg-.$jk\h<?AA뚩Z0PZ6l܄# /4O>Jb,]UEs7&M[ ̆sh?S)V&i}rj)iҠ
kdBqDUG倨Tiq^NN?S;m<3,t\"@,m:kڟ( "ǯHp!><"Mdصs\]Bv E>Ք0:stUR]FPQ%ՎS'4/Kh,S! +E'{cyOk}h+XotŸ8i +r=VsetOVb0{B5Tz.s"!<<hU"g=790(WZU^ 8іp;$CM{ϤWh뇮|8
(@Cds&~Rq5:9 +endstream +endobj +505 0 obj << +/Type /Page +/Contents 506 0 R +/Resources 504 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 510 0 R +/Annots [ 503 0 R ] +>> endobj +503 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +507 0 obj << +/D [505 0 R /XYZ 84.039 772.024 null] +>> endobj +504 0 obj << +/Font << /F8 418 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F11 508 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +515 0 obj << +/Length 3779 +/Filter /FlateDecode +>> +stream +x\C)R-^RyA\[wG%v;CRdK~,R܇;I<g7$G{}_xWӋIvS(鈓HQ]!{w%}=нHn +s#;WxnNe뫷`ṐHpz=퍠%:ֽ;'cNb)>|:s +f⣞$aEDPOE!(%öF%tOPoњMx[p3=DcV5 +"uWͬ[5mйH2;[[of4t',/lIhGOјha:_u0.oc\ ՚<;\~&nOeB/^W)25ܕ5bpPhb5aԼTaTQ}$'4x+.!՟]W H%peQzlȲ L=N
x)ZMg<)TKM6F5$eܦ|H;_aÌG˛q2}M&Ypk.Dw4-z5O>QG>ҁM +84jcR.ŋ|0ݍՐxm'xv<*ݤ#k{Whmn܁(1PXYj8n`,L: +u!`!1+̴QPDL|b.^f+d<]`H
W6j>ax*u%ixnDhݱbA(!zNL9V ,9@Rf>bo":@uߏ_oMzk9v2:eAgT(,18&2/b2USw}(t!sET-f]@M{,RaP${*uxZuL.6kJUD0&_npB]9@hT 3)U$HD39@=m7C4f>wq{&jld3_ԎnEr6S;,ЙuPpQ8N +V\ +{O{ChP@WD"vq(&",֥7EA( ʽ
Ԑvdaֿ~2Żܥ[H0#5q4qu['5gnt>.94'UAJQ%IywPƬI-1.873U^MA$MW^7}ԷoZkwtp&(Hd,'Y~0q!cu{/!xEM]D؉`˳Qp4qMD[Jyf`b|:M[N +kAS+4-j@b59$/%YdٓL]j\'ӧGLKǯԌ]Hqʤjm8fx%01l^ )`wnBH`篔$:mna7 O +rK$B~nBX,Y!ĊE<:P0H֕:1-fJob +ylBS7niq*`&s&)]Mum`۲u=qg<nOK_zr^@p[r?ynť['}U%E~fO\gqlp%KlZ,b*LUIܷN_BUINlv Pv/U</~5v9~|hmqi@bBp+S")=ڻw +^z<\1z\*KLPآY~~ᗒ$dpH6=2 PYx.%SRaNJ>6BԤT#QrƖ({M^>88?r}
绾1{1KKL':$2ѻd*3v4n}(l1'ST3{wVXu + ;E
ux"\&\=S
&kP+yA~V$&B3(9La[*1)Z'#L,L$8p.SnIɘp.gIaýɣq>*'}SP]6CT?`*< +9'ˣB iaO,>83PWq,b6sG76~' ~©8Smpde)8Yܻ.v2ШAmUO3 ~A;uB6uSIŴn^klp7~ÿ} +q`L?p|u?
z`H)wIIh! +Q%^9$ +9d\)@ +endstream +endobj +514 0 obj << +/Type /Page +/Contents 515 0 R +/Resources 513 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 510 0 R +/Annots [ 511 0 R 512 0 R ] +>> endobj +511 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [255.187 473.881 322.921 485.006] +/A << /S /GoTo /D (subsection.16.2) >> +>> endobj +512 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +516 0 obj << +/D [514 0 R /XYZ 84.039 772.024 null] +>> endobj +42 0 obj << +/D [514 0 R /XYZ 85.039 279.85 null] +>> endobj +46 0 obj << +/D [514 0 R /XYZ 85.039 91.198 null] +>> endobj +513 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F59 356 0 R /F80 365 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +521 0 obj << +/Length 4172 +/Filter /FlateDecode +>> +stream +x]Ks6Wre^RdT1ID۬%(3n + +{:]щ$2Dk2&C?><BqhaP3Hhc]8,wl>I4|J4bX*k8+{Ȳ/ +<*кPp/y8\D@l-Ѫpk[^r +00Lf3FfEʛ 0t٘2VGxmJǗ*K,/{y"Co[=te4U|3i0RxEOo!Xv@-ZV}N,̎z"q.'?)l.Xs>hQ26|eGo?nqzeli^C/4 $LdP4:Eq,
bKD83w8.BYYB<3<]ۆ$G-\d%ԺCΩjּI Wm[D84V:/5%t4oˋûAKqN + +s,bj,lQvCPکCMhL"&JA0A$R\Sa <muADX" +/@mX +3i2u6of +{1ϋuHamWĐMg3hކS"$>i7bޟwCzҊ,(oY@Z|0VfG.[P,Ų>x/r +Ţ{FP7>*:\G,TexB^:'@ +nelamGFam9pPYTRxeuץPP Zb}R4b%L4m=q0ʭ~`0"+먅62v3m}'\ҁY~,?áR71mGf@¨>'f?J8W5|L
>;4L'&.exϥ<+sv;gm7mwNGO2(4>ºh,kgrE@3sv|Dl +Oe0W?h6]z/7ׂMؙ68ܻn(ً/?+Dm1DV%a\
ϓ +`]OX]N'vOg 3>ԞzC<T/-p*=kqf5Lu=K#v~͂(C3Y>=A)Io$3,].b~a
n0&DnKt'~e2_3J&xLeWEm}CVBY'JZg4Fk<\h&TX4[w _dQ._CղF +M5H79V:NL +hrg(f7]f +yڸ|p(&?a&{O=ډ?1`{4/;n^)DI\?+0wW}{Jxq9D)aM9u +endstream +endobj +520 0 obj << +/Type /Page +/Contents 521 0 R +/Resources 519 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 510 0 R +/Annots [ 517 0 R 518 0 R ] +>> endobj +517 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [496.313 597.986 508.465 611.022] +/A << /S /GoTo /D (hy@ltsfn16) >> +>> endobj +518 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [321.722 42.242 336.932 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +522 0 obj << +/D [520 0 R /XYZ 84.039 772.024 null] +>> endobj +50 0 obj << +/D [520 0 R /XYZ 85.039 498.36 null] +>> endobj +54 0 obj << +/D [520 0 R /XYZ 85.039 323.331 null] +>> endobj +523 0 obj << +/D [520 0 R /XYZ 89.556 123.783 null] +>> endobj +519 0 obj << +/Font << /F8 418 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F32 362 0 R /F7 434 0 R /F34 357 0 R /F33 364 0 R /F50 377 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +527 0 obj << +/Length 4258 +/Filter /FlateDecode +>> +stream +xkoF4.pއ=E[w +E4;֍5*cQ&2\@Q$XZ*4L:1Mbـ0j@Nl&c^@2*@s6ޡ(dc4/yw$"*SP]:nNw:divePQhߑcnNj1ObLb\.&(Rj6w=q.bNS*\:04FMαdfYZ>hp'~bu(Sn\.݅fcyy6Yፏd~mi`S#=Cyz,RÁ%y~KD|J2M_&BHsƹ^z!ch[sUhBxBXX_,Sw#;Gu~
}tb<d![ +w_x$#ZtǪ( M):6 +Lɑhgxp6(& 6 +
֏)a(@φm +efa`ܘV19lE0H߀5L#e7-m6&27 f)qkj.|ڸU!M7oxz#-T\*(̸"<-9I=ŞA}ɢp=%ܦl|NbcQ]K6 4M4+Lb|ˏrPe5L3n2<sC̴1'oExȟY^0<KFEӉl
b + +zPUR=I_BՋNHc3 I5#$I>SzES5AGvk+IDpEԺ`&"g@p`;<pPBvvjG;έXU(X3W&ByCM!0<ڻb{ӰDŽk]n۴ڴ߸WۧC;1'& L݅;<ن.< +] vb{c-f/n_,W19@? +$էr +%"OC}%P?(,0}cfГ+h}v,C2W wCY&W}؍ce?3{h{ypr":җ~uwɐl1ԝM}>/X av_::rfitJuf𰿷t
Ol2dA +6Npy&39mBk# +K\nu/jc[Q,xnD8>ZfE&
+Ih̨"V\j[ +'׳IM+=;Nj !w*Y.s__kWmu ebwU.f7(fri9 +z\|FwꫠRkINjoLYWzhs(wyzTEq;RPU~?2*[V뼢1*^8:L]uʰbu^BBpxjO=+WU^<FjVv9tɎ{ժ@WFwK_c_MVK&05m.+BPrfF9v~+݊)[sD2;wlkk_ڃL=b5syճP>Z+{4PGm)WEX鎹j٣l}yMZ@#LE8sU1}uuXhnhеŅƪIIVkRi٤<(֪M[Q+&y?V逞vve+fɨh⏰j2K=C}{䢺M +30.$+c0**QCeg:| mL!#q@զ6vuDT`mqI7yܗr<սxR|]IXW"c[G|7ִ2pNV2)`V)Fwu8 VgH۵Uv
4n6PA6_YiL ʕ:rGYqQ]`-&IT]O{W.ksR\b˭Wm"j*6Gev'*eZh)6~bIQl.[HG>
H(~#9pї-*ǥ8^xSk/sq}lԤڑ{fV7EЃ Q'ae$1vT$;(jIwN10?I M;TDD#=LXA(jD]0v +endstream +endobj +526 0 obj << +/Type /Page +/Contents 527 0 R +/Resources 525 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 510 0 R +/Annots [ 524 0 R ] +>> endobj +524 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +528 0 obj << +/D [526 0 R /XYZ 84.039 772.024 null] +>> endobj +58 0 obj << +/D [526 0 R /XYZ 85.039 549.114 null] +>> endobj +525 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F14 444 0 R /F59 356 0 R /F6 435 0 R /F80 365 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +532 0 obj << +/Length 3807 +/Filter /FlateDecode +>> +stream +x\ܶBDhM&5hҦh6F\D[]W{ΐs{~$rf4$z%яO&*WHRBbDI.WWW?=ImMl'9<^>;c:=ܾIgΤӷ#Tqdwu9DZ+5[%'O
%GIt ~>#aC{}CHb̐!j!p&Hpi MxkUE51[pt +Ѩ'ae%o032 #f&)_ʟ)%(.g8_7jVw-o,"w5,Ut'jVSѕ`B@ p Aq{cDѧQ1s]f +\S')Er$QjK4pD;Hk(G+Ex""h7#8,yL85uSbA̶҆IP+!EckH)*Kftf)܉mbE
gOd_f/xoŻCc&,!u_[:9HFIX[`k,Iy +`8 +y"4IFc:KJ;kO`pE#g3ɽgFbH剐$~g6Ws Z#!"9
2ZNqt"OFM
&JBىW~$s^*'l19++"Jm & HrPJDbz,$Yd*ÆrjqvN|}ms"J?wwRI鷝|] R_wȉW,m<O' +T'C&=#>Li[)Ӣ7qunBsw|kw%=a)~.|o*.vuTۙie0'|@%r"N7(;/e|#GWS+/ir+`qEof5vCrs +,o<BGm +rv.Ygi1Em``.ezzߟIpP+7.ViƲܗ_j/VO~2+rP >&` +>b8 +ۀ5e:ݳ-lZ}ʭt: ^7 +ge\նurZu.*CղeX[#( +Zg +~Vb1|vd[)EkPsқ-O}Tp<Ha$UIY ^.;0<SxNsU'e%)wsbu vxugs'i+fh|E
}Ys,zKB_+iX8x-:^lr{&y(]LTS8xD*w)jikITCDZ/YЖ +d:!
0Y-@\@r +[Pi J&<3*Z]eHe.xt?4$圃"*[^AP}t=>/uE>ZI>@YJ0R;`Vm%1k)vAk"RݨlT^9>̣:cz}ΊÅmS]z~-nuTeږLQTvW
CHQ܈{8a=%ڜ(c'Pqm6TX" +[HuCR-z_2 .Aa#aj!Ȳ>3B¨x +Q3]屣~-ڿc3-<Tߢs4Lm-*ӂLKB ha)v:9"omvvj|-w}>r]+# +endstream +endobj +531 0 obj << +/Type /Page +/Contents 532 0 R +/Resources 530 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 510 0 R +/Annots [ 529 0 R ] +>> endobj +529 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +533 0 obj << +/D [531 0 R /XYZ 84.039 772.024 null] +>> endobj +530 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F83 509 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +538 0 obj << +/Length 3309 +/Filter /FlateDecode +>> +stream +x\mo_!`q}U$Xtۢ{ph{C.@[%!%E$QoÙgÙiЄ%+8`ߝO;Ӈ7MbMy|L#,Mr*|&g||C&9;BOcG]Y=WoɘXQv<RGnfc+/kS:$vˇ꼖Hd89;n}PN>X)=O~:{"Bb?4&x +xFxO:ٖ(N42ͧi'<͈lٳe +"u^b^o7+WH%ZD!(v
jBS3VJm8/^ja>Nay?l(ʲSl~[5yΗů+;r.{pT$F5RIflf L
dm끻][3xwx=4hlPp9mD&U1ɡ8,E +_Mc&rhGm!51pTYl֤kD!jLc1ɾJI)REKzc0RBcRrIe:%RڴyLF%ʴEK`rM?[D_GLB @f(h,_MT QCLf? +*$[VeyuT&j:>˫.zO>-JT(I%fÞrtbHӇnk/d`u̘Kܐ2 6C*&ZFuq5ۼ;<djm9s +ߘ[JIz:YB +ŘZ +NJ
VM\;I% ;`ORC-룿}!%!b + +&iHĥOР(cQyFil/XgW*ԸQJe36UΜUU+f|Ԩo7s!]?e䔃c冔 GcGdxPxdR^r # 2(_T[M+hz;q#90`դꉢ4.S77!ji9+knf"ܖ}[UQ=]YʔfMg3M<p8p!/5VҫϔOb~76b2g'E6A+^F;aj*Ш-Jڗ.&OWkOԎ8{IߚeeuoX붹<͓nGx05`Ղڋ9> +endstream +endobj +537 0 obj << +/Type /Page +/Contents 538 0 R +/Resources 536 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 510 0 R +/Annots [ 534 0 R 535 0 R ] +>> endobj +534 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [432.264 247.288 495.25 259.243] +/A << /S /GoTo /D (subsection.4.4) >> +>> endobj +535 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +539 0 obj << +/D [537 0 R /XYZ 84.039 772.024 null] +>> endobj +62 0 obj << +/D [537 0 R /XYZ 85.039 244.06 null] +>> endobj +536 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F11 508 0 R /F80 365 0 R /F14 444 0 R /F59 356 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +543 0 obj << +/Length 3447 +/Filter /FlateDecode +>> +stream +x]s_>tJM"> L:i$й䁖3DzHT|n +3ou&4=7H`52(6pTywoĸM
rV>-4MMzFCC9>!F*iyyG9oFS\3#OLoLzHw~a.NrЗmYnq= +z03@J^h4D$|<]ߡItr/ileSMa)R>oFcM|X̲t+|}Uqg:cV3ԉ儳$sF(L|
]Ó/? ̘bΰYۇgI)jrtpwHñ$Q%amɣ{bY~*|1f'zʷ-#2̻kH8Dpe^w=~Sr4p +vz~+R/e`NPqȡǑ,V+SN&# +e/[(,f>47d'm81 gaMfponșf65JeDp
!8N]trM(w{]8+#,>"۷赣T8O|5mXCG0< (?܈%f[ Dc;`LgP:rvG>D1?UUD{v2OP6tM>V)0Qu'UnJK,{%m-Uo:զU9xk4`zuᖈ[ǃ89|ϟ
~ŋsO9v:mڭaT E2f3Rg1/]zk +y|/P_k +cħO/f[7SV`CJ +w{a0?zk{)rŷh<O"$tVi0L<zݐCQ,pY 4_:_ݦ׳xDN +b\N1-o=q"ز}{2Z?Y=|/ie2-P5
]_
5uKnUre0K'[[a/2ZU}=rSGռ4SS %DNߖ/+Ϣ%E69`~oT0Lm!'9VS?? +Jqo'.>p(Xb'~6|KUV(TPNtx t6=YmZϨv:گ,nfeAHttP +`2a6g{vj+BZ<TB",HRh)7}mބ9hf[i!x#deV|<Z +D"v"ϒo$յ|Y&=Y]4luYJ]RFuOc<ty?mgP,[wL8<H
e\$XBGo#4#7CLkХ0
01i#%Uiҭ*mQiG +endstream +endobj +542 0 obj << +/Type /Page +/Contents 543 0 R +/Resources 541 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 545 0 R +/Annots [ 540 0 R ] +>> endobj +540 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +544 0 obj << +/D [542 0 R /XYZ 84.039 772.024 null] +>> endobj +66 0 obj << +/D [542 0 R /XYZ 85.039 598.427 null] +>> endobj +541 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F11 508 0 R /F14 444 0 R /F80 365 0 R /F59 356 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +551 0 obj << +/Length 3879 +/Filter /FlateDecode +>> +stream +x\m6_! (-N.hK;
P5֖$9!)Ye{-͗H)pfH=R]Gq>x,U$)JEZ1>Lч㇟^prOs>gL҇"T33)GuQ*G,.o\_'%gxYLiMX/h$(/.>~):*#a,狿w5!14EFH3Pw}/POI +K6WrVg˴Wךdesa軅b&5<rE<uСrnZ*5G^cjT,|M-o)%2A:j/,l|M/qmNggց⍡D,&QjZ2:DF*|D`QLvڸ}('J誅_)8`ށ=Lv}ИciuM +Y?h6+ǒz|d-(@y'P?Aq^Fe`m01 +uE,#J-{i/~ǫdt1{CtVPJU@>cb]BG=hW3˟LƐ^&ۡ& +R{}*{o^?;xxmCIХ`eP`IL7?gx!u.M5H XS͂&>P}?S +f"֦hsBcEL2tϦa3^l{ +0*Ϩ0J'&>P84w>t|"gw,*_k%R)#JaR8rjb
)M'9.m11_g ,&Ln`ܲ6@f2(ѕ߁l,i&N1@*gq*Ȍ:[ +Q'}Ճ +veh[\Tz<FF#9('tG_{wudC fg՚K(qp7rbGi`djݽIa+z-!x|fIC"Z@kIt]\5za k +.$cAQJ{CAC|,Qy&[%2.~ǵVM
0dx/E%ѐ>Z0ƬGKa1J^ +\S{pG3cbHVKkgsZw6RjFÞ`w)8Z&*oQpW@Ԃ%K2vύErYE)̗F/pkب"#eۙymwX+m=|#YLԸ竇* +endstream +endobj +550 0 obj << +/Type /Page +/Contents 551 0 R +/Resources 549 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 545 0 R +/Annots [ 546 0 R 548 0 R ] +>> endobj +546 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.538 312.434 310.737 324.389] +/A << /S /GoTo /D (subsection.16.2) >> +>> endobj +548 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +552 0 obj << +/D [550 0 R /XYZ 84.039 772.024 null] +>> endobj +70 0 obj << +/D [550 0 R /XYZ 85.039 309.049 null] +>> endobj +549 0 obj << +/Font << /F8 418 0 R /F83 509 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F11 508 0 R /F80 365 0 R /F14 444 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +557 0 obj << +/Length 3731 +/Filter /FlateDecode +>> +stream +xk6 +Aݚ+Dr5@Ѡ_ + zo7?^ +M|cι(>}dʋhGwͫhrBå^ttWSc}W%s9mf>!ԕKdH5,/GShqt\fDϋnB0|;;Js=R;r'EÒPjE@{MkPJ4Nkr,vʋ"Ś0 +讘Fxg*I>i<@xxe9N_-rp,ɱx=Ko1w*(y\k\Fc"U[h9nkIn c}#٦*[IF[}O +1Ļ:&4%gjA`XhT"~c/)p4ֆ{Qn;&<4P-2`Y= +Tӂ8 H@YyAPf}>6._}1-WWppaNQ#P]9`pzm%pNb:R]#@dnUTƴRekSx +5;//XMK&B"8uۖ%}cV9s#qEMs8gf8"Va!j2mE&5.1wW&dl=)F!zX-b#е&Ӡ7,4)h R52J ]qm߉ϢE{/+J2*',k74>hb99"DrXil+/\t.>_PFk:B;(i0n2`l3il)hf0Azn> +w++<cǵ{@kQVp[qH`C`űA;'`ܰOBt`fް>XK*"!T'?ND\+>zCp&=8o,V!:!7P= +^;jN|`@cZt2%q +j4"n}\YrU\Yr>5&_Ud[2oUcAgRbi
MZ?.|PݢpwHk-aUbyƁRd!R@Pe"R]C Z]phmo)̅<@*/U&yk̲.YHD$jAu-Є6<ep.I$s_Ua]U1ZV\24uN]NvA,Oaf*"Ko90Nj}\$>xjo7F +"Xʢd< uT-."o<q1N>O[Ú}(CK |<$YDk9OyW:aAҺf9YkXk^P+5.ehn`ޭ&rv aN:Y`GRyAuXBA~< +{!7L#aH=iC!rK_; +endstream +endobj +556 0 obj << +/Type /Page +/Contents 557 0 R +/Resources 555 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 545 0 R +/Annots [ 547 0 R 553 0 R 554 0 R ] +>> endobj +547 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [423.252 707.163 486.391 719.118] +/A << /S /GoTo /D (subsection.3.3) >> +>> endobj +553 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [261.914 137.754 325.516 148.879] +/A << /S /GoTo /D (subsection.3.4) >> +>> endobj +554 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +558 0 obj << +/D [556 0 R /XYZ 84.039 772.024 null] +>> endobj +74 0 obj << +/D [556 0 R /XYZ 85.039 87.844 null] +>> endobj +555 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F14 444 0 R /F83 509 0 R /F11 508 0 R /F59 356 0 R /F6 435 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +563 0 obj << +/Length 3694 +/Filter /FlateDecode +>> +stream +x\mB!f| +!À0}^HJCiaBNWs>btx_ל2V#won~a>]J"M0ݼ}O1&xg9iM$sHlXf5^ImX`~Df +ܐ[I$<,`)֚<0HGw>5CINwaqT#b >HCScTNC4( + O#ҀɅ4JYؑuϳ>i?JI>va>swz^1^KJDv$tW1LR5wLH}iRvr}9PX2 +k$hddgr~TI&21 EJm3tĆQiu +QoX8ktV'dyVɓK'eKoM=B=FUȤEE٣J +`d+_d_Ѯ
"Tā6ilc]2h"tJ46M+b$DFv$d"ThYA^b˥U`FN&3mԿ%"?8_0O*.Jӛs +X|'ϴ}HGNpH@+qy|r +VH0+8[9
utwTQdȴ=`1D>qYjeHzDjRDD{1v**"78;.fd̚h(|T~>;f4jy{R(36vfH]:G:j0gf4^]1p9tVTI{8L˺j/x@iTmyt1f2]c +KWCiE֞pp14mo3}"6JQ]Q,<!p7UfeDOd)xѰ/[K< Zm?ø߭-X
}_ŒDAeǾbF1j<nn[FFDq5skb"h|{oao&Mj]׆u8IW,!S] ;E,c\D`(9Xi$\Ś>ȉvQ-51 [gS&8nŃDydƇ{Jfi<?(edQx+FD4`qSŰ3{iЃ;Jv8E[E${vvl +$ΘV@Xwa(sJ36{-<Z/緳ŷ8=ӄ6~V!֨PdJ6mr*?Jxyz}M' bJ8ƥ |ob_l6(sqilJE5 +a]rWa~<:833$p12kyidPu>m
4Ldn? OCkAc\D8Y6܆j`ۏ` m8R`j;Ez-gvG:lHovHw?#Idtqx{]z)dC,='>zi\zrSbꙚd;4/V{Ah_=o]Aft70C6Onga+zS;FكUn6MϜ.1}]h?>Uطri +7H+(,cP0usa' mabǠ,l3֊HKfCɫA$òz>\e[MQY=/jw$bG? +*TS̶1<`"qD׳UT5fe6=ۖ_rSCq'S<ƃ + +K6o
V4hg2w7z Я˝BGw \؆t9`?0+<cޔEaV\72țJ\KpayU/X&pvs"paZ6X4'Ba] +>Tx>q7:ٺSnWxo8E*&L<U]ͺiR|~=q+O65.録w ߇B[=p|Ap.|]М4Ka2ʌFZjȔR.Q
Ea"O6F+Խ6ȿ\OZM\}~ +;bj4ƥD:0s^?5?u Dx$ͷbv|?܃wxGBKlZSU0FvտֲȸĹusX +>lpLk>nJ 5?`j``"rMo I\$t?ڳ+%~'~R$voLw/|FI +endstream +endobj +562 0 obj << +/Type /Page +/Contents 563 0 R +/Resources 561 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 545 0 R +/Annots [ 559 0 R 560 0 R ] +>> endobj +559 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [223.078 168.548 286.064 179.396] +/A << /S /GoTo /D (subsection.4.4) >> +>> endobj +560 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +564 0 obj << +/D [562 0 R /XYZ 84.039 772.024 null] +>> endobj +78 0 obj << +/D [562 0 R /XYZ 85.039 403.283 null] +>> endobj +82 0 obj << +/D [562 0 R /XYZ 85.039 165.024 null] +>> endobj +561 0 obj << +/Font << /F8 418 0 R /F80 365 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +568 0 obj << +/Length 4298 +/Filter /FlateDecode +>> +stream +x\[r~_a`D5:'$= +&fczyS{RwbNu4"H>'T@j=75GZ_tX.m!qwq^"CfO?E%, +Uf49fû#!Bo!ѰxFZg#9HKE/vIÕTAD(b ie1iQW<[sR6):;IqỴպHݝa|6rnpܺ<e0
,P6ec&d-[!%]^8&B؏dG|,M^ +e|e |-4V,݇k"J&KxG<a{xRtMH&Lzn&6w Hɘ0}`nW[Z'ؼ0=4f,߈.6ف%l:6a4/yY>]K(Xi:i̍ +9dpKaphڻ/hܨ/ߔrcי)S3,QF_}
?j+4݇&{pt'k#%p(Hܝ>MB&}F>p_(7,̅@"tksG1l^t;v?Qь̍BɼhB<PBbo^Ga݈ +cFm#;\Y=`P͓ۤΪ,dfYU&B)*xdm +t%#eLGi|lY;y;07E2]e8EPAV̿?}KYX\@yaexj.3 dHBC
*>_b>+5mҗ6Ofo @Fʹio!Hg+hÿ#a;iG +# )F &[3nf\i)j^|I_'9C-]H(H/x!S!S}i,vW(C4i\BV:B-e +rkŤ"3od&^$x~:ňb0e};Sx3ƚ0ƄDLbRB?bk(<F?|R'}8#V:CΖ}DKR?rƷ?_qgU!RH®f[{d]gu}7:64=poct-lΰn*ЁG~M:ǠK7āUPbK%.%I|;c^lx4d +E6ڀ'0}jUŜͳT |8*iBl_wupEG I\1vp8FqvW3raѫ1밿:B`_7NY#j};`/m/z('!_7~?dtCR)&>"0U*;R]rGL5|a!|UNyy9`06d=o{es?z:~gQ}k!: gifw1;V"UC
rHgH/@o>uNOi*xp۞`wl+MN"ʣ80ȇAˤʋW{;[v + +[f.u83'ZqDG߂9,sPΞO?Ǯqdt':8^zCTRp0E!bu- +wRl뚞z`xIsqHlKD3TFӅA[BEy_@kIeg<TӁ.YuE
X/KZ
&jБ;Էp6<w dں@_fNTnciG2x<8eexetyFga\eM2]B9UcXI`~+䢝-><>/t9jMtim?5U̅EQ,`oܣqCީy3D#dP)d,n4uµ8Ď
L@Eg[N8ؘB&NZJ{`ZoA$z#!#_ponR;$⫽8,P;{}0& ?߱kpK4x
8>|[ࢲU"TZ`
vG{J +[ؤeBG qT6Q/=[;z Crl.(,4k-Lb0av +,VySYv!q|`]`L?<dBLRsԳrlMZ"Bԡ+八/- +X5K^jx/\>8c77& S~9A[D8s"wA15N3|gZ?`(L7.{훏i臔tE+.RH;gO8}إϝ8 dwG@`#PlW|mbNMָ33(`=l*gnbZʥWL}bMNE&12o%xi-0"Ї1bk#cEADpn<W'a3ƀhuF~S<:D9cם1C>` +9ĮIܽM5#oMqcҟҔ>C X|cr"EkKf/C_~)l8'sW#0梎GRաbytUV>9l|3u,yHo/CIEd9 +;wsgvngv ܸlgx*tCђt6Àpa7'YzR47@g+)q]='?Pk^MC<6 s/=8HK[SѤrZevˤ^3,f1ck>Bң2MmO:1WӲX% nP6$L + d9HMvnVNKDfӨ& +5yn +ъQv_x +PMLSĠPzEzÊʐSs{fdf4xbYq0[uZΘ +M ֙kq<s?-,njѕwfB7~_gCnoɳ/疬~@)<GC%ߙ2hxg+09^8&9GP~_Kv$)Zh#=sRgrGƭQ^<.K%v{\"xO@B&peLXjq(iiWuH ]v$_&FI.s +40hA/۟kN~v҅Ytr#pPtCTHB:A|@%}Z<gjm.0}
(O%DqCG7Rq=ȏQǏ7ɨf7ge~'jlwQ,xY\k(PMxE<%f{h: +JǤ">,ֵt +endstream +endobj +567 0 obj << +/Type /Page +/Contents 568 0 R +/Resources 566 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 545 0 R +/Annots [ 565 0 R ] +>> endobj +565 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +569 0 obj << +/D [567 0 R /XYZ 84.039 772.024 null] +>> endobj +566 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F11 508 0 R /F97 445 0 R /F101 570 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +574 0 obj << +/Length 2928 +/Filter /FlateDecode +>> +stream +x\o=i*/l_mu^~FJG&Aa)C6Fd<&QHOKt{ৣ?M?KO!;{# +8f*>rՌw~J)1~m.Z7WatLIxo]*&/鶾[q|414
dzas\K/ZP»-/\xL?H}Xx)&Wy +&J(-fZ? +΅9MQ߱WaqzJ;8 jP9b9£!#i6vXDž6@u-jaaN9V=Ăub6>*djWkè{[.ԭ
. Cm-uA.vDqṔ@#fD( +|&bnW{Ƹە+gsvH6roå+^?wdn]08(`<HqQqK?|y(PgT;eY;L2OB`b{B +~={ybDI3myi7?͆w!{[uio.sٖ)W#eA!c([F6y9ocM荐lh_̒04Mu|.Vi>8dPd@|H#2\]C_'ɶa/>6x<< z#8bO640bjR*\m2+s +A`06>L/қ]+κ#*m2;)h<+>B\5C&?x +h<{ +oԨMr葑mx
MO}>J}x2oMRkȑ(m3z4LG{Fs/Dy,)C@K ,!K +9B9D ؍<8)sANS%$HWL/&Evn0w0%AMy#DI +endstream +endobj +573 0 obj << +/Type /Page +/Contents 574 0 R +/Resources 572 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 545 0 R +/Annots [ 571 0 R ] +>> endobj +571 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +575 0 obj << +/D [573 0 R /XYZ 84.039 772.024 null] +>> endobj +572 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F11 508 0 R /F59 356 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +579 0 obj << +/Length 2253 +/Filter /FlateDecode +>> +stream +xŜko*Wut)Ye#6E"Hsq +^/\-u Ƽ%6U%=xRQi<';\]9 4@=i +:NfRaP&[xS +n6\L_?Or1_?z=CĂ&XR)q6ޑDQH߲l!IKl@m@)'p"́Fmhѱֆ͚r=_>~Kf +Mg`(jwװ-pfm'~Px閆َ'x6wwv8y|!ͥ9T0) m!)K^7ncq `lc_
/%כm}x}#υ_'ivm>rzfb=r9w3@<9L9pCfu!Qn>4SP:[݄a)xdԭ~N(r35
T6mAb`_biW;ˡVn߽ˊ9TT'g,IN T)P?u39nmt R .<kcUi4HEܨu7G.hoZƿo;Ro;9>mP>L,[BK|_W9lo}4u-_ST./4*)`Td_J +JBFFo6Bnm_Fl<?}2\CH>u eiĵ/v]WAӯ3ra(s +uv0ɴ +Qy빻m7(PR܅ -JLY@WR(g*w}[bm]{:Qs)h.lhcj 1<̛tzk;Ώ]oV.Y4;/+~ Ƙa%]fz,7ۧذ-8B`c}MYzKi + E0PLK7Bcy㢱\2Si5bR`!Leg[=^m~~w@ +x +
!-OLN*r8c}d4LS`墍,&/?FQͥ;qЬWI#@y昞@Oӣ1>RyZw1 =z=bT'rk`[B=8&0h0*%&F +`CK!F\3[ +[|֥ѥlJS sqE+QC⳩KxVKWgT
!EX ݳYɍܴ:byoԩXt:(R9&a.{ίSgӚBIЮ1dX*5 +j.)D +pQejMz"CכĤZTjzYK0[nGH^<dlj.$&!Bե<w#lJS $&Ѣ>C=!߶F/[dxA|&1#u*9)etsߩ&8œ3^f*k=cB-a2?x_R og?L
k3+^?@_%l%}2nM>o]FW`g]_h +endstream +endobj +578 0 obj << +/Type /Page +/Contents 579 0 R +/Resources 577 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 581 0 R +/Annots [ 576 0 R ] +>> endobj +576 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +580 0 obj << +/D [578 0 R /XYZ 84.039 772.024 null] +>> endobj +577 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +585 0 obj << +/Length 3724 +/Filter /FlateDecode +>> +stream +xkD +9Mn#@'{`ͮt&qfM8ЊNU؉azwuh@p_ +!e턛0-_Ǜx66|;Q*W&xX#wI?Oxǜ2qֿ~cuED`{xC9<.D&x^\2$ΗOw}@F1^D d<0<b20OKe*<R&0,"ExF`~+4;ыXC0D6~<^%ryK^ɇ_nvfo1{LEZv<bx(yj;Ȭ4j?qo,:#Pf_4}9a>Od +Q$_3!lrth}2}%5|+S$M~Ļ❑Jr5<.!ļ&~(d}nq,DGˣ|UD|.!l|8efA.f*J^fJC}.sw/w0 OұhbpXaPDLro`$0]PEW
DL"L9))p߰X`,"BU-C-EDjLkWJz[%Y1c{zp">\Q]c``43I=xBAu%FxxupǏKKRF#"a< QbY@-` ++-LR K\;)hI"*%;䤀p$ IQrA +a +EڥV0ݹ
DEe\sc^xSRi8rE3Ne)a`#m@LXxDEyxC-jQ{EWV*4NVq/~W]6+u-/9Y82aXd +~,mRTw!Oʑ5>xL*6j7]."M`})z-nb\iW-U3CA`zܬ(904R{ BPs|N!1b$R +85{eGԁnJxz>(bkn f`"`&j 3Ne%XXcPkGJCܫx' /"~*k +JHU)< Ir/jZ_*@xobY>ȓE$pV"|V0Et_N!r5G"-?`8(k_ɮuo,> i&וECOϤ|MOy3O߳&0+ у@2<±]
^nRvuYֱ[t]^9QvuI].LCukN6q^OG]A(M/v,dy{[icD2K<aCd=6qE.)]izJ<}Gн?1)&]yFʌ +u["w'/Nl"COtRe+aO{љ~Dl4|+r.SDBTlޥ[
cupT8r`,WxM6qXƛ[#lrm_tL~H/B~4}Dr I{فT⡴[&q\ԔsG3_Kseu'ۍ__~XɔQ5%_k<O3<*r7$kR-#ӓsL/q 1[ɼbB! +) q9ed-<G%5UWDՙEU/ +,s+HuLcq6+oCpDT'l
m
odζ/J/~b+jh0VӒkJa1o"
-؆X\o}u +|磓L:^Pb?/C'YmQ2+\a\S 2YzDThݔYMM0˖۪dI2/_<Ndy +w)sM;Zu[ @-7`vu8٭}S4UK4cg ]as%X,.mLaQWnQs!1l[0 k0,p} +6*U
ΰoZCK^7ʨcN1#T +Ils-*QZХׂ]:rHp뱁<Y}'tM +g DEe +endstream +endobj +584 0 obj << +/Type /Page +/Contents 585 0 R +/Resources 583 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 581 0 R +/Annots [ 582 0 R ] +>> endobj +582 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +586 0 obj << +/D [584 0 R /XYZ 84.039 772.024 null] +>> endobj +86 0 obj << +/D [584 0 R /XYZ 85.039 579.428 null] +>> endobj +90 0 obj << +/D [584 0 R /XYZ 85.039 516.178 null] +>> endobj +94 0 obj << +/D [584 0 R /XYZ 85.039 177.781 null] +>> endobj +583 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F14 444 0 R /F11 508 0 R /F17 363 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +593 0 obj << +/Length 3986 +/Filter /FlateDecode +>> +stream +xko\997 5E&q1ۇ#0;CRZiWj臻KÙHDID~ϒ+ߟ}sy;YbS(P"QRFU|y__x.8x9qTz~HoΙߟKwY2?w!G$/\nPַgP((Lή~>HXFPG$b3aҵ7лHpi M֪zn,a,:h]XBuHA0
a,$v 6` +1@42sB2OқbQ/|V@үLʷe6/& +c+\1jO:ҜmiBf'J:f@`8'l
ג0zVW8=͑ɒDq1 +Q}bpH;-P PJ +Ux`_op@+x8E +,?[iuӲ}Ul0R1 R1W4NUZ8b0aT}]я_B7ޘfUh09RM \PWU&5qި&@*LJ +& z۞wq]5 +4ck7,-m(6NJk/JN>_+r7U_*>fи|g~[il|z硽wSPƟ.Z3(xD;DbHl|nlvak9OLTp>{\-R"\8-t8}ltHA`
jQ)s+I ï7pm^r-QuwSM@8/+~xWߧ-Ʒ=wkh0Is~ +zhKS +pֽCx/H,Fc+X>xY``-/xgQ asoT +*eCL>EH;Qob?&EE)ZRl)lKxOiQ
G(9?l`2 +fTi"*{nI?i£}iG<uU!-KMlxD_ci^a^<v4lo= +0u/TTL3A#3ҽU)0&-f&[M)x.]8WO#&IAk.|uזWuA{/n3K}.*s|O@_~l%M>ֲzW._je4n* +p) J帑WֳۉaV=WA)^LyV,~Xè0kC|
:)]I2iQōpXYdNNGA[2;>Č߭pvNYy5aGZ0s+,0yQ +!
W +endstream +endobj +592 0 obj << +/Type /Page +/Contents 593 0 R +/Resources 591 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 581 0 R +/Annots [ 587 0 R 588 0 R 595 0 R 589 0 R 590 0 R ] +>> endobj +587 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [246.725 520.288 309.665 531.136] +/A << /S /GoTo /D (subsection.3.4) >> +>> endobj +588 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [482.645 164.194 511.232 175.319] +/A << /S /GoTo /D (macro\040line.179) >> +>> endobj +595 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 151.962 119.323 163.917] +/A << /S /GoTo /D (macro\040line.179) >> +>> endobj +589 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [159.188 151.962 226.681 163.917] +/A << /S /GoTo /D (subsection.16.2) >> +>> endobj +590 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +594 0 obj << +/D [592 0 R /XYZ 84.039 772.024 null] +>> endobj +98 0 obj << +/D [592 0 R /XYZ 85.039 563.08 null] +>> endobj +591 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F11 508 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +600 0 obj << +/Length 3849 +/Filter /FlateDecode +>> +stream +xkoCp2p h"M +&r(?vݯ@=vߥK/nV.sw|%[+,-)o<֫i;,/`)t8bv)\Wʋ/B'Ν3v:aҏ +.ݢXd GCeq`caO!. +`1 + z0qe9`LHuagՀ4?y紶qtmx)Tr +;EoJ>%t½=%^#}UNm +Uiԅc=p@qFęQb5.,~!`lFǝ}1 q!v+ICed06QqL'E`e@耬O-i<`צB +֪[x=4/55|X#74Tiv)t$_"\0&!Y3t[:Ak W@ѼC+B%d$C1Ad@XW6v/&]Գb$Q̨%"y8'hOlߜ^\e4-h\(5Ab AFu0{<FW<Sy)0+V@1歂,j@rقzR@YD @OT2) EehAŠ;*␊R6yݻ)g(Csj+]R9N^P7 +:+}
Pȁ*8-r<^@k@FX{km~ZZ6lwou0B8Tt"E<V<O+n
h`kpk{d̹粩|9]7p'OU2.+e(բ$l1mL WU^QQY#Ҡ&O.DHC +k8jp)a:[ǵCgF';4啯&mga ̱2y0*DF^I8X2Jۧ +|ZNϱD5% +ݓ}yq߳x9 +ÃV*RW$}H74 +*#!摺Y5w$g$Iu Cތ/Zn~mwiJh
l+ +b3@S㶸iߣkθћuJwq|xKL||0o +oz !$>ʣZl,Gq.1+v9^}`[iK` +}3fIO_)>xeV,vn:v
ɩSPüǏ%:ou<'o[grz݅GWH>lfWo<K9#WOqu3M]xɻVGzu!$PrdAy<ȓ1r.[Ռ?_u!M';7ag7!<[:Y_?g¼? +zRqB3p~(c#XG|SL +MTYST9=B!o +endstream +endobj +599 0 obj << +/Type /Page +/Contents 600 0 R +/Resources 598 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 581 0 R +/Annots [ 597 0 R ] +>> endobj +597 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +601 0 obj << +/D [599 0 R /XYZ 84.039 772.024 null] +>> endobj +102 0 obj << +/D [599 0 R /XYZ 85.039 609.086 null] +>> endobj +598 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F80 365 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +605 0 obj << +/Length 3684 +/Filter /FlateDecode +>> +stream +x\Ys~$(HR$h:(.Agkwck{oo3$%K$۲\h>܉zx8p8\Є%{`?\o~6qi7wbi͉V*y3Mގ<dxE$oBl57e?trõR>iaFn?/QGI6_ +9e&b_\"e6d~MDŽL?'q⤀,ߚD(b)"UDg@pdb8 +JB*ZE0aPvuuN8hBF BU6_~c:{[4{l+B5^CV ֛?x\ew
R8YQ"E{m҄!MJwAEJs>,_ozCTr)v8v5u +e +E3l>"M71#fxHlP+>Z>$# KNT?-hXUː^4(-LImVg%ƜioO_ÇRAggXd3(LxD]R9)maJ&
W>K~|M!SIqOX*FజB1a2^|r{smuڨ t[ +ÉlDž{":~Z ǰwQϊ"'o $<
A [( +-fw8+D5aCOQ謄%h[S`#z_P.(~|'Q.2ЮA<\
tZUr<j8A%J
P + +Qu@9|W@['尌[h"ىsە4sE2V̵X#Ԧ聛ˬk:3~P7A̡i- }!GA\9Xpjcm|8Ki?jY:CI.BԝCpqz +iPaCpp9"ݧlxbx!V並Їm"vvfF5&!4u;Q+K,8]1*ga7JYv
'8~p5&*7MR#i.4E AE
^aw=ńlhXCy1L1~@Mod~xx P64A*!V} F_TA\o2qP6A >u%[u(㤗bkUnVOk~ +`i.^]i +i1=JRBaа/8="#ᷖr1U:!ڦzVk^cVSgK8&:6Ceh.{hΌ>KFia;t-U?N&zsBZ +% &\$A|o[3k.{ Ս1;nLf4BJ\p)]luw +?<esop#kwNOݒЅU-뭜7;Sɢ,zZ kiQ&BGܶ$|>Yq_/.~Ӻ|͞gղI1LZ'=盇։)j Y(bjm˴qrѾ}]Oo`E"CZY'<}, +u;ߓHg{h Lwo1UZ9߅Bȃjː 4-ݬ`Cу?rF/6C*(>ݭiΧQ،qRSGC;kFfԅU,xK)hţK(>Bn9g|c7A&,WIA9E`}M!몤+3J*S +Ckȱgff&?.b$3V0'8~ˌ#K_ +C1d1?i# +endstream +endobj +604 0 obj << +/Type /Page +/Contents 605 0 R +/Resources 603 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 581 0 R +/Annots [ 602 0 R ] +>> endobj +602 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +606 0 obj << +/D [604 0 R /XYZ 84.039 772.024 null] +>> endobj +106 0 obj << +/D [604 0 R /XYZ 85.039 291.184 null] +>> endobj +603 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F59 356 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +610 0 obj << +/Length 3405 +/Filter /FlateDecode +>> +stream +x]oCqq +6\,++
{gvIVJF>5;;.wG7Qth"Kb*z{IJRV()m:}~B
OEs>Yl>Lًz.230rܤP۩{i}K%ocSZ!qo/sAGŻq4G?G1VGHXFpy IiCb1VHfd$6ҌUEY¬):h;Zc^Q" +c$7c쇇dyHmё$)Gz~J(1jA4:Ҝb @\4 +"9vGi@`Njxl=CU$5#Z +kp\714XܵYZ28UZt/zt,*MgNQi^o?M +կؕ& ve)ь,v"t?,÷'{x>w`\j8B]M5+uP셤)5x鉸&ґWO->L_J ~@meh%B `<(ǂppP'y|i.N/!QM)κZpbGtsO|PH +9,R|HtYo Yta'wiOCOP`@,u*`@poҕ2{LzZd +ҟ>Akr|鵤5$RlC}_.b%>O{W1T Bs +L H2zcX!*bI[JJ/ +5g#coj 0 ldR٬,'cf]9]i딅Ige +!ea +rIɊkcYY٬Ox~b(\OZ0]5lŁ +G?`'fϮźҗ!Wa;ꋰ"+<e.ןo[/.V +Vt]67M
<P +a1.Ek-J +T4Yelmo1w+߬ +umEw
I]f +Jv/<ƃ%1-@%@iq>H 6_6 '|]O>;8gV2أQ!fr&8m)8'NXjvCAxxK"«Yz +fL^ή.\Bsw4^H<S ,:n &T^@Uc#S1-.w.J_1-2s⟦/S^5EM71n5{5BvG+}& +ó[fxф:VCETԖP4`lcKK8$`E`^버>U?
'* qR>UJU)8YfLC]J\5]}Ph(ʁQ~B'&/4R/k냄K` }kϖA(f>YFO12H]Q&,wU|}'1WjuU8x^ +W۫ +4+o9W=ɝυ`>{)r_02W q3*53oՐQFLz\/^6-=x +ʑvVx<bhBA] +K; +OL'&q: +g&?)CVޫ[7,+FƳjM$S#Vm&LcR?x'j +endstream +endobj +609 0 obj << +/Type /Page +/Contents 610 0 R +/Resources 608 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 581 0 R +/Annots [ 607 0 R ] +>> endobj +607 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +611 0 obj << +/D [609 0 R /XYZ 84.039 772.024 null] +>> endobj +110 0 obj << +/D [609 0 R /XYZ 85.039 608.035 null] +>> endobj +608 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F14 444 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +617 0 obj << +/Length 3968 +/Filter /FlateDecode +>> +stream +xko6{~EoEq{ukQ.P#'RΖ-o_C"y9t
p?Oo/^SY )JZ1דw廷_[`+d^<~dzlVE?L>\J9oWzҾcd_^a{m^匤!J0G!ё><@Hb) vFGf3`
E3\>yHnC*96L +ߙݸY={fZ%̭E'$aC~NC&8{Q&1~D_`Go>S" +%)|t}Ք{ãy*C$۔-HIT#8Rhi\ +(RIEE-aS0z0* 5
+G,"P$ +;A)d +*E> +E(AU5Y0.Wi:WdVB_gg/O_
"X<y(jMY<u 2+u, +q&Ԛ!dY&~@iA8caGHU
!dg"d? aed$p ++
Jeo>QA}H)aPB5O4^gZ7 +SCwu*b/LW؋!}Ǭ |qK4p\O+A@2nLV=pT|z̻O}D(z4*bTect}>&Y|a*X!Y'j,ij̓A4:FQ0#Js +*c_~H +W1߽q&v#MzUn/KK0\v +իhѸ&q4arx=/åTY}zm/(ѐjoTvMM +2.Ǣ3k.XJ6ˬϲh +Z>Ky<"ѱnD$Q]QEt&JhWǸ(Ձuy<dt/.$Y9K^X,i)ep- +eSLI$h?u!{af},.Cᩣ{ tөk/Cљ=܄`fCupB}0yY'+@!hWB4_, 2Ԛ><{WzeD?-n+r6?Bd +1$/<ۏ<VVx-mI[(Kډ2A]cܵ]csn츶}xT0#a0Z2`) +OU?¬w:̒jU8B3s7]I-UK"_;B !BCl<@^svqIqU<vTD]`as}: +;1[̬_zьq~\{C< +ܺIỰ;'x5vdb;ցw@cD5GH s/Gzu1/_=n'h+v"<%<!0/s1MVGC-<I1hkhR ! EZsM50ӥD+@F&p힁 r+gao*]bШ-ݤM>]/p1hʱq``T[L + +%iYjZ%Zg)hدTP*(GUY),d_
O=*LrLY&U}rB]Ɨ֩gݗ{ɯ/= m Y54&g)<[F}?7-2i(FA!(olbSKtWmZOۡ "mPQE{C, +endstream +endobj +616 0 obj << +/Type /Page +/Contents 617 0 R +/Resources 615 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 619 0 R +/Annots [ 612 0 R 613 0 R 614 0 R ] +>> endobj +612 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [144.311 199.751 206.547 211.707] +/A << /S /GoTo /D (subsection.4.8) >> +>> endobj +613 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [237.304 175.841 277.543 187.796] +/A << /S /GoTo /D (section.7) >> +>> endobj +614 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +618 0 obj << +/D [616 0 R /XYZ 84.039 772.024 null] +>> endobj +114 0 obj << +/D [616 0 R /XYZ 85.039 462.651 null] +>> endobj +118 0 obj << +/D [616 0 R /XYZ 85.039 171.663 null] +>> endobj +615 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F11 508 0 R /F80 365 0 R /F14 444 0 R /F7 434 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +626 0 obj << +/Length 4338 +/Filter /FlateDecode +>> +stream +xْ}Bo*Rv*vb6N/gYIҎ7{)2@8dL|6]2wxs+7a&o'3n֓7lÛo=0s)tLi z|.fMϴnd8_$[w9Kz-{ 㛻دW3vX߽!,7Yo'az`^Ih&͜;(7ż76s56>2L +v$O<sGJ2gU=80E=+?'rG1c&`ؕ
09.j8;gw8F/!})$%F~"rxqy&p"h_@Kczm;&˳.*OSS\L7?;Bf K<,nO7H*'NqPUĺmlCmiZ}s WlI
-Wy6vӹpwMaW +,J,Z]9G-W +qiUpfy LEsMg-XYYy)ˤVWbmDX{R4 b\V24s1O*ũ0_r-'OhBzJb*S+ ]UЯ;OtB,S9~QEH|@˵.O,P2,&s2jmBD\--#Ub_ϮvYfZ-l0ţƢXOpgj50HK*h+ ^`onl҃|g ˭Jn. X0sPzE2 +6 +V"Y6 zJ:sxZ[ ʐ(cQ +E'ƍn5k1MZ[ucl_eh,Ee M@S W14Hulmu%pwZA֚ČvD-\q?}DPMAa=8l +.~]UnyEkaZ64*
z ̜M4쨿V:t}qcx:djuԉ2뷇g813ѶC#dR|_:^#@h [,ݐӈ%?+ڻȃ.vsg#:W-y!L QPH}
9iI-t|qp12Cwb8}Cm Q@CQMC@G!LrcNq"JuPz9pBxF|FDP]eP^{5rLpҭ3GOi&$M<[\0ܾqϙtTHpP$|O`iccwgF|L*zKI6I^5i qef)'SFrtsPXbS4GYaσ@lSeiIz31< +
F: a0:koiFa$]`ã>'07'CȂG nl\NQv8@_H|v*ț\E +|ISJu?_
PﯺoiF" zi<'i,oV
Ʈjo8\ҳHTe/@M +*X'(ԭo)I#&g|=Y(嘄;Xx2FzRf{d$EIp:0G`ژ[mM>{,UGwMSJH)qz +8:9,2:]Xx=Y&8ң/ +DӉ +OLa805JɘXu;Rt34i[{aQ$JNLZ<s>x#2 +W +DT:Z
K^u#)k!0l74=#|ߤч4|aET*blDU?phR@i@eEx]brQ-.= VKwUͶ IBq$W}{$ ToZJg_k⚼sK63<^(9( 2;w xkh+}v-;p.#jMS vt#uړȦ +p?eXFi4jQ|
⌠6A/R$\|.ѴDOod^ aOAOvS)3ޑ~(RZe$>'{; u(FbsFOn +mJ])icZ\@%6NtQl" 䲊.]y #ϴ1ޘh8% +K->ѽyq63PSejHǚCh&Ւ
<rG${V9yuFw26]"?06lӬ}us\|{Dd|B%^B.
ҪNHLA%,W 8(?( +Ap49+iAp>5Ό +nvLqA X(=cXF4`ӧ@?* u#XpM4?uw)U 1Xa2 +endstream +endobj +625 0 obj << +/Type /Page +/Contents 626 0 R +/Resources 624 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 619 0 R +/Annots [ 620 0 R 623 0 R ] +>> endobj +620 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [463.546 535.344 504.591 547.299] +/A << /S /GoTo /D (section.4) >> +>> endobj +623 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +627 0 obj << +/D [625 0 R /XYZ 84.039 772.024 null] +>> endobj +122 0 obj << +/D [625 0 R /XYZ 85.039 472.862 null] +>> endobj +126 0 obj << +/D [625 0 R /XYZ 85.039 158.31 null] +>> endobj +624 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F11 508 0 R /F80 365 0 R /F59 356 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +633 0 obj << +/Length 4206 +/Filter /FlateDecode +>> +stream +x<ko8W +aeb*k(s
KP^XMQ#{7bodq]yu&:ٚ|0;l +8$vG-"#/~g/֩/f
T/Bٲ0`flD;KqV^5:'eݗ'li=1 +qEew&( +tp*U=$xZecc
ܸ4'+y2f|ݡ=W@)Zop;S&ٮsZ}okMVp\2!K@_a 7)J|fIY;W6/i#G;_%P1Q$=7TgepdDm_qFh +l4ʫvxU^8\O}aoZTGCk-WO1<i'KItxھqq{^ ._j('q.Qyih3]v3LEl%"tM!BB06@_L4z)Ui-tm +=BzAџoN$6њD</}` +&s;0gʸW˯aGv]R%UC̗Jכ*V*6Oe@Ӹ@X"t-+߲NpG_'[w?5K20@煓dxS܃<"y܄@hruZ-uvD +Zi +T'7brAmLL8݉&UAKb&0 *:&ι0PPJ~aRة` + +ⷧNOCsMh'[:W1DŽ.zHw[Iq[e_}{ܤeB\}Fsh`'l 8Bp*D.~7@IT<CT@D6f"~`VIG'398ahfG_OʗU26wwIݥZ>T,g A2Fi[.Ӽ@WVMa9X&vZ37F,@bABLX.f~] /xA?=]}"ǃ'*]\>Ysr;ټήt +φ&1qj +
w'S#=wI=۷^|I6l@K)<4DŽVVfy.yn1u_=uI}6?ҧ: A)Nh,=3_}:s=A#l<fN9dLP?$r&;C$PDIS~%QJowN8Nu|q8dsrM8Za9V(RbNdwyFB
Z/f7eF#>O?M{/rVfoټ&+ԭ؞>,?@⭱ʿ cf&uD7>avM9^\Z[V۲*p
#<i[]ՄO!:p!Pm*mT!fIk;_0i!U .9Jm(y~wvutM|50F>j۹>t)1vg~|'UO-=&ز٬b
Ag@WDl}Яo_B]$!Iwh2<wvRBQ47R?`FK>VrqR'YYu8PD&b< +9K'mCDkC7S2%+߱t&41Uat5w&vL7e8IXCoxHEXEЁ4t +endstream +endobj +632 0 obj << +/Type /Page +/Contents 633 0 R +/Resources 631 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 619 0 R +/Annots [ 621 0 R 622 0 R 628 0 R 629 0 R 630 0 R ] +>> endobj +621 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [427.541 719.118 472.782 732.154] +/A << /S /GoTo /D (section.11) >> +>> endobj +622 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [474.663 719.118 486.816 732.154] +/A << /S /GoTo /D (hy@ltsfn17) >> +>> endobj +628 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [306.457 418.302 350.292 432.25] +/A << /S /GoTo /D (note.4.3) >> +>> endobj +629 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [451.136 282.312 491.621 294.267] +/A << /S /GoTo /D (section.8) >> +>> endobj +630 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +634 0 obj << +/D [632 0 R /XYZ 84.039 772.024 null] +>> endobj +635 0 obj << +/D [632 0 R /XYZ 89.556 129.194 null] +>> endobj +631 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F32 362 0 R /F7 434 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F83 509 0 R /F34 357 0 R /F33 364 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +640 0 obj << +/Length 3697 +/Filter /FlateDecode +>> +stream +xko6{~š|Cm{^tSl9bKloolɖ_]`CQF3y4 H@ 뫳ߘ +#Tp5$
RV,TRWzpul /9AqtC<<gfp. M6#s9$S{s~ׅfMqu"iB= F0]@B>8
DHp? 9v-U PGTg$d|(w)52\F!:Qx4`~K4ыhE0(u~\Nl4vw+~|C2L=_H(GR)Q/.0(~"Wг[/,x"PhDقzH雉uh@_W+\Q2tK;&jQ_a!'*zd2KZ/$XERujDc\d1;L@_c>ēEʷYls<՜EtӜ@kXTΉi3'2 +]yxN3Y^$3Fx1M$4+!3D62qba_86hKq
9g=0!!QV&1!DܫW
!fw?y8/""TZ<Y^ç;VC^GlX9܊= <""br5BcA/m9 }P^;Yؼ]cD@*g +W*B4O JҞ +DR$l RDr,>yt4lkoוBl%.1NWo.η%OyEeB2C~&De0?lMvPұ:U@BT
(9'.hGGfwep +ߎ;/d6/'~9BKo8MAflًt_{w0iHxL'D =H\'yJy20c +r<82U.2<mYfb'VrDل!500ZUY5Ȯt` uVʪbSֹʀE@@(20*T
#Ir\CA
x+wƝTPT:Q
%Z87%!!rh
Xnr5$B84#jRQٲ4#nꓔFj8nQHnywFOzR P}JIP쫶oD_qCqHq.
B +r+ZC kZؤmzGSO[sۥjևOkdx457y>m͍K'I\4kY%=)f|jU +Bl0NYܖ.\WصH7]J
k@\cM~%n?7;f/R2zԪJx1K +qڤ(]Z ]t6[X]ߊ]SRzM{Ͱe+^{9ENZ?eo4ZφU(BJk +&kb"%s<
>pZbKo&G}<H!PU +3x)fxcf1Ryiԃ-Vp__)jR!X>C(ۉavB8hCĻJn +ġOR|EɪzCo\(JoG\\x<'ЊY.pw4 +`#fk2XTȏN{M #0~Gnw[TYz6T~c=7f ޝ`v6צ9jEgye`2Z\L 92B'w?dN\4 +;C b7lF牻({j5gv]nN3p`%UQyk4ij]LB8PY1u~7ֳwYݼC>H]Cf>Dဍ8I4I,PR,/0z)CKz5X]7?fxRb4vm5 i܀Un[:噞tZ [GЅbvz5ufc+()>L>s[gak9z9Jt;Mʭv>!~ZsT0&`z8Q1]A@386d^x&C$+d +endstream +endobj +639 0 obj << +/Type /Page +/Contents 640 0 R +/Resources 638 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 619 0 R +/Annots [ 637 0 R ] +>> endobj +637 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +641 0 obj << +/D [639 0 R /XYZ 84.039 772.024 null] +>> endobj +130 0 obj << +/D [639 0 R /XYZ 85.039 588.531 null] +>> endobj +134 0 obj << +/D [639 0 R /XYZ 85.039 458.351 null] +>> endobj +138 0 obj << +/D [639 0 R /XYZ 85.039 241.552 null] +>> endobj +638 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +646 0 obj << +/Length 3640 +/Filter /FlateDecode +>> +stream +x]o6=Bo +inP}#J̙>HnTY0pN)$f1ɷipR{'!|_ķʘx+]. R rm&|YOBD둳' +~2uP +rȆ? +Q0*bhϲ:hagl1DQ> NɘvQ]dm1
W^1kq1ϋ}1eMF٫wP+1\
FcGY/籱 ,87,wehqsau[ ¥b3V
jwCe
c_"UއDcsa#[
{gԐЈ<5G(p.M2ST?]sm6.\шM:.Q_nATL%V&Bձm0T@"䜉_ +endstream +endobj +645 0 obj << +/Type /Page +/Contents 646 0 R +/Resources 644 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 619 0 R +/Annots [ 642 0 R 643 0 R ] +>> endobj +642 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [160.195 486.762 223.64 497.61] +/A << /S /GoTo /D (subsection.4.9) >> +>> endobj +643 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +647 0 obj << +/D [645 0 R /XYZ 84.039 772.024 null] +>> endobj +142 0 obj << +/D [645 0 R /XYZ 85.039 533.956 null] +>> endobj +644 0 obj << +/Font << /F8 418 0 R /F14 444 0 R /F91 433 0 R /F11 508 0 R /F59 356 0 R /F6 435 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +652 0 obj << +/Length 3710 +/Filter /FlateDecode +>> +stream +xk +}e/I4$@m.@}|k[E%K,[\/kp'")>6 v|pY♷&&M<wc~Ï7|L^)NW?J8OOƤaK%_=ކ\ g|%.B4@l݈/)2.n̓<1yD{ɼVО&KòQ4aօ3ø k{oϘf`&fE=ˌH +NdÓNàπPB}Q'Rhp:}ֹv,]Q+,Sܔhv+jaC(qWcDJ?<]]s|Qsx1v) +&y*Ay@?yЌc\$P40uC!NV<"Nc{cX2.tc4Vy
d$ƴ;s7ݷoǑs@Ѵ4R]kX5<@?LˡE+(Q&A.0umuBx0ʟN1\bNJ.6>1=!gʥ?PjT)(S +D۩D7U^`o #@Cjak 50l| ש0텐R|(y1t=MTX)`V!qCN +9pj*EA#q<쎴 NW"ȵFe
"cB +[e6h,؊@+"<yݠ9[*+?͇q~j6VZߑ̙|j֡P'@3:NV4D6Pm +Rl?^1YHvӢBtL}ЈR`4-3XC^4joC7c4\2{rx;jͨF7|3]==J$6xVK-YZٶЬq+tCJ,bYG<S<uv~Qh!CǤݤ-Dg菞vTe +$#vڑsm';Ҏ)qJe5dLA +vx)t]~4 +5gqvQᨔb^?E~ץ`u\"Ӯr_հc2tkJː,֊iPV!- !0e}B~,We::p UHӗۃ,"Z9$Xɀ +2&|(℗tB.cªfqDD1_D2 +M+`)2ZZBhͤTFUwRyU8ÚS]4~rqi*{h1\t{7NSQ0[`6{bk +2ЇU4Qu!xFF
+zeOOPPF=ZK˺%KT +i<iؿD8!l5`PeN\Yx +W4po#ubҭLWL+8_!' ҕ!9q42$u!9V.%.21[DH
NW3R +eҘ>&Њk]kO#0um"ym/机ȄL9sNDv4wxo(s;~BmSUQ2XIiܩU,YQ*A eDVRUӠ`[+-S!QR;1I*xY^VNYRBֵVY]d*,sbB_z'LjU*Hs/㾕9TVL6)}b+wܥVad7C3v~Ad/=2P=v2l7 ʳ@"Av +endstream +endobj +651 0 obj << +/Type /Page +/Contents 652 0 R +/Resources 650 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 619 0 R +/Annots [ 648 0 R 649 0 R ] +>> endobj +648 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 505.367 128.965 517.322] +/A << /S /GoTo /D (section.15) >> +>> endobj +649 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +653 0 obj << +/D [651 0 R /XYZ 84.039 772.024 null] +>> endobj +146 0 obj << +/D [651 0 R /XYZ 85.039 580.163 null] +>> endobj +150 0 obj << +/D [651 0 R /XYZ 85.039 81.755 null] +>> endobj +650 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F80 365 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +657 0 obj << +/Length 3901 +/Filter /FlateDecode +>> +stream +x\mB}2;M$6Y(֖w孤C%[~]$@?ܙpfp8$J"I"曻/ޘ摤*iň2EoldLs/O&L*t:a&02N!Tq~?G|$[[l6K(fow7ẑHt4]}D3Cmu.#aC{r!s +,F}֏7@K՚%FD +b,rtD5aFe}[LهRϸ%ZYnI:W +{@RP
% l+U`nm}➼أEozqNo_ ©h߹܌OFH)p]iXְ֪LHB׆Koǔ#!P0G
vR7yT 9S%Cx!) 6ϋzr+ޱUoxM3+JK"ݫksMPD""sq!
(80il +_e63LDk9:RV!a+FAkurs:ZEK90 + M!zw2 +
|r؋$=t5ÐV$.|k߯V:QVnHQ0 5ps E6s-ݧ2wpiUmS0U٧l\7O1$q\/gLɥ։Rs1.9ڮҏYv\59lIKI<4)J[?N ++MJG}3U,-z`Oz8[jH ]::S҂4<"1 +u.faR鯊s~1.-%*i]wc +D*RE q]Ӽx8%{VyȊ` YQb9Cfg.a#Ͱ! +4\&5j{%8*NyxnA{4IP.S%r twCKB&Fח;VDubIdg3T@Ә)PXZ(afag0UPĈ){Ie:-W΄x:WS#
5
|=ٺp0%rQئ%p[Ujo< %08b? ۢ p +r¦ aRUpz^kl5Qk$]q.s.a%QB^wxw"_:)7!?!7Nv +ms& SI +$e)3Q!pzø{kb +0-p:;hҳ +4EG +O*"r07ǣh]bKX5̗ľu!B&>sSȯ?KrH)8IIf +ŕ=wFǹg||mih\`"ljSl$oߣ<}61G>kdOx\̌<M*ڲf4 Nq0`|Qu*VĎʧc&flY7}˭Nҝ7ڦ}> +4[x.l)*_>a&S3_Y5
4|E
V>eT/ys~;eDy<;+bzG<-y/vuUAHul^Rѣgp`g;o|s|<Fia@I,\$f˻>W!PL2PjQ3i&/*^$WWĿ?Úژ|ߛI7 +7+߳~?AW4NxRmp|3^DV?_Q\r(8' +ʷ|4Aדӹ}ɭ@ `7_6W4|A9<Wk;TSnoVm?Ak>UV;n\h(<*hS42\Wt_=?8_~v*/qA9%2,sQEjGhU{g}M{}▰A#bUe5e4LP:38~_ChO8XyM9D*Wb+[Ep:{Dka];֗@6s88?Mo]8smgIxt`#;5HËA~4H}BY 8yA|Fcap!Np%\`nhbNolFX~=nraۡr aB49T!'[Fh9LbCs +endstream +endobj +656 0 obj << +/Type /Page +/Contents 657 0 R +/Resources 655 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 659 0 R +/Annots [ 654 0 R ] +>> endobj +654 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +658 0 obj << +/D [656 0 R /XYZ 84.039 772.024 null] +>> endobj +154 0 obj << +/D [656 0 R /XYZ 85.039 341.979 null] +>> endobj +655 0 obj << +/Font << /F8 418 0 R /F80 365 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +666 0 obj << +/Length 3912 +/Filter /FlateDecode +>> +stream +x\mo6_!`QTbV|'^]wHTXI)ɒ-˱,~HLQpp8$ +ޜoM`ULgW*hň28M28$Oh◘כ|9azx4`&|?2"Tq(/$ө"Jk$6?-(f'Q0WV,+8'l"!1XXW6DQ,EDC +c[dĉraei2ȡ +b
+ +}0*I<GYe>sq !ZbP1bk0EQ +t8M4YfżCJ-$Ɠ#ʓtyJ3N"U@뀞`7/(b57X/NH0_M ¡mJ3WS̗A%O2}vZ@?vAQz<wXAZER^i$xڦ"[_3/$81r;N?eX}JL+q6+ +rB#nqUš[mi&`Qx@R#iͽPPa$ +ϛVq h [` +5NCN҂A7(QִJBC-h'9a>o_ovAO;{H{Hh +H?$%Qoyq"G' sl2}ܿja3*J[iv fCEOYu{}Q瀱W_jR(E mO|qKT$:> +ulLTÎ +hGʣ&{vM 0exȭ\/M Yi +xlIxYȚ2U3z]Wir@AcX9ZLPE/XK]kHmؚjΗO3Z[á㯼<*;XMF;dV[E +'fdrvD>̖d0TJ|?Ni?̕ǽdz^Y7u7}Y-fC4{md"ft!nV{]"|J#"3R>];0GaeUWܼ 4xxGW#4
k|&0̗;j>=)vvħ®l>y cݯ w +>"*7`.7@:zoD +fc"PޣTÁ u=EyuU4ڋQc^B?6f(w8Н
~-f40e[vXkK;`.qK;)ٞHC1`O7/WRLgx״\_qRqOrK| `"VѲ+RC#mVxlp_7,, +ôTrz$<q
w` +s}/vI{~wUجQgD
WZZWwKwqs&~A#(_K2'\ζ9ۘ;>3;ۘ
wr.cR&9-\?-r@v iDbA0_}V!u|H&|ޕGtzY,E6M܃k"߬<Sd0j:Me)n-M8Oq2Y.Mn(iS݃C8P_b(?o\7m<3L?˭s@C+@I\?p tXx♐3n9c=mO3@ +"7OV'xǎM [k9dv!I5dS>ѕ; +endstream +endobj +665 0 obj << +/Type /Page +/Contents 666 0 R +/Resources 664 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 659 0 R +/Annots [ 660 0 R 661 0 R 662 0 R 663 0 R ] +>> endobj +660 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [124.664 453.56 139.387 464.408] +/A << /S /GoTo /D (note.4.3) >> +>> endobj +661 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [456.342 441.328 496.282 452.453] +/A << /S /GoTo /D (section.8) >> +>> endobj +662 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [189.065 258.902 253.451 270.857] +/A << /S /GoTo /D (subsection.3.6) >> +>> endobj +663 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +667 0 obj << +/D [665 0 R /XYZ 84.039 772.024 null] +>> endobj +158 0 obj << +/D [665 0 R /XYZ 85.039 244.013 null] +>> endobj +664 0 obj << +/Font << /F8 418 0 R /F83 509 0 R /F11 508 0 R /F91 433 0 R /F7 434 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +672 0 obj << +/Length 3954 +/Filter /FlateDecode +>> +stream +xnF_A X +$HfH`80:1ߪn")"<lћF?_ꥍqmaZGFs^M]:z +ho~/,{|;&Ny +&0]*jw~'t&ܯw^#Dɫ3K'nf7ڼ +6I:%t<Rbr9wJJPF-# +,n߈ +c-6v.߂ &JJBCh]$sp1D)~hn6 Y{"mHg@ 7 +]nL2yͭ͡jHkmև)A&6hw>͑8a<xݛ'۬?O^Έlr`(mk30=p]클TP뚟A\ADggR6$f,j!3٥*ILx1Mi:Z
w[
XK]:~d!y.vi(oK]%,qEg2K¥tK +}2}|2LGȔ̲2dJL@DixWat萉QA&Up(TةTp-9OiBa@` ɪ;'BFկwom@.xG'`Ah`]%E!5Q3hc")s](Ƽ +χFYBe
:(Z:@,xRd<11܋ +O:<? +"Sq#Vl~ 6M E8B|'#t:=cr=l{2eRXj=䂅<FJ*oQ0^c^Yu\y3
VrC +:;I<vg3R~op^.aQ +!AufvXfGz5W8w)hk쀿/]e.]qS&q0a=9G,I; .1a +!D'=Z]V9^C'8~횢Ήݶ
$Ҟԁ~{,W4|w=Lv8CQh|]A8.a|rʮo/{|}"LV;Յr9S9h
?\&ι̯CڍCNHt;q-M3U{Cw'`-]Op2c_cS'N-!m`ұ3 +8eW|STw8Z*m/xDs .,φNեXe!Deފ01ێ͐ZHa(F`Ѡ8kI,58&YYf6f jWN_^W4ʩ!|SK&g6? =M}ibQA%^k,paR= tФTr,#w0Nq|0|I`ֵ@j2v55ܯRm90P<~?2Eydc.
pQ!TA_c=N;Go$ǧaKQ`?ƿFɈ7UB|oGB5NbD(Ivp5T Ƶl<QC>ݞ4"VX_QrDSf +endstream +endobj +671 0 obj << +/Type /Page +/Contents 672 0 R +/Resources 670 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 659 0 R +/Annots [ 668 0 R 674 0 R 669 0 R ] +>> endobj +668 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [478.134 364.686 511.232 376.641] +/A << /S /GoTo /D (subsection.3.3) >> +>> endobj +674 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 353.007 118.54 364.132] +/A << /S /GoTo /D (subsection.3.3) >> +>> endobj +669 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +673 0 obj << +/D [671 0 R /XYZ 84.039 772.024 null] +>> endobj +162 0 obj << +/D [671 0 R /XYZ 85.039 600.664 null] +>> endobj +166 0 obj << +/D [671 0 R /XYZ 85.039 180.219 null] +>> endobj +670 0 obj << +/Font << /F8 418 0 R /F14 444 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F80 365 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +678 0 obj << +/Length 4529 +/Filter /FlateDecode +>> +stream +x<kȑ+,k~?raI6%F.5CFRHS5dU]U:36Wwo]#LќhfowEB姇nso˻dqFyr´0sNG|$}?89e!X?}W,+%%\8'׳?--xV*p` +P}ƱUC!{mhǪ +wV"LAo#\6˵&L8lf0!_|<c%8hIHِNh#Fw)b4.k[$ <W+ ~`P"7.{+|oXE| +8C\i 7mk+wcX* 9YP)r$:{U`Cco։9WDZ6]]H;3 nM +>=*\NeToQh=v>EE3F LǴxw',pbї0 + +ˮqz7tx7 +hFRNZ#PprFVfaбz+LiR;2K=.)OS5FDr75eZ!jZs<˭P#O_)$y╊_Q/ܼ#B0ǠIu +V0) bFl"ĥ2^WOUjLjPCjBeטϓbKk\( +iuQZyDzh};:\,$ah!zA&0䫬{Vjp!tu6>pSuէ{@`VOhtxWFYFzER>y0"u0":tKĕ0[o? +Á0C;<
;0JF"J0y
Mmp1*?Z{Mg-cQ۶P +OYQ5!Ӎ~OOo_?l^rYQx}pMB3tIve8LrkيpJDڄۊ|Aƃħg]?smjB +WbH +śd}R/L9;⇋ث%iU$Ďu
g/]bNrL8 +j'_V{ar:U2FB8Jmj4l(Qjʪ/ѫJWJ"+BY$G%/vԏeRơh +kvb:7Yհ=ʦ:%Vw#b0GJ[Tl@02`*WRi2xO*_g=(iFIm/93mǗf@S[ǭV![nD y-3~RQ"&e% ` +uB?FKT]$pX8-mЎ`${vWht%6*߿y_x|ǎ"Oe"41 +zC@"=u}`I-~Rd+c;ԈޡqRr@$Ibe98o1=u?oSU'{(+e:iw?Ua%_FMk1DfTN)Tt\\ M<$rZ'}
e?a.IChk h@w6i9JhV}~|/_&3SV;y|-Xi-xo/]/24k4f-LI + +naaaWHu<%'_E-zav +endstream +endobj +677 0 obj << +/Type /Page +/Contents 678 0 R +/Resources 676 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 659 0 R +/Annots [ 675 0 R ] +>> endobj +675 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +679 0 obj << +/D [677 0 R /XYZ 84.039 772.024 null] +>> endobj +170 0 obj << +/D [677 0 R /XYZ 85.039 662.188 null] +>> endobj +174 0 obj << +/D [677 0 R /XYZ 85.039 342.157 null] +>> endobj +676 0 obj << +/Font << /F8 418 0 R /F14 444 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F11 508 0 R /F7 434 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +685 0 obj << +/Length 4472 +/Filter /FlateDecode +>> +stream +x<َ8r`}؆άw[
̃:SU61<tw<T%)Rd7X{,hûo#Ns=<fuf4'Za}˻&p/ȗ˧;ny[?)O.LsZ?X?+ +.4sXo`_ޱXO)Kfw~Qb>L:NP^f~cC(b9CL^g8.<,c23ƅBZx_"VZE0aPp:87#79 +c`TiȄ|\ao2 +VP_ōW BEkw覧YJ葝mbppv(XIiM5'%yQRywb])=y:Um@'Q/0x'S]X"?RE_V/P&M}RqסمT~=)f4I~*_xq0Rgrw/_`9﹡gFLu%zDXK2$({!:̰y +̧h0]O~妘/VOqⱹЉ0'̥(TʓD;*Ƹq +Ioc_VynvehmPͼJ.):<f-6U\#1~W!H#h)j|veQ Ar_(]aL'kq} `4RJІ֨Lx#@OY* +&veCqRq%SDH;ǃHoG#1 +K_ϋf*uuZF^b +LN#!YgU(|cVFJ) }xG ++㓒6"EowZPcm+V%lZNŭ(31pZ"
3)3[l^~+ezկ*~v0 ȐW6}.P0SG$A!!_С'[(^ TrZ^``!t@I +6nW龊-~*(㳀mBM"AKle@ؼB0dFBTTvbh4NUT=4Lޜ}1ɭM|EG{`
eIpI@@ +;(Ju>S9[6#h<-7in-594`o*6 +@η:FGEל +3fB.myr<lπ5Y,d%ڼk|i+f(_7b[=3̻ح&(P<#1&tmdz'~\|JpmQ +l7<1I!OBjHB2<Fppwo S;gHj>jvQ<&=)";:tq=Z2/X +;>{ȉ6rO7c!L2 ҁ-AHʒ8ot +{1Sy$ǑZ?jql>G .zCͪ1[(HƠ +uԒ+#;U9C{z.]xP : +vnY[ݧo~~*Z+"]QOˤ]J +EUWq-bd\C}bA +tk͟[ia#, + |Wؗ'~]T`zWyzP3y0]Ӡ벪#lAVz^$*vψNz'aS9@Qc{7??"T_wtO66*/+h7ɷ=;)I;@θZX(v1m8 +endstream +endobj +684 0 obj << +/Type /Page +/Contents 685 0 R +/Resources 683 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 659 0 R +/Annots [ 680 0 R 681 0 R 693 0 R 682 0 R ] +>> endobj +680 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [441.158 642.362 453.311 654.844] +/A << /S /GoTo /D (hy@ltsfn18) >> +>> endobj +681 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [478.134 152.521 511.232 164.476] +/A << /S /GoTo /D (subsection.3.8) >> +>> endobj +693 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 140.566 119.497 152.521] +/A << /S /GoTo /D (subsection.3.8) >> +>> endobj +682 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +686 0 obj << +/D [684 0 R /XYZ 84.039 772.024 null] +>> endobj +178 0 obj << +/D [684 0 R /XYZ 85.039 631.403 null] +>> endobj +687 0 obj << +/D [684 0 R /XYZ 85.039 518.648 null] +>> endobj +688 0 obj << +/D [684 0 R /XYZ 85.039 494.461 null] +>> endobj +689 0 obj << +/D [684 0 R /XYZ 85.039 482.506 null] +>> endobj +690 0 obj << +/D [684 0 R /XYZ 85.039 461.086 null] +>> endobj +691 0 obj << +/D [684 0 R /XYZ 85.039 423.006 null] +>> endobj +692 0 obj << +/D [684 0 R /XYZ 85.039 399.165 null] +>> endobj +694 0 obj << +/D [684 0 R /XYZ 89.556 117.404 null] +>> endobj +683 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F32 362 0 R /F7 434 0 R /F80 365 0 R /F11 508 0 R /F59 356 0 R /F34 357 0 R /F33 364 0 R /F50 377 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +698 0 obj << +/Length 4237 +/Filter /FlateDecode +>> +stream +xَ6B/A4Gɼ,6@&Hvsn?,0-wWvV%[V[GOEu,2Mn4oLbUL%DRBJbDI\ϓ)|B?H^q'ӇK'mh衇w%3RN7Qtw{AXIWX.kRZqw9Ht2[]}&sxcmuaCyM $1=P%>&]}Q0&qBS~āJF{Z{M(h!K"D +"#H,Y@s'mbdJ$(xuZLW%@29g|Xv^&@0ZfZ Z"m$!CcaABBzQy9WԶ@Q}R }v(b8d;cDk(GiH4(SK|IL9+QId;V̻$E0|PLqD5
j6 +":eC3S'Ȁ-= +& Rb'Zb=fE$@ajao=OJ*`x o73 r2|C=݆BEg3YlT16m|ـZ\N}l{=.nWfrE9,9M_kp1)~̝/Mj7~Pm?xG}mnAG6֍fCk{$)IpWl<{C$ART))?}DdBLB0_q *4vXOE@滲^$GGIpRY!9!(F %\l*[RYl:XX5bQdgA:~<۬V6u'ۏkdntoComn[Xm]JtFU1w8d B3ª<T5D ("4i:+6ۓA3"u%eOgg@ζAD"jϐ"߃2Gv~wq,σ8K;*XR!!u5L1~uq~lRJ$3ľ)6VLlVX>5L" +,(|%<\ Y5w思ϞO5Kok0ug !LghFj_tK4и،)Bcro\ֿr3yqYƕ>S.gl + N~X1@t7p*n[ԦGl:-)U~.Pp} m֝쉕"%TR4:=!4;VG۩#[onU m\]\QBFDŶ%YNP3.#Y[U\ P7n3_V[1GK5'֦0S e=Uh]Sזsu^oYkPBci82Zcۃ[-fU|ZO_ZSyU]6ƵMXDbnRP/<:ŬR-e1^1&X3(" =!ᡦ*"[Tnl}9 +qglƄg7Pέo|}へ`,KfQRfC}+a'o.@Yt.eQU;OOsY"Rw7
-#3w$+ZW_E(/H
#yr Ii6El}SՄu%gEHhgkRty"Weʗ8]T]*C\\`hה$?Y\Dw=J
- `9N
"NXMT<:&|vp9-?O] +v1%tr(8ʹ r~O·~փW;8H[Dg./H`6p@)hu^նTW^\4gI`. +m.h^?] +]5.c#f\b^+ՓhH
yӗi=_hb;/;sف:&b9{-?ñwU++<`\]az.-|ioKh.Ѡ)70ÄTńE?ݗO)%I줞ЋXԘ?'H=Ɖw페ʜ;O'2ų]LWb:uR|*$qF+$ĝ6,\|朗l7 {Vתy^d|J(|9Ŝ>Q<RxIe )p' 6*ǂʹLAk3 +55kjl|+70zgZQ}na
qY$Ə}UZjlzAw9kP:CGc&t#z_NixP/kUt{;A%OW"#pNNE7o"'r58}k}BO3W,U#E-v&e[KT+,LcڻP-|氼(>4P\#I\G(;_<X*}}*y]KIixݛ|t[\&GV_־ΟX>0P|FC쯽`Veʻ+98_tp:I3Auܱo8.O|kiq/N``<TԲ%iʃ0RHBEQF nq\ +EAe?_x,"*\ ^L,e:-M#iϸB<^<[rm)A]CuǍ:tgԼ~3w&+jl +\Q=fziܙ=6qö́+0"ב +LB]b'vkKF,?quJ۵ޛ*R
D:y|
<q +endstream +endobj +697 0 obj << +/Type /Page +/Contents 698 0 R +/Resources 696 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 659 0 R +/Annots [ 695 0 R ] +>> endobj +695 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +699 0 obj << +/D [697 0 R /XYZ 84.039 772.024 null] +>> endobj +696 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F7 434 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +709 0 obj << +/Length 4329 +/Filter /FlateDecode +>> +stream +x<k㸑WK0Ú7!I6ˣQnad˱il_Iɒ,m3ݢ(,֛U%1wo;%$\Gwbi͉V*[D㻧槻? +6&6ݛL7Ku:6pT>f{C&~q(qJ73locNMַwofGmhG(1e$N)]Dױ))v @U$2MUUg6mD\>)q
bi{.aI"jx 1-z()I8ku +ﭗ?_QHBy#]-_Ybtݻ#JFNبvUdUO7,|3]vzkZ\.닿YU~plW;_:if[Dq
FFV2-p<VC p<o:_=4:/u +L_X\e͘HTdی6?s[D3/þuQBEU +ҵ#6* pLcp,a2aylӊ5NbEb/S JMS;}NƦƤ<^o'A\An^|wo1f=fsMpG5P-)ҠS&8w<5-r0S^a}8뙓)|}St?Mp!mCE#erՐ)+ٝZRzfUe🚓s}˷GԔ Ҷ 놱*6; +h39&%DF:r=0xw^SJF +t +>6Ebx8TDqipH*MAqˉL09~NNN11TI,}TWU +\]{5':"C/mٿqrFrn=,h75(6 +ƶ1TCõw]h çkmc|b^d"> +(it2ч] +`c78^p'o̎EmcꝚCHrg=m[lZMEox4*GL&T} ^O}[5qsϼgqUn +Jj~Gh-Fw|#0p4#MG_.iQXm@*AP0Y^.2Ԩ,&]uh]:ւ# P a[
+Nځ5T]2Rp.\iM͈
I,x'\*́'|oM@ m`xgaOWGO6z}H~T׳X彎I@f隫<~ܠLa'!=epO+&P!>C`χ/l5}a1/ᣳ00p^cIKQA;^.?Yvn2D65M;UYg~d(A`J&A'C>1
n`oZ.CmV)gJ0{:xvMgS`EqsΥ5h1 [/Ә<\<zl`u.ʽT8p+P#&~H+ŧ2tE_P0qltk}y5)L[bHhZTs7&gU{:Ͽ9t&fTP{Ryg?b(5 *((|o{se;vIؙYsC'rj hyM:<1SIzܗxݝ*.Oh +h{;K˹;Pը*d3Uv0>Flat\/'HxZfgfFkF.~gDpjBcD:FR8#;b~厉6$ +O{|OT3ͺm!;'SEQ` RM`| +pP`$GLo(_2"@
+d;wK݂{ +2(c,aE]%o|=`c#RdΘێbKîߣ~F/epqUR@ + +ʹ!,u$=Ќ3J!F~C~Qݱ:5}]`1h༨O%˕\z)ٗkwʤF&"Rn פqD6\kYrhoƦ
rF҅RUH3%QDjEO+LQ9_O:TN镀C)Gib +Jqσ.|S,}?L A(%S e"p#t-&ZaBaS +0עgb|-:7"%r]OC +Jİ*c?%q6Þ7C'ǜ瓾W᳛,ddjQ!7T.Ma&\ݾlϠ&*2w ^XZ43^@)
Jz +4ڥ!ȞCyvcd5-`xՃX4`,^糜M0`ҧ59~9ƁiUb<(P +E,B+ctEs̗+ߵ<}ǞL7s C2_2LƺT/xף5(ĚA +* +endstream +endobj +708 0 obj << +/Type /Page +/Contents 709 0 R +/Resources 707 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 715 0 R +/Annots [ 700 0 R 702 0 R 703 0 R 704 0 R 705 0 R 701 0 R 706 0 R ] +>> endobj +700 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [163.708 606.098 175.861 618.58] +/A << /S /GoTo /D (hy@ltsfn19) >> +>> endobj +702 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [241.21 422.01 251.325 434.952] +/A << /S /GoTo /D (hy@ltsfn21) >> +>> endobj +703 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 398.653 152.542 409.502] +/A << /S /GoTo /D (subsection.14.2) >> +>> endobj +704 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.957 377.732 303.778 388.58] +/A << /S /GoTo /D (subsection.4.4) >> +>> endobj +705 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [382.791 365.777 450.676 376.625] +/A << /S /GoTo /D (subsection.14.2) >> +>> endobj +701 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [453.165 131.279 491.91 142.089] +/A << /S /GoTo /D (section.15) >> +>> endobj +706 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +710 0 obj << +/D [708 0 R /XYZ 84.039 772.024 null] +>> endobj +182 0 obj << +/D [708 0 R /XYZ 85.039 602.113 null] +>> endobj +186 0 obj << +/D [708 0 R /XYZ 85.039 366.773 null] +>> endobj +712 0 obj << +/D [708 0 R /XYZ 89.556 147.392 null] +>> endobj +713 0 obj << +/D [708 0 R /XYZ 89.556 128.124 null] +>> endobj +707 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F7 434 0 R /F14 444 0 R /F32 362 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F13 711 0 R /F83 509 0 R /F34 357 0 R /F33 364 0 R /F50 377 0 R /F38 714 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +719 0 obj << +/Length 2424 +/Filter /FlateDecode +>> +stream +xڽ[o)TuEi-@KJ,;*v&Cb)f ՇD.ԟ?ǦXVNaw _N|urqj)F֙ќhqv=+N^zBɮυ)7bP_X^oO};UjOKf4\/R,s_V9eWıN{M%d4é_3J3p"'ϳ#V"־%:Y&<x +YP)&sըq]DM?WXض6,1x"Bx N`ķK=pbM|;.Uub +Ƭ0 /CTgj-9aWGx?7n5Tcl +T扉sDj3Tg艆Wv]<~ + YeO__dRc$!VF9cHP +Fz|ҋi0:[-UU,gjߊ +H-̯? %w~ua*Itl)c-oxH2T\V&SbN]JEcdƚ&@c3F>?b +(GϳV,QXFhrxk-3#| 4oV-b21bZ,d7ǚlS+w7NvY|yݪ_79MRU:&c,̔,/|/&
drc4Ȳp̬Wk6ӇH21uZ$f6[*@y=}Gl2Ym ?Bl;ټc>$`(#/|jUk'PC|zx\{m<,U{|6>njTl`&8Dނ>|BS21ʛEj8Dʁkz*5iQΖSTR#$f`2$v ck䴋'?5|Q|:-Ɵؾs|d5Մ֬1
ɞdu*{,HLUm# ӭc?fh
_L?UmcNic?2;=y![|,2I姅IMXCE?U]?T
{v4>z//ko<fýO_<X:byRM^9Zjb~2xZ8{}[!P桷eR)Y!oȫg#`̼AdFkuտZ;O9Mi#aj7Ck?GtwB`VKh[\
x! "A?TDSxV4 +endstream +endobj +718 0 obj << +/Type /Page +/Contents 719 0 R +/Resources 717 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 715 0 R +/Annots [ 716 0 R ] +>> endobj +716 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +720 0 obj << +/D [718 0 R /XYZ 84.039 772.024 null] +>> endobj +717 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F59 356 0 R /F33 364 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +724 0 obj << +/Length 2700 +/Filter /FlateDecode +>> +stream +x\[o~ϯP1.Wvnwv +}.1%]C̉Ia[&́xZ^OT)(GjQBYB}ڰ w3bA# ~wѬ[PFTq56.ϲ:Zd^$}ѺC=E-xaWhe&02P]T~eB^IOx)sw\)6f_4/NͶtZd[-t -L4_f-=8)iOuʼn/K1^٘hYFaDcauSt WG +. +?O +
@+HZ^pf!+)P ˍt1t;-byϓ*#}ZnIk{3HKh6Oj| }EYz烿^Yċ o"&GkU2Vi2mjg<In$恒^SX6Dхr1n}3*'NQ_\
G`Kj^yYzȷU76p=eO/S{_C7k7[^cpLTƀ) +iocMs,3Oիڛ:x[?JlJj>fJTMO|1Ӝ+k>镛[%1LXpI7]E~*7dޖ1BQk,]TYnQ,hѨQ&$=Ww +uSfv:69Bi!ݭ3"2 +BյJb\q"H%I4١^?J^jm\R"z19y]ܕ4^E(=a
ke$ c(em_eWΤyzor +İo z8it;%J%
N Ղ$xDф1sr/]RC q* +]8e +N
|*N1OJJ[C{Y>%Ԫ[_}aװH7pY+2&cpX"Ԥ
mnj
$c,t/af>+/uR"D̋)&'">6.!BbL2Ƥ{|(
m_oFސv)B" c22qr =yDb0kCa_ezLY.9㕋ZkGgm]Ba܇Av
#]x#.B)<YZɽ{4G46z@FĕB|,#.EcGx|* [yiznoSK(H!rѝ#ݮ2BK.nxTǛ$/.<ŃD +endstream +endobj +723 0 obj << +/Type /Page +/Contents 724 0 R +/Resources 722 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 715 0 R +/Annots [ 721 0 R ] +>> endobj +721 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +725 0 obj << +/D [723 0 R /XYZ 84.039 772.024 null] +>> endobj +722 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F59 356 0 R /F14 444 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +729 0 obj << +/Length 2334 +/Filter /FlateDecode +>> +stream +xڽ[O#9%FJr2#^ViF{釐4ӹmHhw㺥1М@T>eլ`/6 +N~yrWxF15嬸]~)ǟ/?a/)ΤXQtߜX|LMnp#HquPCI^Z0EOxmv`l1]\}f``-U'. +x%x^_"48"^
~si{`_౿j)iJ*L;.C\a<ylqU
W
,0#Wy/@ޟ\n<[MwrDnG3M1}pρ3@߁g|LquY>nUL=~OOIX8V#($p:9@:4P.%űܻLDj\wL%7F_-ME=+>c|L5R3pK]SP* +̾n[Ѽnv%d*1kBRjRdp$ +PB60ݔ`E@Jq(ו +BT۪=Wd˦WwqU +`PkTsY-5Z
#0Zck +x1ԊX^(C +SFט1?sx >hץ5.g4p̴3'4H5䅉fV"^_ˇg\JpIMZcg__ +_HWF@uWŢҸg׀sP-g*1>]RL*Zrn__dzί绒4P1w(V՛rt/ +endstream +endobj +728 0 obj << +/Type /Page +/Contents 729 0 R +/Resources 727 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 715 0 R +/Annots [ 726 0 R ] +>> endobj +726 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +730 0 obj << +/D [728 0 R /XYZ 84.039 772.024 null] +>> endobj +727 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F59 356 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +734 0 obj << +/Length 2772 +/Filter /FlateDecode +>> +stream +x\Yo8~ϯ0hмY,л +Pd8d]U[8
^820K<n( +xtM<ů8T$(b&1 2!- !H& }L
RL频`ߚE"VKEWxOA4UL͞`{| (]*}>EΗɞW>EHaðf
ofy櫟CRqtcԇL# m!M'}胣'D__=.Fݹ\!6Ef(.2ccL&c'2j2gt7n9;T#&^$2`0[0N\cT~:>܉n$ѡ9#y$P6VI<[O2_F=զMiU6ׅFPKU~3W馊Z[ 1Rk;f;nI1JޢBv{8}EF4x7iemba>I.hCw]tq.uxy4]v2-Ai9]i2gEghSDieyUCo>XIGy}[I>w'}I7S(rC-(Tt6>Ll.]y7ʯ]Yy`G{jPK7U&AЅ?%=F5}OZlJ썔VJѣ"}ٱ +uSzwY\W8HGp,/jYF֮ͧiYVHs"1zN.:2&DxhG8Қ֊"E +[_ +1*u
~@Rv ?ˁt+ !Iʕ@J
MI?c$MqZh蔀ZКNhc'E "}bo `;M@P]D2ol'eڦaX7Ixy +^ЍDmc97]D^,0H[1,2bem|6֢֕~#/rCI"JDcڥxDj5m
k~kC`m'Z#sLnfm3=&; X)[|H&emƦ}B:$"r߁jFvzwko/cfw` +iҘOF%G90U, "TvbN +˄&8
))f',˲6%&W9yTF +]4/oǴ~L`"=ظOG_=[#m|,<dhL'ڣD"{ZӆWi&=?E&<};9⼧i|5we(.J(0.v!u9"DM|5a_k&;p5Yj0\+lPHD_(;=<-fhm迍6.tҘOFDꞲ}f8
Eݵ! H^;zL"V/a'T_K,;HD0."7za>a)Ӧ>M!a[
7P_5hq`xMS<9-6C +endstream +endobj +733 0 obj << +/Type /Page +/Contents 734 0 R +/Resources 732 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 715 0 R +/Annots [ 731 0 R ] +>> endobj +731 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +735 0 obj << +/D [733 0 R /XYZ 84.039 772.024 null] +>> endobj +732 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F59 356 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +824 0 obj << +/Length 4338 +/Filter /FlateDecode +>> +stream +xَ6oQcxS1&l>LXn-[$g7ȿoY;nSY*M*:?|sOᛛ?ݼ~k& IS*5ъ%n>y-w;`&隆h>?2eOtvLx+e>d;C:bqߕ-)+Ŕ@oIC̖7?ē9v';p9 #.&?k$Ɯb?j"Hb(G*&cxx`<ρCJ$뉦 i23IT'$
hЎ`$q'Js3~v*a8\!$t4Cy>rvƠa3%k+̛AcNS,cզȾd}EY}dqE"n?=#V hҲ[^nNhl^=֛2˦Mae?,z w
1EU0pB%EmC:/gej.ρ%wR$wK\#s`Dzh5@\#<NBp'7-~Lr]6QVgLO&XTe{Dp\< +PƤу 8SГ4DT,ɈLvCW$Ydb$@p@#J] 65 + rVQ, n
b~X:e +5 +p@i=J\XIw
*x,f>Xl!1;(JD\~nf)
e!pEγ{a K~biK֢*1gN]JA~U}:{P}%ReuFwq`^%4*DZ3,u2u_ZʵW*VyR!
+0MZ$BM3kL?r]PDMuQlI
Gwn 4VViuK#? Ͳ.A6]iHvm1DjPCZ'[܀嶜:kKk O:YPD>_?#{}D!D5Ĥ.ccHΗ뙂 +DU堢AH9_mxBĔ컄q\oU9(L=' +7k6>~)!FG.'jk(x+[ްCLr֡#~짘X=x0@Rj!
iŗ]"Z7<ьȏB)ײz_W%ͭ=" +iQ#r{rf-`z#7U#O++ƿ>gvO#L9o&l{=#;ʕ!]WJyhpY VYxe}>6lPm?J@J12iIk
`6=.ҙ3E;sHw:J3eG_"w/|
^϶Rz7_ͳ|1B +It5?!7ML|P`l7yZc+).<JE#OUeĆDh4]='V3, +gZ"'gֶ2:]֖y`<H [8#s_Ѱ%5igVY6a +HdXhm@`8'l&@ +eL9ܹ!fvCT.PTE(LdZHQۉmXޭ,ӹe +%&D)6*3coiIvM[)!v W֘*/b4]"GM +3ڊ=gڝ[pdcƙ +FfCuP-Moh#Hnv=(O
DJtMLݫ83q=V I+p뵵0nLQقgЦ/<w$%Ԟwۮe@ozM`m(ku]Z<vk<`
%5Nְ5
ƚyV]o >|qxk`ޜn84bqcKhs]l3c^=[JX:w.hVxG̵o熌4<<-
mf_ؑ]d]eu[Vn@~P1$a@n!q|$rFXbĎEQSZl:/xx =S!p +M&Nu?`MU/0:~ 9枫[ͷymxe0_eb`,VaGmVbџ >7ܞpI^/yG{Se4T!tGyjܝol5X *heF2 W9-*t֨pU:z[/w^)/l/5dԣw2/&'>ح%_w>~k̑BΎdâ=ְ> +u}1Υ1zIOUΟ\w7,Z}= +e +ns&eصqu.4R=f-@w +PU !Aٷ +endstream +endobj +823 0 obj << +/Type /Page +/Contents 824 0 R +/Resources 822 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 715 0 R +/Annots [ 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 801 0 R 821 0 R ] +>> endobj +736 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [240.263 559.771 274.45 571.726] +/A << /S /GoTo /D (table.1) >> +>> endobj +737 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [389.199 559.771 423.386 571.726] +/A << /S /GoTo /D (table.1) >> +>> endobj +738 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [304.079 518.482 314.194 530.87] +/A << /S /GoTo /D (hy@ltsfn22) >> +>> endobj +739 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [138.283 272.626 171.92 284.581] +/A << /S /GoTo /D (table.2) >> +>> endobj +740 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.409 236.76 434.921 248.716] +/A << /S /GoTo /D (note.15.1) >> +>> endobj +801 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [408.129 148.342 449.418 163.286] +/A << /S /GoTo /D (hy@ltablenote2.1) >> +>> endobj +821 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +825 0 obj << +/D [823 0 R /XYZ 84.039 772.024 null] +>> endobj +190 0 obj << +/D [823 0 R /XYZ 85.039 663.228 null] +>> endobj +826 0 obj << +/D [823 0 R /XYZ 85.039 198.404 null] +>> endobj +828 0 obj << +/D [823 0 R /XYZ 89.556 111.513 null] +>> endobj +822 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F13 711 0 R /F7 434 0 R /F59 356 0 R /F14 444 0 R /F11 508 0 R /F45 355 0 R /F53 366 0 R /F34 357 0 R /F99 827 0 R /F38 714 0 R /F33 364 0 R /F50 377 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +843 0 obj << +/Length 5326 +/Filter /FlateDecode +>> +stream +x]ݓ㶑߿Bo\Y
$uu眓%w\d*\3Z}EN_7 +ZBv +F$stv2"AvntڂmS]];E]+4 +Vx* +)ϖt_gT|.zt'b d LrWſwpg}QPp.+}b&s̀#|`#XWXC-; +xj{%^1ŧb\]Nb&<mmYhT oࠛ[6f7- +hk5fIVCk${Za,:OL,[@|-Dff
Foxxu^V8?vhͫ/k'dW_%S|BEp7+V Ԇu2ھne hy*ڑr/ŮVvEu9Ӭ.:8%v|Af= ßۑG6sH?!dh}qM2 +i ,
aܲ/(^q.7~?=yDCm.Pl-
+ksY<$i}(*κ zHpp}"85ipC +<3 pIfBl'31e.dr!<=Vֳp'GBw9&T(:8F/f1)kzEkNm5ܸx '1ήG t*q3H Ԣ7t,i3c.waWnHacDHKf(bv]u=Mb6lbRu"<40MgA&Frj
Ahphَ%FnZ]괁ɯVNpT}$dMD11 +0ėx9pbJ&1Ÿr~7sw.vnv{ԘPDםP̽3j^ʫc3wαni~S\o!1PT?m
rEux. +AO1lC +i4F+K2g\*5c/4_fQ5-$/tΤ%V?T/\G3Bz,sxI<+KkR |+s$u(~|^p}a~^=|4}w CwG8jWkB
b`ϴ +zi\ôﺛ?s4s-r`]5_tLÎBDvAR'=;CU֠
nsYp_7;,e%_F6Eʕ_K]3a6 +yWG(EERT9L]ok8y.fކ{\<^pB_ܺw@nbWnj8еƍ])eㆱoεrAX}4$pAa)x&fY5hH.kVp@q]ڲ$<JZY@B5ʉ{P:tpbOBcex +YbA9ag@LtÕaǐgxPC+r21tߢ=*T&wƠ:_TS>8m=}x \
-tx} E5(ƫ~Í4^T˝[}cclӆ߄. +r^]O%iՎ4nբlhYF8eٶAwYT(1tp +ƐecHM'G):TR*u_W=xu +p7&1BC+Um6* .z[UdBY|e˩^%`V0LfE^be0'^ў7!|>F_%{D&DQgN+FZk/yw{݄.̝`dbr̜MT2](;it^<Ւ$+r*._HmQhd-N؈W&ɫBbuB
O|3^{d5E.$xNy=8i64*\@F=mT,.l-EZeټCv(c7N"J.Ѩ +q8n'LÖle.z< +ԕmc-5NL=h9mk.í_]uLJtr^:߆rE;|ܯ8]̐ՊDn2Uph".p@_E?>k"'Z+E8.5i+>|xˡB/yoSs3۰aY֚AM@<zܗ߀J5Ǡ<<̯2LDzxz<m/߁jn^@Ӏlj3es犽2(^v+Q¢AK{vg|Iaf*⾦!O8OTU$jA.Z?8ن +endstream +endobj +842 0 obj << +/Type /Page +/Contents 843 0 R +/Resources 841 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 864 0 R +/Annots [ 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 863 0 R 838 0 R 840 0 R ] +>> endobj +802 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [397.841 691.522 409.74 706.466] +/A << /S /GoTo /D (hy@ltablenote2.2) >> +>> endobj +803 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [448.851 678.172 460.75 693.116] +/A << /S /GoTo /D (hy@ltablenote2.3) >> +>> endobj +804 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [394.274 664.822 406.174 679.766] +/A << /S /GoTo /D (hy@ltablenote2.4) >> +>> endobj +805 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [281.978 651.472 293.878 666.416] +/A << /S /GoTo /D (hy@ltablenote2.5) >> +>> endobj +806 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [313.335 638.122 325.235 653.066] +/A << /S /GoTo /D (hy@ltablenote2.6) >> +>> endobj +807 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [353.061 613.813 364.96 626.755] +/A << /S /GoTo /D (hy@ltablenote2.7) >> +>> endobj +808 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [430.203 589.504 442.102 602.446] +/A << /S /GoTo /D (hy@ltablenote2.8) >> +>> endobj +809 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [317.742 576.154 376.156 591.098] +/A << /S /GoTo /D (subsection.4.8) >> +>> endobj +810 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [380.307 576.154 392.207 591.098] +/A << /S /GoTo /D (hy@ltablenote2.9) >> +>> endobj +811 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [388.418 562.805 403.97 577.748] +/A << /S /GoTo /D (hy@ltablenote2.10) >> +>> endobj +812 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [335.861 549.455 351.414 564.399] +/A << /S /GoTo /D (hy@ltablenote2.11) >> +>> endobj +813 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [411.764 536.105 427.317 551.049] +/A << /S /GoTo /D (hy@ltablenote2.12) >> +>> endobj +814 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [463.002 522.755 478.555 537.699] +/A << /S /GoTo /D (hy@ltablenote2.13) >> +>> endobj +815 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [280.729 498.446 296.282 511.387] +/A << /S /GoTo /D (hy@ltablenote2.14) >> +>> endobj +816 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [381.841 474.137 397.393 487.079] +/A << /S /GoTo /D (hy@ltablenote2.15) >> +>> endobj +817 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [349.563 460.787 365.116 475.731] +/A << /S /GoTo /D (hy@ltablenote2.16) >> +>> endobj +818 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [227.341 436.478 242.894 449.42] +/A << /S /GoTo /D (hy@ltablenote2.17) >> +>> endobj +819 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [296.479 423.128 312.032 438.072] +/A << /S /GoTo /D (hy@ltablenote2.18) >> +>> endobj +820 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [331.698 399.866 391.16 413.763] +/A << /S /GoTo /D (subsection.4.9) >> +>> endobj +831 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [183.851 313.185 221.463 323.392] +/A << /S /GoTo /D (note.15.1) >> +>> endobj +832 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [338.552 293.813 376.669 303.776] +/A << /S /GoTo /D (section.11) >> +>> endobj +833 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [289.469 284.349 324.537 294.999] +/A << /S /GoTo /D (section.4) >> +>> endobj +834 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [103.968 274.884 142.642 285.534] +/A << /S /GoTo /D (section.12) >> +>> endobj +835 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [213.547 274.884 252.221 285.534] +/A << /S /GoTo /D (section.13) >> +>> endobj +836 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [323.126 274.884 361.8 285.534] +/A << /S /GoTo /D (section.13) >> +>> endobj +837 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [473.742 246.491 511.232 256.453] +/A << /S /GoTo /D (subsection.4.9) >> +>> endobj +863 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [84.043 237.026 144.946 246.989] +/A << /S /GoTo /D (subsection.4.9) >> +>> endobj +838 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [431.013 215.607 493.999 227.562] +/A << /S /GoTo /D (subsection.3.8) >> +>> endobj +840 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +844 0 obj << +/D [842 0 R /XYZ 84.039 772.024 null] +>> endobj +830 0 obj << +/D [842 0 R /XYZ 109.005 315.731 null] +>> endobj +845 0 obj << +/D [842 0 R /XYZ 226.859 315.731 null] +>> endobj +846 0 obj << +/D [842 0 R /XYZ 337.469 315.731 null] +>> endobj +847 0 obj << +/D [842 0 R /XYZ 448.078 315.731 null] +>> endobj +848 0 obj << +/D [842 0 R /XYZ 129.993 287.338 null] +>> endobj +850 0 obj << +/D [842 0 R /XYZ 333.227 287.338 null] +>> endobj +851 0 obj << +/D [842 0 R /XYZ 151.332 277.873 null] +>> endobj +852 0 obj << +/D [842 0 R /XYZ 260.911 277.873 null] +>> endobj +853 0 obj << +/D [842 0 R /XYZ 370.49 277.873 null] +>> endobj +854 0 obj << +/D [842 0 R /XYZ 457.462 277.873 null] +>> endobj +855 0 obj << +/D [842 0 R /XYZ 152.203 268.409 null] +>> endobj +856 0 obj << +/D [842 0 R /XYZ 187.792 268.409 null] +>> endobj +857 0 obj << +/D [842 0 R /XYZ 270.976 268.409 null] +>> endobj +858 0 obj << +/D [842 0 R /XYZ 306.565 268.409 null] +>> endobj +859 0 obj << +/D [842 0 R /XYZ 342.154 268.409 null] +>> endobj +860 0 obj << +/D [842 0 R /XYZ 377.743 268.409 null] +>> endobj +861 0 obj << +/D [842 0 R /XYZ 171.296 258.944 null] +>> endobj +862 0 obj << +/D [842 0 R /XYZ 282.708 258.944 null] +>> endobj +841 0 obj << +/Font << /F8 418 0 R /F99 827 0 R /F53 366 0 R /F45 355 0 R /F59 356 0 R /F54 424 0 R /F34 357 0 R /F55 358 0 R /F100 482 0 R /F33 364 0 R /F50 377 0 R /F35 484 0 R /F37 849 0 R /F83 509 0 R /F91 433 0 R /F6 435 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +870 0 obj << +/Length 3499 +/Filter /FlateDecode +>> +stream +xَ8B@0tMe`a[&ȶG$1A}HJlݖ<t7$Ȣ6 b+@RB +bDI|t/WtA=1Oo8|2b:L +ЍɈH0MPuȢr>]X%]
sW"J[Cǫ?WIC&˫O` +Uѱle bFb!>\kI9e-m$xh<iVmI~Ùs-ƍ,}>JF@F^OR-:!)#]wdd;.ae ,6"zD0XULO#C[jQJ4s,_MJ@i@ÇlpMP&@\;R$ + /˶<Dj +MV1FaԄq10chۧn7YNo'
9,dq,@u~}EBȢ
+ڇBQ x^ 7eIr(`ha )URrN8ZI}E;e`ҟ6N7>dnGfvq?DEm:-nh?hDmS.7O~q(:]G4}(֬dIiM}Ȭ۷iVIy^=٭`2a2]fETaؤyNvpVhG.ܼ%ےD,ji~š +bjM(:dZ?4 9:<LtDk"Ϸc*
"*[H%5,URoX=`rPyDIb\SuopR7"̩h#{7hvtUЊmG\9Z53#IQYrSbh^ +6Y]Z4Sަ4pr0 +.шDW}9)P}NAaV\HguIPwGĆTa=# +.bSA`}sBOڸo+E=<]diod.6@֗@xA8!g<Y@u("skinx+y瞑zsӤxBij8n퍵 +^qxRI>w9^C;B$]|̳1ڔd=;a3Bo\uM"͛J6Bol +yJTw׃Ąsԕϊ g"&xq-&Fp~HĘ8fQ.
zwG8] +9j1VM`HAß7<\ow؛YJdHAv.BEL;reKuIm4x>&/ZwK[Q\#8N;;rޚ ҕ/+O&pUseǍQqATsl=LB拕Sjs{&}u"QAQx +aw;mqHfQ5Aqd.zjUp)(1@E5Fxy#
l4 +n
r닮:r X7ĿkO3CoAWշ]<Ϭu H
r˙Wkcr +D[HSK5rwc 2H>L <<|yADXw$nKDi˦+3A춐侲X$Gc}Ԩ_ ؔ/X歃7]{_[+&dGx%#J"u-aVαa#L `Z{Έ`g
Q!;k +endstream +endobj +869 0 obj << +/Type /Page +/Contents 870 0 R +/Resources 868 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 864 0 R +/Annots [ 839 0 R 865 0 R 866 0 R 867 0 R ] +>> endobj +839 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [242.539 719.118 305.195 731.073] +/A << /S /GoTo /D (subsection.3.4) >> +>> endobj +865 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [344.421 591.774 407.548 603.729] +/A << /S /GoTo /D (subsection.3.8) >> +>> endobj +866 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [101.917 195.227 170.047 206.076] +/A << /S /GoTo /D (subsection.15.4) >> +>> endobj +867 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +871 0 obj << +/D [869 0 R /XYZ 84.039 772.024 null] +>> endobj +868 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +875 0 obj << +/Length 3700 +/Filter /FlateDecode +>> +stream +x\[o~ c}"hR 4(u +$Єf*: !8LƳfQ,{-ҽ96)l'}V}Mߝ7+ʯWoԌ'=iX!i9% +(ׄk<"FBZ66'l@A[hƱqVD
+cMr
Dq/ +Wlۊ$%Û&*I
;`S +hwcd +`=ȄE> !.[T$-7r0iw$_8}CocotZ<LͲh鞲EU+z٣po +=mPE*}mʷp%j Uaۦq`6^.ΧS<PL2qb%,T.@=ηiC>0н!K>hxy^**4 +yimuGP#
Hn^vJ$$D++U +@"zN;+סBS6mg,9*.o IF>*$CE
+٬ySGrR| "åv7aR2+w(HʪZ-iZj5`_S̷af-:BFk܍-sC2`#lZsq18r,GA+Kjޅ3CKAtb)KvR@0nk +Ip%U6Բ,2^Wf^Y~YPD) +ubٶ]kOAA4~R~ݦCh*]̆ߜ9qw""K$;vS7~tDnÁtRSThщw@E4o'ٙG +(0"o0ƭ6",&ӆ3 ,/[P/py +\2HPr``SxrMO%%W"[63ni=hg!M+qөCM|O]vg#W/Z1nrw4 +2mDūnh]t* |ΜJ%~ K֨ݠ.01jc6hݵݱg_e2g`ʅq!/fy3f^e&%%weaw^0!30;c*JMLEtпBwqn9Մ%Ld$5<cu*LxJ ;nAϵb{!HqzTX1~f(kZ++,)WԸͅQfVӸD*sմ}m<fuu,8<^ +`C!V%
ER(p:2LJɨD.h2/Oo7 /bPZIyJ4'bv>d7(@PYv(}Қ4qr*9nw]KHPNjl_Tk7M BI%TMK"ǽ85CbS~";-rqh-_5[a
l,DFE +endstream +endobj +874 0 obj << +/Type /Page +/Contents 875 0 R +/Resources 873 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 864 0 R +/Annots [ 872 0 R ] +>> endobj +872 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +876 0 obj << +/D [874 0 R /XYZ 84.039 772.024 null] +>> endobj +873 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F7 434 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +880 0 obj << +/Length 2514 +/Filter /FlateDecode +>> +stream +xڽYo)+/ƥ
]`6@d:0:3en(7`~]j2l;×_Xv~9gyFriܘFr]
.gI3Յr}:vU'Woߎ
>k='p#@8/|ߜ_m`wx*˳jH;06ήY6~Xo/ʼnLy^I^f?k
ν&S<\eV xVw.&ǖ:
Zr:7N<eFyr/1w|:<Xɋݶ'(fdOZť𦹟Vz +<l(d,'ksjqP^O>5.ZM}~&"ӗt4V=
ok,IAc_<s5%4p3;5Eu m%\[D<p5pXZphcpmͳ)6_=?i9d'˅5 +gn]滓Y~n
! +g@3yw),.p2^OڐʠwrlyJJQ`b,{F77YR%aZ4=9;:oNU^=7):~FgdE3He//xKzfg=7^M_|zh}xwThHFЖت=nfo'Tc@NG8@W@
(fAK?@by7TcD#xizږ +ҋq!7V4oߗ?8'2$Y+p\T)mZsFŹ-pOR.y8:)1J +<˱6j<miѷ|OSZ[fZ~{i<S qKJ媧ܠ/]lDJf5EJ<zʎ
b21NoUJVWrb[izI
X5%ID3JQrC5ض/j5ZO:%6UD]9%QTJ16SgS>8./7ߖmuh9:<͛þd:8}ΛˍjGzo0O 0*G~jHS!A*U%UejS~gᖄ2JtSZqc}x[_@9Egmo<ZF^'o*"1A%Tl?;jaIép6_(,x<%-:/z(oŪZAC-2J<"Ѹ5%?/-mO6/rx!ZNqR0F6 +:]{/=H,\] +%րH_WodMI S)4h< @<-0xxd&ňk
6KI #K/O)`qXJZ& +[G^u߿?jH8S +`MiB84/wl뫀>4L7S0M$d=cy52ϥL5F9M1Z)Ц/l{wLj$xSl')J:%W_8Ҽ7U1Nh$%.|z1}v]MVyo\| =Iʸq`җUmG``x^qL:0Mݞd^\}uoNeYr R?I8R&%>O4RPu+)ǘUזGZwI
~CJg/NrRrKQگ-ad3>5h2rS')%h=?\b~?e/]]_y +endstream +endobj +879 0 obj << +/Type /Page +/Contents 880 0 R +/Resources 878 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 864 0 R +/Annots [ 877 0 R ] +>> endobj +877 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +881 0 obj << +/D [879 0 R /XYZ 84.039 772.024 null] +>> endobj +878 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F11 508 0 R /F59 356 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +885 0 obj << +/Length 3102 +/Filter /FlateDecode +>> +stream +x\o6~_!6K{4E[]CŖ!J&E!%G${؈7
^Ѐ-\hq}vyup#L Ҝhykx}~z!GaT5:8?W*Lnӽ.L(䴾;*P|$]ߛ,6Dg(-~sC@Idv\pbrr!1"hׁ$&f
Ax +U(TR2aV聫\_g,^M=rt:o-[rTyRݥU{K1)hPhݨݳ~lXYPe2+!M*jn4a?SV:x)'tS&"0|)Ez<dy:̊bJ
ﯓJKb
}IT"|SgŪr1j0y7g|&/",d#sr}Sξ4w/=_<J2i`li_6W苣[UUM߳_tː49tdi˅Ј)(rQn=8\TJ$? _q^S@+#q"N3HYr}ypK2.l:q +4X7&ieӲ"X(֘qۃEUx_ڱbhW@kn*B+ұ=~c>!Ѡ%^s(*:f op{2dƼCƮ1aRD$ukS(WNPGx?VPS{0h ACNT E67ͥ)9>z4;`hDAY3"&wS% \bxg/z$6>>k>!b`q4Dģw0س"e<~~c^+ۼXA-AZ
Sr)W>v, '}q"p-cF8Du`Q3c}o#%e:CR/lhtY5 +9@K9\Oǎv,&J1:$v|1o8{rMƔ'MnJx:&PiXiLgkf!7-7͎!5YlCfezɎQy]szL|X)|4 ,;%H5r"Spr>-CPMqj²if~^|YNZqG!p@-xF Īځw;m8$^n˲Y\M)%;{ +%bBUkW/)%ڪǍ +MVZ8נ-XNe*FvX[iekbs:b}ɊMe%:-1(mfUmVA]n(e0(́~ +q
#6P,]JĎ:sIUWP<]`U \B&'Hp眙'pG1^
T@6L8UsP.1,&Y{8mT'kw*8vK@E85*Wü.-H>IFk;dr؟irC"X +<A]9uyc6šե(|Y_ADKA{й~dn "q h/{xF$5m;5 +endstream +endobj +884 0 obj << +/Type /Page +/Contents 885 0 R +/Resources 883 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 864 0 R +/Annots [ 882 0 R ] +>> endobj +882 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +886 0 obj << +/D [884 0 R /XYZ 84.039 772.024 null] +>> endobj +194 0 obj << +/D [884 0 R /XYZ 85.039 412.509 null] +>> endobj +883 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F83 509 0 R /F59 356 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +892 0 obj << +/Length 3933 +/Filter /FlateDecode +>> +stream +x\[o6~ϯЇ1#ީv@ˢ˱J-$ك!)Yeْ/8}HLșo(,& +⇛~4ALbTp7$%T@+F(5~v ~ritEW< Rc +U\,ZM3~`{"JkU7_IC7#xSž8DH,8gnT$tb?{`$xh +`i2M"Tc",`PD`@P!Pڡs2J&yv!2B5Y/'Q:0IbEГmWbqp)S+PP|*] +Se +..$*ŗ5`SpI~zN"N)Zg3IBc69&&)F;R
^MJYMm>xjLV-2 +eiP2ګa]dK灀n8I?qWG٢xp0]-bK:Li߹;l +>wֳ+ry5UĮ
7;³j܍\˃W4jN (D + +48;>KkUM7 +LNK>۱DiEܖ~`GOL<M0̏R0<Cwb NZ~3\1wt$ +SZG7/s$;CZza#`hy[ pP15Z:;]/|YMNJ# +!,z@Wd _f}<N}E hBY+/Pf}Pyk\oe2hBY Y˼0s!!ʈ.j\)-R^&%8dcjέ4`=Gorz맛v<%__o{{.)Rex&\*}Y6C|oWus%^bL/es" = +Dt0.eKlԑD?e߱ɿȾq;ړk}~<`M7eo0}S]hC<e)Ӧaϻ70?S
s\O}(971;R#!LKq! +_s82) ƕ*y.%႞Ƶ!ڔ\[ FI̅#@<}r#)0D +:xgq
>|p94!ވO2$]8l)z<}g^7^6pNEp]aڶٲ~.ffHw3w`[t'Z:M;Mg?vR(x7bwfdؾcWA}l三/peUŊ݆&S!lEj8Ap8]aN>}\´MwMK܇nd-}Cl</.sZ(sU/rr f 'v-_-l=Õ/RpiKws[.w2헨HZL,N<ln=|8{̏?#)3P9|,|KL(mk*gSH[E''PJ!w'(N`p[ +1~] +endstream +endobj +891 0 obj << +/Type /Page +/Contents 892 0 R +/Resources 890 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 864 0 R +/Annots [ 887 0 R 888 0 R 889 0 R ] +>> endobj +887 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [448.269 360.02 482.731 371.976] +/A << /S /GoTo /D (table.3) >> +>> endobj +888 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [357.411 195.288 391.787 207.243] +/A << /S /GoTo /D (table.3) >> +>> endobj +889 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +893 0 obj << +/D [891 0 R /XYZ 84.039 772.024 null] +>> endobj +894 0 obj << +/D [891 0 R /XYZ 85.039 301.241 null] +>> endobj +890 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F45 355 0 R /F53 366 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +898 0 obj << +/Length 3455 +/Filter /FlateDecode +>> +stream +x\87"@ ++?*˷wX%[ײ\pYo,ny,nIJRV()It?{L~&>퇛s>OcGu詇U0ff4rҽ)Tq=bq8vY"OJ:~sYLi>[
J"iCM`(&MG2b<_HHb9$,bt|ohvy#Im'4[)D6?DC4.(@Xj܀D+H),P%WR-1F8 `7?}Nv$JX%)]?.a>Y ݐ +lCLD%I;ZBmBt:(%daڌ?<l"]^BZ0hvx:g6G#7"j +k THcDZve8TA؞A/ع$ޞ)tː7yWNWJxlmd2)tn;_߃\["TPLƽg +3ާj<ԏ|T> FO3붓־'Jel*iaܻ?+P,'~d5s~^~9P-EfelZR`UNX;`m/'7v<rC58}l*@p jho +u8Ӫ"r6'Jyn:9٫pҪjz!*@ + +gEhWk,oYt#گ}ǴX=mB}1'yGZm%S+o8^M%0E)tdKCBծ\g&)b]mE{p$]4#>b'U'"]/C{siq_o +^dxx7'Cqp>*AW1ųbYr(^LkR2/phr{{9D;$/XXycrn0OӕCӋs~ƊMÍi|eׅ>g$V>C,{QA|Xl>IΟ,??g(^*]54m8MCإZ_Ѱ +Jhe@RR;ߖ|Iх1TVq,\tmglfC{=<pSIpSˈR^bϙS|r(Np4}8W_mP2ɳ٢C1TZwE5#8SReJ6tX|YQy}}C1_G`0t1ԏL?k8]JR1JS/Rײ&~( p-kHTameMDO`5}*F +ɭײ>QPvAjk}j@[ֵL PvAI[٧óxˮTN7s\+z9~V:]jk} +5~̕m>M`u +endstream +endobj +897 0 obj << +/Type /Page +/Contents 898 0 R +/Resources 896 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 900 0 R +/Annots [ 895 0 R ] +>> endobj +895 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +899 0 obj << +/D [897 0 R /XYZ 84.039 772.024 null] +>> endobj +198 0 obj << +/D [897 0 R /XYZ 85.039 691.117 null] +>> endobj +896 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F14 444 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +904 0 obj << +/Length 3163 +/Filter /FlateDecode +>> +stream +x\Yo8~ϯ
$oRv +rbU&2,&śƱ. FbVS ZL'38ON!Zјaۣ UFAKPmE۠RAч@or8O&;Z>Sw2
L+^Fe<[Bl&$&F@24Z=m0x^s%{-|on@H<.(奔J ZY/}MY5I0}i&@%bm<PiBV D@'.@eyîwv.Ug9!h~$8o$fkU!/P:Wϖ]oJc9[g4춘ik`om2l.0B`W ,r<7wkmބ-SΒlUm\L<3:c@)J"7ntkTWP|jSRC*cC Jsa%+*|_7p p,85HmA)ܜ_V9~tKIP,j65uB`Hp$a<=l>$L2n5}h> +^\ I"{:pc;d崓?_znXL]᠀=&
$.rJK
Y)}#iFQ~B8dRh+@b긼I {Ǯ<>[K2/ӎYIOמ.0EcE "pyD기WHT*Sl:_Sq1E9vc9njOD٥ZlvZ!!pb`Y +ׄt"d,$˔`kyMIM(Ov)WH<-|FNB0Ĝ3qrg->g[{0MTmVt$m_(ӁVK֦se1k+ӹy榃~ybIlevvy9c\v.66+!gv9s(x9sfv5<q'wq|\V*BʔRpZ.]aDՈ!ז3OCu`t ڵBj\oWNw|1ZMJCz\q9$Ukk4k_X},rM,U}W6uHG7v!W)D͇!Y2$&]*T !mĮEH
sRW%krnS8ʳS8k!6V_vbIDu;6Yg&lq*&F[F6gy{Df8NAn7\>?9yKO3-ϫݘA +F3:qS#+%p+,LU\A*u{;N-ojK_%7uJZ>FPjaTyTIlyx6&G"_qtQ65FOui9dQ?=NНJ*%Y#WhUكU:~-Z,ޗ +y-CH)})/l%wH%bxuǥ4)ൿ}d+`E?.FtentʂQYPGه%<.nvQmmC"]MJh&1ӁNsS!pDƃ6aV87^w2p'lT0U_]I;{$?"?`7z0hܸwp|}-jf4`Y&-ObFmiC)zt{O|i3Ff4c wxVみMf.N xژĔx\EQJbZ;2(zح(/Tѐ=aG|5,WNWo*+Ri!t*iI]ug|ȽƀSD2^8k1e0jE1OU2ZO}Gq%$x4Hb7@V(opBE.6ٖ?Tr +endstream +endobj +903 0 obj << +/Type /Page +/Contents 904 0 R +/Resources 902 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 900 0 R +/Annots [ 901 0 R ] +>> endobj +901 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +905 0 obj << +/D [903 0 R /XYZ 84.039 772.024 null] +>> endobj +202 0 obj << +/D [903 0 R /XYZ 85.039 599.416 null] +>> endobj +206 0 obj << +/D [903 0 R /XYZ 85.039 152.516 null] +>> endobj +902 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +909 0 obj << +/Length 3681 +/Filter /FlateDecode +>> +stream +x\oF@q(}?z) pLۂp)Ɏc]"%H*-yvfviD4쯗gol\Gבbi͉V*Ɨg^aQo?ޞ!݀8yZdhm|7P*$[0-Lvid084攱 +m<eDm{]#J3ѣpIlj'/g#ǐXCV*\d8}.Q7J8ƋZ:/8V*%n{rdZ&x>ڧʋsa5BߧQX0!̫̿6]?0C{@/xJm2kuKsypll8Y-p̍.f2G +b<@Oe癊d9CE>9ZCLVdp.!X<(_'6<0/@R!]WϞ#*^p&pvePnEz\4ViDcy&4 Mvه:z!< 'I&B4!;]Qjv=Yxk t߹n""tz,fCm8-0LnKR] +3r{ҦtcIl3cAG8˄ϒQ\iJqMh*
cU&D'V;&a|,~ +db2qk%o9PõN٣ d<
}Ybt;H_Zi/i-J +x88TPf +־t]4u6@g_ +2`пl(ə N*%|鵚LIz{NP(uFP:}"_08O=Op)ɧO7T%Q*mTf0*?퍽:)N4VLIG2E~Za?OI +lu~6"]c;$'ř덶 +^_ +'<谬_̝ƖO68#Jnm7EۭB}iBplSK=v(31k̐H~ʺ!oU7!41զ&W0w0(3n苽:QI,/|TeLe)d{&x]VWn6Ep{"o0kW4G}8CG,$Hc0N[}>Ԋs"/˭h5MfK +}5ϧ!Լr<$\'YTUi)HS'uUOQ^/a8Y=܃ԀV$Z3R*a43K4E? O0 +_7ØHB(6p +#l- ]/aCer<X4V +DMHsۉF!~u3ue>8bL&Y2_-¥|:i+9D@JY):5p09qqإd~eBRDbn7jXmY!lkw/oax20.Z%IA:T@:`J%<y
WLOa7`W*c@cg1Jنp
LL#/D:s + ٚڈ)bw +aP0xd9
FTv ݬ({?%Po_Qlly"Ygx6ڻp1 -Xs~8LC@&-p>1&;P(OaSfu1mʇSI^'emu: +6.~_Q`m +*Tz= +ytAxq\2ߋdZ=ĸDDB]'8w"nlC! +\R /F`|<Jjz^X&Z?`p{=q3i2X mbM/7{üʤ9S^8` +9SؔV5~E +E?(x쮗j+^@H]'~xO/ܩFJREiKlti@c<ٜڕeEᣜK0nw^ γa׆҄ +z5gPZ܀c-߰6&|UW .4,X\quG +?o!n0Rm]Вw"Ć ǘ +endstream +endobj +908 0 obj << +/Type /Page +/Contents 909 0 R +/Resources 907 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 900 0 R +/Annots [ 906 0 R ] +>> endobj +906 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +910 0 obj << +/D [908 0 R /XYZ 84.039 772.024 null] +>> endobj +210 0 obj << +/D [908 0 R /XYZ 85.039 432.324 null] +>> endobj +214 0 obj << +/D [908 0 R /XYZ 85.039 367.76 null] +>> endobj +218 0 obj << +/D [908 0 R /XYZ 85.039 199.51 null] +>> endobj +907 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F11 508 0 R /F59 356 0 R /F6 435 0 R /F80 365 0 R /F14 444 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +916 0 obj << +/Length 4431 +/Filter /FlateDecode +>> +stream +x\Y~ׯ@""B{&/v%;\$W₻(q5ȕVq{ +gzkH*M HH"^/nW>:WnI"/.tŻ&\B$Sn3=ޒswFxCtOHq\HP`}Qp
P|pmgBZ82фYƛPP( + +ƓHS
{C*(tS"&ikIh`KZ{i4!Qd|"Q +7KP۩@=PAN
K?-!gSSRBNCG -<}2O +LOX!k%S0Ra$)aF?k䯎flIT?zjB?#H,k3,c{d' +-CVF䈙@9!1ALʇh܌ILV\GrE].֘sKVђaRg?[fG->eph,dod`l6%%R} KPTS +3_cާ7\|Np֑\}|ASXTiW؛opJ@Q'apaZ1 +yf)8\(G +$pd <:!higVRr]γ q!Qa[ϰ/J!86& +MSڸ@,W I|b]eht[
=d77[nwM3E.л-qj$MPXM[BڮۜCVU0fNw=> +'dæ+ReQq3ܭ:@en\G?1-cBqc/܍+C9xt(/rIM̀g +qGk?#xmjbtbl<Ejaբ͈=e +s 5OW#٫YD0L +KbΘ.Ƿ _F%U6=9&2ΰ9l},l(ac +iT7B'HHssll5иϓ}[ۣ2QvľdD5j!WdzUɏIHepp/`Ƥ:ίU-m]O)Z1tsg3 $+yu#]ʭǐ cCۆLfo!c3b!/"Yyy(e;p/ia 5WoDQX4>F02Px oWˊ2[TdޥE)S`s`εKo'«9}No&.L`=jN`[]һzK{|{I0j̝ش~N<x2mx&\4p&H`M +C쐸"i,"+BVBtK`ug`$ +ހMkWhrrl8Vx9< <rR}Ψs{'qQ-=؞ųxaW|WzUM-K^?Suܡѕ
:[ @10O{0~MZ ++`嚳иK]Uf2k6,1"J"S56/
ԕ/%`fPLF"Jh۸WF I0`;Sul"` + Dj#b]{Z9f7"9-ZH +%y//˿-}E%dRsßƏrIxa!S֨T9Vցu3|Ut
NCN/!ZSD +endstream +endobj +915 0 obj << +/Type /Page +/Contents 916 0 R +/Resources 914 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 900 0 R +/Annots [ 911 0 R 912 0 R 913 0 R ] +>> endobj +911 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [179.081 629.853 189.196 642.794] +/A << /S /GoTo /D (hy@ltsfn23) >> +>> endobj +912 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [122.811 572.568 132.926 583.019] +/A << /S /GoTo /D (hy@ltsfn24) >> +>> endobj +913 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +917 0 obj << +/D [915 0 R /XYZ 84.039 772.024 null] +>> endobj +222 0 obj << +/D [915 0 R /XYZ 85.039 488.66 null] +>> endobj +226 0 obj << +/D [915 0 R /XYZ 85.039 232.147 null] +>> endobj +918 0 obj << +/D [915 0 R /XYZ 89.556 136.704 null] +>> endobj +919 0 obj << +/D [915 0 R /XYZ 89.556 126.901 null] +>> endobj +914 0 obj << +/Font << /F8 418 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F13 711 0 R /F7 434 0 R /F11 508 0 R /F80 365 0 R /F59 356 0 R /F83 509 0 R /F38 714 0 R /F34 357 0 R /F33 364 0 R /F37 849 0 R /F50 377 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +923 0 obj << +/Length 3879 +/Filter /FlateDecode +>> +stream +xَF}o +PӢrF]ߵ(i=hʛ:p+`
_>_nvԅ%ʁW]˳>&KAz2 I 3ƈ+5UJN4$Fs3cl)q3ڹzL@
Dy|Âغٸ0 hLC_NL +f$J&Pj/Q0uDm.%5_GOI +OGa}r83RhK 5cnWpdi@p +A5)ib[ۏGYQx>Ø0Sk@Xq鈐: +q!ű +P)o:S`^B^slɲl^ +/Uk1{ PVeeܵ +"WWScGJ͈<4W +9" +!8سLX<ȥ]*{2N5Ywb]!(L TBܳv{D)c} +RArNwmKQzyK1\;B".nZbWĆ}#ÄXϗcM>9ڍɵU.f$L4pPN>itV}v|6Ú%72C{v.+)Ꮷlԋʳ): +xdgiN\1`0 +v8C<]tnHMmp{fg9'$$,cn2z_Gd riOʹ|G6ę0ŏ]-i[bjtEGkeA6*WLϗ5<xX,-_9h1c' +X)FCXG#aDQRlB i_?1~p-;5`7.gYzʒ9;Ig'X:u4Dyp2_,$0.B:x"bbA +WX؇"{e!y@4}B$̵3#$`ߙle4>SFxHp=e2b%gN6#KK+͈B_Y)H177Hb# +Z +仇|>e#GU 7<kHn +8իcsFV2g2g3Kb" ppJ\=E#it|d7eeih4|c ++K +endstream +endobj +922 0 obj << +/Type /Page +/Contents 923 0 R +/Resources 921 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 900 0 R +/Annots [ 920 0 R ] +>> endobj +920 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +924 0 obj << +/D [922 0 R /XYZ 84.039 772.024 null] +>> endobj +230 0 obj << +/D [922 0 R /XYZ 85.039 703.178 null] +>> endobj +234 0 obj << +/D [922 0 R /XYZ 85.039 515.794 null] +>> endobj +238 0 obj << +/D [922 0 R /XYZ 85.039 299.076 null] +>> endobj +921 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F14 444 0 R /F80 365 0 R /F19 361 0 R /F59 356 0 R /F6 435 0 R /F21 925 0 R /F11 508 0 R /F33 364 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +929 0 obj << +/Length 4483 +/Filter /FlateDecode +>> +stream +x]Y~_hQ#΅ YI p5auIib{!H~fUuuuU}=t8/ͯڙ#Ns={)F39Jg_қoO,_ɿ|3z!߿fCsvFy´0sNO7찭tYysXSr7,^)K-7o_ggf/L:NpͿښPk(IG"%JW.;ñJoXEp3á7ho(pWt?gin5;1IuķCoҚy^=?I&ݢa{>A|&%qlmIZi%H'Y`30gƈ+ti|G}¢.X\(.[[&pCEOCmU~qJ?n Ə#OQ6!%4G:ҧF#ˮ' J6/vP+(`e<!AE_vHO_aȚ8P7Rr~Hyi8CURjtb~w`@*qO,P%
+N<5t}?t
K+Fy0MWq!Za֫|W-G%zYmjBa{fMpcowꋟ8%vDhvY-:X`$pq {O?v8\OM_,@JV0)|yxm*?PeO"Y[M=jYEwx DYfGPSI ()fM ͗9|.<O^4Y*= +nIo * E/W5gL%Z{,KgwEv'ГѠkbc7֛9BnLK'> +^ηONpk +퇱q " +;t=<wo_I8,mQO[ÔSW5L@"Z:0ѠoqTSS~Kìhg3Nډƅ`kf#MAA}E2s/l>@y,?ȁIj +G#1˴Cr*A[ŪJoC^k!X6rE@jqK_0P`Lٮ3䝼Ah-]t_BQz +Ə\7T1iLow@iF5OZ0J|~xo/*3Q=D:qarHzc$@H +{}DĀQ\*ǨQhw:x.aʜIXsrSjDv
,T=>?94k uGN9jTlhWY°c)blm%tfꆃRJ,O1$!ڡ4OS6dIO+_>Ug?(TנŋmQ..6@#͡^c졺^,nsx1!Spij~?=\djҎr2mbQ0g.4yĹ\+f㓤¼>1hAN| DR<F<z}A(<7dxd˷і]ezDq"0#u<&}z=?!;@~*Z|7ڏ8Y9A:|VmnVr9q_;?3Z3
ƒFQa +&u;YhCZh-ZE7AIM6
HmF~
cZǬ(b/֙[4@:Y*p.L6ŗA
D 9H, !069*gs;
"ЬnNUwsjmBAV2xuaywxôIY.G r;d +lD=W ERdGiҲXCMӇF[>{<:?3N:\uy ++ CTY@.q`3 +(v@LϧHzC(da +bN99=d@TJ6i!\>&q.U/tA@x+Kh3W\5>LYJ,TGLY9"S6rQ1N~FȗugW'H
G5Li̵{K `-4UC>A6Lc/$'=)%LK +i[]+Esm%
|dCXଧF/3+c1DE+pnW5q<$[AgcWkvf&
Uv5cqp5{h݄D2ذ%7|,<l|G}><~8` +tq Vs23.iuCs\8ڔ1\< JnT_ԕV
gI7(
wqmoK
|bc| +SՏI9uo +ɇH8cb+4UG)UiPe'CQ*iڅ~l~eq5DW71/*^di9~Wa2WqY3.1hK ⾽p$aꌪɶ$+;SE:דIt]ܾXظNB7B<6HXπlk=ٺLTήʺx܈NIAoqqO_:K$ _+%T64ֺޚJr։ī0UE9 +Aw|C*j``tS#aQkՌ.DW.7 +/ k>_m~ź`#FlVĊ-%0a'+b9݇U~Wƶp2j\.O +}d!VG5>>*Pm;~3[(ycq4JcsDž5 +endstream +endobj +928 0 obj << +/Type /Page +/Contents 929 0 R +/Resources 927 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 900 0 R +/Annots [ 926 0 R ] +>> endobj +926 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +930 0 obj << +/D [928 0 R /XYZ 84.039 772.024 null] +>> endobj +242 0 obj << +/D [928 0 R /XYZ 85.039 650.117 null] +>> endobj +246 0 obj << +/D [928 0 R /XYZ 85.039 419.509 null] +>> endobj +250 0 obj << +/D [928 0 R /XYZ 85.039 262.498 null] +>> endobj +927 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F14 444 0 R /F11 508 0 R /F80 365 0 R /F21 925 0 R /F59 356 0 R /F6 435 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +936 0 obj << +/Length 4493 +/Filter /FlateDecode +>> +stream +x\Y8r~_o-`]ۀa`UJ<j}8HTU}ɔ(*F|2'|ӛ?~x}1 "8&'V +;%هy+rx?|/oϪXOFkګ"77T+ _{ws
?V=lÛxZddxd2Ʌ~*.&&(oo}Eq ]X0 +ĝGqo@ܷڨl^7|U.g|T(,t\WfqMvdZ,ʵ5^B5?O$5.ᦩ|X&NHmڤfZE4VJM[ԔS"mAVĎ6u=KugU9VJl4զ,6+3==&\,> +z۱Qӧd3VTa*(<i ;D
ZX?}\5&("Fe~b#Ѹ6316|WwHXܶm$u|Suӭ$(+H %nC([xZ2ղBySl +闂6kf +/ހva)j-OןT?{YƇt9D'evÑ5^NiЧ5@R{N]~D8d2#1k-vMHa!isl3Eʂ-OAO(ag +4FFbQa̢@FQ(|h + 8I`؊sa}^h4=({\. +*4 r#9C@̍0D +?Biy5!a.ٜ?#4`1|^Ҡ1&9KRV\ox?+|i&|A)@`<NF)ww/Tg=eBʂi:TЀ/N8y>/WK(c#3]LYLK_̍>E|Spb:v
\sm'}ws*PtyrTz[O:c+ ނH[C&1ʫSSi^Leb[<60<#_#[|3v[iuaV$4r?/|\Y2,lp +H\Ö`QN3 _8Q˛~zX[$L<іߏ9w⥄oc*1~VۗuC*ZYӨ{߂}~ɮ!;`L0a3yMf.\֔ˇxKn< +xO<#82B66U*R>.ѢwEZDRM۶nh]hJ*/g^O7 +Agm_fUgw=}1Q5*"[T2F|C;,^E1?:+nd6 "AX@rt*`W}04Q5df~Ҋi(^*nw`1U\R`YVcCP=5RgaB-HvVKf0Rwm:ky;Pd+.TX\8`֫{cXRFe]WWtT O-Ֆ8G㛊N,Ϊr;ߌIZ|D1RJ#shVqb7cӝnGG[lv
z2/$q?.[Bc\^ ms=3NP$xJ]$ʈB}DKA_ +ߤ'uՅJ`rkj0
>O9½"}RD*ȱzܒ~*\c=_a1rx9pj +l-D`S_tDz/Lsfq0ܽU3pFpH a`2PHb J1Ỳ G#c)v֫y+~0o7 z#1=|`{mrCRes@Ӹs}^;\M|3i. +uO3-ܵyMo6WWOAZ$~Z{,fw:{a}p8/_ԩ!pKA9&O"pbU +e9#y+)z2{00<`[xW..M`5N0|n'
IC 4x0 +'Xanc*+8~{X܀^SlԤ UR,< +J\ֈuw\I6Wu̳WapZewuG|=zVf["w}0K塊}(<W==z[cp +endstream +endobj +935 0 obj << +/Type /Page +/Contents 936 0 R +/Resources 934 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 944 0 R +/Annots [ 931 0 R 932 0 R 933 0 R ] +>> endobj +931 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [254.338 527.26 288.85 539.215] +/A << /S /GoTo /D (table.4) >> +>> endobj +932 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [141.937 152.897 152.052 165.562] +/A << /S /GoTo /D (hy@ltsfn25) >> +>> endobj +933 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +937 0 obj << +/D [935 0 R /XYZ 84.039 772.024 null] +>> endobj +254 0 obj << +/D [935 0 R /XYZ 85.039 667.866 null] +>> endobj +938 0 obj << +/D [935 0 R /XYZ 85.039 469.034 null] +>> endobj +939 0 obj << +/D [935 0 R /XYZ 85.039 297.355 null] +>> endobj +940 0 obj << +/D [935 0 R /XYZ 85.039 261.213 null] +>> endobj +941 0 obj << +/D [935 0 R /XYZ 85.039 225.624 null] +>> endobj +942 0 obj << +/D [935 0 R /XYZ 85.039 151.624 null] +>> endobj +943 0 obj << +/D [935 0 R /XYZ 89.556 113.102 null] +>> endobj +934 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F11 508 0 R /F45 355 0 R /F53 366 0 R /F55 358 0 R /F13 711 0 R /F7 434 0 R /F38 714 0 R /F34 357 0 R /F33 364 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +948 0 obj << +/Length 4131 +/Filter /FlateDecode +>> +stream +xko +"4`om +@2Z0DDlLV3?$#?_hig`H{{dcmՀ0׀#6/1Y<)\{)"<M>K&h82Yot +MbeШChz\{Mp\H2Q1_>.>;E29z e!B +TѤڥyFWj03i^IԼYz!;x\lEik~/
X쒲(pc٥H ˡB}=HOshK) %KTԮUR BJDrd%
Ho/qrJC-tRCJ=Nuz}91,q*17 +\h}z7,7^g>4M{i}[Jb[qx6Yn%K5F86r;yw\?VGOsW{O<?0Oiɛ634iHLY*;4iٝ>ExEr||\ϳZ"H +肨 +.H*e`~(7A>mAm1ęz>DQpUqVNJCx|56,
`Ρ`# +ehSIChqNZd79,SiuWnV-̶)kNx\&|B*FEI"TVCĕr;dk:cN{j~!IVr.v}&~L9٧yQRsUK9ܖ'_}s_vV¬.*!d~4K%~;
f>ccjjCQ!DlIn,!*V DKI~3I?(%o[#P~J6⯫}zKLARxjŰqMdV:zvWEߧ\,)} R=@^\Ɨ< +er=3FG
9M3]h;e+v{_grø<]\VHYkeϭj]_=^JE-͆CLw̦`m6bu+|}7"&N1ak3FշRQDj+RnCC`0H,ؘjZ +@9c8# lqQR#kф3{Lx2c,8hcсݩ"qV~z&mH
Vl|_a8L./Rln{&KƄ +Y^8|,6,f]Ii0U&67)RMM$L]-ikƌuR"l'`E]x%V3<sùpLp+Ϝ\JEg8yI/ۼE&#n7m%ھd}syٻWpfSeƖp5V'joMwKYw7[a*]^uG1cp]khܲN2vFZ9yf/d]h[Zf]Y8XAd|&<h{3Pc NFCT=?UeZDa'|3d[(~.W]!FwAa1l5. v +{!Nv|<=>[y:W +endstream +endobj +947 0 obj << +/Type /Page +/Contents 948 0 R +/Resources 946 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 944 0 R +/Annots [ 945 0 R ] +>> endobj +945 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +949 0 obj << +/D [947 0 R /XYZ 84.039 772.024 null] +>> endobj +950 0 obj << +/D [947 0 R /XYZ 85.039 720.668 null] +>> endobj +951 0 obj << +/D [947 0 R /XYZ 85.039 684.803 null] +>> endobj +258 0 obj << +/D [947 0 R /XYZ 85.039 656.04 null] +>> endobj +262 0 obj << +/D [947 0 R /XYZ 85.039 240.19 null] +>> endobj +946 0 obj << +/Font << /F8 418 0 R /F91 433 0 R /F80 365 0 R /F59 356 0 R /F6 435 0 R /F14 444 0 R /F11 508 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +955 0 obj << +/Length 4124 +/Filter /FlateDecode +>> +stream +x]oFݿB/R@~6w(w + s%kU+QF,J ZIq,~lboaL]d +f҂;J CVi~|O'٭@+<oHu% +@mr@sUO{f#{i;xv4X@dNi63vqH܀0vn(`8^-\aO<$fZE)뵝Ҙ; +)8|sNWDRA4E77o'yij/ 3w,웸KbQg}_҃^QzVޗyߜ.?fgv77mo0uK*ndF\Γ;MMxG`)J&!^ic3Os70TeOBkz*bMƶufB_zhhH1oTiIW +M^:{]'ũctq*s[31ٜ0[DXYrج"Z Β$%q z#Y|IBnC_Ivop: ϵVvnKopAPI43YVUXʋ6,^r0[o^'*$|L"`!\P76Hd,#d0cs3F <)m6p+-[oa"p7@ypK=Zm{pOJ+3@%.O,"H?ykR)V'Z `lh +>/}=eq8A.+tY>Pi4X:)3GNѝ'x\jk|).Vl_d +xMe=V26Q*^S_ Τe"YXdX^+h(L|P@VGO<#׀U#w2VbfrEǠn ,buU(ـXf<?a^C3U:76\Tڦ/|ⷵ&7Z9*/hDbMQC +JFu%t}L51 Ζeu0鼃IzxhV(~`Mʭٲo<K.&T0ᐟƳ-Lx4Ь&#[?ɔ`TQŨ}yaqy[C˒\q-K[y?_|_ie /J-Kn*Ff0n%pѽdMD^VT1?Ybzt<Zytk!hZګl0fanq>,'R=H37dGIQ2HJz*Jc3zړ _K:d $YmOj{HC {'f? ثźo,߫I[iAauI*kO>'֗,U/ib:"DF'?YJRSy +9t1yCE5;xȟ캂S{y[/fMph/Y +PR'^J갯?N>T=ЁVЁ-1`y(1(G6jG@سQޱi|<2F#7Fu3]H}J
rBNʞJۿIM/3Y+Wm/idŖW|Ѱo.)y]YktW;ÚV4~q^<|8c +Pm1o}`ʯ<^A? +r>=H9KO0ta}v*1 +̈=3h/c0jW}1A;2]Wߒ1H%PmѠ>hK=( -d-CYV +endstream +endobj +954 0 obj << +/Type /Page +/Contents 955 0 R +/Resources 953 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 944 0 R +/Annots [ 952 0 R ] +>> endobj +952 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +956 0 obj << +/D [954 0 R /XYZ 84.039 772.024 null] +>> endobj +266 0 obj << +/D [954 0 R /XYZ 85.039 554.449 null] +>> endobj +270 0 obj << +/D [954 0 R /XYZ 85.039 167.079 null] +>> endobj +953 0 obj << +/Font << /F8 418 0 R /F14 444 0 R /F91 433 0 R /F11 508 0 R /F59 356 0 R /F6 435 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +961 0 obj << +/Length 4029 +/Filter /FlateDecode +>> +stream +xk +})ߤ=ȫA>@}]lˑ[,wd˖e[&iEJg!o}w6JHn#:2Tt;Ƿ͇ۿ +J|/Do*<衇۫tzmF8}aZ=s>+uosX>Z
"e6t"JLb'" 'p=} ++nPPD¨!It ٠0 +ԄZ#Td +r!&F?"ϟo* +lFO,{,YKZ08P
f~-dzm2um{z\}a[6S\̧][C+əPP&ȁ|2Wl"( +X}gP!&{ƓiyDZGs[tgf zi[ŤHCaP {e(#a e +i+aCGT(w]kRZ*06 hh9cӸnbr +̺xWM8 Ȃ
H*yYV</,[5,eՏiiR Xd~"da9L|ـi!eS0<*W +y`⾘*\T,m U>8qlIB- *oQ7x(F 4W0UGOذBS(DCQ;qUya?n$zƠgϳt(0pI +̈ +VAY$+YYXY
0s3ǘY΅&$$ef
Dq6Ylh(9 +t3,F֦F,[eYlog3eOxc(aپ>ʟtQ*H:Dlv(fȋ9 *%5,_^RHB7ig6/C+spD5a \< +aߌpb7|M^2mҹzNi +ɉh9bsv\ +endstream +endobj +960 0 obj << +/Type /Page +/Contents 961 0 R +/Resources 959 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 944 0 R +/Annots [ 957 0 R 958 0 R ] +>> endobj +957 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [219.525 222.051 282.564 234.006] +/A << /S /GoTo /D (subsection.3.4) >> +>> endobj +958 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +962 0 obj << +/D [960 0 R /XYZ 84.039 772.024 null] +>> endobj +274 0 obj << +/D [960 0 R /XYZ 85.039 487.062 null] +>> endobj +278 0 obj << +/D [960 0 R /XYZ 85.039 423.446 null] +>> endobj +282 0 obj << +/D [960 0 R /XYZ 85.039 352.647 null] +>> endobj +286 0 obj << +/D [960 0 R /XYZ 85.039 193.943 null] +>> endobj +290 0 obj << +/D [960 0 R /XYZ 85.039 81.755 null] +>> endobj +959 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F6 435 0 R /F91 433 0 R /F14 444 0 R /F80 365 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +967 0 obj << +/Length 1037 +/Filter /FlateDecode +>> +stream +xWKo6A4P@c 4JQ#N +R)m+( +(JH6jqG;[r{Ɇy7as1l#&| +<M$0z9ֹ|Ev!c7ei2O[,a5y3Y}[}" '2,\ڱQkF'/# ]߈]l0Nyޜ{:`~Ny'=Q FG9r*OG- +endstream +endobj +966 0 obj << +/Type /Page +/Contents 967 0 R +/Resources 965 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 944 0 R +/Annots [ 963 0 R 964 0 R ] +>> endobj +963 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [466.013 624.1 511.232 632.746] +/A << /S /GoTo /D (section.15) >> +>> endobj +964 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +968 0 obj << +/D [966 0 R /XYZ 84.039 772.024 null] +>> endobj +294 0 obj << +/D [966 0 R /XYZ 85.039 659.025 null] +>> endobj +298 0 obj << +/D [966 0 R /XYZ 85.039 602.238 null] +>> endobj +965 0 obj << +/Font << /F8 418 0 R /F80 365 0 R /F11 508 0 R /F83 509 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1071 0 obj << +/Length 3559 +/Filter /FlateDecode +>> +stream +x][w~У8gק$l:OA9-LEHdx1 FKxǛon>`ǜ:{H0:1Z0TrO~Mwt +$3?Ǜ[DL/;¤b1z~(vF +x_ďٟέ?1e}w(/HYM;O_Ό3/sxr!6fRs +LAT#s#]~u~lxiQAF3flt +2R k^m`M +XQRTMOhh)y&)7X@2~ʤ֊p-/W|t+pRRѻ饼b̞OR1bly!q<0l76FZl͐aӸե=DKUXJ:ZySJwtc<
;yGYC4EI?*!NԤ?n#*+Wh܄Uś;CBJ,W͔͜L'<[\>2Qř̲ xν8`I:zqL|OY#R3մT`8ґՂM[5[smG{x +VËCD-2F +/Xz~.!T}FagĠԡ T+Ǽ/g 7}!ꂊ3FAd6Kȃx#|Zȃ!3/g(̴BpW幊scw(p_Ph7z0_!VԾ> +UIKrOeGyD*DF +wYQL?.zOjŵjEC1+ZHG1J=fr#qk-c*[mI:㼩bD〗vGK4C<knG1ܢ0&ˠ/o%xE8aAu!,Y|)BY7}[ϔ|#&AC,oyمx?0C +endstream +endobj +1070 0 obj << +/Type /Page +/Contents 1071 0 R +/Resources 1069 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 944 0 R +/Annots [ 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 1068 0 R ] +>> endobj +969 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.598 657.171 278.806 664.942] +/A << /S /GoTo /D (page.11) >> +>> endobj +970 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 655.278 293.653 665.391] +/A << /S /GoTo /D (page.15) >> +>> endobj +971 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 624.116 293.653 631.887] +/A << /S /GoTo /D (page.34) >> +>> endobj +972 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 612.819 293.653 620.59] +/A << /S /GoTo /D (page.21) >> +>> endobj +973 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 579.764 293.653 587.534] +/A << /S /GoTo /D (page.34) >> +>> endobj +974 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 568.466 293.653 576.237] +/A << /S /GoTo /D (page.9) >> +>> endobj +975 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 557.169 293.653 564.94] +/A << /S /GoTo /D (page.9) >> +>> endobj +976 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 524.114 293.653 531.885] +/A << /S /GoTo /D (page.48) >> +>> endobj +977 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.598 512.816 278.806 520.587] +/A << /S /GoTo /D (page.14) >> +>> endobj +978 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 512.816 293.653 520.587] +/A << /S /GoTo /D (page.52) >> +>> endobj +979 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 490.222 293.653 497.993] +/A << /S /GoTo /D (page.14) >> +>> endobj +980 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 478.925 293.653 486.696] +/A << /S /GoTo /D (page.14) >> +>> endobj +981 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 467.627 293.653 475.398] +/A << /S /GoTo /D (page.11) >> +>> endobj +982 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 456.33 293.653 464.101] +/A << /S /GoTo /D (page.10) >> +>> endobj +983 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 445.033 293.653 452.804] +/A << /S /GoTo /D (page.31) >> +>> endobj +984 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 433.736 293.653 441.506] +/A << /S /GoTo /D (page.35) >> +>> endobj +985 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 422.438 293.653 430.209] +/A << /S /GoTo /D (page.6) >> +>> endobj +986 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 376.093 293.653 385.857] +/A << /S /GoTo /D (page.33) >> +>> endobj +987 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.598 364.796 278.806 374.559] +/A << /S /GoTo /D (page.13) >> +>> endobj +988 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 364.796 293.653 374.559] +/A << /S /GoTo /D (page.14) >> +>> endobj +989 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 355.491 293.653 363.262] +/A << /S /GoTo /D (page.48) >> +>> endobj +990 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 332.897 293.653 340.668] +/A << /S /GoTo /D (page.28) >> +>> endobj +991 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 299.841 293.653 307.612] +/A << /S /GoTo /D (page.36) >> +>> endobj +992 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 288.544 293.653 296.315] +/A << /S /GoTo /D (page.35) >> +>> endobj +993 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 255.489 293.653 263.26] +/A << /S /GoTo /D (page.29) >> +>> endobj +994 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 222.434 293.653 230.204] +/A << /S /GoTo /D (page.14) >> +>> endobj +995 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 211.136 293.653 218.907] +/A << /S /GoTo /D (page.36) >> +>> endobj +996 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 199.839 293.653 207.61] +/A << /S /GoTo /D (page.36) >> +>> endobj +997 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 188.542 293.653 196.313] +/A << /S /GoTo /D (page.45) >> +>> endobj +998 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 177.245 293.653 185.015] +/A << /S /GoTo /D (page.45) >> +>> endobj +999 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 165.947 293.653 173.718] +/A << /S /GoTo /D (page.45) >> +>> endobj +1000 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 154.65 293.653 162.421] +/A << /S /GoTo /D (page.45) >> +>> endobj +1001 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 143.353 293.653 151.124] +/A << /S /GoTo /D (page.36) >> +>> endobj +1002 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 132.056 293.653 139.826] +/A << /S /GoTo /D (page.36) >> +>> endobj +1003 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 118.766 293.653 128.977] +/A << /S /GoTo /D (page.37) >> +>> endobj +1004 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 109.461 293.653 117.232] +/A << /S /GoTo /D (page.31) >> +>> endobj +1005 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 98.164 293.653 105.935] +/A << /S /GoTo /D (page.25) >> +>> endobj +1006 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 679.766 511.232 687.537] +/A << /S /GoTo /D (page.28) >> +>> endobj +1007 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 645.325 511.232 655.088] +/A << /S /GoTo /D (page.5) >> +>> endobj +1008 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 634.331 511.232 644.095] +/A << /S /GoTo /D (page.22) >> +>> endobj +1009 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 623.338 511.232 633.101] +/A << /S /GoTo /D (page.5) >> +>> endobj +1010 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 614.336 511.232 622.107] +/A << /S /GoTo /D (page.20) >> +>> endobj +1011 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 601.35 511.232 611.114] +/A << /S /GoTo /D (page.20) >> +>> endobj +1012 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 592.349 511.232 600.12] +/A << /S /GoTo /D (page.36) >> +>> endobj +1013 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 559.901 511.232 567.672] +/A << /S /GoTo /D (page.25) >> +>> endobj +1014 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 548.907 511.232 556.678] +/A << /S /GoTo /D (page.31) >> +>> endobj +1015 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 537.913 511.232 545.684] +/A << /S /GoTo /D (page.58) >> +>> endobj +1016 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 526.919 511.232 534.69] +/A << /S /GoTo /D (page.29) >> +>> endobj +1017 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 515.926 511.232 523.697] +/A << /S /GoTo /D (page.24) >> +>> endobj +1018 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 504.932 511.232 512.703] +/A << /S /GoTo /D (page.24) >> +>> endobj +1019 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 493.938 511.232 501.709] +/A << /S /GoTo /D (page.23) >> +>> endobj +1020 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 482.945 511.232 490.715] +/A << /S /GoTo /D (page.34) >> +>> endobj +1021 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 471.951 511.232 479.722] +/A << /S /GoTo /D (page.31) >> +>> endobj +1022 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 460.957 511.232 468.728] +/A << /S /GoTo /D (page.34) >> +>> endobj +1023 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 449.963 511.232 457.734] +/A << /S /GoTo /D (page.9) >> +>> endobj +1024 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 438.97 511.232 446.74] +/A << /S /GoTo /D (page.9) >> +>> endobj +1025 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 427.976 511.232 435.747] +/A << /S /GoTo /D (page.9) >> +>> endobj +1026 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 416.982 511.232 424.753] +/A << /S /GoTo /D (page.52) >> +>> endobj +1027 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 405.988 511.232 413.759] +/A << /S /GoTo /D (page.52) >> +>> endobj +1028 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 394.995 511.232 402.766] +/A << /S /GoTo /D (page.10) >> +>> endobj +1029 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 384.001 511.232 391.772] +/A << /S /GoTo /D (page.13) >> +>> endobj +1030 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 373.007 511.232 380.778] +/A << /S /GoTo /D (page.6) >> +>> endobj +1031 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 362.013 511.232 369.784] +/A << /S /GoTo /D (page.6) >> +>> endobj +1032 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 351.02 511.232 358.791] +/A << /S /GoTo /D (page.52) >> +>> endobj +1033 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 340.026 511.232 347.797] +/A << /S /GoTo /D (page.54) >> +>> endobj +1034 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 329.032 511.232 336.803] +/A << /S /GoTo /D (page.54) >> +>> endobj +1035 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 318.039 511.232 325.809] +/A << /S /GoTo /D (page.32) >> +>> endobj +1036 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 307.045 511.232 314.816] +/A << /S /GoTo /D (page.33) >> +>> endobj +1037 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 296.051 511.232 303.822] +/A << /S /GoTo /D (page.32) >> +>> endobj +1038 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 285.057 511.232 292.828] +/A << /S /GoTo /D (page.33) >> +>> endobj +1039 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 274.064 511.232 281.834] +/A << /S /GoTo /D (page.32) >> +>> endobj +1040 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 263.07 511.232 270.841] +/A << /S /GoTo /D (page.33) >> +>> endobj +1041 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 252.076 496.385 259.847] +/A << /S /GoTo /D (page.14) >> +>> endobj +1042 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 250.084 511.232 260.295] +/A << /S /GoTo /D (page.16) >> +>> endobj +1043 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 241.082 511.232 248.853] +/A << /S /GoTo /D (page.56) >> +>> endobj +1044 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 230.089 511.232 237.859] +/A << /S /GoTo /D (page.33) >> +>> endobj +1045 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 219.095 511.232 226.866] +/A << /S /GoTo /D (page.31) >> +>> endobj +1046 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 208.101 511.232 215.872] +/A << /S /GoTo /D (page.32) >> +>> endobj +1047 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 197.107 511.232 204.878] +/A << /S /GoTo /D (page.33) >> +>> endobj +1048 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 186.114 511.232 193.885] +/A << /S /GoTo /D (page.13) >> +>> endobj +1049 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [470.331 175.12 481.538 182.891] +/A << /S /GoTo /D (page.17) >> +>> endobj +1050 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 173.127 496.385 183.339] +/A << /S /GoTo /D (page.18) >> +>> endobj +1051 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 173.127 511.232 183.339] +/A << /S /GoTo /D (page.20) >> +>> endobj +1052 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 164.126 511.232 171.897] +/A << /S /GoTo /D (page.28) >> +>> endobj +1053 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 153.132 511.232 160.903] +/A << /S /GoTo /D (page.30) >> +>> endobj +1054 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 142.139 511.232 149.91] +/A << /S /GoTo /D (page.37) >> +>> endobj +1055 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 131.145 511.232 138.916] +/A << /S /GoTo /D (page.34) >> +>> endobj +1056 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 120.151 511.232 127.922] +/A << /S /GoTo /D (page.53) >> +>> endobj +1057 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 109.158 511.232 116.928] +/A << /S /GoTo /D (page.54) >> +>> endobj +1058 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 98.164 511.232 105.935] +/A << /S /GoTo /D (page.29) >> +>> endobj +1068 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 46.726 340.236 56.887] +/A << /S /GoTo /D (section.18) >> +>> endobj +1072 0 obj << +/D [1070 0 R /XYZ 84.039 772.024 null] +>> endobj +1069 0 obj << +/Font << /F8 418 0 R /F62 354 0 R /F53 366 0 R /F59 356 0 R /F45 355 0 R /F99 827 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1216 0 obj << +/Length 3750 +/Filter /FlateDecode +>> +stream +xKs#<,ݍ͕89>̒K|($M|$c8 +Gߗ08aTᴐ;\7 +S[NJ`Q(:W\^/[}0śE)MSf6Q +`'UhLi<h쏺A>n[8 +.f$=H~i6`NeeSlaOGĺxP>6G!'xȲj?xqRj(eĐ~(~jiNbc&hL' +l̬1'ąѫBekXcpdWMHGKށگ}y%(U6X y%ϝ0=-(.g]<J#ݗvgm3H;֒'M~fOgj{}|*<Of['*)x)9HAΐ1۸[M ʱQT#~&^=c̗Q9 5CA 9g.;. +d:In_Vg`jP
$TΈ5bڏ5~s[z**HB˃,ۏ%#fw +Iu}Hr.4UdAs?u!%$P +x &/ڰnjnvYz,Mf_
q3aTd/DAWd7AM3d0g"r?ēdS̲P@/ +}/7/'Dh3gE;ydBssf3 т,BH-(kYmAL,V(OC-o%xzP@BIXe5+|
'DRTۨ^7d0<ATnY4|ěigP&(Gb-hĜPnՈxN1'W,K$ X8~&p:'s,P\KA?떾٤?~U[]UcQ +Q4h'ݿ +P)GpYL/is,[VU96Mr%.{nIvi6gN(4TO:e/v"ĺAP)u$0u%>rs܇K
)@HNzMJamꭟĎLp +Q}cSwcwsRt+F]E=BETZPUJ6 +V.LnvHL9n- Kc:CI]Vv/w<Xk}~_}~{햳U^EԎNS`d<gF}*vu^-qfK$\cgͽr( eNPނNr8y":Ub'* ˤe`r/gH +jEodhT
`Pu+jh$>*@4OiDo}0MNIk{++nm7Oh} gnf~$O)eD,Bz$YWXo)ey*nϻҶγ域p \hRMM<p R(7 ۨ + +endstream +endobj +1215 0 obj << +/Type /Page +/Contents 1216 0 R +/Resources 1214 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1218 0 R +/Annots [ 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 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 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 1213 0 R ] +>> endobj +1059 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 721.609 293.653 729.38] +/A << /S /GoTo /D (page.53) >> +>> endobj +1060 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 710.274 293.653 718.044] +/A << /S /GoTo /D (page.54) >> +>> endobj +1061 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 698.938 293.653 706.709] +/A << /S /GoTo /D (page.52) >> +>> endobj +1062 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 687.603 293.653 695.374] +/A << /S /GoTo /D (page.53) >> +>> endobj +1063 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 676.267 293.653 684.038] +/A << /S /GoTo /D (page.53) >> +>> endobj +1064 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 664.932 293.653 672.703] +/A << /S /GoTo /D (page.28) >> +>> endobj +1065 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 653.597 293.653 661.368] +/A << /S /GoTo /D (page.28) >> +>> endobj +1066 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 642.261 293.653 650.032] +/A << /S /GoTo /D (page.53) >> +>> endobj +1067 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 630.926 293.653 638.697] +/A << /S /GoTo /D (page.52) >> +>> endobj +1073 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 619.591 293.653 627.362] +/A << /S /GoTo /D (page.25) >> +>> endobj +1074 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 608.255 293.653 616.026] +/A << /S /GoTo /D (page.54) >> +>> endobj +1075 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 596.92 293.653 604.691] +/A << /S /GoTo /D (page.54) >> +>> endobj +1076 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 585.585 293.653 593.355] +/A << /S /GoTo /D (page.26) >> +>> endobj +1077 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 574.249 293.653 582.02] +/A << /S /GoTo /D (page.29) >> +>> endobj +1078 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 562.914 293.653 570.685] +/A << /S /GoTo /D (page.9) >> +>> endobj +1079 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 551.578 293.653 559.349] +/A << /S /GoTo /D (page.9) >> +>> endobj +1080 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 540.243 293.653 548.014] +/A << /S /GoTo /D (page.9) >> +>> endobj +1081 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 528.908 293.653 536.679] +/A << /S /GoTo /D (page.10) >> +>> endobj +1082 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 517.572 293.653 525.343] +/A << /S /GoTo /D (page.13) >> +>> endobj +1083 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 506.237 293.653 514.008] +/A << /S /GoTo /D (page.6) >> +>> endobj +1084 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 494.902 293.653 502.672] +/A << /S /GoTo /D (page.6) >> +>> endobj +1085 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 483.566 293.653 491.337] +/A << /S /GoTo /D (page.5) >> +>> endobj +1086 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 472.231 293.653 480.002] +/A << /S /GoTo /D (page.6) >> +>> endobj +1087 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 460.896 293.653 468.666] +/A << /S /GoTo /D (page.7) >> +>> endobj +1088 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 449.56 293.653 457.331] +/A << /S /GoTo /D (page.8) >> +>> endobj +1089 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 438.225 293.653 445.996] +/A << /S /GoTo /D (page.26) >> +>> endobj +1090 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 426.889 293.653 434.66] +/A << /S /GoTo /D (page.29) >> +>> endobj +1091 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 415.554 293.653 423.325] +/A << /S /GoTo /D (page.29) >> +>> endobj +1092 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 404.219 293.653 411.99] +/A << /S /GoTo /D (page.4) >> +>> endobj +1093 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 392.883 293.653 400.654] +/A << /S /GoTo /D (page.54) >> +>> endobj +1094 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 381.548 293.653 389.319] +/A << /S /GoTo /D (page.5) >> +>> endobj +1095 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 370.213 293.653 377.983] +/A << /S /GoTo /D (page.6) >> +>> endobj +1096 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 358.877 293.653 366.648] +/A << /S /GoTo /D (page.55) >> +>> endobj +1097 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 347.542 293.653 355.313] +/A << /S /GoTo /D (page.24) >> +>> endobj +1098 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 336.206 293.653 343.977] +/A << /S /GoTo /D (page.24) >> +>> endobj +1099 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 324.871 293.653 332.642] +/A << /S /GoTo /D (page.34) >> +>> endobj +1100 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 313.536 293.653 321.307] +/A << /S /GoTo /D (page.31) >> +>> endobj +1101 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 302.2 293.653 309.971] +/A << /S /GoTo /D (page.58) >> +>> endobj +1102 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 290.865 293.653 298.636] +/A << /S /GoTo /D (page.56) >> +>> endobj +1103 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 279.53 293.653 287.301] +/A << /S /GoTo /D (page.30) >> +>> endobj +1104 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 268.194 293.653 275.965] +/A << /S /GoTo /D (page.24) >> +>> endobj +1105 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 256.859 293.653 264.63] +/A << /S /GoTo /D (page.24) >> +>> endobj +1106 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 245.524 293.653 253.294] +/A << /S /GoTo /D (page.23) >> +>> endobj +1107 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 234.188 293.653 241.959] +/A << /S /GoTo /D (page.58) >> +>> endobj +1108 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 222.853 293.653 230.624] +/A << /S /GoTo /D (page.57) >> +>> endobj +1109 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 211.517 293.653 219.288] +/A << /S /GoTo /D (page.30) >> +>> endobj +1110 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 200.182 293.653 207.953] +/A << /S /GoTo /D (page.30) >> +>> endobj +1111 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 188.847 293.653 196.618] +/A << /S /GoTo /D (page.30) >> +>> endobj +1112 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 177.511 293.653 185.282] +/A << /S /GoTo /D (page.23) >> +>> endobj +1113 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [252.751 166.176 263.959 173.947] +/A << /S /GoTo /D (page.17) >> +>> endobj +1114 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [267.598 164.183 278.806 174.395] +/A << /S /GoTo /D (page.18) >> +>> endobj +1115 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 164.183 293.653 174.395] +/A << /S /GoTo /D (page.20) >> +>> endobj +1116 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 154.841 293.653 162.611] +/A << /S /GoTo /D (page.21) >> +>> endobj +1117 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 143.505 293.653 151.276] +/A << /S /GoTo /D (page.20) >> +>> endobj +1118 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 132.17 293.653 139.941] +/A << /S /GoTo /D (page.21) >> +>> endobj +1119 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 120.835 293.653 128.605] +/A << /S /GoTo /D (page.23) >> +>> endobj +1120 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 109.499 293.653 117.27] +/A << /S /GoTo /D (page.58) >> +>> endobj +1121 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [287.053 98.164 293.653 105.935] +/A << /S /GoTo /D (page.7) >> +>> endobj +1122 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 721.609 511.232 729.38] +/A << /S /GoTo /D (page.8) >> +>> endobj +1123 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 710.635 511.232 718.406] +/A << /S /GoTo /D (page.51) >> +>> endobj +1124 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 699.661 511.232 707.432] +/A << /S /GoTo /D (page.51) >> +>> endobj +1125 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 688.687 511.232 696.458] +/A << /S /GoTo /D (page.30) >> +>> endobj +1126 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 677.713 511.232 685.484] +/A << /S /GoTo /D (page.24) >> +>> endobj +1127 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 666.739 511.232 674.51] +/A << /S /GoTo /D (page.24) >> +>> endobj +1128 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 655.766 511.232 663.536] +/A << /S /GoTo /D (page.23) >> +>> endobj +1129 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 644.792 511.232 652.562] +/A << /S /GoTo /D (page.27) >> +>> endobj +1130 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 633.818 496.385 641.589] +/A << /S /GoTo /D (page.27) >> +>> endobj +1131 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 633.818 511.232 641.589] +/A << /S /GoTo /D (page.31) >> +>> endobj +1132 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 622.844 511.232 630.615] +/A << /S /GoTo /D (page.30) >> +>> endobj +1133 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 611.87 511.232 619.641] +/A << /S /GoTo /D (page.30) >> +>> endobj +1134 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 600.896 511.232 608.667] +/A << /S /GoTo /D (page.30) >> +>> endobj +1135 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 589.922 511.232 597.693] +/A << /S /GoTo /D (page.35) >> +>> endobj +1136 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 578.948 511.232 586.719] +/A << /S /GoTo /D (page.35) >> +>> endobj +1137 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 567.974 511.232 575.745] +/A << /S /GoTo /D (page.58) >> +>> endobj +1138 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 533.573 511.232 543.337] +/A << /S /GoTo /D (page.5) >> +>> endobj +1139 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 503.157 511.232 510.928] +/A << /S /GoTo /D (page.16) >> +>> endobj +1140 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 491.436 511.232 500.402] +/A << /S /GoTo /D (page.22) >> +>> endobj +1141 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 481.209 511.232 488.98] +/A << /S /GoTo /D (page.36) >> +>> endobj +1142 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 470.235 511.232 478.006] +/A << /S /GoTo /D (page.48) >> +>> endobj +1143 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 457.269 511.232 467.481] +/A << /S /GoTo /D (page.22) >> +>> endobj +1144 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 448.288 511.232 456.058] +/A << /S /GoTo /D (page.14) >> +>> endobj +1145 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 437.314 511.232 445.084] +/A << /S /GoTo /D (page.26) >> +>> endobj +1146 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 426.34 511.232 434.111] +/A << /S /GoTo /D (page.28) >> +>> endobj +1147 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 393.931 511.232 401.702] +/A << /S /GoTo /D (page.28) >> +>> endobj +1148 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 382.957 511.232 390.728] +/A << /S /GoTo /D (page.5) >> +>> endobj +1149 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [489.785 350.549 496.385 358.319] +/A << /S /GoTo /D (page.4) >> +>> endobj +1150 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 350.549 511.232 358.319] +/A << /S /GoTo /D (page.31) >> +>> endobj +1151 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [445.244 326.608 451.844 336.372] +/A << /S /GoTo /D (page.2) >> +>> endobj +1152 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [455.484 326.608 466.691 336.372] +/A << /S /GoTo /D (page.20) >> +>> endobj +1153 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [470.331 326.608 481.538 336.372] +/A << /S /GoTo /D (page.34) >> +>> endobj +1154 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 326.608 496.385 336.372] +/A << /S /GoTo /D (page.56) >> +>> endobj +1155 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 326.608 511.232 336.372] +/A << /S /GoTo /D (page.58) >> +>> endobj +1156 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 317.627 511.232 325.398] +/A << /S /GoTo /D (page.58) >> +>> endobj +1157 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 304.661 511.232 314.424] +/A << /S /GoTo /D (page.35) >> +>> endobj +1158 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [494.393 293.687 500.993 303.45] +/A << /S /GoTo /D (page.1) >> +>> endobj +1159 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 293.687 511.232 303.45] +/A << /S /GoTo /D (page.2) >> +>> endobj +1160 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 282.713 511.232 292.476] +/A << /S /GoTo /D (page.2) >> +>> endobj +1161 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [363.842 271.739 370.442 281.502] +/A << /S /GoTo /D (page.1) >> +>> endobj +1162 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [373.057 271.739 379.657 281.502] +/A << /S /GoTo /D (page.3) >> +>> endobj +1163 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [383.296 271.739 389.897 281.502] +/A << /S /GoTo /D (page.6) >> +>> endobj +1164 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [393.536 271.739 404.744 281.502] +/A << /S /GoTo /D (page.10) >> +>> endobj +1165 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [408.383 271.739 419.591 281.502] +/A << /S /GoTo /D (page.20) >> +>> endobj +1166 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [423.23 271.739 434.438 281.502] +/A << /S /GoTo /D (page.22) >> +>> endobj +1167 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [438.077 271.739 449.285 281.502] +/A << /S /GoTo /D (page.24) >> +>> endobj +1168 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [452.924 271.739 464.132 281.502] +/A << /S /GoTo /D (page.26) >> +>> endobj +1169 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [467.771 271.739 478.979 281.502] +/A << /S /GoTo /D (page.30) >> +>> endobj +1170 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [482.618 271.739 493.826 281.502] +/A << /S /GoTo /D (page.31) >> +>> endobj +1171 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [497.465 271.739 508.673 281.502] +/A << /S /GoTo /D (page.34) >> +>> endobj +1172 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [383.631 261.029 394.839 270.543] +/A << /S /GoTo /D (page.35) >> +>> endobj +1173 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [398.478 261.029 409.686 270.543] +/A << /S /GoTo /D (page.37) >> +>> endobj +1174 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [413.326 261.029 424.533 270.543] +/A << /S /GoTo /D (page.42) >> +>> endobj +1175 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [428.173 261.029 439.38 270.543] +/A << /S /GoTo /D (page.51) >> +>> endobj +1176 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [443.02 261.029 454.227 270.543] +/A << /S /GoTo /D (page.55) >> +>> endobj +1177 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [457.867 261.029 469.074 270.543] +/A << /S /GoTo /D (page.57) >> +>> endobj +1178 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [489.785 249.806 496.385 259.569] +/A << /S /GoTo /D (page.4) >> +>> endobj +1179 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 249.806 511.232 259.569] +/A << /S /GoTo /D (page.42) >> +>> endobj +1180 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 238.832 511.232 248.595] +/A << /S /GoTo /D (page.35) >> +>> endobj +1181 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [396.096 227.858 402.696 237.622] +/A << /S /GoTo /D (page.1) >> +>> endobj +1182 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [405.311 227.858 411.911 237.622] +/A << /S /GoTo /D (page.6) >> +>> endobj +1183 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [415.55 227.858 422.15 237.622] +/A << /S /GoTo /D (page.9) >> +>> endobj +1184 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [425.79 227.858 436.997 237.622] +/A << /S /GoTo /D (page.10) >> +>> endobj +1185 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [440.637 227.858 451.844 237.622] +/A << /S /GoTo /D (page.13) >> +>> endobj +1186 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [455.484 227.858 466.691 237.622] +/A << /S /GoTo /D (page.20) >> +>> endobj +1187 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [470.331 227.858 481.538 237.622] +/A << /S /GoTo /D (page.22) >> +>> endobj +1188 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 227.858 496.385 237.622] +/A << /S /GoTo /D (page.32) >> +>> endobj +1189 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 227.858 511.232 237.622] +/A << /S /GoTo /D (page.52) >> +>> endobj +1190 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 216.884 511.232 226.648] +/A << /S /GoTo /D (page.2) >> +>> endobj +1191 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [449.852 206.159 456.452 215.674] +/A << /S /GoTo /D (page.2) >> +>> endobj +1192 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [460.091 206.159 466.691 215.674] +/A << /S /GoTo /D (page.3) >> +>> endobj +1193 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [470.331 206.159 481.538 215.674] +/A << /S /GoTo /D (page.17) >> +>> endobj +1194 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 206.159 496.385 215.674] +/A << /S /GoTo /D (page.18) >> +>> endobj +1195 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 206.159 511.232 215.674] +/A << /S /GoTo /D (page.28) >> +>> endobj +1196 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 196.929 511.232 204.7] +/A << /S /GoTo /D (page.42) >> +>> endobj +1197 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 185.955 511.232 193.726] +/A << /S /GoTo /D (page.42) >> +>> endobj +1198 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 174.981 511.232 182.752] +/A << /S /GoTo /D (page.49) >> +>> endobj +1199 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 164.007 511.232 171.778] +/A << /S /GoTo /D (page.49) >> +>> endobj +1200 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 153.033 511.232 160.804] +/A << /S /GoTo /D (page.49) >> +>> endobj +1201 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 142.059 511.232 149.83] +/A << /S /GoTo /D (page.49) >> +>> endobj +1202 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 131.086 511.232 138.856] +/A << /S /GoTo /D (page.49) >> +>> endobj +1203 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 120.112 511.232 127.882] +/A << /S /GoTo /D (page.49) >> +>> endobj +1204 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 109.138 511.232 116.909] +/A << /S /GoTo /D (page.45) >> +>> endobj +1205 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 98.164 511.232 105.935] +/A << /S /GoTo /D (page.49) >> +>> endobj +1213 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 46.726 340.236 56.887] +/A << /S /GoTo /D (section.18) >> +>> endobj +1217 0 obj << +/D [1215 0 R /XYZ 84.039 772.024 null] +>> endobj +1214 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F45 355 0 R /F53 366 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +1242 0 obj << +/Length 1545 +/Filter /FlateDecode +>> +stream +x[o6+(3K6Xt0탖([l%m-ɵd[D-i\v{5lc{;d(4YAdg]tv? Ee3tw +#F +JӔȼ6oR52'gwI5gj*URCȤ^_bFc;iβv\[YcpF&RrB
#;f`JRZ}'|hdlZTpfWPY֥r":$hm%uE|Oa +I)s~ +#")=m^bSB>ϒ-{.P#ϖstؼyٽC!\|hS}Ay)'#ko6D?$"Q\%\z&j[*`^ҋ2R9XAvݍj,!Ê +]z.>=N,`qMM̀d@ۓnO!!]+{|#se;$Biq|A+#s\jnV0|Jl''[,: mڲVl4NNm@&u"gPtO&kΠ%Zȭ4yZ=,@
L=lyqR .ѝZGR{혰T{D& +pQ짿[_SOȲC_zmLK]Y!#U@C0
\A>v.JEWxEF!C6բ04GmՄ]$)v*P6MAghק +endstream +endobj +1241 0 obj << +/Type /Page +/Contents 1242 0 R +/Resources 1240 0 R +/MediaBox [0 0 595.276 841.89] +/Parent 1218 0 R +/Annots [ 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 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 ] +>> endobj +1206 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 721.609 293.653 729.38] +/A << /S /GoTo /D (page.45) >> +>> endobj +1207 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 710.308 293.653 718.078] +/A << /S /GoTo /D (page.45) >> +>> endobj +1208 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 687.705 293.653 695.476] +/A << /S /GoTo /D (page.24) >> +>> endobj +1209 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 676.403 293.653 684.174] +/A << /S /GoTo /D (page.24) >> +>> endobj +1210 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 641.347 293.653 651.111] +/A << /S /GoTo /D (page.29) >> +>> endobj +1211 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 632.039 293.653 639.809] +/A << /S /GoTo /D (page.35) >> +>> endobj +1212 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 620.737 293.653 628.508] +/A << /S /GoTo /D (page.35) >> +>> endobj +1219 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 609.436 293.653 617.207] +/A << /S /GoTo /D (page.20) >> +>> endobj +1220 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 598.134 293.653 605.905] +/A << /S /GoTo /D (page.36) >> +>> endobj +1221 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 586.833 293.653 594.604] +/A << /S /GoTo /D (page.30) >> +>> endobj +1222 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 575.532 293.653 583.303] +/A << /S /GoTo /D (page.30) >> +>> endobj +1223 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 564.23 293.653 572.001] +/A << /S /GoTo /D (page.20) >> +>> endobj +1224 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 531.167 293.653 538.938] +/A << /S /GoTo /D (page.23) >> +>> endobj +1225 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [282.445 519.118 293.653 528.085] +/A << /S /GoTo /D (page.22) >> +>> endobj +1226 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 709.44 511.232 717.211] +/A << /S /GoTo /D (page.20) >> +>> endobj +1227 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [504.632 695.279 511.232 705.491] +/A << /S /GoTo /D (page.7) >> +>> endobj +1228 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [470.331 683.11 481.538 693.322] +/A << /S /GoTo /D (page.14) >> +>> endobj +1229 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [485.178 683.11 496.385 693.322] +/A << /S /GoTo /D (page.15) >> +>> endobj +1230 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 683.11 511.232 693.322] +/A << /S /GoTo /D (page.44) >> +>> endobj +1231 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 650.305 511.232 658.076] +/A << /S /GoTo /D (page.48) >> +>> endobj +1232 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 638.136 511.232 645.907] +/A << /S /GoTo /D (page.26) >> +>> endobj +1233 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 625.968 511.232 633.738] +/A << /S /GoTo /D (page.46) >> +>> endobj +1234 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 613.799 511.232 621.57] +/A << /S /GoTo /D (page.48) >> +>> endobj +1235 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 601.63 511.232 609.401] +/A << /S /GoTo /D (page.14) >> +>> endobj +1236 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 588.714 511.232 597.681] +/A << /S /GoTo /D (page.22) >> +>> endobj +1237 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 554.664 511.232 562.434] +/A << /S /GoTo /D (page.36) >> +>> endobj +1238 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [500.025 519.865 511.232 527.636] +/A << /S /GoTo /D (page.16) >> +>> endobj +1239 0 obj << +/Type /Annot +/Subtype /Link +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [325.027 42.242 340.236 52.404] +/A << /S /GoTo /D (section.18) >> +>> endobj +1243 0 obj << +/D [1241 0 R /XYZ 84.039 772.024 null] +>> endobj +1240 0 obj << +/Font << /F8 418 0 R /F59 356 0 R /F45 355 0 R /F99 827 0 R /F53 366 0 R /F62 354 0 R >> +/ProcSet [ /PDF /Text ] +>> endobj +829 0 obj +[305 0 R /Fit] +endobj +636 0 obj +[305 0 R /Fit] +endobj +596 0 obj +[305 0 R /Fit] +endobj +1244 0 obj +[584.5] +endobj +1245 0 obj +[413.2 413.2] +endobj +1246 0 obj +[734.6 775 696.3 670.1 794.1 763 395.7 538.9 789.2 643.8 920.4 763 787 696.3 787 748.8 577.2 734.6 763 763 1025.3 763 763 629.6 314.8 527.8 314.8 524.7 314.8 314.8 524.7 472.2 472.2 524.7 472.2 314.8 472.2 524.7 314.8 314.8 472.2 262.3 839.5 577.2 524.7 524.7 472.2 432.9 419.8 341.1 550.9 472.2 682.1 473.8] +endobj +1247 0 obj +[574.1] +endobj +1248 0 obj +[523.8] +endobj +1249 0 obj +[525 525 525 525 525 525 525 525 525 525 525 525 525 525] +endobj +1250 0 obj +[319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2] +endobj +1251 0 obj +[466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500] +endobj +1252 0 obj +[531.3] +endobj +1253 0 obj +[612.5 612.5 612.5 612.5 612.5 612.5 612.5 612.5 612.5 340.3 340.3 372.9 952.8 578.5 578.5 952.8 922.2 869.5 884.7 937.5 802.8 768.8 962.2 954.9 459 631.3 956.3 734.7 1159 954.9 920.1 835.4 920.1 915.3 680.6 852.1 938.5 922.2 1262.5 922.2 922.2 748.6 340.3 636.1 340.3 612.5 340.3 340.3 595.5 680.6 544.4 680.6 561.1 374.3 612.5 680.6 340.3 374.3 646.5 340.3 1020.8 680.6 612.5 680.6 646.5 506.3 483.2 476.4] +endobj +1254 0 obj +[306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6] +endobj +1255 0 obj +[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8] +endobj +1256 0 obj +[680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6] +endobj +1257 0 obj +[569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3] +endobj +1258 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 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 525 525 525 525 525 525 525 525] +endobj +1259 0 obj +[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] +endobj +1260 0 obj +[740] +endobj +1261 0 obj +[513.9 543.7 770.7 777.7 733.6 847.5 756.3 656.2 804.8 850.1 449.3 566.3 870.4 699.4 992.9 821.6 782.1 656.2 810.6 777.6 627.8 599.6 699.1 599.4 970.5 849 596.5 699.2 399.7 399.7 399.7 1027.8 1027.8 424.4 544.5 440.4 444.9 532.5 477.8 498.8 490.1 592.2 351.7 420.1 535.1 306.7 905.5 620] +endobj +1262 0 obj +[583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000] +endobj +1263 0 obj +[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 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 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 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 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] +endobj +1264 0 obj +[657.4 657.4 986.1 986.1 328.7 361.6 591.7 591.7 591.7 591.7 591.7 892.9 525.9 616.8 854.6 920.4 591.7 1071 1202.5 920.4 328.7 360.2 617.6 986.1 591.7 986.1 920.4 328.7 460.2 460.2 591.7 920.4 328.7 394.4 328.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 591.7 328.7 328.7 360.2 920.4 558.8 558.8 920.4 892.9 840.9 854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2 657.4 624.5 854.6 624.5 624.5] +endobj +1266 0 obj +[500 500 167 333 556 222 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 191 278 278 355 556 556 889 667 222 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500] +endobj +1267 0 obj +[619.8 590.3 590.3 885.4 885.4 295.1 324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 826.4 295.1 295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8] +endobj +1268 0 obj +[272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] +endobj +1269 0 obj +[816 823] +endobj +1270 0 obj +[514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] +endobj +1271 0 obj +[628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7] +endobj +1272 0 obj +[1027.8 513.9 513.9 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 799.4 1027.8 1027.8 799.4 799.4 1027.8 1027.8 513.9 513.9 1027.8 1027.8 1027.8 799.4 1027.8 1027.8 628.1 628.1 1027.8 1027.8 1027.8 799.4 279.3 1027.8 685.2 685.2 913.6 913.6 0 0 571 571 685.2 513.9 742.3 742.3 799.4 799.4 628.1 821.1 673.6 542.6 793.8 542.4 736.3 610.9 871 562.7 696.6 782.2 707.9 1229.2 842.1 816.3 716.8 839.3 873.9 622.4 563.2 642.3 632.1 1017.5 732.4 685 742 685.2 685.2 685.2 685.2 685.2 628.1 628.1 456.8 456.8 456.8 456.8 513.9 513.9 399.7 399.7] +endobj +1273 0 obj +[351.8 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 351.8 351.8 351.8 935.2 578.7 578.7 935.2 896.3 850.9 870.4 915.7 818.5 786.1 941.7 896.3 442.6 624.1 928.7 753.7 1090.7 896.3 935.2 818.5 935.2 883.3 675.9 870.4 896.3 896.3 1220.4 896.3 896.3 740.7 351.8 611.1 351.8 611.1 351.8 351.8 611.1 675.9 546.3 675.9 546.3 384.3 611.1 675.9 351.8 384.3 643.5 351.8 1000 675.9 611.1 675.9 643.5 481.5 488 481.5] +endobj +1274 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 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 +1275 0 obj +[571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9 513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4 456.8 513.9] +endobj +1276 0 obj +[552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.5 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3] +endobj +1277 0 obj << +/Length1 1748 +/Length2 11060 +/Length3 0 +/Length 12180 +/Filter /FlateDecode +>> +stream +xڍP +]08N w.%\G~_^M{:*
m6)+H)Q6prsrrع9GAv`g!d ۋNT;\< +~z +%1)RE%9 q,BOÞ"Sa|h]h;w\TOp̍'I
ڂ9ꖓ Wʿ0,#D77/&*\AZ)?0na`LOX }nFb]2~jB2>HF<D8 +`ħZBUbb yMnn'⨽OCdsyNF_'ЀӊpBǗVG]dH&j<Y6&]=KRH痮oW9Y^4ݍ$7BPQX]{&{=n^( r=o?[}dg)]%#~,U~(a\Do}E#/A.wϫ&آսWڄ +S"¥3#v
+hz?_;ce-LEtmv/npD>-X pn}d#ѫF1S<4h sH!R +{*.%)LdKgZ?-%ʉTFp" +߇Z!N ^h',3J߬V{_iD¶vJڍWN%*x8}cTWFn&
[o!=JmfwV3#z6Y/k[*A=ԴRbb7Kގi%#躂엘H
SntS`d\Zi͗J܅-\;TH!y)zn*tt$Q@+j],VnUZmvhaaM i,|2[܃,j#iktߝt2;AA̴5`M +R"Cx +Y:0jq@X%GD9E(a$lt?䒆"]a{81mGF%sgf_+ȥyIub?4EeXFpRNo܍f4FtȈSA<TT/G}D8Er&-F>ېo_6n5a K0" +<,F/-պhKе}u1B~m!zK*&v9-@tn$y74Uͻ=maq&`T}d[s@KL(Rᖸ"Erp~節NR4QTnQmOe#)Y{;#u`ǥJvHx:y.ş)(k{'qCXr-%J.@vi*Β/Qnp +
l/Sk3!eB@x3ݎi + 3퉀wRSU?!p +*,u +p{3p$, TiE&Y?{]20S +Dt_n([n hSt#2R\'_&)[&O{TϽO̞oj7o~"C8{3lzVɷT +X z|ڊ4*9XFD{DD3Z)ַY%5GpΓ&|y/T+ Vb"Zߎ!ɣzVޫ|XqS+ǜS7hmګ*;L-AAwe$ɍ-5OJ
+66'"&}w-S4n +]װ3~5_euʔebW~+~\͐k<='ax
fH?E%FsNH<Du.bYBKnl& B]es?j:0o??@OU 7c!I^QTUĬ>uShĮVmDP:SW"tmV$x:�d;Y'7G6KC잦CKqv0zVAA9ip\" +i$+IgӃ +k`'*&moE]d, KF DV֝s +$q4nf ͟ +b=)@ՖI.TdfeLz!P1w!+KV6r![aZ~eL8 f[G8/%WY4DE[Np&IfqNƁKFyӳCYWID@#wνo톎T1L%z$: +ޢ`i({C0Tg +gÎc.Ы!ɂ +]iF^)߿}`M|@lUjcOBȓ^on3דxC܍$D]R@u5Q;5Kگ{AeO8 +
-T)i}@Ő^+8H"<r6:?s
J7FF$&r8cE,DKɈ#gWKci2Toe[GTEk=<{; eE=T!%=wCطch(0D*Rp>2$AuHٴa5ۺ<wpH>^F;q>Px?q䛰>MY$G_z5Q<Vw˛>ٺ+3Ygo
iK?hyJ;Fs>;G^.MkR]H=}*3u*SS5o<uW
s̺,]A_P=Z`xΙωH*Ϙ:s[CBn~M3r;XRA&cQVI7+)!]]GٞO/X
k<ȴ>f]PH3oX,6RLt<j;_7Џ-NEy;p-YLӮ +b'5i9A3X!ltˋjCڸ毀XUT\iNUm||,嬷58G :LRp`̊.p3h|dWRueu]+Oś +0;ZbscXQ#s*{܇f7*6.M|R̈́epקV`'RKt4>E2Us80N9ǰy,Xz +VbWI&UU}#v-,a4] +viƏ:i\졸9PyAq?-#dp߲ǸpL5,5H]YJj<`D2}|}^C@Pyp3Lh$_@ċѧyYʎN[|ҝ`q_Aw>,')ضEQWLP牎2Z߽[nJ<EPVmNXMq}FmW̆l<^$^\alNcCNœ *0jk'5,4i)W2]ьR!h>; +Σyz3RD~/>^}զԉqEvl(k_1KVpr{? ^tG-*&.)@ԀMS侉rw"c6TĴgy~1A/bs)'F
(v{퀄"M"z +s)o!
P_r-{y3Ykjp +;W0Svֻ(\E +;pf";06WeOj:tE}Uk̸G]T +0xJʠg|@ljK8R]:砪L_pmkrq}fhd6f1Ŵ*%!a-tFհrNXЪqV +DArJ6]zoI*4etޒ'pVߴoLb{'X.je8a0RrD +kC!H +HNjCsw?o~w{L{i1@f85 +|}vim? +endstream +endobj +1278 0 obj << +/Type /FontDescriptor +/FontName /YTAPJQ+CMBX10 +/Flags 4 +/FontBBox [-56 -250 1164 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 114 +/XHeight 444 +/CharSet (/N/V/bracketleft/bracketright/e/five/four/i/n/nine/o/one/period/r/s/seven/six/slash/t/three/two/zero) +/FontFile 1277 0 R +>> endobj +1279 0 obj << +/Length1 1533 +/Length2 7361 +/Length3 0 +/Length 8372 +/Filter /FlateDecode +>> +stream +xڍP5t(]K H7Htw.²K-%ݩtRJ4HII ҾԽ3 %k)\|ܼO +@/@ +qXa>pr + +s#I ;{/m= +!`(H +]<xAv<+JDn;kY|?aC;m'(7jGxT(nwf!<P}>EaD`j¢|qOZTaN-RL> %7Rӫ8Fisd>J뙼Z0,n1;u +(}ήVϊ/A[Hg&`XPp{xieBء{
iƔRZ8ZͶwޒqHFLj3dȦ)oMH~Q(`LXOܝ]ט5/ڏ +<(+rO1Oe(|Z
I +^|Pn6I<YD:jx˦O'Z"t~_1x +#NTCqj l
]x|9qOQ8sxN KϠ&Mqя$G-fRP^?Rgs ёa:sO֏EK^!X %wa2=ySY[{5焮tNqEp+C(7 g}k8ת/nF%+FeLR'g& +REX4~zNJ6kܿQJe %c#ŭZ[Sk:8sD-n"y8W8<}-SzCߝ`L≒56>'W + OxAUJ<ĤiK
=az1.F']ilcFU$ʗHe++LeMe<{13[4[=ITWP8Cfsu %ƏF;$/+E,8^SeXQ)-/WMi «=kt7H]Ku.]/,w +`U?>f:~ISF0Vb;W3p)'F4F+0φޏ4LӰ\VYds`=mNS[,]y!+EJzwFw\Sa^wl/===ķy{~p] fKٛMJ?<%.cգdüPYʵ +LS]gnJ}@eJ"MDd#`2ғl-IPK5eg'`@]S@pqI PW֧8hfo;I!/I;(rYM(&E|9tⅪޣ)u3N]E~fdt +ww2T+N#%~b$VBhhւo1-bNORpi$0طTd^UDZ1 +}J$դ.ٝEkoi|x>Z\#Kj4/2.ɦsOX!P&fk=V/؇q%+M!U}oM[\)'FqJ5 +H簅ߵD.N-dd^+u굳_rp$g̠EXЄ8|V6/.ie&58V95z] +Ţl.ij?/}L\2˶|u@qbM~~s_Q$(36fd k6bRžSUOĉ^.]W?("> +${cvvG) +&jt0 +Om;Xv8*tЪ 'M#3'fU2XM}灱 ZBGzZG1CtBzC+=!-DޡEtyLpe'I'Zpuo#/a'J4<"Zj<-BT&δwW#ćt\?JI,3!ibRJۖѨj&$V+:ԩrc[m˼ءIt1Q%m,p##%M`e&ȏbЈ990A`h,#u"sjh/ɬs(c&O~|(u +OE|4%VsWƼV9gGmm6Ξ`wOD>3h*&\[cݝ64N6z;bvZ#:+#<h..ۑOH̘Z6k|T_w钒P6ֹ{,FgrUS6Д5ˎ8y4VOP=8UNi(+sL\T._A/'hш1E|;j_z& +)?OqnTu&Rc;;BQOTd844
aO}U0#*%q=erA'7=G`1Y֎|:uqzR`
¤.ҤXoIKn
:qr!>H%oKѸVq<[1`}#%~+} + +W/DkcSr +Y_+Mx7GfKj^ +$m6EI
}obY;T~~!`_^(̗`,XUs*ϋȲQ|Ǿó!.d;H?Z%xb?e&8BmjfyH4';}.UICʬM1R`/` +re{[A6VeL^{(h9kfK0wcZo2k\`M!h$팽L_sFџxGoZ*OUSQ`U'S=amC7J
4_S;Ktygcc[UVex`Øerx +S|Sۯ質ͽ[OɽqXޭ921l*Od3NE34!d"|{MVp6D8"f ]BdLfu(2Dmʧ"tUZ +>\2C?y-϶pQ;niKntq|&)D*[J-Mso8VH#>#وۻD5(57AaKfì"öd>c
*dI&;_YL~"kP"m*L'֚bJQ+SԡW©-I{Qd9=Ɓ"Wk>xR*x[@ bRuxz5c!0עd\a ĸM5"5:"孴kQdI^0tUCG&A3}0\0g|bR'Y:Wyڲop}xr6Z4K +(]gxr)[{}8o:xvEYB"|D0,%Y(އlWLzKY÷ 1᭻H//x!@+Yu{~v%WOGl$-WaQZFA4/)"xeЭU41QϵMC[ܖsCqu>. {ޕ1e|c_÷f
k=JgcDHwtYd0ftϹib0ּ֔CfJ))QlO8"C89ځ8!qd5]۲01ΏA'5[j\k +1f +)"onÜFdNȓ$j6=y6,B~? +endstream +endobj +1280 0 obj << +/Type /FontDescriptor +/FontName /TXUDPL+CMBX8 +/Flags 4 +/FontBBox [-59 -250 1235 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 122 +/XHeight 444 +/CharSet (/T/a/b/e/l/n/o/one/s/t/two) +/FontFile 1279 0 R +>> endobj +1281 0 obj << +/Length1 2199 +/Length2 15894 +/Length3 0 +/Length 17198 +/Filter /FlateDecode +>> +stream +xڌPk +ZCqNpVKqV\{~?sd&yP(%@L< +
@#w b`f0s0s01Xch3r43 +Q;{GKs4yPP9v-M@ +t'J큠ˀ +eq-W}b@{0dAvn 3K_$L]A.@í +CU#}]BAN-(p#2|;0\%Ffݑhu(Mo
gGh[cJ}~9VzBۣHSFz+NNN"b3Zε
u|ZL2d];0Ƒe2GݒyÈݿneJZߙ+3iVe;ov%Zm<"ɾuu*^FdX]H$$긙#jmwۻb%"f)Hz#0f`wĆh!{ +1'bdGH6WFO2qdv3}o@=G0soEh:v\x\Y6ĮŎEo֫rSAUmxZ
#ꐮ(o_xqܪܤ*}{u7kYG>PrT,S֡4%H頝!o2"wIeuCn&bjdԧ3 "j'Moe^bb,KSĔ}uIQ:mWO,e'~~]yك߈¹GK_Gkd1qr
D\ӿ//ժ
E((Lcv=,Zr#Yˋ1ܤj`:fFjؐ+
fR@PUYa. +zPh IUƠ9'GMdfq)~K)v2ӡ&ГY^.T5Gws]Vjqmeg-BCHݝZooHEync],ȅuKF}gEsmmс5yרٸns~z~ΎY +hi^/Bj}m,1) +6]toE$aʜH@xX'!XU\2E3uCtрeL!z6WǏ4{||ēTA&R=
rU,qq5BnqKB4nxRteyڶR7aЯmu[aB[j)g'xHdSoSwe] d8ZuLRDHE4$>N +ު*q?t;3%RTݦlX-"ӱs!>~1+"\*Gk3:ŧFOFεH|0x*W1ՆN6Mƨh~o5P; PdE*Ei@gܪ3]=.b`ۑ0O|f/(GG_eWoF`(CcI]6mܶ&+KE:.jt42;w))p?Bh +ATHV^ӺEL~ʑi/[S8|6|WyӃȮ,t%WE%5 hVW;T]ڛ6kl[)sⴙμ$Xˬ[zSj2\<,2Q`y2Dm."ج+u8R7Mh
PEX82U4c=;7wkT
d7mf=.o(EACede5se,(>~RYҡshtR⣒6\;ٵhz$ +LvNP'0$-ȰsSzD +b?ꧏ*6>I2f7+ݔcnļJb)I͙Uf<69=kCd*HEn3.VT@*e728}BaWsR%^peᅪe*'F!5hI6;ذZ/K\zghp=^ڭi~D>V3c!}{Hi.w[º! +=6U|X}Ɇlfe";]xNENNc08Tdx<4륗 +kI$s{(jNNmK'pMʛVFoX}*DXciqq ɪ~9u>3Yq [{b6]$dJm:k;6ϓsI4´dh:>hbS(|p&{N#8\ȩzye7, +HsL=,7Tn9nd1m`sxrHS~A8ӥo'sdBWs)ӧi=E粞KxhTO}2@@I6dǀ !%z\77'{b\ʵri7`.cbMGZ7}.D9ODy9rU@4D_xA$XfojXf$G Jk9 :V1pzw{4tt]w[F]QnG.YN:H-j>Ne 9~^7J؈y;Ԇ
-cs،YmKdڕpa}oOaS8]Jm2|S:QLN$)pCr\GfR-xϤ:>oHYRf^LцD*b.tqɀ +[CyEUg"ŪHxgG<R`O>L>`2'Z.;u[M7$] >r!U86oj<)דWlBP[mp GNɯbq_4szQ臖Rb(`hR +,6FB.Y;gbcMstXy?~HӋegPl 1+7o8|s i?ߴ_vm4;p]̡(zͨ@HlEc)]vO&^V8ӯۙW5\mqނF>A|k͔\Wf'7k=Wd|% +i~2Oz/>PMV(u<E?NݓbUUY%Dzk^Mm~OόV?+'t!ԒH!7y5O%6cN; "mBH?Pq`14&EOk? \[(d21oH/[eky +?| +6g&=W.*ȹ''bZ5tPe֓,xLѲ_/M21x +L/ezZ
jyJo;<7eNQ!A~ܶ%H3+4r6, +m
ֽzHӎUz%VocW4MEbش4d2_-Ԏ_ki\'^t9{[o/ģT#ѻF'C7-jL֨&Bi4zۙ.+t e%b<fp D^\nFVa&#z܋?ol}(Xhw" Io6bͷ#l[3P+rJWUW)B &j(QyUB_oƊﷹ8O|Hʆ VD\4(o
"
cUx@%68cTe +#qlPdRj;F z?BG[d'nП +%Hkr)'j8P3}Q*2=_aRFsJ$2Hl DzNz`FˎPwE;lnڣ=x6e=Bq<mDS?>w ޒ:swo*ȝehoIܻ߰}ML&|!dklO V<reThj<O||Y
TI?53150<Q,$ɽpA`eə,蓂0q;FN%)4 M9/QWP6r{ +V#:LrmYz;;b7Pͮ\,M3*KIH*WZHR<JZĒ-'V%uA4=83$48FEaK<s.u-7-JM?HӼ[ri,/hK??m??${ɕ܅g*PuAnloV'eU +BQ̌<i>UvM +vXiK{Y0WB} +AvRi @C&
1>
2ţK#TB Bwn`I/hL"=1+Wܭkmk)>E?BF]Li5Tob y?D3R(c:'̢J+'X/tr~EUǚDŠI +QPVYY~p%43ܣdwo,f-J= +!O.~T/,ȿ"jk8Ԣv" +"LӦ/)";}['Q8"yo
rҶi%gʵy_hr^ߘJDPI,mK|!ȱɯ3| @Ȭ bAZ`n;Er3k\ +ס[%U 螒ѬY6LMP\v:_"5Yq0-.L1Fx%507v/~*Ց3={?{bX0jnkDO-{Θ4H40jTmA7z|4):rP2|)UrvG$ܿ}h=Der1PF83FnltX)~1z
78w\q#>F)ʶQ2K6E7rcWJԉTЅ0Y1P69ѽ"wiz̬[OB'ʼH/:U+/|Ц-AGKܘlQD8Cy+H,YH| Vs(R/V\o1moFd[KL>F/Cg)9qMȤ4kKϙ +;ĉAU'P</<ˌn\Y4Bcg٪^R6WY
pyH' +62Z"6qA4nSƓ)guVNEqgԳX2?^&-jǃcu[N$krñ33i< +]*8odfqE;HxſF ^V+ͨm~h_>_=M1oZV4bId<sB|G!կ1q=v6&+[ZqhS4XŶ +1Kk@B#5KkN_ZDRiw>[$1gD7ɉ̽6v4[VM3$BjOY˕tJ'jzs+6Sb" "br á-e6DR",ّmwL}mV:ʏBh2c`c`T|A`vFqBƺCR&.D&>Y&Ij#전zEm
͈bLcu ]$gW@h[$z-衔4٦o<̈Q9ކՅOƼWJK=_kCUIƭU+c3;A3FJsGʼn$oH|.S>,dE;S"4AC6| +Z1I[gF̰h6y:"ƅ:Zȕu)98ǎS~CZ"Iv4p:5UB4~WcS!]7G[k騨9lj~n%vcFi\8\)l1,csv"dhkj]ӴcpCGb{Lؽw/{#}!M'Өٸ}ޠ9V5, 'Paxκ{~@e^>ܭ`UfBTƪnS<Ӿ__p^zIK֝~B*)uS6n=fU\0SɋU^Y9HݟAl}<O%%2X9T~_̛,_ڡ[w_e$@hnR}*yu)XV9"}M5sq?uT.R16v98 +NtO>09;^ڿg+L鿯@z劂2u0?Q@dKc)q3fm PIȩuKsXiNtuV>:)z}gF<yv-A-vŌTtL"Ze6_G!"SXzOgUP>PUꙗ=v[-gEaʿk6H3ՐW_EDͪ9bDhv{)|"u!{(_O뤆#@ʚ}qcpMh}1(b~J#_-L@6Vyf
R65;D<L~f:Ă_md¼e#bwZʴ<ZsYWEPwFhV:5/D P.L)ĞX6$#A_ +{N!=af +2uW,0 [=MG]1'LDt9`g7!,p Wx +މo5 +,h`wy\Q8ƣܩVtb#!ʐ"Eԫȏj9щǔDp'Q|g#DFɏOpb +jxgZ7:Mg/W;y_\ġ($ǰՔdh`1|`5v@*;M,{&=KVjvP-iCr8s$1
{cy0}i,K)Mi +{|x'$Ts^X
Gu"|h;Z>]+>7Xf)aW`K~c2\KmF%tKGSTW+f$KVF"Y)g9)o A@,*NŘ7X-tU#/;9ZzLpJ<Bz9pB9CO0־yya<g1(:P(Fnz6N+]T_,J|*ӂDu#zPLZb8˜ĬmXo]lEom,ML=. +$ݟK~i]Nn_)X/C5K/Zy5j6P+Ka] +'2Kj`iֽ*K¹Ã0kq2aozKp57ەUb|8</IɈ5,.گ+ÅgcXA\6}TV,5rO`[GG*lQ6#n!B_FG-a$4j<]T'I2}9~kWUN>G_k{'$8]?t:EϝjMIݷ_}e6xPF6,U]kIMnq^Q}7~I"A>ʮX#6,7w7њE +fnq*
ů-|Ƣ߮N_?YxE'7k3eΈI +Re4E ~'n-/\ŗ +y0?)aHOpV29smL)#Fsi϶16#P0a`P:EbDG)&K
]yeH{ѿiO
̊IcaJNEvaK̢;S?MҞY4h/6: nIhF]Hj&]+riiu*&T!?j֜ot3(t캍SVBrn
foҹ:A!U +LWSF05)]w7 +fEVF7x˦P"VgG؆|+ɝbgt6c$껎FƇ-m>(|/$xewBԩڿmqoO~ 3 r9aɊIȦj|&W3qcml_-C/PdyqCw3n3u7_9So;6wpFG{:<]}0|۟g?h+qapBpJM>9ܘ*h;uvT)~;9I#2]D!3&l\Bm @1/:1r"F*%_k7&Bx69aK\L7=42"F)mTVW(.Y&-HQ啶8:O`<<$zWL ;.a%8hiE<='Iف`X}{Q7H>"(t΄pM=T2ф0ʇsr
(_`:Ia^S]_Xp|X&nc}~Em}yj.v'_#Iq'Lė +~7T/ +3Ux_+7y7WcI}Op{"cVKxiv1A
n7s;CX͍o$hLI17C?IV_F@YRXg3XtaT̘(n1h@ Ҡն7?>a6xUgkԅSЫ#JӺFn0v\[(<e͆kjw+6tgRًhcuxECF9z!{ܒvSU%'_^$z;n/] 'TP4kh֕nd,vc~e45W@CǏۉzn&baԂ<2
.7xނ`*I|zI]]{DN-[`_C'|.*lRYۅp̉HdmuB+ᕼߘi{wv3ER:}C_ 2uniě{$l(mG.K5RHy`i
G ]Ϻn!i)N̤5?K}"Ķ21#0KR~_&?ެusV^e__7'1y3T-B6H +#2@s +ΣV@ cI-lJO17<v͟KehV.rLf +endstream +endobj +1282 0 obj << +/Type /FontDescriptor +/FontName /FZBEAX+CMBX9 +/Flags 4 +/FontBBox [-58 -250 1195 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 117 +/XHeight 444 +/CharSet (/A/B/C/D/E/F/H/I/K/L/M/N/O/P/R/S/T/U/V/X/a/b/c/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/v/x/y/zero) +/FontFile 1281 0 R +>> endobj +1283 0 obj << +/Length1 1852 +/Length2 11425 +/Length3 0 +/Length 12578 +/Filter /FlateDecode +>> +stream +xڍTk6,J0tw#H + +E?A+ +wO%aw-ׇ +0< +#1 +$wT@" +ts}[_
Q_iiV{e߮wcwE_?|kV dE<%15Zߘm+Fk("33CO +2QGdH`/keW˰ɦPNӭPz!v$LUcz!;3Y[*tݻ++?TG S"N=?|"2 +%&*JTm24XM87{6&JH,d<:VyOfl^NI{.VitzZfʓ[NR+$^A3jD_-ACj#ZZ|Q=VϽp&%h|I5`flt? ;q&ŜXך{A0q4OARz:8ޔ!ViBX?
?k]RIgTpؗ oS,y| ں
`=,I@(NohK!UP5tj::hD^r +^ K%4d`.NX*\|N(ƋR(riZ??l0;Gı +/SxάCqnTAwJ +>&H=(:Ϧ~n?5딲+zjYl<ye-MT#Z^눊Fƞwu1$w-C&=Zk` +iZ!OE}ռs#cAD]=\e0@/) +>t}d; PEm}PϛAޫvzO4.HEQ5y$Gu>vUSO_n +2<&ά{#T9(x_\e[X`YO4,[s2\6r|N)Rdƹ5ôuݞZ19X,BCScC +Cɳ'ߺ7CsՀ˄y.#Vv'1t:&}h㋧p\I'֟vc[͢>"F}~".sD=v<-<+{)s: $3c\;κK!) +o+đ١r8'z"rd<GZo$9D2|eS]!^!#B$}m,nAdn,[\ rkl6 Y~:r=V=UxF5sVSqkʳ>~mN + rv)V6!6YKoõ¥tvjϱ'?
8+g $ɧ-hiry-A3lB9-zgֺ
2n՞yz/<0{Nw.*IK5vv5 EGaj\!ssqE=c/ +vLm^H?YL?@i"ý=diyVXڋ{CHզ-UX]%R}HH[-}֢cz4>aW}&JR؝o+r&7mP^TLܽk_ej0zzfW(}o\Lr +'r2y(O1G_k+<\UFݯDžWPFZ+K֢@u;kT,]̚jt(ЄJ?`MLJ'&K 2P[:gnK2ft5KK7{V-+fI}ïr+EJ|4r7x)C+;ºLC?*=A*Dhz\WꆘCĸI@CS_*I +_sM˪YbᲷB:+'G)9fHw2?%9帉d|yKF>ޮ%SQbD}+a\}kz5
)ν2v}ƞ;D_t7ޭ +o.P PfR8}ΰ8c~h_s2B6ޝUxJMO2wK'M`q\زC9뚉z^Dr!s--NԮ3nd۰TV}g?4}9t~л +4)jj31Eٹr#.RAmsѯ@pԇeC}>q,6+b$mOB鹆I
ZB|#Pfvf]@mS6;'{Ct (\/qge~IҚ^bR+qWow!'71X +Rɯ|3!>7g:[Mid/)LF!iutc]\R
_OeSHv^H_R9DELPƜ +F*گrt@7v"%Sx{k'(f]tM + +#YfT_q34&ŒvQ S*'rPO62Ks&qSOr?xUɉ:qΘUtnn]Ĵ(r..)ZJ{\%i0fԘP +QܚU2p;gcM LaxtT YЄ(n_Q.xqP(-O_|Dd~?wxNI5d\[1EYhJႢJ O{ɧ$tDROV>:|ob5ijI(!`C;&[Wix}ehs坛鿭F7oLJ~Su-઼]
Z\k +l`ĵT;5Enm\ݡ<3gmla0{#_7"@E8\==[~.N izIPGk!F].
lńY Cÿl\whO/1I+=U7S1 Bkҏº@v_,h3\JvXYe? +\x(a:E3.9;XdԨ3ː-g'7i{GF2LJGU0Kヶ VC=byS#pF1U[P;ч#4%3̺(炤L\{Sud◘S4MٙþwsH|/>βhg +MFj0UjWk9V2M߫11sTG]r8v"{}Bjt߿ZtF5-iٚqlnzyQ5dA(FB&,,R{-67 %E5ԯYUfnAMS|i +4>Ԛ,߾,aGSݦBf#nt[n15Kw!\ݿؾrd-P
~B&5Gmxˌ"]7 +=K>sXVE.pwL߆%OKɉj7YQ}H'&\ݹfέi)}~k;fLh~#2:]EjlRRvrtdcayZMRcNDBjRWKQo;)VlADz`dޱcDA5)NXEwRpphsu\?%xݦ&`C^ߒ=ҺQԉʅȘʌ#2W%b]iiznL +u5 H\!n U*.)։/9Z\}Ҁ$u>j +eAv-,.sǽ-#Nx\ù.?#Y{'lKc3oE| +(PxsUwYfy%h2Ռ4SW_hƥ>4l6q<rSAER=]}ijcPm3}Y҃n{T?;rk&6Fs6w;hAI։RwYp5^}
}٬\w+nR"kLU3;E]u_;1ۼn?Y3[ē.VBU>{62TlB]i6ڨcx3 +z~]M*@P
`G{|0r- +K1ꢓd'/,
QR<F|p0 +- R³:{{J/*NA|ϐojжyg<Ϥ{(<6EЙu"hj40+hId!@*)R /VO+[;=?>^@B6?[P<Qwn\ܵ'?w@%U<$lyj,S<*7YLS]$m&3.TB&kqZ<黛ɺ"WNI^SrW]UiQЧKՏew8|YksPשּׂopTTJZ=Ǝ9C
8%Q/vvrNp#a=e +?T'5BLZdx~4^ ?gKyZۤz,@;uB#,]|u'}H5_QwZӗ&3[ynUcS*MK*d$OO5en2֎͌y.t'#JZI?g^X iz9WYZ(P[<j!T(hܶR0{2j曯f]"ju=Е0Yk
ܲxܓNɐzWTc`IW0+C Z/ply\| +xdM.Oow6;s<5oNm={b\z11W n:uЀh/7W؛4?/AM:g_{ۇ%$p^+|wٴg|p-u3`;H\~23۹uYqJYe$P}StQgdnm=vNBlW`>["ZZܐI( exrBUDug U?匈g9cU#A3<mH4c,EgXxS,#hkUō[22u;VL(8U.{DN9mj7f.vO/cMϹd&B9xEb"sf53zB'|(gqLNN=֨NlѹZ:A\)ApBN30XJxKsFp`}fePKGM()?'^N +/(¹b!6}ޟ"*PV3iK +PIA-$C\ +!spx*8KxI~6#ⓙ^J>x>1}pWҴSS@[pB?s .G{)QcDH*8~DV ə +b㌒fQ?u{pܸXidŸ^@nCEσ@IȉL5gj8Yg/ +endstream +endobj +1284 0 obj << +/Type /FontDescriptor +/FontName /BHAYOR+CMCSC10 +/Flags 4 +/FontBBox [14 -250 1077 750] +/Ascent 514 +/CapHeight 683 +/Descent 0 +/ItalicAngle 0 +/StemV 72 +/XHeight 431 +/CharSet (/I/L/P/S/a/c/d/e/eight/f/five/four/g/i/m/n/nine/o/one/r/s/seven/six/three/two/u/x/y/zero) +/FontFile 1283 0 R +>> endobj +1285 0 obj << +/Length1 1418 +/Length2 1646 +/Length3 0 +/Length 2552 +/Filter /FlateDecode +>> +stream +xڍT T.(hGBE$PPtHLfB@MBxe-"iab)H-"-*"XI + +/0WEA;gOx"Tca~w#NGwcŐcpbQp"4 +$DLdշe3n۬;*Ⱪd +Ri +¼XOrT&$;QP +gn{=Ah<ekYt'?,;irYC,]=.:4mbp
mT77a3]V{zBϷ_VzF{Z
Jو{aRLoHߴA _o54/iJ07_liIT!0sphI2Yf '¶SʆIruu;+k<@*\ H~_?Iz̓I>M[_jF36T^ͩP~cV4|3cdݺMmR(~kde;>vjEm
N+rrOXt.ȪDYyI,s)LnS1}EO] >[l=|rpG6:`gM.AOi}+iVђm@<N%V{3?f2߶Y>#;ܦ2ͥGq].`&pY;%51۟ix%Xw**r߷;!,MLW]JU+- e0Zs=ڏ +/q5aYtMvLbn&ȿjF73G[O
t\ltr:"A(!̶أ쵠j%O"vJUW{e"+\l ~k\pRsYѨXrִOO'K4A^:|jJ|Y
痌?lxѩt$@ocdhh[D/mu;k:N͛_^gV05ݻLp^kզy
-Pat`b&ޥka~ӽb.fXNLy[q>OW3-w'Ug:R7d +endstream +endobj +1286 0 obj << +/Type /FontDescriptor +/FontName /RQDIHO+CMITT10 +/Flags 4 +/FontBBox [11 -233 669 696] +/Ascent 611 +/CapHeight 611 +/Descent -222 +/ItalicAngle -14 +/StemV 69 +/XHeight 431 +/CharSet (/a/n) +/FontFile 1285 0 R +>> endobj +1287 0 obj << +/Length1 1493 +/Length2 6546 +/Length3 0 +/Length 7550 +/Filter /FlateDecode +>> +stream +xڍwTk6 %-Ҍ3CIw03#
RJ +!
+J7z<kf}aHWn U;y| 1* +9B,1K +9fEgky"U Osn^K60gk_4!0gPU?6?-
<@] +-8f +^˱ϸTF:GSDy.yg8YWG{9-{W/i9|=[-}&s^nwDE/];b*Î*{}~Oފ%@Zuy"DyztGpV/[jTK,hRWa߫;eB|9lfҪ/,G +Yxbl!'b4ٍ#^k+CU*aspt_+~3+dXZr2lS*ަSnt;<\B>|DV֑@2|p_v
DݚwzwoK|Q1JF㷪˚y?ӒG%Zd˾;ہhUX|O,pv^+v4TUu
Gm y.y,Q G$abah$VķÊ[6FWJsKO BGGK'y5
*8dlȞZJqܡƯN}UǙ+ +Fe)ͧ:@EXv>kXӸb7սF-
ԣtKfZ-7s?$8τsn&ڏ"*
$&'[돗d.*9p;Ly܋eQ"Td@3<קJ
9P|9qzH-3^,3O9#Zz3R$Oֈ~p}g1VٌdϹר80tE5(nZ'EM%˸cIe@̈́&fG'p헻1_7 +R7
5.G<Խ=FVR{4oYoJVxNtOԴ_MX\]!ĚF26(yћi[U5?B %zy7X-X;#O͡d$zEVB_?/D{5>tȦE4<*fЈeί0W335~qevtkts>~ӁK^ƯG$m)k +\Q"WD
&9#gv?ea3a00;%Z0wc\%/CË7LN2慲?w>iaՅ8+GwF#|W|'{<({)$9}uӺ]Kj/
HBi;b8Nr1_֧ܪEoq]aNœ>v{1 ]'~Wl\S
rˉ3kX8~[n]`nXPxNq@AQwԦqK}O>;3t +pЋkLGVýKt1?ѭ
a7>#2T~njӡ2F b9*zz]/>tF$$I}\<@:٪sMR]Aᔩ^ͽ?th}[P˽H +.ǔ;i7m
_Ѕ-\[w_?WTfL~9l{?pc&6\LNJ@Fu<Կ|dB;q'IҧBQWV@z6v%HQp[ڇ+!eEqM;ʥ +z{ipSD~.+gG:'!#tk7_;V+;~'K"U]X{3[`Hr]1^%oH,QE9hhv\d '-˲Þ(O\NeI< +NYQ +"NP|:q7rT1I0ca +!I0C7IFzJ}O@iX2ՆhwXU+Id
BnfYs(~+"cq#f +/Q>1BVN;ߌ])~ +v4۪m3ZJHӞM~;+%q O?}_7.S̕{ݖۭ}uel/j#Qᑼi"]ѓ, 2zyjDׇ*7|xF]
$8S +3/w|O(m".Vc>릪G$V Pѻ%WB7}rXa 'ay|p%&I\vM=E!!5GdV"!~aRR@/-+05BEFAaǶ۵8]>)% Rs$kZzp#gnOH^']rVjѼ0%ZxJ#nr3+"Ak +oLb=;n9$XFBS8U-H˻`7˧//+þ!X +%J歲 tX<wӷ;^.xQ2\ňm&|.!E|Ʊ.v8&a\dvX6!>rZEc596U}@IaGN^0s1*v֞?ͽ.!S|x1E0[Rx\OT7;2g!OQH]"aYD@kFF!Y7Ĝ>n+QW2z~rLUm9m%%T.@9.fdݚX}UXa-~+̅鮞ȋ7
8Wu-F.fQ~iR·W|9_{&xp!J +YP{ݮLԴw6ygCou*>'-/f'쭅Σ +G܁~ٴ V%t^(º3{0̵q:nlS>{ cHڴ8|VͲ$N7H fAzL )CWV +Y&MhᗪΫU֦b*٫"FvEI[S>>a<͍ ôɯYk{xH5NuigSOR?߷=m4`'LH痋%i[:A|Gqe + +SeSm +86ħS./]5GTɕWH8n7kf-f#!^"֎=qqPYb;KVs#Q7=`'OHpz2k:jDžREj<ackO'4
8@8[:j n{թh.?Sa|R騨6`4J)Fuv˕um_ѠK[u^)>p:My~ + eL=LMڭn +endstream +endobj +1288 0 obj << +/Type /FontDescriptor +/FontName /AOQIHG+CMMI10 +/Flags 4 +/FontBBox [-32 -250 1048 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 72 +/XHeight 431 +/CharSet (/comma/epsilon/greater/less/star) +/FontFile 1287 0 R +>> endobj +1289 0 obj << +/Length1 1416 +/Length2 6063 +/Length3 0 +/Length 7022 +/Filter /FlateDecode +>> +stream +xڍuTk-Xt)Boҋޛ!AzC@4A@@) &"{we䝙=3~f=C>{TJ !0qp@Qh8!J(()186pw 1) PHPPo %T{@
$p(!]QpGG 'Tp0
.3 C1*)`\<==.h~$Q P4@Pp + +0{$j=0C?AEEЗOĀ
Ws:*#:]L<HpB4E!/NWDο8;H܊ j +kpwc%Q@8G½zp3C^<,AvrAfW-"xPܪ*N +(pky +/^,'u¹Ա +bQ/i$('gww!|O8F%Y'K/sĸ6*O<CMx3jܼʱn/c%ʛ7B4XSFx0D<)U]p7zz%FFb}KC/.}#jmWouJ>9K8upxvRM +fv>AX2Cٌ*hd@W̘ƨAăaBeƪ)BkTg/t9AKgBNyZm"CkX|nk5ܷg]sْ'BCBQ$\xJdqTzS
U2c;d̔6fB)E(65p1`gtGkv8Ei5ETdzյFsΓ[N!d=FNHu~cەrNycb~2.]BG.$KP?"asiʶ}]%όZ>` +j +,^V&HO5'Z[S +?rN +23-o6ߥJHP'BǼt$9lڑ\jԙOm:#?-GelLr."TE!T]pp
sgd,aҤ'GuDY. a*n.y^5t0tU鷬{`}6XIƾ4#@ݹۥBxpD"%7aعw]=QWp)Qmݩ19g1̧O[[w/|kRS=Xfz˩mB6fnƉ@3`Ȟl-Ky|U9V?m]}33-YR3e1G3aFpHљw:Pڅ2 + +9fCyGLfUOyeJ*LzaUMqX_waI>GR&#xV/2W){F#^29?KޏW=;瘰}6բɪ)#f=j7KWb +5jI1
ҀCZdZi
Ϩw\4wbAu*>_JcxD,wtNI9=KȎgp
ڠz1$?~θ%mlL"9WC[TZĢӄo8:e7R.4jO<c>V3\,}1ҁ!W?z츭${\ivFL`biV취%Ihn
5NRI@(v?ӝ`t2pE@P{AH9y%sz#d#nLpz^I{BfSB77/BpiwNW:_jX.R:s bh"L6fXhjQ.o<G[.W|yhxŧC,1QL;͝c5-|5VV_v,KM +, +*ԈƕvTItOP6KEL1l
ݺxuVv,m)Sڝkα@J3he`yW!oYO[YW/M2t7}ǖ^1/o_ڭAqo_qD<Ox4`M`, +C`|?9W"<ui<2> @?OY?;)`S:Y5]s⅄H"T-x<w4lKC,gr8\% e_gуlW{-d܁hp# +2u_FfFysnNF@6 +iL]=\(Pa}Y♰%kSX 㻩Ԣ#p$|x6LL9(E
N>W[r{@KO"߲ؖ^ͰzF--"Y2_n
b|X'n63AŜkSc
'}[]wJd.Ns6w&ߒ "bV*m> أH^=r`8!}zolb7yuR~]xNdX[:sd@(n+G91ULI5+BBpY4qob"/7$ SN}TۭJV)@ԪjlU'RoA}e&S[6%[kfЃT7];*ž1D::rހ&4zwZˈ +v\ڜ4d㨮\VV܀12U}Wp\[>Q'q۞̮Gާۘ9[>cocI Qs}f+c"M+"ٴM b<;><GLZ>0[72tO'v_2rz0EJs4/FG}㨪#ᒃ{$mx@<תWs1Io'jYӳ:9X^7,~<ƽl5-$š,fx鷖;e +ߗ(df`_`DNOO|IC4Yҭʦ6@!n;LרZo#t{)d&MmZ 2&Lw&O;*)4I~2R:¹ћr]֮_7eےiuWaHr?آ%=Ґ)3+{ynVyIx +![[WLhMXVX[0$XJ>Y}Dn}+*bsC1il>Pxݘ`AYjLiڳXp2StTWY)%IL)7<r]z\:n@qU8壢6H<ֈ1+2yBn]-G&~̚ԽR|1]aH0PB:zvٷTԛW$^[R-.^~J|a0rȝ~C앣mfZQO||d>闯qXYnXWrC|SػiڴXA;O*H|y4_F\jSXz-'.m%w0n|0Ƌ%{x&Ⱦ!P^$O;e<O3Y촸NNc%)f>-ݹx.Vfsk)
pG-ķ);~/*z1m[M7H}}UzAz°o֗`1T&ejal%'>5czDY,!麂äP]D<4csA'$B/ĴU.5`z7w2Z2~ tkÛ5VDDMsMd*c_ҁwg_:'Zr֡hS +qד_,/_^Jmgiu|#~a"SwH} +*o䐁/]{Ί#lF]1"0Auv=6])D\0%/4>4Fv&*KX[Ç +l{n_xf=AU~@Z,>6吃{V +G|eAs9%tePv]GF +endstream +endobj +1290 0 obj << +/Type /FontDescriptor +/FontName /EUWLHT+CMMI12 +/Flags 4 +/FontBBox [-31 -250 1026 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 65 +/XHeight 431 +/CharSet (/n) +/FontFile 1289 0 R +>> endobj +1291 0 obj << +/Length1 1410 +/Length2 6007 +/Length3 0 +/Length 6968 +/Filter /FlateDecode +>> +stream +xڍtTTk6Hn:g()fh锐.ABAPAC:$AQyw_g\}]I[We
WB!1>8 " +|` +`]@,zOPTp/=.A/7ł!l?b_4`~;ol0`
C um!`, +v
{{iMp0%7HwwCN%`BUSA;wTCi8/D,Ǐ@+!6v F>9*0bX4vcBP4Veñ*90/9 + +)/Q|2&9zI(Kk7D뜉y[1zҗ\#sWq\%nuՋY@hGZq6I YљJͨc匷oek$sI`6N?
T0.re[/T$9|1:};
Xt'ܪׇsR75Y'Љ7pf=tZ VO`
U+<;q<||9!axy[egoh5R=\.-lw>nF_ܔj~) +$eyYgi!2*9iSP3Ft c9g@W\_`|Ptu7W
5dTt!gS$3s2%}rٴ̓-3rCtDTZbՇӣʧEOO|`OؓM8L]hv7eJy;G`[vZNt~|&BpǓ1G#-7 +9:Rzg_9qOh5J+%4B8<}m5AtO +LX*犲MJ3Ј-ڟ1:CkO8:[qn̝xo}]96Ohq7$@<s=D^ A$1;
$9@&rղ?uH>M$F0ۙˎe?B~"P],.XUO]1R=.k%@~,C+ +ǚ +ŁXٛ5>6ڍ鬕Ԭ?[c}Z_]ELh++jRwNeA36 ܟV_KtIk^uD5ĉ~@y]gȅjO:Gj&\z$O`B7~eI,tVah/LKf}GjPμUV-:lElލ /䟹vI +箷(+rqDqθ͆N')2 ~:vq;g+W{bF~^Ӌp&^rpR +'RAo}7_Ogj8
Ko0 .}K +dmJ0HLȻtİ;cG32>CA8tY7"h̽=tm81dhkgs籖F27Z)MI6_@kH^} Ұ&ڸ +O93W;o<$ +lUWrF%^%hu5>! +OLBRRA>sI^ZX +樼3寐&ܴ+<1Uit}h}T*-jOs`8#*1Ze HH]E?kG\#ꖻ~hl A(bz"wMە +!JNÔҹH\@ +FY~9dHP)$0ᗚzۖ 7eؽYW;$Ȃ1' +i1{D>@yfRyžF*UGL{kCciRK3vhVʩqw|i>WhŴ&,p"gn&TaKw2S?0{CTavC^!ߩ8 [d?WuبoDjy<N8T~x2n.ܛr8N$m!.+wR/bib̵&ק!dܑFCm4ӿLq;}V(X/7qUAR(tP0RN*Gpyc,{A(yu'TBU7GoE7В#:蜬CWQRSzüaHOHSͷ<"1!Ňi;.pep :`}!6@u +pkRh>tzl\y-*h_z5Z;[q"C6mB1f\r^q'^swLqج{{AcR6]z@:MQyOod&~yǙEљy#W|oT9ָB"ѱcYuVXw m̱=2-Ykx&JFG:=9䍶"BYe
`n*g9*Rt?l_^Gi`3)ӊERwKyYOta#Kagwhj%wY&A87$&xP|篁mqm@TqN60cZLFPIwNw?KY321CJC[uqv 5K9<Yi"O$TNg??dKvE&oĊOL2(vJXVZ;抚cGrJw I4fRF@aX,+rG.=iRĹ+ԉs?(m{;0Nܬ + +*CI O:3ǻBM%Qz^ϛգU"tR5. C;)_$grV&ã=O5콧,z<Cn~j^]
Ţ2%^]cGJc^\bΉeCnG}.v +^ؕܝħz!$&d$="Zxmު߶w(~ҕۍVt؏_o5M'U3Ҍ.ݰ<O })$-0Lqg9,<h +O}g3NU>ЯD*ハE8{EcUA=ū=0vx\v%6/ [)GHAkbJk\'H-mJT[:L÷*?1aūXg"WHII"e +endstream +endobj +1292 0 obj << +/Type /FontDescriptor +/FontName /VPXNPA+CMMI8 +/Flags 4 +/FontBBox [-24 -250 1110 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 78 +/XHeight 431 +/CharSet (/star) +/FontFile 1291 0 R +>> endobj +1293 0 obj << +/Length1 1425 +/Length2 6228 +/Length3 0 +/Length 7194 +/Filter /FlateDecode +>> +stream +xڍtTk/-%H +: 5tHww813C HKJzT@DBZfougʨ-k(a(n>8@^SSU + + w
@AĬp/) +:CP0!Θ`@BP^J.aBzxx<pA;0@``EmQ Q8A + @\O=^._Fj_o` w +L'o# +[iv,2>}7"'ׂWвl/*E +sb?*i7^OӷP +牾&Wvd$qf|¦Q&Cdu-dmE,tң¥s|ANdw4iLjQ,o +WA}夻L{Zi~Zns;djn;O8ҎF~kФ FxB:.c8#6hVm<W-V~_Y<גl~zGl[1䱋w7,2bî!kH2J*=W$ƥIFzD'D~*S/ǹגlM=R/uZ7eX53R2h.Yܜ-8bSmTk::!D)A1}pyVT&xҟYu=Nʺ?($R1gaХHN䲳L˒sU/*#?JLOYM(: +N䗔C7i|8tgMbNp+XVrN7lQƌ=/M^*:M\{{8N
j'^\*ca%ׅ3a݊7J>sskeK& +#mw +}SvA/ǖR^<qʍ +̑13w5|I\na`Ͽ|ja7W~t2]uJ/&:CNq/tj&v9X@]O]#zVU"75*гeFZ/: hťy_@tܦ7$c%mXMz+oxc\] +;blYDҔD72W([ٲ.(/gǍțݵpns'/)gB>pO%f;es>e# Q XXbDw10${[wM@z;') +eܿj{}vtb3nq8OwBq|` +`ZUM>QF7 FyWÂgG{+)o,)r$zܺvǻwC¸]p +-$㫞6 +s_3{<(}qْ34]7z־v육jj`<:3ak-5eb*35zĸ0w0D;q∎5Lw +pıWۿcbU@Lp95Kh+d7/7
O'N~*<s>%ewiqL8rκO͋Aʗ- ]bIB2;{!+IďBxwnB^QܯK@L'O`f/T^iK"`oU[@5}d(CVx=Ŋ Dtl7//nY~#Z|S.u$-٭izlj7[9maeP5Xi:"ByJ
4 +~%C9T
IG3^P:>N`i@ZaP" +P25L`ٓbtH4 (C~ؖh,{aٻQf)ۅ3IUɤHokX]p{`h
<'e
:KRts\?@v27+XfPX3ϼǹpҧ*JrS$p3bSttE(oҲkBR\ծ ++*2U"M<ErM&tV@B}-w~d%*8WkpKodp1BW8sv6>]is%~"58]{I5(&{:RLt~G3˼JW|{>xƇۂ>49IE +QE_ٛ٤=$Nr +6*5o]@RVj_mw㦒왢ގZL>m8-}`__DSF{Yw#y3놞PT0&**[6הKe" RDwFGwX84D
e96(>ξu:f+RVh`N"eӍ
-m&O,>{4d^Q2VI~#&!V普1uТM%IEgѶY=`qnL}%hh슘t;rCGR5^jl(f_ +<bJ($Y=̬ѓ#|D fc2MC4·=d-rhV7,3.Y+b O|N|}w>WoM ;~F/n.>dNc1캥s҃懫AwN;)}fσ݂SkWp~ t7WS<U]=zT!mwpty̎ss.eoJ5T+7PwQQ +x5Ğ'њBQ&y]
XU?
tqǞWS.r 7dj(PbgC&&K0][MlJPq)v"dfXNBCaO5gbD IU0w8ļ+%r`ڱ^Dhk]6STT"͊^聯R%|Ul63Y$cGAǵztc}y*ƋSK%$ +|LptYI%gfi~HTq> -+VAiL:`LȺ
[^+k <g}p${h*E]/_gߦ~.<^E-tb9|V`NftNlp'2(Oݮ[%'[T,AnQP}-cPOocE }|ˑ`hq'nP_c_sF\3ب8B6_m|@ +endstream +endobj +1294 0 obj << +/Type /FontDescriptor +/FontName /AREXYY+CMMI9 +/Flags 4 +/FontBBox [-29 -250 1075 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 74 +/XHeight 431 +/CharSet (/n/star) +/FontFile 1293 0 R +>> endobj +1295 0 obj << +/Length1 2593 +/Length2 22726 +/Length3 0 +/Length 24200 +/Filter /FlateDecode +>> +stream +xڌPҀ.;'w dI^սE{TIA(aoWaa03123"PRY + +4.`lWe + `fe0ZX!Š;Yy +h~s\c|?0Y$+彸nOQ*t(D&P~-8;B䑀e3t7ȻS\ߊsi9w`N7-č2?ew~[VO2W0x%lr_SKKvUFyZ?p3jTq+nG2pߚoޖ`k<Wl}ܮER8nkބDMčԶ!USqkٝTZ`AW/gA^:@MC +iICL#fjcS.T0HCxjЩ_'QdPzjEed\J?q jLtOtJ&^E2HYIp$ź_ST+퍥""N"fa.r`{V0:hyVq +lKS+S(U:NKE'쫟)1ޚY^s."ntU}kDe29#nޜkxIz +eJ4FG=ykL7Y6mJy<´"rL|8kwY64Zv0 dp`i`!\* =j4ۆ&¯>Skې=8rk]IY$.H~y2EyYх-kǰ)}(#BkjӠZVX§;\-:Si)hk,mSbo*3GVέBVSzq}@ +b)^-7l8=dc%/dwF)
}J_ej^{gzaLsqb'+s,; +j+I6A(WTL8'nGkEi8.{<{)۩ +b/Rb2^z=17%V8+G1.7Hm#4`N-s2^ҝn-=^ {
MR"طTz@09chHxN燐,^m=4<o'ɽR.;>-ftLmר-Z!Rj&D~W6Q!l:R<w7p:&Pq>J*w}쵼<y}k__a^V/ff)sG!7_d,QWJl1{I`Ҹ6I6;%9chg0pj +bcE穛!`L"͕P*Vvw/]iV3ZоcEn2̡Q+LFQ5Iz]Kp.
+I۪*9>P6H>M~u\=)?<݂I6kE*r>] +M@^̅ukr|EHY +óp_ E#-䩪w^d<$%ˍa!B")ieD|X7<^Ƀ=@*4VwIxMMcy~CJlL%eˉ)=w +r`r4]Jd *aVB_6N_,oqIH9'G2IU|#@ҾOeOe_h;>z/dUŧF2hv:(,N,9;SҟQ<7/Αn~5FN%Q1J? Pp;rET]K1pBuL&E~q($نb8d!\C۽4j!R4UgK0I:||@:
.
7S</KoZ ^xL/0"O +r jFDU$gYͰiWҖ,%憊~U2
*6ICp/0(&em ;c9aK`qb*ocjM/UJ9bz%0|r[+èA떴)U +tk)30K"ޖFM)[q0gV)i9tJɸ
&s_-2ɒ=jsyIi-MFhĀ9J~RHE7Çac2ny(KԢ_BT^ZN;/+ӍF|:qk("_2^2bp#4j}_!ݩ{λR:N +#^v?`o8oy(4cs2e*ԱӏeE&E%vG2]1gx@$8#P q!G~6F<e>,IRh]K&a-jkNJh9.|<c +Q͋u@-#VXȂ3 އDH7+zm
~TIrJf/>0EM#Gl#a7|u5/ඤ z,:07$){Qͽj[L\8hMʵ<kem-Ol1J + Q鈡4vٸ`8tl~zlŶ``MHB|O(iVk4Rz_Kx/ML8hro,?/mFB>P$سu}LٞOFyUchFGij : v.Cp1|#v|{=Pw4@~ٱsIc{Re#Su<)иuB 7I5y&k$ +&>}"e
\\![ +ˋ|oNaGniIͷ':̅B-
Ҏn2KP:CY/!QZޗA+
CVJ| R.}tO0l_LCRnn\ۺScc]7-eT/jÃqWX#=#g_~^HOh[5\mpDCLf'YwH)b +@L'YuMe":Km׃1DudE&I`(O4Ic5C Uv,^?&þMw/oB^Ӫ$BFASRjzzCPDh^wO
VUsr]s&ݼIB2vq*$q=bB8(u6b +4ޫkyW
X\ ?`HlHjI!TY4NiD=/!{˷<O3陵}qȼ.]%2!G(ъDžs=d>V[`Fc;NY4U-c[:#d:#34 % BJ~"Q-}\z9ԩbFضu Ξ"~7kO|[C\x/fإݚe/Cx5cDƭ^.t<Yc5..!9C9NwyOST⒠)-z
B˲*ѥdݳ=-ZW
LJ4{`hjS + +>Q: +I1"0X9m.QG^"2e ޏ2ϭh(EV +JR,?~5"~:?!D{[sVbC\>~N?}@f+%r.q~?bYdգ!=S⨺װ/ Nz5@rnQĝMERF +!ҽ}aJ=Ye^J&]UFNdF< +$Z;,{=Eؔ6wFGP,uqDY^\ւ?3DWoWoΊDfʴ$DQ>z~Z?32y:
B%dF9JK'p[TC#mmէ}{@nC,kz*wt@%0v!ٯv?r#9w%+""GMHƳ~c빦ΡcMoB4L!뿏=be/1c`]);r7,^@R^fؽĜ%=qu6bcޔV~r<JLY˦=
&mzc ٞgRovO-bjvDE0}B1rE +/^H^OEd'2=d${?^bvX!"D;_w:v
FOBQt< R#Oq1|Vp4"3rY*>Mq,ds~!igФ
?8;Hߴ2{:}v:xT:<m'G|l<?#9"wQp\q>
[t2abm'@D/w[r".ߏ]>{̕EUOK`,".o]UHŴy33C<.N0XNYtDƅJ?B$OjB4*Ti +T<-m!~m=AVdj:_S{UGiNKΊuuu7*d5Xt`.rʛBJUؽɗ,f:ч*3O
%tt[Uhk/$j;orT{⟣q8}.|MV$8_wuJ +?p11pFvq"Eקvnk9݃7"|7k2`abߞX x`Zmai'9xjFaM*A
a2~YqTB!W +ټK
"Q1kA&KkzD/={{TtsUh;g[6_1PWڬOչy<;tvw9 L4#'m"L&;O#:[?\b&Jz!WS2@8z;m2MM]Z_bwZ*E.&;T'&5 }βD_XH|T6;%!08hVJ34EyH߷ S*;r7m8bgS?}?6^iz4<hFg!W}%?tgmwc$DDI#9$1Jξ#>{݈t(ˬ[@7o=5sW(2O~O{(SD꽎1ؐl`-oi~L:w*7RӸyPXѼ؎[WU7V +} +(8FyU'n/y}:7Ѝ5Em,Zj(@C +dۘxd(P/27h5.UlTeY>9TXZ#> +Չq굅fzkMpHl[BV0۔S:@RJy@o[1/#RAQ*ɐS;ܰؤ/߫uW(/L;~By$
ͽf2dT$y>a~+߲[PG
GhťTX0قUvֵyFXBRs~_9{HËXukSf(ל߽S7FNlUp5eGUukm!*w U$ +HH*$+5:XU+F5p +~$_űkDbeC&[)љ~ٱWM(n!btBrǥ&o)xȗnIQn6 d7{M")/B(G1kƾmj*(Z?w2)Ì[E#66&vvJػ0>eeS9s0(}$l2 N/]~_1iWTR1JӖNl'@v&L֣4WS'MB+V@ԮCE@(~anU-UE%?^aLJb).Y|7.*/*þv8:ǜͺ_frcʑz&GcBm&otuM|ÎL.YA4c{uPүQR&A։،J?F25\c,hmJU3KpY
vNr&L{RWw1&gfx?RH4Y&d6X1oM>r<M{IBYgwdO +`pNID8V'^Or&'0B]6AI=0YRhVM*Y@lm7oV5ROD>nEyS*W֜KL(<!چPe8$Xdngm^+PT-=N6ꭤK뤩+HtJ3e^[$_0PG%hc5" kkk6n2m</KT$ L)餚' +cC!tv+IFmgs[HPrpf$ +8{IQVNԧP\f:kP5F+_ 8涍iU?.,?4n6@Ϧ4z|@iUżՁ5؏*s +ف v8M=F `}T6ẠoZ,#l1C}=(yl8FNSK
96~ٚ;b) +*saݬ$HKju4֩-v5Vet0ӽf!ȣZ+I~QT -g{pO,FBRB}K7eܵ#7s@hd{2HQԞě0}[-xftiZmDa)xgx<hZc[:\Zl[< OP:`KרعPt.Bjd]ߤ6*'/=5zYhZ}MJ[EZKs$Pc!R +J>YG[d3iK%o(P)/8H3XSP^rkU:B[@
Zjq3Ϊ0u$_Аu1ۇNܭpIUgb߄:5feɸK,afgao{Sp?"/xB܆zEaiWq{;'Jl 3rG]o86>B27SMʸQdzU6yOލ̆"b\ܯZOV +EcR0W9;ko7 WTGlvHZ1(䎷A{!6Z*u(͐s#2ݍ<O˗龤 cHz +e%pH_l?GlOfSڝr5~;YB +McFkUqmyT?60ѯNۼ-~WYHŋ)?[`ͺ? +gvݧ8r:ÿix5)DI~`e@5G|C4*Mo?1KFŜL|?\H)/ez#גOCK a"[jY8^JmcN12躄A5Y_ξzl^T=AR +~cI"'ј%XFk;~2msOqĪ-$UyJ؎ؽ@&^T+c!\:pCr]+Zhej(hO0apE!b0_u(
qc5.<B˯SCO"Xs/@d@&N͔^*1Kcy$j+h^:
La',_0gdȎoF{[+=>C.`ꧏKU^La3.~QpAY=ງGX?i09)0ɿwnεi#HqBՍ9ҕ۴;`%mpM'dUc;O1ZB}ɱi4%Eя%*,l 3cS% +UOE$KLgp^ y.PXJmOz)ί#uyq/Tc5϶MƲCkq()%;NX(\_XNZ +]ifrSota=}:qWSSgeʝʡ.,!M"C:>=-zK&Lxaaw~ūOWtzzV6teΘLx{)TDYx<02]E #~
oRRaqwi:8mjSmpu4{NΩN1ڻoP`JjvV-xZ
+jqBC$S"?U{4e4ETq
9v:ݔ{Gs)S;,%RL%ꁌ}y~9S*0JNIq;|60p F_GWYk%F?x8i:G=.KDNh3g0m77eb~EYV5*>4!<aÜ.-'k?%QT'QHBk +A&G4Tk3
UvE -z,.c~Fx*J79AX$Lvh1N6@OHtw
.Rj'V)D{8}\ItgЪI٪WsI.i l`zl"9MHfmm9wKf*7IQaZ>݄G1ďB Wwaz)M2pjA|4sSb}Ljάʕpiqʢ +D,
ښWA{DZ.=6nAn~dCYJ 0hQ/XtRp+X<h DkmIbYjRQ!V,4(WB:ZwH-JZ:+,RT8zr丱5\W(NF ʒh)V(rY;FJxWhQ +D +7b_5(uE__h=wִnQTwBYxsx!.Nke\/D'+Jy$;ԟ;{
-5[V+B,CA5OC Ɔ-f*jL^3wIg7AcLxm?rB(~všW.tq5tCNxNoJͭ +w4
r}z S;c嫞=ܡFs_jSEV7I/_H=Oex]1'N<N:b(2kן+E +V.8zn&aŁڸXdF@=?tP)Ӂ_I4%PE8FAʍb0Lkysɤė!R{JRkAE"|<ʡK +sx&U2w>B<y&rq@ew;Ghg;S5ܫjK8}cGOފ 6T?re"FOa(C~#[Er/ _DĻ!tV\5%Z4Mpg*XRa
NuxHw/慲_%!\//*R4>ĦrğGB"j|a<ޚG}qo.80uRBGC&$&% r'5LTTj+,Uwm8<^7hW|(Ě%O:Jgų{}߮%XP{61}إ>M@ܽYS6~]{Mӈe`ߵqaRd'&>taPL4:y$&/ټe8iW9ZDX/.'CjүqL( +,;xjD}-xg%ڑa1H,Rsv>N,GPX_ٸ:WA2oTrhn.8vzYRy8:'!ȿ^|$;4$z}v^j2Ja +y*Y˫8O@sE\r߳PȠiPw2Ѝ+Q]K?*9v3z<2ߊ(@
땧@DuC\dfK:7Rي5Q@>*%y=ʺx% e&+Nr<v}v<lOh3_,[#
7f5pIЭDzV;^'U5
59;c:xf" =[#^+ WRȄ#m1;\-Cli|,s6h:x3fZQ{g0%u=$Z*P+&dqpE0&MӁxsXI`|7k@[SQ&tY0VL&YҼjq"tZ-wh
Xhtig]F;P˄הmSOq/+7ȹ*9%UUOQAD܂_2,:%'`boiӬa|ӾоI?V²ASC!_ca +'y}9s0댥+w=? +[ؤ4TM#Xq}IJ? mb[?3_F)Y19Lc{|]1~xz+ J@ OV}jZ=I5$q X! +|~Z;Mr +d@e&uv&AkOM~I`\y8owV<{:| -Q){C- +UNTwZ`co
E6<{`wĿ +
|P[*+q]xPW(FysW3B}ASָL?Nho>1?H{N +u"{) sVҍn4Z$f!s2u1q;Id
χFGٸu5BOeU +BG%`eWE_ddI{i3P9'p:hmj +MI6Ԉ`5X1(s< #}E"w*" +.Tp1xDL ۞%.5;
%Iy +[+o?RS(|!=\;_AiwT
R7$DF
'm@=!륀eCXYUV6"lciW*?©:~,͵LR- +vZ87ᰜ٥\Bp[0(|͓#'{m{dj<C&l[钁pg=NN/xlm,GO]Eh۷q o뾒KgB/,z`H+'-[n~Z +G!.E:`,:LRU\ESдЁOkHhH߬4g\#|3'EBYWm--G[3y.&}u{j0YX\A=r2/ѥosoTrq<:9:ͭݺ~}R?Kb< +I!=Rr?E/Y@L0G[~A)Sbe6~i +@!S0ӷo1VGaZ3vb."V-*g51ok=sL;|Z
N߇YĨ"n
'
=\98t4tZv9yX> *:.i j |R3j%ΘӷX=pk{Y{k'A' #!W[p'i+֧H+ьmB=݉&:v؝VK0iP̾s~67?/:e +(8RJR<Jb{ +9(grﭽE$d=V-Kt~w?|/uiܖI%GT*%eQ,xNX1_%w^VҶMjEŋ+Qe`K0&Ĺ{Ł!y`|X WFa*V3($n
ODf6OW\KO0.Kik+(?0Q5U*C
^<<tbzu<\ڿP?ךv*+KR_5[HLsAvzBsډ;驂@:ۏ+`7RCADD:m+"LHU$*FÎRU00:2?P{uqW=z:ʽǬ[hIhw~Hǭ=<jd)hy y.-[8EJ1f7x5օcTk=8@N:u`WWf +PŢ[>~h9aF'[?iqoNvۍRY
0?d}iz wѕ{DZcCG<sO-xZኬH"
t'Nr#*bx(g0K2:启sR@JkX%(gBƧȝZt*-CacQ)φj;HVi^zC`iS͞+cEP"B&[j? +ЛBsfp[vGCk*,֡9dcx,+_ 1WEUP'^!C\1.M +XN7%fjZMKj`=<f &r;C3h +|MͻSrWV{IibuN<wՄ-+TCAu_z _=m(9Aq!mX=35!/xOuJy4,;a~:ֿgo[Nƌ[F?T$Dw _Gcߘ?"xWu1 grՂCu[4!'v^,8rrc4a{Bs혩zPc`LT +``5澇@|9U9I@c+{ +^쁹uRg"?F.:Y'(v8UkruT%@vv>ؚj)l?_C"}+l5zhE{o>*7v{QE!&c;%E$a$x(53nZ(\IMZgtXT,m: +qcDĆ19-\7{ +f9Xϳ R_-XrB۽M!sI))B<X`\+uKw{R;5`;aT<GnB;":_thejǓy}*fHkçZ?AesC֔=uE#Uӳ#P1-\ij9oI~|` +;qyO
ev<%1[{Tî"'f[,7g3d3K֕2UP " s#O-]˚mw-6#vb6n]8͟v=&)hB.Q'^R
}H4 dA\f{ +lQ7.!<!YK4FG|~x[VKQaƣT?}.{xN+џBQ&tP
2i9$1 +މ#='T0f~`b\ Cd}Rj4/TR(ʃ_!g9%_YW2\\Ի +ɽ{;mu}
y)@N +<|[L^'A]5Ʃǂfr.sPEaVn{B +endstream +endobj +1296 0 obj << +/Type /FontDescriptor +/FontName /IVVCPC+CMR10 +/Flags 4 +/FontBBox [-40 -250 1009 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/W/X/Y/a/b/c/colon/comma/d/e/eight/emdash/equal/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) +/FontFile 1295 0 R +>> endobj +1297 0 obj << +/Length1 1669 +/Length2 9357 +/Length3 0 +/Length 10438 +/Filter /FlateDecode +>> +stream +xڍP.Skp@qwww@.ŵEC +Pk/P\JKg};Igٻw= "x +!'ڃ +)`F +-n@7&k UCC5B!~`]O g + P.]a]'^~X>R jswB +xQ2SSТ^MLg/,߀O̓Lngvo֬,S|$jO7:U+1otyqCuDqv +1IM9cIBȅMxq;N#?-G?$iióU ~ѐaloTmL=`&`Ӎ>6ܻ;Ni!_ߙUEZ*)+?CEgƪq#nk6nIQ\]Mh>a*fJ6Io2DqɿcJ.Lj^L8*v2v$6y2[,Dm-<@KR=2vD}@<`%6zA{wnr~F_lǡJ1 J1+D;V +}Қ098eDot<*1/{<Q}C$4=z-ZL%9,1dbCR`qC+rM:OΧW,[l"kmE*n?edyyfh]sĬJ%~;$ TcұX58|]?uLfes{^|q+?V@[gxINgZ,1__5羜!3Tk??Y{+, ʠGί2.xwA6b1%5b>4#)x{7/SIfˌ;U[O*۪m1Rrx Y\opKwצN̂FvB> ܌Hb2e87nR篧K.U{eѻp y!㕄Rk-Mr/?{k1$(~@'IGi~M91wKlOyUY{9?ΉRM5'z}T +0$WHFd*_O8DdPܵNert+<(6#J]clLI*4}e'k7J^ͅnf8 +[` ,o|(L7ct٭[7xsU-k7{5٥z׳(҉ɡTA%I/ssRD\n0cF Pld&+Gtn^)䯀Iz3lg|&MceN,*ҊDXrv<9XK)F+Jvs=3HޡWpƘ^i +u~#"R +}*ܜ"t+iÎBB1|xAVK5EְoBHS<)B6e՝O:>:^ed.KS?k/}~Esr?wN0s)`WR"uk-K=C[19͂_g 9Os(a >n02t+EmÁmrC!/wk]+k{Etm|gưZQfrClq@\\:YqGr&ȓ$6w6Oikq8,H[ۯ?&W2Fp$!x
FtjfQy_Q9~=JQu;$jWG>Y4mq+ӧZ_~Ɍ2> {vX7};cF܊k5'Aa? +JvdT۫qH:r@M_oI5\)_jI}Y;99?$i:a"#4qW
Ff16&*ǞBpiE8a2cH*56ŒK;к.ޝ7hípBv\|#/+; 4d$M>+ĠG[~F2Gm0XP +eZ (nIpVsF4؎,3hl`~B5VؔaЉ 0kKerXNo*m2ax[PhFiZc\X0;(~1_ ;32)"û$kg5$;В+tRD%I;L{34* ^Դd$AۯC-W)%F$$ulb79<xB)!JN]x8,Un9}/Cx*:zU0r2IP_ڲ!>D-\D?r8@9}d+ Մ4Иzcq5ާ&wKBiM|Ɲ[u˕TL2Իa<?NBB\N3)5Nx 0-J/# +hvX1{"az!6P1EJ
EFD7Ny +~ðrvbCg7uE +ח,EcXhJ'<=}v;Z"2/@׃Y]
{[}V34_O?\w_{2Mi4|7p$3ҿ+be$EB=1/Aea/ey +7wst_ru27çcSk?l'J?m͝Z%dƗNU!7nӜrb<cfmGϩNJk6-3h2Vڪs(~K9aWb-/4[˹"a\R.Pw.,8կ@n25?qaF.v +}ó%gD=(G.a>!VN~nMC\\m@b/8?Rtw_%bڹnjE +N'ȯCˀ8{4-
&yq;].:T8>Bl5a0jeTDģ@kV&2md{V2+2LG~9h2GjUَNɇMIL]|^bmgq7{^#*,Ց8Y7ܵYѶ&z1s-z?Lx(.*լ$*W&V~/,\X֎.~K"<4cgͱ[s1Baf}plT[=zՅ Ktoss3 +BlWX)Xs퇅O'vF5sFkѢ莹)^_Hp4Ʈ.7(]^ +Bn +eKPeF/~a̫1dTDW +MEbb~`{+ +qCWܷIuQ~-PsEO(x~o\:/ZhXY˒Hp\QrYV4i;breRWtǔnЮYl%$f}Y-ܑT6R>jT2@4w66=/j"B 3T' +;h8x|ESjSy=KxN0yGcsb1!诹+|!XJ*щ&Ͻ5>ݐbÙsHF\X>C/CW`Jo5US%Ϳ<I-izfxnW:t;hWV#n`
Fc7Ў(S!˒w +Β"-C +Ѧ-)87=y^Ϥ1^h#IcgiVr#M?0 J:kRrW/ j0M,8ѷg71CZ6Pؕ.5?Ŋ?p|ʬEvlz",-uٻ `[ח{:-Vj<I6h +M<`A`pi +#4]ΐSɰ
AbE8H`k;{Y)Q,h"ʔFPZA=)TM{Q0zF]`hawx(B;laTEݚb"A_Z7^-n?_aa.IwDѝn6O[SKb*Oye\ۯ +=W=Q;ҥ+3~&7^IFD%?680{sBK{<VjF`fD5HtS3p036tPMV$+R3W,d@1;=·l-n)_SH;il% +o䬂 +@颦>kG%*](fwSBӮ,j#_WzVS
3sGZl]4sF$o2^/ܫ L>o)[#~!}c郆й +0وb/Gby&2KjagsʋZì2eBkZ*Cz5[R.h?=8=+2-# +5]l늲;)¶~k"$"v9a4
#i!{qBԖMW*y0*3x_ cvޥњ-I~ \;]˵"@de֒$ه쨟jt\#[CTS
>w4G[l:6?Rufo
x-
RߺbClm0V`MbtYPʑGfOG| F}ϞiHp[\_zlc6-_J&hA?J-˔~ضʽ]V4ݝL: +:]%*/jXFHI{cm{7/V`25|l_B4E`ƗF ӄnX#%4͗Q-dQq0}]Jz*Dpm4~%hf>tyyWcSe>B:d +E5⏃ߘh}={b[ h/gvoGwY"}<5`w]tdCoXUC5_^c(^fŀ}{&2C?eni+[wd:T>{Γ=ʭZ`!zg}$</iL5e +C}iS{'9^fgP2T +?~96<UЮeK t_m-KSNbȵW ˋFI% çhzUV%*yr_kVjUUY'X,-K<=0.P +[-ס2}l;U4 +0eXIVurn~/}sH
"0ЕX>H<)4۾jlŽgl\tspּ:ll|?:M@LYbϝ[o˺U4Q_-twv^`6<'ZUmf9''m<]/]
Ɲ`]}p@o[+6coOd:A⬝㰁狊s%U(y)ǐ:U87ې!Eqv۶LkLh
zy]1JΌYO2Zu٤5XTL>6A*#aj6KcǙMr{i|S?ZP.\^23I1q))f +W +endstream +endobj +1298 0 obj << +/Type /FontDescriptor +/FontName /RFMHPY+CMR12 +/Flags 4 +/FontBBox [-34 -251 988 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 65 +/XHeight 431 +/CharSet (/A/M/a/b/comma/d/e/h/k/m/o/p/quoteleft/quoteright/r/s/t/u/y) +/FontFile 1297 0 R +>> endobj +1299 0 obj << +/Length1 1486 +/Length2 7301 +/Length3 0 +/Length 8292 +/Filter /FlateDecode +>> +stream +xڍvTT]6
J ]CIwIw +r;>hVJ0ڹ9 sqyzzr]9., +v +\2a` + +\L > +p|(do[<oy=0A`/,J$ľ:R'ö~*ϼK<$̠U.M9s;oMo4[n^ޚkMl`͍&UCIɡ#K@&ďJxW +^5=%aۚ_*)cߖLrҍ1 ,fȳ̚!Cs`%?}~1E3vOφh̋2FTD>һJd}E4r)eGb)2m|UDݿXb
}EBU#~WX&%<q +˫tRe +Y,S5˺̥Љ{* T&r';;"ȎU^rڱigOm$m`sxw&vîLxe CYS
ߪ\\$HW_lw4cэ~'Qb/ޛҔ#/@OMz +D)_F]ys +I6G[*=^%zV+ɇ{< 9ny:Zg8\(<:*ߕ<kFv`,I$qӑ&3NO
Gm7cG/=sl$o2Wȷ)V<~F8=I;HUHup*C8CϺ8MQ2z"6Rz1g,7qHb;ZPfo[|S@ceʕR YLMWduk^̓-xqD>F-4gAIENDV7XPǓn$6N&xcr4A%UFdsK>W>a2j8&-, ilQj8Ï/(hI*,7Z
8t=y9=jφ>q7'o`_oPHh~dE]k*|)U=q]f/өn!BY1n@lRfx˅ս@XR̾~xu3i-*tLwH_FЛ +CK:3G)[Wh?MsفN&C +YwBFNWQ賲ѧ004qX2j$TXޮeoㆲjGճQ+i3Ѭ#=;'5۳+]GqP<h +r'2 ԋ4]BNj;?3itDw۩g6ە5+oPV,[Α!ZGu? +c陞5[v+W/D},h<bL9Bm('Gs5 + +HYy#˹i/2uƖCЁM5R{荔E=3yǥH?b9/ne1ɗ$
&xNZj1躮lgs[H=_q4'0!Ư!#h}=7bJsg/^\&r8S +M᭝b?cr>"hMMbZi"z3-sϾcQ@c| +نLlvs.L
e//`R-e:]Heɱh؊AkYgN<[3
Hެw`@;CXEƤ
'clw֜9H4(?qf7_)RHȶ Uw'3H#75゠|?-'.̉Xm6jj7IiT=7P٤%GW77r~Fsm'[jo٬52fRJ7kJGCCi;gn϶[=jfA1RE_Hmv髻oUʣSs89{j
`ETˍq.jUp4IxY c*ҿbݤ\ԝt;Σ@2?ԯC|n4_d}%7}&P̜GULQL-#%ZUp7ABZ{'T(͢U5a">)7:l_zp]D}MS|FđoVFV#mYbñ7~f=+NqG7t'?(bQ"#9oFlkXe(BKBv4S(Uf
XuV-ߏ%į&[%
P +B T7r +<\!ܴΈ9:\" s>KS'.bjXeڙty0\j"SC&π-YOyWhyTx^:X-N{#q gB`w
H^Jӗ7bgmy3Foԑњ#lɿ|=5,TPV~lY*iV* +h6CzXCd̟R.s!ltkZmdKh.%x-"bk_" d}cԓCxN6(>s(,ӧX
RWś3vuunqZS+ +!A{`).̪[MP!/Rs$.<5Og^kzٓ"$p*?-o]NBG3"%ϸ17 +(<viڝܕav>`tbK|<~ͫd'#%LŤ]4YzK)ʑc[3{Q'*nqZZʬkh|&Z~_{1?*~qtclUBhS *Z7a5sN$
{6h霂<Z6M:pusq|.67Ό\b-f o->uvw%Qֈ]jݡ;T&pG}Y~Iȇ*}?p/ g5dH<VBݼc%)~Be߈SˊKV|uٙ&}.zQXa ٭X[l9=z#W(UBFd-j5=mKK處^I2!wJSZsyDGVÄ_yC"e2*F%hz&0
c + >{C\}#*N֥ |;!ޘؙ+bՇ%}a!Rpe^!䔶uW$]Q?kΕ~jp緇JjI"ux-O.ym%FAF$-Vuwcޔs Gs7[i}%Kf:Su8mN+OϋژU
Djȑ Q˻ȣX3k*rL&8Y܃%X:<rY,4uHUr}ϙcJ1;3ɕ#@4!cDn{ᘰ"o>iRhڎ5_RL\<#0S.evt@uꛅڨ"R~IG;gKv(_`
:ˮp|t,~}=W`O۟|x}*6˖4D 譁9*]s{Cȅ@zBp>Tuz%ty&hlf"vo: 8cٳWײ4
NoR>#kuᚕHGH?l7RoWk$YKѨH>)
+9yϪZfڃ|l5AK{HRdQFYV_T߾YlB! +wT -@k.Cc + tHR&g3 xʏ]+<dvm<C]IDKaCZc$=;Q V2۵hRD<#1],k5eTH|fBoQf{yE@{,?MG5J3+Dηl T\VoUWbĎlJs֖LƗD,6mnˎ> M*%sU49+B^J0 +]^ed
ch=8ٜb$n2z1SZK lw^p\<.5۞lاUx<C[Ds-[{:ɀʦLCj-IKn;Ӡ5'OdW +^|f
aGG뾖GR;9'>KraĘl[-z8뽮XVs:J\|>}ۊ>fG6=%Zoh" K,!mӴ +)k߀S*#yz֙茵$R'J민zpv\L:6c73zQWGw\\Zk-9cRBܶ4Z]8= 3.!&m `]+[ZEl+%E- +K(o8q[̆1)YͤsޒxHzeQ-K<IB*A +vypR& +PZ7E挹oRcǨ϶kYl\'kK)#|aABJ8MkGŊkry(KJc#l:{4F|{lIFBOXb$V`{d;9oX]t|ښ +!8Ïriܳlfw7>Z!+CLp"-aBe?}; +endstream +endobj +1300 0 obj << +/Type /FontDescriptor +/FontName /LNDTUN+CMR17 +/Flags 4 +/FontBBox [-33 -250 945 749] +/Ascent 694 +/CapHeight 683 +/Descent -195 +/ItalicAngle 0 +/StemV 53 +/XHeight 430 +/CharSet (/P/T/a/c/e/g/h/k) +/FontFile 1299 0 R +>> endobj +1301 0 obj << +/Length1 1533 +/Length2 7501 +/Length3 0 +/Length 8520 +/Filter /FlateDecode +>> +stream +xڍT\."!)04H
%t01tItH4ҍtJw(]w7]9Ϯ쳆FC]j B`\@a +1YM
+(;x +0[ + Sre+wWW3[{@V3P+PЖJ) +OQI,78I,RI]xKrwP4%h64nƘB;w UC]GrO/]!]G#ʳ[dq̶N +ϒ h()lӤ(0vJg?p/& >=P+DZbFqY.v '3$D:'gMV&-_j͖ͧĎDZ \1<Ƶe%J*'2sURlIq +?[0]-02q6O430/ULjQ3/VTr`+rleqa]~:99B9l ڀ?yߑy5qF)M3!YgkW7sNAy^1quI3Ţ/qܙ:3e1l!;CsHl6 +|(0@m[6?p3dLprǛN.ʟids;#ҽtQVƃpF][+v_ΫurZ2-.B0V#/ \Scj~[mjKhi}L'CP!jZSo\}Ð}@2\9C/n&TOZtdmʶmR +XEFMx9+P6o;.h,'y펋ޕVܢ%UUs&B_ُ:<vDzԭ{Ĝ.oTIT)'ZjG4a&H1}zbGZO5-79Zmo3(vK0T|hq4rRXJp9f▝f`D-_Pd;"
8ʆ 5@BMTƞY}z~P&^}l]. +
K8l֮,u>NEb+YF4Ț[ܤmd2&\\PۅdG!7XZν#zҏcքʒ9m:SVaܼڴr;p偵Ӊs祣mpHJޘY/W>.}R)]b +VdA͉&ʠl"Ȅč6kc&DpWc\(ZwGz,Gc3-|oYr2Xo6/873[,F#!_COT%^Px5eȸ{Zuc$(-xjEm:.sBVZ{ +<eFJqiLj˕8`ܔ$\wU"]rLP:q +{T]]v٭,֕z*-GW$gř>Hb!QIl
v$ H[>KO\; +QWl,hiҩUrv34 +1cC>Y` +_w<sדR#gQV~8Ǹ{NQLɞ*z{#Ox>h93DZ@GwUNRj=iqScʼne\OWtz{/E)
&=gyGݥV҉ +ذ&?2^F&4:$da=nծZ9-lLH}YPz=Vʦ5Q5f)~th8Sé|nj$wp\bb?</Tqזm|D{(+unS'&q_ +0% +8#m:@ё*\nQ"8 _GX,ѠHd]3-8R0y!cj.e0A_74)j0XI,>y兾A0Tě%tUb'Aibk m6 :@LsL_ࠆT]x)T@a!q?$åD]v3!wr(L@3qRgٱcVvDvELpӄTb'{J\1e~ΛDs2e7+\sV>OV?p;U~T@U ebh-G/07r}͋UAFes@5˄GpQ[k!pJV'5jn+19fv&KF&>,ɤȀgj٬ymhC+FϤzK۴JbvK˓U7T
EojFtM1F٣Ej>=kptNL+]\Zx6Tȫo&]d͐R2IA +Oo,41➽h>v6/{ҟ<2(2M{"!ӼXd(dr^GlrN>L9O݁)+%%ڨCq0W
%X3VQ|ڽҏ|s٤9xfF<K_#SXicojY4.2kֵ$&ٷ!meM8LtCHx>. HU]"v u|_~3D2:x֦D+ZzI߭YDqzxٷ}MQu^NUTWmiF <7H9ImGT=dKkENlXryxqбzGؾ`^Q.<_Ep_5kWȹE|K{22YZl^F5未"fqTXHbKB穩*豵LHvl23[1/v|Zhc%#^ :L;fȏoFx +j,:?:mc07ne<fpŵ
ˮ4R4̻X2Pu\7i^>}_Ha5*}hs$hoCnKW?1Q3*;fgKo4
<M*$c*9m>['hc8lXrM4 $бѴ`{5 Br"HVL_K߲vN<u$wL?Uqj۴29JmWo$wȏWb> &'IG=Niy.:6?tT&}v@! L|]nULsɐƃd Rr&bJOR/M!ZI +xWVE%Sgr䍹NJd1=s $TC {!KFX`:TÝZIĈȚuƪ꿗
s*4p'lݮKZ8VX2 +L28ґP8|I4[R8}nZؼOd,g,oXqй>gbxJPF``HZԵ?SV1MVu",/}5\7W +t4 C}
KhGY=x +~bAKR0Bu8H?\-_c@{tRp|k!VPc%f -(IgcD,*}23{G3kmo(jN'Ccё$uLPG- !ifgϱi1y]*;h#cia)8ulK4@V(%0$8**Ն?/Wm\2nT%lE4c;ɣy +Wϋ%&
~0<,9,VXc'#?m&\5uDa)ĭ<4qg=ǖ(e&Sҙ+O~e/rNtK(>`ҏ-8s쮚5u݄LVIT XG2{^rZlOF+,e
=5S"%s{;Wd:sicB)(:nVAZd֒[}QwY¾nYEDBòf6M\%~n4Q*U{<3]4D!qG]}=n1LERv*y +GmF~|K! +|>E,,u>RLQa")R}Ow[YTH]ħJOc$cݎZϓ+qSHtcV8ȿ$4lm +endstream +endobj +1302 0 obj << +/Type /FontDescriptor +/FontName /RKGDEA+CMR5 +/Flags 4 +/FontBBox [-10 -250 1304 750] +/Ascent 694 +/CapHeight 680 +/Descent -194 +/ItalicAngle 0 +/StemV 89 +/XHeight 431 +/CharSet (/eight/five/four/nine/one/seven/six/three/two/zero) +/FontFile 1301 0 R +>> endobj +1303 0 obj << +/Length1 1640 +/Length2 8818 +/Length3 0 +/Length 9886 +/Filter /FlateDecode +>> +stream +xڍP6,- %!
KHwK²tw#- HHH# JtI %! !}3;;{O=<sg^K[fVA|<@q + +Cl +vnP'XEO +"b +'> ])!yˎL[CJ2"S!Gf`_H
rDFHd#*5!UOwm=p{K>`[YDS}DE,7G)M,vnx>V{Mn*l{¥ +lg2n6bEipm3g~oxO[Of+= -J*s(VwOCoHVu$w~Yh4sM9&>#STS8qJM.g_{tQ0QӠ=`T}4d>l}t5eoSC݂yLD%>aU9յ>S0hIuG[.TȝH=R-2խƏܻ +JX ./J4u3u94?.=;}@7A}@.z1bE!]
Xx8g}mw1m:{rm kW"ysַJfĵJgO^ޤD%kP^9<PLp+(o9=`"'toS`t`G3r!M'ʕLO&ZG|\>UkF{t:(m`h@T}ޝL?.weB+~YY/5Bq빕g#X!ʦh0G"˜+u +E)ʼn~0F.aWz1*yJ?e4)nN1duEa
cKT}~7wY(gnTYQy yjQzf6_iT0<ɧ)ᒉoFl,)Mqɒӭ*hŅ:jWܨgNmgϖ>bk.]_;~N\Hέ[%0a7c^aFGe3ZHU_x&+u)OscV +Qeu9c?&YUy6fkvIwW5{NX,Z~mguJ0<GM'ZTdc-,#-
"A\FE(\GR˨F~kE<t[Bg:*n\=0{sKYþPscM67ձc!;9:\)*Woa2im"MwONX +Xtq726gҾfm3"5W%ݼa^ZY%qPSY/4xMh#E]NCg*VtT1=1Sݍr1ǴbQBPlmw䀤'js{Q+@FǠlg_?+4Fޟ{ҸAhM*p@ѠΟJAU.'8jUJC4/3Q,פzKR8Uwcp&J%E*gֵb-k +>Ts>|7J)]"ui>ǭ{H8LG|4_{Nlcl]hSٰ/n'6bɡr犯ȕDu`.CPGe̐k=:S5 +Wp +A{+fQ<:SXDv1TΒt?-_%dTPd6aڧg`kS0͔,ONf{f +TGT\/q#pΒ&lXp@TQٗG }YI^_|ӼxeuT@R53!WbS'i0jtYjlҳU.ۉ>ȫ[Zy qtO>j**NA+t^ob}D!s{Zcs6A>PݠO`ry9~C-La5hZoEcR5$uچB-y vE۳ +\'+
:/7Z[rު_^pͽL$b~`UØ>e,OrByN
/&تzٸrJ5Cqw$|ouH{Ts9wUg-]x% +ow~\Iy"Sx)q6"毞3 +VMm{g[aiķ9
#(=3ۮ[|Q<&; ɂ^ful"+}xTkD+Vf836<om<adؔ6^R̀i]15k"؛"L|@QDϰ5q{~Ʃi'%^eZrraW0Y{@DoS$\upyI=܉ʥTZ kql>EKtb1mZ5udU2;tn|]o*C{B) +VaWafO}uFʦU䫳H +@ޟ".Ot +k}N1gi{4+T!x&$<|}:IVD+ѝR)2OLpmDoa"OTjV0zIeZhbWA9
A^\+|_b-?$W Z! am[J:LbDmAR]>K9W[>#;*.>b.Hwĵ':'cS +<^=
*Dv +el +Zts,[~[/ sTcIyRPoD3~ܭ;_MuY`*I +3pcQ%nhs-ɥ>GUE'j*ȎŭSfdW
G0[*/I
Â?ted8kT'Nҫ[!4D +C&^ s~J)X]*]8R`oh/њt&)_6 +=`DnWOkjQX<]] *odzؕ +cYc+i{Bƨⶶh[<F&<,G>JoydQ$/ %gpp +(P*wѸ0.,*)X1aWFo $p$NtnU }''{>x[lvALxXZE;ը?}=1wӛʠ]?cf Lq\T}Fi_3:BnYʘ}gK^ˎXU9V(+H6^q3mi7QD)B'<pO,1&'_Xn.]Q@+;w6Jȉdv)՝n81ٕS.2+a":G&=B@aK?Deo0u&;#BIɡZldq0p}Y>6yTlq([nvMbTKاOsy-,,by# ʃ<+BuLsįC +Z*/c\r\g̙qV,罹YYjN!Gc۸;&O +2/;v4HStkX +/zM6}+Q{I\~TZQ"^Df$ZϳS:Xg5N'K#͆Q;p`r4IU`d1K2Frިr=6ol@{TQ=s8i; +lcXT(aOT49RTФgWU]fmyޮS[ +j\OEl(sۊ!̩ެ%t#}Peij|=ItLU4bmcD{'u(ۏu?Xi8Gɷ[OS53;){ +J%vIf~"πwՏu)ʍ>gi,lhBJU$rɴյT1;Yi7~!9}O8~ؚTc:x Wbq 艙Lu"J@ ~QE(jYʖgp6/6M{ȁCCg\E.efE
<T/]E6 +nڎP9J47>SGIjҖy4mWN27p +cpP;sWnҕܜbhc*f(Mî~dg{Y]u¾ ۊRCeGxԨĝTUﮗ <m~Z<A%B8XkܢİãCBDo}3\},ڒvN5o5rHpjZ:}s!plN1@hT$nIXDUg)-z.cCW%kk(u7 }q'77:kmG +2w}&0jO`+') cIFȏ@vƞs_r /UTLj- +endstream +endobj +1304 0 obj << +/Type /FontDescriptor +/FontName /RRSQIK+CMR6 +/Flags 4 +/FontBBox [-20 -250 1193 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 83 +/XHeight 431 +/CharSet (/A/S/e/eight/five/four/n/nine/o/one/period/seven/six/t/three/two/zero) +/FontFile 1303 0 R +>> endobj +1305 0 obj << +/Length1 1530 +/Length2 7551 +/Length3 0 +/Length 8572 +/Filter /FlateDecode +>> +stream +xڍT6N(1F)n1AJAJIEPZB$_|9s_w<<r ++;h0D,T7b"`( Z1>4J?8A}ahPB$e!R`0PW #T#"@4 +UE{an])?@e$AQ@}aosDH4U_u}37] CL4sC]|8x"`p6 +B\.O8PCO7WE9zP(
8lbAx <3.=du*|} + +k@92G!jG`!1W/PKɀpo <],
cB{]a8}1~t@/ @]]7A +.?jEQ.h_g/kqh@,a U/~4<=x~?^(b?_D裱sPK_CwF!N2CDh F__`{"Pp#3`oRC;9Q I $!p:A})@,0}@o菅-? +@0 +fq~_4OFZ쮕Otx!<R&:vwWv[$vu4F%M4|:}|IL;-lLtdc'NW~yyqU~dJղGøvN/fx`ܚY5y86c#mZa}광M@a=J&rilu$"^ʻ),Rsh6K#=l͛0W*!=E.8
ΐ5|PrV´eUڤ|J/kZt4271?+rɥ&5I(q!᭙{&YG(`i}6k__LkW}@\irTnXT?Nw68}KbFtg@4_/ąލ)LVjޝ艹=d%.,(# +Ty>H@nI 8D@>Ga$>|:] +<emtYǏl7%vMGMCF#D*nuLklAzWHۨ{Q~Tn}J[K|Y)>d7Z$fX_p:ӏwZ;Qm5ůk[v傦ܼllH|HIȔI @cq'&S=n}VS-pWH}u34O̼ޡP
):dzkzY]);MQ}uw$C
ՓiRPh1pz)3:a~]'fշZһKy{1uժTO}por#NMsMiV)"DXl]سZu?CKlpavO3߶'ݱޓ]+!){FCˀ0:gɔd:}2",0]zWsh3whw*o/CķǶ0dCPuxAql}$/]_i0qq|ڈ'#=*3^^:'Lg8iVe'πÕy 2Vc@x&9v{x{6e-O;P6sfO
GelTd؍R0{Y_^h8Wmm:<Jա{쭱I$˘r/)Hu)F8M7NodhT;Y)gj$JXQ%Y*Lfx(-.Nb\ap*.X+j+8+ߤ|ݚ<@3ts#
zTn~;CYTCnN.x@CPxOoP +=8e&yhiP<z('< +ob$|VPؑhaȖxirn=QZ=ڝR-!/IV!vHuhN3 + ?V`;UcW4rE>H{pV-ŸD$#)mid;+wM kEGz%%t0ԍuDԼ@|~W~+ +nƒ_E2/|p;Ppb5"
^,T``"շ(gYTNe4~ +P<Nt]9mG{&~ODc_WhޚӷHgMUD&HwƑ +]9{riOZLMkD'=)(Ծy;qqp4h?TFQ8UͨȭWnC@gVθ4>GdDzMʂ %,ڟg.F#+_NU<y6ӵһ)`V%8T~[!mqrutp/|mP[ֳQݺ|rQ +#)xs~pS@IBp(aSB^uta'ՐڌXo'L8قs;wl^XSgI{>*:RJ7ABk]BUފtZ~O#?OL>;KHZ)/Wh}?Q{Sx7ro^YVAf`H6w$>Ko,=M^1F
ohOK%Q&p֓FY qlVPFuT,t}xnCԤ98@߱mJh\t.9~x{ߵmHHFQ!b-=U[ė 5Ё0vVƅs
2UρL%q>UvDaHԄKv +#cԘ;!Str|ۂM?1eI2mIʆsH^sf3$'sAQvͩ҃ۗmlozʋFPʊAfDWf'rN`r-_{Z3<z7*T:PXM1Ym~@R=ny2DTl@2%W [<=iˁT^
INQ6ܦ,S-<fN톿+Y,z^R,ury|OThO{eL Hh¼ +<a]_b,B8֦Pnק</d|,b߲mVs"s^dǮFϊB];JhP]-@u$sṚ]Θ3"9qX;zG6Cl[y?Uhxa*?oG1!6}/ 3iM,fpMt08z$ʃ1gRhRxժScxNL\Fx,3V3IރQ-bE{ŏ`Y[:@:e-BƄn·"ITN*+e1=^f% +}mi-D}Yь1[?n}rS(}AŤ!T|TY.Ua'dr%2`*үoRki &ۄ[>T 7 ш+3KX +^H7V +/07bfV5`N)`
ҫMI,:ZC:F^(-*Ʈ.@6ps@7VF`ӽk~^mJ~rNB7a^/G+,9:sGS3UaHV֨}0LI]O5SBqə/Gp_v͕y8D~ǯ=]\IN_Pd?mtփxaӐ~a*^ugǧ9r/_w_ssS(d&%xξ$pvBy$Oa>Oƶlh+=>׀YQ>Nm~(I ~՛}9!
!N,EޡgOG]`AFTt!+3.vXwgRD7sJm[3`|u?v1UʇYe'j|BGW~jaC;EՇs<BBAFF$Ԅ +
LjښGb9zV3w@\Ϸ%cwGvp$xkǎl5=@wsH_jII/8h/\gY0j@^/Gcf<:\МàܧYZ- 9,GK9g'9k;f+8B;ڒ\Te}r#H$-2,X)=3Wqbv]7`~zKg}ԃ4UBYΪ;}Xr>McI-1^ <fAG(E4VEh2̬<`5GfǷR8)2ӟof$kiKucʙm@iV8uPiZdsL @ +u4XG}Cp3~7U)fq d({pH\T?[Gs1P9!WU2[bm)^e>
.Jj1r6g up\T<5.2oS4-ɼnB.8jJ߄sN̥쎿8YM ת1u˶7]VC~~FfuSn? +R6=Z(>^j +Vg&hQ,4s|(_NgMzrOuQecBSG) +Yng13^$g + ds9UgvepP +L&gI<QCR8?9}'0NL0 +qiΝPwR|DϮS34q%i,t;7vB)h"^o(~$XwKȓm671;tp5d jF~1Rf ],xypOB)P%P7 +{n-
]nP|srρPнah +;2cR=+7:/ ~DTtŬ_5`Vg1U,!x}lT{7!~=DKmuhM/٢;9)R3Jw#uG~5P}wj}>4N&kWؐVY`|۵ض] +㎕mezt}mHy]QB@ͼ#iIpȠQ Z=:^ % +BOzjuQY㘊s*d#e\Q +endstream +endobj +1306 0 obj << +/Type /FontDescriptor +/FontName /VMLIHR+CMR7 +/Flags 4 +/FontBBox [-27 -250 1122 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 79 +/XHeight 431 +/CharSet (/A/eight/five/four/nine/one/seven/six/three/two) +/FontFile 1305 0 R +>> endobj +1307 0 obj << +/Length1 2359 +/Length2 17629 +/Length3 0 +/Length 19005 +/Filter /FlateDecode +>> +stream +xڌpk +ǚXN:mۜ8tl;{&m۶}UTWu?µ&%TP41 +ho P14:-= %
t +@/3c3h##` +4R0s44 +2pr +4[1n^JׅvwwtJZEV'DDtu;.mQ[%W:xgXf ̾c^|X<Z=W;O5?Fv)l;'D\qޒ呠]ŽJ6O/%S~?gHs2fiaP/\fnQ bN"<47gWT:I5oQG&<>{ۏ$bnZ%0ZP)=^钑sQ`cуKG7IY$bɸXZwbo4p3{dA6ƽإ웑\PZG!,ܣy2Tu̻r] c?Cbޒ[k5V^a9]&4RA`
9o'S6SP\pmPZv7ilḮ0 ++XҶ["M%z8Hg}>VRfnr%q(HĎx~
]3}d]Cv}f%חJuXH|Y"Rq4S&BN c䙘9b̠ +[GαbiO%(߁!gmGGj~[q
=A3<A<0`VE#IxqH^F:c_GYf(xɆ)0MX2Dlݎ""${]Exɣj&%Q7: +نKrrw݈} W8~ZO(9i<VwR;-qM
yZiG6M3ĸ/&D=KAW*NF(lء 2h ⤉E@m$THnLM6ZAbQKY}YR."ڤ_1ZU?bhpҘ)!s.T䠻ժ)yEWR b`jrlrIY:]
Ax16k|mMpmؒˇɤ6/QWJ&I"-IøLRמ0?fOӏ7,8jЯn8(E4._c2揖(yx
o8n*O
Qz/L,ElSEqP3i +4`mċL@zUqaݚ`\w.1NT٩ȃ@i=LAMȎF%ڔd4Ny;
~ h֛\G +}0Ӱv+7_ʷeώ-窖[T0m9
H;WĘһQΣЏW{ %Yr&Re",;ioʪ}SBhB&CrFwff\YlDnbjjyP=**ڬ2JX.-N\HG&7vqYE#3g껺)PS] EO@аj
XS[nڣ4lCsPS[=3>fr +8o&/W۠-"kX,V>7fVs0dq=hԼ `)Gk{S`$}9W+CqIXa֚e )ol90$Y^=infaB9JebtBKd$X8
ST3JDvCSR/nw>}5 ҡTD775Cu,OӎY:}B
`Z!!˾ҌyK.廖y?Lx3h5iM})K3;Ncܲ/&"--.9-xtN
T:(:MVњU͙zYn +.9wEO&%,CfElx1kS1t4֝8N_nggLv;\7=[!7KJ$E@"<V!^epQkok@;f7l$u5of
"W
MU!v(a]7-N$(7+bQ)5w@u^fYGty>8MU
ضϣ6N"v YVMDEv$\JX'cLnɷD\eixY>8U^¹NC8XD]ާ*ߣgL/g`-aϺg_!T+\gR#JL?fĐfR%0<?.4ݠ&"em:<v +0O
r#
N[w_Tnabx@tj)?Ij".cvNN,@|Y,/+Kƭ5pv=sj!q#~ARCHH-yBPZ5 +Lhj֚&
B"s<Y* +TsɔypX2#`jѺ$jF}9aW{G_~-I3;<
;Ժƾ +}P b\#18Z7"铍<4v|s&T8Dwk[ Dw1c}|`_/\J +'!1>".WlJ`dĀL]B0'lWr98>.ԣý{3A%KUӤW[_ѵMLoBhyAC؈+>Wkh)v&P9hEyf{>iԃK(N^Yg- "x3aBWØ8Y.*y~ij)iv(G+gOI3ܸVxƨ`O
,G,*U + +ج.]:Nдq Wݷݴ*c`[KTMR.X +q^U[zʷ=TP4 +T,zӣ~nht +OfX/8_r,&rX|l/:grK,WkW߆I +E_e˛G ^vIN+VR9PKv`#0)jOt}Dޗ|rg6e7/vK +ΛMz5Xd?98CKD'pj`EFb;3k]=|HZD80rLJϗ-sbdvtu[]B^]R-8<L,Bu|S@-⦵(G3uHdt&`3vϺ?co#a~{S\Uw\͖u+)30hi/)X(6잎-鉲QMq{r+xކ
AsD_Mꤻ߯(ۈfF5J(!rV9+}]-aYA$n72|IN\FK7TYѯIrۛ!W]xˉ)jszARλΕ+$ʽ4)?1G/b2'UѠ[ij'1]g&E%FZl:Gn"ޝH +Hm7`\8>},r?M@~w[dӠl./%BߙU$*V[Ar~5ۻ_TaՕO.Kkw)ؠj"b۴R? ~E?cW")Yq̨;t7h/2B)*09]Nlx
yXuc %o`[C>a_ZsV.C\XF\#i(%K!6cm}8E>KV8IL~5q[L :U~=bOڣ'}_^/zdD6zb:4 u+o
zD>cxz +Vx
gk"Wcra_PHw눬E2`ezބlq>6a,(D|%LU
=njYǕ-̾=B7/xſch;~8L9@ +␢)HFlxҭYTB$VFM@V 0N4_M#IL}]RsY#6^(bX'W +J5I/,eڙ,Kve'j.3l2<;0|LOj|`}rtf-K_!\SZ
g~ᙱ5%McȻSKіxk'UӴ͑\ W^e˓mT: +)Wfj2) +(`/gVbO3b%Ա]o=*9:3]&B$^*a:^ +1#SӔ Y|*CA\V 5(z8bB6_iQӜ3<#>h y=[F*T8+Y-!fؽx$LG2F/dA +|z1.(?DF +/"x
oT2.>.Ԝ>M:=P?D_JMBCg[Y@;vNjf<rkmwmkfnAQֻFiMVͫsZ#HrgHz`j$`="leJM{LX0 +r C6NU8gYF039~]2A-o0-JNŬrӤ҉`<Ռm7FַBciwNRԣUn)24ICb32ݣi7>I}<h9Ǭl\h$)%8VےoFq-Fzf̀ǭ>QX8"n9OOL +/?t_0Y:VX't;6缥P33jEĆ>WR41M+OnHuN+6YAa_Sw֔V7~]lQm)YE}╏7#iѣ]SRi?1nmzߩZrBK *O+xaQ\@ۋ;ɓoSQ=WIbfP>)ۼ +{2)0 O$:ר
zX$DӓV47wDɀM5
9#2ōs=;3SVjw?!B/-P8KƔEXjl6@UHMΧ|jԖ$2g!ܟhgweVAdioϸ-88"_Z4D744UbKT
d!DH>9_q4jhJ{鳚$>LYq#d#>=3h}k*.̾]cqHi4IE`rF-d|88
co,%Ҹ:C
}ﬠE
@_76{h%,RЭf| +mHX|H4a'JtImp0M/:0k
#gGI?[?GGZDEtN\Cff[.10E;%la?6Cw]ů?NP)'Qa_k_UB"MHLCVR< Rb +m]Mx;e[,NӃMIbq@Z6O_[|ԀqVu+=pV V'jr#jF;^Z-P<eצ;] Zm, +V8/)aj@9.Iܬvpta3Ze}yomP<70!DQ/ 44RGrRJk_7 +0]#GGƕү<R/o +b(_ezgXĈ Jc̕#kֆhOT#ӄY8ø`I4~M*P{1]p'=0Nm3`DJ4zaѱY+kM;w_Ha0yڵk/Mymϋ/eIHm'iwEBvU
a +VS(#&ڈPN3Z
Yt$<adl*D7voD%7_Cey ]rMںhd4SÆ]/m? +y)Y=T'm +
BDˌy[THCH\|]]-I^_GIDd":?vWQw).@GÂ1oUwl3s(-9O7}GNzS*ᦷQ7H;49ы6˙y+7gWm,1Kګ@q\I& TsGqt yx ?Gdnx>/,r}0@.lOIT^N+g=F#Cʓfca |x\W')-7
RXfXPTED5wX+4^qq!}ɖݙ!>C +.`&b·zp>mԲ&ܹU"\j%^foe ZQU&`͘@x⫷ +uN?%̽'ãr[9 ~r𓌪/08m{F +as~)"J< t>09i;h9*n|s[
Ȭ|-XG] %K*I2Rk恹6w\ᖋOrNzLµ2vmc+t;H}O.zN%,m(8*༰'-h1UykiCx.YGJzskҜ@l*mAR*vKǑ<rPUiUy1%,JE3 - +6ׂ]&ҕЮ"n +%Pݻvw;@p[E7=CAp:v9m&]ݫى;YwAJeY{K{Gyp*/"}h~E
49G@9MzDX0ҐSU89&%d)C,kJ,Tr#('}VeI>On7m/lM:cxC;zr[''qϑ1PC!-\5=iAlRG/=ReTrJP#. +}aWm?
+֕.E%/ѹlZwIɧGp~N#zw-~S"}Uq
zehAŦ1zdDqtqL^iGL<;Wwг.3CYU>_ҏG%FC@ _:W2M>UI, +0%[fv(wLU!?o5w[E>;hׁY*ks+6W$ap83dT6,NL@OM +{*-_,NA,ӳx|Ǯ/S^N+La+
y1l S\tA*j;nA9% +-(G?3Cf(J iJsqyaUI|F",a&SK[פnmwݏR7eYT³Gq~̀$ܽ@N0%g}OrKI7Wd +C{Wb +(]mK:T{TԎ'9cLҟoˬdu>.+53݃} ݢ\G/(l-dH<W>It76A>nb SƓҟ-BgyHp]?@]%8[ʫXd,AXјKw˝
mº=hH*>7ҝ6Uz>|NN
etB8ě` B +~jS]%UԄnbh@p0qa]jjsU"30ˤy\Hfo:CU05
Kk|s Ǘ%W!Yh
M^[oobb4[rzuE1ݿFM_O+pLCSz7ʼnZJ!6ԜQb??aJy%\zudIhD<h5F`HW
tJ?р +ȚZ_+
-UG0*IzN
p]UXaoXЫ^UTYe2J'=<
NX)llT<Tfatl^ ~bC]Am*|FÁ1j<_)?~a92"m]]ǏS|˃.
>5-.Pg✲#'JQ,Uq@kEH0o]NM -Mᱻ}v7@fYPSެwN#k_\wMO<HɺZqVS/9rRBlc:Ԧn$kvUyL"fM
`UdUd|@P"6Ԩbbde,OA/$ɖHQ:k}aն Vl&-Ϝ/{_g~Gl鉡R)*adpD9f.9#U˚Y2(̹[(i)uekx^2^dBk[LsqU46)ih[JiO<DBgFR7^c{_L{GxM;trGbʗ +m1W럌hfn˟\g+ρDgwp*w?h]
\`OH)g%N8C h%|TzCPPlLDewgG^.uξ|N?ϩͱ=uy8 +j}_)Y IЌCayX$R.$u,aͳXBbL YS(k; + #E+Bfhdv V9CÚiYL96GJH
+o.l,OfpvTQ/7ַwƴ*N(z>eTl&!O*hmj3Hy.PS6?sv]ȯ&XJ-l(J6>% pfBZFue|wH.+gspQNs@Z;b?K;y5Q"zTWJю +cQ690_[ډgAk]6$B1 i˞ +qQ'K3&x䦤cfOM9ІU+Y(>S~%.c4b$ŕRэC=NbݑCUf2ŝJ7G3?tql8?``6Nw)<{PeU +ar~Ok~47=$+Bߣ1n9+aFTU +DHp*n^E`f[lj5r74RyS˷)GN2SQ@]VoT`_(KN>DBcuOб"cUmlv3{8(_x>R":zVl7~HBSIm!idY!FL#P^(K_Z\*D'WXziWfxMubWON:1uj&BNk)YA:
T|84?z.ꟹ?qQ[<D&(ڗ[NbI3"m<jE|6H@ +k9aِ =.GZ_B0T +@`Z\"rR(9_HTɠg5+A:لvwE + J +,ޜMWtv-t?q|~=QK23X7k$?uDI(@"A5y]92H*,hxԸoVBNK!ڤvb5ҹQvY=@&{%p +endstream +endobj +1308 0 obj << +/Type /FontDescriptor +/FontName /KEEURS+CMR8 +/Flags 4 +/FontBBox [-36 -250 1070 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 76 +/XHeight 431 +/CharSet (/A/B/C/E/F/H/I/K/L/M/O/P/S/T/U/W/X/a/at/b/c/colon/comma/d/e/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quoteleft/quoteright/r/s/semicolon/slash/t/three/two/u/v/w/x/y/zero) +/FontFile 1307 0 R +>> endobj +1309 0 obj << +/Length1 2478 +/Length2 19463 +/Length3 0 +/Length 20896 +/Filter /FlateDecode +>> +stream +xڌP] +4;ww8%wwwHp'@ ̽WWT^{oȔEMRnL,| +L +@skw}fQKHv+[Y@(Pkt[3J\AKt0s4}sl\ +:Ns_{
`frpt + +2S9%W/++?iAoWf7+࿆b_!y*FAA3S(T2sw
oh'!-;4u>։z2L.Ph}e]srN[C4}m$ͽ:Y{lT'gdչYᙒ3!bx"FuCg?`[vYgw"GAiơɈZ.9yx8EB%<r7Fb8:k/3o쥾l ?|>SCcLQgVnz#3dn21eZ:{LucWb+avbճ-Ķ:hYd7R=zKd=J.?ñ{z}yOpd!>1eY_n{C9`ӀLkt`d5z\v4NXjjl.s4dɍa;d"0>8PB;&]_Ǻ?laS`g9&!^a^a krE&u\bQ +LƥxMmѹ꾤Pv-zaF3yF/b++?] pɉPe=p}CaA)DsII,Mw@n^ +ʰ-O=aUb4saEMG3}=l{ +~7_Pic6E0crhay9?ziŕ8xtEQyv +?@37連RxY3^wpܭ*~tͧ-o,:#x,UQuQws@qC,@=55|۞K)4uڕ\bA.jf +[-ia$w'rq nMn_KfD^e:ĩJ횙Fyg|(kQf'ܞPm_%*$|t!qL8Eΰ]tel XK`/#Ng -_3_ӻy=}Vߓ+i!͗9d_VU| +~ +wl]靇*ch$D#Z?-aeT|8տIUyj#5h;)÷M*o>5C-7xڡ+llfĥ?
kwzRgji}s+浀|y%GlOw?BƤ+n%s= +Hw=zHu
h.ȵ"jCuFn%ٍqab V';cjV8C_.i'itqu{4bcEB9`[vNڑv;17RӮ~\%Wp7fX( +kaRmBm7Xz"@ YZJ!ۺ0C?DGTeTl;`[C9N_0IU/DQZEDΏ-O[e5ҡ,}\8:9H'2ԼaEB?X'Iƴj3g
5F_{/X:\+Rae}fPYIۨ_uH[+-ȲR}[%iv}Bl U>増9]*t<Tgn+x{Qmq9i388gf=4qSe)$Z8Xji$Kdf%QTMýM鮣[ψ3hPRBO˦_wayD[I#ȳ<}vQNdZ3`Lq +$[wIw5sپ42hI3uU|"_Jhǒ2*PG״fyjl؝ +M U~vZ52[UYpq6MZkxQVQK+iV'w\Z
lcL5:m${r2w%,ӖT`u_j3A~䓌$\&4.Z")9e"OPэ!I +i@ 1hf#ؕ$l%ل1X+3SF3p&5ޙ4]gS6"0%(r3>kn|3K# FLvڏ%;?~':DOs"Yjي}*5(t
!rg!nT%ԣ0jnsRRQ'M/$[!Жs?q~*I9p/mk$hZmtJz|/X_4ʊ.(Q59#Zyq[|Z뱓r>r{_vJ<u=Kt N +h&04^*,1xgPob#8
<MnjxCb^|&{pԙF4oيP->CpBz;IŴ}Ey' A;?tyvxEIJETW.z_>Ty8:uG=54D=99^tF'tJd^^j-=Vu!t3 dzfzIw(,U,z^Ms~sJ[?"%RdqE$KV +]/VӊYPx?AR/ZjAoHꑪzBb/ҖR cqg@ĕUܞH8Ox ryLR戞/?yj'K)2`.iLey/NK0ރMų9)$G8=4btZO&˯x ڄz*ݯ\-koY]hg<c*ѡJot*J4U(Ne?W9siXTO?O(U|f>;hu&A>@ŕ]q%@YzϸkZSܞqPJ+QJ 9E5ES'+cV3&[?7#' ѳ$*AsJmku$nVfE(<]jH^4Wvp
N6¨؟[w`6`~nauwH Qɻ +F_mm>dN=-I~ޭǎz?Ñ`wP?{xۗշqatiE|nFRW~#JxM*Q%9HN<<"!ٔEBG^t.9hbcý#ClgED0Zm؉yG;AVGw_bWeVexk<jud۾"k[]`七uϠ[p{@UdlMׯDC:1C:\a3$q%jghEy9iŇ7<?rv-r+%lȧѽwȨ7<R!{߅QSwsaöQ?
'ك"ez#Ts堝ߜ8JT`wLtKrT{so<m$yĽ=|%5GwUп]}Ŝu
lӛ-^u]b.[wMr68T768!@z`T|}!#{+}Q[f:U0~k +QrZCdel6A#6e0$E/ +=Weɒj F!&y6T~+ +* HgyO,߿POhfF|х┧0t)B6h&S`W}ݪRڐ+/#NEJ{|9t~|fZHgi@àGSpSiG;6ļ{ۺ7"&De +6v
kTZ6Y2͕i%95(V*c2tb0ξ줵G70|^)ݸPbX.
Q Zj`&ma-(D.^+#sE$r:ϟ+
V \>&|_G_DV/$?!rX5.{S89 7(J%\AٿaN^|*NL+s$Ę:فNȤZ4Cͩո : hP1fh~[Kvh5+}x{}mdڂql/r7i\T_iKdxB6]'n'S@NcxiV&BW{'{{y}ǃ>%V#6 zbIA,/DfQ6>Fǖv3i[:T]EJHcXbOsԭq4Wh#[*ܴ;?>z]eUpX5i;-9C="(r'TYXф@\^C>e#f<Tb +^td)F6`wLg&M[^V)+Ebi2Jig:V*w8(Yѝ*\pkto8Uxr٫Ku[7B$q.˙|Tw(~ٮ"E(GyapFM"9"UH̡|:%L]dx!i d3 +2ZWq*zޘsV1k0mmDf_MqSPOtej%KA\EM@]bWO?M6=-;pic</};ʌFVz݆zN4,=6SxL
7v/dv!RX40Vg2qM78$)
kдyvkplpa6ּ}GR>,$8$F,ť9UFi|Lڥd +*ZaUCZxO[1U<sȨ@;oҦaen}h]nky-iXH.+l+pc{^֚?E!: +~ѷXRDA4}p}]R0Cq1220\aA2A®~=VA+\yrNx?fgv3h8 歨fBisw^?'{هժŢ$\4HDpoi!SN>e8hޒ +Lc:C(a/]|ٍߜ)bejT"}Q,$g<S48ȅ5^DViWT),UyEm0yX^.LPc#dAu:K`",S[VwtajB_)%TushyU,^}LFWl|$0x(/8moO8(Xh<ϷNYlJc+Ѭo;beZ.OOA~8Cl+韯"]U9X!K<UZ~$Bz=zshяjvUWѳ=q0IqO7Iu}׀]*ZxR +ú8[LoB\)e!G~`#,ƺmKx,+5rDR8+p:wgSR4Ӿhh
W((6$.eG}L&o+\W]V*$IGKRB!x]7i4Pt"V R3lPG[һuя2XV-EfP0Dg_J+K0XwX ye|SI6JAP
UcZ/ ͪ<hҞ|b!G+!')M$[q1~[+jf#(JRGI֜܄!y'Zj& !OjU L ??1GPx^[9|-.[\@팯 +u<pS !^(k
)!_bPV,ZI2Ъ8ź,U~*fwQ
Zr^i^IN;.0!iW +Txo'C0[ +[x<yl%N RKRmPz^.N4Zg@){SWj)U +9W҈-=AѩF<]w\ 'VhmÃ@]FU"c|\?^C[?۲+s-'[bw4a,h5ҳt-}>K:KX +eb7&V#e+/.,>z.;4<] ~Y轤6bm<gF" +~6c4]_qݍ.n!6wp
W-DmYxHȥƁsm% +N^E%[֛fՒi}zcW~D&PX<T%훥$a߁sb!Fm`}Oʑ_rηM2#!W\nf>8E|d O!woa%[DH~t]z7wo}#JьK8|W:/r &/c_ukZP0RU#n@f^O̓]Qq3t@!F"}Fi~߀@:}ԑ99D4n/D҆#vADUfF2h +ÜēgRm]2x~f9a3EFM6uPM<{cjf:_[? +-2?i2VRF41KC?6h?t8N}C scq( +^Z5waA;`J +PZ# xJM*[H}'2E8A%3g
+Ƙ6ޞ_y{w;݁T'ef.4xwh.fze](&m~@X=O(jܗOxR0c
tyJ-SDl:5;!l+@N/$mQ[ȇ0Ug^ڎ(|ϭauMM9yΒ.NBѽ(8\2Fw1"Kvl -
,.>ݰ! '`(3~d]Nx"%ȓb?N3YdXqT[CFP`{f*b
)Fٕ3^^ +558+ݶMHN\KaW +,B+FV#o(Fo}nauN'F<!YMq mxAt nnF*xgZ1{])cN8}tm£\R'XR>h)ilDJ*T'#fQ{tu0IBC0#%xH&0|ҾE(#,[r+ߊn)tX͉a{ };%05B|yy,FccTcZIEPz7߾מVA>-tO3F6;z 2+l3.Utc(e9
u|]bO.tɣk)O8^"^UQS5(L +J.v\9sڤ<1~@)7"ݩz͌89sV4g3 +[D]s@;$dYnA98!uE 1)tN-uIFT{v`_0Hq6GYo/HMJG +DT')uTJm
{Ӝ zPM3$6r<߉_Qz寑kLqEYʄ|q(G,G0Ct[
$"T"ST[J;kJ]8kT>dXrc;F*k4OGѳV +/&i(NM,"
\ѻKsUv_|%8C#)RnZ jTDnOe\eE7+gi<=?1|E{s)~%>Dt(@ֳ 6wO +t C9!}yZ%^<D"vGGm*a! oIcI-hM)h 64]' u =wO<<7-POHX(P!˨.{"Z])!-cVclg2K_D$=@k:Yv]sڰ6R]ۡkL5!B 9RY<6렇^rRˤZJ<w3]1"Bϋ@a}(48(LZji\(yقՕp/7F{rt&\zsӟL&T=א.v01O#MT*րI㟇"&?R_'yٯ?fU?0JzwME1? {927s/iYL8`["N<rL5iFmO{q^Nߺ,S6(MZ
|<Ec`",U٫(xSWttnx#Iٗ6mkU.G^>zi33W +IaHzf}@!UtV! +t|X(~qTrv'?e #s,V\!eǯaIv֞sn;b D%].n Ja|{>'{Gfs]^q5_;gƞ<=w3ut7*Fr>1vW{o|{_fQnOqovY1* rC74RYziz[.4zXa7qmJnX^u3mH>K~Hĭ''kZ8KcZG|xxaU,8n܄躛}c2y<Lxu +. +\RCWs5EYUI>t30%nr +u"Ё~.6|r<2:yy>譲qd'V07@a" +_mUbC +z/fNW_++!F/M_P/RypjN; [ Y|eaM𩩔ci/|wkk:*vMOEAuP_ +eeQ=:>Ht0b:źNXjAͺ] +MƠzW6+}f4Ӆ+C$]X08\K<xkԢbẽP8(C,Mmv(64>Aף*2iaP/)O'iۦGnJ4ݣ</~մ戬0zŘ12,AW"J|vx}@TYJRr1RSGHB3$gR/ wصCdVNJ72+{nbB'e +Wb}%T=a|᳙x~K'1(~e, +]KFL;b(ޯNfm] +YSU[H" +XDQn2UnWd@m.Ҡ
ЊB?_E SytW$G0;;۱z&Q`4g=cؠ"|==WX[L\{Z3Ps
цB3gQ!KW9F&fo\< dK +u9DhNnpv9m+JUcN#,EiVM<Zg̳kWUy'WG*ƅ*=X>nR`vmqx4f(5T"ƢGtNOK\6hE +V/ ă +cB394]x}CuL҃H-[Ri*}֫. UREɴu/Ǡ& v\u|mqi5mj|cmQ+I] +yEIR%qjG`2hGB= N3R;<+悂/GWun-,R`LUK)TS:*]nMr`UżRSA²ʄWvbhTWָٌb +iLHn~+ Y3\*d6[j+Wo\g~iyzH +ɬ9 =+î)\O> +rkxJl#z<"d@Hx;fi<FS̶@~K$kWƽJip4Rf@F3,|ڊVBn^='P}ϩL$4
^`ʼߝ-(gӀjI(ZX&"7;y\I#;͗Z`6]~AD~bq1_%RrN' N#l%>ԟ#V^.c.y~cn%j37Ļ(nK#[Cn5u`n0<_9.`û@I<aCHSW:-Bg 39zPtq<Q P6_ +R&# iڸ&>rr<D~xۀ~~p5Qͻ~UlU >ZwQ/{xr`&/Uh)&ؔå⬙^}r_x&o=@_B@u&t|a~bUˤ]|*'R{B=~VCoYòlhM4j1X+[wd[$_Yw_Kw}:JA~W\ptt+(i:to#cޞ~E!d*?0Ӭ[ڨ5 M/]STm["ֽ\6< R,a]ƜeS\$2Li$ 6aJ%bɻaa&_5wRd"h\%[)Lɟɝ˳SVuiEߗ]s @1<enX:~ڥuR0HlpDBƑbeq-!c| }]zޭOĻҙ;o쏹ìKdj%*(9?unakrg-K>QG>'%Iŋ"K8!JbK[=k3>.C ċ'gHh6Rr\g?^ +,+7T-i0VRwoZ}e F;{$zybC$dڙ3`O%6JǪ]}h#rS_jQȬ8E"6nyFREĮO=2brn|YJ{1Njϐ~Seʭ_<9`vЌ~#NgoqTDa ed +5ce$H}QXD˅B6mS;Rtd啟>Z#Fs_ +o;XH]2+gDžbPFJMW0e5K=I!Ǿݵc
EYv +ZDQVU՝vaGu$B~TܖPrCe%}܀YrUUDk[L
"u^Zȕߙ:W@VEeMb
/^,R.Tŷͧnp5N#L Ϗg +endstream +endobj +1310 0 obj << +/Type /FontDescriptor +/FontName /DQIRGC+CMR9 +/Flags 4 +/FontBBox [-39 -250 1036 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 74 +/XHeight 431 +/CharSet (/A/B/C/D/E/F/H/I/L/M/N/O/P/R/S/T/U/W/X/Y/a/b/c/colon/comma/d/e/eight/endash/equal/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/question/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) +/FontFile 1309 0 R +>> endobj +1311 0 obj << +/Length1 1541 +/Length2 6761 +/Length3 0 +/Length 7788 +/Filter /FlateDecode +>> +stream +xڍT}7HJ sin1ƆltwHw tH% %*;=;g}s]svk/o h~ +@a PCCP0$BnP0#S1@-$ QI$%"$J`@K +=`p@aLvP7 +E +{ap-` +sEP0/`ҬSD@hѯ)ܠLD}!Ѱsw4BCՔ`0"dP4@(!**@^G_]HW=f|P +f Θ݂ +UF@vFPHD +SpuCio_G) +#m1ن~mK;Q +szqQ+-zWtic&Aé +6vwF2t#&gx/Ƽ,^棱7v2!27)>'1٘s<~m&p3M-og_a?ş+t}4^Yy;П!|\[#ZAIGΒ7<HGތP9S,OKd+vXű[1]8О4(蠭|K'`ɽ)2+׳z|z+ ɝhG6;5^\& +viⱂ6|fV/.qqW$Y +@qCTx +/4}-;۶|A)D?ZIDEihЦPrj/kjhÝίIrq63~rqAVk4L85E&#J헒qH8%x0쮇2~Ns9\.g5*PeK;XiFT<ڭؗ/lO=H*{K栻 +4h)-g~_?qҺNĽpɪz7YW'~(
S#3<e{SRsGe6K+,X+5eNy+)9ёNY
Ҍu:ߦo˫]ZaWgy.dSة
8sA΅C~$2jEч5(8x0n^cE]@n/K54"U]x#KI3|l
FZ{)<absK C"d#hm +R$,z0Xԗr'Yk`oNf=s +͎XUl}Pԟd ?ϲT O*6okxZò*X=#*U|Y}9+DhJE|\oZ5kV4p:P){ˉzdaTuםhxWݘU9ajL1\7ZPb_҅yB-FX +n´ξBܫWg#|ޤˏ@vwr>0\Ç/HcłcyEeE~)BƧZ*VȰQ2ن5_Gc~
O=8\%ilLӱ:bM7ח.$Tp%;վ +|mOh}6.'>$N^m52&,o\Ҡ_4YUw.sI{}NN%-.(n($oqWպ l2(xmhJ(㱊gL⼄amܹh{6_q4IP{zw7BZ e S+uv^-휇
2eHrl86Q/]P:־i a}Lkk%ú γksr#ktCzaYDɐHgW9zgz +tݙ3X<Zw{>I)=_rsQ9]PГwGAQ贃mܸg?s) +fZ7j#j#y<T3|AXIUiDh{IFW]vʎ).,+f L 6b,C)
/2ڂR7U}[<CL'HKWUZ86u=&h]eWnP?[8+x1X`ނ6lHxdH:es61ʠYuΎ6d!eAB@݆c@GZӫ²s qZǖ$IQQx0'glH)0'ߌ.5L]Wg1,jFYnM4y*YUL[Z[&g3V+ VW +쵞Vưh +GOZ}^yKʕU=dN !`Fqd/x3η/{6 K]3}[Di5q=kPT.c{iRQ$+p< +Zrɰӗ߷M~$}%=f[cuw)J
B|ӏx+؊Y8ڎ#}N#+]tڵy53p؏EfI!̋;3Y: :߅zȼ2Gz*8L$mt\\Usl|Z2ռg,^F9k7@9^=N˄G
?3p^.`#NM[EsRյ~|m +OqRlީQ&q}ks]#b8
Fa5۳܁@~y%V-HU%&RG?OL1^?>06I5{7 Q9M'
2U.YZ]uiʠbfV@9qն,؝ + +_^]&ZЉJk +Wɓ&2^/z$^sJ^".߿dWjЀOKivpHjkV5_e
4a$<@zhpMCsƌoY0y{>K繏7`UJ6UDk~a\:|h +$5i3yW +endstream +endobj +1312 0 obj << +/Type /FontDescriptor +/FontName /PLXAMA+CMSY10 +/Flags 4 +/FontBBox [-29 -960 1116 775] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 40 +/XHeight 431 +/CharSet (/angbracketleft/angbracketright/bar/bullet/greaterequal/lessequal/minus) +/FontFile 1311 0 R +>> endobj +1313 0 obj << +/Length1 1395 +/Length2 6064 +/Length3 0 +/Length 7021 +/Filter /FlateDecode +>> +stream +xڍvT-ҫ4Pw ! PBEz& t)ҫR#(M"R|{s9ca%(Bb@,@YR +w!Ѹ +O$
k +AbH'#Wb|0B + *r?P8) +]8Y{";ܡt)\,jp +7@Dap% +o6BhLU&˄BTaS\2!R-UW̆)10tбƉfݗE 6oMֵԃFW={/e/k.~;ջKP^:훔YuξO-'!ړoHJ9A/Bɵr^hYߣaʡoPd)Pf>/n7؛f7 +`O+˴ miXlӆS]Zfi;<v\X rjL ሴ+<&G$7z1(PfՖ>w{?2-WNf3eϒ +?([Zh{nuOVg0?kV.\j9<G` + +'{)8l>q= +h*w-r2aLJw(- +7[*7TCx>i0a,<9҈hC<,"P`4A虵DǗDߟ]^</=utAajfK߷GFɳ'9
(Tkx2?qHyu+'GuvfWw2r\IkJR +۩?[\?+_f +E
kM\)yd=iŧh8vπ}s6CKudaN[d2=~g~<_\lɮͧhKnw&g^|K'<6s{^{k>rҰ\h-٩S)Z9{Ws1o]I5>dDL+axn_Ǘx9IsRnUm#=e=>I,H\^:6q>|2[68j"j?
_^D\W[]U[vyon0fQe/!{:sVg,>c +ܲQ Lç[oV9h.@iVyK5$KXBKY;VLgL>QJT>*BE~^c;,LR}{y~N]K"NIAլtwTk8*]KCB{ȸ監h.3l7' +#@r|K/4С1=vOy%\>
6Vu&o?H^DJj<EO8aukWSa=UֵEؤ&`i. +3e8mU*vs.na#u!5yXe2mM3a#Aq}
3/1`*Z)TB6'/֗x>~V;p5 +<zZ3OBӬ80(vFoKI"3R']Q$Tz>: +mQnϧMUF"krzma&b-|[%skV]59S!a}uIGU
d-F+bNv>KY +s&1ޯCnܫrZ̀ d|1=>5}UpRstPd{wkcNk$G[VY<ο|䍼tHXKQB0M?ؘb*:a\g)1"ȇj
QuJvyn#MS/+v_o{PHP?[VڦWY=Ţ;sB$gEco>_HHAgEyfqtVxדjL~LQ785K#E;U[RvLbVQՅ#7F'>g[':]v&<d:nMD=G2r+'
? +(pM4Tu[U%u:!'͙>.=Y`9i VuuS +v^Yq`ESɲ[fpތdžcdiu~?rgyNu=57?'817Bfa^Yk¿ŸľI9~8V40,tmU&1?!%3|G!q*})ܹrN
Ƚ[1ˌYJbCn9FjBssa|=i<+^믷:DNVf?InW0<v5 M~!hVκ2]w KwXy/:!BXloޙY[15Zq}P8Q
vlT=?ڏDa7:nQ *+ڒYI[Jb *CMvI+ᱛ:z&o]UUpsפ"{Ŷ +C-j1`UZָIsș&h1iJ +u@j.rB@A)9vVC^f/E8v86UqJ 6_ח> +endstream +endobj +1314 0 obj << +/Type /FontDescriptor +/FontName /QPLLIX+CMSY6 +/Flags 4 +/FontBBox [-4 -948 1329 786] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 52 +/XHeight 431 +/CharSet (/dagger) +/FontFile 1313 0 R +>> endobj +1315 0 obj << +/Length1 1396 +/Length2 6069 +/Length3 0 +/Length 7022 +/Filter /FlateDecode +>> +stream +xڍtTk.(0H4H +P@B(MBi" +W +,zxx\H[ +szJpkr%u?E +Agp篃
nm31US+m"fEED +bH \a8,~Uq@U\킢EJpE +*V.y+ڄmgbNG4Ks3P{<+w!CwfГՙ*xQ[pJ:*ou֜n:,zWy +:s,b;UO: +^m+Ka^ ]췭^]6x| +ɡN7]iK-$fGt@MGfTt x
86عFKO-HEgEKBQy PR}˸; 0 +F6LNui4*p TqS_Hߚ!,OTӭbwgtG$E70Y< +!<Ϗ؞,ܯN>&q/˅< dDSWHЮ+Zlg֔+?\:+rQ=Ȑ\eU6Zf]y6?%|˥C{H ~jϴAc!۶`WmqKBHM٣/F'}$Rdo"a(sܨ[E`\#C&-a3oִnZa8} 0>#hMٕH$ʑQ<*Zfg},h#;xcCS/wkK8u}*{nxܱ7V5Ƹo<*L\d~KtƓrnI\~Jo.rzi+5ʘ'yo+B8Fe2$#2ºgLװ+>U\@vvyYsH}ó;pi&gCyv*['dᑵ_]H58 +҅
+|Mv\*MFWOC /(3&Ȫ;=οo*]oc)Ea#!%0xJQzMԷs(w*T$NdIgEoS[
<{tyc_ +gkD>$d9Wfh~Zҁh?ӘHnn*51esz(k +kA@-_v55:>OC[<,)h+@,^.qý?~Zs9 Q<ƼmTY#DKCur#5X*<;zS!ړ'rkF}6]R.DkC}c Q^xpretD/Sca;X!byTҚNXfŃyODUC;=xezHB\$3E&(Pc@j3=%BB!ި]eio>=ylY-'hHhopꮖ +jk!u=^ю-'MCH`D0imm<rӶtf%jB P\6}їEkLZ]UTk6U:s!IYM0]wzYҟR=`'2"g=Uen!S +DW¾Q(^PX"ERĔK"}Y>_HIyQkcQ+TnĒߒ<Eá'fҠ:]Xt+툊oi
0 +\tNԕ:嶽';*5;~ux;EU%V} +,w666#.U*=;u\4yt<}e#dƵw.qo9?p8([Zu4[˨F(>g~.%HOvB_Brx] +endstream +endobj +1316 0 obj << +/Type /FontDescriptor +/FontName /QRYJNG+CMSY7 +/Flags 4 +/FontBBox [-15 -951 1251 782] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 49 +/XHeight 431 +/CharSet (/dagger) +/FontFile 1315 0 R +>> endobj +1317 0 obj << +/Length1 1433 +/Length2 6144 +/Length3 0 +/Length 7114 +/Filter /FlateDecode +>> +stream +xڍuTk6R ! +H""!~csZ߷y}1)Aл8O_Pkd. ?f +4SVCT..P8Y* c[wgOI*`C5U@0&?6{((&(%..*^`鍽]B?Wfż +b'ewJz*:<SVFx}D|Rbb@!!I1i>`'&sx#?#-CHJPL?fߤuwv +ֿ.( +N!2a/ZNj<Vd%f~s=[}M!`LYؔɰUgnB4Z._~=Ȉ^"I6CגEDZjejBj,>"aJC+mbǚ3~F5"I CZfk\b[hN,Ͽ+ bL駡LjDa+%1<s`_vZJ5ulA4w6eUlL&ԲN9l_Q'
%/ڙ'|jjt4lUD)K?M}U{O\C`xjQ]@N4Q1X;D[ЂށWstHYW7Cgz7 +R"+iTϽ~\rT'8VM}{_pE`^Cp +>zKr;p-eoݾcm@>/DOV1tZn9;w^,hX5K`E!1(U" YˠPycEOߙql$7LKA-8nmNs%E<nheq'bw&!W.#8B>شO
mY|77Txݜͤ姐~Ӟ;QrG[zX> +f}˞Efd1,4v?p{-qGUG3cߟUR{^YD^QH,uJ礹N☟gyUjp?'~+%r4aJY +强iM$KDAa-8ĿxvYx1aV5TJBֳJ.5x)뗆<ou2on鵉̀:8vĩgwSq4G$<ݦ<'}2z|L _e)ϒ1,1rv +u-~~R*CՎW>
w皙q}uf^~Kzǹ+/.\DJ%IuG2_cS=6a#2U3m"q||_=76-%*]k̥sEs5Z2wɄ5r#P;EE(8:H깏6@x>^J vf-1X"5{F|8)t ] 'CqQS@PL}@`*Rvu:ͦQDktLaM$'g֗RYa SV`+X +%GRm|5#rיRє-X-eYx'>a_yQl|V<=H}$%KspN. +t^ة:L/E%'%R^})|9ў]td ԌcV;WYRR19ku"z~Scݪ +V+b.SO
{QlL֤X,M r_I~ڐ7#yrT0'wBZNf
7mn\]S3\>up@>WԽ͕ܢIhG)|沙}w̹,*8
$]템lQ[Gr-W\&Jܣ|W evj4]ywӛz:Cp}'mUxy:aDb|eV27u%Oj[;rO3f +a\GփŶ9Z៣V<K?FiXu@86Q%;֓<bҵ[Xoƛx][N:fL5YƣUhOꠚ1Pt+0{;
7N䳊Oזe=[1{c^o +2Kz26/PZ,7kMlL;y<4 jɖ'"JdS[6voϷ2cĉ7#:!gYY`gwL}D(n47X}U9&"Ck~DZQKj
&1W;)ۦg +#x7{罱Ԥk;HW$ܥPҥŕ9hw"sd\#f1>%d!=?IEY'Adb0&Ol
QKfF>X}uo[UV9lMg懨y>Q+kvqDǎ,ɩΞie#fPPC>B"殣hBn^I."p>\jɾ*"ɟî֗^`qdlvK,>%,|24'%)j{Oy|tQ1cyaë9b whmF{#+M[[|YJyJڸ)z`!܊\6ٷq]yƼֈP"N6=S㥈uC^\<jP.?sJ}6RWӗ& +&*8O*SbwWНZ>pl*e3|>5xٶ,=6ΚÜ1>W +] +{e;Ŋi%Dy+/7h]M&M::<u)',ݶ>#jA|m beўPvK(kHF +C]s;,d(PM%I4F#z旲$r5r|D|vwLC|JnU._΅2gRC^re7/wlhXeK`\
Nߧj%/Ўy#;'k{{r.+C!^5~{ZM{-O+،1'~&'xphA+pMAi+W' QݖbuKb^f@'_Hs4y3Rps7LYtlJN\D<+&8v?5VSVy] (#Ts<lʓ[|-̵Z{<1lO9{LN NjWmEMQeݜ^iY\`2ls1Z(C<~\bܩrHsCe@#\#ɏ}̫χu"5!F=h sTtq00G4튴n1;
wmevԜ?W)Q՛Gl +endstream +endobj +1318 0 obj << +/Type /FontDescriptor +/FontName /AOKQCL+CMSY8 +/Flags 4 +/FontBBox [-30 -955 1185 779] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 46 +/XHeight 431 +/CharSet (/angbracketleft/angbracketright) +/FontFile 1317 0 R +>> endobj +1319 0 obj << +/Length1 1505 +/Length2 6761 +/Length3 0 +/Length 7769 +/Filter /FlateDecode +>> +stream +xڍtT۾HTbtw#)-!c0F twIHKJ)!-}gl{z뾹
!H[Ju%@0?(De¡$\&P4DH2 +^T@K?$ + +Ťť@(#-P +Hg C`p(@OM 8yr K_7
+?) +Lsʪ2bH~O/SwgHwI0F\\*\.M$X(PRLL +z7@^ +04l? @r.] +g8\H˷] {Y:Jnxit3DԪ\$M0.!94hna{] +ncRrNu5NJfZj9px>3QOz1ҹZ^kJBiwi:G?샤:lxeO,{v1_mm XȮ=馣zqW%n\'Kc;7sy5w9-~ch)l ~fF=0|oEiFk7UjoG9#tТCU16bhm+\fB4F2 |J<8mlS`H# +\6DׯS8t'ڱK(:;JK^B3[Paɖ|%Cs[2ʫ&FbU՟i +j֔ġF%lEuP] B;Ǯ?> Y +SkOz¾^*5 +R]_TD/p6VRyݣ͠~k1z](*_\!1wvOSӅE,1-)2n@_F1i/BB1^^qj<@ǎWmI"ZDh^ܲD@*ryE]ɕ-L_)t&wzTnE;
;jK6Yo xPn#[/$&kF4R(zJwϗH30GL5{Av4L'ެvy
i3G9_є}JnEpuiHT2nSW( +`q>&>]}$:ϜZy'tĔôY6V]sL
j654ꐗ5|L
}i[)+fZz^{vJ[-zqƎCϓf ./mn?"*/Z|k5c_ѩdqH}[Z.vA˦עWK Xs[hPkT=UȼA.Y#YViN:D=kS'e֥:
}=ȆP*4ZI&N8T$ÝcRtMjEds>ˌtzN~±m-whyzG~TKt9c"87R=By"7ӘYGTf+vk<Y'z<W< +̱}!fpdʅPXv"F9M^^MTo8ğh[5/钗tʫX
!ߕz|p㼣މjxun.Qݕ"/ߛ&Ey)4'MhF'"`xk9_oVvOEabƉ2STS,2-x7ì<f+8cU;fc +c)F+e
Wjsd\EnC{;Ɲ|8Xz !ZDWGi$Y_'R04 +;g8ULA :w<^,3>NfKrpkCs"35{^@Lf:,Cd3y0מE[KВVYKo$5غ/Ôc,7PIXռkLjtW'aYxZLNhe"`s6Ͳ\2l|ߞqGW i3; de}YK [}]>wsJc$\]wX>9)nHrr4*4.3*{1W7%ʃY7gɂ09Z2ؼE4pdrжk=hyLq\#8 +SϷ cSfzjȣBIN
|MIXxUUј73h8'וzVᦵTiv+v)I34'ehaWYw~PӮl{W3Tөd"X҈?{pi<+F8q'Oh~`Qs߸Kf2IPcyj4Y_vGЌ{ZyɟgE q{#uiJdBaQToԅޟB+X: mSs{[8LR}|&X,>S|*M1v,w +ncv V%6Q0Jۏ_r-d/ހ#Z.31 +h`[W}̃#YI
G~֦Uk!07L1ƏŨXfFd_=R +)Í;ïTڧȷWmո.9 +1(.B"CBTi/Td1W"B19s-j@NW*=<{G<EǓ"Sd+t7C@xfN'GUI)}z؎Jm%$0:*3
PAma= +W>}aOEH h +Z]zhDvBױB`)t~Fg<fRZ#ϗpUT(Sh2"8f R~+Rxm&rW</xۿ
_} +\vߩ +C9{mgynڳh8<NcxjJ +6NwgDEaoD[Y""%k]V4C2U~ +ш%}RԂzWL%{>G$[QM˸0$L{Z&Rj}ȆUs)"\)@I!,)b<DKmeIt MmݎqIZ%DySMi)15ZյOUZŭԻ,"\Lͻ8Sł˒gҍÎd +e4$5E\vivB7~˽4-5KzPzyGwz**2>NNw6GWB$u Z; ߏ) +
(Ubev} ҡhee5Y1ؑ%E)QVaW
A2vJ_r^8QgL R^^art
.<٦-}k4 裓<NhVۛ}v.:A97 +xjO;a7
{p>pMU:$M$ؗHC_ a/+ClsصjR
_V0OUgǜ[:^}D~RhJI~Oo~,E _:՚kuB.jiw>^`YPVV^|$[VH8îqP|r*D 0B + +<V'^Rs? +endstream +endobj +1320 0 obj << +/Type /FontDescriptor +/FontName /GPILSQ+CMSY9 +/Flags 4 +/FontBBox [-29 -958 1146 777] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 43 +/XHeight 431 +/CharSet (/angbracketleft/angbracketright/circlecopyrt/greaterequal/lessequal) +/FontFile 1319 0 R +>> endobj +1321 0 obj << +/Length1 1497 +/Length2 7145 +/Length3 0 +/Length 8133 +/Filter /FlateDecode +>> +stream +xڍvuX.)JJ7,],²tK +!%HI HJ4 +
?ϳwf{μ,y`8 +^<" +p8~|A` +lA91I]y(փC~= +?uie@a +no?TXWV8ao
`S gV*TˏO|Pgv?yA<{@@xl)7*d9fsU(sS&u`e2e{QKX0{۲k +~Cړ'1-?RP+.;A>^PpcfD(ڨm̓KݵO\Q|(o;0gm`#.Vv:N8){'*m!VMkt_%Ws;N5+k^r3!% 1j"1G6%,sY(Ve<[i½z&w/љ bB<6Y<39jC--;6CB\JO@&QnXOYT)um=:5H&⫓3Ip!V$Mҟv-B3<%t*5kO)l_*qMKg/`UG$8&P @)DB㦥5CL1G, b9#k.Ref]JuW;-lY@;sBF=ŮrK]uXo0#2y(QZwSQ"=pTM|eRs*~wJSb/k>Hæں3$rKboz"ٸn5/퉉:ܸy:ՋO}nXZN[9e۔1\@$vusr֭ jXSƶ +\)9~xIBȏm/D1"&jv#˨Ge(\/!ə[Ԡ94Юd$ 4:M, (gAlEr
;=D7.k: Bk6{@Ya%)jqXe-X;2ZrݢF^VKCd
.#$֖& fΜ˚#3AiOLqCv$p`UYJ#'H}Ww)??ƶY ++#|z)r0j%yGZ4vRy(}dAeYV֖._>+;:nux"p8~[?#}j`}sCBk$qb3w^|%I#A830YHeV]QpX<CSBC$&&/YKJTTq8XanUY+U;L*hEeRr2ۼPM +/3%|=O$rߦ{ZvfVt>zu +3/ΝDcfMyM"UvvLJؕq9HBwMVumώ٣la_UkWi.o[:!* +yma%Q[Vʞt{2R z\E+1VdzȐIJDBF]j&%8Y?,rK"2-E_%*sY$XdipguqujVSDPWm"ORя:{ُ˛v!AR)TJ^4*
O-(Z<ydǚ.6ב}D +5OK>\N$kTPB5.+-➽i.!rrrzl!"ZXtH[f11uU/OZ~v<8Hѩ|0CXpX j6\?&FI,`z}Oc1[fJv܇yqߍ/7XdӜ)FH%c)(7=Ǻ绝ոD"ձA5 +?Ewx'mУ*hZ#ڗQ
5ه1N$?ƅ&:Tnj
p,ilrL2uZIUO-tioUsYG'8 +j:Me6-_1Y۾^w͜t{3hIϦ@_5@ԇF^KF&9;w[ZlG7z6,7Ly\@)Xe8-d}&nj7Ru +H\YxtvQ;c*zH"A\ի*EPؼBJ
ך|3%Umyp[xJ~RCVF5B+xE-c f5NZ44Kgj1#t>E1QaIIe +Eh`8uyR3ft7C3"IuyG\4x(@cS&7*ecD|s0y=@^%,ٔdd!㓘7hNsxMX4}yC/-'EҊ,Kdk%ϤIɾ+GE9 +ӕnW%UN)&<"[ u?2zvxft<bӊ,?dI%_RƐ~cԮ>SgwaY"Y̴uh>@|$wNNop7<4oEw<0,u&[F?}jr1ǻʮ.uG\*jƦW-)|q@azyYqMwau#==Qыg*w#(|M㛽9'yfh(l )-n51VdAZvƙ+ڵG
@o4TYb9;md}iXUZq*6 +s|<Jӈ<qWkg("g\F͝Iyݽh{ +o +o]H? _ݷC1hsfħFkˋޓf[00'2ͰPLJ;?:tv)^u)͎ =CY[wv;50YCv3~!yo㜄f2){ǻєSc50$W.pz<{-HgAZD}})F=ˀ~ +lh̑TJji"22.WeെC
̕.֎|(Kd/b;DWfP7bsT7hǏ]77̢?hs;_V +&7zFcfrc^& =J{C\~j()x8Bab_GS,6}9'NzTs*PX>&_\F$IPW
mĥm-.nׅj7_|UN\IGQY'By5zGb^8*H ]ST&Po嚤V='p5aW.dُO,2!eRמ! gk6ΐ/"łU\XDs?֝`G9Bp5Eߘ]͕-MZVlncb4v\}KvUxcKx0sxT@dPs\;rbfmXYEvپ֮&jYR4{}db*ltssǑw2=<E уdt mH6jUa<Poitsv8}Pk_{NC M-?/Rԙj.\EK*7˯"vGJ]~*yҏ{v׳\I3)D^b腿$WsK^_ZblJinZt1G5U1|rċ8QGzxI\f +$,Eg7ӿ?EJt0!e_;'3,>=C~trz[[g"XE->g-vXFpn"osェcEw8
Krnh +wt 1$(?Q <(&%ëM8gP)ũL8҈3ێz?9
~ m4V<9e]%6)2PQzjnl +μ}筕MLjM@'ã%>Mi7;8Ų63$FJX mqqsW.\ob[^]ޥI?UïL4xSಿG o'tu +Zp0*iS#ݴ^ꕁsYq?Ufr&۳.r< q]/=1O +P86ٺUU -Oq~@J&Szt 7Idjf!Adㄼ
Ô>IgJK8Ԣ?<lj%KuB羵 +6dm0iK4'mdFOe`ݜ˰DQ%?ŕ2QYTr}Q'S[Z0:o:3,i!_`
F$Ko06A5/+(S/5OnVxvEaU7bm3*?aQ6(P*69B[ȯ\NO,\/Er\.35}|iY?C+w>kmsж.iycmĐ7>}/Xpz>F)Ԩ9agBTNAs3t>U{4o$A}he{9`Emv[FQ'<>jhc^rՄ3\Y!%3!WSW28Ѷz(qY(cImCJ x)ȱ{>H"B֥o9#gш+)ƴ +ת8,bgVPwuB]SqwG`x3{q||[c'dGK.T.6X?о#}.0_4@g(ԨՀ.1{.XJI.oS=m>Ztr{qYE͋g/9Yi6[$6keWmg2h{1C(V>F9D|'Tu7C:}$9+#Kj)I3AST'+p)·EvJ2u +endstream +endobj +1322 0 obj << +/Type /FontDescriptor +/FontName /NZWOBG+CMTCSC10 +/Flags 4 +/FontBBox [4 -233 973 696] +/Ascent 472 +/CapHeight 611 +/Descent 0 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/CharSet (/e/k/l/s/t/x/y) +/FontFile 1321 0 R +>> endobj +1323 0 obj << +/Length1 1722 +/Length2 11139 +/Length3 0 +/Length 12235 +/Filter /FlateDecode +>> +stream +xڍPk.wwl% @w
,{#{vޚ~~zjMviPeȨ*qsx9xuAP'h@w";". +hrA1/w7
qel.N>bN9m
i#ֿKk7<Si ;xTr*Uߓ0;:e +8Mй&x}uSG,=/cMc->ii=Pݾ*b)Rjw52lC4K^YL+gI~LV:&Y,d87j!A7zK\lBe^yi#yqߩ6.pU]^Gѯ'L0{(3|_)TB-54MmyCugu~PeJ'0X㪼>C!DA~~;ap,fMK ^=m^ +-y:Dt>AU.{U[`9@:<51$]Ƅ~tλ^6D09@;wsڦ|RӴШL┥}"x&ܨ]Fў%2T}#0Mm1,PE{ޖI>LXHχC%T (m.5Q@_$NR'ǝ +-*nOOu{M1l +%&6Z;nS{U4©?kSY
zo)CI +ҕkU)=KK9 +(Rn +S\Z˃=$Ym +>H+6(- #^1C?N[-ʬ8)ά(TX 33y*mmqBqz,h\ T^{(X-ʊE7_a$c;270 +M~GLiF˛Y[0v#N6yTͺ;gK]b6xvV~ܺ.i>}mg~l6nW#g
s=ԙhO0fwO@--UŶ +t}K 1rwk$fc_%I#Jݾ~:\I{sjܟ ?IuyoIӹ&dUʅ'ohR +;"2% LВ
% +"䗘2ZIa%~joJnGpzx{
-Uz7iN(Ouy{SdToS53+N+oV
^S^&ܻ +*{*zu}xNJҳrw1ʲ%gSO ̪J?*V9P]ƦYFRS2vA#pd=iG! +;Bo]|ʪDT?=6%<nrVyh<k4qVRtI+[NpݞQU3$)V1s=xAIc7ʣ4whNZ(OKXI)}JxXP.;)ڋuOtly$MG8f*1CUj?-wnlJ4YCgPt&M^+mIui\zP`hnLƚivr@eF]>~tOTdmeZ(Kg*sNp!EV~ +$YWs>ujj*Z))SRi+O\z1a+IzaV֪ +[&\7٢)_'*癱k{FP< ^b}Z +&~_aaݭKÕ'>,%OSe3mk ފwQ'|6OaU/;YW|RxUs驽 +#c#C r-0ja9xϭkF: _9UߚflT2yEAdh27n/i(\ JfrTR9$T|ʚcW>og"Tiac``'
xF!K(y?9WŴ44&b c$~ pLl;yJzCB*7amߔK+
SlX`!@P|g?S|;|叵כ73h$omwׁ7QƝ5kT[DJln%f0o;T.~yF%//@*Vyrk2Xi$fǝJ.(*UnjxFφ?| !N*A/G>Q\a怐&;ϢM1+J^R]?~,١X#7EpXaƛlvPT>* )wIgx9{
HԨTVPʛlݾBv)UQ۟z%F=5dއ7,SybCE9'_] +7[Ԃ$X:7~glsKw8L +NPI=Tʭ#8j-䲤*8a_I58HHֲNUDE#~^n`\ܩ_Pn"&u$4v.%TY $viE#=2#ƣ\S{?).}I9>B~ΣaD_-V/wþpỊ GwPbj?R77Q |DP +>4rʊ.vXXF`uIoYo'@Afh-M7eM=S^sߙmҴ-ޭuB<qe`CRTm\&#B;9xZ:E4EzZt`+.8m
VZ2gR¹GW$T֤8;wЅpͲkȴ"k'aV1tV>gY>|C Ddѭ&vY
g'f#J.$6LmUbkb% (P@'yqz3O(|Е=$%gsȪ)nxh|;&b9kt(V=NwX!T<n8ཊXyeb|YWlO7dj+$O-cF*_E(/3HIc<<˼< +Ѽ&gֿj.A+ʁ2PkZ]*UEmjf[|E1IaH͡đ8:֤SOun1IWe^5K}gV' 2ӰyUX?jc1Q5>BFlĠC?.tv^
QbaI-.7cRY#gb +`!mxO\2-6勉QF9<='p: +.,Rg[QI6ϫĹ9iz +S5ltO@@=⿍:p)mb4ؖjw[eOֹU6KW샮WNEYO>`Cq +&WJdfI; qx+t@AUfi+1QɟTѭy\v=fYio]8*ԚK}dyz3C3Y~Q֥*dTAtE'蚌)]qRk)q>3i?jG7y*_KiX&IwOd WT#ku!@Uw,3.;̛OBH, Z3ECG[)3pEO) +0joMpq !;"2Z<-4W$MQWmX=:$Y>2Ċ{]w=4n~9;<}hJm>#s˱ivz<{w@Wŕtfӫ2ѽ?xv]W(QŨ6?IA{''gd2/8YO[2NP?}xtM+Cenu-uNsR&-_9fˆȯW{q#(Umg'?yBm뼆iACQs'Pm+v8Ny8~n0XR}kC}徝FR`]OpG@9T+Hs[tfV:f>ax?D oulha6WR3)7/?PywT,60q UpSd)4&cQh}IHԄa2}NWr]}mcekgp=h'̯$#,g|]e&V!Zr}.xRC,09{x$ҵ_+ޅБ I4ksP28 +NG'i4581(B?8ߙHϟ(2hP#h/9͡\CdIDe_sPNJU:ܺfJJ?勝jѢ̊|NVZ'; ~,x[jZ +`gJJB"@sT5UыpŪ-JEP<VRXdn_
odNum_Z~ ZI~@ԃ7|\ԏ?F槉ֳ#}['ӷϫ&{J4I?;m"J5hMRyhU)Mǘk-)l_t8uJ#Q[?t3M/p:Q&[)H&x̞*$Vķa4y qˍO0t>]rdfz|
l3>/3b<͢0Cdw"E.}rk.8bZ0P:*(`HKuEZE)6fgT2ַa&TS|v<#y[DT廒M1*:7@˖x#? +{U(ƲzK!> o +| +5ʜ"zb|to~gӺ%R7Hw,bt ,KӯtrZm[#W` +1&B(Ư&L:|`'Nl>u ,
^Y~^үv2șY>\U
s)$<v;7;T'!4!f7,gBm>3{tM;9kdX#D`#ӏTg$#9*&ecO,e>b'FDن#I\{7|p#Oj/2ՍUTz1#9+zgT{y|r۾s\~I#RIj@!P*10J.iMP,I;?"HM/NMqyk0{١5BơTUր䔨(͑\\enN"eB@,,k(PJTm;ߞ*+|(]:'AkKU.ĄbI
X/xM+3}b2w\#q`)OE P"KDia\юզ&QDZYm +)"Aq[2\GX]̬*?jܽ,nF#i`a+c6ˉ`L>ڶHCqnq stoKU;*,KWcV`4b=SVvʶg=!T,ι߃`L[ݦ{>c<7QL\0\5-tI<.z>;z6uAaЀ:6˒} + +endstream +endobj +1324 0 obj << +/Type /FontDescriptor +/FontName /ERCOAY+CMTI10 +/Flags 4 +/FontBBox [-35 -250 1124 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 68 +/XHeight 431 +/CharSet (/S/a/c/comma/d/e/h/i/k/l/m/n/o/p/quoteright/r/s/t/u/v/w/y) +/FontFile 1323 0 R +>> endobj +1325 0 obj << +/Length1 1629 +/Length2 9188 +/Length3 0 +/Length 10239 +/Filter /FlateDecode +>> +stream +xڍT6L7JJ 9Ctw0!
*H#]ҍt + !
zνk}ߚf~ki59$!P9G[ (a12.0G?]`GNPr +uB +@ +X/vߵ +; +ws}?\u X$ N\p;TQoGdP7 +O# ^ޓ3uY2MiѫSܘ/6b vAE
vϸLRb~FXc#xqPnoiX?;l<d%aw>9-/X~~i$.TP)U2\Jr[";*Aj\ ;"l%bgI,}GV'?`qS
K`!mqz8E-N_X1I +^C֨9ioؖ<ǫٟSڿ% +MquQ<E?aȗ|i08mnCnml2>׀ҧ;mل62#yJIFC_*l. +NLj%QRgCA6InjV^X{P&Uhc)Ic):W%R%2:
/iY%|nNyנc훲v8qŬ\qg$|(C4:#L0' +wGVv[Q){
<3&Yo'/&&*D*f4 +n]Rg6>Y(N'TF3Pe֧B9Jewp'U "2ƶk Ӎ
V +#bl>G-؍ⴣwbdlvV&/x*ZTUa.+y;(k[Np{3KDQŰkA;z} +SdfoM;Q,*+_݇IsdAʼQXbK&h9Mڔ^!s+\>:@ +WhY({UjLbEk؛C4\ +lyAV
UAA-F>kg8sMOOҗX}2Q]7h'. b?0H"5ueGV]^PN7mK}4;<[!Z`l+hٶ-rc<[ة6'xYL&1lg?ОԉMս;YP<d7^FIU,(6zwCg@ŵ]GR5=QyOJIS\|Ufg!qhޛ//ϼZ S2hV4ZZ2#RhP\9ATXÇbh+57>qpw[P +Ew=zJ)(U-i +_&bų]ȶh6XakUS<i|}C8cӑAaPb }VR͞/6Tԩ\J{B+OkFk+C'Iujn視 +/eDhu$ + #"q(Ƽ%[;ɊOڗ'Jzk/NFT)Jβ[u1ܾ4p"u[~2ɪF)@T@)*3 (z$F)j|
efKAvBpB]BnYv'xE/QghMYL"c^ĖAz +N0eb.-+<_ܤZglTsbxD/rǓskMFF0UJUd8bbtg1Nv$,Z{5f_vP߈F"+Z"_t|1X{0ero1h7+JKx>&05 8ʀMqJT\oFR;\?sgEe;{C>y&N>!7GMeU(x27MbtՃ=$̽&H_vS
toX35H +媴=5zmvt7FuщOuلq/=%6էR'fŶަO}ұU>J +k'x6gsچNn,~/Å~O.lWr.>ui qT{w$[j +Hfms N0ۀTBPxw&|5]r}< +\.f(yH[a|;oILU Pt2t`ꬩepQ8{>}Ʈ/AeFϮ@\-{N`jpJYmT6 +c<ҪVuѽׄܙ /?)EEݲS4;#h
;GmOQhѤsMgbJg2X0F?dB~ͻbȨWKs+ӽ #~x+BE9B.X!>27A`Nd~M,Ȣ Qɋ[\6t.3E$\+d<BOJ`ԂSI%@:;.)
>
qշTe^gS⊶oFyBI3mn?P
M6K
'/HHUj\vLM!ІYGz(S|)}[_ +4
E)-V6R9tG\6F +a},NIe<.ȍLwC +az:_OmiT;p/^ Hz
&v)+oY/ON:2qc| P{ac{5kx*6#'X+=mkBubݞ4H֛08O',@|rY<:JDoqJngH;cT}u9/>W˪q*uvhr +7tn,M+7md.84k&8[[6V}mz]aPN?hOP*](>ɢE^dZ(w6q0F$2sşKgzu&ف0U_wL5T=hRC$)E}$zjVTuhxFJ9FQg`[7WuT[c"^i6T*+ʫf:]:e"}L:t;ēO~VIk~uoP> 9h֡r:~0Gd\f)$m ܽ-ftʲU8NC+٣ٶE< T1z^a>bd]B*yP%
0T+|" ;\d23x=TsðMawˁѺ)ی{Z@dZ=+S'`q܇zWߖ-2Fk;N^*DdA\UzȡP@#Ve/ؽ*?)+,Ќt4|8+FC=Ĩ+OHx.=<R/1nTxf~JS1ȴ_0m4)ysHx+zXۆ +
Կw3_ˈqU:R3j)9U; +ǛspݵBʲ8wYzB w:^=SMsॻ4X7h}"Fհދ;iEK*l`fZSĐ#Z{BvM<良Xo"$Dd1^nҕEX=1IO&@p:[Ҁ߬
w]nĴ>ߜtivg!<~RT4oIy%iC>i: +F^#p{Y
V;yJyuL-K]yzr>BJqfV_}h劬Cֹcf +M"0sN|0 +8eGsQW-vWXaފ:!yG8d2܇6P8H4]l[-q#I1! +X-zTGt:F"A<-/t2H6<Ju/T~E2i +;aUW!w +s@XU3 7X<(t
8K6BLN;8FϤB#X=l:'Qzmɥ>B|©O[|(Ky&Ao"lKnM6㳅f>4vMV5KkK|PEKƤ= +os~ +`&(PΊZI
G,ǐK/[bR>DGl\ Ls3"5z:F,0>I+\2/T1!Hfg2n_Ÿ擔/Bz{Zc=aLeU59fl3xuTN$|z~(7Eyk,J˒ןnwT=y/H20Jm[µ<ILaVِA"7nwm"
;.P<Y,EeeR[a?#9CU02X(aC
^Di0~gTbYYf '/-]bԧb=Κ혱˅)fʾ`K⢁h{̭nfiwY/Mߟo[Qϓ
AUc+*#t^-
CK6xt#r[`[.)bbL?'6~]48"IC![Oesgvo;m<φMU7R*Th#`mu͡Qoai3xtF;r G_Ǝ,%H?l{/e}?@+:5yvfd1)qW}nbS -cM(JtK?%_gm\Q0UJ}\z3X6?=PTDH;.A4 +7B9J7#n-xeO%} zo +XŎOUlqr}Te yP$QU5>*q%$AHU!NH>q7"=o0PeZ|Pi6Y#W)"Ib(]J{4o?<!#olw<d~q&k_k/Ha8WsZO8V]D}b,f +3aWd)>ߘF^Uzbhhz#a콗j4N}r$+y$qUvrL7<D7j]C4n閇L2=f"3Ci:<j+$]ȭWKl9HbB +endstream +endobj +1326 0 obj << +/Type /FontDescriptor +/FontName /VUVKKS+CMTI9 +/Flags 4 +/FontBBox [-35 -250 1148 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 70 +/XHeight 431 +/CharSet (/C/a/d/e/f/g/i/l/m/n/o/p/r/s/t/u/x) +/FontFile 1325 0 R +>> endobj +1327 0 obj << +/Length1 2792 +/Length2 19889 +/Length3 0 +/Length 21467 +/Filter /FlateDecode +>> +stream +xڌP +>;ww!h$@7sOrzY{=P)1L W&6fV~:+J_9&3,7q+* +x?? +xєyKy6TM-q!?U~aՈ*[*4]|KD@u鉾ps;?J*ȀwQ⣻wQҏOkrG8Mo٧4fr+3>s~=y,<V;>IJ& !Ĝ5cGFoho,<<$K
"|wV`nt};oгEDYow{ +UM3Ya6z-X,Mڲpkxk#ӼB<}"NmIuTfGV~_n᪣w,uV3̿TE`6?-@SkEo]>Kl|"mN#\]đ )/V##𨤌.n#!Fz:L!_cү76#:7nUƺDeKw + +[Ƃy`Y6<T߬_qw1!">@:EhJ4%tJi(F+ +c(i*Ɣ{=XoCEfqw_RZ'\_f}:FtBƼy#(Z3Xs+B,གྷM/n"ܒٛ6ا_29Q^qKWgT}WJ$4><^Հ4WwgH$kEA؆0/tKᐿҤ&ԄA*IfDdk=yǵSl/0P<11)41:R;5A}iujvXa3O1oGctIeZ4/#R(LIa:ց0!GUnW]+:1I iSki3hvQi1s$}8Uф.
qcio$q2`tM*=&Wk5ʌkj~f)5bA224%F4AhGWqq|! zLt$ng*:nkvi/(#vy@SNFJ*@oLVʘ'?ؙ_QIA|JST0ϼ2];.ϦNiҷ +]tX'x381J:̓>ȧڪ{ +qW^T"'q8s7)!R,m94!+_ycGu1&# x|714騰vm'9>e8t_}4t_$*jw9VANS,;'hij9|BWn㢞ROZC3Ax%r->|Ov'U݄_ޢ)\$sXo<83; jizЮ>9uT9Z_RɃ%N;7Z:E^=R4J6}!-> ܦ(B{-lv@h*p$H> + ^?E^zhJ,Ƴl9 *Uׁ0
(d£^0d'~w7ZT)!70_L?95KgN,ɪBr1ӟsy@(<B# ԝO(`W)PZ$[Ő_˨T{%ƾ!
Cpà\ YROⰈ`X|MK&dhthSfaۢi{b9>zl +QuݥZDS~-+3hP3noa#֞fkXGDh2gpXFAljj?!P^
]懍½K4@e0+)Snymci'lLˏ4*9f*ѩ n@ቷ'㪏aҔs.7-p|U:Y}]yfni7ȀW{hH5Ek5%
@{h4Ws"l1HEo֮`.)y@){4ydԞ7M8Hse [gR.$58:;mس3>O
LAݿ\_)?z6.ϫ0LmD: +_tvS%m9}|.nDnUK!Z=dh,κT(,jGUH1
_){y9mΜBV
W[y\|$۴lRe +YkV˭أ' fR2ofl?apW7|
YhJy3cQ j8ށ̱'D3Ì9֥:[:N?r; ;64fu>t~w
~S:`V7m\4,j/k&T=!'-nm9ACC +aM6N6];YfR't?CF &ӆȄFvU>$FΚJkEa piGV,Y2= +G5-.ިUpDӑ`읿<I +lk-py\8uZ)"Iy4n2V݇^Uyj\t@ +[!;V{fʽU>W-ӓ)}7Ŷ^ʣh-[>,[*W?,~!] *u +}vʤC5ȐZ(56G<\UM-="Ʒd;܈C꞊?ZU`RppɿS0Pnwso`[A'Ts27Bm<$Y[~IڟAGO94@_|_|IKpɀ7nH3R ]1Bܬ]e=t}[R͑XG-/? !xl}G+-yUHz"Cv,
UN^;|U1ByZke/bRhͣyȞkoXsŨbq@g;q%{H8a7
$(^P>zd2'YjkN,'ĹⵌbL}T0:-3KZʳ#L+:gy +tC2۲$&4Ū+PI}`Y*anC5nd@$Cpd,k&'a;)=ׯNW˴`~QoY\pZ"vٺQXߝ:9^ xB9T"2ݽG>\#V8&wBU4u&8$(;Sc] +bb?"kSnX;gdOB5`(@TFY%)$"snN%wA)J +5=-tJ`;en46?`6T_% ~v;3\y +*m|ߤ3ۖ `̉JʥB3V/7X0oHEڴu>fG)坪"~cm: \4^;PiNcFX]aȦkaiڇwVJB@&p#}_gǵe)xHJB!? +yhCz0mjQ|OD&
_c[J/"|:B߳ZmVx +.ܮ[h%^%t|d
tW1ZY#`N\,N6_Чlo¯OVhLG!BG3cm1H]eDz{Zޣk5s`}>5 ++hZSTz%`p֯qAM5M^zC<z'D5^FݰG:ٺr"է.m~+Z`t8%zo٢u4o?}M2W2Yo&[ѯK[i>!;}^e}pQeU +M>GBn8=3CqW"D'kGۢYf[6nhx8>VB/1|$*,i3uN4 +.XPbwl"wrj>IzC)]2wh_bѽ mhgm3 +Sjw(yG,Bн$<X<Fvpꪷ3lk4*gb䠎Dj +H[ 9xIAkHKTż3z|*XI8@((-pK)q +?Xֈj
gL~0*z75=dV6o^kdow^q뒚{##k85Plhm*(Fv35S:[)kzy쬣Yǰv+XXކǰY*h+j5X~@,@.6iMsT>yⱶ$y&}砯Mԃ0fE6/|:ܴ< (y'ơ;i7s+~m)iB1ߜ_'%Q]X$rctNdEk7Agy_ɳ^aG[,>Ƕ~2M7;)D499Q-E!C\rkȡj80OS\dR[R#GKm?sh*ݵva%[cv_Vbڌ-G%ҵ4dӦn9x(!zj/|)`gYtLqlVk4Be_%ۆPcŷdJHד +^^t%æmtɻ8TYG(fʝ(?|:jjǙ-^^Y@OS
naٕ3˭Rl/'u'pH\IP5Ѹk`9ڝ-['.0UшߌZH!"gi:DM=<AF"el)xRZҞ4hX'.`sQv?!v<yEӢ?"n<Q$Inꧺ\i3%⬜>E}\q/XRQXT/},r/HtkY~fF@J3.cM':%-V0ǻ!B<bު&n8&}ZJzm ,ϝ~ħ-ˀߐ)Yl_2|{& *HXʰbI ++v=b3|^s/KM}Elnt%1~%ٝ欌~`b>ɪh +?<ɪs;0- +}#z +,O5<z製ي;~V +Kݺ08VOP(5,+ٕ*h +%q"3!1ti٢w
DKkFk}E,i*{.+_rǯ{TjUTlux{'k͍jp}%ِl=lRM-W(܅c'زA)bm<AΔU2\Cn%-x;$yאq#8C'
<`'ed&j%^/ms>~>ًYMμ0#O5I וR7뻧UXQ{F8+em4avf1ul{vL_w~j #,8[{IBOAWuU_&,+ +DPR\QR0(.hGAczh=ֶҜŧ +x4;o0ϼ:L( +c+`m#}xթ
B-Y ζ7ATUfsZd$bP2ôƩNC.yܟa) H*)WYV/ +tfHTh 0x<u 3cqGxY#]έ=Yd>/h=( GF8ZNbrc0לּ,ԝV#:?3]o1S@$pr!ޕˋmEab@J!ޟo7*9q_h}%n~\hkQ,5mWu␊݈͗ {EVe/\,i/Lq#l} +qp\GVefa ~hUU:Z<5O|a6HZ/&Ks&q8Yſ1@a_7C5JDB\Cj؛wڣgV7/A#:DZ5i);T"_PN#psa*BdxG|GɎ>pKXCa]\(5tS8H>dλ54E^͓!Ņ5҅1g_]?ąԣ0{s䫀#agl5@znΠ=`/Oq97y{/Ȓ.Ms-6pŠ0%&}ADidVjv~RXr5Cjxë]zp`8hyg먮2tsxbU!cE^"x|Xp?]SkI +J|BɲXQNV?wwi(p<EN)f\+ӦMBF6s W;Gʴ<;@m2tϭmdzjx_o1؉>?jNi 6Ҙnw8bTFhY5Dkwsp@,Ju;2撄گ?}Q#[8+V1(x] 8T_sKhv؝.@9:z-;tea2н<0J~{+fӕ\b4οkAkW%\j4xR==dw=]ɡF3&;mVH:C.M?})NQmX+FaXCK8?\-]VnMZVlz6,kU;GI8 +bՂ +'I;8b>D4ۖԩ|'t0 +{/T2y=`֓Lׄ6k2ѝkG}캌zOlZ{57~Uz94*2AT3Tc=L0 MLEQfO5QU{+ԳM:B`qT|p0LqC?߆ |,FW#{h7맶i{g$vY9 37ȧeG z6W^^6
s~.KZxFm-_ے~uwl˥;O=)_X-P$O/[Hx{p!ʉҢ`9T^\qkHxim;sɦ
+Oۯ s/$wڷWLvCk<Zv=
;te)Pc,Ö}u`}4:cX.=\$ٙg;^55-oƬs4:6aBG^z>|d{ϺYPzM7wfd]u(5j!{)
/3UO#@Vp7ڲ()KtC\ϵD2hM:Al;fG_tlkzzkDeङYd/],ȤZa+Ui6SQĶުG~&#PǛ>ycU/nu4fr{\<ߛʤG D+(5T7ʜ\PБ>GDt8ƕsN14qg_cY% $ܬ!cQ0BQ:q+LqT/aI(g^?[U~WR@;Lf{&퐥9Vq%0̽~AۿB{9D-}%vYkE qDžDQʱ;M K\u-£{ƳqCVQTCsAZ?@=*A}FrlyfłTZaD-L*.V&c\R(BM"1lSV<>=!1?Օ41ڱ2eu"r|6EI
R=G|gR +~G;ܮ6`=LB^֞cx.^M!E]=M\#ĵ<K|H]^+C9LfCecWK!ytzb#x
$~%g%rw퍟6Spt"t^,-?63Eݮc
,0 UHn'_3ZdRG!Rƨnxgwxe녯m~_+Szk\f,LeHw/heA>w7lF{$hfD]C:$Nۜh 5aab(E l1^?#<|GՓzo.pQ<<D5~B_-D%5H^5Y[ECYAkfK㜗@Bt*Ðov/WjaZG^îV#-( +[W8TTqӮ +)n'Ɩ?{!Њ}lT(.uqƺ7ېxH'E]6l#[DdUM3jsױn23pG&ӭ;yIZ]c<#iqMۗ
@"FOHSΖnc!P6/5!L|Neo"?zGk}P!c3G%NM80J9ov)P:Qn3;y%^J/BO""AkD~@DGON +çN 1(Ed:4cs_w=]|I-oyy鐲-NTkN]jpnI|y,>K
Rhͻ[ՍyQh4K=|(wJkjhϽfK[c۹ϗ&OY"?%%{5/1p0mSkΔuC%%&Em:k%{x/t@,$@Tꔔ$8Q+_V/:\rtCxS2b
O2wSl疒'z_.UPʨ8OqRqk10MH$Z9srg3qf<µLnF6,1WYb?Dg3_L4y!}!v?EoM}kG/rf
Q%1E
!4ܨ.uB +#y]6g)$#szc`ONab
6AC@iTU1J`Q<TIsszhQ, +L>t,QhɌ.(~*(nЗWh2.CۻkvCf-H!{ŰlɋKY9ScO&DZ0~ccs[wU'С^+gѓfS.h1 wq݀GW'k-8|dZ#= +SX3Y~a}dO8v)˶L])ݝQ)%v帛)yŪfSfk"ɍLI\ $7;E Ah/3H-Ȱ҆n +.+"ӌjCyu&
c&ހA4e_}M}zG6ό2&&w4Әѹ3PF',Pm-hٯl<25B}%-5+̨i,w\#tyC"X?cy%᎗ QH^YH~=*2~V`C%X0,Ž;Q=JQ=㗷=U:20oo)4E/6[yB;L*@[=M,Wc
n;m~韯^;<b,1']DR[aG$S>ҕz$:!I̋9 + +VjήpfS +Gmej
L)pVJv<2լܙ5/:V:{&j&bWM1IupEkt$\pDLdDZ(I\ȷIȰ/
$7_Kb`<ERg*W|&kRUSR%͡L&rܐJ'®0ɥ7ì19/|TѴ?3$}-?++וc;p()%9oNH ++akk,"-L9oh<($&__[-ni}vKt[=D:SlW'Mfֲrbd5?LCONA0/~Sk}F$ +эĔpjSNwB0WC2RN*UX8_J<õ%2Ѣ}ŏ@]>>CmRtR{/%^Au;3fy< i~ZIa"'!GntÝu?Dyq,TGFH}e0, +Ýoӂ +><J γœ+8<Ş<~)ʢoR(
Ji.hٰn'qOhw@^2M݅r]Ia +PyPG+@&s%;xȣ
(R~bK8\|,ȃ%G7TK]!jR.^N:} +3 JրS!RrT̞@z0Qs~Yi?yɹr;^s)$zUL}ob<tQ{UɭdI{HZ.SGIu "jXLd
WB:qފ +G=ѽRT"rq!niM`Hdʻ;>99:r9c%(@[Wlw4ތmpX^} + qM
PYbqPF9K"O=u_hy6\Wh;ÁZ'>"dӘ(/9"-GfN>#pp}>J oΟ@l`lXEpsSHx,3*ª&2dͦ80k)rOX$uΘؚ*i'sDծ_G]1hq1a4xU|J7bG +nml5܉B:MzSȑY(>d
}gѰn"W1A!@a%tmɨ/tx^@d~!$wW +bx42]RÕui1(\z߸f!H(X{Ŭz+_O@WKfnjuR*N]vMvgrX N1YAk/ v쮟b][,@ZWsV$JvםQoD!ZR +endstream +endobj +1328 0 obj << +/Type /FontDescriptor +/FontName /DGNVVH+CMTT10 +/Flags 4 +/FontBBox [-4 -233 537 696] +/Ascent 611 +/CapHeight 611 +/Descent -222 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/CharSet (/A/B/C/D/E/F/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Y/a/asciitilde/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/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/quoteleft/quoteright/r/s/semicolon/six/slash/t/three/two/u/v/w/x/y/z/zero) +/FontFile 1327 0 R +>> endobj +1329 0 obj << +/Length1 1503 +/Length2 2153 +/Length3 0 +/Length 3106 +/Filter /FlateDecode +>> +stream +xڍT8TE$R|
\I.YwѸۊTrf4\,颛T +!bl$"";=<g}yq`+eC^("/4FT*L ffD}̖CFĒ> +@#(9,$( +a@ʁ!I7%N$ځBdVb|g&`2gEA3*!(O"ga"!b<Ep!ADCG0#&.ȴ& +x2AYHA IJHpǀ,Y2,bqY5pbX4Ƒ2VfOFEADL;A("Id`FS~D)1]/>>$T*u1 +1K & _4 `C|!|!G?ǂUT\~4@}~[+"/Sx[MPtsCcA5
X6nŷU>}Ȃ'FR#>ѐM84(f?jK)ǪWD^Rh<N?qV,@jJC@
]}\g?K
qE XK8q|^]#P *Ǿ7F+GSCQvD8(wl趋 +[\iO|2%؇ +J=p:sa +a撡bHV_+],fb^?{ɼIAnw2U,^.%neMw.,e5ݶI/^hF/S|yudvs$D"[|3p}^h_# +Z'.(.||UpjJ֧}C-]r|O?z/S_y&:Em_a>%Tѕg"8i5ۜ'9)3 +/ٺ)4XV'n{Tyd}Ӥ}B+9r^Un}TӚ&ʓQN>-R9
6Jrce}s/3.N6fj崞: bR +c9q]Z]@cm]kOQ*ґiqʄ풵վFS'Ibo$c7mߩ>鍜Ǻ:.Q->53ٯJ*̷agd#OW*XV<14Rʂ`=3^sGSlC1j +`b[k&?B&_u$(
:nz9b]l +&3OZ[ `MM/e[Hy_sRfj[#zb>ɚ~.ªo=ftMd0RGѪ~kxҿxˆ1h:Fv*Yf1ysҧ0I<VsJG MIkWemh;;vo%ZvZ<nEUvgy7m0}]$~)FU|o]oےvwO˛L.j3ʹ/+=R_R67Rf:ϫiƟPm}7qJ@ψT';>3/9M=+g8 +g4ݲ#5`՞RghBa}*<24%s!I}+Du[i8Ki2y̰F#G4/-oB0Y6r?9G웵h`jwDlF-}O#g5+lj횬<Aw|
;J숓9A}솛]P;WL;kBB2-Yl؎|WҠs- +SxXˬ.؊oY|U:nF|rfjov,ǫ[6< +܍+<(M7q[擧鬱/|w\t5]-+r3U*8-yܺMz2ѺiG)GְM,_Fӌs8{bGwJ^VHd:UAg%W>nIw2P:Ү(sW[{.|Ag +endstream +endobj +1330 0 obj << +/Type /FontDescriptor +/FontName /HJBIEC+CMTT12 +/Flags 4 +/FontBBox [-1 -234 524 695] +/Ascent 611 +/CapHeight 611 +/Descent -222 +/ItalicAngle 0 +/StemV 65 +/XHeight 431 +/CharSet (/backslash/e/k/l/s/t/x/y) +/FontFile 1329 0 R +>> endobj +1331 0 obj << +/Length1 2013 +/Length2 6462 +/Length3 0 +/Length 7661 +/Filter /FlateDecode +>> +stream +xڍwTl6 A0C` c) t((JIK [ o|us?udz/kJh;:Tt $Jkĺ"xo!<1H4JOTaXr +! ź>>>"07Q^P:7]0@L`o>0O +
b秊De +탺7p@r^Mտ]oH@ i1 +FtIF + +>Wk^7s/p +%vk:w(LX
BUƌ)s8ð&ZtVbrHeU7:1\?Z@D[[mP>;Â=G>i?w ,BC4C"--FCެ\\4E8~^QaBl:9w희U+%ٴm +wTQ /mp9,MCA{kLE +/ޭ [/P6Cֹ>(`cҌ*AmHSd#JկX ; ֆoDPSL[p[
%Ĺh`GvIOVv뼢-8x`xІv*8F[=}3\ڽu7_U;t-?+mEc +hخߎȒ}G#l[7]l/^صE#^{5ZŲ3]%kQ-'L `K=@Rɫ2Z}ylp[L"GA'A]3`&MyVAŗ-Z_ݾ2"eIYo! +Hr[KA + QoK{_EWɝxr-IYv*$,z>R%!KwK1)Q%TPiVcuqS̓llbUu4!;-hÇ|a {):^63aze3~u&ݙYۃTM]eBݮSteDݹs,9H>VCSioɾBqMP$6>qyCUZV-c͘G0wM3m3cɧM^wzgz +~&t
jTΒbЎ])'-@MKtxY
32asH2 !_ˏ>n9t 3 +郭n\0p
P0=7娱Dx\n+!Sqt[l +, +N}ʢpB9
w)X!d@"՞o_ljK`ޑ I0〮ySKֽ'ǩҙTtkE<gRLkYHɻdD)7T[amw?LdoAXwks |@\l^B(lj r4Ȳ1,:nrR^:Xed}Rc羽XIztɁ'fXSp#߶/Lsʫ%%dOBͦLJEfuh +Pe}v76#Y+EV3=czFZ!qoX5W}BPlZR+p:aFt*?QFI:qXt51.>f,ךYx_[ uˋs)Gz+3cU4ʑ[OK ӛrB*4'M%Y[:Mi#o9ҟ)ӓ8ϲ#,\q?&͔nh uZ**S另[<<)Óݏ}+]sP[72Lᄡ]}?uڹADnVeC33} +<"֚eƖ^_ ЅP?X8 +-DL?~t19TƦ\Q^%5ޙkV\>DIc6Q
1M]4c'>tLO;omy-6x?b5Q@8;wBB\&y7)/6XET']x[5.{B1uX9l%t**q*`dST
`i= ýbI^jU2@Jnj +vyk;vAr_Hxdx}>r/ڈZI +Uy仚~~l[宪CUR~o~R5Ty'̱w3*m1Oc[iX2ylZe=}!7NI27u%2yR2jލhmMZ<}Jӷ1עY y3Rf+9/|sfKǴ;8f+"Q +[_ɑC 5]gӇ4 } OlS#Ư{:OGK|T!m;ߎIi
z=Mu5%V[ۺkvi%n:d,.<8f Pؽ1PjNZ_J~Uk2,N}ʩ ZֆUPd%8b3xZb6@oC\Ff6֭5&֎;-g QxI3B-wpG6]}2\g.2<.)Cp;PI~-nN:GNj#I%^7騍YWI~v䦑ORW9z@=o(!沜}T!NXőU |N[Ͱk5zV2. :OIwNƃo9bz8b)@}aQWrD~n#mxcy ۗ`˞+J +3G?J8a&Cq23I=gs``i?vohE aRadŝXŖ#~{l,
\,n:aAIe
dR3/5QH+VN\
K%x,O0ߠ)\Mby1_ĒEn=
ɹ+U]- Yr$!|
O+$
x3;&~ +,h+"*u|6B2J?:Jvd8zEyl'yGBJ +@r* +DIAo^[dx +(VQ5ufHl&::xC撹3& iZ5 )簳C8mvG ^ܷ'ie{eZ.>B*Q<3`4/uQOf\n_۩o݃_M@%Լ%Cy_lخt#fTq
Px))_R6C܃">ȝ"grȴ6.JRU+<}mOKOVMٸ#닞unѶ_u'ܻdlʙ +KS*ͽgK'3¾ҋ%H)C}]*1ICIA̫hEv#u0V-z0\|@ʸut2P8u%c}Zd0=~K&IAl+6[Dl8Wk'ːps%$,?q]"{vGH= 1pnIn +4JԺ +4&Ft34?>3Oğ,.T5=:ߊ Uj5.8hEϽWae:e5`<
o$a<U<3Ҥ gfwp|,ݘQ&Yt +#r$b6 +3֘__ol.R[ +qN˳ѾhT9QNd~}2\f㑕Q.;lV9QbpM
Zʢlj{B2oJ3# WE@ +endstream +endobj +1332 0 obj << +/Type /FontDescriptor +/FontName /CHOSQE+CMTT8 +/Flags 4 +/FontBBox [-5 -232 545 699] +/Ascent 611 +/CapHeight 611 +/Descent -222 +/ItalicAngle 0 +/StemV 76 +/XHeight 431 +/CharSet (/F/K/T/V/a/at/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/f/g/h/hyphen/i/k/l/m/n/o/p/period/r/s/semicolon/slash/t/u/v/w/x/y) +/FontFile 1331 0 R +>> endobj +1333 0 obj << +/Length1 2284 +/Length2 13561 +/Length3 0 +/Length 14901 +/Filter /FlateDecode +>> +stream +xڍPH,%
Jw/,t4HtItwwt3^w\w?,
&] +tt)"2C +n +PpttEttrZۀ!a@o +)\]N`WVW tYBG~R@KsH۽ +`aGnNlnR@D(e֖` +KO+O);X9 +kA<L\A6Dl yqX˗_ $#2Cbo;?f/ i/7_zH&sCZddc//ݿ $cп ߐ꿨 96AHrNcCl 4o
'ȴ7Ry^?`r -/)jr߭8Z| +pp@bb/i 74_R aA?jiiih.j[Făۄ,74evGdM;]i[g-
ImO?4,ML~'E~VlW+S&ٍC-Oֳoռ??ϰľ1*3˞'D +sMt4>Vk.p`v<xλ&Unlk` +'MB! :-k9u8(O&E笣art21TX'TL? +˰zjL̘G*uT>T]mbmNJD\;33$?eMfGaTb8Q@esɵay$%?)\!u&nDu!/-280Z~+{DvVQ5V袯-dBh\Rɫ-"ncڗAZ"uk)"wPZysYMXwʈAн; +Qiթc^}oaTv`"gdAףA/{_5辽mGl1rb0;rm@$d1V|YpſK(h|cJꝜmMA\澮uJoRpΣG3
k( +x +(TULW9ŧB_zI\GBANV7<kBydJeKlU59xtrQEHHf70WyZ#@~`>|oδ +5qɴ@+ϛ
$0ӛkäNw9p-\2aCr#+R[yhp>a"yD0cQKE+Hm|Ҟ;&WOp<*üi
5|MgJ=W*̷q`'KLEWˀi_
uh1O%<}xH+^KwDlTuHF$ +P2wdc:ӊ'pfKG?[K=kXZC\a6,puӯyu7.bGZqT4:zP8;N~2@S%E2Jk0Bód~3Oċ\A*GJLT%r9J9_d"Q4]l/Q}`@/o8nfaGxxF<eSmTϲjM!F)A%з ^f=w<mP +V71>=i}'\<ihǦ|G +wol2ClIlJfPSBA~ <G +E,C~.zhtq0t>F"F1*d+3m@C*75SzpazנԷ_GC)k(M4DJI9&u-pG)H
[pGeۡ(ȹA
&ݛWtXC<5%_NNraz#(ǢxQ{rCu;voO8 +ڗͥHAZ
FsDTPQuQkR +eޞN>͘91J]'"PVK(B^\3"6z|{*Г/~4?CFA)CL,an3gkѽU_Nnٻ'yBMaNKزD4L
:@@8,?eP8TЛK 3jIo\?55!vfwFF\}SVR h@lb;r#
n6e*vC ~N҇¬zI} +A8l9J/ivuSHȷ~%+J!4_uXcE3 3,#릘1zf幙riގ{XcD.`f.DCNJsO{MJOTC^P%0mfgO 7q_jAU鶞U0wC<ih$h '4皩sw1x Ox_ux9"E>7eq6p[Z]_C`yy4%kuE {9!c0sQeH1MJt\jg놫%6r +PYt+gTJ%4^3T9Vi^h qĸyG(ѐjC;X%TڕM/E:!Fvm}ֽko_"XN^U1\{&1I%;=M)9xA[zcfq]=Җ5?3HUD2ƛߌsE4x*ariq.b4+×dP]^qhz4gb=t;:ioL!k*l5)sRO[R͙R=U=J"pl҇0nϰo+k +MeBՍGQvժZʍӬdIiZ=G?+?;.pxs!q؝[`&(5DIm@?2HC9sr1 #\^il+&1k +ii5%¥|Ds$ka&nBEMP5277`#pO(DGx͖!}$Ab8t>m8-?ǿ31_[LT|5f2JTeHVRLUWOd17gi(# +3k8cг_A?Ҙ9=[g"0wj"U:^UbIaMLcG4>q$мQ<٢6_zA{uKMS6O3jRRuVeHà&߶[APq|(gz + c$3(ӧNZ)9D5$ґC6]~ʓ7HL,z7-6>{Yڻe_HILV?FiUԜn®ЩjIXS3g'*]7<z`׳ۓh!a}CNFUu +a̙ػ^O-&v+յ5*jFa?kJ(1@I^:}K1=f8|pnR%hf}9 +&/ ЮERG7m~/ͺ-ܡ
ѝ;; ufND9>5"\QI-Ue,FfObFB:!KGhU~tA(rUBM'8(ϩ#*aL)%M{x{,<ZitAl
oJ,d}Tr}fNFDQpl4ѶLzŔhD꒴n9_,EKD&Ȑ|y1Cຒ6c\-IzN5[T"ge&B)Zz{o)Q͏=m=(EE slM` +BPaOer> )1E5D&{mr\G+7ơW +~ʟ2Z( zF+K=m?Fy7+8yRΣB +st'A&yۅxA +,{ŭR
% _bP7mܷrB+y#fG%nM
ӢxAWͭޕ$rÝgvOZ-)$"\U#zߨ'>
0M_Ղ$/FN$;'P;CşbBdK=*Ѡ)yٛU"cv9jzvJ}r)hXݭ&^dGc0h`&sd:/5 +12ź29:z<3NZ#|IþWQMPwΪ,NI {L-^xԜ(aO\f +@ltv5]:4EAa}~
Kכ`Iri͊*ڱt5ƨ]Hx7x$IuZb̀T
HfnWn_8<_tu/onXl7X}reE],)%>"Oida
+r),3+0={G9yhg~Z+dTo5ynxeF(9V#X<%D[T|ᎇWUYѢ՝`\)vKtc˱Hk&O>Rft{QjwM<Y'X2fz4mU>:^k{Ekdܾk%&I<T+{%Z84(8-os|кkN!BNh(b)㑝dդhOf,~,GO>i>kO!@yJ~Y3U)K3~3m +TeIW=ݸ^Un1E0FH(z@ CnFW8xLmg$Bۤ.4YG0.>
y?wԥvyRw9eG6zUR +[:-L7<v`x*O6qͱ&TX<3;N5EUVeֆ)ђ +m/wBz:lfh>Fxs"Uɿ$~aW"4,WW-Ұ ǯ**m$[]_}
;rDJ2Q
b<S(ϜtJ9$5C1PÅ+Ϯ.xOUJjJί* +,}hӳ|n&Q?Wy2ɠRQ_yefJܣz*N,q
se
ϲC?ytNҞt8{ ++tgg% +
wB)2mh!Y~ Zpи,b#跦g$VȭI.&ʞg:-6?~V]ÚWIQl4f}p{4WӬ^0?cxޣ9]?esUʊƇ +o1g)ZToT|c@(EX՜+[eTR*"Vgbq
[]^ ;edЀ|Rkev-dc
%CC?
WZBaA2/Nѻrڰ6"ѴLhb%TGzM*379~9X1-O"iE0ut$4ٿlg =G6Y([lQ%c0ꏬ@]*wGjֳ/P;*5ٷ/HQ\yHS6<f2j,a Ei<x~Hͭzaו~hjZkM?9҃OZk44IX]teQ8?T8C@- +)<jj:+GZ#flL[O}LY;SjX!(Q,EwBGub,?Nوo$IEgKLj0Tb+"'R_W7h_)w~Jח,C +DAj?k^`i} +7]"`)PKUky'Jŭ<
&&'[`H;QgWR, >7ʼBFK8oI\Vy[S9qzp|.]h}#Zňj~!ݎ%Z^I5H]0iLoo\:cׇǦԉsZAH@Kf)QʠbJQoL[ڲieūB!rtДZ$/t/ +}<5<Du{^z~Wh/q.E.E;nb_5ɟ]T<lȥ? +,P쀾Z`|g-V
mo#fpb= c"V<比߃G'=DTm{Q3*ESnVB1u`Hh݄͗Y,v)lDioUH,0(Odb]rvtzyi"Ye=hqlq^/d~y5}/#;Ƙ.>a눉U*O%a +짺ͺ]zYe/xnpgQ/1qΥ~7s>sf_%9T +Oi,y?Csk8K*`(Hv/>om`F7#UL5̵*P|FR
eumʏ_**cޤ&+_!Ƽ*|y[%&6JS%iyR~4IW|3]!z3~H/.s
R-OLo\eIT0BR?I>T.gD}_-MJar/Y2)~a#W!Q5Y͟vzSydtHrꗕ{Jqh&هi#pfKݥ#`&x`%jgc>#/)rag4 q\7D_=(C%P=3):/͇=|hlN ةgh&^΅DKWĸ̉'NC*r:= +8 +&d϶M];#sǻYZJ%w<7Ph&_ϹZ X,Cs.. I*94ڎ_MRpV 0<ѱS/vS⦊#XG⯠T(-Lu9>JG;2'π.(F!\<tHYOɉPٍBvI,)+ndkD.D +_Įvp¼R֝I}%GWᐩi`kMp=ZnTBEMĈs2{ۑ9##TSg[AzbPA#>aB-*ZhNŏ*{qvR
*^kH)︥ k<=Z7Q"\W)'=9"`:r=p$tTb~\ےSB<*&|ιk;@AyTBkg=OZ[j]=>J875<ڋU!W*g3G}&o+Bvp^Hr9- 7Ȣ"Ac8*R8- +Lv? +"\k]3D9>mmRc]aRc|WPͮs?+A=0AA)
`b +cP5Ӧj@,]!H[!f&Pj&+Ao.KX?ÕÌNXU +F-}wd\ZKDSFtU=bs#>] +&R؎<9uÊe;ؽ%$W#PI +|KGAXf&y!fC(mc%Dҋƻ#mMG2W +DogZW䰟0Iv(0"(¹"(b\Xb?4" ~
G~X6xV9]w߲Br90&Mj<Cb1
VQJM'iA`.F_>]g32zU9DW:rJQ?cBPsf +WӇ,(xuv%+l_es{\{"b1^qVb˭x3ѐxX7kMv9[k顇6|nټ[l>Jqֈ Ish ǵgQDfN80*Y#V<8)[!VtL$Dɹ02eu3!Tht7ފ-}^1qaɿI3eRH]w#z=ks1zBA(舅\IA]l_.)e@Xftdy]Ϥ tx%xo%hvT@YߪүdKeExIl&>'aBAeyя@ΐ˽nVBg/>?h%L8^C$
)kQM.ԢPPL8! +t^mS/Մf.B*
J&;.ă6UB'l튾0i|\і)vl\ WUZpbv?7ju/@kJ/PGA!QWdS,s=ߐ3ho/Ha'<bb,(1V'S$K9%~%1.Gu0*](N + ++u7 o䑈)XN[D7t"W T<4mZLfw~?醤&ܣpm'p jtгlKV*woZ$w/ +Y zk(FVH?56_9$7B-/B^EufN,fm>IDɀq +oA}`3(٣0/ bglмd#-?..2JhOr˄FI6(Z<;HDnt&,9aE$B=%b-B֩iPç~/T_w_6<rfn)gb$fORh7rӵ~qm/IɊWgV{Y,vz +/ұ
<أŷ"ֱ(+:UHT+ +(&k!vv:mݞ +\Ż4upG4_'O#a?A%E^~sݣ0{oTg]1\8vѫJϻ\y˿ĽDT:G"oT4@;~> zTF N +A6c#tV=6Ouc
ɅG-{^:k+h1kSx=Gh|0*&{Gxˎ_xr߬=i(3-~*( 螛+&#Gc:=j8);Px>^wեKVnB_QM~ZnB@%%`.91->BX'hbl@ϸ2di4" +K,&g R# +endstream +endobj +1334 0 obj << +/Type /FontDescriptor +/FontName /QZSXGW+CMTT9 +/Flags 4 +/FontBBox [-6 -233 542 698] +/Ascent 611 +/CapHeight 611 +/Descent -222 +/ItalicAngle 0 +/StemV 74 +/XHeight 431 +/CharSet (/A/B/C/D/E/F/I/K/L/M/N/P/S/T/U/a/asterisk/at/b/backslash/bracketleft/bracketright/c/colon/comma/d/e/f/four/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/question/quoteleft/quoteright/r/s/semicolon/slash/t/u/v/w/x/y/z) +/FontFile 1333 0 R +>> endobj +1335 0 obj << +/Length1 1166 +/Length2 8581 +/Length3 0 +/Length 9354 +/Filter /FlateDecode +>> +stream +xuseX\M-K-'kFq Kw.;wf78Ukڲj-(
;`(lMԌ,@'+mFKrJH@Ǝ XWt(Cl +r}`cckzfۿm +6R`SlPs|u1__*z{sk@+myb*`U~[-F²;ǣqDiWȺ+71CRyRR^6(T*5xd@8Pug(Hb#$eO)ˮuh%&pԂ d앐H*P~-0(x#͏tJY'jxt[сc}_{>Hͱ̄T#DǽegNa?F1c1|mMQHӾw0`.~TPmdfS9#Zm[X_XG7ߥi.9Kv~=SF7*Yx)fؓ#e'/xZoɈC8$۟R;587C|\vHXo`yYT/ԗ˃BWY(ZlL3N;x}k{zhN@KFT̘O@"igT}fCNe-+s}+!Tm#[';"#^&*kRכǦL+6:߇T)4|H&
3N5ѧKb!qExMN[`j`"&kd2Rk"17HSIx-F>BXaqY+t
|HC닧<1 +aŦQBB/9&Ĝu->V-o}Nޔ:,;fͽŝ$JԦIh?CfpC~gŵjv79+Y(?NK1T4^ŏ[R`;u1c
S%Mt6Nt& +?.?T5ܜ(S̟!s{vFT +$R[ؒXϸk(e_\T1 +*:Oc,{!eNUrѾK(EjD`?.,pYn,%%[6JKZfҫϥRz!j!yG֒LpJ7o;O!<D{a2biW` \{#}5O(ڊTր:ԟ1
[>G_T\>h̺:vY~fm99wDrrMe3C|jY6:/5)ؒuE3YDTӼ +}X[GF@*άM1ZFxhKZrM@#=.)~#Ltn.vW<=կXIwD䓉rk֫
;ah#7oHҾ:#0/Ii:HhjHE^6:ʴtߏl4 +'l.Rf2=YC>V PI͋f]Ig&E$dker]^B`87\rqb[g$,</ Zp +|[VaI(EB8lpab:A蜐@92v"-HlqҞ;,rЊ7hV}*2ئ!1EQ3.s(ip=qG\3<9G%
w\Y@~V}%UXge&Ԕ[$"[Px* +dBc=OaU^^]:;9esYEܜV0kX_-j*8Vh]
&t`D( +dF;iBH1 T4$,]LR9|x<\mVdQ|r<rƔSnoǭWC9>٪Ch7Lly$!߸;ӭNƑ(`2KHC6ĉFhS1DC>"&i; h/[CږQ,(]i0k2V +i1'B#|%'c6I}z侥z^̞TVK\bhWBC!KLD?;pccU (d'/l D
Vz"%Rbk/`P+ET!f{ 1J +nt͆'Cr&k<`e!Iȉم;<xg9ȋZZ
s<qtd<TWZ1l8e?De^ayYK<Q~v G3na[Py^eR2M?K557tDN@\@Ģ~6^F{}罨E8N(FiY{1;"2NIPLk$@Ua\&Id6æH*`≟hݿ7v
(tDooJi"B*0KǺlwp"x1cB/sޘjXn&;OS]W'W˒Vb 2.#/*hi7u}-eߪ+'(3!tinВyȼnmyjmΆ
,>:[a 8ut]w1Dݑ2
J=Z6;c +ڬtOrQA2׳S`-+R:%R~>ܾn"CЪ_c~V9O!6M~>5y9WT126ԓ,epe 7Q>khWA$Q^ƆGQ9+GS V9Щ%< ʱY^(ԻWv1TAFdBĺ`Txwy +1a.$jy&H8p)VJYWcrSkPb*8>%#3:JVQg>,-x=n_n黈vw|CM$y{l(RBQli<oΟ7;Yk5o,=9 +pם҆Ey'sb>=Xh9%M=cpLY튙v +j\>#h!;{;Y/BG]ADKz{S1YHJkЉ/RN+NjRhYUyKy~5jй,
,#pfјxM&/#AjW;e|ϞJ@MrO>.ǰ0^$CWd&NZD<{3\93NلHAT:q];{Æ invf<юL_k`%i]mXv>
6`7m&
; +Բ6lqR}QqܕtJzJTEw۷)5&mKD9۞ʅ\Ss6?rqE(mR,]oOCx]tdWnDb0}mJ>:=r[\]3&VKBU"fS4}#'aCᅩ?'J1<jBto-& + k7DuwW TK4:g +:arB bH6˪K9H8jD¿-՟\iIŀo}dR6Z&3
!U/+\7Jq'/RE5s8[!Foяq%7KAyFca)&^ff浒h>\q&rVxPR#-%F
Tߞ\4(l~+>rیizy&MK9>,Kp4Vz7/'K[FlɬJ^M<ϾGmq5eH噳:R=A*c8*yLFRmTUѫ7*+ U|zwAkQ{,&݂M1hW_-(_:<I()I,9!qf7ϿIQ,#5E$b=RL|12 tDZEMƗnzab\9W;p+JH$4a|ʿc4b:1TpqJ%bgT?[W>,0|>c=<S&\/r+e)r71;HGB5*I%\9e/ýg:ky7F +Y[FOVWnG͗AD=0 й{ssaDjnC~#89څ/O#1_11:}^G|TYm[__׀P#@z}jC|}7n![Zcj:ZE**_=_:'BrD4q[B~"nlN#V=k?wg- +Ij(K 4I{b %(u^&,N;S Z?},iJޠ鲩?|9d\ݫ q'@-VCO!!<EGS0B#_gyHNFuR1,_|!_<2>ς +v@ *N7s!(+W%Nc]Vϓ:U{o-n+'dAɮV`yrMmG¼Bil쒞0cY#EGGן @D; +endstream +endobj +1336 0 obj << +/Type /FontDescriptor +/FontName /XZXKZC+NimbusSanL-Regu +/Flags 4 +/FontBBox [-174 -285 1001 953] +/Ascent 712 +/CapHeight 712 +/Descent -213 +/ItalicAngle 0 +/StemV 85 +/XHeight 523 +/CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/a/b/c/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/question/quoteleft/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) +/FontFile 1335 0 R +>> endobj +1337 0 obj << +/Length1 1583 +/Length2 1057 +/Length3 0 +/Length 1845 +/Filter /FlateDecode +>> +stream +xڭTkTSWE *B=Jy@WGAĄJQ˽'Br
& j)8ZPtDQ!P`(2>X]TEqI2ZZ{9Y(;t)I,$x(66~,x105kq[`hF˒XrZoXgyT bz*9@A [+ + ! RT@Q8&qHq(hFA/01'1! +TIи:RC41 +KͣWL}C߈̱Jo̱<j*K@־O,TiY4f=%**ZԗR"$HHI +LT0)*-PuK^U7)bH. YXX
ɇi4Ы@x +ZtN"$rw^"%N],x
ƳDM"þѦ14+)&= +,g
_o^- &3g55yqvg^Lh1<1bŅ[CoO)*۰&#_9(ч.V^rfUPd~x3=bYw&kִ<oiîϗ\~oܤ\;{><|qyQL}!U'fGG=J1ڐcu/n<+ݘɮ-}בQJB|$l3],32XD>J/yI~F<8M)/O.#㇗' ˬɠ}*Dאڕx?s"Tk +{n5ח!VEj]%q/קɻ⓷:UƭOn5>CN;}̃ҬU>ɯ.+{g5GKߖ=}*TJG0y|,ġwuv}QvNȍρE| 7
lomeC٦KBlR69Ѭ@T#qr;%g;XxsjʼnS2&&=}[ͅś37nOk1ʧN?~rk&#?-nޗ
/ZCbxUmԀF,g~T!1k=iZ#v6ȍr.zȪemD/jj5b'#|:(y|8yZOѶ[SU~\zďh^ +endstream +endobj +1338 0 obj << +/Type /FontDescriptor +/FontName /PIQTTY+Dingbats +/Flags 4 +/FontBBox [-1 -143 981 819] +/Ascent 708 +/CapHeight 708 +/Descent 0 +/ItalicAngle 0 +/StemV 0 +/XHeight 400 +/CharSet (/a35/a36) +/FontFile 1337 0 R +>> endobj +1339 0 obj << +/Length1 1071 +/Length2 6078 +/Length3 0 +/Length 6816 +/Filter /FlateDecode +>> +stream +xڍTTTmץQZKgD:DQARSE@S7[g?9<{9YUpW&(AS
uA + + +B7R~W?5<nfg* +G#h` ]@k EA@|䄅}]@w]B ժI * + + +ޚM@d,\:yxJn[8R݈AeЖ\3o"肕?ԓ[?Dp*z&x4띝q,4a;>Vj|_ᆜ +q]'01giUx*҂sSt7{lXJGPQouض廊Q;9,*m/|vױѷ1lisʆĭ&eDUVpsL.|D>cO߈YV{ĽP=Jy1Rt8⵿n/İ,YxU=pNoSnyYb+qO!%땩WbAoZ(ݷ8E[U/cWi#xH3]m̚AI/J"
O/|fIz!!uIkD%g!#*LhY&.fd=\,oA7ʪm嚆<'`gq*mJ+zQV8 +{4aP;5J5.$ONS&V$؞6klnHnlk)@On8Szԓl۶+`EVpXZͮڤDKyyǴXkPR?*g}L[{B{Oxf:ۻ=6r#tjuupW%l +'}2U/5:-Yռ!n]ߤSq@-_-^AئHjҘ^D,:e92jy8MՇ|o`m^1?f8]W!}GwnK#Sq cH,7&{3yigg6ψq4ē?Ͷ<' 0 J|.[aXE9ƾ6Z#k2Uť +saBhOG6l0\n< t ?]r-7Яm-|H"#)iڏpe0gk|۔p+{"Λ'g@U1^ĐS:<uGm'F8S\!>=sWY/UB +*&-/3OFL/9RfW1SODc,>Gf6Z5ki-L nMSC7Uh'`r!U_`_xpG-ԪDuKmK,.'Q_p"p:Q:I[9QFr~=9R?f1*jfs=#/tVhwn6@n<\ 3cLa%5a5~08$Ϳ]#T}9'?<gڼKK~un<I^]bJnY=NNJh<8rvixźPb
5[Mw&Q!ntn#mx~~4GYޒɲz[ǐ"CG3K7&-qㇲ:S%'Ƅ<STͲ[L^qvj<R(X`zrQf,Xդ4O-\ +4:✽8ό3j&UD9Kk%ٶ8SqwLDҰ
k%?A#ݡ3dGb&X/'*>cEsn]TsKZ6(,c|vKk~._E-eQXﭖNz^/YN߉~c,Pd4z: %WYv~AwODtH?ǰ8>L4|7/۞K5NBWs)3ɹlPΞS[ul=L- +8xɏI + 01Gvj'#癟MZ[_[Jtt,oT@}ep]*sv'F1~~~ +V-o|:ެX5MvhVˈ1Bؿ4<9 {(hK&,Ι3.j &S5=im3HٯC6, In):䥙(ljrS{hضYMCN[E~*8{ˠ@Zת<rCr2;5;&ٳ7V}`{A#0?(VOLSg- Ӷ{y4v `-ϚIwSʀŴQ;s*I=$kb䍢|j;V:R8]<f|-
ƓiQ%3UOᤅ&ؾ&ѯ3f}13t؇?N97;/X~GV52S6lۉD~o<ǐ$;SD+0?)`˔k|&=)m3֮<܉^cMʐ=?'&N7W5EI,J$q2v]-{T
&#rT-T*7y~V=>
i|nŭq#3W&HՐXl +kn#>n8:R<P"o$>VP><՝n*p,ˏ4=v|L2Y +_/1%oNszWA80ֆ,c6cL-!?tۋ+I7PxT +:|&Dy/(uv<-}RxP:6Ѵr_t>ONmRI5xJVaϗ1\)[ƷBߛN0J4/#OV2g771Λ>ϴ 7&2|5iAM>Imt|D+YK: +7ςID9p"\F٭Oɾ +!*1̷,k1]g롦y[VFc^rR7[j0YRt#
n$Q~?͘VBŅ_? w2R #OJOgÈMHo(Z+(YIp奀,`4wӵܘdD2
Y.Θ'S˺@Ib M4=9)azۇl<h6(($LuzI3הmug"kMhUp{a799f䬈2[^[j +gЄШݾ~<lо܌%|aKk[ +endstream +endobj +1340 0 obj << +/Type /FontDescriptor +/FontName /OWESMI+ygoth-Regular +/Flags 4 +/FontBBox [-93 -249 999 751] +/Ascent 676 +/CapHeight 683 +/Descent -170 +/ItalicAngle 0 +/StemV 84 +/XHeight 472 +/CharSet (/T) +/FontFile 1339 0 R +>> endobj +1265 0 obj << +/Type /Encoding +/Differences [2/fi 39/quoteright 45/hyphen/period 48/zero/one/two/three/four/five/six/seven/eight/nine 63/question 65/A/B/C/D/E/F/G/H/I 75/K/L/M/N/O/P 82/R/S/T/U/V/W 96/quoteleft/a/b/c/d/e/f/g/h/i 107/k/l/m/n/o/p 114/r/s/t/u/v/w/x/y/z] +>> endobj +509 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /YTAPJQ+CMBX10 +/FontDescriptor 1278 0 R +/FirstChar 46 +/LastChar 116 +/Widths 1250 0 R +>> endobj +482 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /TXUDPL+CMBX8 +/FontDescriptor 1280 0 R +/FirstChar 49 +/LastChar 116 +/Widths 1253 0 R +>> endobj +366 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /FZBEAX+CMBX9 +/FontDescriptor 1282 0 R +/FirstChar 12 +/LastChar 121 +/Widths 1264 0 R +>> endobj +354 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /BHAYOR+CMCSC10 +/FontDescriptor 1284 0 R +/FirstChar 48 +/LastChar 121 +/Widths 1276 0 R +>> endobj +570 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /RQDIHO+CMITT10 +/FontDescriptor 1286 0 R +/FirstChar 97 +/LastChar 110 +/Widths 1249 0 R +>> endobj +508 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /AOQIHG+CMMI10 +/FontDescriptor 1288 0 R +/FirstChar 34 +/LastChar 63 +/Widths 1251 0 R +>> endobj +925 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /EUWLHT+CMMI12 +/FontDescriptor 1290 0 R +/FirstChar 110 +/LastChar 110 +/Widths 1244 0 R +>> endobj +484 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /VPXNPA+CMMI8 +/FontDescriptor 1292 0 R +/FirstChar 63 +/LastChar 63 +/Widths 1252 0 R +>> endobj +424 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /AREXYY+CMMI9 +/FontDescriptor 1294 0 R +/FirstChar 63 +/LastChar 110 +/Widths 1261 0 R +>> endobj +418 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /IVVCPC+CMR10 +/FontDescriptor 1296 0 R +/FirstChar 11 +/LastChar 124 +/Widths 1262 0 R +>> endobj +363 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /RFMHPY+CMR12 +/FontDescriptor 1298 0 R +/FirstChar 39 +/LastChar 121 +/Widths 1268 0 R +>> endobj +360 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /LNDTUN+CMR17 +/FontDescriptor 1300 0 R +/FirstChar 80 +/LastChar 107 +/Widths 1271 0 R +>> endobj +435 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /RKGDEA+CMR5 +/FontDescriptor 1302 0 R +/FirstChar 48 +/LastChar 57 +/Widths 1256 0 R +>> endobj +357 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /RRSQIK+CMR6 +/FontDescriptor 1304 0 R +/FirstChar 46 +/LastChar 116 +/Widths 1273 0 R +>> endobj +434 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /VMLIHR+CMR7 +/FontDescriptor 1306 0 R +/FirstChar 49 +/LastChar 65 +/Widths 1257 0 R +>> endobj +364 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /KEEURS+CMR8 +/FontDescriptor 1308 0 R +/FirstChar 11 +/LastChar 121 +/Widths 1267 0 R +>> endobj +355 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /DQIRGC+CMR9 +/FontDescriptor 1310 0 R +/FirstChar 12 +/LastChar 123 +/Widths 1275 0 R +>> endobj +444 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /PLXAMA+CMSY10 +/FontDescriptor 1312 0 R +/FirstChar 0 +/LastChar 106 +/Widths 1255 0 R +>> endobj +714 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /QPLLIX+CMSY6 +/FontDescriptor 1314 0 R +/FirstChar 121 +/LastChar 121 +/Widths 1247 0 R +>> endobj +711 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /QRYJNG+CMSY7 +/FontDescriptor 1316 0 R +/FirstChar 121 +/LastChar 121 +/Widths 1248 0 R +>> endobj +849 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /AOKQCL+CMSY8 +/FontDescriptor 1318 0 R +/FirstChar 104 +/LastChar 105 +/Widths 1245 0 R +>> endobj +358 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /GPILSQ+CMSY9 +/FontDescriptor 1320 0 R +/FirstChar 13 +/LastChar 105 +/Widths 1272 0 R +>> endobj +432 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /NZWOBG+CMTCSC10 +/FontDescriptor 1322 0 R +/FirstChar 101 +/LastChar 121 +/Widths 1259 0 R +>> endobj +445 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /ERCOAY+CMTI10 +/FontDescriptor 1324 0 R +/FirstChar 39 +/LastChar 121 +/Widths 1254 0 R +>> endobj +827 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /VUVKKS+CMTI9 +/FontDescriptor 1326 0 R +/FirstChar 67 +/LastChar 120 +/Widths 1246 0 R +>> endobj +433 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /DGNVVH+CMTT10 +/FontDescriptor 1328 0 R +/FirstChar 33 +/LastChar 126 +/Widths 1258 0 R +>> endobj +361 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /HJBIEC+CMTT12 +/FontDescriptor 1330 0 R +/FirstChar 92 +/LastChar 121 +/Widths 1270 0 R +>> endobj +377 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /CHOSQE+CMTT8 +/FontDescriptor 1332 0 R +/FirstChar 44 +/LastChar 125 +/Widths 1263 0 R +>> endobj +356 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /QZSXGW+CMTT9 +/FontDescriptor 1334 0 R +/FirstChar 39 +/LastChar 122 +/Widths 1274 0 R +>> endobj +365 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /XZXKZC+NimbusSanL-Regu +/FontDescriptor 1336 0 R +/FirstChar 2 +/LastChar 122 +/Widths 1266 0 R +/Encoding 1265 0 R +>> endobj +362 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /PIQTTY+Dingbats +/FontDescriptor 1338 0 R +/FirstChar 72 +/LastChar 73 +/Widths 1269 0 R +>> endobj +431 0 obj << +/Type /Font +/Subtype /Type1 +/BaseFont /OWESMI+ygoth-Regular +/FontDescriptor 1340 0 R +/FirstChar 84 +/LastChar 84 +/Widths 1260 0 R +>> endobj +378 0 obj << +/Type /Pages +/Count 6 +/Parent 1341 0 R +/Kids [305 0 R 415 0 R 441 0 R 478 0 R 492 0 R 499 0 R] +>> endobj +510 0 obj << +/Type /Pages +/Count 6 +/Parent 1341 0 R +/Kids [505 0 R 514 0 R 520 0 R 526 0 R 531 0 R 537 0 R] +>> endobj +545 0 obj << +/Type /Pages +/Count 6 +/Parent 1341 0 R +/Kids [542 0 R 550 0 R 556 0 R 562 0 R 567 0 R 573 0 R] +>> endobj +581 0 obj << +/Type /Pages +/Count 6 +/Parent 1341 0 R +/Kids [578 0 R 584 0 R 592 0 R 599 0 R 604 0 R 609 0 R] +>> endobj +619 0 obj << +/Type /Pages +/Count 6 +/Parent 1341 0 R +/Kids [616 0 R 625 0 R 632 0 R 639 0 R 645 0 R 651 0 R] +>> endobj +659 0 obj << +/Type /Pages +/Count 6 +/Parent 1341 0 R +/Kids [656 0 R 665 0 R 671 0 R 677 0 R 684 0 R 697 0 R] +>> endobj +715 0 obj << +/Type /Pages +/Count 6 +/Parent 1342 0 R +/Kids [708 0 R 718 0 R 723 0 R 728 0 R 733 0 R 823 0 R] +>> endobj +864 0 obj << +/Type /Pages +/Count 6 +/Parent 1342 0 R +/Kids [842 0 R 869 0 R 874 0 R 879 0 R 884 0 R 891 0 R] +>> endobj +900 0 obj << +/Type /Pages +/Count 6 +/Parent 1342 0 R +/Kids [897 0 R 903 0 R 908 0 R 915 0 R 922 0 R 928 0 R] +>> endobj +944 0 obj << +/Type /Pages +/Count 6 +/Parent 1342 0 R +/Kids [935 0 R 947 0 R 954 0 R 960 0 R 966 0 R 1070 0 R] +>> endobj +1218 0 obj << +/Type /Pages +/Count 2 +/Parent 1342 0 R +/Kids [1215 0 R 1241 0 R] +>> endobj +1341 0 obj << +/Type /Pages +/Count 36 +/Parent 1343 0 R +/Kids [378 0 R 510 0 R 545 0 R 581 0 R 619 0 R 659 0 R] +>> endobj +1342 0 obj << +/Type /Pages +/Count 26 +/Parent 1343 0 R +/Kids [715 0 R 864 0 R 900 0 R 944 0 R 1218 0 R] +>> endobj +1343 0 obj << +/Type /Pages +/Count 62 +/Kids [1341 0 R 1342 0 R] +>> endobj +1344 0 obj << +/Type /Outlines +/First 3 0 R +/Last 0 0 R +/Count 19 +>> endobj +302 0 obj << +/Title 303 0 R +/A 301 0 R +/Parent 1344 0 R +/Prev 291 0 R +>> endobj +299 0 obj << +/Title 300 0 R +/A 297 0 R +/Parent 291 0 R +/Prev 295 0 R +>> endobj +295 0 obj << +/Title 296 0 R +/A 293 0 R +/Parent 291 0 R +/Next 299 0 R +>> endobj +291 0 obj << +/Title 292 0 R +/A 289 0 R +/Parent 1344 0 R +/Prev 275 0 R +/Next 302 0 R +/First 295 0 R +/Last 299 0 R +/Count -2 +>> endobj +287 0 obj << +/Title 288 0 R +/A 285 0 R +/Parent 275 0 R +/Prev 283 0 R +>> endobj +283 0 obj << +/Title 284 0 R +/A 281 0 R +/Parent 275 0 R +/Prev 279 0 R +/Next 287 0 R +>> endobj +279 0 obj << +/Title 280 0 R +/A 277 0 R +/Parent 275 0 R +/Next 283 0 R +>> endobj +275 0 obj << +/Title 276 0 R +/A 273 0 R +/Parent 1344 0 R +/Prev 211 0 R +/Next 291 0 R +/First 279 0 R +/Last 287 0 R +/Count -3 +>> endobj +271 0 obj << +/Title 272 0 R +/A 269 0 R +/Parent 211 0 R +/Prev 267 0 R +>> endobj +267 0 obj << +/Title 268 0 R +/A 265 0 R +/Parent 211 0 R +/Prev 263 0 R +/Next 271 0 R +>> endobj +263 0 obj << +/Title 264 0 R +/A 261 0 R +/Parent 211 0 R +/Prev 259 0 R +/Next 267 0 R +>> endobj +259 0 obj << +/Title 260 0 R +/A 257 0 R +/Parent 211 0 R +/Prev 255 0 R +/Next 263 0 R +>> endobj +255 0 obj << +/Title 256 0 R +/A 253 0 R +/Parent 211 0 R +/Prev 251 0 R +/Next 259 0 R +>> endobj +251 0 obj << +/Title 252 0 R +/A 249 0 R +/Parent 211 0 R +/Prev 247 0 R +/Next 255 0 R +>> endobj +247 0 obj << +/Title 248 0 R +/A 245 0 R +/Parent 211 0 R +/Prev 243 0 R +/Next 251 0 R +>> endobj +243 0 obj << +/Title 244 0 R +/A 241 0 R +/Parent 211 0 R +/Prev 239 0 R +/Next 247 0 R +>> endobj +239 0 obj << +/Title 240 0 R +/A 237 0 R +/Parent 211 0 R +/Prev 235 0 R +/Next 243 0 R +>> endobj +235 0 obj << +/Title 236 0 R +/A 233 0 R +/Parent 211 0 R +/Prev 231 0 R +/Next 239 0 R +>> endobj +231 0 obj << +/Title 232 0 R +/A 229 0 R +/Parent 211 0 R +/Prev 227 0 R +/Next 235 0 R +>> endobj +227 0 obj << +/Title 228 0 R +/A 225 0 R +/Parent 211 0 R +/Prev 223 0 R +/Next 231 0 R +>> endobj +223 0 obj << +/Title 224 0 R +/A 221 0 R +/Parent 211 0 R +/Prev 219 0 R +/Next 227 0 R +>> endobj +219 0 obj << +/Title 220 0 R +/A 217 0 R +/Parent 211 0 R +/Prev 215 0 R +/Next 223 0 R +>> endobj +215 0 obj << +/Title 216 0 R +/A 213 0 R +/Parent 211 0 R +/Next 219 0 R +>> endobj +211 0 obj << +/Title 212 0 R +/A 209 0 R +/Parent 1344 0 R +/Prev 191 0 R +/Next 275 0 R +/First 215 0 R +/Last 271 0 R +/Count -15 +>> endobj +207 0 obj << +/Title 208 0 R +/A 205 0 R +/Parent 191 0 R +/Prev 203 0 R +>> endobj +203 0 obj << +/Title 204 0 R +/A 201 0 R +/Parent 191 0 R +/Prev 199 0 R +/Next 207 0 R +>> endobj +199 0 obj << +/Title 200 0 R +/A 197 0 R +/Parent 191 0 R +/Prev 195 0 R +/Next 203 0 R +>> endobj +195 0 obj << +/Title 196 0 R +/A 193 0 R +/Parent 191 0 R +/Next 199 0 R +>> endobj +191 0 obj << +/Title 192 0 R +/A 189 0 R +/Parent 1344 0 R +/Prev 179 0 R +/Next 211 0 R +/First 195 0 R +/Last 207 0 R +/Count -4 +>> endobj +187 0 obj << +/Title 188 0 R +/A 185 0 R +/Parent 179 0 R +/Prev 183 0 R +>> endobj +183 0 obj << +/Title 184 0 R +/A 181 0 R +/Parent 179 0 R +/Next 187 0 R +>> endobj +179 0 obj << +/Title 180 0 R +/A 177 0 R +/Parent 1344 0 R +/Prev 171 0 R +/Next 191 0 R +/First 183 0 R +/Last 187 0 R +/Count -2 +>> endobj +175 0 obj << +/Title 176 0 R +/A 173 0 R +/Parent 171 0 R +>> endobj +171 0 obj << +/Title 172 0 R +/A 169 0 R +/Parent 1344 0 R +/Prev 167 0 R +/Next 179 0 R +/First 175 0 R +/Last 175 0 R +/Count -1 +>> endobj +167 0 obj << +/Title 168 0 R +/A 165 0 R +/Parent 1344 0 R +/Prev 155 0 R +/Next 171 0 R +>> endobj +163 0 obj << +/Title 164 0 R +/A 161 0 R +/Parent 155 0 R +/Prev 159 0 R +>> endobj +159 0 obj << +/Title 160 0 R +/A 157 0 R +/Parent 155 0 R +/Next 163 0 R +>> endobj +155 0 obj << +/Title 156 0 R +/A 153 0 R +/Parent 1344 0 R +/Prev 151 0 R +/Next 167 0 R +/First 159 0 R +/Last 163 0 R +/Count -2 +>> endobj +151 0 obj << +/Title 152 0 R +/A 149 0 R +/Parent 1344 0 R +/Prev 147 0 R +/Next 155 0 R +>> endobj +147 0 obj << +/Title 148 0 R +/A 145 0 R +/Parent 1344 0 R +/Prev 143 0 R +/Next 151 0 R +>> endobj +143 0 obj << +/Title 144 0 R +/A 141 0 R +/Parent 1344 0 R +/Prev 139 0 R +/Next 147 0 R +>> endobj +139 0 obj << +/Title 140 0 R +/A 137 0 R +/Parent 1344 0 R +/Prev 135 0 R +/Next 143 0 R +>> endobj +135 0 obj << +/Title 136 0 R +/A 133 0 R +/Parent 1344 0 R +/Prev 131 0 R +/Next 139 0 R +>> endobj +131 0 obj << +/Title 132 0 R +/A 129 0 R +/Parent 1344 0 R +/Prev 87 0 R +/Next 135 0 R +>> endobj +127 0 obj << +/Title 128 0 R +/A 125 0 R +/Parent 87 0 R +/Prev 119 0 R +>> endobj +123 0 obj << +/Title 124 0 R +/A 121 0 R +/Parent 119 0 R +>> endobj +119 0 obj << +/Title 120 0 R +/A 117 0 R +/Parent 87 0 R +/Prev 115 0 R +/Next 127 0 R +/First 123 0 R +/Last 123 0 R +/Count -1 +>> endobj +115 0 obj << +/Title 116 0 R +/A 113 0 R +/Parent 87 0 R +/Prev 111 0 R +/Next 119 0 R +>> endobj +111 0 obj << +/Title 112 0 R +/A 109 0 R +/Parent 87 0 R +/Prev 107 0 R +/Next 115 0 R +>> endobj +107 0 obj << +/Title 108 0 R +/A 105 0 R +/Parent 87 0 R +/Prev 103 0 R +/Next 111 0 R +>> endobj +103 0 obj << +/Title 104 0 R +/A 101 0 R +/Parent 87 0 R +/Prev 99 0 R +/Next 107 0 R +>> endobj +99 0 obj << +/Title 100 0 R +/A 97 0 R +/Parent 87 0 R +/Prev 95 0 R +/Next 103 0 R +>> endobj +95 0 obj << +/Title 96 0 R +/A 93 0 R +/Parent 87 0 R +/Prev 91 0 R +/Next 99 0 R +>> endobj +91 0 obj << +/Title 92 0 R +/A 89 0 R +/Parent 87 0 R +/Next 95 0 R +>> endobj +87 0 obj << +/Title 88 0 R +/A 85 0 R +/Parent 1344 0 R +/Prev 15 0 R +/Next 131 0 R +/First 91 0 R +/Last 127 0 R +/Count -9 +>> endobj +83 0 obj << +/Title 84 0 R +/A 81 0 R +/Parent 15 0 R +/Prev 79 0 R +>> endobj +79 0 obj << +/Title 80 0 R +/A 77 0 R +/Parent 15 0 R +/Prev 71 0 R +/Next 83 0 R +>> endobj +75 0 obj << +/Title 76 0 R +/A 73 0 R +/Parent 71 0 R +>> endobj +71 0 obj << +/Title 72 0 R +/A 69 0 R +/Parent 15 0 R +/Prev 67 0 R +/Next 79 0 R +/First 75 0 R +/Last 75 0 R +/Count -1 +>> endobj +67 0 obj << +/Title 68 0 R +/A 65 0 R +/Parent 15 0 R +/Prev 59 0 R +/Next 71 0 R +>> endobj +63 0 obj << +/Title 64 0 R +/A 61 0 R +/Parent 59 0 R +>> endobj +59 0 obj << +/Title 60 0 R +/A 57 0 R +/Parent 15 0 R +/Prev 47 0 R +/Next 67 0 R +/First 63 0 R +/Last 63 0 R +/Count -1 +>> endobj +55 0 obj << +/Title 56 0 R +/A 53 0 R +/Parent 47 0 R +/Prev 51 0 R +>> endobj +51 0 obj << +/Title 52 0 R +/A 49 0 R +/Parent 47 0 R +/Next 55 0 R +>> endobj +47 0 obj << +/Title 48 0 R +/A 45 0 R +/Parent 15 0 R +/Prev 39 0 R +/Next 59 0 R +/First 51 0 R +/Last 55 0 R +/Count -2 +>> endobj +43 0 obj << +/Title 44 0 R +/A 41 0 R +/Parent 39 0 R +>> endobj +39 0 obj << +/Title 40 0 R +/A 37 0 R +/Parent 15 0 R +/Prev 31 0 R +/Next 47 0 R +/First 43 0 R +/Last 43 0 R +/Count -1 +>> endobj +35 0 obj << +/Title 36 0 R +/A 33 0 R +/Parent 31 0 R +>> endobj +31 0 obj << +/Title 32 0 R +/A 29 0 R +/Parent 15 0 R +/Prev 23 0 R +/Next 39 0 R +/First 35 0 R +/Last 35 0 R +/Count -1 +>> endobj +27 0 obj << +/Title 28 0 R +/A 25 0 R +/Parent 23 0 R +>> endobj +23 0 obj << +/Title 24 0 R +/A 21 0 R +/Parent 15 0 R +/Prev 19 0 R +/Next 31 0 R +/First 27 0 R +/Last 27 0 R +/Count -1 +>> endobj +19 0 obj << +/Title 20 0 R +/A 17 0 R +/Parent 15 0 R +/Next 23 0 R +>> endobj +15 0 obj << +/Title 16 0 R +/A 13 0 R +/Parent 1344 0 R +/Prev 11 0 R +/Next 87 0 R +/First 19 0 R +/Last 83 0 R +/Count -10 +>> endobj +11 0 obj << +/Title 12 0 R +/A 9 0 R +/Parent 1344 0 R +/Prev 3 0 R +/Next 15 0 R +>> endobj +7 0 obj << +/Title 8 0 R +/A 5 0 R +/Parent 3 0 R +>> endobj +3 0 obj << +/Title 4 0 R +/A 1 0 R +/Parent 1344 0 R +/Next 11 0 R +/First 7 0 R +/Last 7 0 R +/Count -1 +>> endobj +1345 0 obj << +/Names [(0180000:0.0.1.2) 298 0 R (0180000:0.0.2.2) 294 0 R (Doc-Start) 359 0 R (Item.1) 687 0 R (Item.10) 942 0 R (Item.11) 950 0 R] +/Limits [(0180000:0.0.1.2) (Item.11)] +>> endobj +1346 0 obj << +/Names [(Item.12) 951 0 R (Item.2) 688 0 R (Item.3) 689 0 R (Item.4) 690 0 R (Item.5) 691 0 R (Item.6) 692 0 R] +/Limits [(Item.12) (Item.6)] +>> endobj +1347 0 obj << +/Names [(Item.7) 939 0 R (Item.8) 940 0 R (Item.9) 941 0 R (hy@ltablenote1.1) 483 0 R (hy@ltablenote1.2) 485 0 R (hy@ltablenote1.3) 486 0 R] +/Limits [(Item.7) (hy@ltablenote1.3)] +>> endobj +1348 0 obj << +/Names [(hy@ltablenote1.4) 487 0 R (hy@ltablenote2.1) 830 0 R (hy@ltablenote2.10) 854 0 R (hy@ltablenote2.11) 855 0 R (hy@ltablenote2.12) 856 0 R (hy@ltablenote2.13) 857 0 R] +/Limits [(hy@ltablenote1.4) (hy@ltablenote2.13)] +>> endobj +1349 0 obj << +/Names [(hy@ltablenote2.14) 858 0 R (hy@ltablenote2.15) 859 0 R (hy@ltablenote2.16) 860 0 R (hy@ltablenote2.17) 861 0 R (hy@ltablenote2.18) 862 0 R (hy@ltablenote2.2) 845 0 R] +/Limits [(hy@ltablenote2.14) (hy@ltablenote2.2)] +>> endobj +1350 0 obj << +/Names [(hy@ltablenote2.3) 846 0 R (hy@ltablenote2.4) 847 0 R (hy@ltablenote2.5) 848 0 R (hy@ltablenote2.6) 850 0 R (hy@ltablenote2.7) 851 0 R (hy@ltablenote2.8) 852 0 R] +/Limits [(hy@ltablenote2.3) (hy@ltablenote2.8)] +>> endobj +1351 0 obj << +/Names [(hy@ltablenote2.9) 853 0 R (hy@ltsfn11) 436 0 R (hy@ltsfn12) 437 0 R (hy@ltsfn13) 446 0 R (hy@ltsfn14) 495 0 R (hy@ltsfn15) 502 0 R] +/Limits [(hy@ltablenote2.9) (hy@ltsfn15)] +>> endobj +1352 0 obj << +/Names [(hy@ltsfn16) 523 0 R (hy@ltsfn17) 635 0 R (hy@ltsfn18) 694 0 R (hy@ltsfn19) 712 0 R (hy@ltsfn21) 713 0 R (hy@ltsfn22) 828 0 R] +/Limits [(hy@ltsfn16) (hy@ltsfn22)] +>> endobj +1353 0 obj << +/Names [(hy@ltsfn23) 918 0 R (hy@ltsfn24) 919 0 R (hy@ltsfn25) 943 0 R (macro\040line.179) 596 0 R (note.15.1) 829 0 R (note.4.3) 636 0 R] +/Limits [(hy@ltsfn23) (note.4.3)] +>> endobj +1354 0 obj << +/Names [(page.1) 353 0 R (page.10) 528 0 R (page.11) 533 0 R (page.12) 539 0 R (page.13) 544 0 R (page.14) 552 0 R] +/Limits [(page.1) (page.14)] +>> endobj +1355 0 obj << +/Names [(page.15) 558 0 R (page.16) 564 0 R (page.17) 569 0 R (page.18) 575 0 R (page.19) 580 0 R (page.2) 417 0 R] +/Limits [(page.15) (page.2)] +>> endobj +1356 0 obj << +/Names [(page.20) 586 0 R (page.21) 594 0 R (page.22) 601 0 R (page.23) 606 0 R (page.24) 611 0 R (page.25) 618 0 R] +/Limits [(page.20) (page.25)] +>> endobj +1357 0 obj << +/Names [(page.26) 627 0 R (page.27) 634 0 R (page.28) 641 0 R (page.29) 647 0 R (page.3) 443 0 R (page.30) 653 0 R] +/Limits [(page.26) (page.30)] +>> endobj +1358 0 obj << +/Names [(page.31) 658 0 R (page.32) 667 0 R (page.33) 673 0 R (page.34) 679 0 R (page.35) 686 0 R (page.36) 699 0 R] +/Limits [(page.31) (page.36)] +>> endobj +1359 0 obj << +/Names [(page.37) 710 0 R (page.38) 720 0 R (page.39) 725 0 R (page.4) 480 0 R (page.40) 730 0 R (page.41) 735 0 R] +/Limits [(page.37) (page.41)] +>> endobj +1360 0 obj << +/Names [(page.42) 825 0 R (page.43) 844 0 R (page.44) 871 0 R (page.45) 876 0 R (page.46) 881 0 R (page.47) 886 0 R] +/Limits [(page.42) (page.47)] +>> endobj +1361 0 obj << +/Names [(page.48) 893 0 R (page.49) 899 0 R (page.5) 494 0 R (page.50) 905 0 R (page.51) 910 0 R (page.52) 917 0 R] +/Limits [(page.48) (page.52)] +>> endobj +1362 0 obj << +/Names [(page.53) 924 0 R (page.54) 930 0 R (page.55) 937 0 R (page.56) 949 0 R (page.57) 956 0 R (page.58) 962 0 R] +/Limits [(page.53) (page.58)] +>> endobj +1363 0 obj << +/Names [(page.59) 968 0 R (page.6) 501 0 R (page.60) 1072 0 R (page.61) 1217 0 R (page.62) 1243 0 R (page.7) 507 0 R] +/Limits [(page.59) (page.7)] +>> endobj +1364 0 obj << +/Names [(page.8) 516 0 R (page.9) 522 0 R (section.1) 2 0 R (section.10) 150 0 R (section.11) 154 0 R (section.12) 166 0 R] +/Limits [(page.8) (section.12)] +>> endobj +1365 0 obj << +/Names [(section.13) 170 0 R (section.14) 178 0 R (section.15) 190 0 R (section.16) 210 0 R (section.17) 274 0 R (section.18) 290 0 R] +/Limits [(section.13) (section.18)] +>> endobj +1366 0 obj << +/Names [(section.2) 10 0 R (section.3) 14 0 R (section.4) 86 0 R (section.5) 130 0 R (section.6) 134 0 R (section.7) 138 0 R] +/Limits [(section.2) (section.7)] +>> endobj +1367 0 obj << +/Names [(section.8) 142 0 R (section.9) 146 0 R (subsection.1.1) 6 0 R (subsection.11.1) 158 0 R (subsection.11.2) 162 0 R (subsection.13.1) 174 0 R] +/Limits [(section.8) (subsection.13.1)] +>> endobj +1368 0 obj << +/Names [(subsection.14.1) 182 0 R (subsection.14.2) 186 0 R (subsection.15.1) 194 0 R (subsection.15.2) 198 0 R (subsection.15.3) 202 0 R (subsection.15.4) 206 0 R] +/Limits [(subsection.14.1) (subsection.15.4)] +>> endobj +1369 0 obj << +/Names [(subsection.16.1) 214 0 R (subsection.16.10) 250 0 R (subsection.16.11) 254 0 R (subsection.16.12) 258 0 R (subsection.16.13) 262 0 R (subsection.16.14) 266 0 R] +/Limits [(subsection.16.1) (subsection.16.14)] +>> endobj +1370 0 obj << +/Names [(subsection.16.15) 270 0 R (subsection.16.2) 218 0 R (subsection.16.3) 222 0 R (subsection.16.4) 226 0 R (subsection.16.5) 230 0 R (subsection.16.6) 234 0 R] +/Limits [(subsection.16.15) (subsection.16.6)] +>> endobj +1371 0 obj << +/Names [(subsection.16.7) 238 0 R (subsection.16.8) 242 0 R (subsection.16.9) 246 0 R (subsection.17.1) 278 0 R (subsection.17.2) 282 0 R (subsection.17.3) 286 0 R] +/Limits [(subsection.16.7) (subsection.17.3)] +>> endobj +1372 0 obj << +/Names [(subsection.3.1) 18 0 R (subsection.3.10) 82 0 R (subsection.3.2) 22 0 R (subsection.3.3) 30 0 R (subsection.3.4) 38 0 R (subsection.3.5) 46 0 R] +/Limits [(subsection.3.1) (subsection.3.5)] +>> endobj +1373 0 obj << +/Names [(subsection.3.6) 58 0 R (subsection.3.7) 66 0 R (subsection.3.8) 70 0 R (subsection.3.9) 78 0 R (subsection.4.1) 90 0 R (subsection.4.2) 94 0 R] +/Limits [(subsection.3.6) (subsection.4.2)] +>> endobj +1374 0 obj << +/Names [(subsection.4.3) 98 0 R (subsection.4.4) 102 0 R (subsection.4.5) 106 0 R (subsection.4.6) 110 0 R (subsection.4.7) 114 0 R (subsection.4.8) 118 0 R] +/Limits [(subsection.4.3) (subsection.4.8)] +>> endobj +1375 0 obj << +/Names [(subsection.4.9) 126 0 R (subsubsection.3.2.1) 26 0 R (subsubsection.3.3.1) 34 0 R (subsubsection.3.4.1) 42 0 R (subsubsection.3.5.1) 50 0 R (subsubsection.3.5.2) 54 0 R] +/Limits [(subsection.4.9) (subsubsection.3.5.2)] +>> endobj +1376 0 obj << +/Names [(subsubsection.3.6.1) 62 0 R (subsubsection.3.8.1) 74 0 R (subsubsection.4.8.1) 122 0 R (table.1) 481 0 R (table.2) 826 0 R (table.3) 894 0 R] +/Limits [(subsubsection.3.6.1) (table.3)] +>> endobj +1377 0 obj << +/Names [(table.4) 938 0 R] +/Limits [(table.4) (table.4)] +>> endobj +1378 0 obj << +/Kids [1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R] +/Limits [(0180000:0.0.1.2) (hy@ltablenote2.8)] +>> endobj +1379 0 obj << +/Kids [1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R] +/Limits [(hy@ltablenote2.9) (page.25)] +>> endobj +1380 0 obj << +/Kids [1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R] +/Limits [(page.26) (page.58)] +>> endobj +1381 0 obj << +/Kids [1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R] +/Limits [(page.59) (subsection.15.4)] +>> endobj +1382 0 obj << +/Kids [1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R] +/Limits [(subsection.16.1) (subsection.4.8)] +>> endobj +1383 0 obj << +/Kids [1375 0 R 1376 0 R 1377 0 R] +/Limits [(subsection.4.9) (table.4)] +>> endobj +1384 0 obj << +/Kids [1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R] +/Limits [(0180000:0.0.1.2) (table.4)] +>> endobj +1385 0 obj << +/Dests 1384 0 R +>> endobj +1386 0 obj << +/Type /Catalog +/Pages 1343 0 R +/Outlines 1344 0 R +/Names 1385 0 R +/PageMode/UseThumbs/PageLabels<</Nums[0<</P(1)>>1<</P(2)>>2<</P(3)>>3<</P(4)>>4<</P(5)>>5<</P(6)>>6<</P(7)>>7<</P(8)>>8<</P(9)>>9<</P(10)>>10<</P(11)>>11<</P(12)>>12<</P(13)>>13<</P(14)>>14<</P(15)>>15<</P(16)>>16<</P(17)>>17<</P(18)>>18<</P(19)>>19<</P(20)>>20<</P(21)>>21<</P(22)>>22<</P(23)>>23<</P(24)>>24<</P(25)>>25<</P(26)>>26<</P(27)>>27<</P(28)>>28<</P(29)>>29<</P(30)>>30<</P(31)>>31<</P(32)>>32<</P(33)>>33<</P(34)>>34<</P(35)>>35<</P(36)>>36<</P(37)>>37<</P(38)>>38<</P(39)>>39<</P(40)>>40<</P(41)>>41<</P(42)>>42<</P(43)>>43<</P(44)>>44<</P(45)>>45<</P(46)>>46<</P(47)>>47<</P(48)>>48<</P(49)>>49<</P(50)>>50<</P(51)>>51<</P(52)>>52<</P(53)>>53<</P(54)>>54<</P(55)>>55<</P(56)>>56<</P(57)>>57<</P(58)>>58<</P(59)>>59<</P(60)>>60<</P(61)>>61<</P(62)>>]>> +/OpenAction 304 0 R +>> endobj +1387 0 obj << +/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.12)/Keywords() +/CreationDate (D:20111120034714Z) +/ModDate (D:20111120034714Z) +/Trapped /False +/PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.4225 (1.40.12)) +>> endobj +xref +0 1388 +0000000448 65535 f +0000000015 00000 n +0000033045 00000 n +0000718099 00000 n +0000000060 00000 n +0000000092 00000 n +0000038617 00000 n +0000718042 00000 n +0000000142 00000 n +0000000174 00000 n +0000045160 00000 n +0000717955 00000 n +0000000219 00000 n +0000000255 00000 n +0000051187 00000 n +0000717828 00000 n +0000000301 00000 n +0000000335 00000 n +0000051247 00000 n +0000717754 00000 n +0000000386 00000 n +0000000437 00000 n +0000051307 00000 n +0000717630 00000 n +0000000488 00000 n +0000000524 00000 n +0000056119 00000 n +0000717569 00000 n +0000000580 00000 n +0000000649 00000 n +0000056179 00000 n +0000717445 00000 n +0000000700 00000 n +0000000735 00000 n +0000056239 00000 n +0000717384 00000 n +0000000791 00000 n +0000000859 00000 n +0000056299 00000 n +0000717260 00000 n +0000000910 00000 n +0000000943 00000 n +0000066012 00000 n +0000717199 00000 n +0000000999 00000 n +0000001065 00000 n +0000066071 00000 n +0000717075 00000 n +0000001116 00000 n +0000001151 00000 n +0000071056 00000 n +0000717001 00000 n +0000001207 00000 n +0000001275 00000 n +0000071115 00000 n +0000716927 00000 n +0000001331 00000 n +0000001370 00000 n +0000076138 00000 n +0000716803 00000 n +0000001421 00000 n +0000001455 00000 n +0000084664 00000 n +0000716742 00000 n +0000001511 00000 n +0000001578 00000 n +0000088763 00000 n +0000716655 00000 n +0000001629 00000 n +0000001702 00000 n +0000093474 00000 n +0000716531 00000 n +0000001753 00000 n +0000001818 00000 n +0000098201 00000 n +0000716470 00000 n +0000001874 00000 n +0000001933 00000 n +0000102712 00000 n +0000716383 00000 n +0000001984 00000 n +0000002022 00000 n +0000102772 00000 n +0000716309 00000 n +0000002074 00000 n +0000002115 00000 n +0000118343 00000 n +0000716181 00000 n +0000002161 00000 n +0000002194 00000 n +0000118403 00000 n +0000716107 00000 n +0000002245 00000 n +0000002288 00000 n +0000118463 00000 n +0000716020 00000 n +0000002339 00000 n +0000002384 00000 n +0000123781 00000 n +0000715931 00000 n +0000002435 00000 n +0000002479 00000 n +0000128282 00000 n +0000715840 00000 n +0000002531 00000 n +0000002573 00000 n +0000132620 00000 n +0000715748 00000 n +0000002625 00000 n +0000002683 00000 n +0000136666 00000 n +0000715656 00000 n +0000002735 00000 n +0000002792 00000 n +0000141600 00000 n +0000715564 00000 n +0000002844 00000 n +0000002885 00000 n +0000141661 00000 n +0000715433 00000 n +0000002937 00000 n +0000002975 00000 n +0000146838 00000 n +0000715368 00000 n +0000003032 00000 n +0000003092 00000 n +0000146899 00000 n +0000715290 00000 n +0000003144 00000 n +0000003201 00000 n +0000156800 00000 n +0000715197 00000 n +0000003248 00000 n +0000003298 00000 n +0000156861 00000 n +0000715103 00000 n +0000003345 00000 n +0000003381 00000 n +0000156922 00000 n +0000715009 00000 n +0000003428 00000 n +0000003476 00000 n +0000161379 00000 n +0000714915 00000 n +0000003523 00000 n +0000003557 00000 n +0000165903 00000 n +0000714821 00000 n +0000003604 00000 n +0000003669 00000 n +0000165964 00000 n +0000714727 00000 n +0000003717 00000 n +0000003753 00000 n +0000170518 00000 n +0000714594 00000 n +0000003801 00000 n +0000003841 00000 n +0000175567 00000 n +0000714515 00000 n +0000003894 00000 n +0000003957 00000 n +0000180528 00000 n +0000714436 00000 n +0000004010 00000 n +0000004081 00000 n +0000180589 00000 n +0000714342 00000 n +0000004129 00000 n +0000004169 00000 n +0000185772 00000 n +0000714209 00000 n +0000004217 00000 n +0000004258 00000 n +0000185833 00000 n +0000714144 00000 n +0000004311 00000 n +0000004385 00000 n +0000191461 00000 n +0000714011 00000 n +0000004433 00000 n +0000004489 00000 n +0000202725 00000 n +0000713932 00000 n +0000004542 00000 n +0000004600 00000 n +0000202786 00000 n +0000713853 00000 n +0000004653 00000 n +0000004717 00000 n +0000221420 00000 n +0000713720 00000 n +0000004765 00000 n +0000004796 00000 n +0000249168 00000 n +0000713641 00000 n +0000004849 00000 n +0000004901 00000 n +0000258166 00000 n +0000713548 00000 n +0000004954 00000 n +0000005004 00000 n +0000261970 00000 n +0000713455 00000 n +0000005057 00000 n +0000005097 00000 n +0000262031 00000 n +0000713376 00000 n +0000005150 00000 n +0000005211 00000 n +0000266353 00000 n +0000713242 00000 n +0000005259 00000 n +0000005309 00000 n +0000266414 00000 n +0000713163 00000 n +0000005362 00000 n +0000005423 00000 n +0000266474 00000 n +0000713070 00000 n +0000005476 00000 n +0000005521 00000 n +0000271880 00000 n +0000712977 00000 n +0000005574 00000 n +0000005636 00000 n +0000271940 00000 n +0000712884 00000 n +0000005689 00000 n +0000005767 00000 n +0000276698 00000 n +0000712791 00000 n +0000005820 00000 n +0000005881 00000 n +0000276759 00000 n +0000712698 00000 n +0000005934 00000 n +0000006022 00000 n +0000276820 00000 n +0000712605 00000 n +0000006075 00000 n +0000006163 00000 n +0000281996 00000 n +0000712512 00000 n +0000006216 00000 n +0000006288 00000 n +0000282057 00000 n +0000712419 00000 n +0000006341 00000 n +0000006422 00000 n +0000282118 00000 n +0000712326 00000 n +0000006476 00000 n +0000006520 00000 n +0000287595 00000 n +0000712233 00000 n +0000006574 00000 n +0000006632 00000 n +0000292971 00000 n +0000712140 00000 n +0000006686 00000 n +0000006734 00000 n +0000293031 00000 n +0000712047 00000 n +0000006788 00000 n +0000006871 00000 n +0000297808 00000 n +0000711954 00000 n +0000006925 00000 n +0000007007 00000 n +0000297869 00000 n +0000711875 00000 n +0000007061 00000 n +0000007109 00000 n +0000302717 00000 n +0000711742 00000 n +0000007157 00000 n +0000007190 00000 n +0000302778 00000 n +0000711663 00000 n +0000007243 00000 n +0000007287 00000 n +0000302839 00000 n +0000711570 00000 n +0000007340 00000 n +0000007418 00000 n +0000302900 00000 n +0000711491 00000 n +0000007471 00000 n +0000007518 00000 n +0000302961 00000 n +0000711358 00000 n +0000007566 00000 n +0000007604 00000 n +0000304797 00000 n +0000711279 00000 n +0000007657 00000 n +0000007697 00000 n +0000304858 00000 n +0000711200 00000 n +0000007750 00000 n +0000007790 00000 n +0000711120 00000 n +0000007838 00000 n +0000007863 00000 n +0000011297 00000 n +0000011844 00000 n +0000019712 00000 n +0000019912 00000 n +0000012043 00000 n +0000012192 00000 n +0000012348 00000 n +0000012499 00000 n +0000012650 00000 n +0000012806 00000 n +0000012962 00000 n +0000013284 00000 n +0000013440 00000 n +0000013762 00000 n +0000013918 00000 n +0000014239 00000 n +0000014395 00000 n +0000014717 00000 n +0000014879 00000 n +0000015035 00000 n +0000015358 00000 n +0000015669 00000 n +0000015981 00000 n +0000016302 00000 n +0000016458 00000 n +0000016616 00000 n +0000016768 00000 n +0000016924 00000 n +0000017081 00000 n +0000017238 00000 n +0000017394 00000 n +0000017551 00000 n +0000017705 00000 n +0000017862 00000 n +0000018019 00000 n +0000018341 00000 n +0000018497 00000 n +0000018649 00000 n +0000018801 00000 n +0000018953 00000 n +0000019105 00000 n +0000019408 00000 n +0000019560 00000 n +0000025323 00000 n +0000025480 00000 n +0000025794 00000 n +0000020205 00000 n +0000007913 00000 n +0000020083 00000 n +0000705219 00000 n +0000707103 00000 n +0000708852 00000 n +0000706672 00000 n +0000707830 00000 n +0000020144 00000 n +0000706384 00000 n +0000708561 00000 n +0000709170 00000 n +0000706239 00000 n +0000706959 00000 n +0000708997 00000 n +0000705074 00000 n +0000013124 00000 n +0000013601 00000 n +0000014080 00000 n +0000014556 00000 n +0000015197 00000 n +0000015513 00000 n +0000015825 00000 n +0000016143 00000 n +0000018179 00000 n +0000019257 00000 n +0000708707 00000 n +0000709469 00000 n +0000025946 00000 n +0000026097 00000 n +0000026411 00000 n +0000026563 00000 n +0000026720 00000 n +0000027033 00000 n +0000027185 00000 n +0000027342 00000 n +0000027499 00000 n +0000027654 00000 n +0000027811 00000 n +0000027963 00000 n +0000028120 00000 n +0000028277 00000 n +0000028433 00000 n +0000028746 00000 n +0000028904 00000 n +0000029220 00000 n +0000029536 00000 n +0000029852 00000 n +0000030168 00000 n +0000030327 00000 n +0000030484 00000 n +0000030643 00000 n +0000030960 00000 n +0000031278 00000 n +0000031437 00000 n +0000031590 00000 n +0000031748 00000 n +0000032064 00000 n +0000032221 00000 n +0000032374 00000 n +0000032527 00000 n +0000032680 00000 n +0000032833 00000 n +0000033225 00000 n +0000024800 00000 n +0000020433 00000 n +0000032984 00000 n +0000706094 00000 n +0000025637 00000 n +0000026254 00000 n +0000026876 00000 n +0000028590 00000 n +0000029062 00000 n +0000705949 00000 n +0000029378 00000 n +0000029694 00000 n +0000030010 00000 n +0000030802 00000 n +0000031119 00000 n +0000031906 00000 n +0000709317 00000 n +0000707975 00000 n +0000708415 00000 n +0000706816 00000 n +0000706529 00000 n +0000033103 00000 n +0000033164 00000 n +0000038252 00000 n +0000038405 00000 n +0000038737 00000 n +0000038105 00000 n +0000033502 00000 n +0000038556 00000 n +0000707247 00000 n +0000708124 00000 n +0000038676 00000 n +0000043705 00000 n +0000000449 00000 f +0000000450 00000 f +0000000451 00000 f +0000000452 00000 f +0000000453 00000 f +0000000454 00000 f +0000000455 00000 f +0000000456 00000 f +0000000457 00000 f +0000000458 00000 f +0000000459 00000 f +0000000460 00000 f +0000000461 00000 f +0000000462 00000 f +0000000463 00000 f +0000000464 00000 f +0000000465 00000 f +0000000466 00000 f +0000000467 00000 f +0000000468 00000 f +0000000741 00000 f +0000043855 00000 n +0000044014 00000 n +0000044173 00000 n +0000044332 00000 n +0000044485 00000 n +0000044636 00000 n +0000044795 00000 n +0000044948 00000 n +0000045405 00000 n +0000043502 00000 n +0000038937 00000 n +0000045099 00000 n +0000045220 00000 n +0000704929 00000 n +0000045281 00000 n +0000705805 00000 n +0000045343 00000 n +0000051063 00000 n +0000051125 00000 n +0000050547 00000 n +0000050698 00000 n +0000050851 00000 n +0000051428 00000 n +0000050392 00000 n +0000045645 00000 n +0000051002 00000 n +0000051367 00000 n +0000055754 00000 n +0000055907 00000 n +0000056420 00000 n +0000055607 00000 n +0000051640 00000 n +0000056058 00000 n +0000056359 00000 n +0000061249 00000 n +0000061461 00000 n +0000061110 00000 n +0000056619 00000 n +0000061400 00000 n +0000705513 00000 n +0000704783 00000 n +0000709587 00000 n +0000065642 00000 n +0000065800 00000 n +0000066130 00000 n +0000065495 00000 n +0000061635 00000 n +0000065951 00000 n +0000070691 00000 n +0000070844 00000 n +0000071236 00000 n +0000070544 00000 n +0000066291 00000 n +0000070995 00000 n +0000071175 00000 n +0000075926 00000 n +0000076198 00000 n +0000075787 00000 n +0000071448 00000 n +0000076077 00000 n +0000080386 00000 n +0000080598 00000 n +0000080247 00000 n +0000076359 00000 n +0000080537 00000 n +0000084296 00000 n +0000084452 00000 n +0000084723 00000 n +0000084149 00000 n +0000080759 00000 n +0000084603 00000 n +0000088551 00000 n +0000088823 00000 n +0000088412 00000 n +0000084884 00000 n +0000088702 00000 n +0000709705 00000 n +0000093104 00000 n +0000097675 00000 n +0000093262 00000 n +0000093534 00000 n +0000092957 00000 n +0000088997 00000 n +0000093413 00000 n +0000097832 00000 n +0000097989 00000 n +0000098260 00000 n +0000097520 00000 n +0000093708 00000 n +0000098140 00000 n +0000102343 00000 n +0000102500 00000 n +0000102832 00000 n +0000102196 00000 n +0000098421 00000 n +0000102651 00000 n +0000107511 00000 n +0000107723 00000 n +0000107372 00000 n +0000102993 00000 n +0000107662 00000 n +0000705366 00000 n +0000111046 00000 n +0000111258 00000 n +0000110907 00000 n +0000107898 00000 n +0000111197 00000 n +0000113866 00000 n +0000114078 00000 n +0000113727 00000 n +0000111393 00000 n +0000114017 00000 n +0000709823 00000 n +0000118131 00000 n +0000118523 00000 n +0000117992 00000 n +0000114187 00000 n +0000118282 00000 n +0000122935 00000 n +0000123092 00000 n +0000123411 00000 n +0000123569 00000 n +0000123840 00000 n +0000122764 00000 n +0000118697 00000 n +0000123720 00000 n +0000123252 00000 n +0000356961 00000 n +0000128070 00000 n +0000128343 00000 n +0000127931 00000 n +0000124001 00000 n +0000128221 00000 n +0000132408 00000 n +0000132681 00000 n +0000132269 00000 n +0000128504 00000 n +0000132559 00000 n +0000136454 00000 n +0000136727 00000 n +0000136315 00000 n +0000132829 00000 n +0000136605 00000 n +0000141079 00000 n +0000141236 00000 n +0000141388 00000 n +0000141722 00000 n +0000140924 00000 n +0000136875 00000 n +0000141539 00000 n +0000709941 00000 n +0000146474 00000 n +0000151591 00000 n +0000151744 00000 n +0000146626 00000 n +0000146959 00000 n +0000146327 00000 n +0000141908 00000 n +0000146777 00000 n +0000151897 00000 n +0000152047 00000 n +0000152199 00000 n +0000152472 00000 n +0000151420 00000 n +0000147133 00000 n +0000152350 00000 n +0000152411 00000 n +0000356929 00000 n +0000156588 00000 n +0000156983 00000 n +0000156449 00000 n +0000152671 00000 n +0000156739 00000 n +0000161012 00000 n +0000161167 00000 n +0000161440 00000 n +0000160865 00000 n +0000157144 00000 n +0000161318 00000 n +0000165539 00000 n +0000165691 00000 n +0000166024 00000 n +0000165392 00000 n +0000161601 00000 n +0000165842 00000 n +0000170306 00000 n +0000170579 00000 n +0000170167 00000 n +0000166185 00000 n +0000170457 00000 n +0000710059 00000 n +0000174896 00000 n +0000175046 00000 n +0000175198 00000 n +0000175355 00000 n +0000175628 00000 n +0000174733 00000 n +0000170740 00000 n +0000175506 00000 n +0000180004 00000 n +0000180316 00000 n +0000180650 00000 n +0000179849 00000 n +0000175814 00000 n +0000180467 00000 n +0000180161 00000 n +0000185560 00000 n +0000185894 00000 n +0000185421 00000 n +0000180811 00000 n +0000185711 00000 n +0000190783 00000 n +0000190936 00000 n +0000191249 00000 n +0000191949 00000 n +0000190620 00000 n +0000186067 00000 n +0000191400 00000 n +0000191522 00000 n +0000191583 00000 n +0000191644 00000 n +0000191705 00000 n +0000191766 00000 n +0000191827 00000 n +0000191093 00000 n +0000191888 00000 n +0000196631 00000 n +0000196843 00000 n +0000196492 00000 n +0000192174 00000 n +0000196782 00000 n +0000201587 00000 n +0000202361 00000 n +0000201739 00000 n +0000201890 00000 n +0000202047 00000 n +0000202203 00000 n +0000202513 00000 n +0000202969 00000 n +0000201400 00000 n +0000196990 00000 n +0000202664 00000 n +0000707538 00000 n +0000202847 00000 n +0000202908 00000 n +0000707392 00000 n +0000710177 00000 n +0000205864 00000 n +0000206076 00000 n +0000205725 00000 n +0000203220 00000 n +0000206015 00000 n +0000209131 00000 n +0000209343 00000 n +0000208992 00000 n +0000206211 00000 n +0000209282 00000 n +0000212032 00000 n +0000212244 00000 n +0000211893 00000 n +0000209478 00000 n +0000212183 00000 n +0000215358 00000 n +0000215570 00000 n +0000215219 00000 n +0000212366 00000 n +0000215509 00000 n +0000220298 00000 n +0000220447 00000 n +0000220597 00000 n +0000220749 00000 n +0000220898 00000 n +0000000742 00000 f +0000000743 00000 f +0000000744 00000 f +0000000745 00000 f +0000000746 00000 f +0000000747 00000 f +0000000748 00000 f +0000000749 00000 f +0000000750 00000 f +0000000751 00000 f +0000000752 00000 f +0000000753 00000 f +0000000754 00000 f +0000000755 00000 f +0000000756 00000 f +0000000757 00000 f +0000000758 00000 f +0000000759 00000 f +0000000760 00000 f +0000000761 00000 f +0000000762 00000 f +0000000763 00000 f +0000000764 00000 f +0000000765 00000 f +0000000766 00000 f +0000000767 00000 f +0000000768 00000 f +0000000769 00000 f +0000000770 00000 f +0000000771 00000 f +0000000772 00000 f +0000000773 00000 f +0000000774 00000 f +0000000775 00000 f +0000000776 00000 f +0000000777 00000 f +0000000778 00000 f +0000000779 00000 f +0000000780 00000 f +0000000781 00000 f +0000000782 00000 f +0000000783 00000 f +0000000784 00000 f +0000000785 00000 f +0000000786 00000 f +0000000787 00000 f +0000000788 00000 f +0000000789 00000 f +0000000790 00000 f +0000000791 00000 f +0000000792 00000 f +0000000793 00000 f +0000000794 00000 f +0000000795 00000 f +0000000796 00000 f +0000000797 00000 f +0000000798 00000 f +0000000799 00000 f +0000000800 00000 f +0000000000 00000 f +0000221049 00000 n +0000227650 00000 n +0000227808 00000 n +0000227966 00000 n +0000228125 00000 n +0000228284 00000 n +0000228443 00000 n +0000228601 00000 n +0000228760 00000 n +0000228917 00000 n +0000229076 00000 n +0000229235 00000 n +0000229395 00000 n +0000229555 00000 n +0000229715 00000 n +0000229875 00000 n +0000230035 00000 n +0000230195 00000 n +0000230354 00000 n +0000230514 00000 n +0000221208 00000 n +0000221603 00000 n +0000220111 00000 n +0000215692 00000 n +0000221359 00000 n +0000221481 00000 n +0000708270 00000 n +0000221542 00000 n +0000356897 00000 n +0000232266 00000 n +0000230670 00000 n +0000230822 00000 n +0000230975 00000 n +0000231127 00000 n +0000231280 00000 n +0000231433 00000 n +0000231584 00000 n +0000231897 00000 n +0000237429 00000 n +0000232054 00000 n +0000233381 00000 n +0000227287 00000 n +0000221880 00000 n +0000232205 00000 n +0000232328 00000 n +0000232390 00000 n +0000232452 00000 n +0000232514 00000 n +0000707684 00000 n +0000232576 00000 n +0000232638 00000 n +0000232700 00000 n +0000232762 00000 n +0000232823 00000 n +0000232885 00000 n +0000232947 00000 n +0000233009 00000 n +0000233071 00000 n +0000233133 00000 n +0000233195 00000 n +0000233257 00000 n +0000233319 00000 n +0000231741 00000 n +0000710295 00000 n +0000237586 00000 n +0000237743 00000 n +0000237901 00000 n +0000238113 00000 n +0000237266 00000 n +0000233686 00000 n +0000238052 00000 n +0000242181 00000 n +0000242393 00000 n +0000242042 00000 n +0000238261 00000 n +0000242332 00000 n +0000245287 00000 n +0000245499 00000 n +0000245148 00000 n +0000242553 00000 n +0000245438 00000 n +0000248956 00000 n +0000249229 00000 n +0000248817 00000 n +0000245634 00000 n +0000249107 00000 n +0000253546 00000 n +0000253695 00000 n +0000253845 00000 n +0000254118 00000 n +0000253391 00000 n +0000249377 00000 n +0000253996 00000 n +0000254057 00000 n +0000257954 00000 n +0000258227 00000 n +0000257815 00000 n +0000254279 00000 n +0000258105 00000 n +0000710413 00000 n +0000261758 00000 n +0000262092 00000 n +0000261619 00000 n +0000258375 00000 n +0000261909 00000 n +0000266141 00000 n +0000266534 00000 n +0000266002 00000 n +0000262240 00000 n +0000266292 00000 n +0000271362 00000 n +0000271515 00000 n +0000271668 00000 n +0000272123 00000 n +0000271207 00000 n +0000266695 00000 n +0000271819 00000 n +0000272001 00000 n +0000272062 00000 n +0000276486 00000 n +0000276881 00000 n +0000276347 00000 n +0000272387 00000 n +0000276637 00000 n +0000705658 00000 n +0000281784 00000 n +0000282179 00000 n +0000281645 00000 n +0000277081 00000 n +0000281935 00000 n +0000287082 00000 n +0000287230 00000 n +0000287383 00000 n +0000288022 00000 n +0000286927 00000 n +0000282353 00000 n +0000287534 00000 n +0000287656 00000 n +0000287717 00000 n +0000287778 00000 n +0000287839 00000 n +0000287900 00000 n +0000287961 00000 n +0000710531 00000 n +0000292637 00000 n +0000293091 00000 n +0000292498 00000 n +0000288286 00000 n +0000292788 00000 n +0000292849 00000 n +0000292910 00000 n +0000297596 00000 n +0000297930 00000 n +0000297457 00000 n +0000293252 00000 n +0000297747 00000 n +0000302348 00000 n +0000302505 00000 n +0000303021 00000 n +0000302201 00000 n +0000298091 00000 n +0000302656 00000 n +0000304434 00000 n +0000304585 00000 n +0000304919 00000 n +0000304287 00000 n +0000303169 00000 n +0000304736 00000 n +0000309605 00000 n +0000309755 00000 n +0000309905 00000 n +0000310055 00000 n +0000310204 00000 n +0000310354 00000 n +0000310503 00000 n +0000310651 00000 n +0000310801 00000 n +0000310951 00000 n +0000311101 00000 n +0000311251 00000 n +0000311401 00000 n +0000311551 00000 n +0000311700 00000 n +0000311850 00000 n +0000312000 00000 n +0000312149 00000 n +0000312299 00000 n +0000312449 00000 n +0000312599 00000 n +0000312749 00000 n +0000312899 00000 n +0000313049 00000 n +0000313199 00000 n +0000313348 00000 n +0000313498 00000 n +0000313648 00000 n +0000313797 00000 n +0000313947 00000 n +0000314097 00000 n +0000314247 00000 n +0000314397 00000 n +0000314548 00000 n +0000314699 00000 n +0000314850 00000 n +0000315001 00000 n +0000315151 00000 n +0000315302 00000 n +0000315452 00000 n +0000315603 00000 n +0000315753 00000 n +0000315904 00000 n +0000316054 00000 n +0000316204 00000 n +0000316355 00000 n +0000316506 00000 n +0000316657 00000 n +0000316807 00000 n +0000316958 00000 n +0000317109 00000 n +0000317260 00000 n +0000317411 00000 n +0000317562 00000 n +0000317713 00000 n +0000317863 00000 n +0000318011 00000 n +0000318161 00000 n +0000318312 00000 n +0000318463 00000 n +0000318614 00000 n +0000318765 00000 n +0000318915 00000 n +0000319065 00000 n +0000319215 00000 n +0000319366 00000 n +0000319517 00000 n +0000319668 00000 n +0000319819 00000 n +0000319970 00000 n +0000320121 00000 n +0000320272 00000 n +0000320422 00000 n +0000320573 00000 n +0000320724 00000 n +0000320875 00000 n +0000321026 00000 n +0000321177 00000 n +0000321328 00000 n +0000321479 00000 n +0000321630 00000 n +0000321780 00000 n +0000321931 00000 n +0000322082 00000 n +0000322233 00000 n +0000322384 00000 n +0000322534 00000 n +0000322685 00000 n +0000322836 00000 n +0000322987 00000 n +0000328743 00000 n +0000328893 00000 n +0000329044 00000 n +0000329195 00000 n +0000329346 00000 n +0000329497 00000 n +0000329648 00000 n +0000329799 00000 n +0000329950 00000 n +0000323137 00000 n +0000323352 00000 n +0000308683 00000 n +0000305042 00000 n +0000323289 00000 n +0000330101 00000 n +0000330252 00000 n +0000330403 00000 n +0000330553 00000 n +0000330704 00000 n +0000330854 00000 n +0000331004 00000 n +0000331154 00000 n +0000331304 00000 n +0000331455 00000 n +0000331606 00000 n +0000331756 00000 n +0000331906 00000 n +0000332056 00000 n +0000332206 00000 n +0000332356 00000 n +0000332505 00000 n +0000332656 00000 n +0000332806 00000 n +0000332957 00000 n +0000333106 00000 n +0000333257 00000 n +0000333407 00000 n +0000333557 00000 n +0000333708 00000 n +0000333859 00000 n +0000334010 00000 n +0000334161 00000 n +0000334312 00000 n +0000334461 00000 n +0000334612 00000 n +0000334762 00000 n +0000334913 00000 n +0000335063 00000 n +0000335214 00000 n +0000335365 00000 n +0000335516 00000 n +0000335667 00000 n +0000335818 00000 n +0000335969 00000 n +0000336120 00000 n +0000336271 00000 n +0000336422 00000 n +0000336573 00000 n +0000336724 00000 n +0000336875 00000 n +0000337025 00000 n +0000337176 00000 n +0000337326 00000 n +0000337475 00000 n +0000337624 00000 n +0000337775 00000 n +0000337926 00000 n +0000338077 00000 n +0000338228 00000 n +0000338378 00000 n +0000338529 00000 n +0000338680 00000 n +0000338831 00000 n +0000338982 00000 n +0000339133 00000 n +0000339283 00000 n +0000339434 00000 n +0000339585 00000 n +0000339736 00000 n +0000339887 00000 n +0000340037 00000 n +0000340188 00000 n +0000340339 00000 n +0000340489 00000 n +0000340640 00000 n +0000340791 00000 n +0000340942 00000 n +0000341093 00000 n +0000341243 00000 n +0000341394 00000 n +0000341544 00000 n +0000341694 00000 n +0000341845 00000 n +0000341995 00000 n +0000342146 00000 n +0000342297 00000 n +0000342448 00000 n +0000342599 00000 n +0000342750 00000 n +0000342901 00000 n +0000343050 00000 n +0000343199 00000 n +0000343349 00000 n +0000343499 00000 n +0000343649 00000 n +0000343799 00000 n +0000343950 00000 n +0000344101 00000 n +0000344251 00000 n +0000344402 00000 n +0000344553 00000 n +0000344704 00000 n +0000344855 00000 n +0000345006 00000 n +0000345157 00000 n +0000345308 00000 n +0000345459 00000 n +0000345609 00000 n +0000345759 00000 n +0000345910 00000 n +0000346060 00000 n +0000346211 00000 n +0000346362 00000 n +0000346512 00000 n +0000346662 00000 n +0000346810 00000 n +0000346960 00000 n +0000347111 00000 n +0000347262 00000 n +0000347413 00000 n +0000347564 00000 n +0000347715 00000 n +0000347865 00000 n +0000348015 00000 n +0000348165 00000 n +0000348316 00000 n +0000348467 00000 n +0000348618 00000 n +0000348767 00000 n +0000348918 00000 n +0000349069 00000 n +0000349220 00000 n +0000349371 00000 n +0000349521 00000 n +0000349672 00000 n +0000349823 00000 n +0000349974 00000 n +0000352477 00000 n +0000352627 00000 n +0000352778 00000 n +0000352929 00000 n +0000353080 00000 n +0000353231 00000 n +0000353382 00000 n +0000350124 00000 n +0000350339 00000 n +0000327321 00000 n +0000323489 00000 n +0000350276 00000 n +0000710650 00000 n +0000353533 00000 n +0000353684 00000 n +0000353835 00000 n +0000353986 00000 n +0000354137 00000 n +0000354287 00000 n +0000354438 00000 n +0000354589 00000 n +0000354739 00000 n +0000354889 00000 n +0000355039 00000 n +0000355189 00000 n +0000355339 00000 n +0000355490 00000 n +0000355641 00000 n +0000355792 00000 n +0000355942 00000 n +0000356092 00000 n +0000356243 00000 n +0000356394 00000 n +0000356545 00000 n +0000356760 00000 n +0000352090 00000 n +0000350463 00000 n +0000356697 00000 n +0000356993 00000 n +0000357019 00000 n +0000357051 00000 n +0000357378 00000 n +0000357404 00000 n +0000357430 00000 n +0000357506 00000 n +0000357916 00000 n +0000358082 00000 n +0000358108 00000 n +0000358535 00000 n +0000359035 00000 n +0000359654 00000 n +0000359734 00000 n +0000359852 00000 n +0000360248 00000 n +0000360352 00000 n +0000360376 00000 n +0000360682 00000 n +0000361315 00000 n +0000361827 00000 n +0000704507 00000 n +0000362505 00000 n +0000362982 00000 n +0000363668 00000 n +0000364127 00000 n +0000364155 00000 n +0000364355 00000 n +0000364543 00000 n +0000365119 00000 n +0000365564 00000 n +0000365920 00000 n +0000366580 00000 n +0000367039 00000 n +0000379341 00000 n +0000379662 00000 n +0000388155 00000 n +0000388401 00000 n +0000405721 00000 n +0000406092 00000 n +0000418792 00000 n +0000419097 00000 n +0000421770 00000 n +0000421995 00000 n +0000429666 00000 n +0000429920 00000 n +0000437063 00000 n +0000437287 00000 n +0000444376 00000 n +0000444602 00000 n +0000451917 00000 n +0000452145 00000 n +0000476467 00000 n +0000476960 00000 n +0000487519 00000 n +0000487796 00000 n +0000496209 00000 n +0000496443 00000 n +0000505084 00000 n +0000505352 00000 n +0000515359 00000 n +0000515646 00000 n +0000524339 00000 n +0000524604 00000 n +0000543731 00000 n +0000544169 00000 n +0000565187 00000 n +0000565656 00000 n +0000573565 00000 n +0000573858 00000 n +0000581000 00000 n +0000581227 00000 n +0000588370 00000 n +0000588598 00000 n +0000595833 00000 n +0000596085 00000 n +0000603975 00000 n +0000604263 00000 n +0000612517 00000 n +0000612747 00000 n +0000625104 00000 n +0000625383 00000 n +0000635743 00000 n +0000635998 00000 n +0000657587 00000 n +0000658174 00000 n +0000661401 00000 n +0000661643 00000 n +0000669425 00000 n +0000669797 00000 n +0000684820 00000 n +0000685260 00000 n +0000694735 00000 n +0000695152 00000 n +0000697118 00000 n +0000697342 00000 n +0000704279 00000 n +0000710739 00000 n +0000710859 00000 n +0000710972 00000 n +0000711045 00000 n +0000718207 00000 n +0000718403 00000 n +0000718568 00000 n +0000718771 00000 n +0000719019 00000 n +0000719268 00000 n +0000719511 00000 n +0000719718 00000 n +0000719913 00000 n +0000720110 00000 n +0000720279 00000 n +0000720448 00000 n +0000720619 00000 n +0000720789 00000 n +0000720960 00000 n +0000721130 00000 n +0000721301 00000 n +0000721471 00000 n +0000721642 00000 n +0000721813 00000 n +0000721993 00000 n +0000722188 00000 n +0000722372 00000 n +0000722586 00000 n +0000722821 00000 n +0000723062 00000 n +0000723299 00000 n +0000723534 00000 n +0000723756 00000 n +0000723977 00000 n +0000724203 00000 n +0000724455 00000 n +0000724672 00000 n +0000724753 00000 n +0000724886 00000 n +0000725011 00000 n +0000725127 00000 n +0000725251 00000 n +0000725382 00000 n +0000725478 00000 n +0000725602 00000 n +0000725642 00000 n +0000726519 00000 n +trailer +<< /Size 1388 +/Root 1386 0 R +/Info 1387 0 R +/ID [<EDA1E0A65AAEDADD9423D92376BE8ED4> <EDA1E0A65AAEDADD9423D92376BE8ED4>] >> +startxref +726783 +%%EOF diff --git a/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.tex b/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.tex index 739845562d3..b32563b1091 100644 --- a/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.tex +++ b/Master/texmf-dist/doc/latex/ltxkeys/ltxkeys-guide.tex @@ -6,80 +6,118 @@ fancy-section-headings, frame-section-numbers, para-abstract-style, + inputfile, input-config-file, - no-hyperref-messages + no-hyperref-messages, + wrapquote ]{amltxdoc} -\hfuzz1pt \makeatletter -\WrapQuotes -\def\xdecs{\fx{\XDeclareOption}\RedStar\sspace} +\hfuzz1pt\vfuzz2pt \makeindex - -% Move to config file: -\def\keydotchoice#1#2{\fx{#1}\unskip\makered{.}\unskip\fx{{#2}}} -\def\preffamkey{\fnl{{pref}{fam}{key}}\sspace} -\def\mpkey{\fnl{{mp}{key}}\sspace} -\def\ifmpkey{\fnl{{if}{mp}{key}}\sspace} -\def\ipreffamkey#1{\fnl{{#1}{pref}{fam}{key}}} -\def\ipreffam#1{\fnl{{pref}{fam}}\unskip\tcl{cmdcolor}{\texttt{@#1}}} +\AfterAfterStartOfDocument{% + \def\amd@sectitlefmt{\centering\Large\sffamily\color{secheadcolor}}% +} +\useshortdoccmds +\usepackage{ltxtools-review} +\let\footnote\ltsfootnote +\extrarowheight=2pt +\arrayrulecolor{yellow} \begin{document} \begin{frontmatter} -\title{The \texttt{\color{blue}ltxkeys} Package\titleref{t1}} -\titlenote[t1]{% - The package is available at \iftogTF{pdf}{\url{\@titleurl}} - {\url{\@shorttitleurl}}. -} -\version{0.0.1} -\titleurl{http://www.ctan.org/tex-archive/macros/latex/contrib/ltxkeys/} -\shorttitleurl{http://www.ctan.org/} -\author{Ahmed Musa \Email{amusa22@gmail.com}\\Preston, Lancashire, UK} - -\def\abstractname{\textsc{Summary}} -\begin{abstract} -The \pkg'{ltxkeys} provides facilities for creating and managing keys in the sense of the \pkg'{keyval, xkeyval}, but it is intended to be more robust and faster than these earlier packages. Its robustness emanates from, inter alia, its ability to preserve braces in key values throughout parsing. The need to preserve braces in key values emerges often in parsing keys. This is the case in, eg, the \pkg'{xwatermark}. The package is faster than the \pkg'{xkeyval} mainly because it avoids character-wise parsing of key values (which is called \quoted{selective sanitization} by the \pkg'{xkeyval}). Moreover, it is faster to normalize a comma-separated or key-value list than trim leading and trailing spaces of each element of the list (the \pkg'{xkeyval} as does), since not all the elements of the list will normally have leading and trailing spaces. In fact, the chances are that only a few elements of the list will have such spaces. As another example of optimization, anyone familiar with the implementation of the \pkg'{xkeyval} would have noticed that the macro \hx{\XKV@srstate}, which (in order to allow \hx{\setkeys} to be re-entrant) pushes and pops the states of some important functions in the package, loops over all the functions both when pushing and popping. In the \pkg'{ltxkeys}, pushing and popping functions together involve only one loop. And, unlike in the \pkg'{xkeyval}, higher order functions are undefined as soon as they are no longer needed, to avoid clogging up the stack. In setting keys, the \pkg'{ltxkeys} loops over not only families, as in the \pkg'{xkeyval}, but also over key prefixes. The same strategy applies when the \pkg'{ltxkeys} tries to establish if a key is defined or not. While many aspects of the \pkg'{ltxkeys} are similar to those of the \pkg'{xkeyval}, there are important differences in several areas of syntax, semantics, and internal implementation. The \pkg'{ltxkeys} also provides additional facilities (beyond the \pkg'{xkeyval}) for defining and managing keys. Several types of keys (including ordinary keys, command keys, style keys, choice keys, boolean and biboolean keys) can be efficiently created and managed. In the \pkg'{ltxkeys}, the notions of \quoted{pre-setting} and \quoted{post-setting} keys are similar to those of the \pkg'{xkeyval}. But the \pkg'{ltxkeys} introduces additional concepts in this respect: \quoted{initialized} and \quoted{launched} keys. The latter are special preset keys. -\end{abstract} - -\let\licensename\relax -\begin{license} - \small -\xwmcolorbox[textalign=justified, outerframecolor=blue, innerframecolor=orange, - width=.985\hsize]{% - This work (\ie, all the files in the \pkg'{ltxkeys} bundle) may be distributed and/or modified under the conditions of the \lppl, either version~1.3 of this license or any later version. - The \lppl maintenance status of this software is \quoted{author-maintained}. This software is provided \quoted{as it 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. - \endgraf - \centerline{\makered{\CopyrightYear}}\vspace{-.8\baselineskip}\relax -} -\end{license} +\title{The \texttt{\color{blue}ltxkeys} Package\titleref{t1,t2}} +\titlenotes[t1,t2]{% + The package is available at \url{\titleurltext}.\sep + This user manual corresponds to version~0.0.2 of the package. +} +\subtitle{A robust key parser} +\titleurl{http://mirror.ctan.org/macros/latex/contrib/ltxkeys/} +\author{Ahmed Musa\authorref{a1,a2}} +\authornotes[a1,a2]{% + University of Central Lancashire, Preston, UK.\sep + Email address for all \pkg'{ltxkeys} related matters: \email{amusa22@gmail.com}. +} \end{frontmatter} -\begin{xwmshade}[fillcolor=white,framecolor=orange,framerule=1pt,framesep=2pt, - width=1.0\hsize]\tableofcontents -\end{xwmshade} +\hrule +\vskip 1ex plus 1pt minus 1pt +\begingroup +\def\contentsname{\centerline{\Large\sffamily\textcolor{blue}{Contents}}}% +\hypersetup{linkcolor=blue}\tableofcontents +\endgroup +\hrule + +\deffootnote{1}{% + Because of the multitude of functions provided by the \pkg'{ltxkeys}, it may actually slow down when executing some tasks, depending on the task at hand. The package option \fx{tracingkeys}, for example, does slow down processing. And automatically initiating keys after definition, as done by the commands \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys}, also affects processing speed; so does \quoted{launching keys}, which first presets absent keys with their default values before setting the current keys (\ie, keys whose values are provided by the user at the moment of setting keys that belong to a family). Then, as in the \pkg'{xkeyval}, there are the commands for presetting and post-setting keys. +} +\deffootnote{2}{% + Options are also keys, but (from the user's viewpoint) there might be a need to treat options separately when dealing with unknown keys. +} + + +\docsection(sec:intro){Introduction} + +\lletter{T}{he \pkg'{ltxkeys}} provides facilities for creating and managing keys in the manner of the \pkg'{keyval, xkeyval}, but it is intended to be more robust and faster than these earlier packages. Its robustness emanates from, inter alia, its ability to preserve braces in key values throughout parsing. The need to preserve braces in key values without expecting the user to double braces emerges often in parsing keys. This is the case in, \eg, the \pkg'{xwatermark}, but consider also the possibility of passing all the following options to a package at once, where \quotedtt{layout} is a package or class option or key\footnote{It should be noted that if a value of the demonstrative option \fx{layout} is expandable, then the option can't be passed by \hx{\documentclass} without preloading a robust options parser like \pkg{kvoptions-patch, xkvltxp, catoptions}, or \pkg{ltxkeys} package. The \pkg'{ltxkeys}, unlike the \pkg'{xkeyval}, can be loaded before \hx{\documentclass}.}: + +\start'{example}[Braced options] +\pkgoptions{% + opt1=val1,opt2=val2, + layout={left=3cm,right=3cm,top=2.5cm,bottom=2.5cm,include=true} +} +\finish{example} + +The \pkg'{ltxkeys} is faster\usefootnote{1} than the \pkg'{xkeyval} mainly because it avoids character-wise parsing of key values (which is called \quoted{selective sanitization} by the \pkg'{xkeyval}). Moreover, it is faster to normalize a comma-separated or \keyval list than trim leading and trailing spaces of each element of the list (as the \pkg'{xkeyval} does), since not all the elements of the list will normally have leading and trailing spaces. In fact, the chances are that only less than 50 percent of the elements of the list will have such spaces. As another example of optimization, anyone familiar with the implementation of the \pkg'{xkeyval} would have noticed that the macro \hx{\XKV@srstate}, which (in order to allow \hx{\setkeys} to be re-entrant) pushes and pops the states of some important functions in the package, loops over all the functions both when pushing and popping. In the \pkg'{ltxkeys}, pushing and popping functions together involve looping over the functions only once. And, unlike in the \pkg'{xkeyval}, higher order functions are undefined as soon as they are no longer needed, to avoid clogging up the stack. No additional looping is required for this. + +In setting keys, the \pkg'{ltxkeys} loops over not only families, as in the \pkg'{xkeyval}, but also over key prefixes. The same strategy applies when the \pkg'{ltxkeys} tries to establish if a key is defined or not. + +While some user interfaces of the \pkg'{ltxkeys} are similar to those of the \pkg'{xkeyval}, there are important differences in several areas of syntax, semantics, and internal implementation. The \pkg'{ltxkeys} also provides additional facilities (beyond the \pkg'{xkeyval}) for defining and managing keys. Several types of keys (including ordinary keys, command keys, style keys, choice keys, boolean and biboolean keys) can be efficiently created and managed. In the \pkg'{ltxkeys}, the notions of \quoted{pre-setting} and \quoted{post-setting} keys are similar to those of the \pkg'{xkeyval}. But the \pkg'{ltxkeys} introduces additional concepts in this respect: \quoted{initialized} and \quoted{launched} keys. The latter are special preset keys. The pointer system of the \pkg'{xkeyval}, which was available only at key-setting time, is now also available at key definition time. One more type of pointer (\fx{\needvalue}) has been introduced to require users of \quoted{need-value keys} to supply values for those keys. + +Rather than simply issue an error for undefined keys when setting keys, the \pkg'{ltxkeys} provides the \quoted{undefined keys} and \quoted{undefined options} handlers, which are user-customizable. Other new concepts include \quotedlist{definable keys, cross-family keys, option keys, non-option keys, handled keys, pathkeys, key commands, key environments}, accessing the saved value of a key outside \hx{\setkeys} or similar commands, and declaring multiple keys (of all genre) using only one command. -\docsection{Motivation} +It not advisable to alias the commands of the \pkg'{xkeyval} to the commands of the \pkg'{ltxkeys}. There are many existing packages that rely on the \pkg'{xkeyval} and aliasing commands that are used by other packages can cause confusion\footnote{A user of version~0.0.1 of the package had sought to do this.}. -What are the \emph{raison d'etre} and origins of the \pkg'{ltxkeys}? Well, I decided to write this package as I grabbled with some practical problems of key parsing while developing version~1.5.0 of the \pkg'{xwatermark}. The tasks proved more challenging than I had predicted and, despite its commendable and widely deployed facilities, I found the \pkg'{xkeyval} inadequate in some respects. As mentioned earlier, the several functionalities of the \pkg'{ltxkeys} can be employed for general key management in \latex beyond the \pkg'{xwatermark}. Indeed the \pkg'{ltxkeys} can be used as a more robust replacement for the \pkg'{xkeyval}, of course with some adaptation. +\docsubsection{Motivation} -\docsection{Package options} +What are the \emph{raison d'etre} and origins of the \pkg'{ltxkeys}? Well, I decided to write this package as I grabbled with some practical problems of key parsing while developing version~1.5.0 of the \pkg'{xwatermark}. The tasks proved more challenging than I had initially thought and, despite its commendable and widely deployed features, I found the \pkg'{xkeyval} inadequate in some respects. As mentioned earlier, all the functions of the \pkg'{ltxkeys} can be employed for general key management in \latex beyond the \pkg'{xwatermark}. Indeed the \pkg'{ltxkeys} can be used as a more robust replacement for the \pkg'{xkeyval}, of course with modifications of names and some syntaxes. The \pkg'{xkeyval} has been frozen since August 2008. -Wherever the semicolon \quoted{;} is indicated as a list parser in this guide, it can be replaced by any user-specified one character parser via the package option \fx{keyparser}. To avoid confusing the user-supplied parser with internal parsers, it is advisable to enclose the chosen character in curly braces, \eg, as in the following example. The braces will be stripped off internally. -\start{example}[keyparser] -\documentclass[verbose,keyparser={|}]{article} +\docsection(sec:packageoptions)<package options>{Package options} + +The package options are listed in \sref{tab:pkgoptions}. The package options can be passed via \hhx{\documentclass, \RequirePackage} or \hx{\usepackage} as follows: + +\start{example}[Package options] +\documentclass[tracingkeys,keyparser={|nv},pathkeys]{article} |orr -\usepackage[keyparser={|}]{ltxkeys} +\usepackage[tracingkeys,keyparser={|nv}]{ltxkeys} \finish{example} -The other package options are listed in \amref{tab:pkgoptions}. +They can also be passed via the command \fx{\ltxkeys@options}: -\extrarowheight=2pt -\arrayrulecolor{yellow} -\begin{tabularx}{\linewidth}{|m{3cm}|m{2.5cm}|X|} +\start{newmacro}[\ltxkeys@options] +\ltxkeys@options{tracingkeys=false,keyparser={;}} +\finish{newmacro} +\fxim*{\ltxkeys@options} + +\defltablenote{ltxkeys-1}{% + The speed of compilation may be affected by this option, but it is recommended at the pre-production stages of developing keys. The option provide some trace functionality and enables the user to, among other things, follow the progress of the \latex run and to see if a key has been defined and/or set/executed more than once in the current run. The \stform+ of the commands \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys} will always flag an error if a key is being defined twice, irrespective of the state of the package option \fx{tracingkeys}. The \textltxkey variants (unlike the \textnewkey variants) of key-defining commands don't have this facility, and it may be desirable to know if and when an existing key is being redefined. +} +\defltablenote{ltxkeys-2}{% + Wherever the \qsemicolon is indicated as a list parser in this guide, it can be replaced by any user-specified one character parser via the package option \fx{keyparser}. To avoid confusing the user-supplied parser with internal parsers, it is advisable to enclose the chosen character in curly braces. The braces will be stripped off internally. Please note that some of the characters that may be passed as a list parser may indeed be active; be careful to make them innocent before using them as a list/key parser. My advice is that the user sticks with the \qsemicolon as the key parser: the chances of it being made active by any package is minimal. If you have the chosen parser as literals in the callbacks of your keys, they have to be enclosed in curly braces. +} +\defltablenote{ltxkeys-3}{% + The key-setting commands are \ffx'{\ltxkeys@setkeys,\ltxkeys@setrmkeys,\ltxkeys@setaliaskey}. If you must nest these commands beyond level~4, you have to raise the \fx{keydepthlimit} as a package option. The option \fx{keystacklimit} is an alias for \fx{keydepthlimit}. +} +\defltablenote{ltxkeys-4}{% + The use of an empty prefix will normally result from explicitly declaring the prefix as \fx{[]}, rather than leaving it undeclared. Undeclared prefixes assume the default value of \fx{KV}. An empty family will result from submitting the family as empty balanced curly braces \fx{{}}. If keys lack prefix and/or family, there is a strong risk of confusing key macros/functions. For example, without a prefix and/or family, a key named \fx{width} will have a key macro defined as \fx{\width}, which portents sufficient danger. +} + +\begingroup +\small +\begin{tabularx}{\linewidth}{|p{3cm}|p{2cm}|X|} \caption{Package options\xwmlabel{tab:pkgoptions}}\\\hline \rowcolor{pink} \bfseries Option&\bfseries Default&\bfseries Meaning\\\hline @@ -92,438 +130,943 @@ The other package options are listed in \amref{tab:pkgoptions}. \endfoot \hline \endlastfoot -\fx{verbose} & \hx{false} & The global boolean switch that determines if information should be logged for some tasks in the package. The speed of compilation is affected by this option.\\\hline -\fx{keyparser} & \texttt{;} & The list parser used for some loops in defining keys. See note above.\\\hline -\fx{keystacklimit} & \hx{4} & This is used to guard against erroneous infinite re-entrance of \fx{\ltxkeys@setkeys}. The default value of~4 means that \fx{\ltxkeys@setkeys} can't ordinarily be nested beyond level~4. If you must nest \fx{\ltxkeys@setkeys} beyond this level, you have to raise the \fx{keystacklimit} as a package option.\\\hline +\fx{tracingkeys} & \hx{false} & The global boolean switch that determines if information should be logged in the transcript for some tasks in the package. \useltablenote[tab:pkgoptions:note1]{ltxkeys-1}\\\hline +\fx{keyparser} & \texttt{;} & The list parser used by some internal loops in defining keys.\useltablenote[tab:pkgoptions:note2]{ltxkeys-2}\\\hline +\fx{keydepthlimit} & \hx{4} & This is used to guard against erroneous infinite re-entrance of the package's key-setting commands. The default value of~4 means that neither of these commands can ordinarily be nested beyond level~4.\useltablenote[tab:pkgoptions:note3]{ltxkeys-3}\\\hline +\fx{reservenopath} & \hx{false} & The \quoted{path} (or roots or bases) of a key is the combination of key prefix, key family and macro prefix, but when dealing with \quoted{pathkeys} (see \sref{sec:pathkeys}) the term excludes the macro prefix. These can be reserved and unreserved by any user by the tools of \sref{sec:reservedpath}. Subsequent users can, at their own risk, override all previously reserved paths by enabling the package's boolean option \fx{reservenopath}.\\\hline +\fx{allowemptypath} & \hx{false} & Allow the use of empty key prefix and family. This isn't advisable but some pre-existing packages might have used empty key prefixes and families. \useltablenote[tab:pkgoptions:note4]{ltxkeys-4}\\\hline +\fx{pathkeys} & \hx{false} & Load the \pkg'{pathkeys} (see \sref{sec:pathkeys}). \end{tabularx} - -\end{document} +\endgroup \docsection{Defining keys} -In the following, quantities in square brackets---\eg, [yyy]---and those in parenthesis---\eg, (yyy)---are optional. +\docsubsection(sec:definablekeys){Defining only definable keys} +If the package option \fx{tracingkeys} is enabled (\ie, turned true), the user can see in the transcript file the existing keys that he has redefined with the \textltxkey variants of the key-defining commands, which redefine existing keys without any default warning or error. The log file messages being referred to here will be highlighted with the warning sign (\makered{!!}). This is always desirable in the preproduction stages of your project. However, instead of looking for these warning messages in the log file, the user can use the \textnewkey variants of the key-defining commands to bar himself from redefining existing keys. -\docsubsection{Ordinary keys} +Subsequently we will mention the \textnewkey variants of key-defining commands without necessarily explaining what they mean, since their meaning is henceforth clear. - \ltxkeys@ordkey[<pref>]{<fam>}{<key>}[<default>]{<callback>} +In the following, syntactic quantities in square brackets (\eg, \fx{[yyy]}) and those in parenthesis (\eg, \fx{(yyy)}) are optional arguments. -This defines a macro of the form \preffamkey of one argument that holds the key function <callback>. The default value for <pref> is always \fx{KV}, as in the \pkg'{xkeyval}. When \ang{key} is used in a \fx{\ltxkeys@setkeys} command (see \amref{sec:}) containing key=value, the macro \preffamkey takes the value as its argument and is then executed. The given argument or key value can be accessed in <callback> by using \fx{#1} inside the function. The optional <default>, if available, will be used by \preffamkey when the user hasn't provided a value for the key at \fx{\ltxkeys@setkeys}. If <default> was absent at key definition and the key user hasn't provided a value for the key, an error message will be flagged. +\docsubsection(sec:ordkeys)<ordinary keys (ord)>{Ordinary keys} +\aidx*{key prefix,macro prefix,key macro} -\docsubsection{Command keys} +\start+{newmacro}[\ltxkeys@ordkey,\ltxkeys@newordkey] +\ltxkeys@ordkey[|A(pref)]{|A(fam)}{|A(key)}[|A(dft)]{|A(cbk)} +\ltxkeys@newordkey[|A(pref)]{|A(fam)}{|A(key)}[|A(dft)]{|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@ordkey,\ltxkeys@newordkey} - \ltxkeys@cmdkey[<pref>]{<fam>}[<mp>]{<key>}[<default>]{<callback>} +These define a macro of the form \preffamkey of one parameter that holds the key function/callback \ang{cbk}. The default value for the \quoted{key prefix} \ang{pref} is always \fx{KV}, as in the \pkg'{xkeyval}. When \ang{key} is used in a \fx{\ltxkeys@setkeys} command (see \sref{sec:settingkeys}) containing \keyval, the macro \preffamkey takes the value as its argument and is then executed. The given argument or key value can be accessed in the key's callback \ang{cbk} by using \fx{#1} inside the function. The optional default value \ang{dft}, if available, will be used by \preffamkey when the user hasn't provided a value for the key at \fx{\ltxkeys@setkeys}. If \ang{dft} was absent at key definition and the key user hasn't provided a value for the key, an error message is flagged\footnote{The commands \ffx'{\ltxkeys@key,\ltxkeys@newkey} aren't user commands.}. -The optional <mp> is called the \quoted{macro prefix} (in the parlance of the \pkg'{xkeyval}). If <mp> is given, the command \mpkey will hold the current user input; otherwise (if <mp> is absent) the user input will be available in \ipreffamkey{cmd}. The command \preffamkey, called the \quoted{key macro} by the \pkg'{xkeyval}, will hold the <callback>. +Run the following example and do \fx{\show\cmdb} and \fx{\show\cmdd}: +\start{example}[\ltxkeys@ordkey] +\ltxkeys@ordkey[KV]{fam}{keya}[\def\cmda#1{aa#1}]{\def\cmdb##1{#1bb##1}} +\ltxkeys@ordkey[KV]{fam}{keyb}[\def\cmdc##1{cc##1}]{\def\cmdd##1{#1dd##1}} +\ltxkeys@setkeys[KV]{fam}{keya,keyb} +\finish{example} -\docsubsection{Style keys---keys with dependants} +\docsubsubsection(sec:ordkeys-sameattributes) + {Ordinary keys that share the same attributes} -Style keys have the following syntaxes: +The commands \ffx'{\ltxkeys@ordkey,\ltxkeys@newordkey} can be used to introduce ordinary keys \ang{keys} that share the same path\footnote{The key path is also called the key bases.} (key prefix, key family, and macro prefix) and callback \ang{cbk}. All that is needed is to replace \ang{key} in these commands with the comma-separated list \ang{keys}. Because some users might prefer to see these commands in their plural forms when defining several keys with the same callback, we have provided the following aliases. The internal coding remains the same and no efficiency has been lost in generalization. + +\start+{newmacro}[\ltxkeys@ordkeys,\ltxkeys@newordkeys] +\ltxkeys@ordkeys[|A(pref)]{|A(fam)}{|A(keys)}[|A(dft)]{|A(cbk)} +\ltxkeys@newordkeys[|A(pref)]{|A(fam)}{|A(keys)}[|A(dft)]{|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@ordkeys,\ltxkeys@newordkeys} - \ltxkeys@stylekey[<pref>]{<fam>}[<mp>]{<key>}[<default>](<dependants>){<callback>} - \ltxkeys@stylekey*[<pref>]{<fam>}[<mp>]{<key>}[<default>](<dependants>){<callback>} +\docsubsection(sec:cmdkeys)<command keys (cmd)>{Command keys} -The <dependants> have the syntax: +\start+{newmacro}[\ltxkeys@cmdkey,\ltxkeys@newcmdkey] +\ltxkeys@cmdkey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]{|A(cbk)} +\ltxkeys@newcmdkey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]{|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@cmdkey,\ltxkeys@newcmdkey} - {<keytype>/<keyname>/<default>/<callback>; another set of dependant; etc} +Here, the optional quantity \ang{mp} is the \quoted{macro prefix}. If \ang{mp} is given, the command \mpkey will hold the current user input at key setting time; otherwise (\ie, if \ang{mp} is absent) the user input will be available in the macro \ipreffamkey{cmd}. The command \preffamkey is the \quoted{key macro} and will hold the callback \ang{cbk}. This type of key is traditionally called \quoted{command key} (a name that most likely emanated from the \pkg'{xkeyval}) because it gives rise to the macro \mpkey, but in the \pkg'{ltxkeys} even boolean, style and choice keys are associated with this type of macro. - <default> and <callback> can be absent. <keytype> can be \quoted{ord} (ordinary key), \quoted{cmd} (command key), \quoted{bool} (boolean key), or \quoted{choice} (choice key). -Dependants keys always share the same key prefix <pref>, family <fam>, and macro prefix <mp> with the parent key. +\docsubsubsection(sec:cmdkeys-sameattributes) + {Command keys that share the same attributes} -If <mp> is given, the command \mpkey will hold the current user input for the parent key; otherwise the user input will be available in \ipreffamkey{style}. The command \preffamkey will always hold the <callback>. +The commands \ffx'{\ltxkeys@cmdkey,\ltxkeys@newcmdkey} can be used to introduce command keys \ang{keys} that share the same path or bases (key prefix, key family, and macro prefix) and callback \ang{cbk}. Simply replace \ang{key} in these commands with the comma-separated list \ang{keys}. Some users might prefer to see these commands in their plural forms when defining several keys with the same callback. We have therefore provided the following aliases: + +\start+{newmacro}[\ltxkeys@cmdkeys,\ltxkeys@newcmdkeys] +\ltxkeys@cmdkeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]{|A(cbk)} +\ltxkeys@newcmdkeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]{|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@cmdkeys,\ltxkeys@newcmdkeys} + + +\docsubsection(sec:stylekeys){Style keys} +\aidx*{style keys (sty)} + +Style keys are keys with dependants (\ie, keys that are processed when the master is set). They have the following syntaxes: + +\start+{newmacro}[\ltxkeys@stylekey,\ltxkeys@newstylekey] +\ltxkeys@stylekey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\ltxkeys@stylekey|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\ltxkeys@newstylekey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\ltxkeys@newstylekey|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@stylekey,\ltxkeys@newstylekey} + +The dependants \ang{deps} have the syntax: + +\start'{macro}[Dependant keys syntax] +|( + |A(keytype)/|A(keyname)/|A(dft)/|A(cbk); + another set of dependant; etc. +|) +\finish{macro} +\aidxs*{dependant keys}{style keys} + +The default value \ang{dft} and the callback \ang{cbk} can be absent in the syntax of style keys. \ang{keytype} can be \quoted{ord} (ordinary key), \quoted{cmd} (command key), \quoted{bool} (boolean key), or \quoted{choice} (choice key). + +Dependant keys always share the same key prefix \ang{pref}, family \ang{fam}, and macro prefix \ang{mp} with the parent key. + +If \ang{mp} is given, the command \mpkey will hold the current user input for the parent key; otherwise the user input will be available in \ipreffamkey{style}. The macro \preffamkey will always hold the callback \ang{cbk}. If the \stform is used, all undefined dependants will be defined and set on the fly as the parent is being set. If the \stform isn't used and undefined dependants occur, then an error message will be flagged at the time the parent is being set. -At most times it is possible to access the parent key's current value with \parentval. Within <default> and <callback> of <dependants>, it is possible to refer to the parent key's callback with its full macro name (\ie, \preffamkey). \parentval is always available for use as the default value of dependant keys, but it may be lost in the callbacks of dependant keys, because a dependant key, once defined, may be set independent of, and long after, the parent key has been executed. It is therefore more reliable to refer to the macro \fnl{{pref}{fam}{key}{value}}, which is recorded for only the parent key of style keys and which holds the current user input for the parent key. The macro \fnl{{pref}{fam}{key}{value}} is recorded only if it appears at least once in the attributes of dependant keys. The macro \fnl{{pref}{fam}{key}{value}} has a more unique name than \mpkey but they always contain the same value of a style key. As mentioned above, if <mp> is not given, the user input for a style key will be available in the macro \ipreffamkey{style}, instead of \mpkey. - -Note: \fx{#1} in the callback of parent key refers to the current value of the parent key, while \fx{#1} in the callback of any dependant key refers to the current value of that dependant key. - -Example (define and set all undefined dependants on the fly): - - \ltxkeys@stylekey*[KV]{fam}[mp@]{keya}[{left}](% - % `#1' here refers to the value of the DEPENDANT key - % at the time it is being set. Use \parentkey and \parentval - % here to access the parent key name and its current value: - ord/keyb/{right}/\def\y##1{#1##1}; - % The default of keyc is the current value of parent (keya): - cmd/keyc/\parentval; - % Because \KV@fam@keya@value appears below, it will be saved - % when the parent key (keya) is being set, otherwise it would be - % unavailable: - bool/keyd/true/\ifmp@keyd\edef\x##1{##1\KV@fam@keya@value}\fi - ){ - % `#1' here refers to the value of the PARENT key - % at the time it is being set: - \def\x##1{##1xx#1xx}% - % Check the value of parent key: - \ltxkeys@checkchoice[\userinput\nr]{#1}{left,right,center}% - } - -In this example, \fx{\userinput} corresponds to \fx{#1}, and \fx{\nr} is the numerical order of the user input in the nominations \fnz{{left}{right}{center}}. See more about the commands \ffx'{\ltxkeys@checkchoice, \CheckInput} in \amref{sec:}. +Most of the time it is possible to access the parent key's current value with \fx{\parentval}. Within \ang{dft} and \ang{cbk} of \ang{deps}, it is possible to refer to the parent key's callback with its full macro name (\ie, \preffamkey). \fx{\parentval} is always available for use as the default value of dependant keys, but it may be lost in the callbacks of dependant keys, because a dependant key, once defined, may be set independent of, and long after, the parent key has been executed. It is therefore more reliable to refer to the macro \jpreffamkey{value}, which is recorded for only the parent key of style keys and which holds the current user input for the parent key. The macro \jpreffamkey{value} is recorded only if it appears at least once in the attributes of dependant keys. The macro \jpreffamkey{value} has a more unique name than \mpkey but they always contain the same value of a style key. As mentioned above, if \ang{mp} is not given, the user input for a style key will be available in the macro \ipreffamkey{style}, instead of \mpkey. + +\ltsnote \quotedfx{#1} in the callback of parent key refers to the current value of the parent key, while \quotedfx{#1} in the callback of any dependant key refers to the current value of that dependant key. Here is an example that defines and sets all undefined dependants on the fly: + +\start+{example}[\ltxkeys@stylekey] +\ltxkeys@stylekey|*[KV]{fam}[mp@]{keya}[{left}]|(% + |com(`#1' here refers to the value of the DEPENDANT key) + |com(at the time it is being set. Use \parentkey and \parentval) + |com(here to access the parent key name and its current value:) + ord/keyb/{right}/\def\y##1{#1##1}; + |com( The default of keyc is the current value of parent |(keya|):) + cmd/keyc/\parentval; + |com(Because \KV@fam@keya@value appears below, it will be saved) + |com(when the parent key (keya) is being set, otherwise it would be) + |com(unavailable:) + bool/keyd/true/\ifmp@keyd\edef\x##1{##1\KV@fam@keya@value}\fi +|){% + |com(`#1' here refers to the value of the PARENT key at the time) + |com(it is being set:) + \def\x##1{##1xx#1xx}% + |com(Check the value of parent key:) + \ltxkeys@checkchoice[,]|(\userinput\order|){#1}{left,right,center}{}{% + \@latex@error{Invalid input '#1'}\@ehd + }% +} +\finish{example} + + +In this example, \fx{\userinput} corresponds to \fx{#1}, and \fx{\order} is the numerical order of the user input in the nominations \fnz*{left,right,center}. More about the commands \ffx'{\ltxkeys@checkchoice, \CheckUserInput} can be found in \sref{sec:checkchoice}. You can try setting \fx{keya} as follows to see what happens to keys \ffx'{keyb,keyc,keyd}: - \ltxkeys@setkeys[KV]{fam}{keya={right}} +\start{example}[\ltxkeys@setkeys] +\ltxkeys@setkeys[KV]{fam}{keya=right} +\finish{example} -The braces in the key values above are just to exemplify the fact that braces in key values are preserved throughout key parsing. This is essential in, for example, the \pkg'{xwatermark}. +The following will flag an error because \fx{{right}} isn't in the list of nominations \fnz*{left,right,center}: +\start{example}[\ltxkeys@setkeys] +\ltxkeys@setkeys[KV]{fam}{keya={right}} +\finish{example} -\docsubsection{Boolean keys} +The braces in the key values above are just to exemplify the fact that braces in key values are preserved throughout key parsing. As mentioned earlier, this is essential for some packages and class files. - \ltxkeys@boolkey[<pref>]{<fam>}[<mp>]{<key>}[<default>]{<callback>} - \ltxkeys@boolkey+[<pref>]{<fam>}[<mp>]{<key>}[<default>]{<callback>}{<fn>} +\docsubsubsection(sec:stylekeys-sameattributes) + {Style keys that share the same attributes} -If <mp> is given, the command \mpkey will hold the current user input for the key at key setting time; otherwise the user input will be available in \ipreffamkey{bool}\footnote{This differs from the system in the \pkg'{xkeyval}.}. If <mp> is specified, a boolean of the form \ifmpkey will be created at key definition, which will be set by \fx{\ltxkeys@setkeys} according to the user input. If <mp> is not specified, a boolean of the form \ipreffamkey{ifbool} will instead be created. +The commands \ffx'{\ltxkeys@stylekey,\ltxkeys@newstylekey} can be used to introduce style keys \ang{keys} that share the same path or bases (key prefix, key family, and macro prefix) and callback \ang{cbk}. Just replace \ang{key} in these commands with the comma-separated list \ang{keys}. However, some users might prefer to see these commands in their plural forms when defining several keys with the same callback. Hence, we also provide the following aliases: -The user input for boolean keys must be in the set {true | false}. The command \preffamkey will always hold the <callback>, which will be executed if the user input is valid. +\start+{newmacro}[\ltxkeys@stylekeys,\ltxkeys@newstylekeys] +\ltxkeys@stylekeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\ltxkeys@stylekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\ltxkeys@newstylekeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\ltxkeys@newstylekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]|(|A(deps)|){|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@stylekeys,\ltxkeys@newstylekeys} -The \plform of \fx{\ltxkeys@boolkey} will execute <fn> in place of <callback> if the user input isn't in {true | false}; the plain form will issue an error in this case. +\docsubsection(sec:boolkeys)<boolean keys (bool)>{Boolean keys} -\docsubsubsection{Biboolean keys} +\start+{newmacro}[\ltxkeys@boolkey,\ltxkeys@newboolkey] +\ltxkeys@boolkey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]{|A(cbk)} +\ltxkeys@boolkey|+[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@newboolkey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]{|A(cbk)} +\ltxkeys@newboolkey|+[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(dft)]{|A(cbk)}{|A(fn)} +\finish{newmacro} +\fxim*{\ltxkeys@boolkey,\ltxkeys@newboolkey} - \ltxkeys@biboolkeys[<pref>]{<fam>}[<mp>]{<bool1>,<bool2>} - [<default>]{<callback1>}{<callback2>} +In these commands, if \ang{mp} is given, the command \mpkey will hold the current user input for the key at key setting time; otherwise the user input will be available in \ipreffamkey{bool}\footnote{This differs from the system in the \pkg'{xkeyval}.}. If \ang{mp} is specified, a boolean of the form \ifmpkey will be created at key definition, which will be set by \fx{\ltxkeys@setkeys} according to the user input. If \ang{mp} is not specified, a boolean of the form \ipreffamkey{ifbool} will instead be created. - \ltxkeys@biboolkeys+[<pref>]{<fam>}[<mp>]{<bool1>,<bool2>} - [<default>]{<callback1>}{<callback2>}{<fn>} +The user input for boolean keys must be in the set \fnz*{true,false}. The callback \ang{cbk} is held in the command \preffamkey, which is executed if the user input is valid. -Biboolean keys always assume opposite states: when one is true, the other is automatically toggled to false; and vice versa. Think of the options \hx{draft} and \hx{final} in a document class, but note that traditional document classes don't currently use biboolean keys. +The \plform of \ffx'{\ltxkeys@boolkey,\ltxkeys@newboolkey} will execute \ang{fn} in place of \ang{cbk} if the user input isn't in \fnz*{true,false}; the plain form will issue an error in this case. - <callback1> belongs to the boolean key <bool1>, while <callback2> belongs to <bool2>. -The \plform of \ltxkeys@biboolkeys will execute <fn> in place of <callback1> or <callback2> if the input is not in {true | false}; the plain form will issue an error in this case. +\docsubsubsection(sec:boolkeys-sameattributes) + {Boolean keys that share the same attributes} -Biboolean keys have equal symmetry (\ie, they can call each other with equal propensity) and they won't bomb out in an infinite reentrance. They normally would know if they're calling each other. +The commands \ffx'{\ltxkeys@boolkey,\ltxkeys@newboolkey} can be used to introduce boolean keys \ang{keys} that share the same path or bases (key prefix, key family, and macro prefix) and callback \ang{cbk}. Just replace \ang{key} in these commands with the comma-separated list \ang{keys}. Because some users might prefer to see these commands in their plural forms when defining several keys with the same callback, we have provided the following aliases: - Example: +\start+{newmacro}[\ltxkeys@boolkeys,\ltxkeys@newboolkeys] +\ltxkeys@boolkeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]{|A(cbk)} +\ltxkeys@boolkeys|+[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@newboolkeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]{|A(cbk)} +\ltxkeys@newboolkeys|+[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(dft)]{|A(cbk)}{|A(fn)} +\finish{newmacro} +\fxim*{\ltxkeys@boolkeys,\ltxkeys@newboolkeys} - \ltxkeys@biboolkeys+[KV]{fam}[mp@]{keya,keyb}[true]{% - \ifmp@keya\def\x##1{##1x#1x##1}\fi - }{% - \ifmp@keyb\def\y##1{##1y#1y##1}\fi - }{% - \@latex@error{Invalid value '\string#1' for keya or keyb}\@ehc - } +\docsubsubsection(sec:biboolkeys)<biboolean keys>{Biboolean keys} -\docsubsection{Choice keys} +\start+{newmacro}[\ltxkeys@biboolkeys,\ltxkeys@newbiboolkeys] +\ltxkeys@biboolkeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(bl1),|A(bl2)}[|A(dft)]{|A(cbk1)}{|A(cbk2)} +\ltxkeys@biboolkeys|+[|A(pref)]{|A(fam)}[|A(mp)]{|A(bl1),|A(bl2)}[|A(dft)]{|A(cbk1)}{|A(cbk2)}{|A(fn)} +\ltxkeys@newbiboolkeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(bl1),|A(bl2)}[|A(dft)]{|A(cbk1)}{|A(cbk2)} +\ltxkeys@newbiboolkeys|+ + [|A(pref)]{|A(fam)}[|A(mp)]{|A(bl1),|A(bl2)}[|A(dft)]{|A(cbk1)}{|A(cbk2)}{|A(fn)} +\finish{newmacro} +\fxim*{\ltxkeys@biboolkeys,\ltxkeys@newbiboolkeys} -The choice keys of the \pkg'{ltxkeys} differ from those of the \pkg'{xkeyval} in at least one respects, namely, the presence of the macro prefix for choice keys in the \pkg'{ltxkeys}. +Biboolean keys always assume opposite states: when one is true, the other is automatically toggled to false; and vice versa. Think of the options \hx{draft} and \hx{final} in a document class, but note that traditional document classes don't currently use biboolean keys. The callback \ang{cbk1} belongs to the boolean key \ang{bl1}, while \ang{cbk2} is of \ang{bl2}. - \ltxkeys@choicekey[<pref]{<fam>}[<mp>]{<key>}[<bin>]{<alt>}[<default>]{<callback>} +The \plform of \fx{\ltxkeys@biboolkeys} will execute \ang{fn} in place of \ang{cbk1} or \ang{cbk2} if the input is not in \fnz*{true,false}; the plain form will issue an error in this case. - \ltxkeys@choicekey*[<pref]{<fam>}[<mp>]{<key>}[<bin>]{<alt>}[<default>]{<callback>} +Biboolean keys have equal symmetry (\ie, they can call each other with equal propensity) and they won't bomb out in an infinite reentrance. They normally would know if and when they call each other, or if they're being called by some other keys. - \ltxkeys@choicekey*+[<pref]{<fam>}[<mp>]{<key>}[<bin>]{<alt>}[<default>]{<callback>}{<fn>} +\start+{example}[\ltxkeys@biboolkeys] +\ltxkeys@biboolkeys|+[KV]{fam}[mp@]{keya,keyb}[true]{% + \ifmp@keya\def\x##1{##1x#1x##1}\fi +}{% + \ifmp@keyb\def\y##1{##1y#1y##1}\fi +}{% + \@latex@error{Invalid value `\string#1' for keya or keyb}\@ehc +} +\finish{example} - \ltxkeys@choicekey*+![<pref]{<fam>}[<mp>]{<key>}[<bin>]{<alt>}[<default>]{<callback>}{<fn>} -Choice keys check the user input against the nominations suggested by the author of the key. The \stform will convert user input to lowercase before checking it against the list of nominations in \ang{alt}. In all the above variants, if the input is valid, then \ang{callback} will be executed. If the user input isn't valid, the \nonplform+ will flag an error, while the \plform will execute \ang{fn}. The \clform will fully expand the user input before checking it against the nominations in \ang{alt}. The \clform arises from the fact that sometimes macros are passed as the values of choice keys. +\docsubsection(sec:choicekeys)<choice keys (choice)>{Choice keys} -If <mp> is absent, then \fx{\ltxkeys@choicekey} uses \ipreffamkey{chc} to hold the user input. +The choice keys of the \pkg'{ltxkeys} differ from those of the \pkg'{xkeyval} in at least two respects; namely, the presence of the macro prefix for choice keys in the \pkg'{ltxkeys} and the introduction of the optional \quoted{\redclam} prefix. -<alt> is the list of nominations for the key value, \ie, admissible values of the key. When <alt> has no \fx{/.code} or forward slash \fx{/} in it, then it is expected to be of the familiar \pkg'{xkeyval} syntax: +\start+{newmacro}[\ltxkeys@choicekey,\ltxkeys@newchoicekey] +\ltxkeys@choicekey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@choicekey|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@choicekey|*|+[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@choicekey|*|+|![|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} - {choice1, choice2, etc} +\ltxkeys@newchoicekey[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@newchoicekey|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@newchoicekey|*|+ + [|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@newchoicekey|*|+|! + [|A(pref)]{|A(fam)}[|A(mp)]{|A(key)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\finish{newmacro} +\fxim*{\ltxkeys@choicekey,\ltxkeys@newchoicekey} -If \ang{alt} it has \fx{/.code} or \fx{/} in it, then it is expected to have one of the following syntaxes: +Choice keys check the user input against the nominations \ang{alt} suggested by the author of a key. The comma-separated list \ang{alt} is the list of admissible values of the key. The \stform will convert user input to lowercase before checking it against the list of nominations in \ang{alt}. In all the above variants, if the input is valid, then the callback \ang{cbk} will be executed. If the user input isn't valid, the \unplform+ will flag an error, while the \plform+ will execute \ang{fn}. The \clform+ will fully expand the user input before checking it against the nominations in \ang{alt}. The \clform arises from the fact that sometimes macros are passed as the values of choice keys. If \ang{mp} is absent, then \fx{\ltxkeys@choicekey} uses \ipreffamkey{chc} to hold the user input. - {choice1/.code=callback1|A(keyparser) choice2/.code=callback2|A(keyparser) etc} +When \ang{alt} has no literal form \quotedfx{/.code} or forward slash \quotedfx{/} in it, then it is expected to be of the familiar \pkg'{xkeyval} syntax: - {choice1/callback1|A(keyparser) choice2/callback2|A(keyparser) etc} +\start'{macro}[Syntax of `nominations' for choice keys] +{choice1,choice2,etc.} +\finish{macro} -This means that if you have \fx{/.code} or \fx{/} in any of the callbacks, it has to be enclosed in curly braces. Please recall that the default value of \ang{keyparser} is \qsemicolon. \fx{keyparser} is a package option. This syntax also implies that if you have the \ang{keyparser} in \ang{defn}, it has to be wrapped in curly braces. The \ang{keyparser} in this syntax can also be \qcomma. +If \ang{alt} has \quotedfx{/.code} or \quotedfx{/} in it, then it is expected to have one of the following syntaxes: -\Note Here is the rule for parsing the \ang{alt} list. First the package checks if the declared key parser (\ie, \ang{keyparser}) is in the \ang{alt} list. If the parser exists in \ang{alt}, then the list is parsed using this parser. Otherwise the list is parsed using comma as the parser. Moreover, the package checks if \fx{.code} separates \ang{choice} from \ang{callback}. If no \fx{.code} is found, then \fx{/} is assumed to be the separator. But note that when there is no \ang{callback}, then neither \fx{.code} nor \fx{/} is necessary. +\start'{macro}[Syntaxes of `nominations' for choice keys] +{% + choice1|R(/.code=)callback1|R(|A(keyparser)) + choice2|R(/.code=)callback2|R(|A(keyparser)) + etc. +} -It is possible to refer to the current value of \ang{key} as \fx{#1} in <alt>. +{% + choice1|R(/)callback1|R(|A(keyparser)) + choice2|R(/)callback2|R(|A(keyparser)) + etc. +} +\finish{macro} +\aiidxm*[\emph,choice keys]{nominations} +\aidxm*{/.code} +\aidxs*{.code}{/.code} -The \stform of \fx{\ltxkeys@choicekey} will convert the user input to lowercase before checking <alt> and executing the callbacks. The \plform will execute <fn> in place of <callback> if the user input isn't in <alt>. +If the parser is \qsemicolon, then we would have -<bin> has, \eg, the syntax \fx{[\userinput\nr]}, where \fx{\userinput} will hold the user input (in lowercase if the \stform of \fx{\ltxkeys@choicekey} is called), and \fx{\nr} will hold the serial number of the value in the list of nominations <alt>, starting from 0. If the input isn't valid, \fx{\userinput} will still hold the user input, but \fx{\nr} will be~-1. +\start'{example}[Syntaxes of `nominations' for choice keys] +{choice1|R(/.code=)callback1; choice2|R(/.code=)callback2; etc.} -Example (defining choice key): +{choice1|R(/)callback1; choice2|R(/)callback2; etc.} +\finish{example} - \ltxkeys@choicekey[KV]{fam}{keya}{% - % There are no callbacks for these simple nominations: - center,right,left,justified - }[center]{% <- default value - \def\x##1##2{==##1++#1++##2==}% - } +This means that if you have \quotedfx{/.code} or \quotedfx{/} in any of the callbacks, it has to be enclosed in curly braces. Please recall that the default value of \ang{keyparser} is \qsemicolon. \fx{keyparser} is a package option. This syntax also implies that if you have the \ang{keyparser} in \ang{defn}, it has to be wrapped in curly braces. The \ang{keyparser} in this syntax could also be \qcomma. - \ltxkeys@choicekey*+[KV]{fam}[mp@]{keya}[\userinput\nr]{% - center,right,left,justified - }[center]{% - \def\x##1##2{==##1++#1++##2==}% - }{% - \@latex@error{Inadmissible value '\string#1' for keya}\@ehc - } +\ltsnote Here is the rule for parsing the \ang{alt} list. First the package checks if the declared key parser (\ie, \ang{keyparser}) is in the \ang{alt} list. If the parser exists in \ang{alt}, then the list is parsed using this parser. Otherwise the list is parsed using comma as the parser. Moreover, the package checks if \quotedfx{.code} separates \ang{choice} from the callback \ang{cbk}. If no \quotedfx{.code} is found, then \quotedfx{/} is assumed to be the separator. But note that when there is no \ang{cbk}, then neither \quotedfx{.code} nor \quotedfx{/} is necessary. - \ltxkeys@choicekey*+[KV]{fam}[mp@]{keyb}[\userinput\nr]{% - % There are callbacks for these nominations: - center/.code=\def\x##1{*##1*#1*##1}; - right/.code=\edef\z{\expandcsonce\ltxkeys@tval}; - left/.code=\edef\myinput{\cpttrimspaces{#1}}; - justified/.code=\letcsntocs{#1@align}\relax - }[center]{% - \def\x##1##2{==##1++#1++##2==}% - }{% - \@latex@error{Inadmissible value '\string#1' for keya}\@ehc - } +It is possible to refer to the current value of \ang{key} as \fx{#1} in \ang{alt}. - \ltxkeys@choicekey[KV]{fam}[mp@]{keyb}[\userinput\nr]{% - % The callbacks can also take the following form: - center/\def\x##1{*##1*#1*##1}, - right/\edef\z{\expandcsonce\ltxkeys@tval}, - left/\edef\userinput{\cpttrimspaces{#1}}, - justified/\letcsntocs{#1@align}\relax - }[center]{% - \def\x##1##2{==##1++#1++##2==}% - } +The \stform of \fx{\ltxkeys@choicekey} will convert the user input to lowercase before checking \ang{alt} and executing the callbacks. The \plform will execute \ang{fn} in place of \ang{cbk} if the user input isn't in \ang{alt}. +\ang{bin} has, \eg, the syntax \fx{[\userinput\order]}, where \fx{\userinput} will hold the user input (in lowercase if the \stform of \fx{\ltxkeys@choicekey} is called), and \fx{\order} will hold the serial number of the value in the list of nominations \ang{alt}, starting from 0. If the input isn't valid, \fx{\userinput} will still hold the user input, but \fx{\order} will be~$-1$. -\docsubsection{Defining boolean and command keys with one command} +\start+{example}[\ltxkeys@choicekey nominations] +\ltxkeys@choicekey[KV]{fam}{keya}{% + |com(There are no callbacks for these simple nominations:) + center,right,left,justified +}[center]{|com( <- default value) + \def\x##1##2{==##1++#1++##2==}% +} -More than one boolean and command keys can be defined simultaneously by the following command: +\ltxkeys@choicekey|*|+[KV]{fam}[mp@]{keya}[\userinput\order]{% + center,right,left,justified +}[center]{% + \def\x##1##2{==##1++#1++##2==}% +}{% + \@latex@error{Inadmissible value `\detokenize{#1}' for keya}\@ehc +} - \ltxkeys@definekeys[pref]<fam>[macro-pref]{% - <key>=<default>/<callback>; another set of key; etc - } +\ltxkeys@choicekey|*|+[KV]{fam}[mp@]{keyb}[\userinput\order]{% + |com(There are callbacks for these nominations:) + land/.code=\def\x##1{*##1*#1*##1}; + air/.code=\edef\z{\expandcsonce\ltxkeys@tval}; + sea/.code=\edef\myinput{\cpttrimspaces{#1}}; + space/.code=\letcsntocs{#1@earth}\relax +}[center]{% + \def\z##1##2{==##1++#1++##2==}% +}{% + \@latex@error{Inadmissible value `\detokenize{#1}' for keya}\@ehc +} - \ltxkeys@definekeys*[pref]<fam>[macro-pref]{% - <key>=<default>/<callback>; another set of key; etc - } +\ltxkeys@choicekey[KV]{fam}[mp@]{keyb}[\userinput\order]{% + |com(The callbacks can also take the following form:) + center/\ltxkeys@cmdkey[KV]{fam}[mp@]{keyd}{\def\x####1{####1*##1*####1}}, + right/\let\align\flushright, + left/\let\align\flushleft\edef\userinput{\cpttrimspaces{#1}}, + justified/\let\align\relax +}[center]{% + \def\z##1##2{==##1++#1++##2==}% +} -<default> can be absent in the case of command keys, and <callback> can be absent for the two types of key. Boolean keys must, however, have default values {true | false}, to be distinguishable from command keys. The \plsign that separates the key name from the default value can be replaced with forward slash (/). That is, the following syntax is also permitted: +\ltxkeys@choicekeys[KV]{fam}[mp@]{keya,|R(\savevalue\needvalue){keyb}}% +[\val\order]{% + center/\ltxkeys@cmdkey[KV]{fam}[mp@]{keyd}[|R(\usevalue){keyb}] + {\def\x####1{####1*##1*####1}}, + right/\def\y##1{##1++#1++##1}, + left/\edef\userinput{\cpttrimspaces{#1}}, + justified/\letcsntocs{#1@align}\relax +}[center]{% + \def\z##1##2{==##1++#1++##2==}% +} +\ltxkeys@setkeys[KV]{fam}{keyb=center,keyd} +\finish{example} - \ltxkeys@definekeys[pref]<fam>[macro-pref]{% - <key>/<default>/<callback>; another set of key; etc - } +The representations \ffx'{\savevalue,\usevalue,\needvalue} are pointers (see \sref{sec:keypointers}). - \ltxkeys@definekeys*[pref]<fam>[macro-pref]{% - <key>/<default>/<callback>; another set of key; etc - } -You can use the command \fx{\CheckInput} in \ang{callback} to introduce choice keys as command keys (see example below). +\docsubsubsection(sec:choicekeys-sameattributes) + {Choice keys that share the same attributes} -Ordinary keys and conventional choice keys can't be introduced directly by this command (use \fx{\ltxkeys@declarekeys} instead). +The commands \ffx'{\ltxkeys@choicekey,\ltxkeys@newchoicekey} can be used to introduce choice keys \ang{keys} that share the same path or bases (key prefix, key family, and macro prefix) and callback \ang{cbk}. All the user has to do is to replace \ang{key} in these commands with the comma-separated list \ang{keys}. Some users might prefer to see these commands in their plural forms when defining several keys with the same attributes. We have therefore provided the following aliases without modifying the internal coding: -The \stform can be used to define new keys (in the sense of \hx{\newcommand}). +\start+{newmacro}[\ltxkeys@choicekeys,\ltxkeys@newchoicekeys] +\ltxkeys@choicekeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@choicekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@choicekeys|*|+ + [|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@choicekeys|*|+|! + [|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@newchoicekeys[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@newchoicekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)} +\ltxkeys@newchoicekeys|*|+ + [|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\ltxkeys@newchoicekeys|*|+|! + [|A(pref)]{|A(fam)}[|A(mp)]{|A(keys)}[|A(bin)]{|A(alt)}[|A(dft)]{|A(cbk)}{|A(fn)} +\finish{newmacro} +\fxim*{\ltxkeys@choicekeys,\ltxkeys@newchoicekeys} -\Note Keys defined by \fx{\ltxkeys@definekeys} are automatically set/initialized instantly, to provide default values for immediate use. Boolean keys are preset with value \quoted{false}, so that they aren't turned \quoted{true} prematurely. -\Note In \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys} every line is assumed to end with a comment sign. This is to be specially noted if a space is desired at the end of line. You can insert such a space with a comment sign, or, if appropriate, use \hx{\space}. +\docsubsection(sec:definekeys){Defining boolean and command keys with one command} +\aidx*{defining multiple keys} - Example (\stform -> new keys): +In my personal experience, boolean and command keys have been the most widely used types of key in the context of \pkg'{xkeyval}. More than one boolean and command keys can be defined simultaneously by the following command: - \ltxkeys@definekeys*[KV]<fam>[mp@]{% - % command key with callback: - keya={keepbraced}/\def\x##1{##1*#1*##1}; - % boolean key: - keyb=true/\def\y##1{##1yyy#1}; - % command key with no callback: - keyc=xxx; - % choice-like command key: - keyd=center/\CheckInput{#1}{left,right,center} - \ifinputvalid - \edef\myval{\expandcsonce\userinput} - \edef\numberinlist{\number\nr} - \edef\mychoices{\expandcsonce\nominations} - \else - \@latex@error{Input `#1' not valid}\@ehd - \fi; - % boolean key with no callback: - keyc=false; - } +\start{newmacro}[\ltxkeys@definekeys] +\ltxkeys@definekeys[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(key)|R(=)|A(dft)/|A(cbk); + another set of key attributes; etc. +} +\ltxkeys@definekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(key)|R(=)|A(dft)/|A(cbk); + another set of key attributes; etc. +} +\finish{newmacro} +\fxim*{\ltxkeys@definekeys} + +The default value \ang{dft} can be absent in the case of command keys, and the callback \ang{cbk} can be absent for the two types of key. Boolean keys must, however, have default values \fnz*{true,false}, to be distinguishable from command keys. The \eqsign that separates the key name from the default value can be replaced with forward slash (/). That is, the following syntax is also permitted: + +\start{newmacro}[\ltxkeys@definekeys] +\ltxkeys@definekeys[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(key)|R(/)|A(dft)/|A(cbk); + another set of key attributes; etc. +} +\ltxkeys@definekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(key)|R(/)|A(dft)/|A(cbk); + another set of key attributes; etc. +} +\finish{newmacro} +\fxim*{\ltxkeys@definekeys} + +You can use the command \fx{\CheckUserInput} in \ang{cbk} to indirectly introduce choice keys as command keys (see example below). + +Ordinary keys and conventional choice keys can't be introduced directly by this command (use the command \fx{\ltxkeys@declarekeys} instead). -In this example, \fx{\userinput} corresponds to \fx{#1}; \fx{\nr} is the numerical order of the user input in \fx{\nominations}; the list of valid values suggested at key definition time (\fnz{{left}{right}{center}} in this example). The boolean \fx{inputvalid} is associated with the command \fx{\CheckInput} and is available to the user. It is set \hx{true} when the user input is valid, and \hx{false} otherwise. +The \stform of \fx{\ltxkeys@definekeys} can be used to define non-existing boolean and command keys in the sense of \hx{\newcommand}. +\ltsnote Keys defined by \fx{\ltxkeys@definekeys} are automatically set/initialized instantly, to provide default values for immediate use. Boolean keys are preset with value \quoted{false}, so that they aren't turned \quoted{true} prematurely. -\docsubsection{Defining all types of key with one command} +\ltsnote In \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys} every line is assumed to end with a comment sign. This is to be specially noted if a space is desired at the end of line. You can insert such a space with a comment sign, or, if appropriate, use \hx{\space}. + +\start+{example}[\ltxkeys@definekeys] +|com(The |stform defines new keys:) +\ltxkeys@definekeys|*[KV]{fam}[mp@]{% + |com(Command key with callback:) + keya={keepbraced}/\def\x##1{##1*#1*##1}; + |com(Boolean key:) + keyb=true/\def\y##1{##1yyy#1}; + |com(Command key with no callback:) + keyc=xxx; + |com(Choice-like command key:) + keyd=center/\CheckUserInput{#1}{left,right,center} + \ifinputvalid |label(mac:ifinputvalid) + \edef\myval{\expandcsonce\userinput} + \edef\numberinlist{\number\order} + \edef\mychoices{\expandcsonce\nominations} + \else + \@latex@error{Input `#1' not valid}\@ehd + \fi; + |com(Boolean key with no callback:) + keye=false; +} +\finish{example} +\fxim*{\ifinputvalid,\CheckUserInput,\nominations,\userinput} +\aiidxm*[\bs,choice keys]{nominations,ifinputvalid} + +In this example, \fx{\userinput} corresponds to \fx{#1}; \fx{\order} is the numerical order of the user input in \fx{\nominations}; the list of valid values suggested at key definition time (\fnz*{left,right,center} in this example). The boolean \fx{inputvalid} is associated with the command \fx{\CheckUserInput} and is available to the user. It is set \hx{true} when the user input is valid, and \hx{false} otherwise. The command \fx{\CheckUserInput} expects two arguments: the user input and the list of nominations. It doesn't expect two branches (see \sref{sec:checkchoice}). + + +\docsubsection(sec:declarekeys){Defining all types of key with one command} +\aidx*{defining multiple keys} \start{newmacro}[\ltxkeys@declarekeys] -\ltxkeys@declarekeys[|A(pref)]<|A(fam)>[|A(mp)]{% |label(mac:declarekeys) - <|A(keytype)>/<|A(keyname)>/<|A(default)>/<|A(callback)>; another set of key; etc +\ltxkeys@declarekeys[|A(pref)]{|A(fam)}[|A(mp)]{%|label(mac:declarekeys) + |A(keytype)/|A(keyname)/|A(dft)/|A(cbk); + another set of key attributes; + etc. } -\ltxkeys@declarekeys|*[|A(pref)]<|A(fam)>[|A(mp)]{% - <|A(keytype)>/<|A(keyname)>/<|A(default)>/<|A(callback)>; another set of key; etc +\ltxkeys@declarekeys|*[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(keytype)/|A(keyname)/|A(dft)/|A(cbk); + another set of key attributes; + etc. } \finish{newmacro} +\fxim*{\ltxkeys@declarekeys} +\aidx*{style keys (sty*)} + +Here, the default value \ang{dft} and the callback \ang{cbk} can be absent in all cases. \ang{keytype} may be any one of \fnz{ord,cmd,sty,sty*,bool,choice}. The star (\redstar) in \quoted{sty\Redstar} has the same meaning as in \fx{\ltxkeys@stylekey} above, namely, undefined dependants will be defined on the fly when the parent key is set. The optional quantity \ang{mp} is the macro prefix, as in, \eg, \sref{sec:cmdkeys}. + +Choice keys must have their names associated with their admissible \ang{alt} values in the format \keydotchoice{keyname}{alt} (see example below). + +The \stform of \fx{\ltxkeys@declarekeys} can be used to define new keys (in the sense of \hx{\newcommand}). + +\ltsnote Keys defined by \fx{\ltxkeys@declarekeys} are automatically set instantly with their default values, to provide default functions for immediate use. Boolean keys are always initialized in this sense with \quoted{false}, so that they aren't turned \quoted{true} prematurely. + +\start+{example}[\ltxkeys@declarekeys] +\ltxkeys@declarekeys|*[KV]{fam}[mp@]{% + |com(Ordinary key with callback:) + ord/keya/.1\paperwidth/\leftmargin=#1\relax; + |com(Command key with callback. `.code=' is allowed before callback:) + cmd/keyb/10mm/.code=\rightmargin=#1\def\x##1{##1*#1*##1}; + |com(Boolean key without callback:) + bool/keyc/true; + |com(Boolean key with callback:) + bool/keyd/true/\ifmp@keyd\@tempswatrue\else\@tempswafalse\fi; + |com(Style key with callback but no dependants:) + sty/keye/aaa/.code=\def\y##1{##1yyy#1}; + |com(Style key with callback and dependants `keyg' and `keyh':) + sty|*/keyf/blue/\def\y##1{##1#1}/ + cmd|R(>)keyg|R(>)\parentval|R(>)\def\z####1{####1+##1+####1}|R(,) + ord|R(>)keyh|R(>)\KV@fam@keyf@value; + |com(Choice key with simple nominations and callback. The function) + |com(\order is generated internally:) + choice/keyi|R(.){left,right,center}/center/ + \edef\shoot{\ifcase\order 0\or 1\or 2\fi}; + |com(Choice key with complex nominations:) + choice/keyj|R(.){ + center/.code=\def\mp@textalign{center}, + left/.code=\def\mp@textalign{flushleft}, + |com(`.code=' can be omitted:) + right/\def\mp@textalign{flushright}, + justified/\let\mp@textalign\relax + } + /center/\def\yy##1{##1yy#1}; + ord/keyk/\letcstocsn\func{as-defined-by-user} +} +\finish{example} +\aidx*{style keys (sty*)} +\aidx*{/.code} -Here, \ang{default} and \ang{callback} can be absent in all cases. \ang{keytype} may be any one of \fnz{{ord}{cmd}{sty}{sty*}{bool}{choice}}. +Notice the \fx{>...>} used for the attributes of the dependant keys \quotedlist'{keyg,keyh} of style key \quoted{keyf}. Dependent keys come as the last attributes of a style key, and they (dependant keys) are separated by \qcomma. The default value of the dependant key \quoted{keyg} will in this example be whatever is submitted for \quoted{keyf}. As indicated in \sref{sec:stylekeys}, the function \fx{\KV@fam@keyf@value} has a longer shelf life than \fx{\parentval}. Notice also the syntax \keydotchoice{keyi}{left,right,center} for the choice keys \quotedlist'{keyi,keyj}. It says that the alternate admissible values for \quoted{keyi} are \quotedlist'{left,right,center,justified}; similarly for key \quoted{keyj}. -The star (\redstar) in <sty\RedStar> has the same meaning as in \fx{\ltxkeys@stylekey} above. -Choice keys must have their names associated with their admissible <alt> values in the format <keyname.{<alt>}> (see example below). +\docsubsubsection(sec:sametypekeys){Defining keys of common type with + \headfx{\ltxkeys@declarekeys}} -The \stform can be used to define new keys (in the sense of \hx{\newcommand}). +If you have to define keys of the same type with the command \fx{\ltxkeys@declarekeys}, then the following syntax allows you to avoid entering the key types repeatedly: -\Note Keys defined by \fx{\ltxkeys@declarekeys} are automatically set instantly, to provide default values for immediate use. Boolean keys are always initialized in this sense with \quoted{false}, so that they aren't turned \quoted{true} prematurely. +\start{macro}[\ltxkeys@declarekeys] +\ltxkeys@declarekeys|(|A(keytype)|)[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(keyname)/|A(dft)/|A(cbk); + another set of key; etc. +} +\ltxkeys@declarekeys|*|(|A(keytype)|)[|A(pref)]{|A(fam)}[|A(mp)]{% + |A(keyname)/|A(dft)/|A(cbk); + another set of key; etc. +} +\finish{macro} +\fxi*{\ltxkeys@declarekeys} -\start{example}[\ltxkeys@declarekeys] -\ltxkeys@declarekeys*[KV]<fam>[mp@]{% - cmd/keya/mm/\def\x##1{##1*#1*##1}; - bool/keyb; - sty/keyc/xxx/\def\y##1{##1yyy#1}; - sty*/keyd/blue/\def\y##1{##1#1}/ - cmd>keye>\parentval>\def\z####1{####1+##1+####1}; - choice/keyf.{left,right,center}/ - \ifcase\nr\def\shoot{0}\or\def\shoot{1}\or\def\shoot{2}\fi; +\start+{example}[\ltxkeys@declarekeys] +\ltxkeys@declarekeys|(bool|)[KV]{fam}[mp@]{% + keya/true/\def\x##1{##1*#1*##1}; + keyb/true; + keyc/true/\def\y##1{##1yyy#1} +} +\ltxkeys@declarekeys|*|(sty|*|)[KV]{fam}[mp@]{% + keyd/xxx/\def\y##1{##1yyy#1}; + |com(keyf is a dependant of keye:) + keye/blue/\def\y##1{##1#1}/cmd>keyf>\parentval>\def\z####1{####1+##1+####1} } \finish{example} -Notice the \fx{>...>} used for the dependant key (\emph{keye}) attributes of style key \emph{keyd}. The default value of the dependant key \emph{keye} will in this example be whatever is submitted for \emph{keyd}. Notice also the syntax \keydotchoice{keyf}{left,right,center} for the choice key \emph{keyf}. It says that the alternate admissible values for \emph{keyf} are \emphlist'{left,right,center}. - -\docsubsection{Need-value keys} +\docsubsection(sec:needvalue)<need-value keys>{Need-value keys} Sometimes you may want to create keys for which the user must always supply his/her own values, even if the keys originally have default values. The default values of keys may not always be suitable. Take, for example, the height and width of a graphics image. For functions that are meant to handle generic images, it would certainly be inappropriate to relieve the user of the need to call picture height and width without corresponding values. To make a key a need-value key, simply attach the pointer \fx{\needvalue} to the key at definition time. This pointer can be used only when defining keys, and not when setting keys. - Example: +\start'{example}[Need-value keys] +\ltxkeys@cmdkey[KV]{fam}[mp@]{\needvalue{keya}}[blue]{% + \def\x##1{##1x#1x##1}% +} +\ltxkeys@setkeys[KV]{fam}{keya} +|com( -> Error: the author of `keya' designed it to require a user value.) +\finish{example} + +See more about key pointers in \sref{sec:keypointers}. + + +\docsubsection(sec:xfamilykeys)<xfamily keys>{Cross-family keys} +\aidxs*{cross-family keys}{xfamily keys} + +There are times when it is required to use the same, or nearly the same, set of keys for different functions and purposes, and thus for different key families and prefixes. We call such keys \quoted{cross-family keys} or \quoted{xfamily keys}. Such keys bear the same names across key families and key prefixes. For example, the \pkg'{xwatermark} defines three functions (\ffx'{\xwmminipage,\xwmboxedminipage,\xwmcolorbox}) using nearly the same set of keys. In each of the three families, the keys bear the same or similar names and they have similar callbacks. The management of cross-family keys can be simplified by using the tools of this section. Even if not all the cross-family keys are needed in all the families to which they may belong, there are still advantages in using this type of keys when some of the keys cut across families. + +Cross-family keys are automatically initialized after being defined---as we saw in the case of the commands \ffx'{\ltxkeys@definekeys,\ltxkeys@declarekeys}. + +\start+{newmacro}[\ltxkeys@savexfamilykeys,\ltxkeys@definexfamilykeys] +\ltxkeys@savexfamilykeys<|A(id)>{|A(keylist)} +\ltxkeys@savexfamilykeys|*<|A(id)>|A(keylistcmd) + +\ltxkeys@savexfamilykeys<|A(id)>|(|A(keytype)|){|A(keylist)} +\ltxkeys@savexfamilykeys|*<|A(id)>|(|A(keytype)|)|A(keylistcmd) + +\ltxkeys@definexfamilykeys<|A(id)>[|A(pref)]{|A(fam)}[|A(mp)]{|A(na)} +\ltxkeys@definexfamilykeys|*<|A(id)>[|A(pref)]{|A(fam)}[|A(mp)]{|A(na)} +\finish{newmacro} +\fxim*{\ltxkeys@savexfamilykeys,\ltxkeys@definexfamilykeys} + +Here, \ang{id} is the mandatory identifier of the key list \ang{keylist}, \ang{pref} is the key prefix, \ang{fam} the key family, \ang{mp} is the macro prefix, and \ang{na} is the list of keys belonging to \ang{keylist} that shouldn't be presently defined and initialized. The \ang{na} can be empty, but it must always be there as a mandatory argument. \emph{So, where you put the key list in the commands \emfx{\ltxkeys@definekeys} and \emfx{\ltxkeys@declarekeys} is where you now have to locate \ang{na}}. For any use of the command \fx{\ltxkeys@definexfamilykeys} we expect the \ang{na} to be far less than the remaining keys. The \stform of \fx{\ltxkeys@savexfamilykeys} will expand \ang{keylistcmd} once before saving the xfamily keys. The \stform of \fx{\ltxkeys@definexfamilykeys} will define only definable keys, in the sense of \hx{\newcommand}. - \ltxkeys@cmdkey[KV]{fam}[mp@]{\needvalue{keya}}[blue]{% - \def\x##1{##1x#1x##1}% - } - \ltxkeys@setkeys[KV]{fam}{keya} - % -> Error: the author of 'keya' designed it to require a user value. +\ang{keylist} and \ang{keylistcmd} have the same syntax as the last arguments of \ffx'{\ltxkeys@definekeys,\ltxkeys@declarekeys}: -See more about key pointers in Section \amref{sec:}. +\start'{newmacro}[Syntax of keylist] +|A(keytype)/|A(keyname)/|A(dft)/|A(cbk); +another set of key attributes; +etc. +\finish{newmacro} +Here too \ang{keytype} must be a member of the set \fnz{ord,cmd,sty,sty*,bool,choice}, \ang{keyname} is obviously the name of the key, \ang{dft} is the default value of the key, and \ang{cbk} is the callback of the key. If the key is a style key, you can add the attributes of the dependants after \ang{cbk} (see the syntaxes of the commands \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys}). -\docsection{Setting keys} +The mandatory identifier \ang{id} for each list must be unique, not withstanding the fact that the identifiers have their separate namespace. -Keys can be set by the following utilities: +If the xfamily keys are all of the same type (\ie, only one of the types \fnz{ord,cmd,sty,sty*,bool,choice}), you can specify \ang{keytype} as an optional argument in parenthesis to the command \fx{\ltxkeys@savexfamilykeys}. The parenthesis can't appear with an empty content. -\docsubsection{Set defined keys} +\start+{example}[xfamily keys] +\ltxkeys@savexfamilykeys<x1>{% + ord/keya/\paperwidth/\mylength=#1; + cmd/keyb/black/\def\y##1{##1}; + choice/keyc.{left,right,center}/center/\def\z##1{##1}; + bool/keyd/true +} - \ltxkeys@setkeys[|A(pref)]{|A(pref)}[|A(na)]{|A(keyvals)} - \ltxkeys@setkeys*+[|A(prefs)]{|A(fams)}[|A(na)]{|A(keyvals)} +|com(Now define the keys previously stored with the id no. x1.) +|com(For now don't define keys keyb and keyc:) +\ltxkeys@definexfamilykeys<x1>[KV]{fam}[mp@]{keyb,keyc} -Here, \ang{prefs}, \ang{fams} and \ang{keyvals} are comma-separated list of key prefixes, families and \keyval pairs, respectively. Keys listed in the comma-separated list \ang{na} are ignored. The \stform will save all undefined keys with prefix \ang{pref} and in family \ang{fam} in the macro \fnl{pref}{fam}{rmkeys}, to be set later, perhaps with \fx{\ltxkeys@setrmkeys}. The \plform will search in all the prefixes in \ang{prefs} and all families in \ang{fams} for a key before logging the key in \fnl{pref}{fam}{rmkeys} (if the \makered{$*+$}-form is used) or reporting it as undefined. +|com(Once defined the keys can be executed separately:) +\ltxkeys@setkeys[KV]{fam}{keya=.5\hsize,keyd=false} +\show\ifmp@keyd -To avoid infinite re-entrance in \fx{\ltxkeys@setkeys} and the consequent bombing out of \fx{\ltxkeys@setkeys}, the package option \fx{keystacklimit} is introduced. Its default value is~4, meaning that \fx{\ltxkeys@setkeys} can't ordinarily be nested beyond level~4. If you must nest \fx{\ltxkeys@setkeys} beyond this level, you can raise the \fx{keystacklimit} as a package option via \hx{\usepackage} or, if \pkg'{catoptions} is loaded before \hx{\documentclass}, via \hx{\documentclass}. For example, +|com(Now define the keys previously stored with the id no. x1 for) +|com(another family. This time we don't want to define key keyb:) +\ltxkeys@definexfamilykeys<x1>[KVA]{|R(fama)}[mpa@]{keyb} -\start{example} -\usepackage[keystacklimit=6]{ltxkeys} +|com(You can save and define xfamily keys of only one key type,) +|com(command keys in the following example:) +\ltxkeys@savexfamilykeys<x1>|R(|(cmd|)){% + keya/\paperwidth; + keyb/blue/\def\x##1{#1x##1}; +} +|com(Define the saved keys and ignore none of them:) +\ltxkeys@definexfamilykeys|*<x1>[KV]{fam}[mp@]{} +\ltxkeys@setkeys[KV]{fam}{keya=.5\hsize,keyb=red} +\finish{example} +\fxi*{\ltxkeys@savexfamilykeys,\ltxkeys@definexfamilykeys} + +\start+{example}[xfamily keys] +|com(`keya' and `keyd' are starred style keys but `keyd' has no dependants:) +\ltxkeys@savexfamilykeys<a1>|(sty|*|){% + keya/center/.code=\def\xx##1{##1xx#1}/ + ord>\needvalue{keyb}>\parentval>\edef\yy##1{##1yy\unexpanded{#1}}, + |com(The braces around `center' |(the default value of `keyc'|)) + |com(will be preserved in parsing:) + cmd>keyc>{center}; + |com(The braces around the callback of `keyd' will be preserved:) + keyd/red/.code={\def\x{\color{#1}print aaa}}; +} +|com(Ignore `keyd' in defining keys saved in `a1':) +\ltxkeys@definexfamilykeys*<a1>[KV]{fam}[mp@]{keyd} +|com(On setting `keya', `keyb' and `keyc' will be defined and initialized:) +\ltxkeys@setkeys[KV]{fam}{keya=left} \finish{example} -\fxim*{keystacklimit} +\aidx*{/.code=} + +Here is a real-life example that mimics some of the macros of the \pkg'{xwatermark}: + +\start+{example}[xfamily keys] +\ltxkeys@savexfamilykeys<a1>{% + cmd/width/\textwidth; + cmd/textcolor/black; + cmd/framecolor/black; + cmd/framesep/3\p@; + cmd/framerule/0.4\p@; + choice/textalign|R(.){% + center/.code=\def\mp@textalign{center}, + left/.code=\def\mp@textalign{flushleft}, + right/.code=\def\mp@textalign{flushright} + }/center; + bool/framebox/true; + ord/junkkey/throwaway; +} +|com(Ignore keys `framebox' and `junkkey' when defining family `ltxframebox':) +\ltxkeys@definexfamilykeys*<a1>[KV]{ltxframebox}[mp@]{framebox,junkkey} +|com(Ignore key `junkkey' when defining family `ltxminipage':) +\ltxkeys@definexfamilykeys<a1>[KV]{ltxminipage}[mp@]{junkkey} +|com(No key is ignored when defining `junkfamily':) +\ltxkeys@definexfamilykeys<a1>[KVX]{junkfamily}[mp@]{} + +\newcommand*\ltxframebox[2][]{% + \ltxkeys@setkeys[KV]{ltxframebox}{#1}% + \begingroup + \fboxsep\mp@framesep\fboxrule\mp@framerule + \cptdimdef\mp@boxwidth{\mp@width-2\fboxsep-2\fboxrule}% + \color{\mp@framecolor}% + \noindent + \fbox{% + \removelastskip + \parbox{\mp@boxwidth}{% + \begin\mp@textalign + \textcolor{\mp@textcolor}{#2}% + \end\mp@textalign + }% + }% + \endgroup +} +\newcommand*\ltxminipage[2][]{% + \ltxkeys@setkeys[KV]{ltxminipage}{#1}% + \begingroup + \fboxsep\mp@framesep + \fboxrule\ifmp@framebox\mp@framerule\else\z@\fi + \cptdimdef\mp@boxwidth{\mp@width-2\fboxsep-2\fboxrule}% + \noindent\begin{lrbox}\@tempboxa + \begin{minipage}[c][\height][s]\mp@boxwidth + \@killglue + \begin\mp@textalign + \textcolor{\mp@textcolor}{#2}% + \end\mp@textalign + \end{minipage}% + \end{lrbox}% + \@killglue + \color{\mp@framecolor}% + \ifmp@framebox\fbox{\fi\usebox\@tempboxa\ifmp@framebox}\fi + \endgroup +} +\begin{document} +\ltxframebox[ + framecolor=blue,textcolor=purple,textalign=left +]{% + Test text\endgraf ...\endgraf test text +} +\medskip +\ltxminipage[ + framecolor=blue,textcolor=purple,framebox=true,textalign=right +]{% + Test text\endgraf ...\endgraf test text +} +\end{document} +\finish{example} +\fxi*{\ltxkeys@savexfamilykeys,\ltxkeys@definexfamilykeys} -\docsubsection{Setting `remaining' keys} -The command \fx{\ltxkeys@setrmkeys}, which has both star (\redstar) and plus (\redplus) variants is the counterpart of \fx{\setrmkeys} of the \pkg'{xkeyval}: +\docsection(sec:settingkeys)<setting keys>{Setting keys} - \ltxkeys@setrmkeys[|A(pref)]{|A(pref)}[|A(na)] - \ltxkeys@setrmkeys*+[|A(prefs)]{|A(fams)}[|A(na)] +In the \pkg'{ltxkeys} there are many functions for setting keys. Keys can be set by the following utilities. -\docsubsection{Setting aliased keys} +\docsubsection{Setting defined keys} -Alias and aliased keys differ from style keys. Two keys may be aliased to each other, such that when one is set, the alias is automatically set with the same or a different value. The concept is similar to, but not identical with, that of style keys. The two aliases must all be in the same family and have the same key and macro prefixes. +\start+{newmacro}[\ltxkeys@setkeys] +\ltxkeys@setkeys[|A(pref)]{|A(fam)}[|A(na)]{|A(keyval)} +\ltxkeys@setkeys|*[|A(pref)]{|A(fam)}[|A(na)]{|A(keyval)} +\ltxkeys@setkeys|+[|A(prefs)]{|A(fams)}[|A(na)]{|A(keyval)} +\ltxkeys@setkeys|*|+[|A(prefs)]{|A(fams)}[|A(na)]{|A(keyval)} +\finish{newmacro} +\fxim*{\ltxkeys@setkeys} -\ltxkeys@setmnkey{<key>}[<value>] +Here, \ang{prefs}, \ang{fams} and \ang{keyval} are comma-separated list of key prefixes, families and \keyval pairs, respectively. Keys listed in the comma-separated list \ang{na} are ignored. The \stform will save all undefined keys with prefix \ang{pref} and in family \ang{fam} in the macro \fnl*'\bs{pref,fam,rmkeys}, to be set later, perhaps with \fx{\ltxkeys@setrmkeys}. The \plform will search in all the prefixes in \ang{prefs} and all families in \ang{fams} for a key before logging the key in \fnl*'\bs{pref,fam,rmkeys} (if the \redstar\redplus* variant is used) or reporting it as undefined. -Here, \ang{value} is optional; if it is not given, \ang{key} will be set with the current value of its alias. The commands \ffx'{\setmnkey, \setaliaskey} are shortened variants of \fx{\ltxkeys@setmnkey}. +To avoid infinite re-entrance of \fx{\ltxkeys@setkeys} and the consequent bombing out of the command, the package option \fxim{keydepthlimit} is introduced. Its default value is~4, meaning that \fx{\ltxkeys@setkeys} can't ordinarily be nested beyond level~4. If you must nest \fx{\ltxkeys@setkeys} beyond this level, an unlikely need, you can raise the \fx{keydepthlimit} as a package option via \hx{\usepackage} or, if \pkg'{catoptions} is loaded before \hx{\documentclass}, via \hx{\documentclass}. For example, - Example: +\start'{example}[Setting keydepthlimit] +\usepackage[keydepthlimit=6]{ltxkeys} +\finish{example} +\fxim*{keydepthlimit} - \ltxkeys@definekeys*[KV]<fam>[mp@]{% - printsign=true; - printmark=true/\ltxkeys@setmnkey{printsign}[false]; - keya=$+++$; - keyb=star/\ltxkeys@setmnkey{keya}[$***$] - } - \ltxkeys@definekeys*[KV]<fam>[mp@]{% - keya=sun/\CheckInput{#1}{star,sun,moon} - \ifinputvalid - \edef\givenval{\userinput} - \edef\found{\ifcase\nr star@\or sun@\or moon@\fi} - \else - \@latex@error{Input `#1' not valid}\@ehd - \fi; - keyb=star/\ltxkeys@setmnkey{keya}; - } +The more appropriate name \fxi{keystacklimit} is an alias for \fx{keydepthlimit}. -The boolean \fx{inputvalid} associated with the command \fx{\CheckInput} is described above in \amref{sec:}. +\docsubsection(sec:rmkeys)<rmkeys,remaining keys>{Setting \headquoted{remaining} keys} + +The command \fx{\ltxkeys@setrmkeys}, which has both star (\redstar) and plus (\redplus) variants, is the counterpart of \fx{\setrmkeys} of the \pkg'{xkeyval}: + +\start{newmacro}[\ltxkeys@setrmkeys] +\ltxkeys@setrmkeys[|A(pref)]{|A(fam)}[|A(na)] +\ltxkeys@setrmkeys|*[|A(pref)]{|A(fam)}[|A(na)] +\ltxkeys@setrmkeys|+[|A(prefs)]{|A(fams)}[|A(na)] +\ltxkeys@setrmkeys|*|+[|A(prefs)]{|A(fams)}[|A(na)] +\finish{newmacro} +\fxim*{\ltxkeys@setrmkeys} + +The command \fx{\ltxkeys@setrmkeys} sets in the given prefixes and families the \quoted{remaining keys} saved when calling the \stform of \fx{\ltxkeys@setkeys} or \fx{\ltxkeys@setrmkeys}. \ang{na} is again the list of keys that should be ignored, \ie, not executed and not saved. The \unstform of \fx{\ltxkeys@setrmkeys} will report an error if a key is undefined. The \stform of the macro \fx{\ltxkeys@setrmkeys}, like the \stform of \fx{\ltxkeys@setkeys}, ignores keys that it cannot find and saves them on the list saved for a future call to \fx{\ltxkeys@setrmkeys}. Keys listed in \ang{na} will be ignored fully and will not be appended to the saved list of remaining keys. -The example of 'printsign' and 'printmark' is similar, but not equivalent, to the notion of biboolean keys. Biboolean keys have equal symmetry (\ie, they can call each other with equal propensity) and they won't bomb out in an infinite reentrance. This is not the case with aliased keys: only slave/alias can set or call master/main key. If they both call each other, the user will be alerted to the fact that there is an infinite reentrance of keys. The notion of 'slave' and 'master' used in the \pkg'{ltxkeys} may be counterintuitive but in reality it is quite logical. -Schemes like the following are disallowed for obviously reasons; the package will flag an error if they occur: +\docsubsection(sec:aliasedkeys)<aliased keys>{Setting aliased keys} -\start{example}[Nested \setmnkey] -\ltxkeys@ordkey[XWM]{main}{testa}[true]{\setmnkey{testb}} -\ltxkeys@ordkey[XWM]{main}{testb}[true]{\setmnkey{testa}} -\ltxkeys@setkeys[XWM]{main}{testa} +Aliased keys differ from style keys of \sref{sec:stylekeys}. Two keys may be aliased to each other, such that when one is set, the alias is automatically set with the same or a different value. The concept is similar to, but not identical with, that of style keys. The two aliases must all be in the same family and have the same key and macro prefixes. + +\start{newmacro}[\ltxkeys@setaliaskey] +\ltxkeys@setaliaskey{|A(key)}[|A(value)] +\finish{newmacro} +\fxim*{\ltxkeys@setaliaskey} + +Here, \ang{value} is optional; if it is not given, \ang{key} will be set with the current value of its alias. The command \fxis'{\setaliaskey}{\ltxkeys@setaliaskey} is a shortened variant of \fx{\ltxkeys@setaliaskey}. + +\start+{example}[\ltxkeys@setaliaskey] +\ltxkeys@definekeys|*[KV]{fam}[mp@]{% + printsign=true; + printmark=true/\ltxkeys@setaliaskey{printsign}[false]; + keya=$+++$; + keyb=star/\ltxkeys@setaliaskey{keya}[$***$] +} +\ltxkeys@definekeys|*[KV]{fam}[mp@]{% + keya=sun/\CheckUserInput{#1}{star,sun,moon} + \ifinputvalid + \edef\givenval{\userinput} + \edef\found{\ifcase\order star@\or sun@\or moon@\fi} + \else + \@latex@error{Input `#1' not valid}\@ehd + \fi; + keyb=star/\ltxkeys@setaliaskey{keya}; +} \finish{example} -\aidx*{Nested \headfx{\setmnkey}} +The boolean \fx{\ifinputvalid} associated with the command \fx{\CheckUserInput} is described in \sref{mac:ifinputvalid} (see also \sref{sec:checkchoice}). -\docsubsection{Using key pointers} +The example involving \quotedlist'{printsign,printmark} is similar, but not equivalent, to the notion of biboolean keys. Biboolean keys have equal symmetry (\ie, they can call each other with equal propensity) and they won't bomb out in an infinite reentrance. This is not the case with aliased keys: only slave/alias can set or call master/main key. If they both call each other, the user will be alerted to the fact that there is an infinite reentrance of keys. The notion of 'slave' and 'master' used in the \pkg'{ltxkeys} may be counterintuitive but in reality it is quite logical. -The \ffx'{\savevalue,\usevalue} pointers of the \pkg'{xkeyval} are still available at key setting time, but with increased robustness and optimization. Curly braces in values are preserved throughout, and instead of saving the value of each key tagged with \fx{\savevalue} in a separate macro, we save all such keys and their values in only one macro (for each combination of <pref> and <fam>) and use a fast search technique to find the values when they are needed later (by any key tagged with \fx{\usevalue}). +Schemes like the following are disallowed, to avoid back-linking of \fx{\ltxkeys@setaliaskey}. The package will flag an error if something like the following occurs: + +\start+{example}[Illegal nested \ltxkeys@setaliaskey] +\ltxkeys@ordkey[KV]{fam}{keya}[true]{\setaliaskey{keyb}} +\ltxkeys@ordkey[KV]{fam}{keyb}[true]{\setaliaskey{keya}} +\ltxkeys@setkeys[KV]{fam}{keya} +\finish{example} +\aidx*{no nested \headfx{\setaliaskey}} -Here is an interesting example (and test) of use of pointers: - \ltxkeys@stylekey*[KV]{fam}{\needvalue{keya}}[{left}](% - % #1 here refers to the value of the dependant key - % at the time it is being set. - ord/\needvalue{keyb}/\parentval/\edef\y##1{##1xx\unexpanded{#1}}; - cmd/keyc/{center} - ){% - % #1 here refers to the value of the parent key - % at the time it is being set: - \def\x##1{##1xx#1} - } - \ltxkeys@setkeys[KV]{fam}{\savevalue{keya}={\def\y##1{##1}}, - \savevalue{keyb}=\usevalue{keya},keyc=\usevalue{keyb}} +\docsubsection(sec:keypointers){Using key pointers} +\aidx*{key pointers} +\aidxs*{pointers}{key pointers} +The \ffx'{\savevalue,\usevalue} pointers of the \pkg'{xkeyval} are still available at key setting time, but with increased robustness and optimization. Curly braces in values are preserved throughout, and instead of saving the value of each key tagged with \fx{\savevalue} in a separate macro, we save all such keys and their values in only one macro (for each combination of \ang{pref} and \ang{fam}) and use a fast search technique to find the values when they are needed later (by any key tagged with \fx{\usevalue}). -\docsubsection{Accessing the saved value of a key} +The pointer \fx{\needvalue} is a new type. It can be used by any key author to prompt the user of the key to always supply a value for the key. The pointers \ffx'{\savevalue,\usevalue,\needvalue} can all be used when defining keys; the pointer \fx{\usevalue} will, however, be ignored when defining keys, until when setting keys. The pointers \ffx'{\savevalue,\usevalue} can both be used when setting keys, but not the pointer \fx{\needvalue}. -As mentioned earlier, the pointers \ffx'{\savevalue, \usevalue} are available only within \fx{\ltxkeys@setkeys}. But suppose you have used \fx{\savevalue} within \fx{\ltxkeys@setkeys} to set the value of a key, how do you access that value outside of \fx{\ltxkeys@setkeys}? You can do this by using the following \fx{\ltxkeys@storevalue} command: +Here is an interesting example and proof of concept of pointers: - \ltxkeys@storevalue[<pref>]{<fam>}{<key>}<cs> - \ltxkeys@storevalue+[<pref>]{<fam>}{<key>}<cs><fallback> +\start'{example}[Key pointers] +\ltxkeys@stylekeys|*[KV]{fam}{% + \needvalue{keya},\savevalue\needvalue{keyb},\needvalue\savevalue{keyc} +}[{left}]|(% + |com(`#1' here refers to the value of the dependant key at the) + |com(time it is being set.) + ord/\savevalue{keyb}/\parentval/\edef\y##1{##1xx\unexpanded{#1}}; + cmd/keyc/{center} +|){% + |com(`#1' here refers to the value of the parent key at the time) + |com(it is being set.) + \def\x##1{##1xx#1} +} -Here, <cs> is the macro (defined or undefined) that will receive the saved value of \ang{key}. The plain variant of this command will raise an error message if the value of the key wasn't previously saved, while the \plform will resort to the user-supplied function <fallback>. Only saved key values can be recovered by this command. +\ltxkeys@setkeys[KV]{fam}{% + \savevalue{keya}={\def\y##1{##1}}, + \savevalue{keyb}=\usevalue{keya}, + keyc=\usevalue{keyb} +} +\finish{example} +\fxi*{\savevalue,\usevalue,\needvalue} + +If you have to save the values of many keys, then the above scheme of placing \fx{\savevalue} on keys at key setting time can be avoided by using the following commands: + +\start+{newmacro}[\ltxkeys@savevaluekeys,\ltxkeys@addsavevaluekeys, etc] +\ltxkeys@savevaluekeys[|A(pref)]{|A(fam)}{|A(list)} +\ltxkeys@addsavevaluekeys[|A(pref)]{|A(fam)}{|A(list)} +\ltxkeys@removesavevaluekeys[|A(pref)]{|A(fam)}{|A(list)} +\ltxkeys@undefsavevaluekeys[|A(pref)]{|A(fam)} +\ltxkeys@undefsavevaluekeys|![|A(pref)]{|A(fam)} +\ltxkeys@emptifysavevaluekeys[|A(pref)]{|A(fam)} +\ltxkeys@emptifysavevaluekeys|![|A(pref)]{|A(fam)} +\finish{newmacro} +\fxim*{\ltxkeys@savevaluekeys,\ltxkeys@addsavevaluekeys, + \ltxkeys@removesavevaluekeys,\ltxkeys@undefsavevaluekeys} - Examples: +The command \fx{\ltxkeys@savevaluekeys} will create, for the given key family and prefix, a list of keys whose values should be saved at key-setting time, if those keys don't already exist in the list. The command \fx{\ltxkeys@addsavevaluekeys} will add to the list those keys that don't already exist in the list; \fx{\ltxkeys@removesavevaluekeys} remove those save-keys that it can find in the list; while the command \fx{\ltxkeys@undefsavevaluekeys} will undefine the entire list of save-keys of the given key family and prefix. The command \fx{\ltxkeys@emptifysavevaluekeys} will simplify emptify the content of the save-key list. The \clform of the commands +\start+{macro} +\ltxkeys@undefsavevaluekeys +\ltxkeys@emptifysavevaluekeys +\finish{macro} - \ltxkeys@cmdkey[KV]{fam}{\needvalue{keya}}[{left}]{% - \def\x##1{##1xx#1} - } - \ltxkeys@setkeys[KV]{fam}{\savevalue{keya}={\def\y##1{##1}}} - \ltxkeys@storevalue[KV]{fam}{keya}\tempa - \ltxkeys@storevalue+[KV]{fam}{keya}\tempb{% - \@latex@error{No value saved for key 'keya'}\@ehc - } +will undefine or emptify the existing save-key list globally. +\start+{example}[\ltxkeys@savevaluekeys] +\ltxkeys@definekeys[KV]{fam}[mp@]{% + ord/keya/2cm/\def\x##1{#1xx##1}; + cmd/keyb/John; + bool/keyc/true/\ifmp@keyc\def\y##1{##1yy#1}\fi; + choice/keyd.{left,right,center}/ + \ifcase\order\def\shoot{0}\or\def\shoot{1}\or\def\shoot{2}\fi +} -\docsubsection{Pre-setting and post-setting keys} +\ltxkeys@savevaluekeys[KV]{fam}{keya,keyb,keyc} +\ltxkeys@addsavevaluekeys[KV]{fam}{keyd} +\ltxkeys@removesavevaluekeys[KV]{fam}{keya,keyb} +\ltxkeys@undefsavevaluekeys[KV]{fam} -\ltxkeys@presetkeys|![pref]{fam}{keys} -\ltxkeys@removepresetkeys|![pref]{fam}{keys} -\ltxkeys@undefpresetkeys|![pref]{fam} -\ltxkeys@postsetkeys|![pref]{fam}{keys} -\ltxkeys@removepostsetkeys|![pref]{fam}{keys} -\ltxkeys@undefpostsetkeys|![pref]{fam} +\ltxkeys@setkeys[KV]{fam}{keya=\usevalue{keyc},keyb=\usevalue{keya}} +\finish{example} -\fx{\ltxkeys@presetkeys} means \quoted{these keys should be set before setting other keys in any run of \fx{\ltxkeys@setkeys}}. \fx{\ltxkeys@postsetkeys} means \quoted{these keys are to be set after setting other keys in any run of \fx{\ltxkeys@setkeys}}. \ffx'{\ltxkeys@removepresetkeys, \ltxkeys@removepostsetkeys} remove \ang{keys} from preset and post-set lists, respectively. \ffx'{\ltxkeys@undefpresetkeys,\ltxkeys@undefpostsetkeys}, respectively, undefine all preset and post-set keys in the given family. The \RedPrime means that the assignments would be done (and the lists built) globally rather than locally. + +\docsubsection(sec:savedvalueofkey) + <saved value of key>{Accessing the saved value of a key} + +As mentioned earlier, the pointers \ffx'{\savevalue, \usevalue} are available for saving and using the values of keys within the command \fx{\ltxkeys@setkeys}. But suppose you have used \fx{\savevalue} within \fx{\ltxkeys@setkeys} to set the value of a key, how do you access that value outside of \fx{\ltxkeys@setkeys}? You can do this by using the following \fx{\ltxkeys@storevalue} command: + +\start{newmacro}[\ltxkeys@storevalue] +\ltxkeys@storevalue[|A(pref)]{|A(fam)}{|A(key)}|A(cs) +\ltxkeys@storevalue|+[|A(pref)]{|A(fam)}{|A(key)}|A(cs)|A(fallback) +\finish{newmacro} +\fxim*{\ltxkeys@storevalue} + +Here, \ang{cs} is the macro (defined or undefined) that will receive the saved value of \ang{key}. The plain variant of this command will raise an error message if the value of the key wasn't previously saved, while the \plform will resort to the user-supplied function \ang{fallback}. Only saved key values can be recovered by this command. + +\start+{example}[\ltxkeys@storevalue] +\ltxkeys@cmdkey[KV]{fam}{\needvalue{keya}}[{left}]{% + \def\x##1{##1xx#1} +} +\ltxkeys@setkeys[KV]{fam}{\savevalue{keya}={\def\y##1{##1}}} +\ltxkeys@storevalue[KV]{fam}{keya}\tempa +\ltxkeys@storevalue|+[KV]{fam}{keya}\tempb{% + \@latex@error{No value saved for key 'keya'}\@ehc +} +\finish{example} + + +\docsubsection(sec:presettingkeys){Pre-setting and post-setting keys} +\aidxm*{presetting keys, post-setting keys} + +\start+{newmacro}[\ltxkeys@presetkeys,\ltxkeys@postsetkeys,etc.] +\ltxkeys@presetkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@presetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@addpresetkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@addpresetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@removepresetkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@removepresetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@undefpresetkeys[|A(pref)]{|A(fam)} +\ltxkeys@undefpresetkeys|![|A(pref)]{|A(fam)} + +\ltxkeys@postsetkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@postsetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@addpostsetkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@addpostsetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@removepostsetkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@removepostsetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@undefpostsetkeys[|A(pref)]{|A(fam)} +\ltxkeys@undefpostsetkeys|![|A(pref)]{|A(fam)} +\finish{newmacro} +\fxim*{\ltxkeys@presetkeys,\ltxkeys@addpresetkeys,\ltxkeys@removepresetkeys, + \ltxkeys@undefpresetkeys,\ltxkeys@postsetkeys,\ltxkeys@addpostsetkeys, + \ltxkeys@removepostsetkeys,\ltxkeys@undefpostsetkeys} + +The optional \redclam here, as in many instances in the \pkg'{ltxkeys}, means that the assignments would be done (and the lists built) globally rather than locally. \quoted{Presetting keys} means \quoted{these keys should be set before setting other keys in every run of the command \fx{\ltxkeys@setkeys} for the given key prefix and family}. \fx{\ltxkeys@addpresetkeys} is an alias for \fx{\ltxkeys@presetkeys}, and this helps explain that \fx{\ltxkeys@presetkeys} is indeed a list merger. Neither the command \fx{\ltxkeys@presetkeys} nor \fx{\ltxkeys@postsetkeys} set keys itself, contrary to what the names might suggest. \quoted{Post-setting keys} means \quoted{these keys are to be set after setting other keys in every run of \fx{\ltxkeys@setkeys} for the given key prefix and family}. \fx{\ltxkeys@addpostsetkeys} is an alias for \fx{\ltxkeys@postsetkeys}. The commands + +\start+{macro} +\ltxkeys@removepresetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@removepostsetkeys|![|A(pref)]{|A(fam)}{|A(keys)} +\finish{macro} + +remove \ang{keys} from preset and post-set lists, respectively. The commands + +\start+{macro} +\ltxkeys@undefpresetkeys|![|A(pref)]{|A(fam)} +\ltxkeys@undefpostsetkeys|![|A(pref)]{|A(fam)} +\finish{macro} + +respectively, undefine all preset and post-set keys in the given family. Logically, you can't enter the same key twice in either preset or post-set list in the same family and prefix. \start+{example}[\ltxkeys@presetkeys, \ltxkeys@postsetkeys, etc.] -\ltxkeys@definekeys*[KV1]<fam1>[mp@]{% +\ltxkeys@definekeys|*[KV1]{fam1}[mp@]{% keya/left/\def\x##1{#1x##1}; \needvalue{keyb}/right; keyc/center; @@ -535,235 +1078,1522 @@ Logically, you can't enter the same key twice in either preset or post-set list |com(Eventually, only `keya' will be preset:) \ltxkeys@removepresetkeys|![KV1]{fam1}{keyb=\flushright} ... -|com(Because of the |* and |+ signs, all unknown keys |(those in family `fam2'|)) -|com(will be saved in the list of remaining keys, and can be set later) -|com(with \ltxkeys@setrmkeys:) +|com(Because of the |redstar and |redplus signs on \ltxkeys@setkeys, all unknown) +|com(keys |(those with prefix `KV2' and in family `fam2'|) will be saved in) +|com(the list of remaining keys, and can be set later with \ltxkeys@setrmkeys:) \ltxkeys@setkeys|*|+[KV1,KV2]{fam1,fam2}[keyd]{keya=xxx,keyb=yyy,keyc} \finish{example} -\docsubsection{Initializing keys} +\docsubsection(sec:initializekeys) + <initializing keys>{Initializing keys} - \ltxkeys@initializekeys[<prefs>]{<fams>}[<na>] +\start{newmacro}[\ltxkeys@initializekeys] +\ltxkeys@initializekeys[|A(prefs)]{|A(fams)}[|A(na)] +\finish{newmacro} +\fxim*{\ltxkeys@initializekeys} -This presets ALL keys previously defined in families \ang{fams} with their default values; it ignores keys listed in \ang{na}. If \ang{na} is a list of key-value pairs, the key names are extracted from the list before the family keys are initialized. Any key-value pairs in \ang{na} are not set at all. All keys defined by \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys} are automatically instantly initialized, except slave/alias and dependant keys. Alias and dependant keys aren't initialized in this case in order to avoid cyclic re-entrance of \fx{\ltxkeys@setkeys}. +This presets all the keys previously defined in families \ang{fams} with their default values; it ignores keys listed in \ang{na}. If \ang{na} is a list of \keyval pairs, the key names are extracted from the list before the family keys are initialized. Any \keyval pairs in \ang{na} are not set at all. All keys defined by \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys} are automatically instantly initialized, except slave/alias and dependant keys. Alias and dependant keys aren't initialized in this case in order to avoid cyclic re-entrance of \fx{\ltxkeys@setkeys}. The command \fx{\ltxkeys@initializekeys} can be used in place of \fx{\ltxkeys@executeoptions}, since \fx{\ltxkeys@executeoptions} (similar to \latex kernel's \hx{\ExecuteOptions}) fulfils the sole purpose of setting up default values of options. Keys defined via \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys} don't have to be initialized, since they're automatically initialized at definition time. +\begin{noteenv} +\label{nte:initializekeys} +Keys that have been processed by \fx{\ltxkeys@processoptions} (\ie, keys submitted by the user as package or class options via \hx{\documentclass} or \hx{\usepackage} can't be initialized or launched (see \sref{sec:launchingkeys} below for the meaning of \quoted{launched keys}). This is to avoid unwittingly setting keys to their default values after the user has submitted them as package or class options. This means that \quoted{option keys} (see \sref{sec:optionskeys}) can't be initialized or launched. +\end{noteenv} + + +\docsubsection(sec:launchingkeys)<launching keys>{Launching keys} + +\start{newmacro}[\ltxkeys@launchkeys] +\ltxkeys@launchkeys[|A(prefs)]{|A(fams)}{|A(curr)} +\ltxkeys@launchkeys|*[|A(prefs)]{|A(fams)}{|A(curr)} +\ltxkeys@launchkeys|+[|A(prefs)]{|A(fams)}{|A(curr)} +\ltxkeys@launchkeys|*|+[|A(prefs)]{|A(fams)}{|A(curr)} +\finish{newmacro} +\fxim*{\ltxkeys@launchkeys} + +This presets all keys defined in families \ang{fams} with their default values; it ignores keys listed in \ang{curr}. \ang{curr} may be the list of \keyval pairs that the user wants to use as current values of keys. Their keys are to be ignored when setting up defaults, \ie, when initializing the family keys. One major difference between \ffx'{\ltxkeys@launchkeys, \ltxkeys@initializekeys} is that in \fx{\ltxkeys@launchkeys} the \keyval pairs in \ang{curr} are immediately set after the absent family keys (\ie, those without current values) are reinitialized. Keys appearing in \ang{curr} in the command \fx{\ltxkeys@launchkeys} will be the \ang{na} (ignored) keys for the command \fx{\ltxkeys@initializekeys}. + +Keys across multiple prefixes \ang{prefs} and families \ang{fams} can be launched at the same time, but the user has to know what is he doing: the keys might not have been defined across the given families, or some keys might have been disabled in some, and not all, families. The \redstar and \redplus variants of \fx{\ltxkeys@launchkeys} have the same meaning as in \fx{\ltxkeys@setkeys} (\sref{sec:settingkeys}). The \stform will save all undefined keys with prefix \ang{pref} and in family \ang{fam} in the macro \fnl*'\bs{pref,fam,rmkeys}, to be set later, perhaps with the command \fx{\ltxkeys@setrmkeys}. The \plform will search in all the prefixes in \ang{prefs} and all families in \ang{fams} for a key before logging the key in \fnl*'\bs{pref,fam,rmkeys} (if the \redstar\redplus* variant is the one used) or reporting it as undefined. + + +\docsubsubsection(sec:nonlaunchkeys) + <non-launch keys>{Non-initialize and non-launch keys} -\docsubsection{Launching keys} +Listing all the keys that shouldn't be reinitialized by \fx{\ltxkeys@initializekeys} in the \ang{na} list every time \fx{\ltxkeys@initializekeys} is called can sometimes be inconvenient, especially when dealing with a large number of keys. Perhaps even more important is the fact that sometimes you don't want some of the keys in a family to be reinitialized even though they are absent keys (\ie, they aren't listed as current keys, meaning that they aren't in the current \keyval list submitted to \fx{\ltxkeys@launchkeys}). This might be the case with package and class options. The command \fx{\ltxkeys@nonlaunchkeys} provides a convenient means for listing the non-reinitializing keys once and for all. If there are keys in a family that shouldn't be reinitialized/launched with other keys in the same family during any call to \fx{\ltxkeys@launchkeys} or \fx{\ltxkeys@initializekeys}, they can be listed in the \fx{\ltxkeys@nonlaunchkeys} command: - \ltxkeys@launchkeys[<pref>]{<fam>}[<curr>] +\start{newmacro}[\ltxkeys@nonlaunchkeys] +\ltxkeys@nonlaunchkeys[|A(prefs)]{|A(fams)}{|A(keys)} +\finish{newmacro} +\fxim*{\ltxkeys@nonlaunchkeys} -This presets ALL keys defined in family <fam> with their default values; it ignores keys listed in <curr>. <curr> is actually the list of key-value pairs that the user wants to use as current values of keys. Their keys are to be ignored when setting up defaults, \ie, when initializing the family keys. One major difference between \ffx'{\ltxkeys@launchkeys, \ltxkeys@initializekeys} is that in \fx{\ltxkeys@launchkeys} the key-value pairs in <curr> are immediately set after the family keys are initialized. +Keys across multiple prefixes and families can be submitted to the \fx{\ltxkeys@nonlaunchkeys} command: undefined keys are simply ignored by \fx{\ltxkeys@nonlaunchkeys}. -Note: Keys with multiple prefixes and from multiple families can't be launched at the same time. +\ltsnote The command \fx{\ltxkeys@nonlaunchkeys} doesn't mean that the keys in \ang{keys} can no longer be set via the command \fx{\ltxkeys@setkeys}; it simply implies that keys appearing in \fx{\ltxkeys@nonlaunchkeys} will not be reinitialized to their default values when members of their class are being launched or reinitialized. The command \fx{\ltxkeys@noninitializekeys} is an alias for \fx{\ltxkeys@nonlaunchkeys}. -\docsubsection{Handling undefined or unknown keys} +\docsubsection(sec:unknownkeyhandler) + <unknown key and option handlers>{Handling unknown keys and options} -You can use the macro \fx{\ltxkeys@unknownkeyhandler} to declare to the \pkg'{ltxkeys} the course of action to take if, while setting keys, it discovers that a key is undefined or unknown. The syntax of this command is +You can use the macro \fx{\ltxkeys@unknownkeyhandler} to declare to the \pkg'{ltxkeys} the course of action to take if, while setting keys, it discovers that a key is undefined or unknown. The command \fx{\ltxkeys@unknownoptionhandler} applies to unknown options (see \sref{sec:declareoption})\usefootnote{2}. The syntax of these commands is - \ltxkeys@unknownkeyhandler[<prefs>]{<fams>}{<callback>} +\start+{newmacro}[\ltxkeys@unknownkeyhandler,\ltxkeys@unknownoptionhandler] +\ltxkeys@unknownkeyhandler[|A(prefs)]{|A(fams)}{|A(cbk)} +\ltxkeys@unknownoptionhandler[|A(pref)]<|A(fam)>{|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@unknownkeyhandler,\ltxkeys@unknownoptionhandler} -where <callback> signifies the action to take. The default <callback> is to log the keys and warn the user, in each run, of the presence of unknown keys. The same <callback> can be used across key prefixes <prefs> and families \ang{fams}. You can use \fx{#1} (or \fx{\CurrentPref}) in this macro to represent the current key prefix, \fx{#2} (or \fx{\CurrentFam}) for the current family, #3 (or \fx{\CurrentKey}) for the current key name, and #4 (or \fx{\CurrentVal}) for the value of the current key. If \fx{\CurrentVal} contains undefined macros or active characters, then attempting to print it may cause problems. Therefore, when making entries in the transcript file, it will sometimes be preferable to use \fx{\InnocentVal} instead of \fx{\CurrentVal}. However, \fx{\InnocentVal} will give only the first eight characters of a key's value. +The callback \ang{cbk} signifies the action to take when an unknown key or option is encountered. The default \ang{cbk} is to log the keys and, in each run, warn the user of the presence of unknown keys. The same \ang{cbk} can be used across key prefixes \ang{prefs} and families \ang{fams}. You can use \fx{#1} (or \fx{\CurrentPref}) in this macro to represent the current key prefix, \fx{#2} (or \fx{\CurrentFam}) for the current family, \fx{#3} (or \fx{\CurrentKey}) for the current key name, and \fx{#4} (or \fx{\CurrentVal}) for the value of the current key. If \fx{\CurrentVal} contains undefined macros or active characters, then attempting to print it may cause problems. Therefore, when making entries in the transcript file, it will sometimes be preferable to use \fx{\InnocentVal} instead of \fx{\CurrentVal}. However, \fx{\InnocentVal} will give only the first eight characters of a key's value. The following example provides an unknown key handler for two key prefixes (\ffx'{KVA, KVB}) and two key families (\ffx'{fam1,fam2}): -\start{example}[\ltxkeys@unknownkeyhandler] +\start+{example}[\ltxkeys@unknownkeyhandler] \ltxkeys@unknownkeyhandler[KVA,KVB]{fam1,fam2}{% - \@expandtwoargs\in@{,#3,}{,\myspecialkeylist,}%|amref(mac:handledkey) + \@expandtwoargs\in@{,#3,}{,\myspecialkeys,}% + \ifin@ + |com(The reader may want to investigate what the parameter texts) + |com(##1 and ####1 below stand for |(see |sref(nte:unknownkey) below|):) + \ltxkeys@ordkey[#1]{#2}{#3}[#4]{\def\x####1{####1xx##1}}% + \else + \ltxmsg@warn{Unknown key `#3' with value `#4' in family `#2' ignored}\@ehd + |com(\ltxmsg@warn{Unknown key `\CurrentKey' with value) + |com( `\InnocentVal' in family `\CurrentFam' ignored}\@ehd) + \fi +} +\finish{example} + +The macro \fx{\myspecialkeys} in the above example doesn't actually exist; it is only meant for illustration here. But \quoted{handled keys} may be introduced by the user to serve this purpose. This will be the set of keys for which special actions may apply at key setting time (see \sref{sec:handledkeys}). + +\begin{noteenv} +\label{nte:unknownkey} +To see what the parameter texts \fx{##1} and \fx{####1} above stand for, run the following code on your own and note the outcome of \fx{\show\KV@fam@keyd}. The characters \fx{##1} will turn out to be the parameter text which can be used to access the current values of keys \ffx'{keyd,keye} after they have been defined on the fly. And \fx{####1} will be the parameter text of the arbitrary function \fx{\x}. If you do \fx{\show\KV@fam@keyd}, you'll notice that the parameter texts have been reduced by one level of nesting. + +\start+{example}[\ltxkeys@unknownkeyhandler] +\def\myspecialkeys{keyc,keyd,keye} +\ltxkeys@unknownkeyhandler[KV]{fam}{% + \@expandtwoargs\in@{,#3,}{,\myspecialkeys,}% \ifin@ - % The reader may want to investigate what the parameter - % characters ##1 and ####1 here stand for: \ltxkeys@ordkey[#1]{#2}{#3}[#4]{\def\x####1{####1xx##1}}% \else - \@ltx@warn{Unknown key `#3' with value `#4' in family `#2' ignored}\@ehd - % \@ltx@warn{Unknown key `\CurrentKey' with value - % `\InnocentVal' in family `\CurrentFam' ignored}\@ehd + \ltxmsg@warn{Unknown key `#3' with value `\InnocentVal' + in family `#2' ignored}\@ehd \fi } +\ltxkeys@setkeys[KV]{fam}{keyd=aaa,keye=bbb} +\show\KV@fam@keyd \finish{example} -The macro \fx{\myspecialkeylist} in the above example doesn't actually exist; it is only meant for illustration here. But \quoted{handled keys} may be introduced by the user to serve this purpose. This will be the set of keys for which special actions may apply at key setting time (see \amref{sec:}). +\end{noteenv} -\Note Similar to \fx{\ltxkeys@unknownkeyhandler} (which applies to keys), there is also the \fxi{\ltxkeys@unknownoptionhandler} (which applies to package or class options---see \amref{sec:}). +\docsection(sec:ifkeydef)<is key defined?>{Checking if a key is defined} +\start+{newmacro}[\ltxkeys@ifkeydefTF,\ltxkeys@ifkeydefFT] +\ltxkeys@ifkeydefTF[|A(prefs)]{|A(fams)}{|A(key)}{|A(true)}{|A(false)} +\ltxkeys@ifkeydefFT[|A(prefs)]{|A(fams)}{|A(key)}{|A(false)}{|A(true)} +\finish{newmacro} +\fxim*{\ltxkeys@ifkeydefTF,\ltxkeys@ifkeydefFT} -\docsection{Checking if a key is defined} +These check if \ang{key} is defined with a prefix in \ang{prefs} and in family in \ang{fams}. If the test proves that \ang{key} is defined, \ang{true} text will be executed; otherwise \ang{false} will be executed. - \ltxkeys@ifkeydefTF[<prefs>]{<fams>}{<key>}{<true text>}{<false text>} - \ltxkeys@ifkeydefFT[<prefs>]{<fams>}{<key>}{<false text>}{<true text>} -These check if \ang{key} is defined with a prefix in <prefs> and in family in \ang{fams}. +\docsection(sec:disablingkeys)<disabling keys>{Disabling keys} +\start{newmacro}[\ltxkeys@disablekeys] +\ltxkeys@disablekeys[|A(prefs)]{|A(fams)}{|A(keys)} +\ltxkeys@disablekeys|*[|A(prefs)]{|A(fams)}{|A(keys)} +\finish{newmacro} +\fxim*{\ltxkeys@disablekeys} +Here, \ang{keys} is a comma-separated list of keys to be disabled. The macro \fx{\ltxkeys@disablekeys} causes an error to be issued when a disabled key is invoked. If the package option \fx{tracingkeys} is true, undefined keys are highlighted by \fx{\ltxkeys@disablekeys} with a warning message. Because it is possible to mix prefixes and families in \fx{\ltxkeys@disablekeys}, undefined keys may readily be encountered when disabling keys. To see those undefined keys in the transcript file, enable the package option \fx{tracingkeys}. -\docsection{Disabling keys} +The plain form of \fx{\ltxkeys@disablekeys} disables the given keys instantly, while the \stform disables the keys at \hx{\AtBeginDocument}. Authors can use this command to bar users of their keys from calling those keys after a certain point. - \ltxkeys@disablekeys[<prefs>]{<fams>}{<keys>} - \ltxkeys@disablekeys*[<prefs>]{<fams>}{<keys>} -The command \fx{\ltxkeys@disablekeys} causes an error to be issued when a disabled key is invoked. If the package option 'verbose' is true, undefined keys are highlighted by \fx{\ltxkeys@disablekeys} with a warning message. Because it is possible to mix prefixes and families in \fx{\ltxkeys@disablekeys}, undefined keys may be readily encountered. To see those undefined keys, enable the package option 'verbose'. +\docsection(sec:optionskeys){Option and non-option keys} +\aidxm*{option keys, non-option keys} -The plain form of \fx{\ltxkeys@disablekeys} disables the given keys instantly, while the \stform variant disables the keys at \hx{\AtBeginDocument}. Authors can use this command to bar users of their keys from calling those keys after a certain point. +Sometimes you want to create keys that can only appear in \hhx{\documentclass,\RequirePackage} or \hx{\usepackage}, and at other times you may not want the user to submit a certain set of keys via these commands. The \pkg'{xwatermark}, for example, uses this concept. +\start+{newmacro}[\ltxkeys@optionkeys,\ltxkeys@nonoptionkeys] +\ltxkeys@optionkeys[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@optionkeys|*[|A(pref)]{|A(fam)}{|A(keys)} +\ltxkeys@nonoptionkeys[|A(pref)]{|A(fam)}{|A(keys)} +\finish{newmacro} +\fxim*{\ltxkeys@optionkeys,\ltxkeys@nonoptionkeys} -\docsection{Option and non-option keys} +Here, \ang{keys} is a comma-separated list of keys to be made option or non-option keys. +Keys listed in \fx{\ltxkeys@optionkeys} can appear only in arguments of \hhx{\documentclass, \RequirePackage} or \hx{\usepackage}, while keys listed in \fx{\ltxkeys@nonoptionkeys} can't appear in these macros. The \stform of \fx{\ltxkeys@optionkeys} is equivalent to \fx{\ltxkeys@nonoptionkeys}. Only defined keys may appear in \ffx'{\ltxkeys@optionkeys, \ltxkeys@nonoptionkeys}. -Sometimes you want to create keys that can only appear in \hx{\documentclass}, \hx{\RequirePackage} or \hx{\usepackage}, and at other times you may not want the user to submit a certain set of keys via these commands. The \pkg'{xwatermark}, for example, uses this concept. +\start{newmacro}[\ltxkeys@makeoptionkeys] +\ltxkeys@makeoptionkeys[|A(pref)]{|A(fam)} +\ltxkeys@makeoptionkeys|*[|A(pref)]{|A(fam)} +\ltxkeys@makenonoptionkeys[|A(pref)]{|A(fam)} +\finish{newmacro} +\fxim*{\ltxkeys@makeoptionkeys} - \option@keys[<pref>]{<fam>}{<keys>} - \option@keys*[<pref>]{<fam>}{<keys>} - \notoption@keys[<pref>]{<fam>}{<keys>} +The command \fx{\ltxkeys@makeoptionkeys} makes all the keys with prefix \ang{pref} and in family \ang{fam} options keys. The command \fx{\ltxkeys@makenonoptionkeys} does the reverse, \ie, makes the keys non-option keys. The \stform of \fx{\ltxkeys@makeoptionkeys} is equivalent to \fx{\ltxkeys@makenonoptionkeys}. -Keys listed in \option@keys can appear only in arguments of \hx{\documentclass}, \hx{\RequirePackage} or \hx{\usepackage}, while keys listed in \notoption@keys can't appear in these macros. The \stform of \option@keys is equivalent to \notoption@keys. Only defined keys may appear in \option@keys and \notoption@keys. - \makeoption@keys[<pref>]{<fam>} - \makeoption@keys*[<pref>]{<fam>} +\docsection(sec:handledkeys)<handled keys>{Handled keys} -The command \makeoption@keys makes all the keys with prefix <pref> and in family <fam> options keys. The \stform of \makeoption@keys is equivalent to \makenotoption@keys. +As mentioned in \sref{sec:unknownkeyhandler}, handled keys are keys defined in a macro that is key-prefix and key-family dependent. They are defined as a list in a macro so that they can be used for future applications, such as deciding if a dependant key of a style key should be defined or redefined on the fly. Handled keys should be defined, or added to, using key prefix, family and key names. You can define or add to handled keys by the following command: +\start{newmacro}[\ltxkeys@handledkeys] +\ltxkeys@handledkeys[|A(pref)]{|A(fam)}{|A(list)} +\finish{newmacro} +\fxim*{\ltxkeys@handledkeys} -\docsection{Declaring and processing options} +where \ang{list} is a comma-separated list of key names. This command can be issued more than once for the same key prefix \ang{pref} and family \ang{fam}, since the content of \ang{list} is usually merged with the existing list rather than being merely added or overwritten. There is also - \ltxkeys@declareoption[<pref>]<<fam>>{<key>}[<default>]{<callback>} - \ltxkeys@declareoption*[<pref>]<<fam>>{<key>}[<default>]{<callback>} +\start{newmacro}[\ltxkeys@addhandledkeys] +\ltxkeys@addhandledkeys[|A(pref)]{|A(fam)}{|A(list)} +\finish{newmacro} +\fxim*{\ltxkeys@addhandledkeys} -The command \fx{\ltxkeys@declareoption} is simply a form of \fx{\ltxkeys@ordkey}, with the difference that the key family <fam> is now optional and, when specified, must be given in angled brackets. The default family name is \quotedhx{\@currname.\@currext}, \ie, the name of the class file or package and its file extension. +which is just an alias for \fx{\ltxkeys@handledkeys}. -The \stform of \fx{\ltxkeys@declareoption} prescribes the default action to be taken when undefined options with prefix <pref> and in family <fam> are passed to class or package. You may use \fx{\CurrentKey} and \fx{\CurrentVal} within this macro to pass the unknown option and its value to another class or package or to specify other actions. In fact, you can use \fx{#1} in this macro to represent the current key prefix, \fx{#2} for the current family, #3 for the current key name, and #4 for the value of the current key. The command \fx{\ltxkeys@unknownoptionhandler} is equivalent to the \stform of \fx{\ltxkeys@declareoption}. +\start{example}[\ltxkeys@handledkeys] +\ltxkeys@handledkeys[KVA,KVB]{fam1,fam2}{keya,keyb,keyc} +\finish{example} -\Note The \stform of \fx{\ltxkeys@declareoption} differs from the \stform of LaTeX's \hx{\DeclareOption} and the \stform of \pkg'{xkeyval}'s \hx{\DeclareOptionX}. +For a given key prefix \ang{pref} and family \ang{fam}, you can recall the full list of handled keys (set up earlier by \fx{\ltxkeys@handledkeys}) by the command - +++ - Examples (of use of \stform of \fx{\ltxkeys@declareoption}): +\start'{macro}[List of handled keys] +\|A(pref)@|A(fam)@handledkeys +\finish{macro} +\aidx*{recalling the list of handled keys} - \ltxkeys@declareoption*[KV]<mypackage>{% - \PackageWarning{mypackage}{% - Unknown option `\CurrentKey' with value `\CurrentVal' ignored}% - } +You can remove handled keys from a given list of handled keys (in a family) by the following command: - \ltxkeys@declareoption*{\PassOptionsToClass{#3}{article}} +\start{newmacro}[\ltxkeys@removehandledkeys] +\ltxkeys@removehandledkeys[|A(pref)]{|A(fam)}{|A(list)} +\finish{newmacro} +\fxim*{\ltxkeys@removehandledkeys} - \ltxkeys@unknownoptionhandler[KV]<mypackage>{% - % The macro \myextraoptions doesn't actually exist; - % it is only meant for illustration here: - \@expandtwoargs\in@{,#3,}{,\myextraoptions,}% - \ifin@ - % The reader may want to investigate what the parameter characters - % ##1 and ####1 here stand for: - \ltxkeys@ordkey[#1]{#2}{#3}[#4]{\def\x####1{####1xx##1}}% - \else - \PassOptionsToClass{#3}{myclass}% - \fi - } - +++ +Rather than remove individual handled keys from a list, you might prefer or need to simply undefine or \quoted{emptify} the entire list of handled keys in a family. You can do these with the following commands: + +\start+{newmacro}[\ltxkeys@undefhandledkeys,\ltxkeys@emptifyhandledkeys] +\ltxkeys@undefhandledkeys[|A(pref)]{|A(fam)} +\ltxkeys@emptifyhandledkeys[|A(pref)]{|A(fam)} +\finish{newmacro} +\fxim*{\ltxkeys@undefhandledkeys,\ltxkeys@emptifyhandledkeys} - \ltxkeys@declarecmdoption[<pref>]<<fam>>[<mp>]{<key>}[<default>]{<callback>} - \ltxkeys@declarebooloption[<pref>]<<fam>>[<mp>]{<key>}[<default>]{<callback>} - \ltxkeys@declarechoiceoption[<pref>]<<fam>>[<mp>]{<key>}[<default>]{<callback>} -These are the equivalents of \ffx'{\ltxkeys@cmdkey, \ltxkeys@boolkey, \ltxkeys@choicekey}, respectively, but now the family <fam> is optional (as is \ang{pref}) and, when specified, must be given in angled brackets. The default family name for these new commands is \quotedhx{\@currname.\@currext}, \ie, the current style or class filename and filename extension. +\docsection(sec:reservedpath){Reserving and unreserving key path or bases} +\aidxm*{reserving key prefix, reserving key family} +By \quoted{key path} we mean the key prefix (default is \fx{KV}), key family (generally no default), and macro prefix (default is dependent on the type of key). However, when dealing with \quoted{pathkeys} (see \sref{sec:pathkeys}) the term excludes the macro prefix. You can reserve key path or bases (\ie, bar future users from using the same path or bases) by the following commands. Once a key family or prefix name has been used, it might be useful barring further use of those names. For example, the \pkg'{ltxkeys} has barred users from defining keys with key family \fx{ltxkeys} and macro prefix \fx{ltxkeys@}. - \ltxkeys@executeoptions[<pref>]<<fams>>[<na>]{<key-val>} +\start+{newmacro}[\ltxkeys@reservekeyprefix,\ltxkeys@reservekeyfamily, etc.] +\ltxkeys@reservekeyprefix{|A(list)} +\ltxkeys@reservekeyprefix|*{|A(list)} +\ltxkeys@reservekeyfamily{|A(list)} +\ltxkeys@reservekeyfamily|*{|A(list)} +\ltxkeys@reservemacroprefix{|A(list)} +\ltxkeys@reservemacroprefix|*{|A(list)} +\finish{newmacro} +\fxim*{\ltxkeys@reservekeyprefix,\ltxkeys@reservekeyfamily, + \ltxkeys@reservemacroprefix} -This executes/sets the key-value pairs given in \keyval. The optional \ang{na} specifies the list of keys (without values) to be ignored. \ang{fams} signifies families in which the keys suggested in \keyval have been defined. The command \fx{\ltxkeys@executeoptions} can thus be used to process keys from several families. +Here, \ang{list} is a comma-separated list of bases. The \stform+ of these commands will defer reservation to the end of the current package or class, while the \unstform+ will effect the reservation immediately. As the package or class author you may want to defer the reservation to the end of your package or class. +Users can, at their own risk, override reserved key bases simply by issuing the package boolean option \fx{reservenopath}. This can be issued in \hhx{\documentclass,\usepackage} or \fx{\ltxkeys@options}. This might be too drastic for many users and uses. Therefore, the \pkg'{ltxkeys} also provides the following commands that can be used for selectively unreserving currently reserved key bases: - \ltxkeys@processoptions[<pref>]<<fams>>[<na>] - \ltxkeys@processoptions*[<pref>]<<fams>>[<na>] +\start+{newmacro}[\ltxkeys@unreservekeyprefix,\ltxkeys@unreservekeyfamily, etc.] +\ltxkeys@unreservekeyprefix{|A(list)} +\ltxkeys@unreservekeyprefix|*{|A(list)} +\ltxkeys@unreservekeyfamily{|A(list)} +\ltxkeys@unreservekeyfamily|*{|A(list)} +\ltxkeys@unreservemacroprefix{|A(list)} +\ltxkeys@unreservemacroprefix|*{|A(list)} +\finish{newmacro} +\fxim*{\ltxkeys@unreservekeyprefix,\ltxkeys@unreservekeyfamily, + \ltxkeys@unreservemacroprefix} -The command \fx{\ltxkeys@processoptions} processes the keys and values passed by the user to the class or package. The optional argument \ang{na} can be used to specify keys that should be ignored. The optional argument \ang{fams} can be used to specify the families that have been used to define the keys. This macro doesn't protect expandable macros in the user inputs unless the \pkg'{catoptions} is loaded before \hx{\documentclass}, in which case it might be better using the command \hx{\XProcessOptions} of the \pkg'{catoptions}. When used in a class file, the macro \fx{\ltxkeys@processoptions} will ignore unknown keys or options. This allows the user to use global options in the \hx{\documentclass} command which can be inherinted by packages loaded afterwards. +The \stform+ of these commands will defer action to the end of the current package or class, while the \unstform+ will undo the reservation immediately. -The \stform of \fx{\ltxkeys@processoptions} works like the plain variant except that it also copies user input from the \hx{\documentclass} command. When the user specifies an option in the \hx{\documentclass} which also exists in the local family or families of the package issuing \fx{\ltxkeys@processoptions}\RedStar, the local key too will be set. In this case, \fx{#1} in the \fx{\ltxkeys@declareoption} (or a similar command) will be the value entered in the \hx{\documentclass} command for this key. First the global options from \hx{\documentclass} will set local keys and afterwards the local options, specified via \hx{\usepackage}, \hx{\RequirePackage} or \hx{\LoadClass}, will set local keys, which could overwrite the previously set global options, depending on the way the options sections are constructed. +\docsection(sec:badkeynames)<illegal key name>{Bad key names} -\docsection{Handled keys} +Some key names are indeed inadmissible. The \pkg{ltxkeys} considers the following literals, among others, as inadmissible for key names: -As mentioned in \amref{sec:}, handled keys are keys defined in a macro that is key-prefix and key-family dependent. They are defined as a list in a macro so that they can be used for future applications, such as deciding if a dependant key of a style key should be defined or redefined on the fly. Handled keys should be defined, or added to, using key prefix, family and key names. You can define or add to handled keys by the following command: +\start'{macro}[Default bad key names] +.code ordkey cmdkey choicekey boolkey +handledkeys presetkeys postsetkeys executedkeys rmkeys +needvalue savevalue usevalue savevaluekeys needvaluekeys +xkeys bool boolean tog togg +toggle switch true false on +off count skip +\finish{macro} -\start{newmacro}[\ltxkeys@handledkeys] -\ltxkeys@handledkeys[|A(pref)]{|A(fam)}{|A(list)} +For reasons of efficiency, the \pkg'{ltxkeys} will attempt to catch bad key names only if the package option \fx{tracingkeys} is enabled. + +You can add to the list of invalid key names by the following command: + +\start+{newmacro}[\ltxkeys@badkeynames,\ltxkeys@addbadkeynames] +\ltxkeys@badkeynames{|A(list)} +\ltxkeys@addbadkeynames{|A(list)} \finish{newmacro} -\fxim*{\ltxkeys@handledkeys} +\fxim*{\ltxkeys@badkeynames,\ltxkeys@addbadkeynames} -where \ang{list} is a comma-separated list of key names. This command can be issued more than once for the same key prefix \ang{pref} and family \ang{fam}, since the content of \ang{list} is usually merged with the existing list rather than being merely added or overwritten. +where \ang{list} is a comma-separated list of inadmissible names. The updating is done by merging, so that entries are not repeated in the internal list of bad key names. -\start{example}[\ltxkeys@handledkeys] -\ltxkeys@handledkeys[KVA,KVB]{fam1,fam2}{keya,keyb,keyc} -\finish{example} +You can remove from the list of bad key names by using the following command: -For a given key prefix \ang{pref} and family \ang{fam}, you can recall the full list of handled keys (set up earlier by \fx{\ltxkeys@handledkeys}) by the command +\start{newmacro}[\ltxkeys@removebadkeynames] +\ltxkeys@removebadkeynames{|A(list)} +\finish{newmacro} +\fxim*{\ltxkeys@removebadkeynames} -\start{macro}[List of handled keys] -\|A(pref)@|A(fam)@handledkeys -\finish{macro} -\aidx*{Recalling the list of handled keys} -% \ipreffam{handledkeys} +where, again, \ang{list} is comma-separated. It is not advisable to remove any member of the default bad key names. -If handled keys have been set up in, \eg, \fx{\KV@fam@handledkeys}, the example at \amref{mac:handledkey} can be recast as follows: -\start{example}[\ltxkeys@handledkeys] -\ltxkeys@unknownkeyhandler[KVA,KVB]{fam1,fam2}{% - \@expandtwoargs\in@{,#3,}{,\KV@fam@handledkeys,}% +\docsection(sec:declareoption){Declaring options} +\aidxm*{class options, package options} + +\start+{newmacro}[\ltxkeys@declareoption,\ltxkeys@unknownoptionhandler] +\ltxkeys@declareoption[|A(pref)]<|A(fam)>{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declareoption|*[|A(pref)]<|A(fam)>{|A(cbk)} +\ltxkeys@unknownoptionhandler[|A(pref)]<|A(fam)>{|A(cbk)} +\finish{newmacro} +\fxim*{\ltxkeys@declareoption,\ltxkeys@unknownoptionhandler} + +The \unstform of \fx{\ltxkeys@declareoption} is simply a form of \fx{\ltxkeys@ordkey}, with the difference that the key family \ang{fam} is now optional and, when specified, must be given in angled brackets. The default family name is \quotedhx{\@currname.\@currext}, \ie, the name of the class file or package and its file extension. + +The \stform of \fx{\ltxkeys@declareoption} prescribes the default action to be taken when undefined options with prefix \ang{pref} and in family \ang{fam} are passed to class or package. You may use \fx{\CurrentKey} and \fx{\CurrentVal} within this macro to pass the unknown option and its value to another class or package or to specify other actions. In fact, you can use \fx{#1} in this macro to represent the current key prefix, \fx{#2} for the current family, \fx{#3} for the current key name, and \fx{#4} for the value of the current key. The command \fx{\ltxkeys@unknownoptionhandler} is equivalent to the \stform of \fx{\ltxkeys@declareoption}. + +\ltsnote The \stform of \fx{\ltxkeys@declareoption} differs from the starred form of \LaTeX's \hx{\DeclareOption} and the starred form of \pkg'{xkeyval}'s \hx{\DeclareOptionX}. + +\start+{example}[\ltxkeys@declareoption] +\ltxkeys@declareoption|*[KV]<mypackage>{% + \PackageWarning{mypackage}{% + Unknown option `\CurrentKey' with value `\InnocentVal' ignored}% +} + +\ltxkeys@declareoption|*{\PassOptionsToClass{#3}{article}} + +\ltxkeys@unknownoptionhandler[KV]<mypackage>{% + \@expandtwoargs\in@{,#3,}{,\KV@mypackage@handledkeys,}% \ifin@ + |com(The reader may want to investigate what the parameter texts) + |com(##1 and ####1 below stand for:) \ltxkeys@ordkey[#1]{#2}{#3}[#4]{\def\x####1{####1xx##1}}% \else - \@ltx@warn{Unknown key `#3' with value `#4' in family `#2' ignored}\@ehd + \PassOptionsToClass{#3}{myclass}% \fi } \finish{example} -You can remove handled keys from a given list of handled keys (in a family) by the following command: +See note~\ref{nte:unknownkey} for the meaning of the parameter texts in this example. The contents of the macro \fx{\KV@mypackage@handledkeys} are handled keys for key prefix \fx{KV} and family \fx{fam}. See \sref{sec:handledkeys} for the meaning of handled keys. -\start{newmacro}[\ltxkeys@removehandledkeys] -\ltxkeys@removehandledkeys[|A(pref)]{|A(fam)}{|A(list)} +\start+{newmacro}[\ltxkeys@declarecmdoption, \ltxkeys@declarebooloption, etc] +\ltxkeys@declareordoption[|A(pref)]<|A(fam)>{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declarecmdoption[|A(pref)]<|A(fam)>[|A(mp)]{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declarebooloption[|A(pref)]<|A(fam)>[|A(mp)]{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declarechoiceoption[|A(pref)]{|A(fam)}[|A(mp)]{|A(option)}[|A(bin)]{|A(alt)} + [|A(dft)]{|A(cbk)} \finish{newmacro} -\fxim*{\ltxkeys@removehandledkeys} +\fxim*{\ltxkeys@declareordoption,\ltxkeys@declarecmdoption, +\ltxkeys@declarebooloption,\ltxkeys@declarechoiceoption} -Rather than remove individual handled keys from a list, you might prefer or need to simply undefine or \quoted{emptify} the entire list of handled keys in a family. You can do these with the following commands: +These are the equivalents of the macros \ffx'{\ltxkeys@ordkey,\ltxkeys@cmdkey, \ltxkeys@boolkey, \ltxkeys@choicekey}, respectively, but now the family \ang{fam} is optional (as is \ang{pref}) and, when specified, must be given in angled brackets. The default family name for these new commands is \quotedhx{\@currname.\@currext}, \ie, the current style or class filename and filename extension. \fx{\ltxkeys@declareordoption} is equivalent to the \unstform of \fx{\ltxkeys@declareoption}. See the choice keys in \sref{sec:choicekeys} for the meaning of \ang{bin} and \ang{alt} associated with the command \fx{\ltxkeys@declarechoiceoption}. -\start+{newmacro}[\ltxkeys@undefhandledkeys,\ltxkeys@emptifyhandledkeys] -\ltxkeys@undefhandledkeys[|A(pref)]{|A(fam)} -\ltxkeys@emptifyhandledkeys[|A(pref)]{|A(fam)} + +\docsubsection(sec:options-sameattributes) + {Options that share the same attributes} + +The commands + +\start+{macro} +\ltxkeys@declareordoption +\ltxkeys@declarecmdoption +\ltxkeys@declarebooloption +\ltxkeys@declarechoiceoption +\finish{macro} + +can each be used to introduce several options that share the same path or bases (option prefix, option family, and macro prefix) and callback \ang{cbk}. All that is needed is to replace \ang{option} in these commands with the comma-separated list \ang{options}. Because some users might prefer to see these commands in their plural forms when defining several options with the same callback, we have provided the following aliases. + +\start+{newmacro}[\ltxkeys@declarecmdoptions, \ltxkeys@declarebooloptions, etc] +\ltxkeys@declareordoptions[|A(pref)]<|A(fam)>{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declarecmdoptions[|A(pref)]<|A(fam)>[|A(mp)]{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declarebooloptions[|A(pref)]<|A(fam)>[|A(mp)]{|A(option)}[|A(dft)]{|A(cbk)} +\ltxkeys@declarechoiceoptions[|A(pref)]{|A(fam)}[|A(mp)]{|A(option)}[|A(bin)]{|A(alt)} + [|A(dft)]{|A(cbk)} \finish{newmacro} -\fxim*{\ltxkeys@undefhandledkeys,\ltxkeys@emptifyhandledkeys} +\fxim*{\ltxkeys@declareordoptions,\ltxkeys@declarecmdoptions, +\ltxkeys@declarebooloptions,\ltxkeys@declarechoiceoptions} + + +\docsubsection(sec:multitypeoptions){Declaring all types of option with one command} +\aidx*{declaring multiple options} + +\start{newmacro}[\ltxkeys@declaremultitypeoptions] +\ltxkeys@declaremultitypeoptions[|A(pref)]<|A(fam)>[|A(mp)]{% + |A(keytype)/|A(keyname)/|A(dft)/|A(cbk); + another set of key attributes; + etc. +} +\ltxkeys@declaremultitypeoptions|*[|A(pref)]<|A(fam)>[|A(mp)]{% + |A(keytype)/|A(keyname)/|A(dft)/|A(cbk); + another set of key attributes; + etc. +} +\finish{newmacro} +\fxim*{\ltxkeys@declaremultitypeoptions} + +Here, the key default value \ang{dft} and callback \ang{cbk} can be absent in all cases. \ang{keytype} may be any one of \fnz{ord,cmd,sty,sty*,bool,choice}. The star (\redstar) in \quoted{sty\Redstar} has the same meaning as in \fx{\ltxkeys@stylekey} above, namely, undefined dependants will be defined on the fly when the parent key is set. The optional quantity \ang{mp} is the macro prefix, as in, for example, \sref{sec:cmdkeys}. The syntax for the command \fx{\ltxkeys@declaremultitypeoptions} is identical to that of \fx{\ltxkeys@declarekeys} except for the following differences: For \fx{\ltxkeys@declarekeys} the family is mandatory and must be given in curly braces, while for \fx{\ltxkeys@declaremultitypeoptions} the family is optional, with the default value of \quotedhx{\@currname.\@currext}, \ie, the name of the class file or package and its file extension. For \fx{\ltxkeys@declaremultitypeoptions}, the optional family is expected to be given in angled brackets. The \stform of the command \fx{\ltxkeys@declaremultitypeoptions} defines only undefined options. An alias for the long command \fx{\ltxkeys@declaremultitypeoptions} is \fx{\declaremultitypeoptions}. + + +\start{example}[\ltxkeys@declaremultitypeoptions] +\declaremultitypeoptions*[KV]<fam>[mp@]{% + cmd/option1/xx/\def\x##1{##1xx#1}; + bool/option2/true; +} +\finish{example} + + + +\docsection(sec:executeoption){Executing options} + +\start{newmacro}[\ltxkeys@executeoptions] +\ltxkeys@executeoptions[|A(prefs)]<|A(fams)>[|A(na)]{|A(keyval)} +\finish{newmacro} +\fxim*{\ltxkeys@executeoptions} + +This executes/sets the \keyval pairs given in \ang{keyval}. The optional \ang{na} specifies the list of keys (without values) to be ignored. \ang{prefs} is the list of prefixes for the keys; and the optional \ang{fams} signifies families in which the keys suggested in \keyval have been defined. The default value of \ang{fams} is \fx{\@currname.\@currext}. The command \fx{\ltxkeys@executeoptions} can thus be used to process keys with different prefixes and from several families. + + +\docsection(sec:processoption){Processing options} + +\start{newmacro}[\ltxkeys@processoptions] +\ltxkeys@processoptions[|A(prefs)]<|A(fams)>[|A(na)] +\ltxkeys@processoptions|*[|A(prefs)]<|A(fams)>[|A(na)] +\finish{newmacro} +\fxim*{\ltxkeys@processoptions} + +The command \fx{\ltxkeys@processoptions} processes the \keyval pairs passed by the user to the class or package. The optional argument \ang{na} can be used to specify keys that should be ignored. The optional argument \ang{fams} can be used to specify the families that have been used to define the keys. The default value of \ang{fams} is \fx{\@currname.\@currext}. The package command \fx{\ltxkeys@processoptions} doesn't protect expandable macros in the user inputs unless the \pkg'{ltxkeys} is loaded before \hx{\documentclass}, in which case it is also possible to use the command \hx{\XProcessOptions} of the \pkg'{catoptions}. When used in a class file, the macro \fx{\ltxkeys@processoptions} will ignore unknown keys or options. This allows the user to use global options in the \hx{\documentclass} command which can be inherinted by packages loaded afterwards. + +The \stform of \fx{\ltxkeys@processoptions} works like the plain variant except that, if the \pkg'{ltxkeys} is loaded after \hx{\documentclass}, it also copies user input from the command \hx{\documentclass}. When the user specifies an option in the \hx{\documentclass} which also exists in the local family or families of the package issuing \fx{\ltxkeys@processoptions}\Redstar, the local key too will be set. In this case, \fx{#1} in the command \fx{\ltxkeys@declareoption} (or a similar command) will be the value entered in the \hx{\documentclass} command for this key. First the global options from \hx{\documentclass} will set local keys and afterwards the local options, specified via \hx{\usepackage}, \hx{\RequirePackage} or \hx{\LoadClass}, will set local keys, which could overwrite the previously set global options, depending on the way the options sections are constructed. + + +\docsubsection(sec:afterprocessoptions)<before processoptions,after processoptions> +{Hooks for `before' and `after' processing options} + +\start+{newmacro}[\ltxkeys@beforeprocessoptions,\ltxkeys@afterprocessoptions] +\ltxkeys@beforeprocessoptions{|A(code)} +\ltxkeys@afterprocessoptions{|A(code)} +\finish{newmacro} +\fxim*{\ltxkeys@beforeprocessoptions,\ltxkeys@afterprocessoptions} + +The macros \ffx'{\ltxkeys@beforeprocessoptions,\ltxkeys@afterprocessoptions} can be used to process an arbitrary code given in \ang{code} before and after \fx{\ltxkeys@processoptions} has been executed. The command \fx{\ltxkeys@afterprocessoptions} is particularly useful when it is required to optionally load a package, with the decision dependent on the state or outcome of an option in the current package. For obvious reasons, \latex's options parser doesn't permit the loading of packages in the options section. The command \fx{\ltxkeys@afterprocessoptions} can be used to load packages after the current package's options have been processed. Here is an example for optionally loading some packages at the end of the options section: + +\start{example}[\ltxkeys@afterprocessoptions] +\ltxkeys@cmdkey[KV]{fam}[mp@]{keya}[]{% + \iflacus#1\dolacus\else + \ltxkeys@afterprocessoptions{\RequirePackage[#1]{mypackage}}% + \fi +} +\finish{example} + +In this example, \fx{#1} refers (as usual) to the user input for key \fx{keya}. Here, we assume that the values of \fx{keya} will be the \keyval pairs for options of \texttt{mypackage}. The loading of \texttt{mypackage} will be determined by whether the user input for \fx{keya} is empty or not. That is why \fx{keya} has an empty default value. More complex application scenarios can, of course, be easily created\footnote{The command \ftfx{\iflacus}, whose argument is delimited by \ftfx{\dolacus}, tests for emptiness of its argument.}. + +\docsection(sec:keycommands)<command keys, environment keys> +{Key commands and key environments} -\docsection{Bad key names} +Key commands and environments are commands and environments that expect \keyval pairs as input, in addition to any number of possible nine conventional arguments. Key commands and environments have already been introduced by the \pkg'{keycommand,skeycommand}, but the inherent robustness of the \pkg{ltxkeys} provides another opportunity to re-introduce these features here. The syntax here is also simpler and the new featureset has the following advantages over those in \pkg'{keycommand,skeycommand}: -Some key names are indeed inadmissible. The \pkg{ltxkeys} considers the following key names as inadmissible: +\begin{enum} +\item The defined commands and environments can have up to nine conventional parameters, in addition to the \keyval pairs. +\item Anyone or all of the nine command or environment parameters can be delimited. +\item All the various types of key (command keys, boolean keys, \eetc) can be used as the keys for the new command or environment. +\item With the prefixes \ffx'{\ltxkeysglobal,\ltxkeysprotected}, global and robust key commands and environments can be defined in a manner that simulates \tex's \hx{\global} and \etex's \hx{\protected}. +\item The exit code for the key environment can have access to the arguments of the environment, unlike in \latex's environment. +\item Simple commands are provided for accessing the current values (and, in the case of boolean keys, the current states) of keys. +\end{enum} -\start'{macro}[default bad keys] -.code,ordkey,cmdkey,stylekey,choicekey,boolkey,handledkeys,presetkeys,postsetkeys +The specification of the mandatory arguments and any optional first argument for the key command and key environment has the same syntax as in \latex's \hhx'{\newcommand,\newenvironment}. The key command and key environment of the \pkg'{ltxkeys} have the syntaxes: + +\start+{newmacro}[\ltxkeyscmd,\ltxkeysenv, etc] +|A(pref)\ltxkeyscmd|A(cs)[|A(narg)][|A(dft)]<|A(delim)>|(|A(keys)|){|A(defn)} +|A(pref)\reltxkeyscmd|A(cs)[|A(narg)][|A(dft)]<|A(delim)>|(|A(keys)|){|A(defn)} +|A(pref)\ltxkeysenv{|A(name)}[|A(narg)][|A(dft)]<|A(delim)>|(|A(keys)|){|A(begdefn)}{|A(enddefn)} +|A(pref)\reltxkeysenv{|A(name)}[|A(narg)][|A(dft)]<|A(delim)>|(|A(keys)|){|A(begdefn)}{|A(enddefn)} +\finish{newmacro} +\fxim*{\ltxkeyscmd,\reltxkeyscmd,\ltxkeysenv,\reltxkeysenv} + +Here, \ang{pref} is the optional command prefix, which may be either \fx{\ltxkeysglobal} (for global commands) or \fx{\ltxkeysprotected} (for \etex protected commands); \ang{cs} is the command; \ang{name} is the environment name; \ang{narg} is the number of parameters; \ang{dft} is the default value of the first argument; \ang{delim} are the parameter delimiters; \ang{keys} are the keys to be defined for the command or environment; \ang{defn} is the replacement text of the command; \ang{begdefn} is the environment entry text; and \ang{enddefn} is the code to execute while exiting the environment. + +The \ang{keys} have the same syntax as they do for the command \fx{\ltxkeys@declarekeys} (\sref{sec:declarekeys}). The parameter delimiters \ang{delim}, given above in angled brackets, have the syntax: + +\start'{newmacro}[Parameter delimiters] +1|A(delim1) 2|A(delim2) ... 9|A(delim9) +\finish{newmacro} + +where \ang{delim1} and \ang{delim2} are the delimiters for the first and second parameters, respectively, etc. Only the parameters with delimiters are to be specified in \ang{delim}. Examples are provided later. + +In the \latex \hhx'{\newenvironment,\renewenvironment} commands, with the syntax + +\start+{macro}[\newenvironment,\renewenvironment] +\newenvironment{|A(name)}[|A(narg)][|A(dft)]{|A(begdefn)}{|A(enddefn)} +\renewenvironment{|A(name)}[|A(narg)][|A(dft)]{|A(begdefn)}{|A(enddefn)} \finish{macro} +\hxim*{\newenvironment,\renewenvironment} -For reasons of efficiency, the \pkg{ltxkeys} will attempt to catch bad key names only if the package option \fx{verbose} is enabled. +the environment's parameters and/or arguments aren't accessible in \ang{enddefn}. If the environment user wants to access the parameters in \ang{enddefn}, he has to save them while still in \ang{begdefn}. This isn't the case with the commands \ffx'{\ltxkeysenv,\reltxkeysenv}, for which the user can access the environment parameters while in \ang{enddefn}. To do this, he should call the command \fxim{\envarg}, which expects as argument the corresponding numeral of the parameter text. For example, \ffx'{\envarg{1},\envarg{3}} refer to the first and third arguments of the environment, respectively. Examples are provided later. The current values of environment's keys can always be accessed in \ang{enddefn}. -You can add to the list of invalid key names by the following command: +But how do we access the current values or states of keys while in \ang{begdefn} and \ang{enddefn}? To this end the commands \ffx'{\val,\ifval,\ifvalTF,\keyval,\ifkeyval,\ifkeyvalTF} are provided. They have the following syntaxes: -\start{newmacro}[\ltxkeys@badkeynames] -\ltxkeys@badkeynames{|A(list)} +\start+{newmacro}[\val,\ifval,\ifvalTF, etc] +|com(The following commands don't first confirm that the key exists before) +|com(attempting to obtain its current value or state. They are expandable:) +\val{|A(key)} +\ifval|A(boolkey)\then |A(true) \else |A(false) \fi +\ifvalTF{|A(boolkey)}{|A(true)}{|A(false)} + +|com(The following commands first confirm that the key exists before attempting) +|com(to obtain its current value or state. They are expandable if the key) +|com(is defined:) +\keyval{|A(key)} +\ifkeyval|A(boolkey)\then |A(true) \else |A(false) \fi +\ifkeyvalTF{|A(boolkey)}{|A(true)}{|A(false)} \finish{newmacro} -\fxim*{\ltxkeys@badkeynames} +\fxim*{\val,\ifval,\ifvalTF,\keyval,\ifkeyval,\ifkeyvalTF} -where \ang{list} is a comma-separated list of inadmissible names. The updating is done by merging, so that entries are not repeated in the internal list of bad key names. +The command \fx{\val} yields the current value of a command or environment key, irrespective of the type of key. Its argument should exclude the key-command name, key prefix, key family, and macro prefix. The command \fx{\ifval} expects as argument a boolean key name \ang{boolkey} (without the command name, key prefix, key family, and macro prefix) and yields either \hx{\iftrue} or \hx{\iffalse}. The command \fx{\ifvalTF} expects as argument a boolean key and yields one of two \latex branches, \ang{true} or \ang{false}. -You can remove from the list of bad key names by using the following command: +The commands \ffx'{\val,\ifval,\ifvalTF} can be used in expansion contexts (including in \hx{\csname...\endcsname}) but if their arguments aren't defined as keys, they will return an undefined command, either immediately or later. On the hand, their counterparts (namely, the commands \ffx'{\keyval,\ifkeyval,\ifkeyvalTF}) will first check that the key has been defined before attempting to obtain its current value or state. This affects their expandability when a key is undefined. My advice is that the user should always use \ffx'{\keyval,\ifkeyval,\ifkeyvalTF} instead of \ffx'{\val,\ifval,\ifvalTF}, unless he is sure he hasn't committed any mistakes in key's name; but he might be writing a package---that contains these commands---for the use of the \tex community. Also, here there is an advantage in using \hx{\protected@edef} in place of \hx{\edef}: some \latex commands are protected with \hx{\protect}. -\start{newmacro}[\ltxkeys@badkeynames] -\ltxkeys@removebadkeynames{|A(list)} +The commands \ffx'{\val,\ifval,\ifvalTF, \keyval,\ifkeyval,\ifkeyvalTF}, like the command and environment keys, are available in \ang{defn}, \ang{begdefn} and \ang{enddefn}. These commands (\ie, \ffx'{\val,\ifval,\ifvalTF, \keyval,\ifkeyval,\ifkeyvalTF}) are pushed on entry into \ang{defn} or \ang{begdefn}, and they are popped on exit of \ang{defn} or \ang{enddefn}. Unless they're defined elsewhere outside the \pkg'{ltxkeys}, they're undefined outside \ang{defn}, \ang{begdefn}, \ang{enddefn}, and the environment body\footnote{The commands \ftffx'{\pathkeysval,\ifpathkeysval,\ifpathkeysvalTF, \pathkeyskeyval,\ifpathkeyskeyval,\ifpathkeyskeyvalTF} are always available, but they can be used only in the context of \quoted{pathkeys} (\sref{sec:pathkeys}).}. + +%\rvtflag{\rvtpauseedit} + +\docsubsection(sec:eoe){Final tokens of every environment} + +The user can add some tokens to the very end of every subsequent environment by declaring those tokens in the macro \fxim{\ltxkeys@everyeoe}, which by default contains only \latex's command \fxi{\ignorespacesafterend}. That is, the \pkg'{ltxkeys} automatically issues + +\start{example}[\ltxkeys@everyeoe] +|makered(\ltxkeys@everyeoe){\ignorespacesafterend} +\finish{example} + +It is important to note that new tokens are prepended (and not appended) to the internal hook that underlies \fx{\ltxkeys@everyeoe}, such that by default \fx{\ignorespacesafterend} always comes last in the list. You can empty the list \fx{\ltxkeys@everyeoe} by issuing \fx*{\ltxkeys@everyeoe{}} and rebuild it anew, still by prepending elements to it. \fx{\ltxkeys@everyeoe} isn't actually a token list register but it behaves like one\ltsfootnote{However, you can't do \ftfx{\ltxkeys@everyeoe\expandafter{\cmd}} because \ftfx{\ltxkeys@everyeoe} isn't a token list register.}. It is safe to issue \fx{\ltxkeys@everyeoe}\fnu{token} and/or \fx*{\ltxkeys@everyeoe{}} in the \ang{begdefn} part of the key environment. One of the examples in \sref{sec:keycommand-examples} illustrates this point. + +\ltsnote The pointer schemes of \sref{sec:keypointers} are applicable to key commands and key environments. The \fx{\needvalue} pointer is used in one of the examples in \sref{sec:keycommand-examples}. + + +\docsubsection(sec:keycommand-examples){Examples of key command and environment} + +\start+{example}[Key command] +|com(It is possible to use parameter delimiters, as the following) +|com(\@nil and \@mil show:) +|com(\ltxkeysglobal\ltxkeysrobust\ltxkeyscmd*\cmdframebox) +|com( [3][default]<2\@nil 3\@mil>|(|A(keys)|){|A(defn)}) + +|com(No parameter delimiters for the following:) +\ltxkeysglobal\ltxkeysrobust\ltxkeyscmd*\cmdframebox[3][default]|(% + cmd/width/\textwidth; + cmd/textcolor/black; + cmd/framecolor/red; + cmd/framerule/.4pt; + cmd/framesep/4pt; + bool/putframe/true; + bool/testbool/true; +|){% + \begingroup + \fboxrule\keyval{framerule}\relax + \fboxsep\keyval{framesep}\relax + \ifkeyval putframe\then + \fcolorbox{\keyval{framecolor}}{gray!25}{% + \fi + \parbox{\keyval{width}}{% + \color{\keyval{textcolor}}% + Arg-1: #1\\ + Arg-2: #2\\ + Arg-3: #3% + }% + \ifkeyval putframe\then}\fi + \ifkeyvalTF{testbool}{\def\x{T}}{\def\y{F}}% + \endgroup +} + +\begin{document} +\cmdframebox[Text-1]{Text-2\\ ...\\ text-3}{Text-4}|(% + width=.5\textwidth, + framecolor=cyan, + textcolor=purple, + framerule=1pt, + framesep=10pt, + putframe=true +|) +\end{document} +\finish{example} + +\start{example}[Key environment] +\ltxkeysenv*{testenv}[1][right]|(% + cmd/xwidth/2cm; + cmd/ywidth/1.5cm; + cmd/body; + cmd/|R(\needvalue){author}/\null; + bool/boola/false; +|){% + \ltxkeys@iffound{,#1,}\in{,right,left,}\then\else + \@latex@error{Unknown text alignment type `#1'}\@ehd + \fi + \centering + \fbox{\parbox{\keyval{xwidth}}{\usename{ragged#1}\keyval{body}}}% + \ifkeyval boola\then\color{red}\fi + \fbox{\parbox{\keyval{ywidth}}{\usename{ragged#1}\keyval{body}}}% + \normalcolor + |com(\val, \ifval, etc, are unavailable in \ltxkeys@everyeoe. Hence) + |com(we save the value of `author' here:) + \protected@edef\quoteauthor{\val{author}}% + |com(Re-initialize \ltxkeys@everyeoe:) + |R(\ltxkeys@everyeoe){}% + |R(\ltxkeys@everyeoe){\ignorespacesafterend}% + |R(\ltxkeys@everyeoe){\endgraf\vskip\baselineskip + \centerline{\itshape\quoteauthor}} + |com(Just to test parameter use inside \ltxkeysenv:) + \def\testmacroa##1{aaa##1}% +}{% + \def\testmacrob##1{##1bbb}% +} + +\begin{document} +\begin{testenv}|(% + xwidth=5cm, + ywidth=4cm, + boola=true, + author={Cornelius Tacitus \textup{|(55--120~AD|)}}, + body={Love of fame is the last thing even learned men can bear + to be parted from.} +|) +\end{testenv} +\end{document} +\finish{example} + +\start+{example}[Key environment] +|com(The following line has parameter delimiters \@nil and \@mil:) +|com(\ltxkeysglobal\ltxkeysrobust\ltxkeysenv*{envframebox}) +|com( [3][default]<2\@nil 3\@mil>|(|A(defn)|){}) + +|com(No parameter delimiters for the following:) +|R(\ltxkeysglobal\ltxkeysrobust)\ltxkeysenv*{envframebox}[3][default]|(% + cmd/width/\textwidth/\def\xx##1{##1}; + cmd/textcolor/black; + cmd/framerule/.4pt; + ord/framecolor/brown; + bool/putframe/true; +|){% + \begingroup + \fboxrule\val{framerule}\relax + \ifval putframe\then\fcolorbox{\val{framecolor}}{gray!25}{\fi + \parbox{\val{width}}{% + Arg-1: #1\\ + Arg-2: \textcolor{\val{textcolor}}{#2}\\ + Arg-3: #3% + }% + \ifval putframe\then}\fi + \endgroup +}{% + \edef\firstarg{|R(\envarg){1}}% + \def\yy##1{##1}% +} + +\begin{document} +\begin{envframebox}[Text-1]{Text-2\\ ...\\ test text-2}{Text-3}|(% + width=.5\textwidth, + textcolor=purple, + framerule=1pt, + putframe=true +|) +\end{envframebox} +\end{document} +\finish{example} + + +\start+{example}[Nested key environments] +\def\testenv{} +\reltxkeysenv{testenv}|(% + |com(The \y below is just a test:) + cmd/fraclen/0.1cm/\def\y##1{#1yyy##1}; + cmd/framerule/.4pt; + cmd/framecolor/blue; + cmd/textcolor/black; + bool/putframe/true; +|){% + \cptdimdef\tempb{.5\textwidth-\val{fraclen}*\currentgrouplevel}% + \noindent + \endgraf\fboxrule=\val{framerule}\relax + \color{\val{framecolor}}% +}{} + +\begin{document} +\begin{testenv}|(% + fraclen=0.1cm, + framerule=1.5pt, + framecolor=red, + textcolor=magenta, + putframe=true +|)% +\ifval putframe\then\fbox{\fi +\parbox\tempb{% + \color{\val{textcolor}}% + outer box\endgraf + ***aaa*** + \vspace*{5mm}% + \begin{testenv}|(% + fraclen=0.1cm, + framerule=3pt, + framecolor=green, + textcolor=cyan, + putframe=true + |)% + \ifval putframe\then\fbox{\fi + \parbox\tempb{% + \color{\val{textcolor}}% + inner box\endgraf\vspace*{5mm}% + +++bbb+++ + }% + \ifval putframe\then}\fi + \end{testenv}% +}% +\ifval putframe\then}\fi +\end{testenv} +\end{document} +\finish{example} + +The following example shows that in place of the functions \ffx'{\val,\ifval,\ifvalTF, \keyval,\ifkeyval,\ifkeyvalTF} the user can access the values and states of keys by concatenating the command or environment name, the \quotedfx{@} sign and the name of the key. This, of course, requires that \quotedfx{@} has catcode 11. + +\start+{example}[Key command] +\ltxkeyscmd\myframebox[2][default text]|(% + cmd/width/\textwidth; + cmd/textcolor/black; + cmd/framecolor/black; + cmd/framesep/3\p@; + cmd/framerule/0.4\p@; + |com(The following is choice key `textalign' with default value `center'.) + |com(The `.code=' in the admissible values is optional, but not the forward) + |com(slash `/'.) + |R(choice/textalign.{%) + |R(center/.code=\def\ttextalign{center},) + |R(left/.code=\def\ttextalign{flushleft},) + |R(right/.code=\def\ttextalign{flushright}) + |R(}/center); + bool/putframe/true +|){% + \begingroup + \fboxsep\myframebox@framesep + \fboxrule\myframebox@framerule\relax + \cptdimdef\myframebox@boxwidth + {\myframebox@width-2\fboxsep-2\fboxrule}% + \noindent\begin{lrbox}\@tempboxa + \begin{minipage}[c][\height][s]\myframebox@boxwidth + \@killglue + \begin\ttextalign + \textcolor{\myframebox@textcolor}{Arg-1: #1\endgraf Arg-2: #2}% + \end\ttextalign + \end{minipage}% + \end{lrbox}% + \@killglue + \color{\myframebox@framecolor}% + \ifmyframebox@putframe\fbox{\fi + \usebox\@tempboxa + \ifmyframebox@putframe}\fi + \endgroup +} + +\begin{document} +\myframebox[Text-1]{Test text-2\\ ...\\test text-2} + |(framerule=2pt,framecolor=blue,textcolor=purple, + putframe=true,textalign=right|) +\end{document} +\finish{example} + + +\docsection(sec:pathkeys)<pathkeys>{Pathkeys} + +Let us start this section with a welcome message: you don't have to repeatedly type in long key paths and commands when using pathkeys. There is help ahead on how to reduce estate when using pathkeys. + +The \pkg'{pathkeys} can be loaded on its own (via \hx{\RequirePackage} or \hx{\usepackage}) or as an option to the \pkg'{ltxkeys} (see \sref{tab:pkgoptions}). All the options listed in \sref{tab:pkgoptions} are accepted by the \pkg'{pathkeys}. They are all passed on to \pkg'{ltxkeys}, except \fx{pathkeys} that is simply ignored by \pkg'{pathkeys}. + +Pathkeys are keys with a tree or directory structure\footnote{This might sound like \textpgfkeys, but the semantics, syntaxes, and the implementation here are all different from those of \textpgfkeys.}. When defining and setting pathkeys, the full key path is usually required. This is also the case when seeking the current value or state of a key. When using pathkeys the user is relieved of the need to known and remember where the optional arguments have to be placed in calls to macros. And like the commands \ffx'{\ltxkeys@definekeys, \ltxkeys@declarekeys}, pathkeys are automatically initialized after definition, \ie, they are automatically set with their default values. + +The command for defining and setting pathkeys is \fx{\pathkeys}, which has the following syntax. The same command is used for several other tasks related to pathkeys. The \quoted{flag} entry in the argument of \fx{\pathkeys} determines the action that the command is expected to take. + + +\start+{newmacro}[\pathkeys] +\pathkeys{|A(main)/|A(sub)/|A(subsub)/.../|A(flag)|R(:) |A(attrib)} \finish{newmacro} -\fxim*{\ltxkeys@removebadkeynames} +\fxim*{\pathkeys} + +In the argument of command \fx{\pathkeys}, the \quoted{path} is made up of \quoted{\texttt{\ang{main}/\ang{sub}/\ang{subsub}/.../}}. The quantity \ang{main} is the main path and \ang{sub} is the sub path, \eetc. Note that there is no forward slash ~(\fx{/}) before \ang{main}. If the path is empty, the default path \quotedfx{dft@main/dft@sub/}, or the user-supplied current path, is used. There is more about the default and current paths later in this guide. + +The \ang{attrib} is determined by the key called \ang{flag}. The \ang{flag} must be a member of the set described in \sref{tab:flags}. See the table notes for the \ang{attrib}'s of the flags. The attributes describe the arguments associated with the flags, \ie, the quantities expected after the \qcolon in the argument of \fx{\pathkeys}. The \ang{na} is the list of keys that are ignored. If it is present in the attribute \ang{attrib} part of \fx{\pathkeys}, it must always be given in square brackets \quotedfx{[]} (see \sref{nte:pathkeys-flags}). + +For flags with \stsign the user should make sure there is no space between the flag and its star. + +\defltablenote{pathkeys-flags-1}{% + The flag \fx{declareoptions}\Redstar simply signifies the user's aim to define definable options; it has nothing to do with the \stform of the command \fx{\ltxkeys@declareoption} of \sref{sec:declareoption}. Attribute: same as for \fx{define} flag. +} +\defltablenote{pathkeys-flags-2}{% + The arguments of the unknown key or option handler are the main path, subpaths (separated by forward slash), key name, and the current key value (see \sref{sec:unknownkeyhandler}). The key or option handler can have up to a maximum of~4 arguments. +} + +\newcolumntype{C}{>{\hfill}p{.7cm}} +\ltnotenrwidth14pt +\begingroup +\small +\begin{tabularx}{\linewidth}{|C|>{\raggedright}p{2.5cm}|X|} +\caption{Flags and attributes for pathkeys\label{tab:flags}}\\\hline +\ltablenotehead{These notes describe the attributes of handlers, \ie, what are required to be specified in \fx{\pathkeys} command after the \qcolon sign. \ang{na} keys must appear in square brackets, \eg, \fx{[keya]}.} +\rowcolor{pink} +\bfseries No. &\bfseries Flag & \bfseries Meaning\\\hline +\endfirsthead +\hline +\multicolumn{3}{|l|}{\emph{Continued from last page}}\\\hline +\bfseries No. &\bfseries Flag & \bfseries Meaning \\\hline +\endhead +\multicolumn{3}{|r|}{\emph{Continued on next page}}\\\hline +\endfoot +\hline +\endlastfoot +1 & \fx{define} & Define the keys whether or not they already exist.\ltablenote*{See attribute in \sref{nte:pathkeys-flags}.}\\\hline +2 & \fx{define}\Redstar & Define the keys only if they don't already exist.\ltablenote*{Same as for \fx{define} flag.} \\\hline +3 & \fx{declareoptions} & Declare the given options whether or not they already exist.\ltablenote*{Same as for \fx{define} flag.} \\\hline +4 & \fx{declareoptions}\Redstar & Declare the options if they don't already exist. \useltablenote*{pathkeys-flags-1} \\\hline +5 & \fx{set} & Set the listed keys. \ltablenote*{\ang{na} keys and \keyval pairs (see \sref{sec:settingkeys}).} \\\hline +6 & \fx{executeoptions} & Execute the listed options. \ltablenote*{\ang{na} keys and \keyval pairs (see \sref{sec:executeoption}).} \\\hline +7 & \fx{processoptions} & Process the listed options in the order in which they were declared, and don't copy \hx{\documentclass} options. \ltablenote*{\ang{na} keys (see \sref{sec:processoption}).} \\\hline +8 & \fx{processoptions}\Redstar & Process the listed options in the order in which they appear in the command \hx{\usepackage}, and copy \hx{\documentclass} options. \ltablenote*{\ang{na} keys (see \sref{sec:processoption}).} \\\hline +9 & \fx{launch} & Launch the listed keys (see \sref{sec:launchingkeys}). \ltablenote*{\keyval pairs.} \\\hline +10 & \fx{store value} & Store the value of \ang{key} in the given \ang{macro}. \ltablenote*{\ang{key} and \ang{macro}.} \\\hline +11 & \fx{print value} & Print the current value of \ang{key}. \ltablenote*{\ang{key}.}\\\hline +12 & \fx{add value} & Add the specified value to the current value of key. \ltablenote*{\ang{key} and \ang{value}.} \\\hline +13 & \fx{ifbool} & Test the state of a boolean key. This returns \ang{true} or \ang{false}. \ltablenote*{\ang{key}.}\\\hline +14 & \fx{ifdef} & Test if key is currently defined on the given single path. This returns \ang{true} or \ang{false}. \ltablenote*{\ang{key}.}\\\hline +15 & \fx{ifkeyonpath} & Test if key is currently defined on any of the given comma-separated multiple paths. This returns \ang{true} or \ang{false}. \ltablenote*{\ang{key}.}\\\hline +16 & \fx{disable} & Immediately disable the given keys. \ltablenote*{The attribute is a comma-separated key list.} \\\hline +17 & \fx{disable}\Redstar & Disable the given keys at the hook \hx{\AtBeginDocument} and not immediately. \ltablenote*{Comma-separated key list.}\\\hline +18 & \fx{key handler} or \fx{handler} & Unknown key handler.\useltablenote*{pathkeys-flags-2}\\\hline +19 & \fx{option handler} & Unknown option handler (see \sref{sec:unknownkeyhandler}). Options are keys with a special default family. There might be a reason to handle unknown options separately from unknown keys. +\end{tabularx} +\endgroup + +\begin{noteenv}* +\label{nte:pathkeys-flags} +The syntax for specifying keys to be defined by \fx{\pathkeys} is (see \sref{sec:declarekeys}) + +\start'{newmacro}[Syntax for defining keys in \pathkeys] +\pathkeys{|A(path)/|R(define): + |A(keytype)/|A(keyname)/|A(dft)/|A(cbk); + another set of key attributes; + etc. +} +\finish{newmacro} + +The default value \ang{dft} and the callback \ang{cbk} can be absent in all cases. \ang{keytype} may be any member of the set \fnz{ord,cmd,sty,sty*,bool,choice}. The star (\redstar) in \quoted{sty\Redstar} has the same meaning as in \fx{\ltxkeys@stylekey} (\sref{sec:stylekeys}), namely, undefined dependants will be defined on the fly when the parent is set/executed. \aidx*{style keys (sty*)} + +\start{example}[Syntax for defining pathkeys] +\pathkeys{fam/subfam/subsubfam/|R(define): + cmd/keya/defaultval/\def\cmda#1{#1}; + bool/keyb/true; +} +\finish{example} + +Choice keys must have their names associated with their nominations (\ie, admissible values) in the format \keydotchoice{keyname}{nominations}, as below (see also \sref{sec:declarekeys}): + +\start'{newmacro}[Syntax for defining choice keys in \pathkeys] +|com(`keya' is a choice key with simple nominations and callback, while `keyb') +|com(is a choice key with complex nominations. The function \order is generated) +|com(internally by the package for choice keys.) +\pathkeys{fam/subfam/subsubfam/|R(define): + choice/keya|boldreddot{left,right,center}/center/ + \edef\x{\ifcase\order 0\or 1\or 2\fi}; + choice/keyb|boldreddot{% + center/.code=\def\textalign{center}, + left/.code=\def\textalign{flushleft}, + |com(`.code=' can be omitted, as in:) + right/\def\textalign{flushright}, + justified/\let\textalign\relax + }/center/\def\x##1{##1xx#1}; +} +\finish{newmacro} + +The \ang{na} keys, if they are present in the attribute of \fx{\pathkeys}, must always be given in square brackets \fx{[]}. They can come either before or after the \keyval list to be set in the current run. For example, + +\start{example}[`na' keys] +\pathkeys{fam/subfam/subsubfam/|R(define): + cmd/keya/xx/\def\cmda#1{#1}; + bool/keyb/true; +} +|com(Set `keya' and ignore `keyb':) +\pathkeys{fam/subfam/subsubfam/|R(set): keya=zz,keyb=true [keyb]} +|com(or) +\pathkeys{fam/subfam/subsubfam/|R(set): [keyb] keya=zz,keyb=true} +\finish{example} + +See \sref{sec:options-pathkeys} for further examples of the use of ignored keys. Here we can see that a value is provided for \quoted{keyb} and yet we're ignoring the key. However, in practical applications it is often impossible to predict the set of keys (among a set of them) that may be executed at any time by the user of the keys. Therefore, \ang{na} keys are much more useful than the above example demonstrates. +\end{noteenv} + +Some of the commands associated with pathkeys are listed below. The abbreviation \ang{pk} means the full key path and key name, all separated by forward slash. + +\start+{newmacro}[\pathkeysval,\ifpathkeysval,\ifpathkeysvalTF, etc.] +|com(The following commands are expandable:) +\pathkeysval{|A(pk)} +\ifpathkeysval{|A(pk)} \then ... \else ... \fi +\ifpathkeysvalTF{|A(pk)}{|A(true)}{|A(false)} +|com(The following commands aren't expandable:) +\pathkeyskeyval{|A(pk)} +\ifpathkeyskeyval{|A(pk)} \then ... \else ... \fi +\ifpathkeyskeyvalTF{|A(pk)}{|A(true)}{|A(false)} +\pathkeys@storevalue{|A(pk)}|A(cmd) +\finish{newmacro} +\fxim*{\pathkeysval,\ifpathkeysval,\ifpathkeysvalTF,\pathkeyskeyval, + \ifpathkeyskeyval,\ifpathkeyskeyvalTF,\pathkeys@storevalue} + +The commands \ffx'{\pathkeysval, \pathkeyskeyval} simply yield the current value of the key. The commands \ffx'{\ifpathkeysval, \ifpathkeyskeyval}, which require \fx{\then} to form balanced conditionals, test the current state of the boolean key \ang{pk} in a \tex-like syntax. The commands \ffx'{\ifpathkeysvalTF, \ifpathkeyskeyvalTF} also test the current state of the boolean key \ang{pk} but return \ang{true} or \ang{false} in a \latex syntax. The command \fx{\pathkeys@storevalue} stores the current value of key \ang{pk} in the given command \ang{cmd}. + +\ltsnote If called outside an assignment or document environment, the macros \ffx'{\pathkeysval, \pathkeyskeyval} can give \quoted{no document error}, to signify that a token has been output outside these situations. And one source of problem with \ffx'{\ifpathkeysval, \ifpathkeyskeyval} is to omit \fx{\then} after their argument. If you find yourself typing long key paths and the commands \ffx'{\pathkeysval, \pathkeyskeyval}, \eetc, repeatedly, there is help ahead on how to reduce estate when using pathkeys. + +The following provide our first examples of pathkeys and a demonstration of some of the commands associated with pathkeys. + +\start+{example}[Pathkeys] +\pathkeys{fam/subfam/subsubfam/|R(define): + cmd/xwidth/\@tempdima/\def\y##1{#1yy##1}; + cmd/keya/\def\cmda#1{#1}; + bool/putframe/true; +} +\pathkeys{fam/subfam/subsubfam/|R(set): putframe=true [keya]} +\pathkeys{fam/subfam/subsubfam/|R(ifdef): xwidth}{\def\x{T}}{\def\x{F}} +\pathkeys{fam/subfam/subsubfam,famx/subfamx/subsubfamx/|R(ifkeyonpath): xwidth} + {\def\x{T}}{\def\x{F}} +\pathkeys{fam/subfam/subsubfam/|R(print value): xwidth}=\z@pt +\pathkeys{fam/subfam/subsubfam/|R(store value): keya \cmd} +\pathkeys{fam/subfam/subsubfam/|R(add value): keya=\def\cmdb#1{#1}} +\pathkeys@storevalue{fam/subfam/subsubfam/putframe}\cmd +\edef\x{|R(\ifpathkeysvalTF){fam/subfam/subsubfam/putframe}{T}{F}} +\edef\x{|R(\ifpathkeysval) fam/subfam/subsubfam/putframe|R(\then) T\else F\fi} +\edef\x{|R(\ifpathkeysval) fam/subfam/subsubfam/putframe|R(\then) T\else F\fi} +|com(`xputframe' is undefined. What does the following return?) +\edef\x{|R(\pathkeysval){fam/subfam/subsubfam/xputframe}} +|com(Unknown key handler:) +\pathkeys{fam/subfam/subsubfam/|R(key handler): + |com(`#1' is the key's main path, `#2' is the subpaths combined,) + |com(`#3' is the key name, and `#4' is the current value of the key:) + \ltxkeys@warn{Unknown key `#3' with value `#4' ignored.}% +} +\pathkeys{fam/subfam/subsubfam/|R(disable|*): keya,keyb,keyc} +\finish{example} +\fxim*{unknown key handler in pathkeys} + + +\start+{example}[Pathkeys] +\pathkeys{KV/frame/framebox/|R(define*): + cmd/width/\textwidth/\def\x##1{#1xx##1}; + cmd/textcolor/black; + cmd/framecolor/black; + cmd/framesep/3\p@; + cmd/framerule/0.4\p@; + cmd/cornersize/20\p@; + choice/textalign.{% + center/.code=\def\ttextalign{center}, + left/.code=\def\ttextalign{flushleft}, + right/.code=\def\ttextalign{flushright} + }/center; + bool/putframe/true; + cmd/arga; + cmd/argb; +} + +\newcommand*\myframebox[1][]{% +|com(Use `set' or `launch' here, but they don't have the same meaning:) + \pathkeys{KV/frame/framebox/|R(set):#1}% + \begingroup + \fboxsep\pathkeysval{KV/frame/framebox/framesep}% + \fboxrule\pathkeysval{KV/frame/framebox/framerule}\relax + \cptdimdef\boxwidtha{% + \pathkeysval{KV/frame/framebox/width}-2\fboxsep-2\fboxrule + }% + \noindent\begin{lrbox}\@tempboxa + \begin{minipage}[c][\height][s]\boxwidtha + \@killglue + \begin\ttextalign + \textcolor{\pathkeysval{KV/frame/framebox/textcolor}}{% + Arg-1: \pathkeysval{KV/frame/framebox/arga} + \endgraf + Arg-2: \pathkeysval{KV/frame/framebox/argb}% + }% + \end\ttextalign + \end{minipage}% + \end{lrbox}% + \@killglue + \color{\pathkeysval{KV/frame/framebox/framecolor}}% + \ifpathkeysval{KV/frame/framebox/putframe}\then\ovalbox{\fi + \usebox\@tempboxa + \ifpathkeysval{KV/frame/framebox/putframe}\then}\fi + \endgroup +} + +\begin{document} +\myframebox[arga=Text-1,argb={Test text-2\\ ...\\test text-2}, + framerule=2pt,framecolor=blue,textcolor=purple, + putframe=true,textalign=right] +\end{document} +\finish{example} + + +\begin{noteenv} +When using pathkeys (and in general the commands \ffx'{\ltxkeys@definekeys,\ltxkeys@declarekeys}), there is a potential problem in deploying forward slashes in key defaults and macros without enclosing those slashes in curly braces. They will confuse the parser. Several solutions exist, including tweaking the relevant internal parser, but I haven't decided on the optimal solution to this possibility. For example, the following will fail: + +\start{example}[Forward slashes in key defaults and macros] +\pathkeys{fam/subfam/subsubfam/define*: + bool/keya/true/\ifpathkeysval fam/subfam/subsubfam/keya\then + \def\x{T}\else\def\x{F}\fi; +} +\finish{example} + +Its correct form is + +\start{example}[Forward slashes in key defaults and macros] +\pathkeys{fam/subfam/subsubfam/define*: + bool/keya/true/\ifpathkeysval|R({)fam/subfam/subsubfam/keya|R(})\then + \def\x{T}\else\def\x{F}\fi; +} +\finish{example} +\end{noteenv} + + +\docsubsection(sec:pathkeys-shortcmds){Shortened pathkeys commands} + +As seen above, the estate for deploying pathkeys can be large when compared with the amount of typing required for conventional keys presented in the previous chapters. To reduce the estate, the first line of thought is to store any long path in a macro and call the macro instead of the path. The path is always fully expanded under safe actives. The following example demonstrates this approach. + +\start+{example}[Putting paths in macros] +\def\mypath{fam/subfam/subsubfam} +\pathkeys{\mypath/define: + cmd/xwidth/\@tempdima/\def\y##1{#1yy##1}; + cmd/keya/\def\cmda#1{#1}; + bool/putframe/true +} +\pathkeys{famx/subfamx,fam/subfam/ifkeyonpath: xwidth}{\def\x{T}}{\def\x{F}} +\pathkeys{famx/subfamx,\mypath/ifkeyonpath: xwidth}{\def\x{T}}{\def\x{F}} +\pathkeys{\mypath/set: putframe=true} +\pathkeys{\mypath/ifdef: xwidth}{\def\x{T}}{\def\x{F}} +\pathkeys{\mypath/print value: xwidth}=\z@pt +\pathkeys@storevalue{\mypath/putframe}\cmd +\edef\x{\ifpathkeysvalTF{\mypath/putframe}{T}{F}} +\edef\x{\ifpathkeysval \mypath/putframe\then T\else F\fi} +\edef\x{\ifpathkeysval \mypath/putframe\then T\else F\fi} +\pathkeys{\mypath/add value: keya=\def\cmdb#1{#1}} +\finish{example} + +Instead of defining your own commands like the above \fx{\mypath}, you can use the following name-spaced commands: + +\start+{newmacro}[\newpath,\defpath,\changepath,\undefpath,\usepath] +\newpath{|A(pathname)}{|A(path)} +\defpath{|A(pathname)}{|A(path)} +\changepath{|A(pathname)}{|A(path)} +\undefpath{|A(pathname)} +\usepath{|A(pathname)} +\finish{newmacro} +\fxim*{\newpath,\defpath,\changepath,\undefpath,\usepath} + +These commands have their own separate namespace. Here, \ang{pathname} is used, after definition, as an abbreviation for the full path \ang{path}. The command \fx{\newpath} creates \ang{pathname} if it didn't already exist; \fx{\defpath} creates \ang{pathname} whether or not it exists; \fx{\changepath} is equivalent to \fx{\defpath}; \fx{\undefpath} undefines \ang{pathname}; and \fx{\usepath} expands \ang{pathname} to its full meaning. The macro \fx{\usepath} does accept, as argument, a comma-separated list of pathnames, but it is unlikely that such a list will, for now anyway, be needed outside when using the flag \fx{ifkeyonpath} (see the following example). + +\start+{example}[\newpath, \usepath] +\newpath{path1}{fam/subfam/subsubfam1} +\newpath{path2}{fam/subfam/subsubfam2} +\pathkeys{\usepath{path1}/define: + cmd/keya/xx/\def\cmda#1{#1}; + bool/keyb/true +} +\pathkeys{|R(\usepath{path1,path2})/ifkeyonpath: keya}{\def\x{T}}{\def\x{F}} +\pathkeys@storevalue{\usepath{path1}/keyb}\cmd +\edef\x{\ifpathkeysvalTF{\usepath{path1}/keya}{T}{F}} +\finish{example} + +The following shortened counterparts of the pathkeys commands are provided (see \sref{tab:pathkeys-cmdabbrv}). The abbreviated commands are available only after the user has invoked \fx{\pathkeys@useshortcmds}, which expects no argument. The command \fx{\pathkeys@useshortcmds} has only local effect, \ie, the abbreviations may be localized to a group. The abbreviations are defined only if they're definable (\ie, didn't exist before calling the command \fx{\pathkeys@useshortcmds}). + +\begingroup\small +\begin{tabularx}{\linewidth}{|p{3.5cm}|p{2.5cm}|p{3.5cm}|X|} +\caption{Pathkeys command abbreviations\xwmlabel{tab:pathkeys-cmdabbrv}}\\\hline +\rowcolor{pink} +\bf Command & \bf Abbreviation & \bf Command & \bf Abbreviation\\\hline +\endfirsthead +\hline +\multicolumn{3}{|l|}{\emph{Continued from last page}}\\\hline +\bf Command & \bf Abbreviation & \bf Command & \bf Abbreviation\\\hline +\endhead +\multicolumn{3}{|r|}{\emph{Continued on next page}}\\\hline +\endfoot +\hline +\endlastfoot +\fx{\pathkeysval} & \fx{\pkv} & \fx{\pathkeyskeyval} & \fx{\pkkv} \\\hline +\fx{\ifpathkeysval} & \fx{\ifpkv} & \fx{\ifpathkeyskeyval} & \fx{\ifpkkv} \\\hline +\fx{\ifpathkeysvalTF} & \fx{\ifpkvTF} & \fx{\ifpathkeyskeyvalTF} & \fx{\ifpkkvTF} \\\hline +\end{tabularx} +\endgroup + +The user isn't constrained to use the short form commands of \sref{tab:pathkeys-cmdabbrv}. He/she can define his/her own short forms by using the command \fx{\pathkeys@makeshortcmds}, which has the syntax: + +\start{newmacro}[\pathkeys@makeshortcmds] +\pathkeys@makeshortcmds{|A(short-1)=|A(long-1), ..., |A(short-n)=|A(long-n)} +\finish{newmacro} + +where \ang{short-i} and \ang{long-i} are the short (new) and long (existing) aliases of the command \ang{i}. The \eqsign is mandatory here. You don't have to (in fact, you shouldn't) call \fx{\pathkeys@useshortcmds} after calling \fx{\pathkeys@makeshortcmds}. + +\start{example}[\pathkeys@makeshortcmds] +\pathkeys@makeshortcmds{\kval=\pathkeyskeyval,\ifkvalTF=\ifpathkeyskeyvalTF} +\finish{example} + + +\docsubsection(sec:pathkeys-dftpath){Default and current paths} + +\start+{newmacro}[\pathkeys@currentpath, etc.] +\pathkeys@addtodefaultpath{|A(path)} +\pathkeys@changedefaultpath{|A(path)} +\pathkeys@currentpath{|A(path)} +\pathkeys@usedefaultpath +\pathkeys@pushcurrentpath +\pathkeys@popcurrentpath +\pathkeys@pathhistory +\finish{newmacro} +\fxim*{\pathkeys@addtodefaultpath,\pathkeys@changedefaultpath, + \pathkeys@currentpath,\pathkeys@usedefaultpath,\pathkeys@pushcurrentpath, + \pathkeys@popcurrentpath,\pathkeys@pathhistory} + +If the key path is empty, then the current path will be used; and if there is no current path, the default path will be used. The default path is \fx{dft@main/dft@sub}. This can be changed by the commands \ffx'{\pathkeys@addtodefaultpath, \pathkeys@changedefaultpath}. The current path can be declared by providing an argument to the command \fx{\pathkeys@currentpath}. The default path can be made the current path by invoking the command \fx{\pathkeys@usedefaultpath}, which is parameterless. + +It isn't mandatory, but it is useful, to first push the prevailing path before changing it. This can be done by calling the parameterless command \fx{\pathkeys@pushcurrentpath}. When you're done with the current path, you can revert to the path before the current path by calling the command \fx{\pathkeys@popcurrentpath}. You can get the entire history of path changes from the container \fx{\pathkeys@pathhistory}, which is useful in complex situations. + +Before the current path is resorted to, the path for the commands \ffx{\pathkeys, \pathkeysval, \ifpathkeysval}, \eetc must be empty (\ie, no main and no subs). Therefore, in any given setting, the path that is dominant can be made current so that it isn't given in \ffx{\pathkeys, \pathkeysval, \ifpathkeysval}, \eetc. The non-dominant paths could then be listed in full. Of course, there can't be more than one current path. + +\start+{example}[\pathkeys@currentpath, etc.] +\newcommand*\myframebox[1][]{% + |R(\pathkeys@currentpath){KV/frame/framebox}% + \pathkeys{launch:#1}% + \begingroup + |R(\pathkeys@useshortcmds) + \fboxsep\pkv{framesep}\fboxrule\pkv{framerule}\relax + \cptdimdef\boxwidtha{\pkv{width}-2\fboxsep-2\fboxrule}% + \noindent\begin{lrbox}\@tempboxa + \begin{minipage}[c][\height][s]\boxwidtha + \@killglue + \begin\ttextalign + \textcolor{\pkv{textcolor}}{Arg-1: \pkv{arga}\endgraf Arg-2: \pkv{argb}}% + \end\ttextalign + \end{minipage}% + \end{lrbox}% + \@killglue + \color{\pkv{framecolor}}% + \ifpkv{putframe}\then\ovalbox{\fi + \usebox\@tempboxa + \ifpkv{putframe}\then}\fi + \endgroup +} + +\begin{document} +\myframebox[arga=Text-1,argb={Test text-2\\ ...\\test text-2}, + framerule=2pt,framecolor=blue,textcolor=purple, + putframe=true,textalign=right] +\end{document} +\finish{example} + + +\docsubsection(sec:nestedpathkeys){Nested pathkeys} + +The command \fx{\pathkeys} can be nested, as the following example shows: + +\start{example}[Nested pathkeys] +\def\mypath{fam/subfam/subsubfam} +|R(\pathkeys){\mypath/define: + cmd/xwidth/\@tempdima/\def\y##1{#1yy##1}; + |com(The default, not callback, of `keya' is \def\cmda#1{#1}. The key) + |com(has no callback:) + cmd/keya/\def\cmda#1{#1}; + |com(The callback of `keyb' says ``if `keyb' is `true', define `keyc''':) + bool/keyb/true/ + |R(\pathkeys){\mypath/ifbool: keyb}{% + |R(\pathkeys){\mypath/define: cmd/keyc/xx/\def\cmdc####1{####1#1}}% + }{% + |com(`keyd' has no callback:) + |R(\pathkeys){\mypath/define: choice/keyd.{yes,no}/yes}% + } +} +\pathkeys{\mypath/set: keyb=true} +\finish{example} + +Try to find out why the following produces an error: + +\start{example}[Nested pathkeys] +\def\mypath{fam/subfam/subsubfam} +|R(\pathkeys){\mypath/define: + cmd/keya/keyadefault/ + |R(\pathkeys){\mypath/define|*: cmd/keyb/xx/\def\cmdb####1{####1}}; +} +\pathkeys{\mypath/set: keya=bbb} +\finish{example} + +The reason is that \fx{keyb} was defined when the default was being set up for \fx{keya} after the definition of \fx{keya}. The second setting of \fx{keya} prompts an error that \fx{keyb} is being redefined. Notice that \fx{keyb} is to be defined uniquely by the flag \fx{define}\Redstar. To avoid this type of error, you may consider removing \redstar from \fx{define}\Redstar. + + +\docsubsection(sec:options-pathkeys){Pathkeys as class or package options} + +To use the command \fx{\pathkeys} for declaring class or package options, the user should simply call \fx{\pathkeys} with the flag \fx{declareoptions} (or \fx{declareoptions}\Redstar for defining only unique options). The flags \ffx'{executeoptions, processoptions, processoptions}\Redstar can be used to execute and process options, respectively. In this respect, although not necessary, you may want to change the default or current path to reflect the class file or package name. + +\start{example}[Declaring and processing options] +\ProvidesPackage{mypackage}[2011/11/11 v0.1 My test package] +\newpath{mypath}{mypackage/myfunc/myfunckeys} +|com(Declare three unique options:) +\pathkeys{\usepath{mypath}/|R(declareoptions)|*: + cmd/opt1/12cm/\def\y##1{#1yy##1}; + bool/opt2/true/\ifpathkeysval{\usepath{mypath}/opt2}\then + \def\x{T}\else\def\x{F}\fi; + ord/opt3/zz/\def\z##1{#1zz##1}; +} +|com(Set up defaults for options `opt1' and `opt2', ignoring option `opt3':) +\pathkeys{\usepath{mypath}/|R(executeoptions): + opt1=10cm,opt2=true,opt3=yy [opt3] +} +|com(Ignore `opt1' when processing options:) +\pathkeys{\usepath{mypath}/|R(processoptions)|*: [opt1]} + +\documentclass[opt1=2cm,opt2=false]{article} +\usepackage[opt3=somevalue]{mypackage} +\finish{example} + + +\docsection(sec:misc-commands){Some miscellaneous commands} + +Some of the macros used internally by the \pkg'{ltxkeys} are available to the user. A few of them are described below. + + +\docsubsection(sec:trimspaces){Trimming leading and trailing spaces} + +\start+{newmacro}[\ltxkeys@trimspaces,\ltxkeys@trimspacesincs] +\ltxkeys@trimspaces{|A(token)}|A(cs) +\ltxkeys@trimspacesincs|A(cs) +\finish{newmacro} +\fxim*{\ltxkeys@trimspaces,\ltxkeys@trimspacesincs} + +The command \fx{\ltxkeys@trimspaces} trims (\ie, removes) the leading and trailing spaces around \ang{token} and returns the result in the macro \ang{cs}. Forced (\ie, explicit) leading and trailing spaces around \ang{token} are removed unless they are enclosed in braces. + +The command \fx{\ltxkeys@trimspacesincs} trims the leading and trailing spaces around the token in the macro \ang{cs} and returns the result in \ang{cs}. + + +\docsubsection(sec:checkchoice){Checking user inputs} + +\start+{newmacro}[\ltxkeys@checkchoice,\ltxkeys@checkinput,\CheckUserInput] +\ltxkeys@checkchoice[|A(parser)]|(|A(val)|A(order)|){|A(input)}{|A(nomin)}{|A(true)} +\ltxkeys@checkchoice|*[|A(parser)]|(|A(val)|A(order)|){|A(input)}{|A(nomin)}{|A(true)} +\ltxkeys@checkchoice|+[|A(parser)]|(|A(val)|A(order)|){|A(input)}{|A(nomin)}{|A(true)}{|A(false)} +\ltxkeys@checkchoice|*|+[|A(parser)]|(|A(val)|A(order)|){|A(input)}{|A(nomin)}{|A(true)}{|A(false)} +\ltxkeys@checkinput{|A(input)}{|A(nomin)}{|A(true)}{|A(false)} +\CheckUserInput{|A(input)}{|A(nomin)} +\finish{newmacro} +\fxim*{\ltxkeys@checkchoice,\ltxkeys@checkinput,\CheckUserInput, + \ltxkeys@commacheckchoice} + +The command \fx{\ltxkeys@checkchoice} is a re-implementation of \pkg'{xkeyval}'s command \fx{\XKV@checkchoice} so as to accept arbitrary list parser \ang{parser} and more robustness. It checks the user input \ang{input} against the list of nominations \ang{nomin}. If the input is valid, the user input is returned in \ang{val} and the numerical order (starting from zero) of the input in the nominations is returned in \ang{order}\footnote{The functions \ang{val} and \ang{order} are user-supplied macros.}. If the input isn't valid, the user input is still returned in \ang{val}, but $-1$ is returned in \ang{order}. \ang{parser} is the list parser. The \stform of \fx{\ltxkeys@checkchoice} will convert \ang{input} into lowercase before checking it against the nominations. The \plform of \fx{\ltxkeys@checkchoice} expects two branches (\ang{true} and \ang{false}) of callback at the end of the test. The \unplform expects only one branch (\ang{true}) and will return error if the input is invalid\footnote{There is also \ftfx{\ltxkeys@commacheckchoice}, whose parser is implicitly \qcomma and does not need to be given by the user.}. + +The commands \ffx'{\ltxkeys@checkinput,\CheckUserInput} apply to comma-separated lists of nominations \ang{nomin} and they always convert \ang{input} to lowercase before checking it against the nominations \ang{nomin}. The macro \fx{\ltxkeys@checkinput} expects two branches of callback, while \fx{\CheckUserInput} expects no callback. Instead, \fx{\CheckUserInput} will toggle the internal boolean \fx{\ifinputvalid} to \hx{true} if the input is valid, and to \hx{false} otherwise. The internal boolean \fx{\ifinputvalid} could then be called by the user after the test. + + +\docsubsection(sec:ifinset){Does a test string exist in a string?} + +\start+{newmacro}[\ltxkeys@in,\ltxkeys@iffound] +\ltxkeys@in{|A(teststr)}{|A(str)} +\ltxkeys@in|*{|A(teststr)}{|A(str)}{|A(true)}{|A(false)} +\ltxkeys@iffound|A(teststr)|R(\in)|A(str)|R(\then) |A(true) \else |A(false) \fi +\finish{newmacro} +\fxim*{\ltxkeys@in,\ltxkeys@iffound} + +The \unstform of the command \fx{\ltxkeys@in} is identical with \usecsn{latex2e} kernel's (2011/06/27) \hx{\in@}. The command \hx{\in@} tests for the presence of \ang{teststr} in \ang{str}. The \stform of \fx{\ltxkeys@in} returns two \latex branches \ang{true} and \ang{false}. On the other hand, the command \fx{\ltxkeys@iffound} requires the first argument to be delimited by \fx{\in} and the second argument by \fx{\then}. + +\start{example}[\ltxkeys@iffound] +\ltxkeys@iffound xx\in aax\then \def\x{T}\else \def\x{F}\fi +\finish{example} + +\ltsnote The command \fx{\ltxkeys@iffound} trims leading and trailing spaces around the tokens \ang{teststr} and \ang{str} before the test! The commands \ffx'{\ltxkeys@in,\ltxkeys@iffound} aren't expandable. + + +\docsubsection(sec:ifpattern){Does a given pattern exist in the meaning of a macro?} + +\start{newmacro}[\ltxkeys@ifpattern] +\ltxkeys@ifpattern{|A(teststr)}|A(cmd){|A(true)}{|A(false)} +\finish{newmacro} +\fxim*{\ltxkeys@ifpattern} + +The command \fx{\ltxkeys@ifpattern} simply determines if the meaning of \ang{cmd} contains \ang{teststr}. It returns \ang{true} if \ang{teststr} is found in the meaning of \ang{cmd}, and \ang{false} otherwise. + + +\docsubsection(sec:ltxkeysifcase) + {\ltsneverexpand{\ttcl{texcolor}{\bs ifcase}} for arbitrary strings} + +\start+{newmacro}[\ltxkeys@ifcase,\ltxkeys@findmatch] +\ltxkeys@ifcase{|A(teststr)}{|A(case-1):|A(cbk-1),...,|A(case-n):|A(cbk-n)} + {|A(true)}{|A(false)} +\ltxkeys@findmatch{|A(teststr)}{|A(case-1):|A(cbk-1),...,|A(case-n):|A(cbk-n)}{|A(fn)} +\finish{newmacro} +\fxim*{\ltxkeys@ifcase,\ltxkeys@findmatch} + +The command \fx{\ltxkeys@ifcase} tests \ang{teststr} against \ang{case-i}. If a match is found, the \ang{case-i}'s callback \ang{cbk-i} is returned in the macro \fx{\currmatch} and \ang{true} is executed. If at the end of the loop no match is found, \fx{\ltxkeys@ifcase} returns empty \fx{\currmatch} and executes \ang{false}. + +The command \fx{\ltxkeys@findmatch} works like \fx{\ltxkeys@ifcase} but executes the fallback \ang{fn} (instead of \ang{true} or \ang{false}) when no match is found. + + +\docsubsection(sec:ifincsvlist){Is the number of elements from a sublist found in a csv list $\ge n$?} + +\start{newmacro}[\ltxkeys@ifincsvlistTF] +\ltxkeys@ifincsvlistTF[A(parser)]|(|A(nr)|){|A(sub)}{|A(main)}{|A(true)}{|A(false)} +\ltxkeys@ifincsvlistTF|*[A(parser)]|(|A(nr)|){|A(sub)}{|A(main)}{|A(true)}{|A(false)} +\finish{newmacro} +\fxim*{\ltxkeys@ifincsvlistTF} + +The command \fx{\ltxkeys@ifincsvlistTF} checks if the number of elements of \ang{parser}-separated (csv) list \ang{sub} found in \ang{main} is equal or greater than \ang{nr}. The argument \ang{main} is the main list and \ang{sub} is the sublist of test strings. Normally, \ang{sub} will be a user input and \ang{main} the list of nominations. Neither \ang{main} nor \ang{sub} is expanded in the test. If the test is true, \fx{\ltxkeys@itemspresent} returns all the elements found, \fx{\ltxkeys@nritems} returns the number of elements found, and \ang{true} is executed. If the test fails, \fx{\ltxkeys@itemspresent} returns empty, \fx{\ltxkeys@nritems} returns $-1$, and \ang{false} is executed. The \stform of \fx{\ltxkeys@ifincsvlistTF} will turn both input and nominations to lowercase before the test. The default values of the optional list \ang{parser} and the optional number of elements to find \ang{nr} are \qcomma and $1$, respectively. + + +\docsubsection(sec:ifintsvlist){Is the number of elements from a sublist found in a tsv list $\ge n$?} + +\start{newmacro}[\ltxkeys@ifintsvlistTF] +\ltxkeys@ifintsvlistTF|(|A(nr)|){|A(sub)}{|A(main)}{|A(true)}{|A(false)} +\ltxkeys@ifintsvlistTF|*|(|A(nr)|){|A(sub)}{|A(main)}{|A(true)}{|A(false)} +\finish{newmacro} +\fxim*{\ltxkeys@ifintsvlistTF} + +The command \fx{\ltxkeys@ifintsvlistTF} checks if the number of elements of nonparser-separated (tsv) list \ang{sub} found in \ang{main} is equal or greater than \ang{nr}. The argument \ang{main} is the main list and \ang{sub} is the sublist of test strings. Normally, \ang{sub} will be a user input and \ang{main} the list of nominations. Neither \ang{main} nor \ang{sub} is expanded in the test. If the test is true, \fx{\ltxkeys@itemspresent} returns all the elements found, \fx{\ltxkeys@nritems} returns the number of elements found, and \ang{true} is executed. If the test fails, \fx{\ltxkeys@itemspresent} returns empty, \fx{\ltxkeys@nritems} returns $-1$, and \ang{false} is executed. The \stform of \fx{\ltxkeys@ifintsvlistTF} will turn both input and nominations to lowercase before the test. + +Normally, tsv-matching requires that the test strings in \ang{sub} are unique in the nominations \ang{main}. Some caution is, therefore, necessary when dealing with tsv lists. + -where, again, \ang{list} is comma-separated. +\docsubsection(sec:ifeltcount) + {Is the number of elements in a csv list $\ge n$ or $\le n$?} -TO-DO: +\start{newmacro}[\ltxkeys@ifeltcountTF] +\ltxkeys@ifeltcountTF[|A(parser)]|(|A(rel)|){|A(nr)}{|A(list)}{|A(true)}{|A(false)} +\ltxkeys@ifeltcountTF|*[|A(parser)]|(|A(rel)|){|A(nr)}{|A(listcmd)}{|A(true)}{|A(false)} +\finish{newmacro} +\fxim*{\ltxkeys@ifeltcountTF} + +The command \fx{\ltxkeys@ifeltcountTF} checks if the number of elements in \ang{parser}-separated list \ang{list} has relation \ang{rel} ($>=<$) with number \ang{nr}. If the test is true, \ang{true} is executed, otherwise \ang{false} is executed. The \stform of \fx{\ltxkeys@ifeltcountTF} will expand \ang{listcmd} once before the test. Double parsers and empty entries in \ang{list} are ignored. The default values of the optional list \ang{parser} and the optional relational type \ang{rel} are \qcomma and \quoted{$=$}, respectively. The number \ang{nr} is a mandatory argument. + +The following example returns \ang{false} (\ie, \fx{\meaning\x -> F}). + +\start{example}[\ltxkeys@ifeltcountTF] +\ltxkeys@ifeltcountTF[;]|(<|){2}{a;b;c}{\def\x{T}}{\def\x{F}} +\finish{example} + + +\docsubsection(sec:getorder){What is the numerical order of an element in a csv list?} + +\start{newmacro}[\ltxkeys@getorder] +\ltxkeys@getorder[|A(parser)]{|A(elt)}{|A(list)} +\ltxkeys@getorder|*[|A(parser)]{|A(elt)}{|A(listcmd)} +\finish{newmacro} +\fxim*{\ltxkeys@getorder,\ltxkeys@order} + +The command \fx{\ltxkeys@getorder} returns in \fx{\ltxkeys@order} the numerical order of \ang{elt} in \ang{parser}-separated \ang{list} or \ang{listcmd}. The value of \fx{\ltxkeys@order} is the numerical order of the first match found. The count starts from zero ($0$). The \stform will expand \ang{listcmd} once before commencing the search for \ang{elt}. If no match is found, \fx{\ltxkeys@order} returns $-1$, which can be used for taking further decisions. + + +\docsubsection(sec:list-normalization){List normalization} + +\start+{newmacro}[\ltxkeys@commanormalize,\ltxkeys@kvnormalize] +\ltxkeys@commanormalize{|A(list)}|A(cmd) +\ltxkeys@commanormalizeset{{|A(list-1)}|A(cmd-1),...,{|A(list-n)}|A(cmd-n)} +\ltxkeys@kvnormalize{|A(list)}|A(cmd) +\ltxkeys@kvnormalizeset{{|A(list-1)}|A(cmd-1),...,{|A(list-n)}|A(cmd-n)} +\finish{newmacro} +\fxim*{\ltxkeys@commanormalize,\ltxkeys@commanormalizeset, + \ltxkeys@kvnormalize,\ltxkeys@kvnormalizeset} + +These commands will normalize the comma-separated \ang{list} (or \ang{list-i}) and return the result in \ang{cmd} (or \ang{cmd-i}). For the command \fx{\ltxkeys@kvnormalize}, \ang{list} is assumed to be a list of \keyval pairs. Normalization implies changing the category codes of all the active commas to their standard values, as well as trimming leading and trailing spaces around the elements of the list and removing consecutive multiple commas. Thus empty entries that are not enforced by curly braces are removed. Besides dealing with multiple commas and the spaces between entries, the command \fx{\ltxkeys@kvnormalize} removes spaces between keys and the equality sign, and multiple equality signs are made only one. Further, the category codes of comma and the equality sign are made normal throughout the list. + +\docsubsection(sec:listparse){Parsing arbitrary csv or kv list} + +\start{newmacro}[\ltxkeys@parse] +\ltxkeys@parse|A(flag)[|A(parser)]{|A(list)} +\ltxkeys@parse|*|A(flag)[|A(parser)]{|A(listcmd)} +\finish{newmacro} +\fxim*{\ltxkeys@parse} + +The unexpandable command \fx{\ltxkeys@parse} is the list processor for the \pkg'{ltxkeys}. It can process both arbitrary \ang{parser}-separated lists and \keyval pairs. The \ang{flag}, which must lie in the range $(0,3)$, determines the type of processing that is required. The admissible values of \ang{flag} and their meaning are given in \sref{tab:parser-flags}. The macro \fx{\ltxkeys@parse} loops over the given \ang{parser}-separated \ang{list} and execute the user-defined, one-parameter command \fx{\ltxkeys@do} for every item in the list, passing the item as an argument and preserving outer braces. The default value of \ang{parser} is \qcomma. The \stform of \fx{\ltxkeys@parse} will expand \ang{listcmd} once before commencing the loop. + +\begingroup +\small +\begin{tabularx}{\linewidth}{|p{1cm}|X|} +\caption{Flags for command \fx{\ltxkeys@parse}\label{tab:parser-flags}}\\\hline +\rowcolor{pink} +\bfseries Flag &\bfseries Meaning\\\hline +\endfirsthead +\hline +\multicolumn{2}{|l|}{\emph{Continued from last page}}\\\hline +\bfseries Flag &\bfseries Meaning\\\hline +\endhead +\multicolumn{2}{|r|}{\emph{Continued on next page}}\\\hline +\endfoot +\hline +\endlastfoot +$0$ & \ang{list} is assumed to be an ordinary list (\ie, not a list of \keyval pairs); it isn't normalized by \fx{\ltxkeys@parse} prior to parsing. \\\hline +$1$ & \ang{list} is assumed to be an ordinary list (\ie, not a list of \keyval pairs); it is normalized by \fx{\ltxkeys@parse} prior to parsing. \\\hline +$2$ & \ang{list} is assumed to be a list of \keyval pairs; it isn't normalized by \fx{\ltxkeys@parse} prior to parsing. \\\hline +$3$ & \ang{list} is assumed to be a list of \keyval pairs; it is normalized by \fx{\ltxkeys@parse} prior to parsing. +\end{tabularx} +\endgroup + +Here are some points to note about the list processor \fx{\ltxkeys@parse}: +\begin{enum} +\item If an item contains \ang{parser}, it must be wrapped in curly braces when using \fx{\ltxkeys@parse}, otherwise the elements may be mixed up during parsing. The braces will persist thereafter, but will of course be removed during printing (if the items are printed). +\item White spaces before and after the list separator are always ignored by the normalizer called by \fx{\ltxkeys@parse}. If an item contains \ang{parser} or starts with a space, it must, therefore, be wrapped in curly braces before calling \fx{\ltxkeys@parse}. +\item Since when \ang{flag} is $0$ or $2$ the command \fx{\ltxkeys@parse} doesn't call the normalizer, in this case it does preserve outer/surrounding spaces in the entries. Empty entries in \ang{list} or \ang{listcmd} will be processed by \fx{\ltxkeys@parse} if the boolean \fx{\ifltxkeys@useempty} is true. You may thus issue the command \fx{\ltxkeys@useemptytrue} before calling \fx{\ltxkeys@parse}. The ability to parse empty entries is required by packages that use empty key prefixes, and/or families\footnote{The use of empty key prefixes, families and paths is, in general, not advisable.}. \fx{\ifltxkeys@useempty} is false by default. +\item The command \fx{\ltxkeys@parse} can be nested to any level and can be mixed with other looping macros. +\item In the command \fx{\ltxkeys@parse}, it is always possible to break out of the loop prematurely at any level of nesting, simply by issuing the command \fx{\loopbreak}. Breaking an inner loop doesn't affect the continuation of the outer loop, and vice versa. +\item The argument of the one-parameter command \fx{\ltxkeys@do} can be passed to a multi-parameter command, or to a command that expects delimited arguments. +\end{enum} + + +\docsubsection(sec:declarelistparser){Expandable list parser} + +\start{newmacro}[\ltxkeys@declarelistparser] +\ltxkeys@declarelistparser|A(iterator){|A(parser)} +\def|A(processor)#1{...#1...} +|A(iterator){|A(list)}|A(processor) +|A(iterator)|!{|A(list)}|A(processor) +\finish{newmacro} +\fxim*{\ltxkeys@declarelistparser} + +Given a parser (or list separator) \ang{parser}, the command \fx{\ltxkeys@declarelistparser} can be used to define an expandable list iterator \ang{iterator}. The item processor \ang{processor} should be a one-parameter macro, which will receive and process each element of \ang{list}. The optional \clsign determines whether or not the processor is actually expanded and executed in the current expansion context. If \redclam is given, the processor is expanded and executed, otherwise it is merely given the elements as argument without expansion. In general, \ang{list} isn't normalized, but is expanded once, before commencing the loop. The list can be normalized by the command \fx{\csv@@normalize} (see \pkg'{catoptions}) before looping. The following example demonstrates the concept. The user can insert \fx{\listbreak} as an item in the list to break out of the iteration prematurely. + +\start+{example}[\ltxkeys@declarelistparser] +\ltxkeys@declarelistparser\iterator{;} +\def\do#1{#1} +|com(The following example will yield `\x=macro:->\do{a}\do{b}\do{c}':) +\edef\x{\iterator{a;b;c}\do} +|com(The following example will yield `\x=macro:->abc':) +\edef\x{\iterator|!{a;b;c}\do} + +|com(The following example will add `a,b,c' to macro \y:) +\ltxkeys@declarelistparser\doloop{,} +\doloop{a,b,c}{\cptaddtolist\y} +|com(The following example will add `d,e' to macro \y:) +\doloop|!{d,e,\listbreak,f}{\cptaddtolist\y} +\finish{example} + + +\docsubsection(sec:removeelements){Remove one or all occurrences of elements from a csv list} + +\start{newmacro}[\ltxkeys@removeelements] +\ltxkeys@removeelements[|A(parser)]|(|A(nr)|)|A(listcmd){|A(sublist)}{|A(fd)}{|A(nf)} +\ltxkeys@removeelements|*[|A(parser)]|(|A(nr)|)|A(listcmd){|A(sublist)}{|A(fd)}{|A(nf)} +\finish{newmacro} +\fxim*{\ltxkeys@removeelements} + +The command \fx{\ltxkeys@removeelements} removes \ang{nr} number of each element of \ang{sublist} from \ang{listcmd}. The default values of the optional list \ang{parser} and the optional maximum number of elements to remove \ang{nr} are \qcomma and $1$, respectively. If at least one member of \ang{sublist} is found and removed from \ang{listcmd}, then the callback \ang{fd} is returned and executed, otherwise \ang{nf} is returned. Both \ang{fd} and \ang{nf} provide some fallback following the execution of \fx{\ltxkeys@removeelements}. The challenge to the user is to remember that the command \fx{\ltxkeys@removeelements} requires these callbacks, which may both be empty. The \stform of \fx{\ltxkeys@removeelements} will remove from \ang{listcmd} all the members of \ang{sublist} found irrespective of the value of \ang{nr}. The optional \ang{nr} is therefore redundant when the \stform of \fx{\ltxkeys@removeelements} is called. Here, \ang{sublist} is simply \ang{parser}-separated. + +\start{example}[\ltxkeys@removeelements] +\def\xx{a;b;c;d;d;e;f;c;d} +|com(Remove at most 2 occurrences of `c' and `d' from \xx:) +\ltxkeys@removeelements[;]|(2|)\xx{c;d}{\def\x{done}}{\def\x{nil found}} +|com(Remove all occurrences of `c' and `d' from \xx:) +\ltxkeys@removeelements|*[;]\xx{c;d}{\def\x{done}}{\def\x{nil found}} +\finish{example} -1. Reserved key names, reserved key prefixes, reserved key families. +\docsubsection(sec:replaceelements){Replace one or all occurrences of elements in a csv list} -\end{document}
\ No newline at end of file +\start{newmacro}[\ltxkeys@replaceelements] +\ltxkeys@replaceelements[|A(parser)]|(|A(nr)|)|A(listcmd){|A(sublist)}{|A(fd)}{|A(nf)} +\ltxkeys@replaceelements|*[|A(parser)]|(|A(nr)|)|A(listcmd){|A(sublist)}{|A(fd)}{|A(nf)} +\finish{newmacro} +\fxim*{\ltxkeys@replaceelements} + +The command \fx{\ltxkeys@replaceelements} replaces \ang{nr} number of each element of \ang{sublist} in \ang{listcmd}. The default values of the optional list \ang{parser} and the optional maximum number of elements to replace \ang{nr} are \qcomma and $1$, respectively. If at least one member of \ang{sublist} is found and replaced in \ang{listcmd}, then the callback \ang{fd} is returned and executed, otherwise \ang{nf} is returned. Both \ang{fd} and \ang{nf} provide some fallback following the execution of \fx{\ltxkeys@replaceelements}. The challenge to the user is to remember that the command \fx{\ltxkeys@replaceelements} requires these callbacks, which may both be empty. The \stform of \fx{\ltxkeys@replaceelements} will replace in \ang{listcmd} all the members of \ang{sublist} found irrespective of the value of \ang{nr}. The optional \ang{nr} is therefore redundant when the \stform of \fx{\ltxkeys@replaceelements} is used. Here, the syntax of \ang{sublist} is as follows: + +\start'{macro}[Sublist for \ltxkeys@replaceelements] +{{|A(old-1)}{|A(new-1)}|A(parser)...|A(parser){|A(old-n)}{|A(new-n)}} +\finish{macro} + +where \ang{old-i} is the element to be replaced and \ang{new-i} is its replacement. + +\start{example}[\ltxkeys@replaceelements] +\def\xx{a;b;c;d;d;e;f;c;d} +|com(Replace at most 2 occurrences of `c' and `d' in \xx with `s' and `t',) +|com(respectively:) +\ltxkeys@replaceelements[;]|(2|)\xx{c{s};d{t}}{\def\x{done}}{\def\x{nil found}} +|com(Replace all occurrences of `c' and `d' in \xx with `s' and `t':) +\ltxkeys@replaceelements|*[;]\xx{c{s};d{t}}{\def\x{done}}{\def\x{nil found}} +\finish{example} + + +\docsubsection(sec:stripbraces){Stripping outer braces} + +The list and key parsers of the \pkg'{ltxkeys} preserve outer braces. But sometimes it is needed to rid a token of one or more of its outer braces. This can be achieved by the following commands: + +\start+{newmacro}[\ltxkeys@stripouterbraces,\ltxstripouterbraces] +\ltxkeys@stripouterbraces|A(nr){|A(token)} +\ltxstripouterbraces|A(nr){|A(token)}|A(cmd) +\finish{newmacro} +\fxim*{\ltxkeys@stripouterbraces,\ltxstripouterbraces} + +The command \fx{\ltxkeys@stripouterbraces} strips \ang{nr} number of outer braces from \ang{token}. The command \fx{\ltxstripouterbraces} strips \ang{nr} number of outer braces from \ang{token} and returns the result in the macro \ang{cmd}. The command \fx{\ltxkeys@stripouterbraces} is expandable, but \fx{\ltxstripouterbraces} isn't expandable. Normally, \ang{token} shouldn't be expanded by these commands after the outer braces have been stripped off. + +\start+{example}[\ltxkeys@stripouterbraces,\ltxstripouterbraces] +\toks@\expandafter\expandafter\expandafter + {\ltxkeys@stripouterbraces{2}{{{\y}}}} +\edef\x{\unexpanded\expandafter\expandafter\expandafter + {\ltxkeys@stripouterbraces{\@m}{{{\y}}}}}% +\ltxstripouterbraces{2}{{{{\y}}}}\x +\finish{example} + +If it is required to strip all the outer braces off \ang{token}, then \ang{nr} can be made large, \eg, \hx{\@m}. + + +\docsection(sec:todo){To-do list} + +This section details additional package features that may become available in the foreseeable future. User views are being solicited in regard of the following proposals. + + +\docsubsection(sec:patchingkeymacros){Patching key macros} + +Patching the macro of an existing key, instead of redefining the key. \pkg'{etoolbox}'s \hx{\patchcmd} doesn't permit the patching of commands with nested parameters. But since key macros may have nested parameters, a new patching scheme is to be first explored. + + +\docsubsection(sec:changedependantkeys) + {Modifying the dependant keys of an existing style key} + +\start+{newmacro}[\ltxkeys@adddepkeys,etc] +\ltxkeys@adddepkeys[|A(pref)]{|A(fam)}{|A(paren)}{|A(deps)} +\ltxkeys@removedepkeys[pref]{fam}{|A(paren)}{|A(deps)} +\ltxkeys@replacedepkeys[pref]{fam}{|A(paren)}{|A(olddeps)}{|A(newdeps)} +\finish{newmacro} +\fxim*{\ltxkeys@adddepkeys,\ltxkeys@removedepkeys,\ltxkeys@replacedepkeys} + +Here, \ang{paren} is the parent key of dependants keys; \ang{deps} is the full specification of new or existing dependant keys (as in \sref{sec:stylekeys}), with their default values and callbacks; \ang{olddeps} are the old dependants to replace with \ang{newdeps}. This would require patching macros of the form \jpreffamkey{dependants}, which might have nested parametered-commands. + + +\docsubsection(sec:toggle+switchkeys){Toggle and switch keys} + +Introduce toggle keys and switch keys, but in practice who needs them? I would really need user views before implementing this feature. Toggles and switches, found in, \eg, the \pkg'{catoptions}, are more efficient than conventional booleans in the sense that each of them introduces and requires only one command, while each native boolean defines and requires up to three commands. However, toggles and switches haven't yet made it into the popular imagination of \tex users. + + +\docsection(sec:version-hist){Version history} + +The following change history highlights significant changes that affect user utilities and interfaces; changes of technical nature are not documented in this section. The \stsign on the right-hand side of the following lists means the subject features in the package but is not reflected anywhere in this user guide. + +\begin{versionhist} + \begin{version}{0.0.2}{2011/09/01} + \item \quoted{Pathkeys} introduced\vsecref{sec:pathkeys} + \item User guide completed.\vsecref* + \end{version} + \begin{version}{0.0.1}{2011/07/30} + \item First public release.\vsecref* + \end{version} +\end{versionhist} + +\newpage +\ltsindexpreamble{Index numbers refer to page numbers.} +\ltsindexpreambleformat{\centering} +\ltsindexcolumns\tw@ +\printindex + +\end{document} diff --git a/Master/texmf-dist/tex/latex/ltxkeys/ltxkeys.sty b/Master/texmf-dist/tex/latex/ltxkeys/ltxkeys.sty index a1ff1d3b98a..7b735cc143c 100644 --- a/Master/texmf-dist/tex/latex/ltxkeys/ltxkeys.sty +++ b/Master/texmf-dist/tex/latex/ltxkeys/ltxkeys.sty @@ -1,6 +1,6 @@ %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% % % -% This is file 'ltxkeys.sty', version 0.0.1, July 2011. % +% This is file 'ltxkeys.sty', version 0.0.2, October 2011. % % % % This package and accompanying files may be distributed and/or % % modified under the conditions of the LaTeX Project Public License, % @@ -20,87 +20,333 @@ % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% -\RequirePackage{catoptions}[2011/07/30] +\@ifpackageloaded{catoptions}{% + \@ifpackagelater{catoptions}{2011/10/22}{}{% + \@latex@error{Loaded version of catoptions package is + not current}\@ehc + }% +}{% + \RequirePackage{catoptions}[2011/10/22]% +} \UseNormalCatcodes -\StyleFilePurpose{Robust and fast key-value parser} +\StyleFilePurpose{A robust and fast key-value parser (AM)} \StyleFileRCSInfo -$Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ +$Id: ltxkeys.sty,v 0.0.2 2011/10/22 09:00:00 Ahmed Musa Exp $ \ProvidesPackage{ltxkeys}[\StyleFileInfo] -\NeedsTeXFormat{LaTeX2e}[1996/12/01] +\NeedsTeXFormat{LaTeX2e}[2005/12/01] \SetStyleFileMessages[ltxkeys@]{info}{warn}{err} +\catcode`\&=3 +\catcode`\^=3 +\cpt@setupsafeactivesedef +\new@def\ltxkeys@afterfi#1\ltxkeys@fi{\fi#1} +\new@def\ltxkeys@after@i#1\ltxkeys@else#2\ltxkeys@fi{\fi#1} +\new@def\ltxkeys@after@ii#1\ltxkeys@else#2\ltxkeys@fi{\fi#2} +\newletcs\ltxkeys@else\else +\newletcs\ltxkeys@fi\fi +\new@def*\ltxkeys@ehc{% + \ifx\protect\string\ltxkeys@afterfi + A serious error has been ecountered.\MsgBrk + Try typing <return>\space to proceed.\MsgBrk + If that fails, type X and then <return>\space to quit. + \ltxkeys@fi +} +\robust@def*\ltxkeys@specialhandler{% + \cpt@testopt\ltxkeys@sp@cialhandler{}% +} +\robust@def*\ltxkeys@sp@cialhandler[#1]#2{% + \begingroup + \toks1{\endgroup\newcsnpdef*{#1@#2@handler}##1##2}% + \def\reserved@a{\the\toks\expandafter1\expandafter{\the\toks0}}% + \afterassignment\reserved@a\toks0=% +} +\newletcs\ltxkeys@nil\relax +\new@def*\ltxkeys@nnil{\ltxkeys@nil} +\new@def*\ltxkeys@quark{\@gobble\ltxkeys@quark} +\new@def*\ltxkeys@cdr#1#2\ltxkeys@nil{#2} +\new@def*\ltxkeys@spcdr#1#2\ltxkeys@nil{\detokenize{#2}} +\new@def\ltxkeys@ifxTF#1#2{% + \ifx#1#2\ltxkeys@quark + \expandafter\iofii\else\expandafter\iiofii\fi +} +\new@def\ltxkeys@ifxFT#1#2{\ltxkeys@ifxTF{#1}{#2}\iiofii\iofii} +\new@def\ltxkeys@ifcseqTF#1#2{% + \expandafter\cptswap\cpt@car#1\ltxkeys@quark\car@nil + {\expandafter\ltxkeys@ifxTF\cpt@car#2\relax\car@nil}% +} +\new@def*\ltxkeys@ifcsemptyTF#1{% + \expandafter\ltxkeys@ifxTF\cpt@car#1\ltxkeys@quark\car@nil\@empty +} +\robust@def*\ltxkeys@letmanytocs#1#2{\cptfor#1\dofor{\let##1=#2}} \robust@def*\ltxkeys@error#1#2{\ltxkeys@err{#1}{#2}\@gobble} -\robust@def*\ltxkeys@vwarn#1{% - \ifltxkeys@verbose\wlog{[ltxkeys debug] -- #1.}\fi +\robust@def*\ltxkeys@debug#1#{% + \ifboolTF{ltxkeys@tracingkeys}{% + \ifstrcmpTF{#1}{*}{% + \cpt@sttrue\ltxkeys@d@bug + }{% + \cpt@stfalse\ltxkeys@d@bug + }% + }{% + \@gobbletwo + }% } -\robust@def*\ltxkeys@vinfo#1{% - \ifltxkeys@verbose\wlog{[ltxkeys debug] ++ #1.}\fi +\robust@def*\ltxkeys@d@bug#1#2{% + \wlog{\ifcpt@st^^J\fi ltxkeys debug [#1] #2.}% } -\newvariables{if}[ltxkeys@]{break,st,pl,sw,sv,nv,noval,pxop,exop,% - inpreset,kf,rm,ssk,dec,dep,twk,verbose,swa}[false] +\newvariables{if}[ltxkeys@]{break,st,pl,cl,sw,sv,nv,noval,pxop,exop, + preset,disable,ini,kf,rm,ssk,dec,dep,twk,tracingkeys,useempty,chdef, + swa,reservenopath,global,protected,inkeycmd}[false] \newvariables{if}{inputvalid}[false] -\robust@def*\SetSlaveWithMaster{\global\ltxkeys@ssktrue} -\robust@def*\SetNoSlaveWithMaster{\global\ltxkeys@sskfalse} -\SetNoSlaveWithMaster +\newvariables{switch}{infdpointers,infdp@inters}[false] \newvariables{count}[ltxkeys@]{csvdepth,keydepth}[\z@pt] -\newletcs\ltxkeys@nil\relax -\new@def*\ltxkeys@nnil{\ltxkeys@nil} -\ifdefTF\cpt@documentclass{}{% - \ltxkeys@err{No \string\documentclass}\@ehc - \emptifycsset{\cpt@documentclass,\cpt@classoptionslist}% +\robust@def*\setslavewithmaster{\global\ltxkeys@ssktrue} +\robust@def*\setnoslavewithmaster{\global\ltxkeys@sskfalse} +\setnoslavewithmaster +\robust@def*\allowemptykeypath{\global\ltxkeys@useemptytrue} +\robust@def*\disallowemptykeypath{\global\ltxkeys@useemptyfalse} +\DefSuffixChecker\ltxkeys@suffixcheck{*}{+}{!} +\let\ltxkeys@documentclass\cpt@undefined +\robust@def*\ltxkeys@getdocumentclass{% + \def\csv@do##1{% + \filename@parse{##1}% + \ifx\filename@ext\@clsextension + \ifcsndefFT{opt@\filename@area\filename@base.\filename@ext}{}{% + \xdef\ltxkeys@documentclass{% + \filename@area\filename@base.\filename@ext + }% + \loopbreak + }% + \fi + }% + \csv@@parse*\@filelist + \ifdefTF\ltxkeys@documentclass{}{% + \ltxkeys@debug{==}{'ltxkeys' package loaded before + \string\documentclass: \MsgBrk no problem}% + }% +} +\cptpassunexpanded{% + \ifdefFT\@filelist{}{% + \ltxkeys@ifxTF\@filelist\@gobble{}{% + \ltxkeys@ifcsemptyTF\@filelist{}\ltxkeys@getdocumentclass + }% + }% + \ifdefFT\ltxkeys@documentclass{% + \let\ltxkeys@classoptionslist\@empty + }{% + \ifdefFT\@classoptionslist{}{% + \ltxkeys@ifcsemptyTF\@classoptionslist{}{% + \kv@@normalize*\@classoptionslist + }% + }% + \let\ltxkeys@classoptionslist\@classoptionslist + \def\csv@do##1{% + \ifinsetTF{=}{##1}{}{% + \cptgaddtolist\@classoptionslist{##1}% + }% + }% + \cptexpandbracenext + {\def\@classoptionslist{}\csv@@loop}\@classoptionslist + \def\@fileswith@ptions##1[##2]##3{% + \edef\ltxkeys@tempa{\cptcommanormalize{##3}}% + \cptfor xkeyval,kvoptions,catoptions\dofor{% + \xifinsetFT{,####1,}{,\ltxkeys@tempa,}{}{% + \let\@classoptionslist\ltxkeys@classoptionslist + \forbreaktrue + }% + }% + \cpt@ifbrack{\@fileswith@pti@ns##1[##2]##3}% + {\@fileswith@pti@ns##1[##2]##3[]}% + }% + }% +} +\robust@def*\ltxkeys@testst#1{% + \cpt@ifstar{\ltxkeys@sttrue#1}{\ltxkeys@stfalse#1}% +} +\robust@def*\ltxkeys@testpl#1{% + \cpt@ifplus{\ltxkeys@pltrue#1}{\ltxkeys@plfalse#1}% +} +\robust@def*\ltxkeys@testcl#1{% + \cpt@ifclam{\ltxkeys@cltrue#1}{\ltxkeys@clfalse#1}% } -\robust@def*\ltxkeys@testst#1{\cpt@ifstar{\ltxkeys@sttrue#1}{\ltxkeys@stfalse#1}} -\robust@def*\ltxkeys@testpl#1{\cpt@ifplus{\ltxkeys@pltrue#1}{\ltxkeys@plfalse#1}} \robust@def*\ltxkeys@teststpl#1{\ltxkeys@testst{\ltxkeys@testpl{#1}}} \robust@def*\ltxkeys@state{% - \ltxkeys@keys,\ltxkeys@prefs,\ltxkeys@fams,\ltxkeys@nakeys,\ltxkeys@tpref,% - \ltxkeys@ttpref,\ltxkeys@tfam,\ltxkeys@tkey,\ltxkeys@tval,\ifltxkeys@st,% - \ifltxkeys@pl,\ifltxkeys@kf,\ifltxkeys@pxop,\ifltxkeys@exop,\CurrentKeyval,% - \CurrentKey,\CurrentVal -} -\robust@def*\ltxkeys@trimspaces{\begingroup\ltxkeys@tr@mspaces} -\robust@def*\ltxkeys@trimspacesincs#1{\s@expandarg\ltxkeys@trimspaces{#1}#1} -\defpass\reserved@a#1{% - \long\def\ltxkeys@tr@mspaces##1##2{% - \edef\reserved@a{% - \expandcsonce{\romannumeral-`\q - \ltxkeys@trimspace.##1\trimsp@nil#1\trimsp@nil}% - }% - \ifxTF##2\reserved@a{% - \cptpassacross##2\endgroup - }{% - \let##2=\reserved@a - \expandafter\ltxkeys@tr@mspaces\expandafter{##2}##2% + \ltxkeys@keys,\ltxkeys@prefs,\ltxkeys@fams,\ltxkeys@nakeys, + \ltxkeys@tpref,\ltxkeys@ttpref,\ltxkeys@tfam,\ltxkeys@tkey, + \ltxkeys@tval,\ifltxkeys@st,\ifltxkeys@pl,\ifltxkeys@cl, + \ifltxkeys@kf,\ifltxkeys@pxop,\ifltxkeys@exop,\ifltxkeys@ini, + \CurrentKeyval,\CurrentKey,\CurrentVal +} +\robust@def\ltxkeys@trimspacesincs#1{% + \expandafter\ltxkeys@trimspaces\expandafter{#1}{#1}% +} +\robust@def\ltxkeys@trimspaces#1#2{% + \begingroup + \ifcase\if.\ltxkeys@spcdr#2.0\ltxkeys@nil\else1\fi + \if\expandafter\cpt@car\string#2\car@nil + \@backslashchar0\else1\fi\relax\else + \ltxkeys@err{'\detokenize{#2}' has illegal form}\ltxkeys@ehc + \fi + \ltxkeys@tr@mspaces{#1}{#2}% +} +\long\def\ltxkeys@tr@mspaces#1#2{% + \edef\trimmed{% + \expandcsonce{\romannumeral-`\q\ltxkeys@trimspace.#1& &}% + }% + \ltxkeys@ifxTF#2\trimmed{% + \expandafter\endgroup\expandafter\edef\expandafter + #2\expandafter{\expandafter\unexpanded\expandafter{#2}}% + }{% + \let#2=\trimmed + \expandafter\ltxkeys@tr@mspaces\expandafter{#2}#2% + }% +} +\long\def\ltxkeys@trimspace#1 &{\ltxkeys@tr@mspace#1&} +\long\def\ltxkeys@tr@mspace#1{\expandafter\noexpand\@gobble#1} +\robust@def*\ltxkeys@trimspacesset#1{% + \def\@do##1##2,{% + \ifnot@nil{##1}{\ltxkeys@trimspaces{##1}##2\@do}% + }% + \@do#1,\@nil\@nil,% +} +\new@def*\ltxkeys@iffirstnull#1#2{\ltxkeys@ifcsemptyTF#1{}{#1#2}} +\robust@def*\ltxkeys@splitkeyattrib#1{% + \begingroup + \def\ltxkeys@splita##1/##2/{% + \ltxkeys@trimspacesset{{##1}\key@type,{##2}\key@name}% + \ltxkeys@ifrejname{% + \ltxkeys@err{Wrong syntax for attributes of a key} + \ltxkeys@ehc }% + \ltxkeys@splitb.% }% - \long\def\ltxkeys@trimspace##1#1\trimsp@nil{% - \ltxkeys@tr@mspace##1\trimsp@nil + \def\ltxkeys@splitb##1/{% + \s@expandarg\ltxkeys@trimspaces{\@gobble##1}\key@default + \ltxkeys@splitc.% + }% + \def\ltxkeys@splitc##1/{% + \edef\key@macro{\unexpanded\expandafter{\@gobble##1}}% + \ltxkeys@stripdotcode\key@macro + \ltxkeys@splitd.% }% - \long\def\ltxkeys@tr@mspace##1\trimsp@nil##2{% - \expandafter\noexpand\@gobble##1% + \def\ltxkeys@splitd##1/##2\ltxkeys@nil{% + \s@expandarg\ltxkeys@trimspaces{\@gobble##1}\key@dependants }% -}{ } -\robust@def*\ltxkeys@oneoftwo#1\endgroup{% + \ltxkeys@splita#1/^?/^?/^?/^?/^?/\ltxkeys@nil + \let\do\cpt@csexit + \cptexpanded{\endgroup + \do\key@type\do\key@name\do\key@default\do\key@macro + \do\key@dependants + }% +} +\new@def*\ltxkeys@rej{^?} +\robust@def*\ltxkeys@stripdotcode#1{% + \ltxkeys@trimspacesincs#1% + \xifinsetTF{\relax\detokenize{.code=}}{\relax\cptoxdetok{#1}}{% + \def\reserved@a##1.code=##2\ltxkeys@nil{% + \def\reserved@a####1.\ltxkeys@nil{% + \s@expandarg\ltxkeys@trimspaces{\@gobble####1}#1% + }% + \reserved@a.##2\ltxkeys@nil + }% + \expandafter\reserved@a#1.\ltxkeys@nil + }{}% +} +\robust@def*\ltxkeys@removedotcode#1#2{% + \ltxkeys@trimspaces{#1}#2% + \xifinsetTF{\detokenize{/.code=}}{\detokenize{#1}}{% + \def\reserved@a##1/.code=##2\ltxkeys@nil{% + \def\reserved@a####1.\ltxkeys@nil{% + \s@expandarg\ltxkeys@trimspaces{\@gobble####1}\reserved@a + \edef#2{\expandcsonce{\@gobble##1}/\expandcsonce\reserved@a}% + }% + \reserved@a.##2\ltxkeys@nil + }% + \expandafter\reserved@a\expandafter.#2.\ltxkeys@nil + }{}% +} +\robust@def*\ltxkeys@in{\cpt@testst\ltxkeys@in@a} +\robust@def*\ltxkeys@in@a#1#2{% + \def\in@@##1#1##2\in@@{% + \ifblankTF{##2}\in@false\in@true + \ifboolTF{cpt@st}{\ifboolTF{in@}}{}% + }% + \in@@#2{\in@@}#1\in@@ +} +\robust@def*\ltxkeys@iffound#1\in#2\then{% + \ltxkeys@trimspaces{#1}\reserved@a + \ltxkeys@trimspaces{#2}\reserved@b + \ltxkeys@stfalse + \cptexpandargonce\ltxkeys@in@a\reserved@a\reserved@b + \ifin@ +} +\robust@def*\ltxkeys@ifchcfd#1\endgroup{% \let\@firstoftwo\relax \let\@secondoftwo\relax \cptpassexpanded{% \endgroup \ifcase#1\relax - \if@boolTF{cpt@choicefd}\@firstoftwo\@secondoftwo + \ifboolTF{cpt@choicefd}\@firstoftwo\@secondoftwo \or - \if@boolTF{cpt@choicefd}\@secondoftwo\@firstoftwo + \ifboolTF{cpt@choicefd}\@secondoftwo\@firstoftwo \else - \ltxkeys@err{Invalid number '#1'}\noexpand\@ehc + \ltxkeys@err{Invalid number '#1'}\ltxkeys@ehc \fi }% } -\robust@def*\ltxkeys@getorder#1#2{% - \def\ltxkeys@order{-1}% +\robust@def*\ltxkeys@getlasttoken#1{% + \def\ltxkeys@resttokens{}% + \ltxkeys@g@tlasttoken#1\ltxkeys@g@tlasttoken + \ltxkeys@g@tlasttoken\ltxkeys@getlasttoken +} +\robust@def*\ltxkeys@g@tlasttoken#1#2{% + \ifx#2\ltxkeys@g@tlasttoken + \edef\ltxkeys@lasttoken{\unexpanded{#1}}% + \def\reserved@a##1\ltxkeys@getlasttoken{}% + \expandafter\reserved@a + \else + \edef\ltxkeys@resttokens + {\expandcsonce\ltxkeys@resttokens\unexpanded{#1}}% + \expandafter\ltxkeys@g@tlasttoken + \fi + #2% +} +\new@def\ltxkeys@stripouterbraces#1#2{% + \romannumeral\expandafter\ltxkeys@str@pouterbraces + \expandafter{\romannumeral\number#1000m}{#2}% +} +\new@def\ltxkeys@str@pouterbraces#1#2{% + \ifbracedTF{#2}{% + \expandafter\ifnullTF\expandafter{\@gobble#2}{% + \expandafter\ifnullTF\expandafter{\@gobble#1}{0 #2}{% + \s@expandarg\ltxkeys@str@pouterbraces{\@gobble#1}#2% + }% + }{0 #2}% + }{0 #2}% +} +\robust@def\ltxstripouterbraces#1#2#3{% + \edef#3{\unexpanded\cptthreexp{\ltxkeys@stripouterbraces{#1}{#2}}}% +} +\robust@def*\ltxkeys@getbasechars{\cpt@teststopt\ltxkeys@g@tchars{1}} +\robust@def*\ltxkeys@g@tchars[#1]#2#3{% \begingroup - \lowercase{\ltxkeys@trimspaces{#1}\ltxkeys@tempa}% + \def#3{}\gdef\ltxkeys@charcount{0}% + \def\siso@do##1{% + \edef#3{#3##1}% + \xdef\ltxkeys@charcount{\the\numexpr\ltxkeys@charcount+1}% + \ifnum\ltxkeys@charcount>#1\relax\loopbreak\fi + }% + \cptexpandarg\siso@@loop + {\ifboolTF{cpt@st}\cptoxdetok\detokenize{#2}}% + \postgroupdef#3\endgroup +} +\robust@def*\ltxkeys@getorder{\cpt@teststopt\ltxkeys@g@torder,} +\robust@def*\ltxkeys@g@torder[#1]#2#3{% + \def\ltxkeys@order{-1}% + \begintoksgroup + \cpt@stchoose{cpt@st}{#3}\ltxkeys@tempa\ltxkeys@getorder + \lowercase{\ltxkeys@trimspaces{#2}\ltxkeys@tempb}% \@tempcnta\z@pt - \toks@{}% \def\ltxkeys@do##1{% - \oifstrcmpFT\ltxkeys@tempa{##1}{}{% + \oifstrcmpFT\ltxkeys@tempb{##1}{}{% \cptexpanded{% \toks@{\def\noexpand\ltxkeys@order{\the\@tempcnta}}% }% @@ -108,55 +354,202 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% \advance\@tempcnta\@ne }% - \ltxkeys@csvparse{#2}% - \expandafter\endgroup\the\toks@ + \ltxkeys@parse*1[;]\ltxkeys@tempa + \endtoksgroup +} +\robust@def*\ltxkeys@ifeltcountTF{\cpt@teststopt\ltxkeys@ifeltcount,} +\robust@def*\ltxkeys@ifeltcount[#1]{% + \cpt@testpnopt{\ltxkeys@ifeltc@unt{#1}}{=}% } -\robust@def*\ltxkeys@ifeltcountTF{\cpt@testopt\ltxkeys@ifeltcount{=}} -\robust@def*\ltxkeys@ifeltcount[#1]#2#3{% +\robust@def*\ltxkeys@ifeltc@unt#1(#2)#3#4{% \begingroup - \@tempcnta\z@pt + \edef\reserved@a{\ifcpt@st*\fi}% + \def\eltnum{0}% \def\ltxkeys@do##1{% - \advance\@tempcnta by1 + \pushnumber\eltnum }% - \ltxkeys@csvloop{#2}% - \aftercsname\endgroup{@\ifnum\@tempcnta#1\numexpr#3% + \expandafter\ltxkeys@parse\reserved@a1[#1]{#4}% + \aftercsname\endgroup{@\ifnum\eltnum#2\numexpr#3% first\else second\fi oftwo}% } -\robust@def*\ltxkeys@nomatcherr{% - \ltxkeys@error{User input '\reserved@e' not in list: - \MsgBrk '\reserved@f'}\@ehc +\robust@def*\ltxkeys@findmatch#1#2#3{% + \def\currmatch{}% + \ltxkeys@trimspaces{#1}\reserved@a + \ltxkeys@f@ndmatch#2,:,\ltxkeys@nil{#3}% +} +\robust@def*\ltxkeys@f@ndmatch#1:#2,#3\ltxkeys@nil#4{% + \ifblankTF{#3}{% + #4% + }{% + \ltxkeys@trimspaces{#1}\reserved@b + \ifx\reserved@a\reserved@b + \edef\currmatch{\unexpanded{#2}}% + \expandafter\@gobble + \else + \expandafter\@iden + \fi + {\ltxkeys@f@ndmatch#3\ltxkeys@nil{#4}}% + }% +} +\robust@def*\ltxkeys@ifcase#1#2{% + \def\currmatch{}% + \ltxkeys@trimspaces{#1}\reserved@a + \ltxkeys@ifc@se#2,:,\ltxkeys@nil +} +\robust@def*\ltxkeys@ifc@se#1:#2,#3\ltxkeys@nil{% + \ifblankTF{#3}{% + \@secondoftwo + }{% + \ltxkeys@trimspaces{#1}\reserved@b + \ltxkeys@ifxTF\reserved@a\reserved@b{% + \edef\currmatch{\unexpanded{#2}}% + \@firstoftwo + }{% + \ltxkeys@ifc@se#3\ltxkeys@nil + }% + }% +} +\robust@def*\ltxkeys@removeelements{\cpt@teststopt\ltxkeys@rem@veelements,} +\robust@def*\ltxkeys@rem@veelements[#1]{% + \cpt@testpnopt{\ltxkeys@rem@veelem@nts{#1}}\@ne +} +\robust@def\ltxkeys@rem@veelem@nts#1(#2)#3#4{% + \let\ltxkeys@tempa#3% + \ifcpt@st\else + \ifnum#2=\z@pt\cptthreexp\cpt@gobbletorelax\fi + \fi + \iflacus#4\dolacus + \expandafter\cpt@gobbletorelax + \fi + \begingroup + \let\detk\detokenize + \let\if@remvst\ifcpt@st + \ifmacroTF{#3}{}{\cpt@notcserr{#3}}% + \csv@@normalize*[#1]#3% + \def\ltxkeys@remove@a##1{% + \def\ltxkeys@do####1{% + \@tempcnta\z@pt + \def\ltxkeys@remove@a########1##1####1##1########2&{% + \edef#3{\unexpanded{########1##1########2}}% + }% + \def\ltxkeys@remove@b########1{% + \xifinsetTF{##1\detk{####1}##1}{##1\detk{########1}##1}{% + \ltxkeys@remove@a##1########1##1&% + \ifboolTF{@remvst}{% + \s@expandarg\ltxkeys@remove@b#3% + }{% + \advance\@tempcnta\@ne + \ifnumcmpTF\@tempcnta<#2{% + \s@expandarg\ltxkeys@remove@b#3% + }{}% + }% + }{}% + }% + \s@expandarg\ltxkeys@remove@b#3% + }% + \ltxkeys@parse1[##1]{#4}% + \csv@@normalize*[##1]#3% + }% + \s@expandarg\ltxkeys@remove@a{\detk{#1}}% + \postgroupdef#3\endgroup + \cpt@relax + \ltxkeys@ifxFT#3\ltxkeys@tempa +} +\robust@def*\ltxkeys@replaceelements{% + \cpt@teststopt\ltxkeys@r@placeelements,% +} +\robust@def*\ltxkeys@r@placeelements[#1]{% + \cpt@testpnopt{\ltxkeys@r@pl@ceelements{#1}}\@ne +} +\robust@def\ltxkeys@r@pl@ceelements#1(#2)#3#4{% + \let\ltxkeys@tempa#3% + \ifcpt@st\else + \ifnum#2=\z@pt\cptthreexp\cpt@gobbletorelax\fi + \fi + \iflacus#4\dolacus + \expandafter\cpt@gobbletorelax + \fi + \begingroup + \let\if@replst\ifcpt@st + \ifmacroTF{#3}{}{\cpt@notcserr{#3}}% + \edef\ltxkeys@sublist{\unexpanded{#4}}% + \ltxkeys@n@rmalizecsset[#1]{#3,\ltxkeys@sublist}% + \def\ltxkeys@replace@a##1{% + \def\ltxkeys@replace@a####1####2##1####3&{% + \ltxkeys@r@pl@ceelement[##1](#2)#3{####1}{####2}% + \ifblankTF{####3}{}{\ltxkeys@replace@a####3&}% + }% + \expandafter\ltxkeys@replace@a\ltxkeys@sublist##1&% + \csv@@normalize*[##1]#3% + }% + \s@expandarg\ltxkeys@replace@a{\detokenize{#1}}% + \postgroupdef#3\endgroup + \cpt@relax + \ltxkeys@ifxFT#3\ltxkeys@tempa +} +\robust@def\ltxkeys@r@pl@ceelement[#1](#2)#3#4#5{% + \begingroup + \@tempcnta\z@pt + \def\ltxkeys@replace@a##1#1#4#1##2&{% + \edef#3{\unexpanded{##1#1#5#1##2}}% + }% + \def\ltxkeys@replace@b##1{% + \xifinsetTF{#1\detokenize{#4}#1}{#1\detokenize{##1}#1}{% + \ltxkeys@replace@a#1##1#1&% + \ifboolTF{@replst}{% + \s@expandarg\ltxkeys@replace@b#3% + }{% + \advance\@tempcnta\@ne + \ifnumcmpTF\@tempcnta<#2{% + \s@expandarg\ltxkeys@remove@b#3% + }{}% + }% + }{}% + }% + \s@expandarg\ltxkeys@replace@b{#3}% + \postgroupdef#3\endgroup } \robust@def*\ltxkeys@checkchoice{% \cpt@teststpl{\cpt@testopt\ltxkeys@cc@a,}% } \robust@def*\ltxkeys@cc@a[#1]{% - \ifcpt@check\cpt@checklistparser{#1}{}\fi - \cpt@testopt{\ltxkeys@cc@b#1}{}% + \cpt@checklistparser{#1}{}% + \cpt@testpnopt{\ltxkeys@cc@b#1}{}% } \robust@def*\ltxkeys@commacheckchoice{% - \cpt@teststpl{\cpt@testopt{\ltxkeys@cc@b,}{}}% + \cpt@teststpl{\cpt@testpnopt{\ltxkeys@cc@b,}{}}% } -\robust@def*\CheckInput#1#2{% +\robust@def*\ltxkeys@checkinput#1#2{% \lowercase{\edef\nominations{\unexpanded{#2}}}% \cpt@sttrue\cpt@pltrue - \ltxkeys@cc@b,[\userinput\nr]{#1}{#2}{% + \ltxkeys@cc@b,(\userinput\order){#1}{#2}{% + \@firstoftwo + }{% + \@secondoftwo + }% +} +\robust@def*\CheckUserInput#1#2{% + \lowercase{\edef\nominations{\unexpanded{#2}}}% + \cpt@sttrue\cpt@pltrue + \ltxkeys@cc@b,(\userinput\order){#1}{#2}{% \inputvalidtrue }{% \inputvalidfalse }% } -\robust@def*\ltxkeys@cc@b#1[#2]#3#4{% +\robust@def*\ltxkeys@cc@b#1(#2)#3#4{% \begingroup \ifcpt@st\lowercase{\fi - \ltxkeys@trimspaces{#3}\us@rinput - \edef\nomin@tions{\unexpanded{#4}}% + \ltxkeys@trimspaces{#3}\ltxkeys@userinput + \edef\ltxkeys@nominations{\unexpanded{#4}}% \ifcpt@st}\fi \def\ltxkeys@ccparser{#1}% - \cpt@sttrue\cpt@csvnormalize[#1]\nomin@tions + \csv@@normalize*[#1]\ltxkeys@nominations \cptexpandsecond{% \ifblankTF{#2}\ltxkeys@cc@d{\ltxkeys@cc@c#2}\ltxkeys@nil }{% - {\expandcsonce\us@rinput}{\expandcsonce\nomin@tions}% + {\expandcsonce\ltxkeys@userinput}% + {\expandcsonce\ltxkeys@nominations}% }% } \robust@def*\ltxkeys@cc@c#1#2\ltxkeys@nil#3#4{% @@ -164,7 +557,7 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ } \robust@def*\ltxkeys@cc@d#1#2#3{% \def\reserved@a{#1}% - \ifxTF\reserved@a\ltxkeys@nnil{% + \ltxkeys@ifxTF\reserved@a\ltxkeys@nnil{% \def\ltxkeys@tempa{}% }{% \def\ltxkeys@tempa{\def#1{#2}}% @@ -172,13 +565,13 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \edef\x{\cptoxdetok\ltxkeys@ccparser}% \edef\x{{\x\detokenize{#2}\x}{\x\detokenize{#3}\x}}% \expandafter\ifinsetTF\x{% - \if@boolTF{cpt@pl}{% + \ifboolTF{cpt@pl}{% \rightaddtocs\ltxkeys@tempa\@firstoftwo }{% \rightaddtocs\ltxkeys@tempa\@firstofone }% }{% - \if@boolTF{cpt@pl}{% + \ifboolTF{cpt@pl}{% \rightaddtocs\ltxkeys@tempa\@secondoftwo }{% \rightaddtocs\ltxkeys@tempa{% @@ -188,15 +581,15 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% \cptpassexpanded{% \endgroup - \def\noexpand\reserved@e{\expandcsonce\us@rinput}% - \def\noexpand\reserved@f{\expandcsonce\nomin@tions}% + \cpt@csexit\ltxkeys@userinput + \cpt@csexit\ltxkeys@nominations \expandcsonce\ltxkeys@tempa }% } \robust@def*\ltxkeys@cc@e#1#2#3#4{% \chardef#2\z@pt \cpt@choicefdfalse - \def\csv@do##1{% + \def\ltxkeys@do##1{% \def#1{##1}% \ifstrcmpTF{##1}{#3}{% \cpt@choicefdtrue\loopbreak @@ -204,9 +597,11 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \pushnumber#2% }% }% - \expandafter\csv@@loop\expandafter[\ltxkeys@ccparser]{#4}% + \cptexpandsecond{\ltxkeys@parse0}{[\ltxkeys@ccparser]}{#4}% \cptpassexpanded{% \endgroup + \cpt@csexit\ltxkeys@userinput + \cpt@csexit\ltxkeys@nominations \ifcpt@choicefd \def\noexpand#1{\expandcsonce#1}% \def\noexpand#2{\the\numexpr#2}% @@ -217,13 +612,15 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ifcpt@pl \noexpand\@secondoftwo \else - \def\noexpand\reserved@e{\expandcsonce\us@rinput}% - \def\noexpand\reserved@f{\expandcsonce\nomin@tions}% \unexpanded{\expandafter\ltxkeys@nomatcherr\@gobble}% \fi \fi }% } +\robust@def*\ltxkeys@nomatcherr{% + \ltxkeys@error{User input '\ltxkeys@userinput' not in list + of nominations ||\ltxkeys@nominations||}\ltxkeys@ehc +} \robust@def*\ltxkeys@ifincsvlistTF{\cpt@teststopt\ltxkeys@ifincsvlist,} \robust@def*\ltxkeys@ifincsvlist[#1]{% \cpt@testpnopt{\ltxkeys@if@ncsvlist#1}{1}% @@ -236,21 +633,23 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \edef\ltxkeys@tempb{\unexpanded{#4}}% \ifcpt@st}\fi \cpt@sttrue\cpt@csvnormalize[#1]\ltxkeys@tempb - \cpt@cnta\z@pt\def\ltxkeys@itemspresent{}% - \def\csv@do##1{% + \cpt@cnta\z@pt + \def\ltxkeys@itemspresent{}% + \def\ltxkeys@do##1{% \xifinsetFT{\detokenize{#1##1#1}} {\parser\cptoxdetok\ltxkeys@tempb\parser}{}{% \edef\ltxkeys@itemspresent - {\cptliststack,\ltxkeys@itemspresent\unexpanded{##1}}% + {\csliststack,\ltxkeys@itemspresent\unexpanded{##1}}% \advance\cpt@cnta\@ne }% \ifnum\cpt@cnta>\numexpr#2-1\relax\loopbreak\fi }% - \csv@@parse*[#1]\ltxkeys@tempa + \ltxkeys@parse*1[#1]\ltxkeys@tempa \ifnum\cpt@cnta>\numexpr#2-1\relax \edef\ltxkeys@nritems{\the\cpt@cnta}% \else - \def\ltxkeys@itemspresent{}\def\ltxkeys@nritems{-1}% + \def\ltxkeys@itemspresent{}% + \def\ltxkeys@nritems{-1}% \fi \cptexpandsecond\endgroup{% \cpt@csexit\ltxkeys@itemspresent @@ -268,11 +667,12 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \edef\ltxkeys@tempa{\unexpanded{#2}}% \edef\ltxkeys@tempb{\unexpanded{#3}}% \ifcpt@st}\fi - \def\ltxkeys@itemspresent{}\cpt@cnta\z@pt + \def\ltxkeys@itemspresent{}% + \cpt@cnta\z@pt \def\tsv@do##1{% \xifinsetFT{\detokenize{##1}}{\cptoxdetok\ltxkeys@tempb}{}{% \edef\ltxkeys@itemspresent - {\cptliststack{}\ltxkeys@itemspresent\unexpanded{##1}}% + {\csliststack{}\ltxkeys@itemspresent\unexpanded{##1}}% \advance\cpt@cnta\@ne }% \ifnum\cpt@cnta>\numexpr#1-1\relax\loopbreak\fi @@ -281,7 +681,8 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ifnum\cpt@cnta>\numexpr#1-1\relax \edef\ltxkeys@nritems{\the\cpt@cnta}% \else - \def\ltxkeys@itemspresent{}\def\ltxkeys@nritems{-1}% + \def\ltxkeys@itemspresent{}% + \def\ltxkeys@nritems{-1}% \fi \cptexpandsecond\endgroup{% \cpt@csexit\ltxkeys@itemspresent @@ -299,15 +700,17 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \edef\ltxkeys@tempa{\unexpanded{#2}}% \edef\ltxkeys@tempb{\unexpanded{#3}}% \ifcpt@st}\fi - \def\ltxkeys@itemspresent{}\cpt@cnta\z@pt - \s@expandarg\docommalist\ltxkeys@tempa{% - \xifinsetFT{\detokenize{##1}}{\cptoxdetok\ltxkeys@tempb}{}{% + \def\ltxkeys@itemspresent{}% + \cpt@cnta\z@pt + \def\ltxkeys@do##1{% + \xifinsetTF{\detokenize{##1}}{\cptoxdetok\ltxkeys@tempb}{% \edef\ltxkeys@itemspresent - {\cptliststack,\ltxkeys@itemspresent\unexpanded{##1}}% + {\csliststack,\ltxkeys@itemspresent\unexpanded{##1}}% \advance\cpt@cnta\@ne - }% + }{}% \ifnum\cpt@cnta>\numexpr#1-1\relax\loopbreak\fi }% + \ltxkeys@parse*1\ltxkeys@tempa \ifnum\cpt@cnta>\numexpr#1-1\relax \edef\ltxkeys@nritems{\the\cpt@cnta}% \else @@ -316,73 +719,213 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \cptexpandsecond\endgroup{% \cpt@csexit\ltxkeys@itemspresent \cpt@csexit\ltxkeys@nritems - \ifcsemptyTF\ltxkeys@itemspresent{\noexpand\@secondoftwo} - {\noexpand\@firstoftwo}% + \ltxkeys@ifcsemptyTF\ltxkeys@itemspresent + {\noexpand\@secondoftwo}{\noexpand\@firstoftwo}% }% } \robust@def*\ltxkeys@notinpkgclserr#1{% \ifinstylefileTF{}{% - \ltxkeys@err{Command '\detokenize{#1}' issued outside - style file}{The command '\detokenize{#1}' is available + \ltxkeys@err{Command '\detokenize{#1}' issued + \MsgBrk outside style or class file} + {Command '\detokenize{#1}' is available only in style files.}% }% } -\robust@def*\ltxkeys@csvloop{% - \let\ltxkeys@nlz\cptfalse - \let\ltxkeys@inkv\cptfalse - \cpt@testst\ltxkeys@parse@a +\robust@def*\ltxkeys@commanormalize#1#2{% + \edef#2{\cptcommanormalize{#1}}% } -\robust@def*\ltxkeys@csvparse{% - \let\ltxkeys@nlz\cpttrue - \let\ltxkeys@inkv\cptfalse - \cpt@testst\ltxkeys@parse@a +\robust@def*\ltxkeys@commanormalizeset{% + \let\normelt\ltxkeys@commanormalize + \ltxkeys@normalizeset } -\robust@def*\ltxkeys@kvloop{% - \let\ltxkeys@nlz\cptfalse - \let\ltxkeys@inkv\cpttrue - \cpt@testst\ltxkeys@parse@a +\robust@def*\ltxkeys@kvnormalize#1#2{% + \edef#2{\unexpanded{#1}}% + \kv@@normalize*[,]#2% } -\robust@def*\ltxkeys@kvparse{% - \let\ltxkeys@nlz\cpttrue - \let\ltxkeys@inkv\cpttrue - \cpt@testst\ltxkeys@parse@a +\robust@def*\ltxkeys@kvnormalizeset{% + \let\normelt\ltxkeys@kvnormalize + \ltxkeys@normalizeset +} +\robust@def*\ltxkeys@normalizeset#1{% + \edef\reserved@a{\cptcommanormalize{#1}}% + \def\@do##1##2,{% + \ifnot@nil{##1}{\normelt{##1}##2\@do}% + }% + \expandafter\@do\reserved@a,\@nil,% + \undefcs\normelt +} +\robust@def*\ltxkeys@normalizecsset{% + \cpt@testopt\ltxkeys@n@rmalizecsset,% +} +\robust@def*\ltxkeys@n@rmalizecsset[#1]#2{% + \cptfor#2\dofor{\csv@@normalize[#1]##1}% +} +\new@def*\ltxkeys@parser@nil{\@gobble\ltxkeys@parser@nil} + +\begingroup +\catcode`\?=3 +\robust@gdef*\ltxkeys@declarelistparser#1#2{% + \ifcsdefinable{#1}\relax + \begingroup + \ltxkeys@letmanytocs{#1,\ifstrcmpTF,\cptexpandnext, + \ltxkeys@ifcseqTF,\listbreak,\ltxkeys@parser@nil}\relax + \def\elta##1{\noexpandcsn{\cptgobblescape#1@list@##1}}% + \def\eltb##1{\cptexpandnext{\elta{b}##1}{########1}% + #2\ltxkeys@parser@nil#2?{}}% + \def\eltc{\ltxkeys@ifcseqTF!\unexpanded{{####1}{####4}% + {\unexpanded{####4}}}}% + \cptexpanded{\endgroup + \def#1####1{% + \ifstrcmpTF!{####1}{\elta{a}}{\eltb+}% + }% + \def\elta{a}####1{\eltb!}% + \def\elta{b}####1####2#2####3?####4####5{% + \ltxkeys@ifcseqTF\ltxkeys@parser@nil{####2}{\eltc}{% + \ifstrcmpTF{####2}{\listbreak}{\eltc}{% + \elta{b}{####1}####3?{####4####5{####2}}{####5}% + }% + }% + }% + }% } +\endgroup + +\robust@def*\ltxkeys@parse{\cpt@testst\ltxkeys@parse@a} \robust@def*\ltxkeys@parse@a#1{% - \cpt@stchoose{cpt@st}{#1}\ltxkeys@arg\ltxkeys@parse@a - \pushfunctions\ltxkeys@parse - {\ifloopbreak,\ltxkeys@doo}\ltxkeys@csvdepth + \begingroup + \def\reserved@a##1##2{\endgroup + \def\ltxkeys@nlz{##1}\def\ltxkeys@inkv{##2}% + }% + \cptexpandsecond\reserved@a{% + \ifcase#1{01}{01}\or{00}{01}\or{01}{00}\or{00}{00}\else{01}{01}\fi + }% + \cpt@testopt\ltxkeys@parse@b,% +} +\robust@def*\ltxkeys@parse@b[#1]#2{% + \cpt@stchoose{cpt@st}{#2}\ltxkeys@arg\ltxkeys@parse + \pushfunctions\ltxkeys@parse{\ifloopbreak,\ifltxkeys@useempty,% + \ltxkeys@doo,\ltxkeys@parse@c,\ltxkeys@parse@d,% + \ltxkeys@loopcbk}\cpt@csvdepth \ifdefTF\ltxkeys@do {\let\ltxkeys@doo\ltxkeys@do}{\cpt@notdeferr\ltxkeys@do}% - \def\ltxkeys@parse@b{% - \if@boolTF{loopbreak}{% - \gobble@to@sentinel\ltxkeys@nil,% - }{% - \ltxkeys@parse@c.% + \def\ltxkeys@parse@c{% + \ifboolTF{loopbreak} + {\gobble@to@sentinel\ltxkeys@nil#1}{\ltxkeys@parse@d.}% + }% + \def\ltxkeys@parse@d##1#1{% + \edef\ltxkeys@arg{\expandcsonce{\@gobble##1}}% + \ltxkeys@ifxTF\ltxkeys@arg\ltxkeys@nnil{}{% + \ltxkeys@ifcsemptyTF\ltxkeys@arg{% + \ifboolFT{ltxkeys@useempty}{}{\ltxkeys@doo{}}% + }{% + \s@expandarg\ltxkeys@doo\ltxkeys@arg + }% + \relax\ltxkeys@parse@c }% }% \ifswitchTF{ltxkeys@nlz}{% - \cpt@sttrue - \usename{cpt@\if\ltxkeys@inkv kv\else - csv\fi normalize}[,]\ltxkeys@arg + \usename{\if\ltxkeys@inkv kv\else + csv\fi @@normalize}*[#1]\ltxkeys@arg }{}% \loopbreakfalse - \expandafter\ltxkeys@parse@b\ltxkeys@arg,\ltxkeys@nil,% - \popfunctions\ltxkeys@parse\ltxkeys@csvdepth - \ifnum\ltxkeys@csvdepth=\z@pt\undefcs\ltxkeys@do\fi + \expandafter\ltxkeys@parse@c\ltxkeys@arg#1\ltxkeys@nil#1% + \popfunctions\ltxkeys@parse\cpt@csvdepth + \ifnum\cpt@csvdepth=\z@pt\undefcs\ltxkeys@do\fi } -\robust@def*\ltxkeys@parse@c#1,{% - \edef\ltxkeys@arg{\expandcsonce{\@gobble#1}}% - \ifxTF\ltxkeys@arg\ltxkeys@nnil{}{% - \ifxTF\@empty\ltxkeys@arg{}{% - \expandafter\ltxkeys@doo\expandafter{\ltxkeys@arg}\relax - }% - \ltxkeys@parse@b +\def\ltxkeys@keyprefixhook{} +\def\ltxkeys@macroprefixhook{} +\def\ltxkeys@keyfamilyhook{} +\robust@def*\ltxkeys@reservekeyprefix{% + \cpt@testst\ltxkeys@res@rvekeyprefix +} +\robust@def*\ltxkeys@res@rvekeyprefix#1{% + \cptexpanded{% + \ifcpt@st\AfterEndOfStyleFile{\fi + \cptfiltermergecsv[,]\unexpanded{% + \ltxkeys@keyprefixhook{#1}\nofilter + \globalize\ltxkeys@keyprefixhook + }% + \ifcpt@st}\fi + }% +} +\robust@def*\ltxkeys@reservekeyfamily{% + \cpt@testst\ltxkeys@res@rvekeyfamily +} +\robust@def*\ltxkeys@res@rvekeyfamily#1{% + \cptexpanded{% + \ifcpt@st\AfterEndOfStyleFile{\fi + \cptfiltermergecsv[,]\unexpanded{% + \ltxkeys@keyfamilyhook{#1}\nofilter + \globalize\ltxkeys@keyfamilyhook + }% + \ifcpt@st}\fi + }% +} +\robust@def*\ltxkeys@reservemacroprefix{% + \cpt@testst\ltxkeys@res@rvemacroprefix +} +\robust@def*\ltxkeys@res@rvemacroprefix#1{% + \cptexpanded{% + \ifcpt@st\AfterEndOfStyleFile{\fi + \cptfiltermergecsv[,]\unexpanded{% + \ltxkeys@macroprefixhook{#1}\nofilter + \globalize\ltxkeys@macroprefixhook + }% + \ifcpt@st}\fi + }% +} +\ltxkeys@reservekeyfamily*{ltxkeys} +\ltxkeys@reservemacroprefix*{ltxkeys@} + +\robust@def*\ltxkeys@unreservekeyprefix{% + \cpt@testst\ltxkeys@unres@rvekeyprefix +} +\robust@def*\ltxkeys@unres@rvekeyprefix#1{% + \cptexpanded{% + \ifcpt@st\AfterEndOfStyleFile{\fi + \cptfilterremovecsv[,]\unexpanded{% + \ltxkeys@keyprefixhook{#1}\nofilter + \globalize\ltxkeys@keyprefixhook + }% + \ifcpt@st}\fi + }% +} +\robust@def*\ltxkeys@unreservekeyfamily{% + \cpt@testst\ltxkeys@unres@rvekeyfamily +} +\robust@def*\ltxkeys@unres@rvekeyfamily#1{% + \cptexpanded{% + \ifcpt@st\AfterEndOfStyleFile{\fi + \cptfilterremovecsv[,]\unexpanded{% + \ltxkeys@keyfamilyhook{#1}\nofilter + \globalize\ltxkeys@keyfamilyhook + }% + \ifcpt@st}\fi + }% +} +\robust@def*\ltxkeys@unreservemacroprefix{% + \cpt@testst\ltxkeys@unres@rvemacroprefix +} +\robust@def*\ltxkeys@unres@rvemacroprefix#1{% + \cptexpanded{% + \ifcpt@st\AfterEndOfStyleFile{\fi + \cptfilterremovecsv[,]\unexpanded{% + \ltxkeys@macroprefixhook{#1}\nofilter + \globalize\ltxkeys@macroprefixhook + }% + \ifcpt@st}\fi }% } \robust@def*\ltxkeys@testopt@a#1{\cpt@testopt{\ltxkeys@testopt@b#1}{KV}} \robust@def*\ltxkeys@testopt@b#1[#2]#3{% + \ifltxkeys@useempty\else + \iflacus#3\dolacus + \ltxkeys@warn{Empty key family encountered\on@line}% + \fi + \fi \ltxkeys@makepf{#2}% - \ltxkeys@makehdr{#3}#1% + \ltxkeys@makehdr{#3}% + #1% } \robust@def*\ltxkeys@testopt@c#1{% \begingroup @@ -394,21 +937,18 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \def\temp@err##1{% \ltxkeys@err{Multiple ##1 in \noexpandcsn {ltxkeys@set\ifltxkeys@rm rm\fi keys}% - without '+' suffix}\@ehc + without '+' suffix}\ltxkeys@ehc }% - \ltxkeys@ifeltcountTF[>]{#2}\@ne{% + \ltxkeys@ifeltcountTF[,](>)\@ne{#2}{% \temp@err{prefixes}% }{% - \ltxkeys@ifeltcountTF[>]{#3}\@ne{% + \ltxkeys@ifeltcountTF[,](>)\@ne{#3}{% \temp@err{families}% }{}% }% \fi \endgroup - \def\ltxkeys@prefs{#2}% - \def\ltxkeys@fams{#3}% - \cpt@sttrue\cpt@csvnormalize[,]\ltxkeys@prefs - \cpt@sttrue\cpt@csvnormalize[,]\ltxkeys@fams + \ltxkeys@commanormalizeset{{#2}\ltxkeys@prefs,{#3}\ltxkeys@fams}% \cpt@testopt{#1}{}% } \robust@def*\ltxkeys@testopt@e#1#2{% @@ -417,7 +957,7 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \robust@def*\ltxkeys@testopt@f#1[#2]#3{% - \if@boolTF{ltxkeys@sw}{% + \ifboolTF{ltxkeys@sw}{% \cpt@ifbrack{\ltxkeys@sttrue#1{#2}{#3}}{\ltxkeys@stfalse#1{#2}{#3}[]}% }{% \cpt@ifbrack{\ltxkeys@bracedefault{\ltxkeys@sttrue#1{#2}{#3}}}% @@ -427,9 +967,6 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \robust@def*\ltxkeys@testopt@g#1#2{% \cptexpandarg\ltxkeys@testopt@a{\noexpandcsn{ltxkeys@#1}{#2}}% } -\robust@def*\ltxkeys@testopt@h#1{% - \cptexpandarg\ltxkeys@testopt@a{\noexpandcsn{ltxkeys@#1}}% -} \robust@def*\ltxkeys@bracedefault#1[{% \begingroup \toks@{#1}% @@ -441,24 +978,56 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \robust@def*\ltxkeys@testopt@@a#1{\ltxkeys@testst{\ltxkeys@testopt@@b#1}} \robust@def*\ltxkeys@testopt@@b#1{\cpt@testopt{\ltxkeys@testopt@@c#1}{KV}} \robust@def*\ltxkeys@testopt@@c#1[#2]{% - \def\ltxkeys@prefs{#2}% + \ltxkeys@commanormalize{#2}\ltxkeys@prefs \cpt@testfam{\ltxkeys@testopt@@d#1}% } \robust@def*\ltxkeys@testopt@@d#1<#2>{% - \edef\ltxkeys@fams{#2}% + \expandafter\ltxkeys@commanormalize + \expandafter{\romannumeral-`\q#2}\ltxkeys@fams \cpt@testopt{#1}{}% } -\robust@def*\ltxkeys@findneedvalue#1{% - \ltxkeys@findpointer\needvalue{#1}\ltxkeys@tkey{% +\robust@def*\ltxkeys@findpointers#1{% + \ltxkeys@svfalse\ltxkeys@nvfalse + \let\infdpointers\cptswtrue + \let\infdp@inters\cptswfalse + \ltxkeys@findp@inters{\savevalue\needvalue}{#1}\ltxkeys@tkey{% + \ltxkeys@svtrue\ltxkeys@nvtrue + \ltxkeys@addtopointedkeys{savevalue}\ltxkeys@tkey \ltxkeys@addtopointedkeys{needvalue}\ltxkeys@tkey - }{}% + }{% + \ltxkeys@findp@inters{\needvalue\savevalue}{#1}\ltxkeys@tkey{% + \ltxkeys@svtrue\ltxkeys@nvtrue + \ltxkeys@addtopointedkeys{needvalue}\ltxkeys@tkey + \ltxkeys@addtopointedkeys{savevalue}\ltxkeys@tkey + }{% + \ltxkeys@findp@inters{\needvalue}{#1}\ltxkeys@tkey{% + \ltxkeys@svfalse\ltxkeys@nvtrue + \ltxkeys@addtopointedkeys{needvalue}\ltxkeys@tkey + }{% + \let\infdp@inters\cptswtrue + \ltxkeys@findp@inters{\savevalue}{#1}\ltxkeys@tkey{% + \ltxkeys@svtrue\ltxkeys@nvfalse + \ltxkeys@addtopointedkeys{savevalue}\ltxkeys@tkey + }{% + \ltxkeys@debug{==}{Key '\ltxkeys@tkey' has no pointer}% + }% + }% + }% + }% + \let\infdpointers\cptswfalse } -\robust@def*\ltxkeys@findpointer#1#2#3{% +\robust@def*\ltxkeys@findp@inters#1#2#3{% \def\reserved@a##1#1##2##3\ltxkeys@nil{% \edef#3{\unexpanded{##2}}% - \ifxTF#3\ltxkeys@nnil{% + \ltxkeys@ifxTF#3\ltxkeys@nnil{% \edef#3{\unexpanded{##1}}% - \ltxkeys@trimspacesincs#3% + \if\infdpointers + \if\infdp@inters + \ltxkeys@trimspacesincs#3% + \fi + \else + \ltxkeys@trimspacesincs#3% + \fi \@secondoftwo }{% \ltxkeys@trimspacesincs#3% @@ -468,41 +1037,59 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \reserved@a#2#1{\ltxkeys@nil}\ltxkeys@nil } \robust@def*\ltxkeys@addtopointedkeys#1#2{% - \letcstocsn\reserved@a{\ltxkeys@hdr#1@keys}% - \ifdefTF\reserved@a{% - \xifinsetTF{,\cptoxdetok{#2},}{,\cptoxdetok\reserved@a,}{}{% - \csn@xdef{\ltxkeys@hdr#1@keys}% - {\cptliststack,\reserved@a\expandcsonce{#2}}% + \letcstocsn\reserved@e{\ltxkeys@hdr#1keys}% + \ifdefTF\reserved@e{% + \xifinsetTF{,\cptoxdetok{#2},}{,\cptoxdetok\reserved@e,}{}{% + \csn@xdef{\ltxkeys@hdr#1keys}% + {\csliststack,\reserved@e\expandcsonce{#2}}% + }% + }{% + \csn@xdef{\ltxkeys@hdr#1keys}{\expandcsonce{#2}}% + }% +} +\robust@def*\ltxkeys@addtop@intedkeys#1#2#3{% + \edef\ltxkeys@tempa{#2{\expandcsonce{#3}}}% + \letcstocsn\reserved@e{@\ltxkeys@hdr#1keys}% + \ifdefTF\reserved@e{% + \xifinsetTF{,\cptoxdetok\ltxkeys@tempa,}{,\cptoxdetok\reserved@e,}% + {}{% + \csn@xdef{@\ltxkeys@hdr#1keys}% + {\csliststack,\reserved@e\expandcsonce\ltxkeys@tempa}% }% }{% - \csn@xdef{\ltxkeys@hdr#1@keys}{\expandcsonce{#2}}% + \csn@xdef{@\ltxkeys@hdr#1keys}{\expandcsonce\ltxkeys@tempa}% }% } -\new@def*\ltxkeys@currtriple{\ltxkeys@ttpref,\ltxkeys@tfam,\ltxkeys@tkey} +\new@def*\ltxkeys@currtriple{% + \ltxkeys@ifcsemptyTF\ltxkeys@ttpref{???}\ltxkeys@ttpref,% + \ltxkeys@ifcsemptyTF\ltxkeys@tfam{???}\ltxkeys@tfam,% + \ltxkeys@tkey +} \robust@def*\ltxkeys@makepf#1{% \s@expandarg\ltxkeys@trimspaces{#1}\ltxkeys@ttpref \edef\ltxkeys@tpref{% - \ifcsnullTF\ltxkeys@ttpref{}{\ltxkeys@ttpref @}% + \ltxkeys@ifcsemptyTF\ltxkeys@ttpref{}{\ltxkeys@ttpref @}% }% } \robust@def*\ltxkeys@makehdr#1{% \s@expandarg\ltxkeys@trimspaces{#1}\ltxkeys@tfam \edef\ltxkeys@hdr{% - \ltxkeys@tpref\ifcsnullTF\ltxkeys@tfam{}{\ltxkeys@tfam @}% + \ltxkeys@tpref\ltxkeys@ifcsemptyTF\ltxkeys@tfam{}{\ltxkeys@tfam @}% }% } \new@def*\ltxkeys@badkeynamelist{} \robust@def*\ltxkeys@badkeynames#1{% - \ifcsnullTF\ltxkeys@badkeynamelist{% - \edef\ltxkeys@badkeynamelist{\detokenize{#1}}% - \cpt@sttrue\cpt@csvnormalize[,]\ltxkeys@badkeynamelist + \ltxkeys@ifcsemptyTF\ltxkeys@badkeynamelist{% + \expandafter\ltxkeys@commanormalize\expandafter + {\detokenize{#1}}\ltxkeys@badkeynamelist }{% \cptexpandsecond{\cptfiltermergecsv[,]} {\noexpand\ltxkeys@badkeynamelist{\detokenize{#1}}}\nofilter }% } +\newletcs\ltxkeys@addbadkeynames\ltxkeys@badkeynames \robust@def*\ltxkeys@removebadkeynames#1{% - \ifcsnullTF\ltxkeys@badkeynamelist{% + \ltxkeys@ifcsemptyTF\ltxkeys@badkeynamelist{% \ltxkeys@info{Couldn't delete from empty \string\ltxkeys@badkeynamelist}% }{% @@ -511,61 +1098,141 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \ltxkeys@badkeynames{.code,ordkey,cmdkey,choicekey,boolkey,% - handledkeys,presetkeys,postsetkeys% + handledkeys,presetkeys,postsetkeys,rmkeys,executedkeys,bool,% + boolean,tog,toggle,switch,true,false,on,off,count,% + savevaluekeys,xfamilykeys,needvalue,savevalue,usevalue% } \robust@def*\ltxkeys@findbadkeyname#1{% \begingroup \edef\ltxkeys@tempa{\cpttrimspaces{#1}}% \oifinset@sp@TF,\ltxkeys@tempa\ltxkeys@badkeynamelist{% - \ltxkeys@err{Bad key name '\ltxkeys@tempb'}\@ehc + \ltxkeys@err{Bad key name '\ltxkeys@tempb'}\ltxkeys@ehc }{}% \endgroup } \robust@def*\ltxkeys@saveinitialkeyvals#1#2#3{% - \xifinsetTF{\detokenize{\savevalue}}{\cptoxdetok{#2}}{% - \ltxkeys@err{\noexpand\savevalue pointer not allowed - \MsgBrk when defining a key}\@ehc - }{% - \ifltxkeys@verbose + \ifltxkeys@disable\else + \ifltxkeys@tracingkeys \s@expandarg\ltxkeys@findbadkeyname{#2}% \fi - }% - \ifltxkeys@twk\else - \ifltxkeys@sv - \letcstocsn\ltxkeys@tempa{\ltxkeys@hdr initial@keyvals}% - \csn@xdef{\ltxkeys@hdr initial@keyvals}{% - \cptliststack,\ltxkeys@tempa\expandcsonce{#2}=% - \ifstrcmpTF{#1}{bool}{false}{\unexpanded{#3}}% + \ifltxkeys@twk\else + \letcstocsn\ltxkeys@tempa{\ltxkeys@hdr initialkeyvals}% + \csn@xdef{\ltxkeys@hdr initialkeyvals}{% + \csliststack,\ltxkeys@tempa\expandcsonce{#2}=% + \ifstrcmpTF{#1}{bool}{false}{% + \ifstrcmpTF{#1}{switch}{false}{\unexpanded{#3}}% + }% }% \fi + \ifboolTF{ltxkeys@tracingkeys}{% + \ltxkeys@getbasechars[20]{#3}\ltxkeys@tempa + \ltxkeys@debug{==}{Definition done: + \ltxkeys@currtriple,\ltxkeys@tempa}% + }{}% \fi - \ltxkeys@vinfo{Key defined: \ltxkeys@currtriple}% +} +\robust@def*\ltxkeys@checkdefkey{% + \ifcsndefTF{\ltxkeys@hdr\ltxkeys@tkey}{% + \ifltxkeys@disable\else + \ifltxkeys@chdef + \ltxkeys@error{Key already exists: \ltxkeys@currtriple} + {Defining only new keys: key '\ltxkeys@currtriple' + already exists.}% + \else + \ltxkeys@debug{!!}{Key already exists: \ltxkeys@currtriple}% + \fi + \fi + }{% + \ltxkeys@debug{==}{This is a new key: \ltxkeys@currtriple}% + }% + \ltxkeys@chdeffalse + \ifltxkeys@reservenopath\else + \ltxkeys@checkreserved + \fi +} +\robust@def*\ltxkeys@checkreserved{% + \ltxkeys@debug{==}{Checking reserved key paths}% + \def\@do##1,##2,##3;{% + \ifnot@nil{##1}{% + \ifnum\numexpr + \ifdefTF##2{0}{-1}\ltxkeys@ifcsemptyTF##2{-1}{0}% + \ifdefTF##3{0}{-1}\ltxkeys@ifcsemptyTF##3{-1}{0}<\z@pt + \else + \oifinset@sp@FT,##2##3{}{% + \ltxkeys@error{##1 '##2' is reserved} + {You have used a reserved ##1: '##2'.}% + }% + \fi + \@do + }% + }% + \@do key prefix,\ltxkeys@ttpref,\ltxkeys@keyprefixhook;% + key family,\ltxkeys@tfam,\ltxkeys@keyfamilyhook;% + macro prefix,\ltxkeys@macpref,\ltxkeys@macroprefixhook;\@nil,,;% + \ltxkeys@debug{==}{No clash with reserved key paths}% } \robust@def*\ltxkeys@ordkey{% - \ltxkeys@svtrue\ltxkeys@swfalse + \ltxkeys@swfalse + \def\ltxkeys@macpref{}% \ltxkeys@testopt@a\ltxkeys@ordkey@a } +\newletcs\ltxkeys@ordkeys\ltxkeys@ordkey +\robust@def*\ltxkeys@newordkey{\ltxkeys@chdeftrue\ltxkeys@ordkey} +\newletcs\ltxkeys@newordkeys\ltxkeys@newordkey \robust@def*\ltxkeys@ordkey@a#1{% - \ltxkeys@findneedvalue{#1}% + \ltxkeys@debug{==}{Ordinary key '\ltxkeys@tkey' is being defined}% \cpt@ifbrack{% - \ltxkeys@bracedefault - {\ltxkeys@sttrue\s@expandarg\ltxkeys@ordkey@b\ltxkeys@tkey}% + \ltxkeys@bracedefault{\ltxkeys@sttrue\ltxkeys@ordkey@b{#1}}% }{% - \ltxkeys@stfalse\s@expandarg\ltxkeys@ordkey@b\ltxkeys@tkey[]% + \ltxkeys@stfalse\ltxkeys@ordkey@b{#1}[]% }% } \robust@def*\ltxkeys@ordkey@b#1[#2]#3{% - \if@boolFT{ltxkeys@st}{}{\ltxkeys@definedefault{#1}{#2}}% - \ltxkeys@saveinitialkeyvals{}{#1}{#2}% - \csn@def{\ltxkeys@hdr#1}##1{#3}% + \let\ifltxkeys@keyst\ifltxkeys@st + \edef\ltxkeys@loopcbk##1{{##1}\unexpanded{{#2}{#3}}}% + \ifinsetTF,{#1}{% + \def\ltxkeys@do##1{% + \expandafter\ltxkeys@ordkey@c\ltxkeys@loopcbk{##1}% + }% + \ltxkeys@parse1{#1}% + }{% + \ltxkeys@ordkey@c{#1}{#2}{#3}% + }% +} +\robust@def*\ltxkeys@ordkey@c#1#2#3{% + \ltxkeys@findpointers{#1}% + \ltxkeys@checkdefkey + \ifdefboolFT{ltxkeys@keyst}{}{% + \ltxkeys@definedefault\ltxkeys@tkey{#2}% + }% + \ltxkeys@saveinitialkeyvals{}\ltxkeys@tkey{#2}% + \@namedef{\ltxkeys@hdr\ltxkeys@tkey}##1{#3}% } \robust@def*\ltxkeys@cmdkey{% - \ltxkeys@svtrue\ltxkeys@swfalse + \ltxkeys@swfalse \ltxkeys@testopt@e\ltxkeys@cmdkey@a{cmd}% } +\newletcs\ltxkeys@cmdkeys\ltxkeys@cmdkey +\robust@def*\ltxkeys@newcmdkey{\ltxkeys@chdeftrue\ltxkeys@cmdkey} +\newletcs\ltxkeys@newcmdkeys\ltxkeys@newcmdkey \robust@def*\ltxkeys@cmdkey@a#1#2[#3]#4{% - \ltxkeys@findneedvalue{#2}% - \if@boolFT{ltxkeys@st}{}{\ltxkeys@definedefault\ltxkeys@tkey{#3}}% + \let\ifltxkeys@keyst\ifltxkeys@st + \edef\ltxkeys@loopcbk##1{% + \ltxkeys@cmdkey@b{#1}{##1}\unexpanded{{#3}{#4}}% + }% + \ifinsetTF,{#2}{% + \def\ltxkeys@do##1{\ltxkeys@loopcbk{##1}}% + \ltxkeys@parse1{#2}% + }{% + \ltxkeys@cmdkey@b{#1}{#2}{#3}{#4}% + }% +} +\robust@def*\ltxkeys@cmdkey@b#1#2#3#4{% + \def\ltxkeys@macpref{#1}% + \ltxkeys@findpointers{#2}% + \ltxkeys@debug{==}{Command key '\ltxkeys@tkey' is being defined}% + \ltxkeys@checkdefkey + \ifdefboolFT{ltxkeys@keyst}{}{\ltxkeys@definedefault\ltxkeys@tkey{#3}}% \ltxkeys@saveinitialkeyvals{}\ltxkeys@tkey{#3}% \begingroup \edef\ltxkeys@tempa{\endgroup\csn@def{\ltxkeys@hdr\ltxkeys@tkey}####1}% @@ -575,39 +1242,87 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \expandafter\ltxkeys@tempa\ltxkeys@tempb{#4}% } \robust@def*\ltxkeys@boolkey{% - \ltxkeys@svtrue\ltxkeys@swtrue + \ltxkeys@swtrue \ltxkeys@testpl{\ltxkeys@testopt@e\ltxkeys@boolkey@a{bool}}% } +\newletcs\ltxkeys@boolkeys\ltxkeys@boolkey +\robust@def*\ltxkeys@newboolkey{\ltxkeys@chdeftrue\ltxkeys@boolkey} +\newletcs\ltxkeys@newboolkeys\ltxkeys@newboolkey \robust@def*\ltxkeys@boolkey@a#1#2[#3]{% - \ltxkeys@findneedvalue{#2}% - \ltxkeys@saveinitialkeyvals{bool}\ltxkeys@tkey{#3}% - \aftercsname{\if@boolTF{ltxkeys@pl}\ltxkeys@boolkey@c\ltxkeys@boolkey@b}% - {\ltxkeys@hdr\ltxkeys@tkey}{\ltxkeys@tkey}{#1\ltxkeys@tkey}{#3}% -} -\robust@def*\ltxkeys@boolkey@b#1#2#3#4#5{% - \ltxkeys@boolkey@d#1{#2}{#3}{#4}% - {{\ltxkeys@setbool\ltxkeys@resa\usename{#3\ltxkeys@resa}#5}}% + \let\ifltxkeys@keyst\ifltxkeys@st + \ifblankTF{#3}{}{% + \xifstrcmpTF{#3}{true}{}{% + \xifstrcmpTF{#3}{false}{}{% + \ltxkeys@err{Bad boolean value '#3'}\ltxkeys@ehc + }% + }% + }% + \ltxkeys@commanormalize{#2}\ltxkeys@tempa + \cptexpanded{% + \ifboolTF{ltxkeys@pl}\ltxkeys@boolkey@d + \ltxkeys@boolkey@c{#1}{\expandcsonce\ltxkeys@tempa}{#3}% + }% } -\robust@def*\ltxkeys@boolkey@c#1#2#3#4#5#6{% - \ltxkeys@boolkey@d#1{#2}{#3}{#4}% - {{\ltxkeys@setbool\ltxkeys@resa\usename{#3\ltxkeys@resa}#5}{#6}}% +\robust@def*\ltxkeys@boolkey@b#1#2#3{% + \ltxkeys@findpointers{#2}% + \ltxkeys@debug{==}{Boolean key '\ltxkeys@tkey' is being defined}% + \ltxkeys@saveinitialkeyvals{bool}\ltxkeys@tkey{#3}% + \edef\ltxkeys@resa##1##2{% + \ltxkeys@boolkey@e\cptmakecs{\ltxkeys@hdr\ltxkeys@tkey}% + {\ltxkeys@tkey}{#1\ltxkeys@tkey}\unexpanded{{#3}}% + {{\ltxkeys@setbool\noexpand\ltxkeys@resa\noexpand + \usename{#1\ltxkeys@tkey\noexpand\ltxkeys@resa}##1}% + \gobble@or@empty{##2}}% + }% +} +\robust@def*\ltxkeys@boolkey@c#1#2#3#4{% + \let\gobble@or@empty\@gobble + \edef\ltxkeys@loopcbk##1{% + \ltxkeys@boolkey@b{#1}{##1}\unexpanded{{#3}}% + \noexpand\ltxkeys@resa\unexpanded{{#4}}{}% + }% + \ifinsetTF,{#2}{% + \def\ltxkeys@do##1{\ltxkeys@loopcbk{##1}}% + \ltxkeys@parse1{#2}% + }{% + \ltxkeys@loopcbk{#2}% + }% } \robust@def*\ltxkeys@boolkey@d#1#2#3#4#5{% - \csn@newif{#3}% - \if@boolFT{ltxkeys@st}{}{\ltxkeys@definedefault{#2}{#4}}% + \let\gobble@or@empty\@empty + \edef\ltxkeys@loopcbk##1{% + \ltxkeys@boolkey@b{#1}{##1}\unexpanded{{#3}}% + \noexpand\ltxkeys@resa\unexpanded{{#4}{#5}}% + }% + \ifinsetTF,{#2}{% + \def\ltxkeys@do##1{\ltxkeys@loopcbk{##1}}% + \ltxkeys@parse1{#2}% + }{% + \ltxkeys@loopcbk{#2}% + }% +} +\robust@def*\ltxkeys@boolkey@e#1#2#3#4#5{% + \def\reserved@a##1#2\ltxkeys@nil{% + \def\ltxkeys@macpref{##1}% + }% + \reserved@a#3\ltxkeys@nil + \ltxkeys@checkdefkey + \csnnewif{#3}% + \ifboolFT{ltxkeys@keyst}{}{\ltxkeys@definedefault{#2}{#4}}% \cptexpandarg{\def#1##1}{% \csn@def{#3}{####1}% \noexpandcsn{cpt@pl\ifltxkeys@pl true\else false\fi}% - \unexpanded - {\cpt@sttrue\ltxkeys@cc@b,[\ltxkeys@resa]{##1}{true,false}#5}% + \unexpanded{\cpt@sttrue\ltxkeys@cc@b,(\ltxkeys@resa)% + {##1}{true,false}#5}% }% } \robust@def*\ltxkeys@biboolkeys{% - \ltxkeys@svtrue\ltxkeys@swtrue + \ltxkeys@swtrue \ltxkeys@testpl{\ltxkeys@testopt@e\ltxkeys@biboolkeys@a{}}% } +\robust@def*\ltxkeys@newbiboolkeys{\ltxkeys@chdeftrue\ltxkeys@biboolkeys} \robust@def*\ltxkeys@biboolkeys@a#1#2[#3]{% - \if@boolTF{ltxkeys@pl}\ltxkeys@biboolkeys@c\ltxkeys@biboolkeys@b + \ifboolTF{ltxkeys@pl}\ltxkeys@biboolkeys@c\ltxkeys@biboolkeys@b {#1}{#2}{#3}% } \robust@def*\ltxkeys@biboolkeys@b#1#2#3#4#5{% @@ -621,16 +1336,18 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ltxkeys@tempb{#5}{#6}% } \robust@def*\ltxkeys@biboolkeys@d#1#2#3{% - \ltxkeys@ifeltcountTF[=]{#2}\tw@{}{% - \ltxkeys@error{Biboolean keys '#2' not equal to 2}\@ehc + \ltxkeys@ifeltcountTF[,](=)\tw@{#2}{}{% + \ltxkeys@error{Biboolean keys '#2' not equal to 2}\ltxkeys@ehc }% - \def\ltxkeys@keys{#2}% - \cpt@sttrue\cpt@csvnormalize[,]\ltxkeys@keys + \ltxkeys@commanormalize{#2}\ltxkeys@keys \def\ltxkeys@tempa##1,##2\ltxkeys@nil##3##4{% - \ltxkeys@findneedvalue{##1}% + \ltxkeys@findpointers{##1}% + \ltxkeys@debug{==}{Boolean key '\ltxkeys@tkey' is being defined}% \let\ltxkeys@tkeya\ltxkeys@tkey - \ltxkeys@findneedvalue{##2}% - \cpt@newv@riables{tog}{\ltxkeys@hdr}{##1,##2}[false]% + \ltxkeys@findpointers{##2}% + \ltxkeys@debug{==}{Boolean key '\ltxkeys@tkey' is being defined}% + \cptexpandarg{\cpt@newv@riables{tog}\ltxkeys@hdr} + {\ltxkeys@tkeya,\ltxkeys@tkey}[false]% \cptexpandsecond\ltxkeys@biboolkeys@e {{\ltxkeys@tkeya}{\ltxkeys@tkey}}{#1}{#3}{##3}{##4}% }% @@ -641,14 +1358,14 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \robust@def\ltxkeys@biboolkeys@e#1#2#3#4#5#6{% \ifltxkeys@pl \long\def\ltxkeys@tempa##1##2{% - \aftercsname\ltxkeys@boolkey@d{\ltxkeys@hdr#1}{#1}{#3#1}{#4}{{% + \aftercsname\ltxkeys@boolkey@e{\ltxkeys@hdr#1}{#1}{#3#1}{#4}{{% \ltxkeys@setbool\ltxkeys@resa\usename{#3#1\ltxkeys@resa}% ##1\relax \ltxkeys@biboolkeys@f{#1}{#2}{#3#1}{#5}{#6}% }{##2}}% }% \long\def\ltxkeys@tempb##1##2{% - \aftercsname\ltxkeys@boolkey@d{\ltxkeys@hdr#2}{#2}{#3#2}{#4}{{% + \aftercsname\ltxkeys@boolkey@e{\ltxkeys@hdr#2}{#2}{#3#2}{#4}{{% \ltxkeys@setbool\ltxkeys@resa\usename{#3#2\ltxkeys@resa}% ##1\relax \ltxkeys@biboolkeys@f{#2}{#1}{#3#2}{#5}{#6}% @@ -656,14 +1373,14 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% \else \long\def\ltxkeys@tempa##1{% - \aftercsname\ltxkeys@boolkey@d{\ltxkeys@hdr#1}{#1}{#3#1}{#4}{% + \aftercsname\ltxkeys@boolkey@e{\ltxkeys@hdr#1}{#1}{#3#1}{#4}{% \ltxkeys@setbool\ltxkeys@resa\usename{#3#1\ltxkeys@resa}% ##1\relax \ltxkeys@biboolkeys@f{#1}{#2}{#3#1}{#5}{#6}% }% }% \long\def\ltxkeys@tempb##1{% - \aftercsname\ltxkeys@boolkey@d{\ltxkeys@hdr#2}{#2}{#3#2}{#4}{% + \aftercsname\ltxkeys@boolkey@e{\ltxkeys@hdr#2}{#2}{#3#2}{#4}{% \ltxkeys@setbool\ltxkeys@resa\usename{#3#2\ltxkeys@resa}% ##1\relax \ltxkeys@biboolkeys@f{#2}{#1}{#3#2}{#5}{#6}% @@ -679,31 +1396,49 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \robust@def*\ltxkeys@stylekey{% - \ltxkeys@svtrue\ltxkeys@swfalse + \ltxkeys@swfalse \ltxkeys@testst{% \cpt@cnta\ifltxkeys@st1\else0\fi\relax \ltxkeys@testopt@e\ltxkeys@stylekey@a{style}% }% } +\newletcs\ltxkeys@stylekeys\ltxkeys@stylekey +\robust@def*\ltxkeys@newstylekey{\ltxkeys@chdeftrue\ltxkeys@stylekey} +\newletcs\ltxkeys@newstylekeys\ltxkeys@newstylekey \robust@def*\ltxkeys@stylekey@a#1#2[#3]{% + \def\ltxkeys@macpref{#1}% \cpt@testpnopt{\ltxkeys@stylekey@b{#1}{#2}{#3}}{}% } \robust@def*\ltxkeys@stylekey@b#1#2#3(#4)#5{% - \ltxkeys@findneedvalue{#2}% + \let\ifltxkeys@keyst\ifltxkeys@st + \edef\ltxkeys@loopcbk##1{% + \ltxkeys@stylekey@c{#1}{##1}\unexpanded{{#3}{#4}{#5}}% + }% + \ifinsetTF,{#2}{% + \def\ltxkeys@do##1{\ltxkeys@loopcbk{##1}}% + \ltxkeys@parse1{#2}% + }{% + \ltxkeys@stylekey@c{#1}{#2}{#3}{#4}{#5}% + }% +} +\robust@def*\ltxkeys@stylekey@c#1#2#3#4#5{% + \ltxkeys@debug{==}{Style key '\ltxkeys@tkey' is being defined}% + \ltxkeys@findpointers{#2}% + \ltxkeys@checkdefkey \ltxkeys@saveinitialkeyvals{}\ltxkeys@tkey{#3}% - \ifltxkeys@st + \ifltxkeys@keyst \s@expandarg\ltxkeys@definedefault\ltxkeys@tkey{#3}% \fi - \cptexpandtwoargs\cpt@in + \cptexpandtwoargs\ltxkeys@in {\detokenize\expandafter{\unexpanded\expandafter {\csname\ltxkeys@hdr\ltxkeys@tkey @value\endcsname}}} {\detokenize{#4}}% \csn@edef{\ltxkeys@hdr\ltxkeys@tkey @dependants}{\unexpanded{#4}}% \cptpassexpanded{% - \long\csn@def{\ltxkeys@hdr\ltxkeys@tkey}####1{% + \csn@def{\ltxkeys@hdr\ltxkeys@tkey}####1{% \csn@edef{#1\ltxkeys@tkey}{\noexpand\unexpanded{####1}}% \edef\noexpand\parentval{\noexpand\unexpanded{####1}}% - \ifcpt@in + \ifin@ \csn@xdef{\ltxkeys@hdr\ltxkeys@tkey @value}% {\noexpand\unexpanded{####1}}% \fi @@ -714,11 +1449,11 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ } \robust@def*\ltxkeys@setdependants#1#2{% \letcstocsn\ltxkeys@tempa{\ltxkeys@hdr\ltxkeys@tkey @dependants}% - \ifcsemptyTF\ltxkeys@tempa{}{% + \ltxkeys@ifcsemptyTF\ltxkeys@tempa{}{% \cpt@sttrue \expandafter\cpt@csvnormalize \expandafter[\ltxkeys@keyparser]\ltxkeys@tempa - \if@boolTF{ltxkeys@dec}{}{% + \ifboolTF{ltxkeys@dec}{}{% \cptexpandargonce{\ltxkeys@s@tdependants{#1}{#2}}\ltxkeys@tempa }% }% @@ -726,11 +1461,11 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \robust@def*\ltxkeys@s@tdependants#1#2#3{% \begingroup \toks0{}\toks1{}\toks2{}% - \def\csv@do##1{% + \def\ltxkeys@do##1{% \ltxkeys@s@td@pendants{##1}% \ltxkeys@s@td@p@ndants{#1}% }% - \expandafter\csv@@loop\expandafter[\ltxkeys@keyparser]{#3}% + \cptexpandsecond{\ltxkeys@parse0}{[\ltxkeys@keyparser]}{#3}% \let\ifblankTF\relax \cptpassexpanded{% \endgroup @@ -739,10 +1474,11 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ {\ltxkeys@setkeys[\expandcsonce\ltxkeys@ttpref]% {\expandcsonce\ltxkeys@tfam}{\the\toks0}}% \ifblankTF{\the\toks1}{}% - {\ltxkeys@declarekeys[\ltxkeys@ttpref]<\ltxkeys@tfam>[#2]{\the\toks1}}% + {\ltxkeys@declarekeys[\ltxkeys@ttpref]% + {\ltxkeys@tfam}[#2]{\the\toks1}}% \ifblankTF{\the\toks2}{}{% - \ltxkeys@err{Undefined dependant keys:^^J||\the\toks2||}{% - I have come across undefined dependant keys. You can + \ltxkeys@err{Undefined dependant keys: ||\the\toks2||} + {I have come across undefined dependant keys. You can \MsgBrk use the star (*) form of '\string\ltxkeys@stylekey' \MsgBrk to define and set dependant keys on the fly. }% @@ -750,34 +1486,44 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% \ltxkeys@depfalse } +\robust@def*\ltxkeys@striplaststar#1*\@empty#2\ltxkeys@nil#3{% + \edef#3{#1}% +} +\robust@def*\ltxkeys@ifrejname#1{% + \ifcase0\ifx\key@type\ltxkeys@rej1\else + \ifx\key@name\ltxkeys@rej1\fi\fi\relax\else#1\fi +} \robust@def*\ltxkeys@s@td@pendants#1{% \begingroup - \emptifycsset{\key@name,\key@default,\key@macro}% + \def\key@name{}\def\key@default{}\def\key@macro{}% \@temptokena{#1}% \def\ltxkeys@splita##1/##2/{% \ifblankTF{##1##2}{% - \ltxkeys@warn{Something wrong with dependant keys}\@ehc + \ltxkeys@err{Something is wrong with dependant keys}\ltxkeys@ehc \expandafter\gobble@to@sentinel\expandafter \ltxkeys@nil\ltxkeys@keyparser }{% \ltxkeys@trimspaces{##1}\key@type - \def\striplaststar####1*\@empty####2\@nil{\edef\key@type{####1}}% - \expandafter\striplaststar\key@type\@empty*\@empty\@nil + \expandafter\ltxkeys@striplaststar + \key@type\@empty*\@empty\ltxkeys@nil\key@type \xifstrcmpFT\key@type{sty}{}{% \ltxkeys@err{A dependant key can't have dependants: - \MsgBrk ||\the\@temptokena||}\@ehc + ||\the\@temptokena||}\ltxkeys@ehc }% \xifinsetTF\key@type{,ord,cmd,bool,choice,}{}{% \ltxkeys@err{Invalid key type '\key@type' in dependant key(s) - \MsgBrk ||\the\@temptokena||}\@ehc + ||\the\@temptokena||}\ltxkeys@ehc }% \ifblankTF{##2}{% - \ltxkeys@err{Empty key name in dependant key(s)\MsgBrk - ||\the\@temptokena||}\@ehc + \ltxkeys@err{Empty key name in dependant key(s) + ||\the\@temptokena||}\ltxkeys@ehc }{% - \ltxkeys@findneedvalue{##2}% + \ltxkeys@findpointers{##2}% \let\key@name\ltxkeys@tkey }% + \ltxkeys@ifrejname{% + \ltxkeys@err{Wrong syntax for dependant keys}\ltxkeys@ehc + }% \ltxkeys@splitb.% }% }% @@ -788,12 +1534,13 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \edef\key@default{\expandcstwice\key@default}% }{}% \edef\key@macro{\unexpanded{##2}}% + \ltxkeys@stripdotcode\key@macro }% - \ltxkeys@splita#1////\ltxkeys@nil + \ltxkeys@splita#1/^?/^?/^?/\ltxkeys@nil + \let\do\cpt@csexit \cptpassexpanded{% \endgroup - \cpt@csexit\key@type\cpt@csexit\key@name - \cpt@csexit\key@default\cpt@csexit\key@macro + \do\key@type\do\key@name\do\key@default\do\key@macro }% } \robust@def*\ltxkeys@s@td@p@ndants#1{% @@ -807,9 +1554,9 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ifnum\numexpr#1=\@ne \toks1{% \the\toks1\oifblankTF{\the\toks1}{}{\ltxkeys@keyparser}% - \key@type/\key@name - \ifcsnullTF\key@default{}{/\expandcsonce\key@default}% - \ifcsnullTF\key@macro{}{/\expandcsonce\key@macro}% + \key@type/\expandcsonce\key@name + \ifx\key@default\ltxkeys@rej\else/\expandcsonce\key@default\fi + \ifx\key@macro\ltxkeys@rej\else/\expandcsonce\key@macro\fi }% \else \toks2{\the\toks2\oifblankTF{\the\toks2}{}{,}% @@ -819,43 +1566,78 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \robust@def*\ltxkeys@choicekey{% - \ltxkeys@svtrue\ltxkeys@swfalse - \ltxkeys@teststpl{\cpt@testcl{% - \ltxkeys@testopt@a{\cpt@testopt\ltxkeys@choicekey@a{chc\ltxkeys@hdr}}% - }}% -} + \ltxkeys@swfalse + \ltxkeys@suffixcheck{\ltxkeys@teststpl{\ltxkeys@testcl + {\ltxkeys@testopt@a{\cpt@testopt\ltxkeys@choicekey@a + {chc\ltxkeys@hdr}}}}}% +} +\newletcs\ltxkeys@choicekeys\ltxkeys@choicekey +\robust@def*\ltxkeys@newchoicekey{\ltxkeys@chdeftrue\ltxkeys@choicekey} +\newletcs\ltxkeys@newchoicekeys\ltxkeys@newchoicekey \robust@def*\ltxkeys@choicekey@a[#1]#2{% + \edef\ltxkeys@macpref{#1}% \begingroup - \def\siso@do##1{\catcode`##1\string=12\relax}% - \siso@@loop{=,.}% + \catcode`\=\string=12\catcode`\,=12 + \catcode`\;=12\catcode`\.=12 \cpt@testopt{\expandafter\endgroup\ltxkeys@choicekey@b{#1}{#2}}{}% } \robust@def*\ltxkeys@choicekey@b#1#2[#3]#4{% + \ifblankTF{#4}{% + \ltxkeys@err{Choice key can't have empty nominations}\ltxkeys@ehc + }{}% \ltxkeys@makechclist{#4}{0}% \cpt@ifbrack{% \ltxkeys@sttrue\ltxkeys@bracedefault - {\ltxkeys@choicekey@c{#2}{#1#2}{#3}{#4}}% + {\ltxkeys@choicekey@c{#1}{#2}{#3}{#4}}% }{% - \ltxkeys@stfalse\ltxkeys@choicekey@c{#2}{#1#2}{#3}{#4}[]% + \ltxkeys@stfalse\ltxkeys@choicekey@c{#1}{#2}{#3}{#4}[]% }% } \robust@def*\ltxkeys@choicekey@c#1#2#3#4[#5]{% - \ltxkeys@findneedvalue{#1}% - \ifltxkeys@st\ltxkeys@definedefault\ltxkeys@tkey{#5}\fi - \ltxkeys@saveinitialkeyvals{}\ltxkeys@tkey{#5}% + \ltxkeys@commanormalize{#2}\ltxkeys@tempa + \edef\ltxkeys@tempa{\unexpanded{{#1}}{\expandcsonce\ltxkeys@tempa}}% \cptexpanded{% - \ifltxkeys@pl\ltxkeys@choicekey@e\else\ltxkeys@choicekey@d\fi - \cptmakecs{\ltxkeys@hdr\ltxkeys@tkey}% + \noexpand\expandafter + \ifltxkeys@pl\ltxkeys@choicekey@f\else\ltxkeys@choicekey@e\fi }% - {#2}{#3}{#4}% + \ltxkeys@tempa{#3}{#4}{#5}% } -\robust@def*\ltxkeys@choicekey@d#1#2#3#4#5{% - \ltxkeys@choicekey@f{#1}{#2}{#3}{#4}{{#5\relax}}% +\robust@def*\ltxkeys@choicekey@d#1#2#3{% + \ltxkeys@findpointers{#2}% + \ltxkeys@debug{==}{Choice key '\ltxkeys@tkey' is being defined}% + \ltxkeys@checkdefkey + \ifltxkeys@st\ltxkeys@definedefault\ltxkeys@tkey{#3}\fi + \ltxkeys@saveinitialkeyvals{choice}\ltxkeys@tkey{#3}% + \edef\ltxkeys@resa##1##2##3{% + \ltxkeys@choicekey@g\cptmakecs{\ltxkeys@hdr\ltxkeys@tkey}% + {#1\ltxkeys@tkey}{##1}{##2}{##3}% + }% } \robust@def*\ltxkeys@choicekey@e#1#2#3#4#5#6{% - \ltxkeys@choicekey@f{#1}{#2}{#3}{#4}{{#5\relax}{#6\relax}}% + \edef\ltxkeys@loopcbk##1{% + \ltxkeys@choicekey@d{#1}{##1}\unexpanded{{#5}}% + \noexpand\ltxkeys@resa\unexpanded{{#3}{#4}{{#6}}}% + }% + \ifinsetTF,{#2}{% + \def\ltxkeys@do##1{\ltxkeys@loopcbk{##1}}% + \ltxkeys@parse1{#2}% + }{% + \ltxkeys@loopcbk{#2}% + }% +} +\robust@def*\ltxkeys@choicekey@f#1#2#3#4#5#6#7{% + \edef\ltxkeys@loopcbk##1{% + \ltxkeys@choicekey@d{#1}{##1}\unexpanded{{#5}}% + \noexpand\ltxkeys@resa\unexpanded{{#3}{#4}{{#6}{#7}}}% + }% + \ifinsetTF,{#2}{% + \def\ltxkeys@do##1{\ltxkeys@loopcbk{##1}}% + \ltxkeys@parse1{#2}% + }{% + \ltxkeys@loopcbk{#2}% + }% } -\robust@def*\ltxkeys@choicekey@f#1#2#3#4#5{% +\robust@def*\ltxkeys@choicekey@g#1#2#3#4#5{% \ifinsetTF{/.code=}{#4}{% \def\ltxkeys@tempa{\ltxkeys@executechclist}% }{% @@ -869,15 +1651,15 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \csn@edef{#2}{\noexpand\unexpanded{####1}}% \cptmakecs{cpt@st\ifltxkeys@st true\else false\fi}% \cptmakecs{cpt@pl\ifltxkeys@pl true\else false\fi}% - \ifcpt@cl + \ifltxkeys@cl \edef\noexpand\reserved@a{####1}% \else \edef\noexpand\reserved@a{\noexpand\unexpanded{####1}}% \fi - \def\noexpand\reserved@b{\unexpanded{\ltxkeys@cc@b,[#3]}}% + \def\noexpand\reserved@b{\unexpanded{\ltxkeys@cc@b,(#3)}}% \unexpanded{\expandafter\reserved@b\expandafter{\reserved@a}}% - {\expandcsonce\ltxkeys@chclist}% - \unexpanded{#5}\expandcsonce\ltxkeys@tempa{\unexpanded{#4}}% + {\expandcsonce\ltxkeys@chclist}\unexpanded{#5}% + \expandcsonce\ltxkeys@tempa{\unexpanded{#4}}% }% \def\ltxkeys@tempa{\def#1####1}% \expandafter\ltxkeys@tempa\expandafter{#1}% @@ -907,10 +1689,10 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }{}% \else \ltxkeys@err{Invalid number '#2' while - in \string\ltxkeys@makechclist}\@ehc + in \string\ltxkeys@makechclist}\ltxkeys@ehc \fi }% - \def\csv@do##1{% + \def\ltxkeys@do##1{% \ifinsetTF{/.code=}{##1}{% \ltxkeys@tempb.##1\ltxkeys@nil }{% @@ -918,12 +1700,12 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% }% \expandafter\ifinsetTF\expandafter{\ltxkeys@keyparser}{#1}{% - \expandafter\csv@@parse\expandafter[\ltxkeys@keyparser]{#1}% + \cptexpandsecond{\ltxkeys@parse1}{[\ltxkeys@keyparser]}{#1}% }{% \ifinsetTF{,}{#1}{% - \csv@@parse[,]{#1}% + \ltxkeys@parse1[,]{#1}% }{% - \csv@@parse[,]{#1,}% + \ltxkeys@parse1[,]{#1,}% }% }% \postgroupdef\ltxkeys@chclist\endgroup @@ -944,25 +1726,19 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \robust@def*\ltxkeys@getkeyname#1=#2\ltxkeys@nil#3{% - \ltxkeys@findpointer\savevalue{#1}#3\ltxkeys@svtrue\ltxkeys@svfalse - \ltxkeys@findpointer\needvalue{#1}#3\ltxkeys@nvtrue\ltxkeys@nvfalse - \ifdefTF\ltxkeys@fromgetkeynames{% - \def#3{#1}% - }{% - \ltxkeys@trimspaces{#1}#3% - }% + \ltxkeys@findpointers{#1}% + \let#3\ltxkeys@tkey } \robust@def*\ltxkeys@getkeynames#1{% \begingroup - \def\ltxkeys@fromgetkeynames{}% \def\ltxkeys@keynames{}% \def\ltxkeys@do##1{% \ltxkeys@getkeyname##1=\ltxkeys@nil\ltxkeys@tempa \edef\ltxkeys@keynames{% - \cptliststack,\ltxkeys@keynames\expandcsonce\ltxkeys@tempa + \csliststack,\ltxkeys@keynames\expandcsonce\ltxkeys@tempa }% }% - \ifblankTF{#1}{}{\ltxkeys@kvparse{#1}}% + \ifblankTF{#1}{}{\ltxkeys@parse3{#1}}% \postgroupdef\ltxkeys@keynames\endgroup } \robust@def*\ltxkeys@getkeyvalue#1=#2\ltxkeys@nil#3{% @@ -982,178 +1758,217 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ltxkeys@getkeyname#1=\ltxkeys@nil#2% \ltxkeys@getkeyvalue#1=\ltxkeys@nil#3% } -\robust@def*\option@keys{% - \ltxkeys@notinpkgclserr\option@keys - \cpt@testst\ltxkeys@optionk@ys +\robust@def*\ltxkeys@optionkeys{% + \ltxkeys@notinpkgclserr\ltxkeys@optionkeys + \cpt@testst\ltxkeys@opti@nkeys } -\robust@def*\ltxkeys@optionk@ys{% - \if@boolTF{cpt@st}{% - \ltxkeys@testopt@g{optionkeys}{not}% +\robust@def*\ltxkeys@opti@nkeys{% + \ifboolTF{cpt@st}{% + \ltxkeys@testopt@g{opti@nk@ys}{non}% }{% - \ltxkeys@testopt@g{optionkeys}{}% + \ltxkeys@testopt@g{opti@nk@ys}{}% }% } -\robust@def*\notoption@keys{% - \ltxkeys@notinpkgclserr\notoption@keys - \ltxkeys@testopt@g{optionkeys}{not}% +\robust@def*\ltxkeys@nonoptionkeys#1{% + \ltxkeys@notinpkgclserr\ltxkeys@nonoptionkeys + \ifstrcmpTF{#1}{*}{% + \ltxkeys@warn{No star form of \string\ltxkeys@nonoptionkeys: + \MsgBrk star (*) ignored}% + \ltxkeys@testopt@g{opti@nk@ys}{non}% + }{% + \ifsingletokenTF{#1}{% + \ltxkeys@testopt@g{opti@nk@ys}{non}#1% + }{% + \ltxkeys@testopt@g{opti@nk@ys}{non}{#1}% + }% + }% } -\robust@def*\ltxkeys@optionkeys#1#2{% +\robust@def*\ltxkeys@opti@nk@ys#1#2{% \def\ltxkeys@do##1{% \ifcsndefTF{\ltxkeys@hdr##1}{% - \ifcsndefTF{\ltxkeys@hdr#1option@keys}{% + \ifcsndefTF{\ltxkeys@hdr#1optionkeys}{% \xifinsetTF{,\detokenize{##1},} - {,\cptsxdetok{\usename{\ltxkeys@hdr#1option@keys}},}{}{% - \csn@edef{\ltxkeys@hdr#1option@keys}{% - \expandcsnonce{\ltxkeys@hdr#1option@keys},% + {,\cptsxdetok{\usename{\ltxkeys@hdr#1optionkeys}},}{}{% + \csn@edef{\ltxkeys@hdr#1optionkeys}{% + \expandcsnonce{\ltxkeys@hdr#1optionkeys},% \unexpanded{##1}% }% }% }{% - \csn@def{\ltxkeys@hdr#1option@keys}{##1}% + \csn@def{\ltxkeys@hdr#1optionkeys}{##1}% }% }{% - \ltxkeys@err{Key '##1' is undefined in family '\ltxkeys@tfam' - \MsgBrk Only defined keys can be made '#1option' keys.}\@ehc + \ltxkeys@err{Key '##1' is undefined in family '\ltxkeys@tfam'} + {Only defined keys can be made '#1option' keys.}% }% }% - \ltxkeys@csvparse{#2}% + \ltxkeys@parse1{#2}% } -\robust@def*\makeoption@keys{\cpt@teststopt\ltxkeys@makeoptionkeys{KV}} -\robust@def*\ltxkeys@makeoptionkeys[#1]#2{% - \let\ifmakeoptst\ifcpt@st - \ifcsndefTF{#1@#2@initial@keyvals}{% - \edef\ltxkeys@tempa{\expandcsnonce{#1@#2@initial@keyvals}}% +\robust@def*\ltxkeys@makeoptionkeys{% + \cpt@teststopt\ltxkeys@m@keoptionkeys{KV}% +} +\robust@def*\ltxkeys@m@keoptionkeys[#1]#2{% + \let\ifltxkeys@keyst\ifcpt@st + \ifcsndefTF{#1@#2@initialkeyvals}{% + \letcstocsn\ltxkeys@tempa{#1@#2@initialkeyvals}% }{% - \ltxkeys@err{No initial key-values for family '#2'}\@ehc + \ltxkeys@err{No initial key-values for family '#2'}\ltxkeys@ehc }% \s@expandarg\ltxkeys@getkeynames\ltxkeys@tempa - \ifcsnullTF\ltxkeys@keynames{}{% - \cptexpandarg{\usename{\ifmakeoptst not\fi option@keys}[#1]{#2}}{% - \expandcsonce\ltxkeys@keynames - }% + \ltxkeys@ifcsemptyTF\ltxkeys@keynames{}{% + \cptexpandargonce + {\usename{ltxkeys@\ifltxkeys@keyst non\fi optionkeys}[#1]{#2}} + \ltxkeys@keynames }% - \undefcs\ifmakeoptst } -\robust@def*\makenotoption@keys{% - \cpt@sttrue\cpt@testopt\ltxkeys@makeoptionkeys{KV}% +\robust@def*\ltxkeys@makenonoptionkeys{% + \cpt@sttrue\cpt@testopt\ltxkeys@m@keoptionkeys{KV}% } \robust@def*\ltxkeys@handledkeys{% - \ltxkeys@testopt@h{h@ndledkeys}% + \ltxkeys@testopt@g{h@ndledkeys}{handled}% } +\newletcs\ltxkeys@addhandledkeys\ltxkeys@handledkeys \robust@def*\ltxkeys@removehandledkeys{% - \ltxkeys@testopt@h{rem@vehandledkeys}% + \ltxkeys@testopt@g{rem@vehandledkeys}{handled}% } \robust@def*\ltxkeys@undefhandledkeys{% - \cpt@testcl{\ltxkeys@testopt@h{undefh@ndledkeys}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{undefh@ndledkeys}{handled}}% } \robust@def*\ltxkeys@emptifyhandledkeys{% - \cpt@testcl{\ltxkeys@testopt@h{emptifyh@ndledkeys}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{emptifyh@ndledkeys}{handled}}% +} +\robust@def*\ltxkeys@savevaluekeys{% + \ltxkeys@testopt@g{h@ndledkeys}{savevalue}% +} +\newletcs\ltxkeys@addsavevaluekeys\ltxkeys@savevaluekeys +\robust@def*\ltxkeys@removesavevaluekeys{% + \ltxkeys@testopt@g{rem@vehandledkeys}{savevalue}% +} +\robust@def*\ltxkeys@undefsavevaluekeys{% + \ltxkeys@testcl{\ltxkeys@testopt@g{undefh@ndledkeys}{savevalue}}% } -\robust@def*\ltxkeys@h@ndledkeys#1{% - \letcstocsn\ltxkeys@rsvda{\ltxkeys@hdr handledkeys}% +\robust@def*\ltxkeys@emptifysavevaluekeys{% + \ltxkeys@testcl{\ltxkeys@testopt@g{emptifyh@ndledkeys}{savevalue}}% +} +\robust@def*\ltxkeys@h@ndledkeys#1#2{% + \letcstocsn\ltxkeys@rsvda{\ltxkeys@hdr#1keys}% \def\ltxkeys@do##1{% \ifcsndefTF{\ltxkeys@hdr##1}{% \def\ltxkeys@tempb{##1}% \ifdefTF\ltxkeys@rsvda{% \oifinset@sp@TF,\ltxkeys@tempb\ltxkeys@rsvda{}{% \edef\ltxkeys@rsvda{% - \cptliststack,\ltxkeys@rsvda\unexpanded{##1}% + \csliststack,\ltxkeys@rsvda\unexpanded{##1}% }% }% }{% \let\ltxkeys@rsvda\ltxkeys@tempb }% }{% - \ltxkeys@err{Key '##1' is undefined in family '\ltxkeys@tfam' - \MsgBrk Only defined keys can be made handled keys.}\@ehc + \ltxkeys@err{Key '##1' is undefined in family + '\ltxkeys@tfam'} + {Only defined keys can be made #1-keys.}% }% }% - \ltxkeys@csvparse{#1}% - \letcsntocs{\ltxkeys@hdr handledkeys}\ltxkeys@rsvda + \ltxkeys@parse1{#2}% + \letcsntocs{\ltxkeys@hdr#1keys}\ltxkeys@rsvda } -\robust@def*\ltxkeys@rem@vehandledkeys#1{% - \letcstocsn\ltxkeys@rsvda{\ltxkeys@hdr handledkeys}% +\robust@def*\ltxkeys@rem@vehandledkeys#1#2{% + \letcstocsn\ltxkeys@rsvda{\ltxkeys@hdr#1keys}% \ifdefTF\ltxkeys@rsvda{% \def\ltxkeys@do##1{% \ifcsndefTF{\ltxkeys@hdr##1}{% \def\ltxkeys@tempb{##1}% \oifinset@sp@TF,\ltxkeys@tempb\ltxkeys@rsvda{% - \let\cpt@fromrem\cpttrue\cpt@sttrue + \let\cpt@fromrem\cptswtrue\cpt@sttrue \cpt@removeoneelement[,]\ltxkeys@rsvda{##1}% }{% - \ltxkeys@warn{Key '##1' with prefix '\ltxkeys@ttpref' in family - \MsgBrk '\ltxkeys@tfam' is not a handled key: - \MsgBrk It couldn't be deleted from handled keys list.}% + \ltxkeys@warn{Key '##1' with prefix '\ltxkeys@ttpref' + in family\MsgBrk '\ltxkeys@tfam' is not a #1 key: + \MsgBrk It couldn't be deleted from #1-keys list.}% }% }{% - \ltxkeys@err{Key '##1' is undefined in family '\ltxkeys@tfam'}% - {Key '##1' with prefix '\ltxkeys@ttpref' in family - \MsgBrk '\ltxkeys@tfam' is not defined:\MsgBrk - Can't be deleted from handled keys list.}% + \ltxkeys@err{Key '##1' with prefix '\ltxkeys@ttpref' in + family\MsgBrk '\ltxkeys@tfam' is not defined.} + {I couldn't delete #1-keys.}% }% }% - \ltxkeys@csvparse{#1}% + \ltxkeys@parse1{#2}% }{% - \ltxkeys@err{No handled keys for family '\ltxkeys@tfam'}% - {No handled keys exist for prefix '\ltxkeys@ttpref' and + \ltxkeys@err{No #1 keys for family '\ltxkeys@tfam'}% + {No #1 keys exist for prefix '\ltxkeys@ttpref' and \MsgBrk family '\ltxkeys@tfam'.}% }% - \letcsntocs{\ltxkeys@hdr handledkeys}\ltxkeys@rsvda + \letcsntocs{\ltxkeys@hdr#1keys}\ltxkeys@rsvda } -\robust@def*\ltxkeys@undefh@ndledkeys{% - \ifcsndefTF{\ltxkeys@hdr handledkeys}{% - \usename{\ifcpt@cl g\fi undefcsn}{\ltxkeys@hdr handledkeys}% +\robust@def*\ltxkeys@undefh@ndledkeys#1{% + \ifcsndefTF{\ltxkeys@hdr#1keys}{% + \usename{\ifltxkeys@cl g\fi undefcsn}{\ltxkeys@hdr#1keys}% }{% - \ltxkeys@err{No handled keys for prefix '\ltxkeys@ttpref' - \MsgBrk and family '\ltxkeys@tfam': couldn't undefine}\@ehc + \ltxkeys@err{No #1 keys for prefix '\ltxkeys@ttpref' + \MsgBrk and family '\ltxkeys@tfam'} + {I couldn't undefine #1-keys.}% }% } -\robust@def*\ltxkeys@emptifyh@ndledkeys{% - \ifcsndefTF{\ltxkeys@hdr handledkeys}{% - \usename{\ifcpt@cl g\fi emptifycsn}{\ltxkeys@hdr handledkeys}% +\robust@def*\ltxkeys@emptifyh@ndledkeys#1{% + \ifcsndefTF{\ltxkeys@hdr#1keys}{% + \usename{\ifltxkeys@cl g\fi emptifycsn}{\ltxkeys@hdr#1keys}% }{% - \ltxkeys@err{No handled keys for prefix '\ltxkeys@ttpref' - \MsgBrk and family '\ltxkeys@tfam': couldn't emptify}\@ehc + \ltxkeys@err{No #1 keys for prefix '\ltxkeys@ttpref' + \MsgBrk and family '\ltxkeys@tfam'} + {I couldn't emptify #1-keys.}% }% } -\robust@def*\ltxkeys@testoptionkey#1{% - \ifcsndefFT{\ltxkeys@hdr#1option@keys}{}{% - \cpt@choicefdfalse - \def\ltxkeys@do##1{% - \s@expandarg\ifstrcmpTF\ltxkeys@tkey{##1}{% - \cpt@choicefdtrue\loopbreak - }{}% - }% - \aftercsname{\ltxkeys@csvloop*}{\ltxkeys@hdr#1option@keys}% - \if@boolFT{cpt@choicefd}{}{% - \ltxkeys@err{The following key should - \ifnullTF{#1}\@gobblespace{#1} appear in - \MsgBrk\noexpand\usepackage or \string\RequirePackage: - ^^J||\ltxkeys@ttpref, \ltxkeys@tfam, \ltxkeys@tkey||% - }\@ehc - }% +\robust@def*\ltxkeys@iftkeyinlist#1{% + \ifcsndefTF{\ltxkeys@hdr#1}{% + \letcstocsn\ltxkeys@tempa{\ltxkeys@hdr#1}% + \oifinset@sp@TF,\ltxkeys@tkey\ltxkeys@tempa + }{% + \@secondoftwo + }% +} +\robust@def*\ltxkeys@testsavevaluekey{% + \ltxkeys@debug{==}{Testing if '\ltxkeys@tkey' is a + savevalue key}% + \ltxkeys@iftkeyinlist{savevaluekeys}{% + \ltxkeys@svtrue + }{% + \ltxkeys@svfalse + \ltxkeys@debug{==}{'\ltxkeys@tkey' is not a savevalue key}% }% } -\robust@def*\ltxkeys@testneedvalkey{% +\robust@def*\ltxkeys@testoptionkey#1{% \begingroup - \cpt@choicefdfalse - \def\ltxkeys@do##1{% - \s@expandarg\ifstrcmpTF\ltxkeys@tkey{##1}{% - \cpt@choicefdtrue\loopbreak - }{}% + \def\ltxkeys@tempc{\ifstrcmpTF{#1}{non}{not }{}}% + \def\ltxkeys@tempd{\ifstrcmpTF{#1}{non}{}{not }}% + \ltxkeys@debug{==}{Testing if '\ltxkeys@tkey' is + \ltxkeys@tempc option key}% + \ltxkeys@iftkeyinlist{#1optionkeys}{% + \ltxkeys@err + {The following key should \ltxkeys@tempc + appear in \noexpand\usepackage or \string\RequirePackage: + ||\ltxkeys@ttpref, \ltxkeys@tfam, \ltxkeys@tkey||}% + {\ltxkeys@tempc option key error.}% + }{% + \ltxkeys@debug{==}{Key '\ltxkeys@tkey' is + \ltxkeys@tempd option key}% }% - \aftercsname{\ltxkeys@csvloop*}{\ltxkeys@hdr needvalue@keys}% - \ifcpt@choicefd + \endgroup +} +\robust@def*\ltxkeys@testneedvaluekey{% + \ltxkeys@debug{==}{Testing if '\ltxkeys@tkey' is a needvalue key}% + \ltxkeys@iftkeyinlist{needvaluekeys}{% \ltxkeys@err{You're required to supply a value for - \MsgBrk key '\ltxkeys@tkey' in family '\ltxkeys@tfam'}{% - Please supply a value for key '\ltxkeys@tkey' of families + \MsgBrk key '\ltxkeys@tkey' in family '\ltxkeys@tfam'} + {Please supply a value for key '\ltxkeys@tkey' of families \MsgBrk'\ltxkeys@fams' and rerun. The author of this key - \MsgBrk meant it to require a user value. - }% - \fi - \endgroup + \MsgBrk meant it to require a user value.}% + }{% + \ltxkeys@debug{==}{'\ltxkeys@tkey' is not a + needvalue key}% + }% } -\new@def*\ltxkeys@setbool#1{% +\robust@def*\ltxkeys@setbool#1{% \xifstrcmpTF{#1}{on}{% \def#1{true}% }{% @@ -1164,19 +1979,28 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% }% } -\robust@def*\ltxkeys@accumkeyvals#1{% - \ltxkeys@ifinlistTF(1)% - {\ltxkeys@setmnkey,\setmnkey,\setaliaskey}{#1}% - \ltxkeys@twktrue\ltxkeys@twkfalse +\robust@def*\ltxkeys@accumkeyvals#1#2{% + \ifblankTF{#1}{% + \ltxkeys@twkfalse + }{% + \ltxkeys@ifinlistTF(1){% + \ltxkeys@setaliaskey,\setaliaskey + }{% + #2% + }{% + \ltxkeys@twktrue + }{% + \ltxkeys@twkfalse + }% + }% \begingroup + \edef\elt{\ifblankTF{#1}{}{\unexpanded{#1}}}% \edef\key@vals{% - \cptliststack,\key@vals\expandcsonce\key@name=% + \csliststack,\key@vals\expandcsonce\key@name=% \ifltxkeys@dep - \expandcsonce\key@default + \expandcsonce\elt \else - \oifstrcmpTF\key@default{true}{false}{% - \expandcsonce\key@default - }% + \ifstrcmpTF{#1}{true}{false}{\expandcsonce\elt}% \fi }% \ifltxkeys@ssk @@ -1193,47 +2017,36 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \endlinechar\m@one \cpt@teststopt\ltxkeys@definekeys@a{KV}% } -\robust@def*\ltxkeys@definekeys@a[#1]{% - \gletcs\ifdefkeyst\ifcpt@st - \cpt@testfam{\ltxkeys@definekeys@b#1}% +\robust@def*\ltxkeys@definekeys@a[#1]#2{% + \gletcs\ifltxkeys@keyst\ifcpt@st + \cpt@testopt{\expandafter\endgroup\ltxkeys@definekeys@b{#1}{#2}}{}% } -\robust@def*\ltxkeys@definekeys@b#1<#2>{% - \cpt@testopt - {\expandafter\endgroup\ltxkeys@definekeys@c{#1}{#2}}{}% -} -\robust@def*\ltxkeys@definekeys@c#1#2[#3]#4{% +\robust@def*\ltxkeys@definekeys@b#1#2[#3]#4{% + \ltxkeys@makepf{#1}% + \ltxkeys@makehdr{#2}% + \ltxkeys@dectrue \begingroup - \ltxkeys@trimspaces{#1}\key@prefix - \ltxkeys@trimspaces{#2}\key@family - \ltxkeys@trimspaces{#3}\macro@prefix - \toks@{\undefcs\ifdefkeyst}% - \def\key@vals{}% - % We want \ltxkeys@definekeys to have a slightly different - % syntax to \ltxkeys@declarekeys. So we use '=' here. But - % the equality sign can always be replaced with '/' and - % this won't cause any problems: - \def\ltxkeys@tempa##1\ltxkeys@nil{% - \expandafter\ltxkeys@splitc\reserved@a/##1//\ltxkeys@nil - }% - \def\ltxkeys@splita##1={% - \def\reserved@a{##1}\ltxkeys@tempa.% - }% - \def\ltxkeys@splitb##1/{% - \def\reserved@a{##1}\ltxkeys@tempa.% + \ltxkeys@trimspacesset{% + {#1}\key@pref,{#2}\key@fam,{#3}\macro@pref }% + \toks@{}% + \def\key@vals{}% + \def\ltxkeys@splita##1={\ltxkeys@splitc##1/.}% + \def\ltxkeys@splitb##1/{\ltxkeys@splitc##1/.}% \def\ltxkeys@splitc##1/##2/##3/##4\ltxkeys@nil{% \ifblankTF{##1}{% - \ifblankTF{##2##3}{}{% - \ltxkeys@err{Empty key name while in - \string\ltxkeys@definekeys}\@ehc - }% + \ltxkeys@err{Empty key name while in + \string\ltxkeys@definekeys}\ltxkeys@ehc }{% - \ltxkeys@findneedvalue{##1}% + \ltxkeys@findpointers{##1}% \let\key@name\ltxkeys@tkey - \ifdefkeyst - \ifcsndefFT{\key@prefix @\key@family @\key@name}{}{% + \ifltxkeys@keyst + \ifcsndefFT{\ltxkeys@iffirstnull\key@pref @% + \ltxkeys@iffirstnull\key@fam @\key@name + }{}{% \ltxkeys@err{Key '\key@name' already defined in family - \MsgBrk '#2' with prefix '#1'}\@ehc + \MsgBrk '\iflacus#2\dolacus???\else#2\fi' with prefix + '\iflacus#1\dolacus???\else#1\fi'}\ltxkeys@ehc }% \fi \oifblankTF{\@gobble##2}{% @@ -1241,7 +2054,12 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }{% \s@expandarg\ltxkeys@trimspaces{\@gobble##2}\key@default }% - \ltxkeys@accumkeyvals{##3}% + \edef\key@macro{\unexpanded{##3}}% + \ltxkeys@stripdotcode\key@macro + \cptexpandsecond\ltxkeys@accumkeyvals{% + {\ifx\key@default\ltxkeys@rej\else\expandcsonce\key@default\fi}% + {\ifx\key@macro\ltxkeys@rej\else\expandcsonce\key@macro\fi}% + }% \def\defwith{\ltxkeys@boolkey}% \oifstrcmpTF\key@default{true}{}{% \oifstrcmpTF\key@default{false}{}{% @@ -1251,128 +2069,180 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \cptexpanded{% \toks@{\the\toks@ \cptmakecs{ltxkeys@twk\ifltxkeys@twk true\else false\fi}% - \defwith[\key@prefix]{\key@family}% - \ifx\macro@prefix\@empty\else[\macro@prefix]\fi - {\key@name}[\expandcsonce\key@default]{\unexpanded{##3}}% + \defwith[\key@pref]{\key@fam}% + \ifx\macro@pref\@empty\else[\macro@pref]\fi + {\expandcsonce\key@name}% + \ifx\key@default\ltxkeys@rej\else[\expandcsonce\key@default]\fi + \ifx\key@macro\ltxkeys@rej{}\else{\expandcsonce\key@macro}\fi }% }% }% }% - \long\def\csv@do##1{% - \cpt@checkeq##1\cpt@nil{% - \ltxkeys@splita##1\ltxkeys@nil + \def\ltxkeys@do##1{% + \ltxkeys@removedotcode{##1}\ltxkeys@tempa + \expandafter\ltxkeys@in\expandafter*\expandafter + =\expandafter{\ltxkeys@tempa}{% + \expandafter\ltxkeys@splita\ltxkeys@tempa/^?/^?/\ltxkeys@nil }{% - \ltxkeys@splitb##1///\ltxkeys@nil + \expandafter\ltxkeys@splitb\ltxkeys@tempa/^?/^?/\ltxkeys@nil }% }% - \expandafter\csv@@parse\expandafter[\ltxkeys@keyparser]{#4}% + \cptexpandsecond{\ltxkeys@parse1}{[\ltxkeys@keyparser]}{#4}% \cptexpandsecond\endgroup{% \the\toks@ \noexpand\ltxkeys@twkfalse - \ifcsnullTF\key@vals{}{\noexpand\ltxkeys@setkeys - [\key@prefix]{\key@family}{\expandcsonce\key@vals}% + \ltxkeys@ifcsemptyTF\key@vals{}{% + \noexpand\ltxkeys@setkeys[\key@pref]% + {\key@fam}{\expandcsonce\key@vals}% }% }% + \ltxkeys@decfalse } \new@def*\ltxkeys@badkeytypes{} -\robust@def*\ltxkeys@keytypeerr#1{% - \edef\ltxkeys@badkeytypes{\cptliststack,\ltxkeys@badkeytypes#1}% -} \robust@def*\ltxkeys@declarekeys{% \begingroup \endlinechar\m@one - \cpt@teststopt\ltxkeys@declarekeys@a{KV}% + \cpt@testst{\cpt@testpnopt\ltxkeys@declarekeys@a{}}% } -\robust@def*\ltxkeys@declarekeys@a[#1]{% - \gletcs\ifdefkeyst\ifcpt@st - \cpt@testfam{\ltxkeys@declarekeys@b{#1}}% +\robust@def*\ltxkeys@declarekeys@a(#1){% + \cpt@testopt{\ltxkeys@declarekeys@b{#1}}{KV}% } -\robust@def*\ltxkeys@declarekeys@b#1<#2>{% - \cpt@testopt{\expandafter\endgroup\ltxkeys@declarekeys@c{#1}#2}{}% +\robust@def*\ltxkeys@declarekeys@b#1[#2]#3{% + \gletcs\ifltxkeys@keyst\ifcpt@st + \cpt@testopt{\expandafter\endgroup + \ltxkeys@declarekeys@c{#1}{#2}{#3}}{}% } -\robust@def*\ltxkeys@declarekeys@c#1#2[#3]#4{% +\robust@def*\ltxkeys@declarekeys@c#1#2#3[#4]#5{% + \ltxkeys@makepf{#2}% + \ltxkeys@makehdr{#3}% \ltxkeys@dectrue \begingroup - \ltxkeys@trimspaces{#1}\key@prefix - \ltxkeys@trimspaces{#2}\key@family - \ltxkeys@trimspaces{#3}\macro@prefix + \ltxkeys@trimspacesset{% + {#2}\key@pref,{#3}\key@fam,{#4}\macro@pref + }% \def\key@vals{}% - \toks@{\undefcs\ifdefkeyst}% + \toks@{}% \def\ltxkeys@splita##1/##2/{% - \ifblankTF{##1##2}{% - \ltxkeys@warn{Something wrong in using \string\ltxkeys@declarekeys}\@ehc - \expandafter\gobble@to@sentinel\expandafter\ltxkeys@nil\ltxkeys@keyparser - }{% - \ifblankTF{##2}{% - \ltxkeys@err{Empty key name in \string\ltxkeys@declarekeys}\@ehc - }{% - \ltxkeys@trimspaces{##1}\key@type - \ltxkeys@findneedvalue{##2}% - \let\key@name\ltxkeys@tkey - \ifdefkeyst - \ifcsndefFT{\key@prefix @\key@family @\key@name}{}{% - \ltxkeys@err{Key '\key@name' already defined in family - \MsgBrk '#2' with prefix '#1'}\@ehc - }% - \fi - \oifstrcmpFT\key@type{choice}{}{% - \s@expandarg\ltxkeys@splitchoice\key@name - }% - \ltxkeys@splitb.% - }% + \ifescapedTF{##1}{% + \ltxkeys@err{Key type can't be a macro: '\detokenize{##1}'} + \ltxkeys@ehc + }{}% + \ltxkeys@trimspacesset{{##1}\key@type,{##2}\key@name}% + \xifstrcmpTF\key@type{choice}{% + \expandafter\ltxkeys@splitchoice\expandafter{\key@name}% + }{}% + \xifinsetTF{=}{\cptoxdetok\key@type}{% + \ltxkeys@err{The syntax of \noexpand\ltxkeys@definekeys may + \MsgBrk have been used for \string\ltxkeys@declarekeys. + \MsgBrk This may have come from \noexpand\ltxkeyscmd or + \MsgBrk \string\ltxkeysenv}\ltxkeys@ehc + }{}% + \ifx\key@type\@empty + \ltxkeys@err{Empty key type in \string\ltxkeys@declarekeys} + \ltxkeys@ehc + \fi + \ifx\key@name\@empty + \ltxkeys@err{Empty key name in \string\ltxkeys@declarekeys} + \ltxkeys@ehc + \fi + \ltxkeys@ifrejname{% + \ltxkeys@err{Wrong syntax for \string\ltxkeys@declarekeys} + \ltxkeys@ehc }% + \ifltxkeys@inkeycmd + \xifstrcmpFT\key@type{ord}{}{\def\key@type{cmd}}% + \fi + \expandafter\ltxkeys@findpointers\expandafter{\key@name}% + \let\key@name\ltxkeys@tkey + \ifx\key@type\key@name + \ltxkeys@err{Key type '\key@type' and key name '\key@name' + are identical}{Maybe you gave key type both in parenthesis + and in key list.}% + \fi + \ifltxkeys@keyst + \ifcsndefFT{\ltxkeys@hdr\key@name}{}{% + \ltxkeys@err{Key '\key@name' already defined in family + \MsgBrk '\iflacus#3\dolacus???\else#3\fi' with prefix + '\iflacus#2\dolacus???\else#2\fi'}\ltxkeys@ehc + }% + \fi + \ltxkeys@splitb.% }% \def\ltxkeys@splitb##1/##2/##3/##4\ltxkeys@nil{% \edef\key@default{\expandcsonce{\@gobble##1}}% - \ifcsnullTF\key@default{% - \oifstrcmpFT\key@type{bool}{}{\def\key@default{true}}% + \ltxkeys@ifcsemptyTF\key@default{% + \xifstrcmpTF\key@type{bool}{\def\key@default{true}}{}% }{% \ltxkeys@trimspacesincs\key@default }% - \oifinsetFT{sty}\key@type{}{\ltxkeys@declarekeys@d{##3}}% - \ltxkeys@accumkeyvals{##2}% - \def\ltxkeys@tempa{ord}% + \xifstrcmpTF\key@type{bool}{% + \ifx\key@default\ltxkeys@rej + \def\key@default{true}% + \ltxkeys@debug{!!}{Boolean key '\key@name' + has no default; 'true' used}% + \else + \begingroup + \def\ltxkeys@true{true}\def\ltxkeys@false{false}% + \ifcase0\ifx\key@default\ltxkeys@true\else\ifx\key@default + \ltxkeys@false\else1\fi\fi\relax\else + \ltxkeys@err{Invalid default value for boolean key + '\key@name'}\ltxkeys@ehc + \fi + \endgroup + \fi + }{}% + \edef\key@macro{\unexpanded{##2}}% + \ltxkeys@stripdotcode\key@macro + \expandafter\ltxkeys@striplaststar\key@type + \@empty*\@empty\ltxkeys@nil\key@@type + \xifinsetFT{,sty,}{,\key@@type,}{}{% + \ltxkeys@trimspaces{##3}\key@dependants + \ltxkeys@ifxTF\key@dependants\ltxkeys@rej{% + \def\key@dependants{}% + }{% + \expandafter\ltxkeys@declarekeys@e\expandafter{\key@dependants}% + }% + }% + \cptexpandsecond\ltxkeys@accumkeyvals{% + {\ifx\key@default\ltxkeys@rej\else\expandcsonce\key@default\fi}% + {\ifx\key@macro\ltxkeys@rej\else\expandcsonce\key@macro\fi}% + }% + \def\dkey@macro{% + \ifx\key@macro\ltxkeys@rej{}\else{\expandcsonce\key@macro}\fi + }% + \def\dkey@default{% + \ifx\key@default\ltxkeys@rej\else[\expandcsonce\key@default]\fi + }% + \s@expandarg\ltxkeys@declarekeys@d\key@type + \def\reserved@a{ord}% \edef\ltxkeys@tempa{% - [\key@prefix]{\key@family}% - \ifx\key@type\ltxkeys@tempa\else\ifx\macro@prefix\@empty\else - [\macro@prefix]\fi\fi - {\key@name}% + [\key@pref]{\key@fam}% + \ifx\key@type\reserved@a\else\ifx\macro@pref\@empty\else + [\macro@pref]\fi\fi{\expandcsonce\key@name}% }% \cptpassexpanded{% \toks@{\the\toks@ \cptmakecs{ltxkeys@twk\ifltxkeys@twk true\else false\fi}% - \IfStrEqCase[\ltxkeys@keytypeerr{\expandcsonce\key@type}]% - {\key@type}{% - {sty}{% - \ltxkeys@stylekey\ltxkeys@tempa - [\expandcsonce\key@default](\expandcsonce\ltxkeys@dependant)% - {\unexpanded{##2}}% - }% - {sty*}{% - \ltxkeys@stylekey*\ltxkeys@tempa - [\expandcsonce\key@default](\expandcsonce\ltxkeys@dependant)% - {\unexpanded{##2}}% - }% - {cmd}{% - \ltxkeys@cmdkey\ltxkeys@tempa - [\expandcsonce\key@default]{\unexpanded{##2}}% - }% - {bool}{% - \ltxkeys@boolkey+\ltxkeys@tempa - [\expandcsonce\key@default]{\unexpanded{##2}}% - {\ltxkeys@keyvalerr}% - }% - {choice}{% - \ltxkeys@choicekey*+\ltxkeys@tempa - [\unexpanded{\userinput\nr}]{\expandcsonce\ltxkeys@alt}% - [\expandcsonce\key@default]{\unexpanded{##2}}% - {\ltxkeys@keyvalerr}% - }% - {ord}{% - \ltxkeys@ordkey\ltxkeys@tempa - [\expandcsonce\key@default]{\unexpanded{##2}}% - }% - }% + \ifcase\currmatch\relax + \ltxkeys@cmdkey\ltxkeys@tempa\dkey@default\dkey@macro + \or + \ltxkeys@boolkey+\ltxkeys@tempa\dkey@default + \dkey@macro{\ltxkeys@keyvalerr}% + \or + \ltxkeys@ordkey\ltxkeys@tempa\dkey@default\dkey@macro + \or + \ltxkeys@choicekey*+\ltxkeys@tempa + [\unexpanded{\userinput\order}]{\expandcsonce\ltxkeys@alt}% + \dkey@default\dkey@macro{\ltxkeys@keyvalerr}% + \or + \ltxkeys@stylekey\ltxkeys@tempa\dkey@default + (\expandcsonce\key@dependants)\dkey@macro + \or + \ltxkeys@stylekey*\ltxkeys@tempa\dkey@default + (\expandcsonce\key@dependants)\dkey@macro + \else + \cptgaddtolist\noexpand\ltxkeys@badkeytypes{\key@type}% + \fi }% }% }% @@ -1381,84 +2251,217 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }{% \def\ltxkeys@keyparser{;}% }% - \def\csv@do##1{% - \ltxkeys@splita##1/////\ltxkeys@nil + \ifblankTF{#1}{% + \edef\ltxkeys@tempa{\unexpanded{#5}}% + }{% + \def\ltxkeys@tempa{}% + \def\ltxkeys@do##1{% + \edef\ltxkeys@tempa{% + \expandafter\csliststack\ltxkeys@keyparser + \ltxkeys@tempa#1/\unexpanded{##1}% + }% + }% + \cptexpandsecond{\ltxkeys@parse0}{[\ltxkeys@keyparser]}{#5}% }% - \expandafter\csv@@loop\expandafter[\ltxkeys@keyparser]{#4}% + \def\ltxkeys@do##1{% + \ifblankTF{##1}{}{% + \ltxkeys@splita##1/^?/^?/^?/^?/\ltxkeys@nil + }% + }% + \cptexpandsecond{\ltxkeys@parse0} + {[\ltxkeys@keyparser]{\expandcsonce\ltxkeys@tempa}}% \cptexpandsecond\endgroup{% \the\toks@ \noexpand\ltxkeys@twkfalse \edef\noexpand\key@vals{\ox@unexpanded\key@vals}% }% \ifx\ltxkeys@badkeytypes\@empty\else - \cpt@err{Invalid key types '\ltxkeys@badkeytypes'}\@ehc + \cpt@err{Invalid key types '\ltxkeys@badkeytypes'}\ltxkeys@ehc \fi - \ifcsnullTF\key@vals{}{% - \cptexpandargonce{\ltxkeys@setkeys[#1]{#2}}\key@vals + \ltxkeys@ifcsemptyTF\key@vals{}{% + \cptexpandargonce{\ltxkeys@setkeys[#2]{#3}}\key@vals }% \ltxkeys@decfalse } \robust@def\ltxkeys@declarekeys@d#1{% + \ltxkeys@findmatch + {#1}{cmd:0,bool:1,ord:2,choice:3,sty:4,syt*:5}% + {\def\currmatch{-1}}% +} +\robust@def\ltxkeys@declarekeys@e#1{% + \ifblankTF{#1}{% + \def\key@dependants{}\cpt@gobbletorelax + }{}% \begingroup + \ifinsetTF{>}{#1}{}{% + \ltxkeys@warn{Missing '>' in dependants of key '\ltxkeys@tkey'}% + }% + \def\ltxkeys@splita##1>##2>{% + \def\key@type{##1}% + \edef\key@name{\unexpanded{##2}}% + \ltxkeys@splitb.% + }% + \def\ltxkeys@splitb##1>##2>##3\ltxkeys@nil{% + \edef\key@default{\expandcsonce{\@gobble##1}}% + \edef\key@macro{\unexpanded{##2}}% + \ltxkeys@stripdotcode\key@macro + \ltxkeys@ifrejname{% + \ltxkeys@err{Wrong syntax for dependants keys in + \MsgBrk\string\ltxkeys@declarekeys}\ltxkeys@ehc + }% + \edef\key@dependants{% + \expandafter\csliststack\ltxkeys@keyparser\key@dependants + \key@type/\expandcsonce\key@name + \ifx\key@default\ltxkeys@rej\else/\expandcsonce\key@default\fi + \ifx\key@macro\ltxkeys@rej\else/\expandcsonce\key@macro\fi + }% + }% + \def\key@dependants{}% + \def\ltxkeys@do##1{% + \ltxkeys@splita##1>^?>^?>^?>\ltxkeys@nil + }% + \ltxkeys@parse1[,]{#1}% + \postgroupdef\key@dependants\endgroup + \cpt@relax +} +\robust@def*\ltxkeys@savexfamilykeys{% + \begingroup + \endlinechar\m@one + \cpt@testst{\cpt@testltopt\ltxkeys@savexf@milykeys{}}% +} +\robust@def*\ltxkeys@savexf@milykeys<#1>{% + \cpt@testpnopt{\ltxkeys@savexf@milyk@ys{#1}}{}% +} +\robust@def*\ltxkeys@savexf@milyk@ys#1(#2)#3{% \ifblankTF{#1}{% - \def\ltxkeys@dependant{}% + \ltxkeys@err{Empty set-identifier for \string\xfamilykeys: + ||\detokenize{#3}||}\ltxkeys@ehc + }{}% + \ltxkeys@trimspaces{#1}\ltxkeys@tempb + \ifcsndefTF{xfamilykeys@id@\ltxkeys@tempb}{% + \ltxkeys@err{xfamilykeys identifier '\ltxkeys@tempb' + already in use}\ltxkeys@ehc + }{}% + \cpt@stchoose{cpt@st}{#3}\ltxkeys@tempa\ltxkeys@savexfamilykeys + \ifblankTF{#2}{}{% + \def\ltxkeys@do##1{% + \edef\ltxkeys@tempa{% + \expandafter\csliststack\ltxkeys@keyparser + \ltxkeys@tempa#2/\unexpanded{##1}% + }% + }% + \cptexpandsecond{\def\ltxkeys@tempa{}\ltxkeys@parse1} + {[\ltxkeys@keyparser]{\expandcsonce\ltxkeys@tempa}}% + }% + \cptexpandsecond{\endgroup\csn@edef} + {{xfamilykeys@id@\ltxkeys@tempb}{\ox@unexpanded\ltxkeys@tempa}}% +} + +\robust@def*\ltxkeys@definexfamilykeys{% + \begingroup + \cpt@testst{\cpt@testltopt\ltxkeys@d@finexfamilykeys{}}% +} +\robust@def*\ltxkeys@d@finexfamilykeys<#1>{% + \edef\defwith{\ltxkeys@declarekeys\ifcpt@st*\fi}% + \ifblankTF{#1}{% + \ltxkeys@err{Invalid empty xfamilykeys identifier + \MsgBrk in \string\ltxkeys@definexfamilykeys}\ltxkeys@ehc + }{}% + \ltxkeys@trimspaces{#1}\ltxkeys@tempa + \ifcsndefTF{xfamilykeys@id@\ltxkeys@tempa}{% + \expandafter\cpt@testopt\expandafter{\expandafter + \ltxkeys@d@fin@xfamilykeys\expandafter{\ltxkeys@tempa}}{KV}% }{% - \ifinsetFT{>}{#1}{% - \ltxkeys@err{Missing key type and name in dependant key - ^^J\detokenize{#1}'}{No '>' in dependant key.}% - \def\ltxkeys@dependant{}% + \ltxkeys@err{Unknown xfamilykeys identifier '\ltxkeys@tempa' + \MsgBrk in \string\ltxkeys@definexfamilykeys}\ltxkeys@ehc + }% +} +\robust@def*\ltxkeys@d@fin@xfamilykeys#1[#2]#3{% + \cpt@testopt{\ltxkeys@d@fin@xf@milykeys{#1}{#2}{#3}}{}% +} +\robust@def*\ltxkeys@d@fin@xf@milykeys#1#2#3[#4]#5{% + \def\ltxkeys@na{#5}% + \def\ltxkeys@splita##1/##2/{% + \ltxkeys@trimspacesset{{##1}\key@type,{##2}\key@n@me}% + \xifstrcmpTF\key@type{choice}{% + \expandafter\ltxkeys@splitchoice\expandafter{\key@n@me}% }{% - \def\ltxkeys@tempa##1>##2>##3>##4>##5\ltxkeys@nil{% - \edef\ltxkeys@dependant{\unexpanded{##1/##2/##3/##4}}% + \let\key@name\key@n@me + }% + \ltxkeys@splitb.% + }% + \def\ltxkeys@splitb##1/##2/##3/##4\ltxkeys@nil{% + \edef\key@default{\expandcsonce{\@gobble##1}}% + \edef\key@macro{\unexpanded{##2}}% + \edef\key@dependants{\unexpanded{##3}}% + \oifinset@sp@TF,\key@name\ltxkeys@na{}{% + \let\do\expandcsonce + \edef\ltxkeys@tempa{% + \expandafter\csliststack\ltxkeys@keyparser + \ltxkeys@tempa\key@type/\do\key@n@me + \ifx\key@default\ltxkeys@rej\else/\do\key@default\fi + \ifx\key@macro\ltxkeys@rej\else/\do\key@macro\fi + \ifx\key@dependants\ltxkeys@rej\else/\do\key@dependants\fi }% - \ltxkeys@tempa#1>>>>\ltxkeys@nil }% }% - \postgroupdef\ltxkeys@dependant\endgroup + \def\ltxkeys@tempa{}% + \def\ltxkeys@do##1{% + \ltxkeys@splita##1/^?/^?/^?/^?/\ltxkeys@nil + }% + \cptexpandsecond{\ltxkeys@parse1} + {[\ltxkeys@keyparser]{\expandcsnonce{xfamilykeys@id@#1}}}% + \cptexpandsecond\endgroup + {\defwith[#2]{#3}[#4]{\expandcsonce\ltxkeys@tempa}}% } + \robust@def*\ltxkeys@presetkeys{% - \cpt@testcl{\ltxkeys@testopt@g{ppsetkeys}{pre}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{ppsetkeys}{pre}}% } +\newletcs\ltxkeys@addpresetkeys\ltxkeys@presetkeys \robust@def*\ltxkeys@removepresetkeys{% - \cpt@testcl{\ltxkeys@testopt@g{removeppsetkeys}{pre}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{removeppsetkeys}{pre}}% } \robust@def*\ltxkeys@undefpresetkeys{% - \cpt@testcl{\ltxkeys@testopt@g{undefppsetkeys}{pre}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{undefppsetkeys}{pre}}% } \robust@def*\ltxkeys@postsetkeys{% - \cpt@testcl{\ltxkeys@testopt@g{ppsetkeys}{post}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{ppsetkeys}{post}}% } +\newletcs\ltxkeys@addpostsetkeys\ltxkeys@postsetkeys \robust@def*\ltxkeys@removepostsetkeys{% - \cpt@testcl{\ltxkeys@testopt@g{removeppsetkeys}{post}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{removeppsetkeys}{post}}% } \robust@def*\ltxkeys@undefpostsetkeys{% - \cpt@testcl{\ltxkeys@testopt@g{undefppsetkeys}{post}}% + \ltxkeys@testcl{\ltxkeys@testopt@g{undefppsetkeys}{post}}% } \robust@def*\ltxkeys@ppsetkeys#1#2{% - \def\ltxkeys@rsvda{}\def\ltxkeys@rsvdb{}% + \def\ltxkeys@rsvda{}% + \def\ltxkeys@rsvdb{}% \def\ltxkeys@do##1{% \ltxkeys@splitkeyval##1\ltxkeys@nil\ltxkeys@tkey\ltxkeys@tval \ifcsndefFT{\ltxkeys@hdr\ltxkeys@tkey}{% - \ltxkeys@err{Key '\ltxkeys@currtriple' is undefined.}\@ehc + \ltxkeys@err{Key '\ltxkeys@currtriple' is undefined.} + \ltxkeys@ehc }{% \ifcsndefTF{@\ltxkeys@hdr#1setkeys}{}{% - \emptifycsn{@\ltxkeys@hdr#1setkeys}% + \cptemptifycsn{@\ltxkeys@hdr#1setkeys}% }% \xifinsetTF{,\cptoxdetok\ltxkeys@tkey,} {,\cptsxdetok{\usename{@\ltxkeys@hdr#1setkeys},}}{% \ltxkeys@err{Double entry for key '\ltxkeys@currtriple' in\MsgBrk - #1set key list}\@ehc + #1set key list}\ltxkeys@ehc }{% - \edef\ltxkeys@rsvda{\cptliststack,\ltxkeys@rsvda - \ltxkeys@tkey\ifcsemptyTF\ltxkeys@tval{} + \edef\ltxkeys@rsvda{\csliststack,\ltxkeys@rsvda + \ltxkeys@tkey\ltxkeys@ifcsemptyTF\ltxkeys@tval{} {=\expandcsonce\ltxkeys@tval}}% - \edef\ltxkeys@rsvdb{\cptliststack,\ltxkeys@rsvdb + \edef\ltxkeys@rsvdb{\csliststack,\ltxkeys@rsvdb \expandcsonce\ltxkeys@tkey}% }% }% }% - \ltxkeys@kvparse{#2}% - \ifcsemptyTF\ltxkeys@rsvda{}{% + \ltxkeys@parse3{#2}% + \ltxkeys@ifcsemptyTF\ltxkeys@rsvda{}{% \ifcsndefTF{\ltxkeys@hdr#1setkeys}{% \cptpassexpanded{% \cptfiltermergekv\noexpandcsn{\ltxkeys@hdr#1setkeys}% @@ -1470,7 +2473,7 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \csn@edef{\ltxkeys@hdr#1setkeys}{\expandcsonce\ltxkeys@rsvda}% \csn@edef{@\ltxkeys@hdr#1setkeys}{\expandcsonce\ltxkeys@rsvdb}% }% - \ifcpt@cl + \ifltxkeys@cl \globalizecsn{\ltxkeys@hdr#1setkeys}% \globalizecsn{@\ltxkeys@hdr#1setkeys}% \fi @@ -1479,35 +2482,37 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \robust@def*\ltxkeys@removeppsetkeys#1#2{% \ifcsndefFT{\ltxkeys@hdr#1setkeys}{% \ltxkeys@err{No #1set keys defined for prefix '\ltxkeys@ttpref' - and family '\ltxkeys@tfam'}\@ehc + and family '\ltxkeys@tfam'}\ltxkeys@ehc }{% \def\ltxkeys@rsvda{}\def\ltxkeys@rsvdb{}% \def\ltxkeys@do##1{% \ltxkeys@splitkeyval##1=\ltxkeys@nil\ltxkeys@tkey\ltxkeys@tval \ifcsndefFT{\ltxkeys@hdr\ltxkeys@tkey}{% - \ltxkeys@err{Key '\ltxkeys@currtriple' is undefined}\@ehc + \ltxkeys@err{Key '\ltxkeys@currtriple' is undefined} + \ltxkeys@ehc }{% \xifinsetTF{,\cptoxdetok\ltxkeys@tkey=\cptoxdetok\ltxkeys@tval,}% {,\cptsxdetok{\usename{\ltxkeys@hdr#1setkeys}},}{% - \edef\ltxkeys@rsvda{\cptliststack,\ltxkeys@rsvda - \ltxkeys@tkey\ifcsemptyTF\ltxkeys@tval{} + \edef\ltxkeys@rsvda{\csliststack,\ltxkeys@rsvda + \ltxkeys@tkey\ltxkeys@ifcsemptyTF\ltxkeys@tval{} {=\expandcsonce\ltxkeys@tval}}% - \edef\ltxkeys@rsvdb{\cptliststack,\ltxkeys@rsvdb + \edef\ltxkeys@rsvdb{\csliststack,\ltxkeys@rsvdb \expandcsonce\ltxkeys@tkey}% }{% - \ltxkeys@err{Key '\ltxkeys@currtriple' not a #1set key}\@ehc + \ltxkeys@err{Key '\ltxkeys@currtriple' not a #1set key} + \ltxkeys@ehc }% }% }% - \ltxkeys@kvparse{#2}% - \ifcsemptyTF\ltxkeys@rsvda{}{% + \ltxkeys@parse3{#2}% + \ltxkeys@ifcsemptyTF\ltxkeys@rsvda{}{% \cptpassexpanded{% \cptfilterremovekv\noexpandcsn{\ltxkeys@hdr#1setkeys} {\expandcsonce\ltxkeys@rsvda}\noexpand\nofilter \cptfilterremovecsv\noexpandcsn{@\ltxkeys@hdr#1setkeys} {\ltxkeys@rsvdb}\noexpand\nofilter }% - \ifcpt@cl + \ifltxkeys@cl \globalizecsn{\ltxkeys@hdr#1setkeys}% \globalizecsn{@\ltxkeys@hdr#1setkeys}% \fi @@ -1517,29 +2522,32 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \robust@def*\ltxkeys@undefppsetkeys#1{% \ifcsndefFT{\ltxkeys@hdr#1setkeys}{% \ltxkeys@err{No #1set keys defined for prefix '\ltxkeys@ttpref' - and family '\ltxkeys@tfam'}\@ehc + and family '\ltxkeys@tfam'}\ltxkeys@ehc }{% - \usename{\ifcpt@cl g\fi undefcsn}{\ltxkeys@hdr#1setkeys}% - \usename{\ifcpt@cl g\fi undefcsn}{@\ltxkeys@hdr#1setkeys}% + \usename{\ifltxkeys@cl g\fi undefcsn}{\ltxkeys@hdr#1setkeys}% + \usename{\ifltxkeys@cl g\fi undefcsn}{@\ltxkeys@hdr#1setkeys}% }% } -\robust@def*\ltxkeys@setmnkey#1{% - \xifinsetTF{,}{\detokenize{#1}}{% - \ltxkeys@err{\noexpand\ltxkeys@setmnkey doesn't accept key list}\@ehc +\robust@def*\ltxkeys@setaliaskey#1{% + \ltxkeys@commanormalize{#1}\ltxkeys@tempa + \xifinsetTF{,}{\cptoxdetok\ltxkeys@tempa}{% + \ltxkeys@err{\noexpand\ltxkeys@setaliaskey doesn't + accept key list}\ltxkeys@ehc }{% - \cpt@testopt{\ltxkeys@s@tmnkey#1}{}% + \cptexpandarg\cpt@testopt{\ltxkeys@s@taliaskey\ltxkeys@tempa}{}% }% } -\robust@def*\ltxkeys@s@tmnkey#1[#2]{% +\newletcs\setaliaskey\ltxkeys@setaliaskey +\robust@def*\ltxkeys@s@taliaskey#1[#2]{% \begingroup - \let\x\ltxkeys@tkey\let\y\noexpand - \edef\z{\expandcstwice{\csname\ltxkeys@hdr#1\endcsname{}}}% + \let\x\ltxkeys@tkey + \edef\y{\expandcstwice{\csname\ltxkeys@hdr#1\endcsname{}}}% \cptexpandsecond{\endgroup\ltxkeys@ifinlistTF(1)}{% - {\y\ltxkeys@setmnkey{\x},\y\setmnkey{\x},\y\setaliaskey{\x}}% - {\expandcsonce\z}% + {\ltxkeys@setaliaskey{\x},\setaliaskey{\x}}% + {\expandcsonce\y}% }{% - \ltxkeys@err{\noexpand\ltxkeys@setmnkey or \noexpand\setmnkey - or \noexpand\setaliaskey nested}\@ehc + \ltxkeys@err{\noexpand\ltxkeys@setaliaskey + or \noexpand\setaliaskey nested}\ltxkeys@ehc }{}% \cptexpandsecond\ltxkeys@setkeys{% [\ltxkeys@ttpref]{\ltxkeys@tfam}{% @@ -1547,34 +2555,35 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% }% } -\newletcs\setmnkey\ltxkeys@setmnkey -\newletcs\setaliaskey\ltxkeys@setmnkey \robust@def*\ltxkeys@splitchoice#1{% \begingroup \def\ltxkeys@tempa##1.##2##3\ltxkeys@nil{\endgroup \ltxkeys@trimspaces{##1}\key@name \ifstrcmpTF{##2}{.}{% - \ltxkeys@err{Invalid alternate value list for key '#1'}\@ehc + \ltxkeys@err{Invalid alternate value list for key '#1'} + \ltxkeys@ehc }{% \ifmacroTF{##2}{% \edef\ltxkeys@alt{\expandcsonce{##2}}% }{% \edef\ltxkeys@alt{\unexpanded{##2}}% }% - \despacecontent\ltxkeys@alt + \ltxkeys@trimspacesincs\ltxkeys@alt }% }% \ltxkeys@tempa#1..\ltxkeys@nil } \robust@def*\ltxkeys@setinitialkeyvals#1#2{% - \ifcsndefFT{#1@#2@initial@keyvals}{}{% - \ifcsnnullTF{#1@#2@initial@keyvals}{}{% + \ltxkeys@initrue + \ifcsndefFT{#1@#2@initialkeyvals}{}{% + \ifcsnnullTF{#1@#2@initialkeyvals}{}{% \cptpassexpanded{% \noexpand\ltxkeys@setkeys[#1]{#2}% - {\expandcsnonce{#1@#2@initial@keyvals}}% + {\expandcsnonce{#1@#2@initialkeyvals}}% }% }% }% + \ltxkeys@inifalse } \robust@def*\ltxkeys@initializekeys{% \cpt@testopt\ltxkeys@in@tializekeys{KV}% @@ -1583,40 +2592,135 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \cpt@testopt{\ltxkeys@in@ti@lizekeys{#1}{#2}}{}% } \robust@def*\ltxkeys@in@ti@lizekeys#1#2[#3]{% + \ltxkeys@initrue \begingroup \def\ltxkeys@resa{}% \def\ltxkeys@do##1{% + \ltxkeys@makepf{##1}% \def\ltxkeys@do####1{% - \edef\ltxkeys@resa{% - \cptliststack,\ltxkeys@resa - \ifcsndefFT{##1@####1@initial@keyvals}{}{% - \expandcsnonce{##1@####1@initial@keyvals}% - }% - }% + \ltxkeys@makehdr{####1}% + \letcstocsn\ltxkeys@tempc{\ltxkeys@hdr initialkeyvals}% + \ifdefTF\ltxkeys@tempc{% + \ltxkeys@remdispox\ltxkeys@tempc + \cptexpandargonce{\cptfiltermergecsv[,]\ltxkeys@resa} + \ltxkeys@tempc\nofilter + }{}% }% - \ltxkeys@csvparse{#2}% + \ltxkeys@parse1{#2}% }% - \ltxkeys@csvparse{#1}% + \ltxkeys@parse1{#1}% \ltxkeys@getkeynames{#3}% \cptexpandsecond{\endgroup\ltxkeys@setkeys*+[#1]{#2}}% - {[\ltxkeys@keynames]{\ltxkeys@resa}}% + {[\ltxkeys@keynames]{\expandcsonce\ltxkeys@resa}}% + \ltxkeys@inifalse +} +\robust@def*\ltxkeys@remdispox#1{% + \begingroup + \letcstocsn\ltxkeys@tempd{\ltxkeys@hdr disabledkeys}% + \ifdefTF\ltxkeys@tempd{}{\def\ltxkeys@tempd{}}% + \letcstocsn\ltxkeys@tempe{\ltxkeys@hdr poxkeys}% + \ifdefTF\ltxkeys@tempe{}{\def\ltxkeys@tempe{}}% + \ltxkeys@ifcsemptyTF\ltxkeys@tempd{% + \ltxkeys@ifcsemptyTF\ltxkeys@tempe\cpt@gobbletorelax\relax + }{}% + \edef\ltxkeys@tempd + {\expandcsonce\ltxkeys@tempd,\expandcsonce\ltxkeys@tempe}% + \def\ltxkeys@do##1{% + \ltxkeys@getkeyname##1=\ltxkeys@nil\ltxkeys@tkey + \xifinsetTF{,\ltxkeys@tkey,}{,\expandcsonce\ltxkeys@tempd,}{}{% + \edef#1{\csliststack,#1\unexpanded{##1}}% + }% + }% + \cptexpandargonce{\def#1{}\ltxkeys@parse3}{#1}% + \cpt@relax + \postgroupdef#1\endgroup +} +\robust@def*\ltxkeys@launchkeys{% + \ltxkeys@teststpl{\cpt@testopt\ltxkeys@l@unchkeys{KV}}% } -\robust@def*\ltxkeys@launchkeys{\cpt@testopt\ltxkeys@l@unchkeys{KV}} \robust@def*\ltxkeys@l@unchkeys[#1]#2#3{% - \ltxkeys@in@ti@lizekeys{#1}{#2}[#3]% - % Don't use the star/plus forms of \ltxkeys@setkeys here, - % otherwise we won't be able to catch undefined keys: - \ifblankTF{#3}{}{\ltxkeys@setkeys[#1]{#2}{#3}}% + \edef\ltxkeys@cmdpf{\ifltxkeys@st*\fi\ifltxkeys@pl+\fi}% + \ltxkeys@commanormalizeset{{#1}\ltxkeys@prefs,{#2}\ltxkeys@fams}% + \xifinsetTF{,}\ltxkeys@fams{% + \ifltxkeys@pl\else + \ltxkeys@err{Multiple key families: you need + prefix + \MsgBrk for command \string\ltxkeys@launchkeys}\ltxkeys@ehc + \fi + }{}% + \cptexpandsecond\ltxkeys@in@ti@lizekeys + {{\ltxkeys@prefs}{\ltxkeys@fams}}[#3]% + \ifblankTF{#3}\cpt@gobbletorelax\relax + \begingroup + \def\ltxkeys@resa{}% + \def\ltxkeys@do##1{% + \ltxkeys@makepf{##1}% + \def\ltxkeys@do####1{% + \ltxkeys@makehdr{####1}% + \edef\ltxkeys@tempc{\unexpanded{#3}}% + \ltxkeys@remdispox\ltxkeys@tempc + \cptexpandargonce{\cptfiltermergecsv[,]\ltxkeys@resa} + \ltxkeys@tempc\nofilter + }% + \ltxkeys@parse*0\ltxkeys@fams + }% + \ltxkeys@parse*0\ltxkeys@prefs + \cptexpandargonce{\endgroup\expandafter\undefcs\expandafter + \ltxkeys@cmdpf\expandafter\ltxkeys@setkeys + \ltxkeys@cmdpf[#1]{#2}}\ltxkeys@resa + \cpt@relax +} +\robust@def*\ltxkeys@nonlaunchkeys{% + \cpt@teststopt{\ltxkeys@nonl@unchkeys}{KV}% +} +\newletcs\ltxkeys@noninitializekeys\ltxkeys@nonlaunchkeys +\robust@def*\ltxkeys@nonl@unchkeys[#1]#2#3{% + \ifboolTF{cpt@st}{% + \AtBeginDocument{\ltxkeys@nonl@un@hkeys{#1}{#2}{#3}}% + }{% + \ltxkeys@nonl@un@hkeys{#1}{#2}{#3}% + }% +} +\robust@def*\ltxkeys@nonl@un@hkeys#1#2#3{% + \ltxkeys@commanormalizeset + {{#1}\ltxkeys@prefs,{#2}\ltxkeys@fams,{#3}\ltxkeys@keys}% + \def\ltxkeys@do##1{% + \ltxkeys@makepf{##1}% + \def\ltxkeys@do####1{% + \ltxkeys@makehdr{####1}% + \ltxkeys@nonl@un@hk@ys + }% + \ltxkeys@parse*0\ltxkeys@fams + }% + \ltxkeys@parse*0\ltxkeys@prefs +} +\robust@def*\ltxkeys@nonl@un@hk@ys{% + \ifcsndefTF{\ltxkeys@hdr poxkeys}{}{% + \csn@def{\ltxkeys@hdr poxkeys}{}% + }% + \letcstocsn\ltxkeys@tempc{\ltxkeys@hdr poxkeys}% + \def\ltxkeys@do##1{% + \ifcsndefTF{\ltxkeys@hdr##1}{% + \xifinsetTF{,##1,}{,\expandcsonce\ltxkeys@tempc,}{}{% + \edef\ltxkeys@tempc{% + \csliststack,\ltxkeys@tempc\unexpanded{##1}% + }% + }% + }{}% + }% + \ltxkeys@parse*0\ltxkeys@keys + \letcsntocs{\ltxkeys@hdr poxkeys}\ltxkeys@tempc } \robust@def*\ltxkeys@setkeys{% \ltxkeys@rmfalse \ltxkeys@teststpl{\ltxkeys@testopt@c\ltxkeys@setkeys@a}% } +\newletcs\ltxkeys@setkey\ltxkeys@setkeys \robust@def*\ltxkeys@setrmkeys{% \ltxkeys@rmtrue \ltxkeys@teststpl{\ltxkeys@testopt@c\ltxkeys@setrmkeys@a}% } \robust@def*\ltxkeys@setrmkeys@a[#1]{% + \ltxkeys@debug{==}{Setting 'remaining' keys now}% \cptexpandarg{\ltxkeys@setkeys@a[#1]} {\expandcsnonce{\ltxkeys@hdr rmkeys}}% } @@ -1625,9 +2729,13 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \def\x{\ltxkeys@nil}% \xifinsetTF{\x\detokenize{#2}\x} {\x.\x,\x;\x:\x+\x-\x=\x*\x^\x_\x/\x|\x[\x(\x)\x]\x}{% - \ltxkeys@err{Invalid key list '#2': Something is wrong}\@ehc + \ltxkeys@err{Invalid key list '#2': Something is wrong} + \ltxkeys@ehc }{}% \endgroup + \ifcsndefTF{\ltxkeys@hdr executedkeys}{}{% + \csn@def{\ltxkeys@hdr executedkeys}{}% + }% \ifnum\ltxkeys@keydepth=\z@pt \csn@def{\ltxkeys@hdr rmkeys}{}% \def\ltxkeys@undefinedkeys{}% @@ -1635,27 +2743,37 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ltxkeys@getkeynames{#2}% \let\ltxkeys@naa\ltxkeys@keynames \ifblankTF{#1}{}{% - \edef\ltxkeys@naa{\cptliststack,\ltxkeys@naa\unexpanded{#1}}% + \edef\ltxkeys@naa{\csliststack,\ltxkeys@naa\unexpanded{#1}}% }% + \ifboolTF{ltxkeys@tracingkeys}{% + \ltxkeys@getbasechars*[30]\ltxkeys@keynames\ltxkeys@tempa + \edef\ltxkeys@tempb{\ifnum\ltxkeys@charcount>30\string\ETC\fi}% + \wlog{\@spaces(on level \the\ltxkeys@keydepth)}% + \ltxkeys@debug{==}{Setting keys: '\ltxkeys@tempa\ltxkeys@tempb'}% + }{}% \ltxkeys@usepresetkeys{pre}% \ltxkeys@setkeys@b{#1}{#2}% \ltxkeys@usepresetkeys{post}% - \ltxkeys@exopfalse\ltxkeys@pxopfalse \ifnumcmpTF\ltxkeys@keydepth=\z@pt{% - \emptifycsset{% - \ltxkeys@keys,\ltxkeys@prefs,\ltxkeys@fams,\ltxkeys@nakeys,% - \ltxkeys@naa,\ltxkeys@tpref,\ltxkeys@ttpref,\ltxkeys@tfam,% - \ltxkeys@tkey,\ltxkeys@tval,\CurrentPref,\CurrentFam,% - \CurrentKeyval,\CurrentKey,\CurrentVal,\ltxkeys@naa + \ltxkeys@debug{==}{Setting keys, returned to level 0}% + \ltxkeys@ifcsemptyTF\ltxkeys@undefinedkeys{% + \ltxkeys@debug{==}{No undefined keys in this run}% + }{% + \ltxkeys@debug{==}{There're undefined keys; logging them}% + \ltxkeys@logunknownkeys }% - \ifcsemptyTF\ltxkeys@undefinedkeys{}\ltxkeys@logunknownkeys }{}% + \ifltxkeys@exop + \ltxkeys@exopfalse + \ltxkeys@debug{==}{Ended executing options}% + \fi + \ltxkeys@pxopfalse } \robust@def*\ltxkeys@usepresetkeys#1{% - \ltxkeys@inpresettrue + \ltxkeys@presettrue \begingroup \toks@{}% - \ltxkeys@vinfo{Looking for #1-set keys}% + \ltxkeys@debug{==}{Looking for #1-set keys}% \def\ltxkeys@do##1{% \ltxkeys@makepf{##1}% \def\ltxkeys@do####1{% @@ -1666,45 +2784,48 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ {\expandcsnonce{\ltxkeys@hdr#1setkeys}}}}% }% }% - \ltxkeys@csvloop*\ltxkeys@fams + \ltxkeys@parse*0\ltxkeys@fams }% - \ltxkeys@csvloop*\ltxkeys@prefs + \ltxkeys@parse*0\ltxkeys@prefs \oifblankTF{\the\toks@}{% \endgroup - \ltxkeys@vinfo{No #1-set keys found}% + \ltxkeys@debug{==}{No #1-set keys found}% }{% - \ltxkeys@vinfo{P\@gobble#1-set keys found. Setting them now}% + \ltxkeys@debug{==}{P\@gobble#1-set keys found. Setting them now}% \expandafter\endgroup\the\toks@ - \ltxkeys@vinfo{Finished setting #1-set keys}% + \ltxkeys@debug{++}{Finished setting #1-set keys}% }% - \ltxkeys@inpresetfalse + \ltxkeys@presetfalse } \robust@def*\ltxkeys@setkeys@b#1#2{% \ifblankTF{#1}{% \def\ltxkeys@nakeys{}% }{% - \edef\ltxkeys@nakeys{\cptcommanormalize{#1}}% + \ltxkeys@commanormalize{#1}\ltxkeys@nakeys }% \def\ltxkeys@do##1{% \edef\CurrentKeyval{\unexpanded{##1}}% \ltxkeys@getkeyvalue##1=\ltxkeys@nil\ltxkeys@tval \ltxkeys@setkeys@c##1=\ltxkeys@nil }% - \ltxkeys@kvparse{#2}% + \ltxkeys@parse3{#2}% } \robust@def*\ltxkeys@setkeys@c#1=#2\ltxkeys@nil{% \ifinsetTF{\needvalue}{#1}{% \ltxkeys@err{\noexpand\needvalue pointer not allowed - \MsgBrk when setting keys}\@ehc + \MsgBrk when setting keys}\ltxkeys@ehc }{}% - \ltxkeys@findpointer\savevalue{#1}\ltxkeys@tkey - \ltxkeys@svtrue\ltxkeys@svfalse + \ltxkeys@findp@inters\savevalue{#1}\ltxkeys@tkey{% + \ltxkeys@svtrue + }{% + \ltxkeys@svfalse + }% \let\CurrentKey\ltxkeys@tkey - \ifcsemptyTF\ltxkeys@tkey{% + \ltxkeys@ifcsemptyTF\ltxkeys@tkey{% \ifltxkeys@noval\else \ltxkeys@err{No key specified for value '\expandcsonce\ltxkeys@tval' - \MsgBrk in families '\ltxkeys@fams'}\@ehc + \MsgBrk in families '\ltxkeys@fams'}\ltxkeys@ehc \fi }{% \xifinsetTF{,\ltxkeys@tkey,}{,\ltxkeys@nakeys,}{}{% @@ -1714,10 +2835,10 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ } \robust@def*\ltxkeys@setkeys@d{% \ltxkeys@kffalse - \if@boolTF{ltxkeys@inpreset}{% + \ifboolTF{ltxkeys@preset}{% \ltxkeys@setkeys@e }{% - \if@boolTF{ltxkeys@pl}{% + \ifboolTF{ltxkeys@pl}{% \def\ltxkeys@do##1{% \def\CurrentPref{##1}% \ltxkeys@makepf{##1}% @@ -1727,9 +2848,9 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ltxkeys@makehdr\ltxkeys@tfam \ltxkeys@setkeys@e }% - \ltxkeys@csvloop*\ltxkeys@fams + \ltxkeys@parse*0\ltxkeys@fams }% - \ltxkeys@csvloop*\ltxkeys@prefs + \ltxkeys@parse*0\ltxkeys@prefs }{% \def\ltxkeys@do##1{% \def\CurrentPref{##1}% @@ -1741,36 +2862,56 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ltxkeys@setkeys@e \ifltxkeys@kf\loopbreak\fi }% - \ltxkeys@csvloop*\ltxkeys@fams + \ltxkeys@parse*0\ltxkeys@fams \ifltxkeys@kf\loopbreak\fi }% - \ltxkeys@csvloop*\ltxkeys@prefs + \ltxkeys@parse*0\ltxkeys@prefs }% }% - \if@boolTF{ltxkeys@kf}{% - \if@boolFT{ltxkeys@pxop}{}{% - \ifx\ltxkeys@testname\cpt@documentclass + \ifboolTF{ltxkeys@kf}{% + \ifdefboolTF{ltxkeys@pxop}{% + \ltxkeys@ifxTF\ltxkeys@testname\ltxkeys@documentclass{% \cpt@removecurroption\CurrentKeyval - \fi - }% + \ltxkeys@debug{==}{Key \ltxkeys@currtriple, removed from + \string\@unusedoptionlist}% + }{}% + }{}% }{% - \ifcsndefTF{\ltxkeys@hdr default@ds}{% - \begingroup - \let\xp\expandcsonce - \cptexpandsecond{% - \endgroup\usename{\ltxkeys@hdr default@ds}% + \ifdefboolTF{ltxkeys@pxop}{% + \ifcsndefTF{\ltxkeys@hdr default@ds@opt}{% + \begingroup + \let\xp\expandcsonce + \cptexpandsecond{% + \endgroup\usename{\ltxkeys@hdr default@ds@opt}% + }{% + {\xp\ltxkeys@ttpref}{\xp\ltxkeys@tfam}% + {\xp\ltxkeys@tkey}{\xp\ltxkeys@tval}% + }% }{% - {\xp\ltxkeys@ttpref}{\xp\ltxkeys@tfam}% - {\xp\ltxkeys@tkey}{\xp\ltxkeys@tval}% + \ltxkeys@ifxTF\@currext\@clsextension + \relax\ltxkeys@unknownoptionerror }% }{% - \if@boolTF{ltxkeys@pxop}{% - \ifxTF\@currext\@clsextension{}\ltxkeys@unknownoptionerror + \ifboolTF{ltxkeys@st}{% + \ifltxkeys@tracingkeys + \ltxkeys@getinnoval + \ltxkeys@debug{==}{Undefined key \ltxkeys@currtriple, + \InnocentVal, saved in \cptmakes{\ltxkeys@hdr rmkeys}}% + \fi + \cptexpandargonce{\aftercsname{\cptfiltermergekv[,]}% + {\ltxkeys@hdr rmkeys}}\CurrentKeyval\nofilter }{% - \if@boolTF{ltxkeys@st}{% - \cptexpandargonce{\aftercsname{\cptfiltermergekv[,]} - {\ltxkeys@hdr rmkeys}}\CurrentKeyval\nofilter + \ifcsndefTF{\ltxkeys@hdr default@ds@key}{% + \begingroup + \let\xp\expandcsonce + \cptexpandsecond{% + \endgroup\usename{\ltxkeys@hdr default@ds@key}% + }{% + {\xp\ltxkeys@ttpref}{\xp\ltxkeys@tfam}% + {\xp\ltxkeys@tkey}{\xp\ltxkeys@tval}% + }% }{% + \ltxkeys@debug{==}{Key \ltxkeys@currtriple, saved as undefined}% \ltxkeys@getinnoval \cptexpandarg{\cptfiltermergecsv[;]\ltxkeys@undefinedkeys}{% \ltxkeys@ttpref,\ltxkeys@tfam,\ltxkeys@tkey,\InnocentVal @@ -1781,81 +2922,128 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \robust@def*\ltxkeys@setkeys@e{% + \ifboolTF{ltxkeys@tracingkeys}{% + \ltxkeys@getinnovalnopad + \ltxkeys@debug{==}{Setting\@space\ifltxkeys@preset + preset\@space\fi key: \ltxkeys@currtriple,\InnocentVal}% + }{}% \ifcsndefFT{\ltxkeys@hdr\ltxkeys@tkey}{% \relax + \ltxkeys@debug{!!}{% + \ifltxkeys@preset Preset key\else Key\fi\@space + is not defined: \ltxkeys@currtriple,\InnocentVal + }% }{% \ltxkeys@kftrue - \if@boolTF{ltxkeys@pxop}{% - \ltxkeys@testoptionkey{not}% + \ifltxkeys@tracingkeys + \ltxkeys@debug{++}{\ifltxkeys@preset Preset key\else Key\fi + \@space'\ltxkeys@tkey' is defined}% + \ifltxkeys@dec\else\ifltxkeys@ini\else + \edef\reserved@e{\ltxkeys@currtriple,\InnocentVal}% + \@onelevel@sanitize\reserved@e + \letcstocsn\reserved@f{\ltxkeys@hdr executedkeys}% + \xifinsetTF{*\reserved@e*}{*\reserved@f*}{% + \ltxkeys@debug{!!}{Key '\ltxkeys@currtriple' multiply + set with same value}% + }{% + \csn@edef{\ltxkeys@hdr executedkeys}{% + \csliststack*\reserved@f\reserved@e + }% + }% + \fi\fi + \fi + \ifboolTF{ltxkeys@pxop}{% + \ltxkeys@testoptionkey{non}% }{% - \if@boolTF{ltxkeys@exop}{}{\ltxkeys@testoptionkey{}}% + \ifboolTF{ltxkeys@exop}{}{\ltxkeys@testoptionkey{}}% + }% + \ifboolTF{ltxkeys@sv}{}{% + \ifcsndefTF{\ltxkeys@hdr savevaluekeys}{\ltxkeys@testsavevaluekey}{}% }% - \if@boolTF{ltxkeys@sv}{% - \edef\ltxkeys@tempa{\ltxkeys@tkey{\expandcsonce\ltxkeys@tval}}% - \ltxkeys@addtopointedkeys{savevalue}\ltxkeys@tempa + \ifboolTF{ltxkeys@sv}{% + \ltxkeys@addtop@intedkeys{savevalue}\ltxkeys@tkey\ltxkeys@tval }{}% - \if@boolTF{ltxkeys@noval}{% - \ifcsndefTF{\ltxkeys@hdr needvalue@keys}{\ltxkeys@testneedvalkey}{}% + \ifboolTF{ltxkeys@noval}{% + \ifcsndefTF{\ltxkeys@hdr needvaluekeys}{\ltxkeys@testneedvaluekey}{}% \ifcsndefTF{\ltxkeys@hdr\ltxkeys@tkey @default}{% + \ltxkeys@debug{==}{\ifltxkeys@preset Preset key\else Key\fi\@space + '\ltxkeys@tkey', no user-value, default found}% \cptsevenxp\ltxkeys@usedefault \usename{\ltxkeys@hdr\ltxkeys@tkey @default}\ltxkeys@nil }{% - \ltxkeys@err{No value specified for key '\ltxkeys@tkey'}\@ehc + \ltxkeys@err{No value specified for key '\ltxkeys@tkey'} + \ltxkeys@ehc }% }{% \s@expandarg\ltxkeys@replacepointers\ltxkeys@tval - \if@boolTF{ltxkeys@verbose}{% - \ltxkeys@getinnovalnopad - \ltxkeys@vinfo{% - \ifltxkeys@inpreset Preset key\else Key\fi\@space - executed: \ltxkeys@currtriple,\InnocentVal; - on level '\the\ltxkeys@keydepth'}% - }{}% + \ltxkeys@debug{==}{% + \ifltxkeys@preset Preset key\else Key\fi\@space + '\ltxkeys@tkey', macro being executed now% + }% \cpt@pushstate\ltxkeys@setkeys\ltxkeys@state\ltxkeys@keydepth \csname\ltxkeys@hdr\ltxkeys@tkey\expandafter \endcsname\expandafter{\ltxkeys@tval}\relax \cpt@popstate\ltxkeys@setkeys\ltxkeys@keydepth + \ltxkeys@debug{++}{% + \ifltxkeys@preset Preset key\else Key\fi\@space + '\ltxkeys@tkey', macro executed% + }% }% }% } \robust@def*\ltxkeys@usedefault#1#2\ltxkeys@nil{% - \begingroup - \csn@def{\ltxkeys@hdr\ltxkeys@tkey}##1{% - \toks@{\def\ltxkeys@tval{##1}}% + \ltxkeys@debug{==}{Key '\ltxkeys@tkey', extracting default value}% + \def\reserved@a##1##2\ltxkeys@nil{% + \edef\reserved@a{\cptgobblescape{##1}}% + \edef\reserved@b{% + \detokenize\expandafter\expandafter\expandafter + {\expandafter\ltxkeys@hdr\ltxkeys@tkey}% + }% + \ltxkeys@ifxTF\reserved@a\reserved@b{% + \ltxkeys@debug{==}{Key '\ltxkeys@tkey' has standard macro}% + \begintoksgroup + \csn@def{\ltxkeys@hdr\ltxkeys@tkey}####1{% + \toks@{\edef\ltxkeys@tval{\unexpanded{####1}}}% + }% + \usename{\ltxkeys@hdr\ltxkeys@tkey @default}% + \endtoksgroup + \s@expandarg\ltxkeys@replacepointers\ltxkeys@tval + }{% + \ltxkeys@debug{!!}{Key '\ltxkeys@tkey' has nonstandard macro}% + }% }% - \usename{\ltxkeys@hdr\ltxkeys@tkey @default}% - \expandafter\endgroup\the\toks@ - \s@expandarg\ltxkeys@replacepointers\ltxkeys@tval - \if@boolTF{ltxkeys@verbose}{% + \xaftercsname\reserved@a{\ltxkeys@hdr\ltxkeys@tkey @default}\ltxkeys@nil + \ifboolTF{ltxkeys@tracingkeys}{% \ltxkeys@getinnovalnopad - \ltxkeys@vinfo{% - \ifltxkeys@inpreset Preset key\else Key\fi\@space - executed: \ltxkeys@currtriple,\InnocentVal(default); - on level '\the\ltxkeys@keydepth' + \ltxkeys@debug{==}{% + \ifltxkeys@preset Preset key\else Key\fi\@space + '\ltxkeys@tkey', macro being executed now% }% }{}% \cpt@pushstate\ltxkeys@setkeys\ltxkeys@state\ltxkeys@keydepth \ifmacroTF{#1}{% \expandafter#1\expandafter{\ltxkeys@tval}\relax }{% - \ltxkeys@err{Faulty key macro '\detokenize{#1}'}\@ehc + \ltxkeys@err{Faulty key macro '\detokenize{#1}'}\ltxkeys@ehc }% \cpt@popstate\ltxkeys@setkeys\ltxkeys@keydepth + \ltxkeys@debug{++}{% + \ifltxkeys@preset Preset key\else Key\fi\@space + '\ltxkeys@tkey', macro executed% + }% } - -\robust@def*\ltxkeys@getsavedval#1{% +\robust@def*\ltxkeys@getsavedvalue#1{% \def\reserved@a##1#1##2##3\ltxkeys@nil{% - \ifblankTF{##3}\@firstoftwo{% - \def\reserved@a{##2}\@secondoftwo - }% + \edef\ltxkeys@tempc{\unexpanded{##2}}% + \ltxkeys@ifxTF\ltxkeys@tempc\ltxkeys@nnil\@secondoftwo\@firstoftwo }% - \cptsevenxp\reserved@a\@nameuse - {\ltxkeys@hdr savevalue@keys}#1{\ltxkeys@nil}\ltxkeys@nil + \cptsevenxp\reserved@a\usename{@\ltxkeys@hdr savevaluekeys}% + #1{\ltxkeys@nil}\ltxkeys@nil } \robust@def*\ltxkeys@replacepointers#1{% - \ltxkeys@vinfo{Replacing pointers of key '\ltxkeys@tkey'}% + \ltxkeys@debug{==}{Key '\ltxkeys@tkey', replacing pointers}% \def\ltxkeys@resa{}% - \@tempswafalse + \ltxkeys@swafalse \ifbracedTF{#1}{% \ltxkeys@r@placepointers{#1}\usevalue\ltxkeys@nil }{% @@ -1865,36 +3053,36 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ } \robust@def*\ltxkeys@r@placepointers#1\usevalue#2{% \def\reserved@a{#2}% - \ifxTF\reserved@a\ltxkeys@nnil{% + \ltxkeys@ifxTF\reserved@a\ltxkeys@nnil{% \edef\ltxkeys@tval{\unexpanded{#1}}% - \if@tempswa - \ifltxkeys@verbose + \ifltxkeys@swa + \ifltxkeys@tracingkeys \ltxkeys@getinnovalnopad - \ltxkeys@vinfo{Value '\InnocentVal' of key '\ltxkeys@tkey' - inherited from key '\ltxkeys@tempb'}% + \ltxkeys@debug{++}{Key '\ltxkeys@tkey', value + inherited from '\ltxkeys@tempb'}% \fi \else - \ltxkeys@vinfo{No pointers found on key '\ltxkeys@tkey'}% + \ltxkeys@debug{==}{Key '\ltxkeys@tkey', no pointers found}% \fi }{% - \ltxkeys@getsavedval{#2}{% - \ltxkeys@err{No value recorded for key '#2'}\@ehc - \ltxkeys@r@placepointers - }{% - \@tempswatrue + \ltxkeys@getsavedvalue{#2}{% + \ltxkeys@swatrue \def\ltxkeys@tempb{#2}% - \oifinset@sp@TF,{#2}\ltxkeys@resa{% - \ltxkeys@error{Dangerous back linking of pointers}{% - Key pointer replacement terminated due + \oifinset@sp@TF,\ltxkeys@tempb\ltxkeys@resa{% + \ltxkeys@error{Dangerous back linking of pointers} + {Key pointer replacement terminated due \MsgBrk to possible back linking.}% }{% - \edef\ltxkeys@resa{\cptliststack,\ltxkeys@resa#2}% - \s@expandarg\ifbracedTF\reserved@a{% - \s@expandarg\ltxkeys@r@placepointers\reserved@a + \edef\ltxkeys@resa{\csliststack,\ltxkeys@resa#2}% + \s@expandarg\ifbracedTF\ltxkeys@tempc{% + \s@expandarg\ltxkeys@r@placepointers\ltxkeys@tempc }{% - \expandafter\ltxkeys@r@placepointers\reserved@a + \expandafter\ltxkeys@r@placepointers\ltxkeys@tempc }% }% + }{% + \ltxkeys@err{No value recorded for key '#2'}\ltxkeys@ehc + \ltxkeys@r@placepointers }% }% } @@ -1903,11 +3091,11 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ } \robust@def*\ltxkeys@st@revalue#1#2{% \ifinsetFT{,}{#1}{}{% - \ltxkeys@err{Illegal multiple keys for \string\ltxkeys@storevalue}% - \@ehc + \ltxkeys@err{Illegal multiple keys for + \string\ltxkeys@storevalue}\ltxkeys@ehc }% \ifescapedTF{#2}{}{\cpt@notescapederr{#2}}% - \ltxkeys@getsavedval{#1}{% + \ltxkeys@getsavedvalue{#1}{% \ifltxkeys@pl \expandafter\@firstofone \else @@ -1927,75 +3115,84 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \let#2=\reserved@a }% } -\robust@def*\ltxkeys@getinnoval{\@tempswatrue\ltxkeys@g@tinnoval} -\robust@def*\ltxkeys@getinnovalnopad{\@tempswafalse\ltxkeys@g@tinnoval} +\robust@def*\ltxkeys@getinnoval{\ltxkeys@swatrue\ltxkeys@g@tinnoval} +\robust@def*\ltxkeys@getinnovalnopad{\ltxkeys@swafalse\ltxkeys@g@tinnoval} \robust@def*\ltxkeys@g@tinnoval{% - \ifxTF\ltxkeys@tval\@empty{% + \begingroup + \ltxkeys@ifxTF\ltxkeys@tval\@empty{% \def\InnocentVal{???}% }{% \def\InnocentVal{}% \def\ltxkeys@tempa{\\}% - \def\do##1##2##3##4##5##6##7##8##9\@@{% + \def\@do##1##2##3##4##5##6##7##8##9\@@{% \def\siso@do####1{% - \edef\InnocentVal{\InnocentVal\ifx\siso@arg\ltxkeys@tempa - \if@tempswa\@space\fi\else\if\siso@arg\cpt@leftbracechar[\else - \if\siso@arg\cpt@rightbracechar]\else####1\fi\fi\fi}% + \def\reserved@a{####1}% + \edef\InnocentVal{% + \InnocentVal + \ifx\reserved@a\ltxkeys@tempa + \ifltxkeys@swa\@space\fi + \else + \if\reserved@a\cpt@leftbracechar[\else + \if\reserved@a\cpt@rightbracechar]\else####1\fi + \fi + \fi + }% }% \siso@@loop{##1##2##3##4##5##6##7##8}% }% - \expandafter\do\detokenize\expandafter + \expandafter\@do\detokenize\expandafter {\ltxkeys@tval}\\\\\\\\\\\\\\\\\\\@@ - }% + \postgroupdef\InnocentVal\endgroup } \robust@def*\ltxkeys@keyvalerr{% \ltxkeys@getinnovalnopad \ltxkeys@err{Erroneous value '\InnocentVal' for key or option - \MsgBrk'\ltxkeys@tkey'}\@ehc + \MsgBrk'\ltxkeys@tkey'}{Invalid key value encountered.}% } \robust@def*\ltxkeys@unknownkeyhandler{% + \def\ltxkeys@default@ds{default@ds@key}% \cpt@testopt\ltxkeys@unkn@wnkeyhandler{KV}% } \robust@def*\ltxkeys@unkn@wnkeyhandler[#1]#2#3{% - \begingroup - \toks@{}% - \toks1{##1##2##3##4}% - \toks2{\ltxkeys@getinnovalnopad#3}% + \begintoksgroup + \toks1{##1##2##3##4{\ltxkeys@getinnovalnopad#3}}% \def\ltxkeys@do##1{% \ltxkeys@makepf{##1}% \def\ltxkeys@do####1{% \ltxkeys@makehdr{####1}% - \toks@\expandafter{\the\expandafter\toks@\expandafter - \csn@def\expandafter{\ltxkeys@hdr default@ds}% - \the\toks1{\the\toks2}}% + \cptexpanded{% + \toks@{\the\toks@ + \csn@def{\ltxkeys@hdr\ltxkeys@default@ds}\the\toks1% + }% + }% }% - \ltxkeys@csvparse{#2}% + \ltxkeys@parse1{#2}% }% - \ltxkeys@csvparse{#1}% - \edef\reserved@a{\s@expandarg\@iden{\the\toks@}}% - \expandafter\endgroup\reserved@a + \ltxkeys@parse1{#1}% + \endtoksgroup } - \robust@def*\ltxkeys@logunknownkeys{% \ltxkeys@l@gunknownkeys - \ltxkeys@err{The above keys are undefined and % - couldn't be set}\@ehc + \ltxkeys@err{The above keys are undefined and couldn't be set} + {There are undefined keys; see above.}% } \robust@def*\ltxkeys@l@gunknownkeys{% - \gletcs\ltxkeys@l@gunknownkeys\relax + \ltxkeys@debug{==}{Now logging undefined keys}% \begingroup \cpt@cnta\z@pt \edef\ltxkeys@skipa{}% \cptwhilenum\cpt@cnta<20\do{% - \edef\ltxkeys@skipa{\expandcsonce\ltxkeys@skipa\@space}% + \edef\ltxkeys@skipa{\ltxkeys@skipa\@space}% \advance\cpt@cnta\@ne }% - \typeout{^^J\ltxkeys@skipa*** Unknown keys ***^^J}% + \typeout{\ltxkeys@skipa*** Unknown keys ***}% \def\ltxkeys@tempb{\\}% \def\align@do##1##2##3##4##5##6##7##8##9\@@{% \def\ltxkeys@tempc{##9}% \def\siso@do####1{% - \ifx\siso@arg\ltxkeys@tempb + \def\reserved@a{####1}% + \ifx\reserved@a\ltxkeys@tempb \edef\ltxkeys@skipb{\@space\ltxkeys@skipb}% \fi }% @@ -2012,138 +3209,216 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \expandafter\align@do\ltxkeys@tempc\\\\\\\\\\\\\\\\\\\@@ \edef\ltxkeys@msg{\expandcsonce\ltxkeys@msg####1\ltxkeys@skipb}% }% - \ltxkeys@csvparse{##1,##2,##3,##4}% + \ltxkeys@parse1{##1,##2,##3,##4}% \typeout{\ltxkeys@msg}% }% - \def\csv@do##1{% + \def\ltxkeys@do##1{% \ltxkeys@splita##1\ltxkeys@nil }% - \csv@@loop*[;]\ltxkeys@tempa - \typeout{^^J\ltxkeys@skipa*******************^^J}% + \ltxkeys@parse*0[;]\ltxkeys@tempa + \typeout{\ltxkeys@skipa*******************}% \endgroup } -\robust@def*\ltxkeys@disablekeys{\ltxkeys@testst\ltxkeys@dis@blekeys} -\robust@def*\ltxkeys@dis@blekeys{% - \let\ifdisablest\ifltxkeys@st - \begingroup - \catcode`\,=12\relax - \cpt@testopt{\ltxkeys@dis@bl@keys}{KV}% +\robust@def*\ltxkeys@disablekeys{% + \cpt@teststopt{\ltxkeys@dis@blekeys}{KV}% } -\robust@def*\ltxkeys@dis@bl@keys[#1]#2#3{% - \endgroup - \edef\ltxkeys@prefs{\cptcommanormalize{#1}}% - \edef\ltxkeys@fams{\cptcommanormalize{#2}}% - \edef\ltxkeys@keys{\cptcommanormalize{#3}}% +\robust@def*\ltxkeys@dis@blekeys[#1]#2#3{% + \ltxkeys@debug{==}{Now disabling keys}% + \ifboolTF{cpt@st}{% + \AtBeginDocument{% + \ltxkeys@dis@bl@keys{#1}{#2}{#3}% + }% + }{% + \ltxkeys@dis@bl@keys{#1}{#2}{#3}% + }% +} +\robust@def*\ltxkeys@dis@bl@keys#1#2#3{% + \ltxkeys@commanormalizeset + {{#1}\ltxkeys@prefs,{#2}\ltxkeys@fams,{#3}\ltxkeys@keys}% \def\ltxkeys@do##1{% \ltxkeys@makepf{##1}% \def\ltxkeys@do####1{% - \def\ltxkeys@tfam{####1}% \ltxkeys@makehdr{####1}% \ltxkeys@dis@bl@k@ys }% - \s@expandarg\ltxkeys@csvloop\ltxkeys@fams + \ltxkeys@parse*0\ltxkeys@fams }% - \s@expandarg\ltxkeys@csvloop\ltxkeys@prefs + \ltxkeys@parse*0\ltxkeys@prefs } -\robust@def\ltxkeys@dis@bl@k@ys{% +\robust@def*\ltxkeys@dis@bl@k@ys{% + \begingroup + \toks@{}% + \ifcsndefTF{\ltxkeys@hdr disabledkeys}{}{% + \@namedef{\ltxkeys@hdr disabledkeys}{}% + }% + \letcstocsn\ltxkeys@dkeys{\ltxkeys@hdr disabledkeys}% + \edef\ltxkeys@tempb##1{% + \ltxkeys@err + {Key '##1' of family '\ltxkeys@tfam' has been disabled}% + {Key '##1' has been disabled.\MsgBrk + You can't set or reset it at this late stage.\MsgBrk + Perhaps you should have set it earlier in\MsgBrk + '\string\documentclass' or '\string\usepackage'.}% + }% \def\ltxkeys@do##1{% - \ifcsndefFT{\ltxkeys@hdr##1}{% - \ltxkeys@vwarn{Key '##1' undefined in families '\ltxkeys@tfam': - \MsgBrk couldn't be disabled}% - }{% - \edef\ltxkeys@tempa{% - \noexpand\ltxkeys@err{% - Key '##1' of family '\ltxkeys@tfam' has been disabled - }{% - Key '##1' has been disabled.\MsgBrk - You can't set or reset it at this late stage.\MsgBrk - Perhaps you should have set it earlier in\MsgBrk - \noexpand\documentclass or \string\usepackage. - }% - }% - \cptpassexpanded{% - \ifdisablest\noexpand\AtBeginDocument{\fi - \ifcsndefTF{\ltxkeys@hdr##1@default}{% - \noexpand\ltxkeys@ordkey[\ltxkeys@ttpref]% - {\ltxkeys@tfam}{##1}[]{\expandcsonce\ltxkeys@tempa}% - }{% - \noexpand\ltxkeys@ordkey[\ltxkeys@ttpref]% - {\ltxkeys@tfam}{##1}{\expandcsonce\ltxkeys@tempa}% + \ifcsndefTF{\ltxkeys@hdr##1}{% + \xifinsetTF{,##1,}{,\expandcsonce\ltxkeys@dkeys,}{}{% + \cptpassexpanded{% + \toks@{\the\toks@ + \ltxkeys@ordkey[\ltxkeys@ttpref]{\ltxkeys@tfam}{##1}% + \ifcsndefTF{\ltxkeys@hdr##1@default}{[]}{}% + {\expandcsonce{\ltxkeys@tempb{##1}}}% }% - \ifdisablest}\fi + }% + \edef\ltxkeys@dkeys{% + \csliststack,\ltxkeys@dkeys\unexpanded{##1}% + }% }% + }{% + \ltxkeys@debug{!!}{Key '##1' is undefined in + family '\ltxkeys@tfam'}% }% }% - \s@expandarg\ltxkeys@csvloop\ltxkeys@keys - \undefcs\ifdisablest + \ltxkeys@parse*0\ltxkeys@keys + \cptpassexpanded{\endgroup + \csn@def{\ltxkeys@hdr disabledkeys}{\ltxkeys@dkeys}% + \noexpand\ltxkeys@disabletrue + \the\toks@ + \noexpand\ltxkeys@disablefalse + }% } \robust@def*\ltxkeys@nostarform#1#2{% \if\detokenize{#1*.}% - \ltxkeys@err{No star (*) form of command \string#2}\@ehc + \ltxkeys@err{No star (*) form of command \string#2}\ltxkeys@ehc \fi } \robust@def*\ltxkeys@declareoption{% - \let\ltxkeys@tempa\ltxkeys@ordkey \let\@fileswith@pti@ns\@badrequireerror - \cpt@ifstar\ltxkeys@unknownoptionhandler\ltxkeys@d@cl@reoption + \cpt@ifstar{% + \ltxkeys@unknownoptionhandler + }{% + \let\ltxkeys@tempa\ltxkeys@ordkey + \ltxkeys@d@cl@reoption + }% } \robust@def\ltxkeys@unknownoptionhandler{% \cpt@testopt\ltxkeys@unkn@wnoptionhandler{KV}% } \robust@def*\ltxkeys@unkn@wnoptionhandler[#1]{% - \cpt@testfam{\ltxkeys@unkn@wnopti@nhandler#1}% + \cpt@testfam{\ltxkeys@unkn@wnopti@nhandler{#1}}% } \robust@def*\ltxkeys@unkn@wnopti@nhandler#1<#2>#3{% + \def\ltxkeys@default@ds{default@ds@opt}% \ltxkeys@unkn@wnkeyhandler[#1]{#2}{#3}% } +\robust@def*\ltxkeys@declareordoption#1{% + \let\@fileswith@pti@ns\@badrequireerror + \ltxkeys@d@clareoption{#1}{ord}% +} +\newletcs\ltxkeys@declareordoptions\ltxkeys@declareordoption +\newletcs\ltxkeys@declareoptions\ltxkeys@declareordoption \robust@def*\ltxkeys@declarecmdoption#1{% \let\@fileswith@pti@ns\@badrequireerror \ltxkeys@d@clareoption{#1}{cmd}% } +\newletcs\ltxkeys@declarecmdoptions\ltxkeys@declarecmdoption \robust@def*\ltxkeys@declarebooloption#1{% \let\@fileswith@pti@ns\@badrequireerror \ltxkeys@d@clareoption{#1}{bool}% } +\newletcs\ltxkeys@declarebooloptions\ltxkeys@declarebooloption \robust@def*\ltxkeys@declarechoiceoption#1{% \let\@fileswith@pti@ns\@badrequireerror \ltxkeys@d@clareoption{#1}{choice}% } +\newletcs\ltxkeys@declarechoiceoptions\ltxkeys@declarechoiceoption \robust@def*\ltxkeys@d@clareoption#1#2{% - \aftercsname - {\ltxkeys@nostarform{#1}}{ltxkeys@declare#2option}% + \aftercsname{\ltxkeys@nostarform{#1}}{ltxkeys@declare#2option}% \edef\ltxkeys@tempa{\noexpandcsn{ltxkeys@#2key}}% \let\@fileswith@pti@ns\@badrequireerror - \ltxkeys@d@cl@reoption#1% + \ifsingletokenTF{#1}{% + \ltxkeys@d@cl@reoption#1% + }{% + \ltxkeys@d@cl@reoption{#1}% + }% } \robust@def*\ltxkeys@d@cl@reoption{% \cpt@testopt\ltxkeys@d@cl@r@option{KV}% } \robust@def*\ltxkeys@d@cl@r@option[#1]{% - \cpt@testfam{\ltxkeys@d@cl@r@opti@n#1}% + \cpt@testfam{\ltxkeys@d@cl@r@opti@n{#1}}% +} +\robust@def*\ltxkeys@d@cl@r@opti@n#1<#2>{\ltxkeys@tempa[#1]{#2}} +\robust@def*\ltxkeys@declaremultitypeoptions{% + \cpt@teststopt\ltxkeys@d@claremultitypeoptions{KV}% +} +\newletcs\declaremultitypeoptions\ltxkeys@declaremultitypeoptions +\robust@def*\ltxkeys@d@claremultitypeoptions[#1]{% + \cpt@testfam{\ltxkeys@d@cl@remultitypeoptions{#1}}% } -\robust@def*\ltxkeys@d@cl@r@opti@n#1<#2>{% - \ltxkeys@tempa[#1]{#2}% +\robust@def*\ltxkeys@d@cl@remultitypeoptions#1<#2>{% + \cptsafeactivesedef\reserved@b{#2}% + \cptexpanded{\ltxkeys@declarekeys\ifcpt@st*\fi[#1]{\reserved@b}}% } \robust@def*\ltxkeys@executeoptions#1{% \ltxkeys@nostarform{#1}\ltxkeys@executeoptions + \ltxkeys@debug{==}{Executing options}% \ltxkeys@exoptrue\ltxkeys@stfalse\ltxkeys@pltrue \ltxkeys@rmfalse - \ltxkeys@testopt@@b\ltxkeys@setkeys@a#1% + \ifsingletokenTF{#1}{% + \ltxkeys@testopt@@b\ltxkeys@setkeys@a#1% + }{% + \ltxkeys@testopt@@b\ltxkeys@setkeys@a{#1}% + }% +} +\robust@def*\ltxkeys@beforeprocessoptions{% + \ifcsndefTF{\@currname @\@currext @ltxkeys@beginprocessopt}{% + \ltxkeys@warn{Command \noexpand\ltxkeys@beforeprocessoptions + is wrongly located}% + \@gobble + }{% + \grightaddtocsn{\@currname @\@currext + @ltxkeys@beforeprocessopt@hook}% + }% } -\emptify\ltxkeys@processedoptions +\robust@def*\ltxkeys@afterprocessoptions{% + \ifcsndefTF{\@currname @\@currext @ltxkeys@endprocessopt}{% + \@firstofone + }{% + \grightaddtocsn{\@currname @\@currext + @ltxkeys@afterprocessopt@hook}% + }% +} +\robust@def*\ltxkeys@useandrelaxcsn#1{% + \ifcsndefFT{#1}{}{% + \letcstocsn\reserved@a{#1}% + \letcsntocs{#1}\relax + \reserved@a + }% +} +\def\ltxkeys@processedoptions{} \robust@def*\ltxkeys@processoptions{% + \ifcsndefTF{\@currname @\@currext @ltxkeys@beginprocessopt}{% + \ltxkeys@err{\noexpand\ltxkeys@processoptions issued twice + in same \@cls@pkg '\@currname'}\ltxkeys@ehc + }{% + \csn@def{\@currname @\@currext @ltxkeys@beginprocessopt}{}% + }% + \ltxkeys@useandrelaxcsn + {\@currname @\@currext @ltxkeys@beforeprocessopt@hook}% + \ltxkeys@debug{==}{Processing options}% \ltxkeys@pltrue\ltxkeys@rmfalse \ltxkeys@testopt@@a\ltxkeys@pr@cessoptions } \robust@def*\ltxkeys@pr@cessoptions[#1]{% - \def\ltxkeys@poxlist{}% \ltxkeys@pxoptrue + \def\ltxkeys@poxlist{}% \let\@fileswith@pti@ns\@badrequireerror \edef\ltxkeys@testname{\@currname.\@currext}% - \ifxTF\ltxkeys@testname\cpt@documentclass{% - \let\@unusedoptionlist\cpt@classoptionslist + \ltxkeys@ifxTF\ltxkeys@testname\ltxkeys@documentclass{% + \let\@unusedoptionlist\ltxkeys@classoptionslist }{% - \if@boolFT{ltxkeys@st}{}{% + \ifdefboolFT{ltxkeys@st}{}{% \def\ltxkeys@do##1{% \edef\CurrentKeyval{\unexpanded{##1}}% \ltxkeys@getkeyname##1=\ltxkeys@nil\ltxkeys@tkey @@ -2151,53 +3426,85 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \let\xp\expandcsonce \edef\x{[\xp\ltxkeys@prefs]{\xp\ltxkeys@fams}{\xp\ltxkeys@tkey}}% \expandafter\endgroup\expandafter\ltxkeys@ifkeydefFT\x{}{% - \ifcsnullTF\@unusedoptionlist{% + \ltxkeys@ifcsemptyTF\@unusedoptionlist{% \cptgaddtolist\ltxkeys@processedoptions{##1}% }{% \cpt@removecurroption{##1}% + \ltxkeys@debug{==}{Key \ltxkeys@currtriple, removed from + \string\@unusedoptionlist}% }% \cptaddtolist\ltxkeys@poxlist{##1}% }% }% - \ifcsnullTF\cpt@classoptionslist{}% - {\ltxkeys@csvloop*\cpt@classoptionslist}% + \ltxkeys@ifcsemptyTF\ltxkeys@classoptionslist{} + {\ltxkeys@parse*0\ltxkeys@classoptionslist}% }% }% - \begingroup \edef\ltxkeys@tempa{\cpt@optionlist{\@currname.\@currext}}% - \cptexpanded{\endgroup - \ifcsnullTF\ltxkeys@tempa{}{% - \cptaddtolist\noexpand\ltxkeys@poxlist{\expandcsonce\ltxkeys@tempa}% - }% - }% - \ifcsnullTF\ltxkeys@poxlist{}{% + \edef\ltxkeys@poxlist + {\csliststack,\ltxkeys@tempa\expandcsonce\ltxkeys@poxlist}% + \ltxkeys@ifcsemptyTF\ltxkeys@poxlist{}{% \cptexpandargonce{\ltxkeys@setkeys@a[#1]}\ltxkeys@poxlist }% - \gundefcs\ltxkeys@poxlist - \csn@def{\ltxkeys@hdr @rmkeys}{}% + \s@expandarg\ltxkeys@getkeynames\ltxkeys@poxlist + \def\ltxkeys@do##1{% + \ltxkeys@makepf{##1}% + \def\ltxkeys@do####1{% + \ltxkeys@makehdr{####1}% + \def\ltxkeys@do########1{% + \ifcsndefTF{\ltxkeys@hdr########1}{% + \csn@xdef{\ltxkeys@hdr poxkeys}{% + \csnliststack,{\ltxkeys@hdr poxkeys}% + \unexpanded{########1}% + }% + }% + }% + \ltxkeys@parse*0\ltxkeys@keynames + \ifcsndefFT{\ltxkeys@hdr optionkeys}{}{% + \letcstocsn\ltxkeys@tempb{\ltxkeys@hdr poxkeys}% + \ifdefTF\ltxkeys@tempb{}{\def\ltxkeys@tempb{}}% + \def\ltxkeys@do########1{% + \xifinsetTF{,########1,}{,\expandcsonce\ltxkeys@tempb,}{}{% + \edef\ltxkeys@tempb{% + \csliststack,\ltxkeys@tempb\unexpanded{########1}% + }% + }% + }% + \aftercsname{\ltxkeys@parse*0}{\ltxkeys@hdr optionkeys}% + \gletcsntocs{\ltxkeys@hdr poxkeys}\ltxkeys@tempb + }% + }% + \ltxkeys@parse*0\ltxkeys@fams + }% + \ltxkeys@parse*0\ltxkeys@prefs + \undefcs\ltxkeys@poxlist + \csn@def{\ltxkeys@hdr rmkeys}{}% \ltxkeys@pxopfalse \let\@fileswith@pti@ns\@@fileswith@pti@ns \AtEndOfPackage{\let\@unprocessedoptions\relax}% + \ltxkeys@debug{==}{Ended processing options}% + \ltxkeys@debug{==}{Now doing <afterprocessoptions>}% + \ltxkeys@useandrelaxcsn + {\@currname @\@currext @ltxkeys@afterprocessopt@hook}% + \csn@def{\@currname @\@currext @ltxkeys@endprocessopt}{}% } \robust@def*\ltxkeys@ifkeydefTF{\begingroup\ltxkeys@ifkeydef0} \robust@def*\ltxkeys@ifkeydefFT{\begingroup\ltxkeys@ifkeydef1} \robust@def*\ltxkeys@ifkeydef#1{\cpt@testopt{\ltxkeys@ifk@ydef#1}{KV}} \robust@def*\ltxkeys@ifk@ydef#1[#2]#3#4{% - \def\ltxkeys@prefs{#2}% - \def\ltxkeys@fams{#3}% - \cpt@sttrue\cpt@csvnormalize[,]\ltxkeys@fams + \ltxkeys@commanormalizeset{{#2}\ltxkeys@prefs,{#3}\ltxkeys@fams}% \ltxkeys@trimspaces{#4}\ltxkeys@tkey \cpt@choicefdfalse \def\ltxkeys@do##1{% - \if@boolTF{cpt@choicefd}{% + \ifboolTF{cpt@choicefd}{% \loopbreak }{% \ltxkeys@makepf{##1}% \ltxkeys@ifk@yd@f }% }% - \ltxkeys@csvparse*\ltxkeys@prefs - \ltxkeys@oneoftwo#1\endgroup + \ltxkeys@parse*0\ltxkeys@prefs + \ltxkeys@ifchcfd#1\endgroup } \robust@def*\ltxkeys@ifk@yd@f{% \def\ltxkeys@do##1{% @@ -2206,8 +3513,331 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \cpt@choicefdtrue\loopbreak }{}% }% - \ltxkeys@csvloop*\ltxkeys@fams + \ltxkeys@parse*0\ltxkeys@fams } +\robust@def*\ltxkeysglobal{\ltxkeys@globaltrue} +\robust@def*\ltxkeysprotected{\ltxkeys@protectedtrue} +\newletcs\ltxkeysrobust\ltxkeysprotected +\robust@def*\ltxkeys@global@protected{% + \ifltxkeys@global + \ltxkeys@globalfalse + \let\ltxkeys@tempa\global + \else + \let\ltxkeys@tempa\@empty + \fi + \ifltxkeys@protected + \ltxkeys@protectedfalse\protected + \fi + \ltxkeys@tempa +} +\robust@def*\ltxkeyscmd{% + \let\ltxkeys@inenv\cptswfalse + \cpt@starorlong\ltxkeys@keycommand +} +\robust@def*\ltxkeys@keycommand#1{% + \cpt@testopt{\ltxkeys@keycommand@a#1}0% +} +\robust@def*\ltxkeys@keycommand@a#1[#2]{% + \ltxkeys@inkeycmdtrue + \cpt@ifbrack + {\ltxkeys@keycommand@e#1{#2}}{\ltxkeys@keycommand@b#1{#2}}% +} +\robust@def*\ltxkeys@keycommand@b#1#2{% + \cpt@testltopt{\ltxkeys@keycommand@c{#1}{#2}}{}% +} +\robust@def*\ltxkeys@keycommand@c#1#2<#3>{% + \cpt@testpnopt{\ltxkeys@keycommand@d{#1}{#2}{#3}}{}% +} +\robust@def\ltxkeys@keycommand@d#1#2#3(#4)#5{% + \ifcsdefinable#1\relax + \edef\reserved@a{\cptgobblescape#1}% + \cptexpandsecond{\ltxkeys@declarekeys*[CMDKEY]} + {{ltxkeys@\reserved@a}[\reserved@a @]}{#4}% + \def\reserved@a{\ltxkeys@keycommand@h#1\@ne{#2}{#3}}% + \expandafter\reserved@a\expandafter{% + \expandafter\long\expandafter\edef\expandafter + \ltxkeys@cmdbody\expandafter{\expandafter + {\ltxkeys@inenv}{\unexpanded{#5}}}% + \cptexpandarg\cpt@testpnopt{\ltxkeys@keycommand@j + {\cptgobblescape#1}}{}% + }% +} +\robust@def*\ltxkeys@keycommand@e#1#2[#3]{% + \cpt@testltopt{\ltxkeys@keycommand@f{#1}{#2}{#3}}{}% +} +\robust@def*\ltxkeys@keycommand@f#1#2#3<#4>{% + \cpt@testpnopt{\ltxkeys@keycommand@g{#1}{#2}{#3}{#4}}{}% +} +\robust@def\ltxkeys@keycommand@g#1#2#3#4(#5)#6{% + \ifcsdefinable#1\relax + \edef\reserved@a{\cptgobblescape#1}% + \cptexpandsecond{\ltxkeys@declarekeys*[CMDKEY]} + {{ltxkeys@\reserved@a}[\reserved@a @]}{#5}% + \ifltxkeys@global\global\fi + \ifltxkeys@protected\protected\fi + \expandafter\def\expandafter#1\expandafter{% + \expandafter\@protected@testopt\expandafter#1% + \csname\string#1\endcsname{#3}% + }% + \def\reserved@a{% + \aftercsname\ltxkeys@keycommand@h{\string#1}\tw@{#2}{#4}% + }% + \expandafter\reserved@a\expandafter{% + \expandafter\long\expandafter\edef\expandafter + \ltxkeys@cmdbody\expandafter{\expandafter + {\ltxkeys@inenv}{\unexpanded{#6}}}% + \cptexpandarg\cpt@testpnopt{\ltxkeys@keycommand@j + {\cptgobblescape#1}}{}% + }% +} +\robust@def*\ltxkeys@keycommand@h#1#2#3#4{% + \ifnum#2=\tw@ + \def\ltxkeys@tempb##11{[####1]}% + \else + \let\ltxkeys@tempb\@gobble + \fi + \expandafter\ltxkeys@keycommand@i\expandafter{\number#3}#1{#4}% +} +\robust@def\ltxkeys@keycommand@i#1#2#3{% + \begingroup + \iflacus#3\dolacus + \let\elt\@gobble + \else + \def\elt##1{\expandcsnonce{d##1}}% + \@tempcnta\z@pt + \loop + \advance\@tempcnta\@ne + \csn@def{d\number\@tempcnta}{}% + \ifnum\@tempcnta<9\relax + \repeat + \@tempcnta\z@pt + \def\@do##1##2{% + \edef\ltxkeys@tempa{\cpttrimspace{##1}}% + \ifstrcmpTF{##1}\keycommand@nil{}{% + \advance\@tempcnta\@ne + \ifnum\@tempcnta>#1\relax + \ltxkeys@err{Number of delimiters exceeds + number of parameters}\ltxkeys@ehc + \fi + \xifinsetTF{,\expandcsonce\ltxkeys@tempa,} + {,1,2,3,4,5,6,7,8,9,}{}{% + \ltxkeys@err{Invalid delimiter syntax: + \MsgBrk no digit [1-9] found before + delimiter}\ltxkeys@ehc + }% + \csn@edef{d\ltxkeys@tempa}{\cpttrimspace{##2}}% + \@do + }% + }% + \@do#3\keycommand@nil\keycommand@nil + \fi + \iflacus#3\dolacus\else + \ifx\ltxkeys@tempb\@gobble\else + \expandafter\ifx\csname d1\endcsname\@empty\else + \ltxkeys@err{First argument of command \string#2 is + \MsgBrk already delimited by '[]'}\ltxkeys@ehc + \fi + \fi + \fi + \edef\ltxkeys@tempc{% + 0####1\ifx\ltxkeys@tempb\@gobble\elt1\fi + ####2\elt2####3\elt3####4\elt4####5\elt5####6\elt6% + ####7\elt7####8\elt8####9\elt9% + }% + \def\ltxkeys@tempa##1#1##2##{% + \def\ltxkeys@tempc{% + \ltxkeys@inkeycmdfalse + \ltxkeys@global@protected\l@ngrel@x + }% + \cptexpandsecond{\expandafter\endgroup\ltxkeys@tempc + \expandafter\def\expandafter#2\ltxkeys@tempb##1#1}{\elt{#1}}% + }% + \expandafter\ltxkeys@tempa\ltxkeys@tempc###1% +} +\robust@def*\ltxkeys@keycommand@j#1(#2){% + \ltxkeys@setkeys[CMDKEY]{ltxkeys@#1}{#2}% + \pushfunctions\ltxkeyscmd{\val,\ifval,\ifvalTF, + \keyval,\ifkeyval,\ifkeyvalTF}\ltxkeyscmd@depth + \def\val##1{\usename{#1@\cpttrimspace{##1}}}% + \def\ifval##1\then{\usename{if#1@\cpttrimspace{##1}}}% + \def\ifvalTF##1{% + \ifval##1\then\expandafter\iofii\else\expandafter\iiofii\fi + }% + \def\keyval##1{% + \ifcsndefTF{#1@\cpttrimspace{##1}}{% + \usename{#1@\cpttrimspace{##1}}% + }{% + \ltxkeys@err{Key '\cpttrimspace{##1}' not defined by + command '\@backslashchar#1'}\ltxkeys@ehc + }% + }% + \def\ifkeyval##1\then{% + \ifcsndefTF{if#1@\cpttrimspace{##1}}{% + \usename{if#1@\cpttrimspace{##1}}% + }{% + \ltxkeys@err{Key '\cpttrimspace{##1}' not defined by + command '\@backslashchar#1'}\ltxkeys@ehc + }% + }% + \def\ifkeyvalTF##1{% + \ifkeyval##1\then\expandafter\iofii\else\expandafter\iiofii\fi + }% + \long\def\reserved@a##1##2\ltxkeys@nil{% + \ifcondTF\if##1\fi{% + ##2% + }{% + ##2% + \popfunctions\ltxkeyscmd\ltxkeyscmd@depth + }% + }% + \expandafter\reserved@a\ltxkeys@cmdbody\ltxkeys@nil +} +\robust@def*\reltxkeyscmd{% + \let\ltxkeys@inenv\cptswfalse + \cpt@starorlong\ltxkeys@rekeycommand +} +\robust@def*\ltxkeys@rekeycommand#1{% + \ifdefTF{#1}{}{% + \ltxkeys@warn{Command '\string#1' was previously undefined + \MsgBrk but now defined by \string\ltsrenewcommand}% + }% + \let\ifcsdefinable\rc@ifcsdefinable + \ltxkeys@keycommand#1% +} +\robust@def*\ltxkeysenv{% + \let\ltxkeys@inenv\cptswtrue + \cpt@starorlong\ltxkeys@keyenvironment +} +\robust@def*\ltxkeys@keyenvironment#1{\cpt@testopt{\ltxkeys@newenv@a#1}0} +\robust@def*\ltxkeys@newenv@a#1[#2]{% + \begingroup + \toks@{}% + \ifnum#2=\z@pt\else + \@tempcnta\z@pt + \loop + \advance\@tempcnta\@ne + \cptexpanded{% + \toks@{\the\toks@\csn@def{keyenvarg@\romannumeral\@tempcnta}% + {########\the\@tempcnta}}% + }% + \ifnum\@tempcnta<#2\relax + \repeat + \fi + \cpt@ifbrack{\ltxkeys@newenv@b#1[#2]}{\ltxkeys@newenv@c{#1}[#2]}% +} +\robust@def*\ltxkeys@newenv@b#1[#2][#3]{% + \cpt@testltopt{\ltxkeys@newenv@d{#1}{[#2][{#3}]}}{}% +} +\robust@def*\ltxkeys@newenv@c#1[#2]{% + \cpt@testltopt{\ltxkeys@newenv@d{#1}{[#2]}}{}% +} +\robust@def*\ltxkeys@newenv@d#1#2<#3>{% + \cpt@testpnopt{\ltxkeys@newenv@e{#1}{#2}{#3}}{}% +} +\robust@def\ltxkeys@newenv@e#1#2#3(#4)#5#6{% + \ifcsndefTF{#1}{}{\letcsntocsn{#1}{end#1}}% + \def\@do##1{\edef\@do{\unexpanded{##1}}}% + \ifblankTF{#3}{% + \ifblankTF{#4}{% + \@do{#2}% + }{% + \@do{#2(#4)}% + }% + }{% + \ifblankTF{#4}{% + \@do{#2<#3>}% + }{% + \@do{#2<#3>(#4)}% + }% + }% + \xdef\ltxkeys@newenv@f{% + \ifltxkeys@global\global\fi + \ifltxkeys@protected\protected\fi + }% + \cptexpandsecond{% + \endgroup\ltxkeys@keycommand + }{% + \noexpandcsn{#1}\expandcsonce\@do{% + \the\toks@\unexpanded{#5}% + }% + }% + \ltxkeys@newenv@f + \l@ngrel@x\csn@def{end#1}{% + \def\envarg####1{\usename{keyenvarg@\romannumeral####1}}% + #6\relax + \popfunctions\ltxkeyscmd\ltxkeyscmd@depth + \ltxkeys@everyeoehook + }% +} +\robust@def*\reltxkeysenv{% + \let\ltxkeys@inenv\cptswtrue + \cpt@starorlong\ltxkeys@rekeyenvironment +} +\robust@def*\ltxkeys@rekeyenvironment#1{% + \ifdefTF{#1}{}{% + \ltxkeys@warn{Environment '\string#1' was previously undefined + \MsgBrk but now defined by \string\reltxkeysenv}% + }% + \letcsntocs{#1}\relax + \letcsntocs{end#1}\relax + \ltxkeys@keyenvironment{#1}% +} +\robust@def\ltxkeys@ifpattern#1#2{% + \begingroup + \edef\ltxkeys@tempa##1{\def##1####1\detokenize{#1}####2&}% + \ltxkeys@tempa\ltxkeys@tempa{% + \aftercsname\endgroup{@\ifblankTF{##2}{second}{first}oftwo}% + }% + \edef\ltxkeys@tempb##1{##1\detokenize{#1}&}% + \ltxkeys@tempb{\expandafter\ltxkeys@tempa\meaning#2}% +} + +\new@def*\ltxkeys@everyeoehook{} +\robust@def*\ltxkeys@everyeoe#1{% + \ifblankTF{#1}{% + \gdef\ltxkeys@everyeoehook{}% + }{% + \xdef\ltxkeys@everyeoehook{% + \unexpanded{#1}\expandcsonce\ltxkeys@everyeoehook + }% + }% + \ltxkeys@ifpattern\@ignoretrue\ltxkeys@everyeoehook{% + \ltxkeys@ifpattern\ignorespacesafterend\ltxkeys@everyeoehook{% + \ltxkeys@err{Bad '\string\ltxkeys@everyeoe'} + {You can't have both '\string\@ignoretrue' and + '\string\ignorespacesafterend' in + \MsgBrk '\string\ltxkeys@everyeoe'.}% + }{% + \ltxkeys@checkbadeoe\@ignoretrue + }% + }{% + \ltxkeys@ifpattern\ignorespacesafterend\ltxkeys@everyeoehook{% + \ltxkeys@checkbadeoe\ignorespacesafterend + }{}% + }% +} +\new@def*\ltxkeys@checkbadeoe#1{% + \begingroup + \edef\ltxkeys@tempa##1{\def##1####1\detokenize{#1}####2&}% + \ltxkeys@tempa\ltxkeys@tempa{% + \ifblankTF{##2}{}{% + \xifinsetTF{\detokenize{#1}}{##2}{% + \ltxkeys@err{'\detokenize{#1}' repeated in + '\string\ltxkeys@everyeoe'.} + {Multiple '\detokenize{#1}' not allowed in + '\string\ltxkeys@everyeoe'.}% + }{% + \ltxkeys@err{Bad last token in '\string\ltxkeys@everyeoe'} + {'\detokenize{#1}' not the last token in + '\string\ltxkeys@everyeoe'.}% + }% + }% + }% + \expandafter\ltxkeys@tempa\meaning\ltxkeys@everyeoehook&% + \endgroup +} +\ltxkeys@everyeoe\ignorespacesafterend + \robust@def*\ltxkeys@emergencystop{% \immediate\write\sixt@@n{OK, I'm exiting now.}% \interactionmode\z@pt @@ -2218,23 +3848,22 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ }% } \robust@def*\ltxkeys@unknownoptionerror{% - \@tx@warn{Unknown option '\CurrentOption' for package '\@currname'}% - \typein[\answer]{% - ^^JUnknown option '\CurrentOption' for package '\@currname'. - ^^JThe option '\CurrentOption' was not declared in package - ^^J'\@currname'. Perhaps you misspelled its name. - ^^JEnter 'x' and <return> to stop or any character and - <return> to continue. + \ltxkeys@err{Unknown option '\CurrentKey' for + \@cls@pkg\space '\@currname'} + {Unknown option '\CurrentKey' for \@cls@pkg\space '\@currname'. + \MsgBrk The option '\CurrentKey' was not declared in \@cls@pkg + \MsgBrk'\@currname'. Perhaps you misspelled its name. }% - \xifstrcmpTF\answer{x}\ltxkeys@emergencystop\relax } -\cpt@cleanup\ltxkeys@processedoptions - \cptonlypreamble{% - \ltxkeys@declareoption,\ltxkeys@declarecmdoption,% - \ltxkeys@declarebooloption,\ltxkeys@declarechoiceoption,% - \ltxkeys@processoptions,\ltxkeys@executeoptions,% - \ltxkeys@unknownoptionhandler,\ltxkeys@unknownkeyhandler + \ltxkeys@declareoption,\ltxkeys@declareoptions, + \ltxkeys@declareordoption,\ltxkeys@declareordoptions, + \ltxkeys@declarecmdoption,\ltxkeys@declarecmdoptions, + \ltxkeys@declarebooloption,\ltxkeys@declarebooloptions, + \ltxkeys@declarechoiceoption,\ltxkeys@declarechoiceoptions, + \ltxkeys@processoptions,\ltxkeys@executeoptions, + \ltxkeys@unknownoptionhandler,\ltxkeys@declaremultitypeoptions, + \declaremultitypeoptions } \ltxkeys@declareoption*[KV]<ltxkeys>{% \ltxkeys@warn{Unknown option '\CurrentKey' with @@ -2243,15 +3872,38 @@ $Id: ltxkeys.sty,v 0.0.1 2011/07/30 09:00:00 Ahmed Musa Exp $ \ltxkeys@declarecmdoption[KV]<ltxkeys>[ltxkeys@]{keyparser}[{;}]{% \stripallouterbracesincs\ltxkeys@keyparser } -\ltxkeys@declarecmdoption[KV]<ltxkeys>[ltxkeys@]{keystacklimit}[4]{% - \ifx\\#1\\% - \ltxkeys@err{Invalid empty value for 'keystacklimit'}\@ehc - \else - \xdef\cpt@optionstacklimit{\number#1}% +\ltxkeys@declarecmdoption[KV]<ltxkeys>[ltxkeys@]{% + \needvalue{keydepthlimit}% +}{% + \ifblankTF{#1}{% + \ltxkeys@err{Invalid empty value for 'keydepthlimit'} + \ltxkeys@ehc + }{% + \xdef\cpt@optionstacklimit{\number0#1}% + }% +} +\ltxkeys@declarecmdoption[KV]<ltxkeys>[ltxkeys@]{% + \needvalue{keystacklimit}% +}{% + \ltxkeys@setaliaskey{keydepthlimit}% +} +\ltxkeys@declarebooloption[KV]<ltxkeys>[ltxkeys@]{pathkeys}{% + \ifltxkeys@pathkeys + \ltxkeys@afterprocessoptions{\RequirePackage{pathkeys}}% \fi } -\ltxkeys@declarebooloption[KV]<ltxkeys>[ltxkeys@]{verbose}[true]{} -\ltxkeys@executeoptions[KV]<ltxkeys>{keyparser,keystacklimit}\relax +\ltxkeys@declarebooloptions[KV]<ltxkeys>[ltxkeys@] + {tracingkeys,reservenopath}[true]{} +\ltxkeys@declarebooloption[KV]<ltxkeys>[ltxkeys@]{allowemptypath} + [true]{\ifltxkeys@allowemptypath\ltxkeys@useemptytrue\fi} +\ltxkeys@executeoptions[KV]<ltxkeys> + {keyparser,keydepthlimit=4}\relax \ltxkeys@processoptions*[KV]<ltxkeys>\relax +\cpt@optioncleanup\ltxkeys@processedoptions +\robust@def*\ltxkeys@options#1{% + \ifblankTF{#1}{}{\ltxkeys@setkeys[KV]{ltxkeys}{#1}}% +} \endinput + +%% End of file ltxkeys.sty %% diff --git a/Master/texmf-dist/tex/latex/ltxkeys/pathkeys.sty b/Master/texmf-dist/tex/latex/ltxkeys/pathkeys.sty new file mode 100644 index 00000000000..d047ec0b90e --- /dev/null +++ b/Master/texmf-dist/tex/latex/ltxkeys/pathkeys.sty @@ -0,0 +1,615 @@ +%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% +% % +% This is file 'pathkeys.sty', version 0.0.2, October 2011. % +% % +% This package and accompanying files 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 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. % +% % +% The LPPL maintenance status of this software is 'author-maintained'. % +% % +% This software is provided 'as it 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. % +% % +% Copyright (c) 2011 Ahmed Musa (amusa22@gmail.com). % +% % +%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% + +\@ifpackageloaded{ltxkeys}{% + \@ifpackagelater{ltxkeys}{2011/10/22}{}{% + \@latex@error{Loaded version of ltxkeys package is + not current}\@ehc + }% +}{% + \RequirePackage{ltxkeys}[2011/10/22]% +} +\UseNormalCatcodes +\StyleFilePurpose{A robust and fast key-value parser (AM)} +\StyleFileRCSInfo +$Id: pathkeys.sty,v 0.0.2 2011/10/22 09:00:00 Ahmed Musa Exp $ +\ProvidesPackage{pathkeys}[\StyleFileInfo] +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\SetStyleFileMessages[pathkeys@]{info}{warn}{err} +\newvariables{count}[pathkeys@]{cnta}[\z@pt] +\newvariables{if}[pathkeys@]{chfd}[false] +\newletcs\pathkeys@relax\relax +\new@def\pathkeys@gobbletorelax#1\pathkeys@relax{} +\robust@def*\pathkeys@getkeypath#1{% + \xifinsetTF{:}{\detokenize{#1}}{}{% + \pathkeys@err{I can't find ':' in argument of + \string\pathkeys}\ltxkeys@ehc + }% + \def\reserved@a##1:##2\ltxkeys@nil{% + \iflacus##1\dolacus + \pathkeys@err{Nil flag in argument of + \string\pathkeys}\ltxkeys@ehc + \fi + \ltxkeys@trimspaces{##1}\key@path + \ltxkeys@trimspaces{##2}\key@list + \csv@@normalize*[/]\key@path + \s@expandarg\pathkeys@getkeyflag\key@path + \csv@@normalize*[/]\key@path + \cptsafeactivesedef\key@path\key@path + \xifstrcmpTF\key@flag{ifkeyonpath}{% + \pathkeys@gobbletorelax + }{% + \pathkeys@listadd*![;]\pathkeys@pathhistory\key@path + }% + }% + \reserved@a#1\ltxkeys@nil +} +\robust@def*\pathkeys@getkeyflag#1{% + \def\do##1,##2\ltxkeys@nil{% + \xifinsetTF{\detokenize{##1}\relax}{\detokenize{#1}\relax}{% + \def\reserved@a####1##1\relax{% + \ltxkeys@trimspaces{##1}\key@flag + \ltxkeys@trimspaces{####1}\key@path + }% + \reserved@a#1\relax + }{% + \ifnullTF{##2}{% + \pathkeys@err{Unknown flag in argument of + \string\pathkeys}\ltxkeys@ehc + }{% + \do##2\ltxkeys@nil + }% + }% + }% + \do define,define*,declareoptions,declareoptions*,set,% + executeoptions,processoptions,processoptions*,launch,% + key handler,option handler,ifbool,add value,store value,% + print value,disable,disable*,fdef,ifkeyonpath,\ltxkeys@nil +} +\robust@def*\pathkeys@splitpath#1{% + \def\main@path{}\def\sub@path{}% + \@tempcnta\z@pt + \def\do##1/{% + \defifxTF{##1}\ltxkeys@nnil{}{% + \advance\@tempcnta\@ne + \ifnum\@tempcnta=\@ne + \def\main@path{##1}% + \else + \edef\sub@path{\csliststack{/}\sub@path##1}% + \fi + \do + }% + }% + \do#1/\ltxkeys@nil/% +} +\robust@def*\pathkeys@checkpath#1{% + \iflacus#1\dolacus + \ltxkeys@debug{==}{Empty key path in \string\pathkeys: default used}% + \let\key@path\pathkeys@c@rrentpath + \else + \def\reserved@a##1/##2/##3/##4\ltxkeys@nil{% + \iflacus##2\dolacus + \pathkeys@err{Empty key <sub> in \string\pathkeys}\ltxkeys@ehc + \fi + }% + \reserved@a#1///\ltxkeys@nil + \fi +} +\robust@def*\pathkeys@getkeyname#1{% + \def\reserved@a##1/##2\ltxkeys@nil{% + \ltxkeys@trimspaces{##1}\key@type + }% + \reserved@a#1\ltxkeys@nil + \xifstrcmpTF{\detokenize{choice}}{\cptoxdetok\key@type}{% + \def\reserved@a##1/##2.##3\ltxkeys@nil{% + \ltxkeys@trimspaces{##2}\key@name + }% + \reserved@a#1\ltxkeys@nil + }{% + \def\reserved@a##1/##2/##3\ltxkeys@nil{% + \ltxkeys@trimspaces{##2}\key@name + \ltxkeys@ifrejname{% + \pathkeys@err{^^JI can't find key name in attributes of + key in^^J||\detokenize{#1}||^^J}\ltxkeys@ehc + }% + }% + \reserved@a#1/^?/\ltxkeys@nil + }% +} +\robust@def*\pathkeys@checkifdef{% + \xifinsetTF{,\key@flag,}{,define*,declareoptions*,}{% + \def\ltxkeys@resa{}% + \def\ltxkeys@do##1{% + \pathkeys@getkeyname{##1}% + \ifcsndefTF{pathkeys/curr/\ltxkeys@iffirstnull\main@path/% + \ltxkeys@iffirstnull\sub@path/\key@name + }{% + \edef\ltxkeys@resa{\csliststack,\ltxkeys@resa\key@name}% + }{}% + }% + \cptexpandsecond{\ltxkeys@parse*1}{[\ltxkeys@keyparser]}\key@list + \ifx\ltxkeys@resa\@empty\else + \pathkeys@err{^^JKey names^^J||\ltxkeys@resa||^^J% + in argument of \noexpand\pathkeys are already in + use on path '\key@path'}\ltxkeys@ehc + \fi + }{}% +} +\cpt@setupsafeactivesedef +\robust@def*\pathkeys#1{% + \begintoksgroup + \pathkeys@getkeypath{#1}% + \s@expandarg\pathkeys@checkpath\key@path + \s@expandarg\pathkeys@splitpath\key@path + \pathkeys@checkifdef + \pathkeys@relax + \let\xp\expandcsonce + \let\elt\ltxkeys@iffirstnull + \def\reserved@a##1{% + \def\reserved@a####1##1####2####3\ltxkeys@nil{% + \defifxTF{####2}\ltxkeys@nil{% + \pathkeys@err{Unknown flag '####1' in argument of + \string\pathkeys}\ltxkeys@ehc + }{% + \cptexpanded{\toks@{####2}}% + }% + }% + \expandafter\reserved@a\pathkeys@actions##1{\ltxkeys@nil}\ltxkeys@nil + }% + \s@expandarg\reserved@a\key@flag + \endtoksgroup +} +\robust@def*\pathkeys@actions{% + define{\pathkeys@defkey\ltxkeys@declarekeys{{\sub@path}}}% + define*{\pathkeys@defkey{\ltxkeys@declarekeys*}{{\sub@path}}}% + declareoptions{\pathkeys@defkey + \ltxkeys@declaremultitypeoptions{<\sub@path>}}% + declareoptions*{\pathkeys@defkey + {\ltxkeys@declaremultitypeoptions*}{<\sub@path>}}% + set{\pathkeys@setkeys{\main@path}{\sub@path}{\xp\key@list}}% + executeoptions{\pathkeys@executeoptions{\main@path}% + {\sub@path}{\xp\key@list}}% + processoptions{\pathkeys@processoptions{\main@path}% + {\sub@path}{\xp\key@list}}% + processoptions*{\pathkeys@processoptions*{\main@path}% + {\sub@path}{\xp\key@list}}% + launch{\ltxkeys@launchkeys[\main@path]{\sub@path}{\xp\key@list}}% + handler{\ltxkeys@unknownkeyhandler[\main@path]% + {\sub@path}{\xp\key@list}}% + key handler{\ltxkeys@unknownkeyhandler[\main@path]% + {\sub@path}{\xp\key@list}}% + option handler{\ltxkeys@unknownoptionhandler[\main@path]% + <\sub@path>{\xp\key@list}}% + ifbool{\noexpand\ifp@thkeys@keyvalTF{\key@list}% + {pathkeys/curr/\elt\main@path/\elt\sub@path/\key@list}}% + add value{\p@thkeys@addtovalue{\xp\key@list}% + {pathkeys/curr/\elt\main@path/\elt\sub@path/}}% + store value{\p@thkeys@storevalue{\xp\key@list}% + {pathkeys/curr/\elt\main@path/\elt\sub@path/}}% + print value{\noexpand\p@thkeys@keyval{\key@list}% + {pathkeys/curr/\elt\main@path/\elt\sub@path/\key@list}}% + disable{\ltxkeys@disablekeys[\main@path]{\sub@path}{\key@list}}% + disable*{\ltxkeys@disablekeys*[\main@path]{\sub@path}{\key@list}}% + ifdef{\noexpand\ifp@thkeys@keydef{\main@path}{\sub@path}{\key@list}}% + ifkeyonpath{\noexpand\ifp@thkeys@onpath{\key@path}{\key@list}}% +} +\robust@def*\pathkeys@setkeys#1#2#3{% + \xifinsetTF{\relax[}{\relax\detokenize{#3}}{% + \def\reserved@a[##1]##2\ltxkeys@nil{% + \ltxkeys@setkeys[#1]{#2}[##1]{##2}% + }% + \reserved@a#3\ltxkeys@nil + }{% + \xifinsetTF{]\relax}{\detokenize{#3}\relax}{% + \def\reserved@a##1[##2]\ltxkeys@nil{% + \ltxkeys@setkeys[#1]{#2}[##2]{##1}% + }% + \reserved@a#3\ltxkeys@nil + }{% + \ltxkeys@setkeys[#1]{#2}{#3}% + }% + }% +} +\robust@def*\pathkeys@executeoptions#1#2#3{% + \xifinsetTF{\relax[}{\relax\detokenize{#3}}{% + \def\reserved@a[##1]##2\ltxkeys@nil{% + \ltxkeys@executeoptions[#1]<#2>[##1]{##2}% + }% + \reserved@a#3\ltxkeys@nil + }{% + \xifinsetTF{]\relax}{\detokenize{#3}\relax}{% + \def\reserved@a##1[##2]\ltxkeys@nil{% + \ltxkeys@executeoptions[#1]<#2>[##2]{##1}% + }% + \reserved@a#3\ltxkeys@nil + }{% + \ltxkeys@executeoptions[#1]<#2>{#3}% + }% + }% +} +\robust@def*\pathkeys@processoptions{% + \ltxkeys@testst\pathkeys@pr@cessoptions +} +\robust@def*\pathkeys@pr@cessoptions#1#2#3{% + \edef\reserved@e{\ifltxkeys@st*\fi}% + \xifinsetTF{\relax[}{\relax\detokenize{#3}}{% + \def\reserved@a[##1]##2\ltxkeys@nil{% + \iflacus##2\dolacus\else + \pathkeys@err{Wrong use of 'processoptions' flag in + \string\pathkeys}{The invalid part is '\detokenize{##2}'}% + \fi + \expandafter\ltxkeys@processoptions\reserved@e[#1]<#2>[##1]% + }% + \reserved@a#3\ltxkeys@nil + }{% + \xifinsetTF{]\relax}{\detokenize{#3}\relax}{% + \def\reserved@a##1[##2]\ltxkeys@nil{% + \iflacus##1\dolacus\else + \pathkeys@err{Wrong use of 'processoptions' flag in + \string\pathkeys}{The invalid part is '\detokenize{##1}'}% + \fi + \expandafter\ltxkeys@processoptions\reserved@e[#1]<#2>[##2]% + }% + \reserved@a#3\ltxkeys@nil + }{% + \expandafter\ltxkeys@processoptions\reserved@e[#1]<#2>% + }% + }% +} +\new@def*\pathkeys@defkey#1#2{% + \noexpand\ltxkeys@inkeycmdtrue + #1[\main@path]#2[pathkeys/curr/\elt\main@path/\elt\sub@path/]% + {\expandcsonce\key@list}% + \noexpand\ltxkeys@inkeycmdfalse +} +\robust@def*\p@thkeys@storevalue#1#2{% + \ltxkeys@getlasttoken{#1}% + \ltxkeys@trimspacesincs\ltxkeys@lasttoken + \ltxkeys@trimspacesincs\ltxkeys@resttokens + \ifcsndefTF{#2\ltxkeys@resttokens}{% + \expandafter\edef\ltxkeys@lasttoken + {\expandcsnonce{#2\ltxkeys@resttokens}}% + }{% + \pathkeys@err{Key '\ltxkeys@resttokens' not defined}\ltxkeys@ehc + }% +} +\robust@def*\p@thkeys@addtovalue#1#2{% + \begingroup + \ltxkeys@splitkeyval#1\ltxkeys@nil\ltxkeys@tempa\ltxkeys@tempb + \ifcsndefTF{#2\ltxkeys@tempa}{% + \csn@edef{#2\ltxkeys@tempa}{% + \expandcsnonce{#2\ltxkeys@tempa}% + \expandcsonce\ltxkeys@tempb + }% + \postgroupcsndef{#2\ltxkeys@tempa}\endgroup + }{% + \pathkeys@err{Key '\ltxkeys@tempa' not defined}\ltxkeys@ehc + \endgroup + }% +} +\new@def*\p@thkeys@keyval#1#2{% + \ifcsndefTF{#2}{% + \expandcsnonce{#2}% + }{% + \pathkeys@err{Key '#1' not defined on the given path}\ltxkeys@ehc + }% +} +\new@def*\ifp@thkeys@keyval#1#2\then{% + \ifcsndefTF{if#2}{% + \usename{if#2}% + }{% + \pathkeys@err{Key '#1' not defined or not a boolean}\ltxkeys@ehc + }% +} +\new@def*\ifp@thkeys@keyvalTF#1#2{% + \ifp@thkeys@keyval{#1}{#2}\then\expandafter\iofii\else + \expandafter\iiofii\fi +} +\new@def*\ifp@thkeys@keydef#1#2#3{% + \begingroup + \pathkeys@chfdfalse + \ifcsndefTF{pathkeys/curr/#1/#2/#3}{% + \pathkeys@chfdtrue + }{% + \ifcsndefTF{#1@#2@#3}{% + \pathkeys@chfdtrue + }{}% + }% + \expandafter\endgroup\ifpathkeys@chfd + \expandafter\iofii\else\expandafter\iiofii\fi +} +\robust@def*\ifp@thkeys@onpath#1#2{% + \begingroup + \pathkeys@chfdfalse + \def\ltxkeys@do##1{% + \pathkeys@checkpath{##1}% + \pathkeys@splitpath{##1}% + \let\elt\ltxkeys@iffirstnull + \ifcsndefTF{pathkeys/curr/\elt\main@path/\elt\sub@path/#2}{% + \pathkeys@chfdtrue\loopbreak + }{% + \ifcsndefTF{\main@path @\sub@path @#2}{% + \pathkeys@chfdtrue\loopbreak + }{}% + }% + }% + \ltxkeys@parse1[,]{#1}% + \expandafter\endgroup\ifpathkeys@chfd + \expandafter\iofii\else\expandafter\iiofii\fi +} + +\begingroup +\uccode`\~=`\/% +\uppercase{\endgroup + \def\pathkeys@normalizeslash#1{% + \unexpanded\expandafter{\romannumeral-`\q + \pathkeys@activeslash/#1/~\ltxkeys@nil}% + }% + \def\pathkeys@activeslash#1~#2\ltxkeys@nil{% + \ifblankTF{#2} + {\pathkeys@spaceslash#1 /\ltxkeys@nil} + {\pathkeys@activeslash#1/#2\ltxkeys@nil}% + }% +} +\def\pathkeys@spaceslash#1 /#2\ltxkeys@nil{% + \ifblankTF{#2} + {\pathkeys@slashspace#1/ \ltxkeys@nil} + {\pathkeys@spaceslash#1/#2\ltxkeys@nil}% +} +\def\pathkeys@slashspace#1/ #2\ltxkeys@nil{% + \ifblankTF{#2} + {\pathkeys@doubleslash#1//\ltxkeys@nil} + {\pathkeys@slashspace#1/#2\ltxkeys@nil}% +} +\def\pathkeys@doubleslash#1//#2\ltxkeys@nil{% + \ifblankTF{#2}{% + \ifblankTF{#1}{}{\@gobble#1}% + }{% + \pathkeys@doubleslash#1/#2\ltxkeys@nil + }% +} +\new@def*\pathkeys@n@rmalizeslash#1{% + \pathkeys@ifnopath{#1}{% + \expandafter\pathkeys@normalizeslash\expandafter + {\pathkeys@c@rrentpath/#1}% + }{% + \pathkeys@normalizeslash{#1}% + }% +} +\def\pathkeys@replaceslash#1/#2\ltxkeys@nil{% + \ifblankTF{#2}{% + #1% + }{% + \pathkeys@replaceslash#1@#2\ltxkeys@nil + }% +} +\newletcs\pathkeys@addcons\@empty +\robust@def*\pathkeys@listadd{% + \cpt@testst{\cpt@testcl{\cpt@testopt\pathkeys@l@stadd,}}% +} +\robust@def*\pathkeys@l@stadd[#1]#2#3{% + \ifcpt@st + \let\pathkeys@addcons\@space + \fi + \ifcpt@cl\global\fi + \edef#2{\csliststack{#1\pathkeys@addcons}#2\expandcsonce{#3}}% + \let\pathkeys@addcons\@empty +} +\robust@def*\newpath#1#2{% + \ifcsndefTF{pathkeys@path@\cpttrimspace{#1}}{% + \pathkeys@err{Path '#1' already in use}\@ehc + }{% + \csn@edef{pathkeys@path@\cpttrimspace{#1}}{\cpttrimspace{#2}}% + \pathkeys@listadd*![;]\pathkeys@pathhistory{#2}% + }% +} +\robust@def*\defpath#1#2{% + \csn@edef{pathkeys@path@\cpttrimspace{#1}}{\cpttrimspace{#2}}% + \pathkeys@listadd*![;]\pathkeys@pathhistory{#2}% +} +\newletcs\changepath\defpath +\robust@def*\undefpath#1{% + \edef\ltxkeys@tempa{\usename{pathkeys@path@\cpttrimspace{#1}}}% + \pathkeys@undefpath + \undefcsn{pathkeys@path@\cpttrimspace{#1}}% +} +\robust@def*\pathkeys@undefpath{% + \xifinsetTF\ltxkeys@tempa\pathkeys@pathhistory{% + \def\reserved@a##1{% + \def\reserved@a####1##1####2\ltxkeys@nil{% + \def\pathkeys@pathhistory{####1####2}% + \xifinsetTF{; ;}\pathkeys@pathhistory{% + \def\reserved@a########1; ;########2\ltxkeys@nil{% + \def\pathkeys@pathhistory{########1;########2}% + }% + \expandafter\reserved@a\pathkeys@pathhistory\ltxkeys@nil + }{}% + \pathkeys@undefpath + }% + \expandafter\reserved@a\pathkeys@pathhistory\ltxkeys@nil + }% + \s@expandarg\reserved@a\ltxkeys@tempa + }{}% +} +\new@def*\usepath#1{% + \expandafter\pathkeys@usepath\romannumeral + -`\q\cptcommanormalize{#1},\ltxkeys@nil,\ltxkeys@nnil{}% +} +\new@def*\pathkeys@usepath#1,#2\ltxkeys@nnil#3{% + \ifstrcmpTF{#1}\ltxkeys@nil{% + \@gobble#3% + }{% + \ifcsndefTF{pathkeys@path@#1}{% + \pathkeys@usepath#2\ltxkeys@nnil{#3,\usename{pathkeys@path@#1}}% + }{% + \pathkeys@usepath#2\ltxkeys@nnil{#3,\usename{#1=undefinedpath}}% + }% + }% +} +\new@def*\pathkeys@defaultpath{dft@main/dft@sub} +\newletcs\pathkeys@c@rrentpath\pathkeys@defaultpath +\robust@def*\pathkeys@addtodefaultpath#1{% + \edef\pathkeys@defaultpath + {\expandcsonce\pathkeys@defaultpath/\expandcsonce{#1}}% + \csv@@normalize*[/]\pathkeys@defaultpath + \pathkeys@listadd*![;]\pathkeys@pathhistory\pathkeys@defaultpath +} +\robust@def*\pathkeys@changedefaultpath#1{% + \edef\pathkeys@defaultpath{\expandcsonce{#1}}% + \csv@@normalize*[/]\pathkeys@defaultpath + \pathkeys@listadd*![;]\pathkeys@pathhistory\pathkeys@defaultpath +} +\robust@def*\pathkeys@currentpath#1{% + \edef\pathkeys@c@rrentpath{\expandcsonce{#1}}% + \csv@@normalize*[/]\pathkeys@c@rrentpath + \pathkeys@listadd*![;]\pathkeys@pathhistory\pathkeys@c@rrentpath +} +\robust@def*\pathkeys@usedefaultpath{% + \let\pathkeys@c@rrentpath\pathkeys@defaultpath + \pathkeys@listadd*![;]\pathkeys@pathhistory\pathkeys@c@rrentpath +} +\new@def*\pathkeys@currentpathstack{} +\robust@def*\pathkeys@pushcurrentpath{% + \xdef\pathkeys@currentpathstack{% + \gdef\noexpand\pathkeys@c@rrentpath + {\expandcsonce\pathkeys@c@rrentpath}% + \ltxkeys@nil{\expandcsonce\pathkeys@currentpathstack}% + }% +} +\robust@def*\pathkeys@popcurrentpath{% + \begingroup + \def\reserved@a##1\ltxkeys@nil{\endgroup + ##1\gdef\pathkeys@currentpathstack + }% + \expandafter\reserved@a\pathkeys@currentpathstack + \pathkeys@listadd*![;]\pathkeys@pathhistory\pathkeys@c@rrentpath +} +\new@def*\pathkeys@ifnop@th#1/{} +\new@def*\pathkeys@ifnopath#1{% + \ifcat$\cptoxdetok{\pathkeys@ifnop@th#1{}/}$% + \expandafter\iofii\else\expandafter\iiofii\fi +} +\new@def*\pathkeys@getkeyval#1{% + \ifcsndefTF{pathkeys/curr/\pathkeys@n@rmalizeslash{#1}}{% + \expandcsnonce{pathkeys/curr/\pathkeys@n@rmalizeslash{#1}}% + }{% + \pathkeys@err{Key '\cpttrimspace{#1}' not defined}\ltxkeys@ehc + }% +} +\newletcs\pathkeyskeyval\pathkeys@getkeyval +\new@def*\pathkeys@storevalue#1#2{% + \ifescapedTF{#2}{% + \edef#2{\unexpanded\expandafter + {\romannumeral-`\q\pathkeys@getkeyval{#1}}}% + }{% + \cpt@notescapederr{#2}% + }% +} +\new@def*\ifpathkeyskeyval#1\then{% + \usename{if\pathkeys@getkeyval{#1}}% +} +\new@def*\ifpathkeyskeyvalTF#1{% + \ifpathkeyskeyval#1\then\expandafter\iofii\else + \expandafter\iiofii\fi +} +\new@def*\pathkeys@getval#1{% + \ifcsndefTF{pathkeys/curr/\pathkeys@n@rmalizeslash{#1}}{% + \expandcsnonce{pathkeys/curr/\pathkeys@n@rmalizeslash{#1}}% + }{% + undefinedpathkey% + }% +} +\newletcs\pathkeysval\pathkeys@getval +\new@def*\ifundefinedpathkey{undefinedpathkey\iffalse} +\new@def*\ifpathkeysval#1\then{\usename{if\pathkeys@getval{#1}}} +\new@def*\ifpathkeysvalTF#1{% + \ifpathkeysval#1\then\expandafter\iofii\else + \expandafter\iiofii\fi +} +\robust@def*\pathkeys@useshortcmds{% + \let\pathkeys@useshortcmds\relax + \pathkeys@makeshortcmds{% + \pkv=\pathkeysval,\ifpkv=\ifpathkeysval,\ifpkvTF=\ifpathkeysvalTF, + \pkkv=\pathkeyskeyval,\ifpkkv=\ifpathkeyskeyval, + \ifpkkvTF=\ifpathkeyskeyvalTF + }% +} +\robust@def*\pathkeys@makeshortcmds#1{% + \def\ltxkeys@do##1{% + \ifinsetTF{=}{##1}{% + \def\reserved@a####1=####2\@nil{% + \ifdefTF{####1}{% + \ifx####1####2\else + \pathkeys@err{Command '\string####1' already exists: + \MsgBrk it can't be redefined by + \string\pathkeys@makeshortcmds}\@ehc + \fi + }{% + \let####1=####2% + }% + }% + \reserved@a##1\@nil + }{% + \pathkeys@err{No '=' in short command assignment}\ltxkeys@ehc + }% + }% + \ltxkeys@parse3[,]{#1}% +} +\robust@def*\pathkeys@defineoptions#1{% + \begintoksgroup + \def\do##1/##2/##3\ltxkeys@nil{% + \toks@\expandafter{\the\toks@ + \ifstrcmpTF{##2}{pathkeys}{% + \usename{ltxkeys@declare##1option}% + [KV]<pathkeys>[pathkeys@]{##2}[##3]{}% + }{% + \usename{ltxkeys@declare##1option}% + [KV]<pathkeys>[pathkeys@]{##2}[##3]{% + \ltxkeys@options{##2=####1}% + }% + }% + }% + }% + \def\ltxkeys@do##1{\do##1\ltxkeys@nil}% + \ltxkeys@parse1[;]{#1}% + \endtoksgroup +} +\pathkeys@defineoptions{% + cmd/keyparser/{;}; + cmd/keydepthlimit/4; + cmd/keystacklimit/4; + bool/tracingkeys/true; + bool/reservenopath/true; + bool/allowemptypath/true; + bool/pathkeys/false; +} +\ltxkeys@declareoption*[KV]<pathkeys>{% + \pathkeys@warn{Unknown option '\CurrentKey' with + value '\InnocentVal' ignored.}% +} +%\ltxkeys@executeoptions[KV]<pathkeys>{}\relax +\ltxkeys@processoptions*[KV]<pathkeys>\relax +\cpt@optioncleanup\ltxkeys@processedoptions + +\endinput + +%% End of file pathkeys.sty %% diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index 636327b9a26..cdcfd89553d 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -1191,6 +1191,7 @@ $standardtex='\.(.bx|cfg|sty|clo|ldf|cls|def|fd|cmap|4ht)$'; 'librarian', '(t-)?librarian.(tex|sty)', 'listings-ext','\.sty', # not .cfg 'logic', 'milstd\.tex|' . $standardtex, + 'ltxkeys', '\.sty|\.clo|\.ldf|\.cls|\.def|\.fd$', # not cfg 'lualatex-math', '\.sty', # not phst-doc.cls 'magyar', 'NULL', # do not install in runtime, conflicts with babel 'manjutex', '\.sty|\.clo|\.ldf|\.cls|\.def|\.fd$|manju.tex', |