�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PK};1] manual.pdfnu[%PDF-1.4 % 1 0 obj << /S /GoTo /D (userman.1) >> endobj 4 0 obj (bzip2 and libbzip2, version 1.0.6) endobj 5 0 obj << /S /GoTo /D (intro.2) >> endobj 8 0 obj (Introduction) endobj 9 0 obj << /S /GoTo /D (using.2) >> endobj 12 0 obj (How to use bzip2) endobj 13 0 obj << /S /GoTo /D (name.3) >> endobj 16 0 obj (NAME) endobj 17 0 obj << /S /GoTo /D (synopsis.3) >> endobj 20 0 obj (SYNOPSIS) endobj 21 0 obj << /S /GoTo /D (description.3) >> endobj 24 0 obj (DESCRIPTION) endobj 25 0 obj << /S /GoTo /D (options.3) >> endobj 28 0 obj (OPTIONS) endobj 29 0 obj << /S /GoTo /D (memory-management.3) >> endobj 32 0 obj (MEMORY MANAGEMENT) endobj 33 0 obj << /S /GoTo /D (recovering.3) >> endobj 36 0 obj (RECOVERING DATA FROM DAMAGED FILES) endobj 37 0 obj << /S /GoTo /D (performance.3) >> endobj 40 0 obj (PERFORMANCE NOTES) endobj 41 0 obj << /S /GoTo /D (caveats.3) >> endobj 44 0 obj (CAVEATS) endobj 45 0 obj << /S /GoTo /D (author.3) >> endobj 48 0 obj (AUTHOR) endobj 49 0 obj << /S /GoTo /D (libprog.2) >> endobj 52 0 obj ( Programming with libbzip2 ) endobj 53 0 obj << /S /GoTo /D (top-level.3) >> endobj 56 0 obj (Top-level structure) endobj 57 0 obj << /S /GoTo /D (err-handling.3) >> endobj 60 0 obj (Error handling) endobj 61 0 obj << /S /GoTo /D (low-level.3) >> endobj 64 0 obj (Low-level interface) endobj 65 0 obj << /S /GoTo /D (hl-interface.3) >> endobj 68 0 obj (High-level interface) endobj 69 0 obj << /S /GoTo /D (util-fns.3) >> endobj 72 0 obj (Utility functions) endobj 73 0 obj << /S /GoTo /D (zlib-compat.3) >> endobj 76 0 obj (zlib compatibility functions) endobj 77 0 obj << /S /GoTo /D (stdio-free.3) >> endobj 80 0 obj (Using the library in a stdio-free environment) endobj 81 0 obj << /S /GoTo /D (win-dll.3) >> endobj 84 0 obj (Making a Windows DLL) endobj 85 0 obj << /S /GoTo /D (misc.2) >> endobj 88 0 obj (Miscellanea) endobj 89 0 obj << /S /GoTo /D (limits.3) >> endobj 92 0 obj (Limitations of the compressed file format) endobj 93 0 obj << /S /GoTo /D (port-issues.3) >> endobj 96 0 obj (Portability issues) endobj 97 0 obj << /S /GoTo /D (bugs.3) >> endobj 100 0 obj (Reporting bugs) endobj 101 0 obj << /S /GoTo /D (package.3) >> endobj 104 0 obj (Did you get the right package?) endobj 105 0 obj << /S /GoTo /D (reading.3) >> endobj 108 0 obj (Further Reading) endobj 109 0 obj << /S /GoTo /D [110 0 R /Fit ] >> endobj 112 0 obj << /Length 261 /Filter /FlateDecode >> stream xڭAO 65Q{3jmmXOAh{^/ p ZŽOvNO\&V%J6 DU@KCU#YtL}mUlG&@p9}VgEhdK%)GlHoJge{L6aŦs\sCx8ۯ00 ,x^=4^dûY84*$}^߿M| endstream endobj 110 0 obj << /Type /Page /Contents 112 0 R /Resources 111 0 R /MediaBox [0 0 612 792] /Parent 117 0 R >> endobj 113 0 obj << /D [110 0 R /XYZ -1 793 null] >> endobj 114 0 obj << /D [110 0 R /XYZ 72 720 null] >> endobj 115 0 obj << /D [110 0 R /XYZ 72 720 null] >> endobj 2 0 obj << /D [110 0 R /XYZ 72 720 null] >> endobj 111 0 obj << /Font << /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 120 0 obj << /Length 1954 /Filter /FlateDecode >> stream xYKsFWP9AE=a [d lQn9>3Rb:R>=czdMz`&E78>Oy˅ΦUK֗OiR_$M5=WV%ӱTӶ`_OJ.~6\I7վiRr/9hjM)ɤObk(=tĕWŜ/e׼RtKrC|]Tsl[Cˇ*]PXVJOGZ{ϖV&U~K+;[ע\of Hنp੺Y9hXnUǹbX7 Ha٪ )yEQ X4Bm ihlM[4*)'vgzyvwƋ9.c:Y5XH^9x1u'3noUwIG7˜&i]"m)!TGshӪ惘MV+db7M@UW~q+xUׇ/dҸ +=;{W5:|gETK̮izWs Ω]ȏV͋ zj]sX͒g;̺̊Ϛf,NBͫuѴaF-2Aiis;jU2$̓&+P~}$7o^5$ppxlgbORָe&Ս&ڧ՜cs6X7eS,6%E]XB }v-VilYA>aktMh }S55{4sQ뢮rd.go!Xe 9*\pNWOZIf2ej9,(ԃn CRfEJ>.~ߐWy򰆴!·Z2n%ʌ-ٽ"xS6E:|K**G_5y%,6*kwPl!R6+^zi;"&|[[,'! bD6[/vbYЍf:?hJ;>A GT|U^xkJ}s,*0KeΫ&?Gyy|[HvSt.TBxQ@_j(5rҘroY2F 9?!I'|s. bNl oơ8F$ Kd2φ_ϩN]LQ+)0A(+O/"+GqzMm FP_0H f&  hcpxVl.>g͢i̵a@QCp.N8m0rl˼f4dx4eⲮϐq81_ &Q0Hd5p b3.W!KH{ '8sgbA Ctp.µ5KҮք>:Q9mT, n G џ]I̒7鐟O%A5y) &Y\Ҍlcoe‘әxU,~H!?$]N'NT[{y@Q,c(QF88r,'tYN9(]ӡD̙hrD 9%{bNȃXD9"MqxL 9&3+Bއq@8!ˏ¸/ /;C:Y#ᔃ7M--njY,Nޅad((q(JTwE<hvG~b(T(f!e76xoW39\nnu C۪e#-6bcU6 SSm{̧-=P>7rZ=@,5> <|߉TMvAĒ'G-Sl$,55,{ZQH+AͤYaZ'O U}):?GMۡ=ta@.Rl\ã$Ƿ6r ?y$ endstream endobj 119 0 obj << /Type /Page /Contents 120 0 R /Resources 118 0 R /MediaBox [0 0 612 792] /Parent 117 0 R >> endobj 121 0 obj << /D [119 0 R /XYZ -1 793 null] >> endobj 123 0 obj << /D [119 0 R /XYZ 72 649.315 null] >> endobj 125 0 obj << /D [119 0 R /XYZ 72 606.708 null] >> endobj 126 0 obj << /D [119 0 R /XYZ 72 581.204 null] >> endobj 127 0 obj << /D [119 0 R /XYZ 72 554.105 null] >> endobj 128 0 obj << /D [119 0 R /XYZ 72 536.571 null] >> endobj 118 0 obj << /Font << /F28 116 0 R /F37 122 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 227 0 obj << /Length 2087 /Filter /FlateDecode >> stream xYSz}/03ƙs-@5_?-ksXmSl=o{OI҆1 &#ntiy@\ {> ~s}Cnw7TD!J qN43j ϻwfQG,."ɢ$[v_͛C2d(FB }$K$!!YaP_OG*7w06ͻ`3)S6= "X=BxZ~ѥwEq\-K|M݁gv^3OvTq)I٩*]vevwHH@aJx2J#Nax/tz;dxzv|xHh : X͖Vu`t|<#,w"BDT3&YT+׽YW% Yd4r4a `Q hP j>i)!Ϲ{v(ōyF˫g M`QZr^R9Axg B.Vz9r[pj027ƌWJiH d:C*0 0“K&Q4n>LdQz/ 'Na.]gBT X&x6 TUh_4Z.8s$P.!N$@(5`Ebrv'#dRkHDZC!*d9>" lǔk IF%XOx̑P(bW.ZLL[kS?-B- @nx].I7ݤ|G( (qIU`R@`i5%FH7ga si}""(>&e ށ'緤X:uM$ŠCXViE]$xGtlyGJ2rN0Xӣ2Qqnx)DDK"OzțAE:]11Po|?I̼Y#Ѭ;]YU2N1P 1Yop S-Em9RY].E#0n'f'pRfAIX'QvòJ˫u8+t`e鈲N-cpZa/ãiu@aGfg0\=> endobj 129 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 685.783 132.811 694.629] /A << /S /GoTo /D (intro) >> >> endobj 130 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 685.783 517.086 694.629] /A << /S /GoTo /D (intro) >> >> endobj 131 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 671.77 153.315 682.674] /A << /S /GoTo /D (using) >> >> endobj 132 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 671.77 517.086 682.674] /A << /S /GoTo /D (using) >> >> endobj 133 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 661.872 120.01 670.719] /A << /S /GoTo /D (name) >> >> endobj 134 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 661.872 517.086 670.719] /A << /S /GoTo /D (name) >> >> endobj 135 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 649.917 138.082 658.764] /A << /S /GoTo /D (synopsis) >> >> endobj 136 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 649.917 517.086 658.764] /A << /S /GoTo /D (synopsis) >> >> endobj 137 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 637.962 155.785 646.809] /A << /S /GoTo /D (description) >> >> endobj 138 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 637.962 517.086 646.809] /A << /S /GoTo /D (description) >> >> endobj 139 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 626.007 133.091 634.853] /A << /S /GoTo /D (options) >> >> endobj 140 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 626.007 517.086 634.853] /A << /S /GoTo /D (options) >> >> endobj 141 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 614.052 208.896 622.898] /A << /S /GoTo /D (memory-management) >> >> endobj 142 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 614.052 517.086 622.898] /A << /S /GoTo /D (memory-management) >> >> endobj 143 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 602.096 294.445 610.943] /A << /S /GoTo /D (recovering) >> >> endobj 144 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 602.096 517.086 610.943] /A << /S /GoTo /D (recovering) >> >> endobj 145 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 590.141 198.844 598.988] /A << /S /GoTo /D (performance) >> >> endobj 146 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 590.141 517.086 598.988] /A << /S /GoTo /D (performance) >> >> endobj 147 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 578.186 134.515 587.033] /A << /S /GoTo /D (caveats) >> >> endobj 148 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 578.186 517.086 587.033] /A << /S /GoTo /D (caveats) >> >> endobj 149 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 566.111 131.985 575.078] /A << /S /GoTo /D (author) >> >> endobj 150 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 566.111 517.086 575.078] /A << /S /GoTo /D (author) >> >> endobj 151 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 552.219 211.357 563.122] /A << /S /GoTo /D (libprog) >> >> endobj 152 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 552.219 517.086 563.122] /A << /S /GoTo /D (libprog) >> >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 540.263 165.917 551.167] /A << /S /GoTo /D (top-level) >> >> endobj 154 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 540.263 517.086 551.167] /A << /S /GoTo /D (top-level) >> >> endobj 155 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 528.308 178.37 539.212] /A << /S /GoTo /D (ll-summary) >> >> endobj 156 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 528.308 517.086 539.212] /A << /S /GoTo /D (ll-summary) >> >> endobj 157 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 516.353 180.283 527.257] /A << /S /GoTo /D (hl-summary) >> >> endobj 158 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 516.353 517.086 527.257] /A << /S /GoTo /D (hl-summary) >> >> endobj 159 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 504.398 203.665 515.302] /A << /S /GoTo /D (util-fns-summary) >> >> endobj 160 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 504.398 517.086 515.302] /A << /S /GoTo /D (util-fns-summary) >> >> endobj 161 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 492.443 149.409 503.347] /A << /S /GoTo /D (err-handling) >> >> endobj 162 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 492.443 517.086 503.347] /A << /S /GoTo /D (err-handling) >> >> endobj 163 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 482.545 168.567 491.391] /A << /S /GoTo /D (low-level) >> >> endobj 164 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 482.545 517.086 491.391] /A << /S /GoTo /D (low-level) >> >> endobj 165 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 468.532 184.288 479.436] /A << /S /GoTo /D (bzcompress-init) >> >> endobj 166 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 468.532 517.086 479.436] /A << /S /GoTo /D (bzcompress-init) >> >> endobj 167 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 456.577 170.45 467.481] /A << /S /GoTo /D (bzCompress) >> >> endobj 168 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 456.577 517.086 467.481] /A << /S /GoTo /D (bzCompress) >> >> endobj 169 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 444.622 186.5 455.526] /A << /S /GoTo /D (bzCompress-end) >> >> endobj 170 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 444.622 517.086 455.526] /A << /S /GoTo /D (bzCompress-end) >> >> endobj 171 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 432.667 193.683 443.571] /A << /S /GoTo /D (bzDecompress-init) >> >> endobj 172 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 432.667 517.086 443.571] /A << /S /GoTo /D (bzDecompress-init) >> >> endobj 173 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 420.712 179.845 431.616] /A << /S /GoTo /D (bzDecompress) >> >> endobj 174 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 420.712 517.086 431.616] /A << /S /GoTo /D (bzDecompress) >> >> endobj 175 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 408.757 195.895 419.66] /A << /S /GoTo /D (bzDecompress-end) >> >> endobj 176 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 408.757 517.086 419.66] /A << /S /GoTo /D (bzDecompress-end) >> >> endobj 177 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 396.801 170.48 407.705] /A << /S /GoTo /D (hl-interface) >> >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 396.801 517.086 407.705] /A << /S /GoTo /D (hl-interface) >> >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 384.846 172.652 395.75] /A << /S /GoTo /D (bzreadopen) >> >> endobj 180 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 384.846 517.086 395.75] /A << /S /GoTo /D (bzreadopen) >> >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 373.867 151.073 383.795] /A << /S /GoTo /D (bzread) >> >> endobj 182 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 373.867 517.086 383.795] /A << /S /GoTo /D (bzread) >> >> endobj 183 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 361.912 195.895 371.84] /A << /S /GoTo /D (bzreadgetunused) >> >> endobj 184 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 361.912 517.086 371.84] /A << /S /GoTo /D (bzreadgetunused) >> >> endobj 185 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 349.957 173.768 359.885] /A << /S /GoTo /D (bzreadclose) >> >> endobj 186 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 349.957 517.086 359.885] /A << /S /GoTo /D (bzreadclose) >> >> endobj 187 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 337.026 174.864 347.929] /A << /S /GoTo /D (bzwriteopen) >> >> endobj 188 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 337.026 517.086 347.929] /A << /S /GoTo /D (bzwriteopen) >> >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 326.047 153.285 335.974] /A << /S /GoTo /D (bzwrite) >> >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 326.047 517.086 335.974] /A << /S /GoTo /D (bzwrite) >> >> endobj 191 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 314.091 175.979 324.019] /A << /S /GoTo /D (bzwriteclose) >> >> endobj 192 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 314.091 517.086 324.019] /A << /S /GoTo /D (bzwriteclose) >> >> endobj 193 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 301.16 280.556 312.064] /A << /S /GoTo /D (embed) >> >> endobj 194 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 301.16 517.086 312.064] /A << /S /GoTo /D (embed) >> >> endobj 195 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 289.205 235.187 300.109] /A << /S /GoTo /D (std-rdwr) >> >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 289.205 517.086 300.109] /A << /S /GoTo /D (std-rdwr) >> >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 277.25 156.622 288.154] /A << /S /GoTo /D (util-fns) >> >> endobj 198 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 277.25 517.086 288.154] /A << /S /GoTo /D (util-fns) >> >> endobj 199 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 265.294 216.746 276.198] /A << /S /GoTo /D (bzbufftobuffcompress) >> >> endobj 200 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 265.294 517.086 276.198] /A << /S /GoTo /D (bzbufftobuffcompress) >> >> endobj 201 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 253.339 226.141 264.243] /A << /S /GoTo /D (bzbufftobuffdecompress) >> >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 253.339 517.086 264.243] /A << /S /GoTo /D (bzbufftobuffdecompress) >> >> endobj 203 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 241.384 201.174 252.288] /A << /S /GoTo /D (zlib-compat) >> >> endobj 204 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 241.384 517.086 252.288] /A << /S /GoTo /D (zlib-compat) >> >> endobj 205 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 229.429 268.82 240.333] /A << /S /GoTo /D (stdio-free) >> >> endobj 206 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 229.429 517.086 240.333] /A << /S /GoTo /D (stdio-free) >> >> endobj 207 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 217.474 174.604 228.378] /A << /S /GoTo /D (stdio-bye) >> >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 217.474 517.086 228.378] /A << /S /GoTo /D (stdio-bye) >> >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 205.519 187.595 216.423] /A << /S /GoTo /D (critical-error) >> >> endobj 210 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 205.519 517.086 216.423] /A << /S /GoTo /D (critical-error) >> >> endobj 211 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 193.563 190.824 204.467] /A << /S /GoTo /D (win-dll) >> >> endobj 212 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 193.563 517.086 204.467] /A << /S /GoTo /D (win-dll) >> >> endobj 213 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 183.666 131.695 192.512] /A << /S /GoTo /D (misc) >> >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 183.666 517.086 192.512] /A << /S /GoTo /D (misc) >> >> endobj 215 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 169.653 256.227 180.557] /A << /S /GoTo /D (limits) >> >> endobj 216 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 169.653 517.086 180.557] /A << /S /GoTo /D (limits) >> >> endobj 217 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 157.698 159.391 168.602] /A << /S /GoTo /D (port-issues) >> >> endobj 218 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 157.698 517.086 168.602] /A << /S /GoTo /D (port-issues) >> >> endobj 219 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 145.743 151.99 156.647] /A << /S /GoTo /D (bugs) >> >> endobj 220 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 145.743 517.086 156.647] /A << /S /GoTo /D (bugs) >> >> endobj 221 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 133.788 213.598 144.692] /A << /S /GoTo /D (package) >> >> endobj 222 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 133.788 517.086 144.692] /A << /S /GoTo /D (package) >> >> endobj 223 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 121.832 156.054 132.736] /A << /S /GoTo /D (reading) >> >> endobj 224 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 121.832 517.086 132.736] /A << /S /GoTo /D (reading) >> >> endobj 228 0 obj << /D [226 0 R /XYZ -1 793 null] >> endobj 229 0 obj << /D [226 0 R /XYZ 72 720 null] >> endobj 231 0 obj << /D [226 0 R /XYZ 72 672.766 null] >> endobj 232 0 obj << /D [226 0 R /XYZ 72 553.215 null] >> endobj 233 0 obj << /D [226 0 R /XYZ 72 541.26 null] >> endobj 234 0 obj << /D [226 0 R /XYZ 72 483.541 null] >> endobj 235 0 obj << /D [226 0 R /XYZ 72 397.798 null] >> endobj 236 0 obj << /D [226 0 R /XYZ 72 278.246 null] >> endobj 237 0 obj << /D [226 0 R /XYZ 72 230.425 null] >> endobj 238 0 obj << /D [226 0 R /XYZ 72 184.662 null] >> endobj 225 0 obj << /Font << /F28 116 0 R /F37 122 0 R /F11 230 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 295 0 obj << /Length 1096 /Filter /FlateDecode >> stream xWn6)xBR)-]45P(HKQMӧC9r69 o4%{Bɷ Jܟ$~s>$#"> endobj 287 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [81.464 575.226 154.047 586.13] /A << /S /GoTo /D (using) >> >> endobj 288 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [152.054 575.226 168.431 586.13] /A << /S /GoTo /D (using) >> >> endobj 289 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [81.464 541.353 193.603 552.257] /A << /S /GoTo /D (libprog) >> >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [191.61 541.353 207.71 552.257] /A << /S /GoTo /D (libprog) >> >> endobj 291 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [81.464 519.435 131.596 530.339] /A << /S /GoTo /D (misc) >> >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [129.603 519.435 150.684 530.339] /A << /S /GoTo /D (misc) >> >> endobj 296 0 obj << /D [294 0 R /XYZ -1 793 null] >> endobj 239 0 obj << /D [294 0 R /XYZ 72 720 null] >> endobj 6 0 obj << /D [294 0 R /XYZ 72 720 null] >> endobj 297 0 obj << /D [294 0 R /XYZ 72 598.14 null] >> endobj 298 0 obj << /D [294 0 R /XYZ 72 554.304 null] >> endobj 299 0 obj << /D [294 0 R /XYZ 72 532.386 null] >> endobj 293 0 obj << /Font << /F28 116 0 R /F39 124 0 R /F37 122 0 R >> /ProcSet [ /PDF /Text ] >> endobj 320 0 obj << /Length 1111 /Filter /FlateDecode >> stream xZ[OJ~ϯXj{ MENTQB46_޵OrC}^~ߌdz\[+`;fgp@R4aEy ȴ߲ $LpӿOOh'WzD J@  y@Cj< lsx 7[XB9KD8©x 'F;S4m7Z&2+V̖jA1Af$?l <}|()3I6bkd%/$Y= GXRAe@3ށjl!/!q Oǽqu3*sEv$]7r2nmsbQGCNpPD7g/K@U$Z0GaƜ*Òl$}iBJF' 9X}~8o6!7}y ?cfڼR!/NQ$=3[80tQ:?o.;%pEL&{*2`E}*POpd\t׷X SU -h'gJ(m`CcrDlR|硫LZ7GQA Ed}Bv ;8o|4A7m7^)JUC $iz}۷> Wn-=ieZ&ZꭄڈEUgE1GYLV*|v2JoWv!t"pV\T,-aPrYZNk߃oii젇_)_?z$mHzW jU/1)-r.m'VI/CF*4ir0_chгgHK :$">$مz0LoZ 1YR AʔWFݵʥ z,:fpxTH- NtA9!YԳVp9m[t8Y8;2.хm7Q,r*ChKtƻ܄u|vR74+d};FdnnK}~rA[ rsc9A_O endstream endobj 319 0 obj << /Type /Page /Contents 320 0 R /Resources 318 0 R /MediaBox [0 0 612 792] /Parent 117 0 R /Annots [ 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R ] >> endobj 300 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 634.692 120.01 643.538] /A << /S /GoTo /D (name) >> >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 634.692 517.086 643.538] /A << /S /GoTo /D (name) >> >> endobj 302 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 622.737 138.082 631.583] /A << /S /GoTo /D (synopsis) >> >> endobj 303 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 622.737 517.086 631.583] /A << /S /GoTo /D (synopsis) >> >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 610.781 155.785 619.628] /A << /S /GoTo /D (description) >> >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 610.781 517.086 619.628] /A << /S /GoTo /D (description) >> >> endobj 306 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 598.826 133.091 607.673] /A << /S /GoTo /D (options) >> >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 598.826 517.086 607.673] /A << /S /GoTo /D (options) >> >> endobj 308 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 586.871 208.896 595.718] /A << /S /GoTo /D (memory-management) >> >> endobj 309 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 586.871 517.086 595.718] /A << /S /GoTo /D (memory-management) >> >> endobj 310 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 574.916 294.445 583.763] /A << /S /GoTo /D (recovering) >> >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 574.916 517.086 583.763] /A << /S /GoTo /D (recovering) >> >> endobj 312 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 562.961 198.844 571.807] /A << /S /GoTo /D (performance) >> >> endobj 313 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 562.961 517.086 571.807] /A << /S /GoTo /D (performance) >> >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 551.006 134.515 559.852] /A << /S /GoTo /D (caveats) >> >> endobj 315 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 551.006 517.086 559.852] /A << /S /GoTo /D (caveats) >> >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 538.931 131.985 547.897] /A << /S /GoTo /D (author) >> >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 538.931 517.086 547.897] /A << /S /GoTo /D (author) >> >> endobj 321 0 obj << /D [319 0 R /XYZ -1 793 null] >> endobj 240 0 obj << /D [319 0 R /XYZ 72 720 null] >> endobj 10 0 obj << /D [319 0 R /XYZ 72 720 null] >> endobj 322 0 obj << /D [319 0 R /XYZ 72 686.821 null] >> endobj 241 0 obj << /D [319 0 R /XYZ 72 506.109 null] >> endobj 14 0 obj << /D [319 0 R /XYZ 72 506.109 null] >> endobj 323 0 obj << /D [319 0 R /XYZ 72 463.55 null] >> endobj 324 0 obj << /D [319 0 R /XYZ 72 429.513 null] >> endobj 325 0 obj << /D [319 0 R /XYZ 72 407.595 null] >> endobj 242 0 obj << /D [319 0 R /XYZ 72 385.677 null] >> endobj 18 0 obj << /D [319 0 R /XYZ 72 385.677 null] >> endobj 326 0 obj << /D [319 0 R /XYZ 72 342.861 null] >> endobj 327 0 obj << /D [319 0 R /XYZ 72 309.081 null] >> endobj 328 0 obj << /D [319 0 R /XYZ 72 287.722 null] >> endobj 329 0 obj << /D [319 0 R /XYZ 72 265.804 null] >> endobj 318 0 obj << /Font << /F28 116 0 R /F37 122 0 R /F11 230 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 332 0 obj << /Length 3068 /Filter /FlateDecode >> stream xi 5#~kM2AlŚBh[L9kfl& b1Bk'\}M}8OxLqۯD(LHduW >kqܯ7qK:>A@_xٯhqK F,jwpU竐 `0&ЮWooQA,|,MYū, (`3΀Y|G_߾fz@H&rh&PQ^S|xi[nϣRjiƶnv?PkZ3T( c˟W5:д9^!xP>~i 2Dr!$6 qzd࠴jR]UBl1 lQpGDZ04+ب-ҼSӪ~,m}e|-:@hE,t8QDq> aYvY"\Gx jlt,ڣ)LՙjgATl.w| +7u=g$äh]oj l1HTlWWE;t3?V 2fy**@iPM앳h_gƍiKof͆G)2|Y%-ڳ )Bz/ h2I!nEC(ؘی QѪs]Pk{[Y Bob2BN"*өz`<0.eBBx;T`; yK^Thv]az"d61,Lj`rNRH4SuT sSr3wGP3;ÂV-pntiyz]/Awʝ6wWhw&w#N6`Ƒ~!%Cx,fsEIei 4Q4Dj&ˊ*,E5x7ЇFt|F[E{^pVC'êD'ag2@1R+NʋN9gVa+rĵ3i@my!8liƱ@S&vUs&<)mu,,S52<üE/?QKڅ۫wI\j3k 2{ɗ`a[s4)yksƽ_޴^Ҟ{पu.ؤ8cW sAXD C ˢ-g AӲ aMݾjt|;b ,y"-ԖW/#_ }i%669[o.jBƶ+MGnm6ܩwq,>uɌsc_9y"9h7rTkCɿy%oi KYR]FL-d^&DR!?JB_ j4 &~sFѴ|kw/tţ2XQ@ ( ?.a+hrE6ni {,wrRH訅-H 嶒s28 FD|Z%=+t祩pWWeBLˑBeouփ 7f{p4]6o /T@%AޭsL=wlq|wX]ǂ5k7B`WM_/^:7@$ T-[&I:)/w`2$W "q(H&& /}v.(Uv.kzW EΪ8;s0|cVŶ^QB3on< Ԑb|3_`Ig-Ul=}z[6eEAJfG,hL.C ==2ɾ2(yj`f/ۄJs+H7=>0$,װ;n'P?#V{v)<s-AG__'brb%?ÑK3Vms]t۪qN*Gumln'R*axѥ}C|2olɶ=(`V0;+-Y8b_ ?_ P^gI>a 6CZJZlW"$w&Wn  endstream endobj 331 0 obj << /Type /Page /Contents 332 0 R /Resources 330 0 R /MediaBox [0 0 612 792] /Parent 117 0 R >> endobj 333 0 obj << /D [331 0 R /XYZ -1 793 null] >> endobj 243 0 obj << /D [331 0 R /XYZ 72 720 null] >> endobj 22 0 obj << /D [331 0 R /XYZ 72 720 null] >> endobj 334 0 obj << /D [331 0 R /XYZ 72 441.752 null] >> endobj 335 0 obj << /D [331 0 R /XYZ 72 411.874 null] >> endobj 336 0 obj << /D [331 0 R /XYZ 72 389.956 null] >> endobj 337 0 obj << /D [331 0 R /XYZ 72 368.038 null] >> endobj 338 0 obj << /D [331 0 R /XYZ 72 346.12 null] >> endobj 330 0 obj << /Font << /F37 122 0 R /F28 116 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 343 0 obj << /Length 2718 /Filter /FlateDecode >> stream xZKsWʰJDq WV_*xVή h4l )l<7s$+L୭$s4CgIe@hrS6Y2&w 1늞zgeeec`7vs88#C~dMq H/Բ↷P6]r!z%P\Uu Cw7.E=EHCmVbb_ ?d%lZF(.vWDN+4'ɯPy5R,JF8GߏN&:K=nel`#TOcJR`ĔJ߀ E"^Hcq|ǵ1:j>V6x,;Q{8S|%ln?h]]b>>!ޫ[̏cy W55XAti|i1+]B*_zJإOl)cON:q M }[c5 ;Ы :XvvGPS"ToЖVq*lAj&kxPpv+.e,bg3Q$U_Tq9s_~f:¦;oT,$ӝDO' Otag,Jn<]R!"Py zN )M5N)_ r$ oFzYޜ'/P ObL{Mena {ô~v0Ih),ߖ `].| -;1hh`糲A<='_)$b/s!n >Z%EZhz T_i-u=Gۗ.OӴwi' Yw(yߜgKl\Zøs)%^6+4@I 廿4dZ-Wɐ֒(z z=29eD_c^Gݔ`ymxOơ{o?&.-NCXHQXx˳m endstream endobj 342 0 obj << /Type /Page /Contents 343 0 R /Resources 341 0 R /MediaBox [0 0 612 792] /Parent 354 0 R /Annots [ 339 0 R 340 0 R ] >> endobj 339 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [219.083 124.446 338.943 135.35] /A << /S /GoTo /D (memory-management) >> >> endobj 340 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [336.95 124.446 353.05 135.35] /A << /S /GoTo /D (memory-management) >> >> endobj 344 0 obj << /D [342 0 R /XYZ -1 793 null] >> endobj 244 0 obj << /D [342 0 R /XYZ 72 580.596 null] >> endobj 26 0 obj << /D [342 0 R /XYZ 72 580.596 null] >> endobj 345 0 obj << /D [342 0 R /XYZ 72 538.016 null] >> endobj 346 0 obj << /D [342 0 R /XYZ 72 528.172 null] >> endobj 347 0 obj << /D [342 0 R /XYZ 72 488.652 null] >> endobj 348 0 obj << /D [342 0 R /XYZ 72 427.121 null] >> endobj 349 0 obj << /D [342 0 R /XYZ 72 389.5 null] >> endobj 350 0 obj << /D [342 0 R /XYZ 72 339.924 null] >> endobj 351 0 obj << /D [342 0 R /XYZ 72 256.594 null] >> endobj 352 0 obj << /D [342 0 R /XYZ 72 218.973 null] >> endobj 353 0 obj << /D [342 0 R /XYZ 72 111.732 null] >> endobj 341 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 359 0 obj << /Length 3081 /Filter /FlateDecode >> stream xZY6~[wf7vx6U)IXÓɯnt"9c=k'ݚ!quCb%9ڇX|ߤɗty"a|F/xu_5k{덌z}7>yۓ4<-~&ծzX<[ڑ&$vz.qeNGM* /͖M"ټU?-Sf"&Gq M-(qYhe 7{њagI2]_U^ůi2+*9~f่Z@4{Af~&/ѿ-[1hr˰ &UBzK! RSȄ7/p{)rF{?ͪ7cDCh5) Y`8,jaF5/3:vxƔ2! |Xt%%E@vf\GӀ)W.;1hJ{a{5?QtdJ0UDg%2f',#gh\g;vvQ]Q10%E%(C gr8e>WBs|߯_\#ۂzHP e i91+9[%JjȈRJ.[~@7'5@N9U 9`ˣ Wx=\ľbw#lbBv6L_w &LQ4wԮ"m И&x-en0CE`௟<#!u:m1%тYy׹;;ݖ!Nǿ{["YOjv R? )?@,@rR;KpʭE֙9Cѽ!mԈSGԃ)ݩ;0. y: O`؂b535d_}I6s }=W46xJѲI7$Y=KHDK9ȡl=U %$pQ`Φ8=Ucוu{"3Bų(iFu}Wc, :viCVpԼ@x8MFxg~0"'$D =v Bbp"P?؛ x5TKb<=k,g2 VTÝ!hٺPz(m- y'`3w)uRA; %E7r}q}Sb4Ȝ-;Sӫ!Vҏ:' /nV '("2 {xfÄc{uwB[)bn$a".8zsf-7g5|犂(:|B@$Ս-LwJ}lK&LĿ\\Ǡ-bk403~Y,nauYX8ӴVR AsE,am" 4̐FY Ci(5fB=4ړkZ/hooL~cVkq\"+AK!l9 m-<̦}>`x/{.jMTw֣ W#KW1ql48bPwnt僳j^J鎝TAaH0p^RN5|ty֝ԠXE>ZdzJԌќKM''2.y ;Y44W\^bo$hUy!Z<], ,~U;$4x5.接,B9\h(Gpw'+B3F@tG1C\ߠoђX ?2ķ^E< ߩ% endstream endobj 358 0 obj << /Type /Page /Contents 359 0 R /Resources 357 0 R /MediaBox [0 0 612 792] /Parent 354 0 R /Annots [ 355 0 R 356 0 R ] >> endobj 355 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [107.004 595.303 227.334 606.207] /A << /S /GoTo /D (memory-management) >> >> endobj 356 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [225.342 595.303 241.912 606.207] /A << /S /GoTo /D (memory-management) >> >> endobj 360 0 obj << /D [358 0 R /XYZ -1 793 null] >> endobj 361 0 obj << /D [358 0 R /XYZ 72 720 null] >> endobj 362 0 obj << /D [358 0 R /XYZ 72 670.023 null] >> endobj 363 0 obj << /D [358 0 R /XYZ 72 632.165 null] >> endobj 364 0 obj << /D [358 0 R /XYZ 72 560.498 null] >> endobj 365 0 obj << /D [358 0 R /XYZ 72 508.628 null] >> endobj 245 0 obj << /D [358 0 R /XYZ 72 446.86 null] >> endobj 30 0 obj << /D [358 0 R /XYZ 72 446.86 null] >> endobj 357 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 368 0 obj << /Length 2896 /Filter /FlateDecode >> stream xko~Oe mRYq![ts*B'/V/izʔkqϼلf.:&ֱ]?,@JOi` qn0^WxbsyXR8H$Y;hX)Z£˻24IDQ|pK GF P qIqDv}YxG* NŌDIz@‘ w$ƘPS̥rHv~’HIP,[PAE0*gDEv)fhfIt$ jCHD34sѨ| ogtf.Yjf&ah\62<&-fFXe3y} 7א20$Bs_JI)R 3Ŀznǫo_BĨ[7{39꥓ԁq{rTyē*\e#X cR =mÀ4B=:XG`Bza6FCW蘼C܋R^6d!KfȂ.ktB/V mE8#P=VCB^2DD>=Ra{S]&R -+Y ˳LbW Z{ zkS\bvF)Z6][F;4E ‰MąXzzk(9JUdd* R48EU4X̋ $6mBpFS,W@}6 Eנ:_0iAB(JÜ\O-|,Ǚс֓wɷQһ/B}nݮ<ߏݞ'jz:RȨd<I24OpAqKsl)1ӕs@ƅ9`;~ drFR+"ݣie$4T/Ga@9QC~AC 4=TB̉!yqTBV.! a%E?%N5J[{f1~22]۞IbsD vr({M04e8X숢Zc dwpj9-M> '$c~ۊhnzwB)DYT3} -ãA-(6%{bw.0#\Ғ)%dT*nk ]6i0[aD߿`)/2nsBMǖ)EQ`y[w\-ؖiG !vWk# [M5kfʪpkz`Prugys˩/a?ԂMRcӆVIv_scj{PM')YECW}Oa׵vGR{!VU1تV,rhٗEȟ az8%BLt)׈2܈7߾"wb"ZH'F}#ye*~ q@Gfp~sz0>]R?tC\0)[aWZOaD!glzԍ>mcڍ7 )Rh_:4D$*V/m22h9*÷;H;wPB/ Z-[ZC,|J1 }E5TuO)AP ﯧ0HWe#ٷ?GAX`Cbrَ=1K;Jl!~sRJcg:(\4M7 `Tn/ 6` endstream endobj 367 0 obj << /Type /Page /Contents 368 0 R /Resources 366 0 R /MediaBox [0 0 612 792] /Parent 354 0 R >> endobj 369 0 obj << /D [367 0 R /XYZ -1 793 null] >> endobj 246 0 obj << /D [367 0 R /XYZ 72 469.773 null] >> endobj 34 0 obj << /D [367 0 R /XYZ 72 469.773 null] >> endobj 247 0 obj << /D [367 0 R /XYZ 72 157.08 null] >> endobj 38 0 obj << /D [367 0 R /XYZ 72 157.08 null] >> endobj 366 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 372 0 obj << /Length 2730 /Filter /FlateDecode >> stream xْ}`}8/ieىCr,C׀E%U9LOݐяz} y|syr7Odu]Ei^J xuS~r^u;w +^lo n~_!軙_UoV(MFI zgߗMRs=X־瘮˂NV=XscGuNHJ:ڴL:FPgny+t w+0[|w}ũ)LpVgJaO n tBP0(rnM 3Q.#cʢ=yky3y~co߇ߜk* 00fۘV$ev~B beB{{EW;;2J0[] R?c>iAJƶآn,ns?JWiT[' _+$KBg+)AeNφ+S3M濎bs?Tv#"oՅo3CA+E3ggw~cLaDD˻?nI7Ӑ\u>{2L {b v>H@tMі m0Mےd;1|YTj b&|JFJ^C$D6.x6ŇbwZ^եbdW='* aGP^h-B}H!qRKT/d1.h43;:\l/E!uBGfH{>aH 3 ` }@a%a%~Q !{;Mz8rley´NDݝ&4*An!mp#t*$b aqseΓGs~xh .L )$tBX삀(EkLWa;s fT=f+Fl{)_臟fqN;@!rd`,>K8"ڲ>`Mi o W!F-R8zq9U,z(д@+) eNLBrY܎9%3F+4$tQ2w]x W^"7>AAfT.bNDr&p*y-0`ʏxIgb1ZwhsL\8vU/Jz7 N.%KlA%r !SGPOm^D(UqQo_C]$shSc06 ^Z;Ʊn1y NkWsPK'iKh 7|{盱V[o{pE%y_{u#kEĐ#U FAlLh6v5ͣӺ, [Or XZ1A(͠ ,RГqؗ3<1WP wG6pF9R7ean|hjSei%]4b8"t.@קT _DZuru&@`)PP\Pi@՝֒ 7@ [h3@8oLI5'<4x=mXs'Ƽ;WLC~tm2^P\13r<|=oX7 \v듹!/gnFoX SӶ+nt[ҿVsY3Wn)C=ýŀeIHkiD.6bˇZ[<[.Jx:Tj9JL/(I0AUyzqJÅRn P endstream endobj 371 0 obj << /Type /Page /Contents 372 0 R /Resources 370 0 R /MediaBox [0 0 612 792] /Parent 354 0 R >> endobj 373 0 obj << /D [371 0 R /XYZ -1 793 null] >> endobj 248 0 obj << /D [371 0 R /XYZ 72 604.269 null] >> endobj 42 0 obj << /D [371 0 R /XYZ 72 604.269 null] >> endobj 249 0 obj << /D [371 0 R /XYZ 72 408.121 null] >> endobj 46 0 obj << /D [371 0 R /XYZ 72 408.121 null] >> endobj 370 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 438 0 obj << /Length 2257 /Filter /FlateDecode >> stream x][6~_!)IAݶh,dȒW3;{Hf{L2CDys{K{o.ҳܝ1IRx#Hbߛ/>|0bLε +҉ů7SйGųTz Ի\xLPHw9>|4p.FeqOh GWq|{C^A\%bCSlO_ =vwB[$@pjRքqEgcGtL(QJ}r?B *t14Ci=هg 41#@9e\}E㟽& TTxBD`7a5%;BjKw~ބ䢅U wՍڮQ~#`{5ܫD$~sㅷx^~o(u2p"X@ߓb`+/$.-BtVYZ 0!.`3hO wG-J^y[0th74Vuja>A"h"4 zu31w(GLt:5O闗zg}Z7:WS4`|$-$荐"0r lIoȫtާH 餆CD#5Dy B l?yT)^q6'BD0QPOӞ#Hj5 qjL &~N ̅Nnˑ o򔧤83Tû JҮ7Qi]ݡ`$i ~=Hw+T<;E]@ *ߧB9пCɐP$+z5Msf-yeP:$t:}Rm$@q|z<|@踺!:z4> r!EkuC,!vzWDy_D"P0!8JDOzsUiQ5kU14O)EMlW tYEِh4h4+* c p~gټO]1 } o\ʇ ?_"%9b"%*BYm3tt@GF|/d}3͟e~N!dzYuCKO[ 6*y)|ݴGSÉ1gL8r8s|_4qR6v:dYxuq6Yʫ1ãqkpHa}jO#dHVߨq2֤on"dxYt0IK)EB u] .4k8q53?4:*K-rօtn6'ݻ>D3wDP$;46HOJR+򞭢M*)1W,س(6yw[%x6sv=À![4 I2^::2DE hK^ńF0hR4}Z6ۇqu} ?7QvDyrmDl[Z3cwAQBU6cd)9]gTM^RIR4W]}ou_B;ϖ5hm!q#v+9Z)qDY.m :0p{r&@zVǩg=!;$p}͂|i ct>—ue Yچ4tb-0 w4[;UIhl>[n`'@a2zl4]do#EK3;GrɌ#Vi4? wJ%& tr UɖCuzWaTR ?jh8 _ wGZ% YUPti.(u˶7FɨۧKTlqyB02ΨUEAt M M[$n(Nno%?yn ~ŽiH}T ?7җsk(1<22*,)U"DjZU~q7&;÷D@͕mF,\:aSo곂u5(@qvB./ M$۪sQ=Mm,)w38gI,:>O@1sRB0qnc/cJ endstream endobj 437 0 obj << /Type /Page /Contents 438 0 R /Resources 436 0 R /MediaBox [0 0 612 792] /Parent 354 0 R /Annots [ 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 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 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R ] >> endobj 374 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 632.634 165.917 643.538] /A << /S /GoTo /D (top-level) >> >> endobj 375 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 632.634 517.086 643.538] /A << /S /GoTo /D (top-level) >> >> endobj 376 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 620.679 178.37 631.583] /A << /S /GoTo /D (ll-summary) >> >> endobj 377 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 620.679 517.086 631.583] /A << /S /GoTo /D (ll-summary) >> >> endobj 378 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 608.724 180.283 619.628] /A << /S /GoTo /D (hl-summary) >> >> endobj 379 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 608.724 517.086 619.628] /A << /S /GoTo /D (hl-summary) >> >> endobj 380 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 596.769 203.665 607.673] /A << /S /GoTo /D (util-fns-summary) >> >> endobj 381 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [510.112 596.769 517.086 607.673] /A << /S /GoTo /D (util-fns-summary) >> >> endobj 382 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 584.814 149.409 595.718] /A << /S /GoTo /D (err-handling) >> >> endobj 383 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 584.814 517.086 595.718] /A << /S /GoTo /D (err-handling) >> >> endobj 384 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 574.916 168.567 583.763] /A << /S /GoTo /D (low-level) >> >> endobj 385 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 574.916 517.086 583.763] /A << /S /GoTo /D (low-level) >> >> endobj 386 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 560.903 184.288 571.807] /A << /S /GoTo /D (bzcompress-init) >> >> endobj 387 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 560.903 517.086 571.807] /A << /S /GoTo /D (bzcompress-init) >> >> endobj 388 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 548.948 170.45 559.852] /A << /S /GoTo /D (bzCompress) >> >> endobj 389 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 548.948 517.086 559.852] /A << /S /GoTo /D (bzCompress) >> >> endobj 390 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 536.993 186.5 547.897] /A << /S /GoTo /D (bzCompress-end) >> >> endobj 391 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 536.993 517.086 547.897] /A << /S /GoTo /D (bzCompress-end) >> >> endobj 392 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 525.038 193.683 535.942] /A << /S /GoTo /D (bzDecompress-init) >> >> endobj 393 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 525.038 517.086 535.942] /A << /S /GoTo /D (bzDecompress-init) >> >> endobj 394 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 513.083 179.845 523.987] /A << /S /GoTo /D (bzDecompress) >> >> endobj 395 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 513.083 517.086 523.987] /A << /S /GoTo /D (bzDecompress) >> >> endobj 396 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 501.128 195.895 512.032] /A << /S /GoTo /D (bzDecompress-end) >> >> endobj 397 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 501.128 517.086 512.032] /A << /S /GoTo /D (bzDecompress-end) >> >> endobj 398 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 489.172 170.48 500.076] /A << /S /GoTo /D (hl-interface) >> >> endobj 399 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 489.172 517.086 500.076] /A << /S /GoTo /D (hl-interface) >> >> endobj 400 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 477.217 172.652 488.121] /A << /S /GoTo /D (bzreadopen) >> >> endobj 401 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 477.217 517.086 488.121] /A << /S /GoTo /D (bzreadopen) >> >> endobj 402 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 466.238 151.073 476.166] /A << /S /GoTo /D (bzread) >> >> endobj 403 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 466.238 517.086 476.166] /A << /S /GoTo /D (bzread) >> >> endobj 404 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 454.283 195.895 464.211] /A << /S /GoTo /D (bzreadgetunused) >> >> endobj 405 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 454.283 517.086 464.211] /A << /S /GoTo /D (bzreadgetunused) >> >> endobj 406 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 442.328 173.768 452.256] /A << /S /GoTo /D (bzreadclose) >> >> endobj 407 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 442.328 517.086 452.256] /A << /S /GoTo /D (bzreadclose) >> >> endobj 408 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 429.397 174.864 440.301] /A << /S /GoTo /D (bzwriteopen) >> >> endobj 409 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 429.397 517.086 440.301] /A << /S /GoTo /D (bzwriteopen) >> >> endobj 410 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 418.418 153.285 428.345] /A << /S /GoTo /D (bzwrite) >> >> endobj 411 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 418.418 517.086 428.345] /A << /S /GoTo /D (bzwrite) >> >> endobj 412 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 406.463 175.979 416.39] /A << /S /GoTo /D (bzwriteclose) >> >> endobj 413 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 406.463 517.086 416.39] /A << /S /GoTo /D (bzwriteclose) >> >> endobj 414 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 393.531 280.556 404.435] /A << /S /GoTo /D (embed) >> >> endobj 415 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 393.531 517.086 404.435] /A << /S /GoTo /D (embed) >> >> endobj 416 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 381.576 235.187 392.48] /A << /S /GoTo /D (std-rdwr) >> >> endobj 417 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 381.576 517.086 392.48] /A << /S /GoTo /D (std-rdwr) >> >> endobj 418 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 369.621 156.622 380.525] /A << /S /GoTo /D (util-fns) >> >> endobj 419 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 369.621 517.086 380.525] /A << /S /GoTo /D (util-fns) >> >> endobj 420 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 357.666 216.746 368.57] /A << /S /GoTo /D (bzbufftobuffcompress) >> >> endobj 421 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 357.666 517.086 368.57] /A << /S /GoTo /D (bzbufftobuffcompress) >> >> endobj 422 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 345.71 226.141 356.614] /A << /S /GoTo /D (bzbufftobuffdecompress) >> >> endobj 423 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 345.71 517.086 356.614] /A << /S /GoTo /D (bzbufftobuffdecompress) >> >> endobj 424 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 333.755 201.174 344.659] /A << /S /GoTo /D (zlib-compat) >> >> endobj 425 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 333.755 517.086 344.659] /A << /S /GoTo /D (zlib-compat) >> >> endobj 426 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 321.8 268.82 332.704] /A << /S /GoTo /D (stdio-free) >> >> endobj 427 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 321.8 517.086 332.704] /A << /S /GoTo /D (stdio-free) >> >> endobj 428 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 309.845 174.604 320.749] /A << /S /GoTo /D (stdio-bye) >> >> endobj 429 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 309.845 517.086 320.749] /A << /S /GoTo /D (stdio-bye) >> >> endobj 430 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 297.89 187.595 308.794] /A << /S /GoTo /D (critical-error) >> >> endobj 431 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 297.89 517.086 308.794] /A << /S /GoTo /D (critical-error) >> >> endobj 432 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 285.935 190.824 296.839] /A << /S /GoTo /D (win-dll) >> >> endobj 433 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 285.935 517.086 296.839] /A << /S /GoTo /D (win-dll) >> >> endobj 434 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [100.881 220.181 172.632 231.085] /A << /S /GoTo /D (using) >> >> endobj 435 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [170.639 220.181 186.739 231.085] /A << /S /GoTo /D (using) >> >> endobj 439 0 obj << /D [437 0 R /XYZ -1 793 null] >> endobj 250 0 obj << /D [437 0 R /XYZ 72 720 null] >> endobj 50 0 obj << /D [437 0 R /XYZ 72 720 null] >> endobj 441 0 obj << /D [437 0 R /XYZ 72 686.437 null] >> endobj 442 0 obj << /D [437 0 R /XYZ 72 633.631 null] >> endobj 443 0 obj << /D [437 0 R /XYZ 72 575.912 null] >> endobj 444 0 obj << /D [437 0 R /XYZ 72 490.169 null] >> endobj 445 0 obj << /D [437 0 R /XYZ 72 370.617 null] >> endobj 446 0 obj << /D [437 0 R /XYZ 72 322.796 null] >> endobj 251 0 obj << /D [437 0 R /XYZ 72 221.177 null] >> endobj 54 0 obj << /D [437 0 R /XYZ 72 221.177 null] >> endobj 436 0 obj << /Font << /F28 116 0 R /F97 440 0 R /F37 122 0 R /F11 230 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 449 0 obj << /Length 3400 /Filter /FlateDecode >> stream x[mܶ~b~nѕE(ڤv @ҢMB˽U^|>pz;G{N4^rHp!|o쏿+ˤ||}E/hu}\*H>]n(f KFű'uMv8r/8X| Z\oH]cwT9uKHp봾DjUJcܻZo"Ҟbq}`׿߽ɼkJKXYV=5(Mc ً@DBI\6Ay^ZV ` v}cr"7]QbKtM>,LxЬEfNHڮMv0ܩ1ljǪ¾*εi2@HƵmĺo>mfi5W% 3hԚ'+SMV3>&q:.TB[7k̠SimmҢ&'F$cg_R0SZfMAÈ]R f7uumj+[sU⵾,oy̖&t9/(8{iInǶ"˝@T{Ydv{*7!2YS6flbM?|rОC;s8EsVr%p8[m>M516l,.Ai46j㪠m뜝պEJ[HjLT.$4: O,o)RF^ 3'l:^Y JL/{ټ:"=HVp[)}8 rz~<`SG,=/@HW%2+4TCsUΪ`KO%\"P!1\,$ߋ,J`\*.Dr#w 0Dšz%x1^;P^oD^So{?v^b7 epT"= l;-X2p&K~Vmp?h$ey(!J{KJ0&:Xyɇ!qgpWt [ O'ΦNǨMnRWS݄豰 G*nJIA<]~P!fcuԉ왇 Ja)ٚ +&3mp6A@>c]B+?4ۦCc~lwQB~p< }"V5j4;;BiZI.-[8!:ǵ=gJ i@W偁FۢOù {6` SCER5ZO%6b#AMi$BQSpϜR 񻂷dwK2vphCmNB;0?u~pDc]{1:f1U܆⎊5DFt>޷BKWXCsLEGoikv8m 'Do]ߗRo>Ѫ.Rl]+T%zxw  b/P'i1$g 9\j>U+n @|߀{k| 9Fr<U'lHr~#|!'At\c vP&eRYj`㹅ۺۣFPbkC5k+]f|KLVAdES +=W֥r/xe"?S0?O/P +%Җ6?[_p_M {ѴQ0U4'/)6J?57%šgis<t@tM5́GJpze<0ee"`9O3KECpb%iMi/O8x?0 f҄􄟌_Y KҢ!D8#Oh \z!5cL/ PlqP,28&Y`h*lKM5w~1g|lw㺏r[+#v 8!x#}ySוT$T>ـ aס?P!5 2Sw}m{X_s 'i\] ۅK+O$j <%رLVT,g (^`T$nS$mBE(6Ew6ֱ' @}nDj́"d6nh檺mPOaP wLJLXB:{$5o* Sq2 `V;H͹ L5Pk (T/4|ч̤z9$pڼ2':(sjv!pN1cHk40 unJY<z疇 M\qvԆ:ĕߓznlCv8&#ΘW hk JH+D#j{4g&=sµ5s١m P ,\clA%r Z4>d3”8{Ym2l-[~=/Ź3`ǐO_7mWۓELeA)߇LROb)^ \_7]i*,8A;֎Ǻ{yU}^xBGKd Ž:P+%4#VDyjL 2\>A`\|-; y#NՌ! !e=q&]e }"f0Z0mJ]34cSgx{AEy>1VO_|Ҕ{C4^\}9KX]OQE2^A t;5Saw2۔GGR 0|ġ@ O4$`.,ZW@%P;W֓p;ʉ3ﱍø|&KM9,LWlza\( ?b.x콹{}M.3,C endstream endobj 448 0 obj << /Type /Page /Contents 449 0 R /Resources 447 0 R /MediaBox [0 0 612 792] /Parent 354 0 R >> endobj 450 0 obj << /D [448 0 R /XYZ -1 793 null] >> endobj 252 0 obj << /D [448 0 R /XYZ 72 707.881 null] >> endobj 451 0 obj << /D [448 0 R /XYZ 72 707.881 null] >> endobj 253 0 obj << /D [448 0 R /XYZ 72 481.992 null] >> endobj 452 0 obj << /D [448 0 R /XYZ 72 481.992 null] >> endobj 254 0 obj << /D [448 0 R /XYZ 72 244.148 null] >> endobj 453 0 obj << /D [448 0 R /XYZ 72 244.148 null] >> endobj 447 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 456 0 obj << /Length 2999 /Filter /FlateDecode >> stream xZsܶtLu,$GN8#4x;|\*.xӹ99uXv'fڕW'bmߤ|q}y2?S]/g|Ye~ųGU۬ڼL:= bݘ~}|IGiMv&G9>Dښ%f!lQgEubgtvc{V(HP.gO;:sWI0K|~*nmw9:/JESz b,OBEޛ7nlٜw䵦CH 9xNfHx^м=!XٓA: 4Ɠ00%w޶(:%-mK@*he49l{#BwfU[%UhNRuyK=LMD,"tH!GQ B h'mןySf+jib7 )ŌMy*<ȫT$"R7J:d[5fSuLm*Tfhp͵{Tz U*+bk % Y fm>ɢ5FyPoi $;y})q`9"rh2aFhnt~Puˡ, ?0,N4%,I /޼.’{6geyۅJcaXw8t'teCq qPQrW^__?͐ 4E{ӘYA'TT|%KFؖI2s-"&$B̽pT`Tg//_|CS )\ƤuH39XYqQŽjۂeJB͆`44|%IJк(6AFX;MLf(e{wB4:PxJET f]l.%;E=@*P6:Sϒo )$A~\?ۆϒt6!V4Mjd}LmWxo HV֥R?L|X+8~+u@NhtłV]ƣFZH9I)0Íwo/?L͘dg r.+&iH>&磠+ps]M E Pيӵum1: n$F&ܣ Ϭ'=uꃐ&II%RD  z< DLv=zXޣTRbw̮ j8RM4D5?ڍם'Z盍 c~2r#s2pŤB?Vv/D#> endobj 457 0 obj << /D [455 0 R /XYZ -1 793 null] >> endobj 255 0 obj << /D [455 0 R /XYZ 72 707.881 null] >> endobj 58 0 obj << /D [455 0 R /XYZ 72 707.881 null] >> endobj 458 0 obj << /D [455 0 R /XYZ 72 447.359 null] >> endobj 459 0 obj << /D [455 0 R /XYZ 72 437.615 null] >> endobj 460 0 obj << /D [455 0 R /XYZ 72 398.138 null] >> endobj 461 0 obj << /D [455 0 R /XYZ 72 360.718 null] >> endobj 462 0 obj << /D [455 0 R /XYZ 72 291.856 null] >> endobj 463 0 obj << /D [455 0 R /XYZ 72 282.112 null] >> endobj 464 0 obj << /D [455 0 R /XYZ 72 196.872 null] >> endobj 465 0 obj << /D [455 0 R /XYZ 72 123.587 null] >> endobj 454 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 469 0 obj << /Length 1823 /Filter /FlateDecode >> stream xYmo6_o勨S&Cv2 ,ӱ0Yr%*AwǣMWeo 6GxktH3B޳IM݆Iq3"ö_lZ"ʦj2ՙ 0(2Dҩ.8k !b@q+B{ؖ\lL=ҍ#)9XE#Cæd蘖u}Q}Uԡ +ųqg 1)5io1/B] B]jq=Ox@X;dE'20%,IӶQHb*-J#7uozzӴnG3 o+.N]X6-t#e$e0E 8JZYvCxZ؎F. ³w['&lDWM/o' eL%TQ)?ub5mra) XĤJjpos 7`=eʎt(!)lU[8d5x41Q_n.3b)x>l=v6 /,1:pmXCU^ 5+U(c7m3˃vxæg?}wv:;{yuvqΕ..:t `C^VC57#@@@5U.LŸĕuT :b˻2(QtvvOًxQ)q)٧txU|}vЫb'ڭC η[o;$!>(f%6NKM>[)?۞4:jsb J kgiݘ]_8AA+4`7+Jqo7-7?{.j(aBC)fGVPV endstream endobj 468 0 obj << /Type /Page /Contents 469 0 R /Resources 467 0 R /MediaBox [0 0 612 792] /Parent 466 0 R >> endobj 470 0 obj << /D [468 0 R /XYZ -1 793 null] >> endobj 471 0 obj << /D [468 0 R /XYZ 72 720 null] >> endobj 472 0 obj << /D [468 0 R /XYZ 72 634.157 null] >> endobj 473 0 obj << /D [468 0 R /XYZ 72 572.389 null] >> endobj 474 0 obj << /D [468 0 R /XYZ 72 522.576 null] >> endobj 475 0 obj << /D [468 0 R /XYZ 72 448.852 null] >> endobj 476 0 obj << /D [468 0 R /XYZ 72 410.994 null] >> endobj 256 0 obj << /D [468 0 R /XYZ 72 361.181 null] >> endobj 62 0 obj << /D [468 0 R /XYZ 72 361.181 null] >> endobj 257 0 obj << /D [468 0 R /XYZ 72 328.327 null] >> endobj 477 0 obj << /D [468 0 R /XYZ 72 328.327 null] >> endobj 467 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 480 0 obj << /Length 2806 /Filter /FlateDecode >> stream xے۶}o ALq&!١$Ě"h^vHM(CkM_(P[o͙7WdJx)BHqp ~Ͷ.VzKinݺ?QA M%`kzSb@"E`Nt?yW ]FnڕM-Ɲ}&Ӛ6CD"]>AQgBEM9Z}D1 r)+ DÙ)2%za9p O j([[nӇwn)qatgSNd'(:o_T$9R9nlR|]=}fUMnI9)X,9p(ϻf>eR{]L֭b>? KA]#a_Wpu$`y,nvz^:p{֧KƒDDtĢV;SlM`Un ?wQ8|H'y.DZ\\ٙoScP7pͳ"ozHU(N"+Yװ P+B)זf1!RqPou#65pYtkt4\M*, ĜG7=*k[stk ު# vA9~6.lw?A/dyRwϺ5{ýޛэ @atUejki4`ЭY pE':e~L{y~Q>1xcfFG Jzl3/9VGΔNnN(42(3؄O-"]3<ƿۋIݴZ/Xn.#)}d|EI4 Ό1\EtKI2bZ08_=4{iyP(<|XQ" j<"6[3tUje:6]9+Õ@'֐8cXL sX>KDi'ZiWt9b?2[dr+"ERx^y#B٬jU_{ky+?:(f]+|BRCe; ȥ(]|6(¡.ds[i]:ؤNp~ 'Tt6. *N׸j<+!·27l_ڂ&jʉj´;aPMKߗHLJ|U=.p2%6s ^.E5>̮ 1OCKέ06pi >P*7ߧ PO@ ;wxaӣ2*Tq4i,1C7Ǟd:qH6 47oۮ@{ {H`4G7Xu2w,BoC/:7ٟ=8~֧Hʓ&>LÄkH# WAڂꗕ~#!h4<ؾ] xW0͍׭aC `|+ D:XJy{EEjrRo0Qw%*aA%pkhs?Iv?n.V;,h]]m~o'p"?1ؿm|_\i endstream endobj 479 0 obj << /Type /Page /Contents 480 0 R /Resources 478 0 R /MediaBox [0 0 612 792] /Parent 466 0 R >> endobj 481 0 obj << /D [479 0 R /XYZ -1 793 null] >> endobj 478 0 obj << /Font << /F37 122 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 484 0 obj << /Length 2478 /Filter /FlateDecode >> stream xZm6BC̈zW{8 -4Iwm2m [%*[ߐ3%zM}ÙQ\Dž?+?tyS~,ȹ:ON BzxֻVe^+/t7/)at4_ ILTNrW\q;ϒԇ#rW:hqY&΍Y:A ^8~sSsb2Fj/:EDF ]*tŮnA%Xl܅.ZdП-WQ,^K/\h78SXldMm XqҐ$6L-X}+qc: BB+.(\TUe)JS݀J^5bgSr@o.TKE,47uj1"([3cFDYB1rwa #f%_MMg#+껖0#qK0+%,L)nƠՀKÓE¬/:P jЖDCC&Z-uk h.b79;s.Φ4p}(@Ƞ˻ށk,l@jLz:t>I6y{;KɕWmh]BK^$[K&qr-h`dFxk{755but gsYt}64nfY_rxVXۜt۶.FVDnRWVHxCkdN&Δ4يt9X:\cj%B6`q)^5 lU055ooeNs{>37sr ֊ d T`LlN4$,1dСDk {h )S?YH5-5o +W8ҹ]@?xabBeh0w$Xz5r!ƣ8Vg`J}]yny)GV V뇮X2!JY_X4GpƈKcn4o3xcVs, Q;ķmEq}m- ٞp/iT:!D5q_߾}h>(%"-4^hfc/:VJ3Q]ӌg<{T[b-^˻&$>?ўDa7Gٮ.WɼtY'7oޑs{^4~n):Sjj6,+ݞ)Zj_|ya{}SfrYsƿ3E3ߞQnLi2B }2a f 9_g~Zyןh 9H[jkgZB페I><-+d(yΏ` bnH#1G1J_Btvu. ]zJYOid!1{xlP \q<ŴpĂYF;,|zf9oC[b*ģƗ5@P1 a)мcƩY}KIKJa'n1ꙻRJ:rD)dBAj>F(aCnuc\#+Z WeLB ksߨe2hH]EIdgxr޲&S?{?YS 2^p6WNd TIyh5x: N݊?Txv Fg?{} e&QVg,yI9ஃ2"L8IxW\tKHu}3U_ÃENPQwy Bk3Y18 -I@ը(¯GPz@R]̇e4I ~Qt5h x2 D>ˢx5~YGVfR>E p &4u|`Qb:jÃ3@՜YGS@ %37E0!R yz(n{4:pLO)%W#9t9}jPi. AJ+wj,r wvF㣶]?l’\سn۞ ʘq|N͆:}\=!Z.Kcb^(Mdl%N@DQ~4&q u:tuh\ ~E䨁A#i5꡿gB1%e&ol|m7WMeVM##=;˪3__blYHQIވK/T3BA3= =Ny x "cY9rJϯ wl endstream endobj 483 0 obj << /Type /Page /Contents 484 0 R /Resources 482 0 R /MediaBox [0 0 612 792] /Parent 466 0 R >> endobj 485 0 obj << /D [483 0 R /XYZ -1 793 null] >> endobj 258 0 obj << /D [483 0 R /XYZ 72 313.947 null] >> endobj 486 0 obj << /D [483 0 R /XYZ 72 313.947 null] >> endobj 482 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 489 0 obj << /Length 2973 /Filter /FlateDecode >> stream xZs6_R3A=%:ӺWǙ4(*?b$9*ν܍.@`w-<5w-<{7)/o:P؍#-n Ǯ+d,;h&)˼[D9y[~yȔ0_1GbGɶA<8t?,5YߍYYܒllm?t4̬X*v(@g`[YQ;wt$6L Iދ,Y[$E"19|01VP9ou!3mI~Q qh> :~NT ;CDvɗrM~w5ooDSÅN%}'%Ij/Z95 l<ɈhX{(/:uȰm>8Ѷo/~{wqrrzm/0q)0̨ð#P C/l풥OEƁK_:rؖ30,j3KȔ%dZ?Qq\v|7zy{z w`7v)BgF#1#A(nM<ЋYNSt-C| jyFHxݮ#-B =358ؤljh)r&3R焈@Gv*@c5ࣆhIe徣BUhɆmrf+!UٟZQG#rukbpdo.(p~f֒b(NI2? =SiV;Q:>Hh"7ok4ka $c+iyQ[&YVUVƂ'a@jUwUeküBBSUf>LX #3uB!ѳkFcf<)A(evB@rx 1clfe6!v'i\oq} Q\w"R΍-A[ -ЋL St8-wBXŐ"`P _iboȐЃ8X2GqH>%y+L2JyTs&G%Щ8 XH 48JQ@ M#Q }gB Y5ʾl( }v}5MzR;ͬYEvQNeA^)%,؛Y@D.g*GFCd]T3cC9]ŋ_n/~ŋ'y5a AC6]ؙ[Rƚ\'GiCF|">!PK+5>sO OJ8JEcF5=#"KQڛ$#!aPgi ޾gtv Rh57DFf]^>v! #FԘE`]r4/gA.OwFy<n …ȍd8 LpHiBņQ=Hc!UW)Z!FX;6Vas 킬ADk@x)Z&c NyK9-AaK:h}ԗ= ƵfZM]xO4uUb5 GekCL,#9ȲhI|7sڈd-@dD7:L .uo|j((r(gD` 4_MpT`nf=HY8Er[zgC3[^B@)"\R-F$^LrݐjSѪ GIW "P&-_Jc99GAc2yL7)gB?f+نÑrQv|pCšv Ƽ-*I<)껺WI\)}"3#t=c7''_lM9 @OpO!r{$&cgM<9":Bp9W\ք̉tDHk.]${o䂲 Xc=~wl:+UKM=p<=˅PU>-']R_X*ͤ 3`x:xѿUݔ  K\X~/II .Ƚa"lw=PA(nCWn}-&y\].2ZR0< _xfI{rdN]ɱQp%9;CNwf`hEjb=qT$^SZ NZlhp2 ^V+؋ r<=G<u_if64${"%T́ZBax3fGj3un$3[nsEJ]? ޷uv-dELiW+I 7Sz97,68V endstream endobj 488 0 obj << /Type /Page /Contents 489 0 R /Resources 487 0 R /MediaBox [0 0 612 792] /Parent 466 0 R >> endobj 490 0 obj << /D [488 0 R /XYZ -1 793 null] >> endobj 487 0 obj << /Font << /F37 122 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 493 0 obj << /Length 914 /Filter /FlateDecode >> stream xX[o0~ϯc"1i֖utTVU'Ar`% U\ʇF7{ tck C@E:,\',ЏfAVIIjO_i:* < Az wӓʖ!!]5qܰwu-"]w U+TEU#g«#\t+@BJ\DV!i !`Hw&L*I%ѩoGEʀF (@=ifgq<0i2ٞf$aOy<"!ijDKJCL)"?u*&$b*vsɅq~iagfiBkPPh|OfhiL}6yY+;_Yi;]ޘ/ ;9ϧ_0IHBJ' t %Z/aYSix2dQ't-luO2C-ERTB9G3I>zse=#!;xsj(/K LW:U)ᯈ|Q=1r̚8(49HHr͚w^=ou8cW= %Mhs c(pq1iL3xxpI9הe-Ӛť-Q/,mb37^k\~fgP1}H:EgYs;cE!bB WĂTRb@i=6a:ľ'E8!iL/z4$r@q')Ps:㹠jlo]۳3>v i=)QhqRH p%(cN2m]kk*7f+D*:4dZc4 efe_9`5o endstream endobj 492 0 obj << /Type /Page /Contents 493 0 R /Resources 491 0 R /MediaBox [0 0 612 792] /Parent 466 0 R >> endobj 494 0 obj << /D [492 0 R /XYZ -1 793 null] >> endobj 495 0 obj << /D [492 0 R /XYZ 72 112.115 null] >> endobj 496 0 obj << /D [492 0 R /XYZ 72 80.857 null] >> endobj 491 0 obj << /Font << /F37 122 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 501 0 obj << /Length 2470 /Filter /FlateDecode >> stream xZms6_on"o$ISqSriCIŋH*| %)8Mooݏ4SHE=SgOQq3C)L90ǔ]Bl6'y7($ LJ3Ya%3p>SR= (")[f.O^8яH}IL@j7 `}'v!#߱#6] &5lsOrJvt~qvҥ卅Z]]c(L<5Ry>_Wv@>WU|c0w1,%SFYz\ _,ޤixSutfYYjo{; :c{ڦs& n9QԮh:rHͳv6@I"?B;((ҐĶR63?eh``0wMk[ gpM=Ŕ(R];:p$Hqx"SH.-yĿ=JUs<<,yvRFwKE(DEᅵH5;HW߂e zZ" w[qa eey5T#9ڑPΕD!Yխw]iru]K(ܶ7[w˺*ަ *Fg6l` qVI&ҺR=G6h<DH~+R;?㳳_OΛ\hߎl>Zmzu+윞ugk@תgk=>m{k bOb;ȷR.D.@'[HZ{PcHiQ UEi5 R8lZn ׿6A4}TQp0<ѯ 3RŢ1Ϣo)eRrbl\}"JgʡI![`:+Y^ $#t'mn[3So= rHTP$DFeLuhsCĦ :iwOp XYtO_}31(P)OTEpD"XןaHb{p]3(oT zǡ* IoA;AtOQ$煣.8Y~GSJ+Pru_zՈ"bXɵA)#\(?%#m Eyo5;z(n|5H^X!|̶!x"9 .]a((^ ^DL@i$“\EJ]"RlWL5N>,+QAo`&{=dAFV &H SD״1#Itn& `o7#hELdOd{{`tشqAeUy8f%0|'6ڼXh`C>q:4IiKZe4Lio/:d+q6Ƞl}E`p-h%&oBt{A3CAe%ݰ%_RKrYA5J'Co0q!  w!³8]6~AlI%I%Z 0Mո"L)pµ}7Ĕi6nbsUc¾^jq7'jT؆v) q=r4]Jt̐^rwjnܶ6je8`wU дv:vtoC?yna{if%!uiv򶨇 k\_ w}Q=ןXOary[5".ɭkHdӝO#v(GqQHeӪսJvOYX00 5I7BgCgeYig |vaۻ둭59DQ&_ij*Ӻq4Xdf"ʒݠTJ=Wc{@n>6OAJYd9J\. - 1*Y覒*+˔/GI eC}xe2Db% RDJ'C?re>_p endstream endobj 500 0 obj << /Type /Page /Contents 501 0 R /Resources 499 0 R /MediaBox [0 0 612 792] /Parent 507 0 R /Annots [ 497 0 R 498 0 R ] >> endobj 497 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [165.17 173.992 236.921 184.896] /A << /S /GoTo /D (using) >> >> endobj 498 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [234.928 173.992 251.028 184.896] /A << /S /GoTo /D (using) >> >> endobj 502 0 obj << /D [500 0 R /XYZ -1 793 null] >> endobj 503 0 obj << /D [500 0 R /XYZ 72 686.81 null] >> endobj 504 0 obj << /D [500 0 R /XYZ 72 652.937 null] >> endobj 259 0 obj << /D [500 0 R /XYZ 72 501.654 null] >> endobj 505 0 obj << /D [500 0 R /XYZ 72 501.654 null] >> endobj 260 0 obj << /D [500 0 R /XYZ 72 361.766 null] >> endobj 506 0 obj << /D [500 0 R /XYZ 72 361.766 null] >> endobj 499 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 510 0 obj << /Length 2159 /Filter /FlateDecode >> stream xZm۶~u|0M'9gNb|&JNE!)_ΓDݩNghcX,}v2(io݇FWߞVafWg/_ e$S\EHP#-3e]/wmsUUԷ<]ѯ%alg=L3r lXs?]/gXI3Gd$"Wg?L}Q"4s#HH@ޟѭbdJ*H3ޑGK"JfۤJ,!J5Oh#J0u^핽(+M %!Br+6oﱲ;,̌TżEinыGV߽z RWe?/`*Dǻ4v5]߽Qŏ68p/W[f,慩{TS5AWy!/|Vg=ָ `\'竲lyߝ3; w%=y_4uCeDc+QpkGR;J2nE of13߰x5nzU '^fH!vA>)TurǛoM^9d+^0ĥzX[G;08eǩ!0dX8,6Myx`P:fƛeɥi[sIJmέږVUZ3qj[Q hS١0ͦ3ݴBIQz_YJaAѷy9"s,LB 7he*2hڛsIfn-eNME!;U5^LܘP-ÜO1iڭMC4mD{=‘rPPr".,4%LgcM< V>DJfS[sǮ}VKaT=ZiG;N5 جASmRixtI#MӮ2 p QbrNk~Ty?h7,p!xl]c-+xp:FwoTF=2E(n<WtwT M%)[9>3?k]\ B5r!! .$yH\mms8m6on5TvabD._-i OO? _>/;ַIʞx}IF(O]>H/?kCg,^o\zZSa'tvW}_6  l >%jbe1r}˩~/!){ pFx셹w)C-Ee zTy>ӐͺO$Ўfwex;x_GPjjdW}Q/G^@+߱ , 0m[̂@Emh{}""a姴нDzMkF俥;_czC0yaj%#Vi 1ϙ,wE.Vi)FHODL'(1' Jm@/GI5[-<+8v`_Hr峝Y6/lw͵︰a뎕&zJDzmǛ/ʩ>LfDK7or7ŇgJb"Wk{A0Noa&eZCI! <X}C2y] es qe|cyog)ɩ` b37IH03pHy̳Jh҇%2;Oz`+A |vO$NtYM=U-*4ۀhqa(o1n7ւ{N{S)ܫS,D 5! `7]o;HBCHoj1E7b/xsaR~Noan/ 4>eTeTz1^Y(XB]!ٙC0߬Oe#=z{ZA"+Q!DRq"]+g=^/ze endstream endobj 509 0 obj << /Type /Page /Contents 510 0 R /Resources 508 0 R /MediaBox [0 0 612 792] /Parent 507 0 R >> endobj 511 0 obj << /D [509 0 R /XYZ -1 793 null] >> endobj 261 0 obj << /D [509 0 R /XYZ 72 553.524 null] >> endobj 512 0 obj << /D [509 0 R /XYZ 72 553.524 null] >> endobj 508 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 515 0 obj << /Length 1710 /Filter /FlateDecode >> stream xYr6}WR'qt24N4:K StIʮ]\HId3nbgڎg pq[]@8W]g8<>e*HK*,D#,UFh4ޖżL4TyZ/G/vL B<&SzJz}H1k[$(,,^DqG2J .Գ;ڋ9l$}zohG#1PfVeqThG`aG$.{c(ziNe˥/_QoO=(9KX^/8ء(d8v=4C-k3/liLj3m^_TU6ae7mO^ =r[盖Zʿ 6y;Ӕ|:.y: c.jS]ʰyVjtYeQ;'\'V%YxYq wy?iIl eTccƑyZ郠<(0G/lRXW\|) +3BYV 9纘>jL,>>\ٟF\(l_FJ;W!EdiM.݆aiU `{|z_Sj'D-Prd~ 1$`OuGg:FJo%!MߜpW>` ~:وLjg R.m B Sq3tZ&4~fOI{OӲ`Q,&&7ebif,"FDAlfRR=VpPohc%ݽeqИ\@`-KdIJ0$QYfh,$gNj}p}-4C70:b  Cp63dnQn 䅡բXeSx6 S%mõAՅ/M\F5 9܅'c-B7kkU#bDB_MVWĈT娆ײă"WfeZM&eVYvїzsfACc! $RT3Y&,os} o {8+٭v+۹#%U#! >@o^S Xm6 v)[Z ܈V T&('=@U>5evGE&!(XJ `nVc x͇|^tR;출=gO?,Fp4e"WΏ=g U\j6g{su yInM`2$YUqP2ԡ2-VUؒ^l>a03I͒4 2,0O3GnP&޸D*Dy`Y 'UMsƢU_F5I|G! >i endstream endobj 514 0 obj << /Type /Page /Contents 515 0 R /Resources 513 0 R /MediaBox [0 0 612 792] /Parent 507 0 R >> endobj 516 0 obj << /D [514 0 R /XYZ -1 793 null] >> endobj 262 0 obj << /D [514 0 R /XYZ 72 457.883 null] >> endobj 517 0 obj << /D [514 0 R /XYZ 72 457.883 null] >> endobj 263 0 obj << /D [514 0 R /XYZ 72 247.161 null] >> endobj 66 0 obj << /D [514 0 R /XYZ 72 247.161 null] >> endobj 518 0 obj << /D [514 0 R /XYZ 72 178.37 null] >> endobj 519 0 obj << /D [514 0 R /XYZ 72 86.714 null] >> endobj 513 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 522 0 obj << /Length 2795 /Filter /FlateDecode >> stream xZsܶR MNRreiұp>L!E oCRA|oڵ28BnZG'i"z/]ݍqYtM'Gt #@Mi5˗fP\*h~cYq:\{3H*Dpp9x&yH7ӀPX@;J RVއ Q8≿ ͆G~ƅZ֦c Y-Hֶش3ᷕyy\#axfe5@6扪ҍZ6UW/XpFi*uik-`4x*,Z.0(\(Zgi̥,M?KBYgpa^VcaE+} } hsY5& a9f6!YjM!xҴI4]q܌H V9zM||~*Nt\;c:[ C#BzmĈ>Eϔ9 $gVxkpn:m?jG旲?fk4ԫQ_B&OgAB$|b2AfZH,8CFj /q]mqAK1ϔ1  7ٛmMfXo]_}F;1} ݴYm+QH=CwFW$&E`j ; <N{;mr+'4 wt䢰)ImŻ˓x}"[/٤+kh&WҊ,WT؋M5v:t;&pѮ0SS5'Ȏ2q K*6 /^r̨ CI"u69Qp:M "1 #ؽ/݁cpd Yz+txNLhRȬ}$ܗu Bq i66B۩8Rn\0!}tD%X2mT(>K@ :6:|c^l8J=g`#A=;f tfd qngM$"`la "lX MMoQsgj4`_VLNƷlt<2x=^%Zzftk}֗U^EQ4z0Ro)RCF@aIv/Q/ON.NW`j*8d{3XFP7dfxa}eAk?_Tb+S ^ @}(]pO[#,H-^R5 cUfO}vϪ@'nCYZ=ڽ<ԐRi`V}#jZ7*={6bEvOugMh}s'oߞNູ>sOS*V3q<Bє*nR %b}GL> endobj 523 0 obj << /D [521 0 R /XYZ -1 793 null] >> endobj 524 0 obj << /D [521 0 R /XYZ 72 638.142 null] >> endobj 525 0 obj << /D [521 0 R /XYZ 72 592.314 null] >> endobj 264 0 obj << /D [521 0 R /XYZ 72 558.441 null] >> endobj 526 0 obj << /D [521 0 R /XYZ 72 558.441 null] >> endobj 520 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 529 0 obj << /Length 1797 /Filter /FlateDecode >> stream xYYo8~ϯУY"%rtݢݶ#=2 %WGRl'Aդ!9$GÙo4Wچo^oR?@88ZiB$H&\h_iyy:rI]M>=%[a2*K7qfG,H"tGdD(?`sJV]D"%k?u#fp_C[ )\dH &I LA^ c$7}'S㰭\7mf{ M(0 HK|VͿ<ü鷞9fob[+Ss)ݗ#@s>( QPDagfdOF*o aHH"\%S;~2Ƥ`~QQ9#p$ ~-cΤ #"'DJ7 CQmGDcIȣb٠K;@%%BZI"p$"{߻&5',o>rbBp1fkw)ȩۡ ϕ 3˨rBR"rqm18% oCcveV7i@-8qiD˺Z;"G&>P 3Np֊" !E0_'|i-1-!Ij LDHA~9қ $z \^l,-8!d;O;$Qؘu. eg3$>LiEMas_-]]H,@GN;4 LV)g&];`,Lk,ڃ1=B$*Ni0:H"h4o8cDP?%t&׭Pi>Z '@$yG,JmUʸqK/08EKnw 0e {l_};e꺲'BH^6bfzҷ VF#`Dve }`_y'ľ,@э2VbNeYW7%Ү]P+R Rh"=kOG,TM lr i+?9-8B5oL}`xbgBzޅ;yZ>Vk93ECӽۣA8ka?-ET[9tVt.S/iLgyܾfUuŢ_~Li+eݷyEl.[pNVHCsVnEյ~sLz߹`E 罘2p]oQ¾YBp)-f'|miy׬g^&2P+o>9~yv66 +N t'V "<Zc`z&3S ecz ag) BʳlnG1֓o`X$9yS> }ErKޯuXa P\ʅ6x]:/_Ti^{"}nalOKp8,%S{^^>tI s4Q4|V% vpYJI:^"#?ߕAߟzU% NM) D٘2…qnAiqꘄki2\kָj 4ar9#FyU9ہ2>%0J^]V=X6)>tBK֌(18ύ_C|d`)y^gGI endstream endobj 528 0 obj << /Type /Page /Contents 529 0 R /Resources 527 0 R /MediaBox [0 0 612 792] /Parent 507 0 R >> endobj 530 0 obj << /D [528 0 R /XYZ -1 793 null] >> endobj 265 0 obj << /D [528 0 R /XYZ 72 577.435 null] >> endobj 531 0 obj << /D [528 0 R /XYZ 72 577.435 null] >> endobj 527 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 534 0 obj << /Length 1529 /Filter /FlateDecode >> stream xYn8}W^Ĭx%8EoI8آMd)xӯߡHɖ6Y`""gf KAWG|9rpyHb)@ DbGxS}n]4 0;uZ0l <ܗXt#ѷ#R% F_4woѲ9Gs1.#tuaV;9%xefK_hdz QC8JXwtGtswv>,ZvSGwvbrhJb2s]_ q~ք&koUV.m f DMV’! Ikv0AqLQb\͓~]Fpx] =O{w3$ _!ѩgf CwlPafp[ ]&Yj%CE] Z]uxOw1JyYON],n/2K7P2CZ*Cvn>d6, OXҍDc&N+6q[07T:o|" sधWv8!`žxhpJ}㝴ZU$BbgLqSJڸ Rwbx| LD!%a(הKRgA\(;k%8vh#bi*HBrsX`N2-3p43Res"LU_FݰM!-"MJ˥ybSV%(tj2쓎.Tr/i񞔰aa&ôH37c^+*Vxjt#LGWU[ s%ܱt"p}$Gh]\@6\iڰ#?=)eE$`Heoʗ|P9T#J N3pbkcs {V:xs}~};mSd(ZdN׮z$bH7ikXXkܛ$͐vtNcIxYPj endstream endobj 533 0 obj << /Type /Page /Contents 534 0 R /Resources 532 0 R /MediaBox [0 0 612 792] /Parent 507 0 R >> endobj 535 0 obj << /D [533 0 R /XYZ -1 793 null] >> endobj 266 0 obj << /D [533 0 R /XYZ 72 267.497 null] >> endobj 536 0 obj << /D [533 0 R /XYZ 72 267.497 null] >> endobj 532 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 539 0 obj << /Length 1595 /Filter /FlateDecode >> stream xY[sF~ϯУI} @3&#X,IM~}Jel !P&3wd`˯?p`_'у32h ׈r\N׽<Σ{u~,tYɎ=nTJ_[f>0r٣A7wOEMiVVQ_QOnK'laZHjtW9,X4و}d䫸0_5R f-4I>U^4JOoѸuwEL;i $j3!MIĈ Lh(ɾ)B&R'.̋?0 _ _MoPޓ;UTt!')bQG|MZƁAs/nB`5ytk<ˏJMQ ䷻M:JBIJC062H.Ibyѽg'.L^Fqꀋ+3O< lM L&"&h nFwmJUXAn"_e[dm]{hV[U@V!dF;#E3Kp"!k״e:1yr㱧䵅x+2Oɖ~P̲e2I5Y΢Y&=Y/Z,lQi::ˌC|*Inx*YP`2tܢ*".+̨s[C*R%(GHs'ǝtGUzZy»LG6H)MT$kpA:$)=PP0@!y?-~ I9ن@ q")dҍuHR%=6̄ed3jaSʷrcZwI6~25wknGɛV/Xe3H.uPF"7(w!\2wMk&QVX Uc4<;4 Qȁ@\#5 {:p$u},<}49ȒZj,_@ pe1<0Q([P-N'8*WZȎܙvԺiGS1tc+/!42DL6tPsqk9RdJ[/&)$Rj)Al9 ETzTei\vK ܊KUnuj;R8jvl>I ғY(kurTuzOֻ1bL] &k^=l|໠e.l-G-4B|tS*◣j*kE>>/[ҏCv?ݏsE4P͝~1qZ endstream endobj 538 0 obj << /Type /Page /Contents 539 0 R /Resources 537 0 R /MediaBox [0 0 612 792] /Parent 543 0 R >> endobj 540 0 obj << /D [538 0 R /XYZ -1 793 null] >> endobj 267 0 obj << /D [538 0 R /XYZ 72 565.48 null] >> endobj 541 0 obj << /D [538 0 R /XYZ 72 565.48 null] >> endobj 268 0 obj << /D [538 0 R /XYZ 72 330.287 null] >> endobj 542 0 obj << /D [538 0 R /XYZ 72 330.287 null] >> endobj 537 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 546 0 obj << /Length 1200 /Filter /FlateDecode >> stream xX[O8~c"Ʒj%@e,La\օhҤtI씤΅.Uql;DT AWʇ}9rx?)<桫1TaI$Lj>t/& &(9%yT>]^%IUQC4ek>HC'$ǾpD}p{Gj bЏeJQkm+'a@ǐ+=rDV GTp@Px 7)$\W|PN}4Z=G0[jӁ΂<Z'7rgNQGզΊ]AvmYYgNO%==,8~4%44&a leid }$Mtn󦿥~$0Ia/AOj]AM2\', Q*Ǘ<#{H<*aW*,KLnt:Pն3aH(_6*,](!J mHZa^dl&|m"ର^uH>㴴ynD0O(ML/1iϱL x`y5uW `ɷ^>YtLƚ(ڀs޳gETj-Ch@LEЕ)K@&#j|ة1ǜ:Iq̄A i iIXyWhc\"?fH̨+ZT{'e-#6Sg&NJ\4KJuPTH9ڡYK…=[$p(k- a9`sw#r\Ydɼߞ5p >L ,̷+=- vYS.BzYx_܄qNLJNc; r`F.[B+gR]G!q+gq~~mۙ:iZ#!,x[@{`D'K0dح$MH)7Byϓd/[# g@:;pE֮fMY[ǑM%eQ"›ׅl:ՉΧ\>3TC6@ǙV [UhFF/{ P e I7 ?")|?7 endstream endobj 545 0 obj << /Type /Page /Contents 546 0 R /Resources 544 0 R /MediaBox [0 0 612 792] /Parent 543 0 R >> endobj 547 0 obj << /D [545 0 R /XYZ -1 793 null] >> endobj 269 0 obj << /D [545 0 R /XYZ 72 387.049 null] >> endobj 549 0 obj << /D [545 0 R /XYZ 72 387.049 null] >> endobj 270 0 obj << /D [545 0 R /XYZ 72 174.87 null] >> endobj 550 0 obj << /D [545 0 R /XYZ 72 174.87 null] >> endobj 544 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F14 548 0 R /F11 230 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 553 0 obj << /Length 2661 /Filter /FlateDecode >> stream xis~Ţr괱YNF 08ʿAJCvwǻTD𯽶C\|sݝ͕/Ͼz) e:,I }}\nW׋췋.$K')–Ty܋z+gqŃD2J`3`;{Sa b*5= T3cW۳EΰTD+mYD' e @"<@``i$3-{M^,Wǿe_1#S=hcx%gN cѶM̃~I]4]y]c.4t` u~UINHHf @:i OV6:/'89I#/vU5R|ֳƴ-?l|BN򋹥b ˋfo+:"!( Nɡq[vp^TU[\g}f]6 YK~_B~;/J.}T:fIuX&ڄ/Vu*GmQfTAH#} ]nwY3W[' ǥ/, j7]P7P ,a/d@G",+xT׋aq!Uز\fUf=eP4b%g5 Ӡ&7iҼ(esOu>UsXۢ*2C&fS. ԧŽڍ3/DbTÏҏny` f cLbflvgonh+!Q%̫.i+!#DoauޣɆy9T"ASƚpeCwƊQKk3/A\2}Zb@^[h9rP_'eF{F+ -A*:?BL3ь4jՊ bw;pem= NH F{7N-[7!DoԐ5;;I"> J}l|%Llo%[scy$ǐ#z63iY%S9GqMPVFѥM5h  ǡLg[x 26*|[*kc)(AD|lr^B _䷭ $N`CZx#}QiDD n(@%puyY="92g-Ρk6SOqFhAE[c6G!-@՛yx{#> ƌGo-`w6+nrMc⑦7y_o嫗 +=Ҏqp\SwN2HmĄƸ;*v9چ(X9 YM! Oܐ+"nȕ[~N m @43D>Si=iqIn$mq-W[iwtGzhz 9>К nk[! `|zKO3$` 25yW3ܧ+xn;8w(Cq~ƲEI!R1I٬Cg lRМ{LK `<95 %cׇp.GcAdԂp>&.' 9*" {bHA"2B8 YO'/ǡ95((:MV0RVO1" ĚcH|z1hh"I@˲ *g'\Cz"iǭG:T$"pPL&Xfq;=W>7 M_)bo*z刱 lC(ٙb.(?HԦmvn2yۍn`mYL ؕg?O4W=ջޞif^lM)g+|( }Ye ~6N6jx'I"',1S>8%n.M9_sBGE.Po3ji 3 3ZMѿkf +5ţCǹʺ-YlnՉ4ɶ!>#O&mmZ3I$ OyLx{yq35=I2=Q4y>0r{DŤ ?r=pK,M@/\<$˳ꕋ endstream endobj 552 0 obj << /Type /Page /Contents 553 0 R /Resources 551 0 R /MediaBox [0 0 612 792] /Parent 543 0 R >> endobj 554 0 obj << /D [552 0 R /XYZ -1 793 null] >> endobj 271 0 obj << /D [552 0 R /XYZ 72 306.386 null] >> endobj 555 0 obj << /D [552 0 R /XYZ 72 306.386 null] >> endobj 556 0 obj << /D [552 0 R /XYZ 72 241.728 null] >> endobj 557 0 obj << /D [552 0 R /XYZ 72 187.994 null] >> endobj 551 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 560 0 obj << /Length 1766 /Filter /FlateDecode >> stream xYmo6_*1CRۊ~hK-[a@"m&&K$Ky,uX<{xDCᯜu.QGww{)9::yNLUN(b…\MOe1-\]z6xutJw!Q CFQF[{~:#fz =zx~u&0ԡDđ23}"ڙ[3h %ᐹs9%yQWQUW& 'N丘/JY5zY<[31q|qusU2[ Y2Na] CC/#;I{|"%EnGP6ǁ H 2Fb߆j&)zt{)ag 8b֬.e,갍=Jx_?<{ُ7SH[sI`h}'%_V@ F=mFf 5ѩXjhC&uߨOB AXzMQrwoeb}wcg4]ZJ;*̙R† .d -qFc,*Jд:)D1L& fADbK2oVifG3hAw~Nwmu|~Z'Ӂ&*RNU_ F ZoTw!_[Z!lح3fl~,8h.Be-ˊ` 3R.0E&i\ PՇMDu\H5M R(@jf&3&yRYzapQ`Y!cQMXNUKM? +{oA3uVnGͤ07\6eJCH Mvl(E\0Rjy$k(f_^l:i#3FǛXۼ7:u_\]^^\n:)"",&#܁ rg!Yv#|vѧ*[B"l?j^/MKple19̄~٧?eP m[ endstream endobj 559 0 obj << /Type /Page /Contents 560 0 R /Resources 558 0 R /MediaBox [0 0 612 792] /Parent 543 0 R >> endobj 561 0 obj << /D [559 0 R /XYZ -1 793 null] >> endobj 272 0 obj << /D [559 0 R /XYZ 72 614.232 null] >> endobj 562 0 obj << /D [559 0 R /XYZ 72 614.232 null] >> endobj 558 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 565 0 obj << /Length 1760 /Filter /FlateDecode >> stream xYmo6_C'11C5CZlSY$Y2(Rȱ2ٰ"@Hx h`/;~Îݙd G")w&0$LΩK]r1{uI'[@^ a"m|Er#/'{8@23g;=^;y2pK>ykQ[mI jgVE`Lym)hж4a>~ EGBuHDM դa0l3bO:_AҪ!܆=)$.oGJgM /"%:6B"Nh1A5d`7ӽ*Wſڃn57U0Iqq &*HUSZہvUebDB@`orA1hEEV`X*g0OdOEԄ.U>S(/ov_O_چdZ/w2n*{fu_2& 0UYu̴Sዹx756 an8M1{W&oǮXQCp7whE˷@~k=*3#MütL;3pm0 Ěo;o(yٌPeSe)(umk['PO~cuvRX#O۵&* .tBjh{;6G־֢k쀓I9RUAdB8 I& #hQ]'s- A_^nvΆ^GK780yl*pMىND%CHa2H, ]Rtjq$tw&"!4|Lt6',X['e ( '*Ж7S[v]?֊1%dnV$PN67f*A>^*"<d(Wj B}u}#!AJ1Ij!8 'fg1HhuuQfتBKdd+$IlquF@5p }ǖm6u _%8`#7-5קQ =lOwokVޞP@RD1]bc;ӂ(&5&1d,}赀{@$ c" 3Y&t+CdplGZ$k=:L;r$$+l6iv[==٩܃$%.P%~'#16;ת}:09Li,j&7 DX-)sm$e- ;\r%eiXµN-@=_Ąo )WH4} '^Q r~Fj iunϵ,Ы5ރ~κȈ(*YQ1m p+Z W\ endstream endobj 569 0 obj << /Type /Page /Contents 570 0 R /Resources 568 0 R /MediaBox [0 0 612 792] /Parent 543 0 R >> endobj 571 0 obj << /D [569 0 R /XYZ -1 793 null] >> endobj 275 0 obj << /D [569 0 R /XYZ 72 451.905 null] >> endobj 572 0 obj << /D [569 0 R /XYZ 72 451.905 null] >> endobj 568 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 575 0 obj << /Length 2047 /Filter /FlateDecode >> stream xZo6B1#R| ; iw7ۜp٦m"JfCRWV%n"@4of(A^Qs~|tڋD%!Ё1"QSCOd6KXعw;VrB *cxeJ`pdܗ{r?;4"b$(Ύ~% F D49 ( >aV{]ܾF7# 3e@@ʠPx#O`q3٫__]>2 $T]EK TS0uwf(9j0uFvUagWg=Re(]o۷ʋ՘afp}a?%iȿ]Cw꫽#C+~R /uUk/wKm;o+Xj,I>%:MzB>z=6Q7_(TY_8%U(yԨ!lnQ%cos+a;ڒ۳uMtVI* o[#Ua%YPwgo.^V~ݎrUf|N<)d&a=RCL|^_ej.2yn=3nTϜi@ gBD:H"$w!;ݎ2O*=ЩunhȆγ)|gѬ\j XK'1;y9 8 i_䎶)< PgQ+mUOc:1TѮ*" _Yؔ ƬۇXGtSU?)T;Czp~_#!֘ .,T2z-ݞ*J=tQN'}=i^rd=-$_0nQE Qю!NgtI>"5ܚ DW9dᝪjÐ 5wn<) *2W_OQNqܹhs*7'1 7d*Z5`*5w=-h aY0\*awҿW+,`H )čtvZqhGO^/HIϭ\T]|u]ɼw'̷2ib%Z] Yfv%ホ,YSFt"k7I;T(LX7sr?]H!.{JsSe iȚ1$9?acB ji`=m;wm: [HB[ANZi+^ IS7! L]Z;2ԸgaonՀi]IRmCR HѪFhE0\$S괄$!о;L6!3CXcш[;n5fbo8Auhv!}mnCE:4 ͞gTS+ϲuh+HnlGQ,Ouc٩jXؖ4ܓ="`vU9䠈Yqud 9"8^k@ y$4 HhJ 0|Lќ Ld K^h}&|B SCJu$|[@dK|j!iuy[ݕ52*۱~Aaɧ\ =LRY.`@3!"SDPx֥V i endstream endobj 574 0 obj << /Type /Page /Contents 575 0 R /Resources 573 0 R /MediaBox [0 0 612 792] /Parent 577 0 R >> endobj 576 0 obj << /D [574 0 R /XYZ -1 793 null] >> endobj 276 0 obj << /D [574 0 R /XYZ 72 492.852 null] >> endobj 74 0 obj << /D [574 0 R /XYZ 72 492.852 null] >> endobj 277 0 obj << /D [574 0 R /XYZ 72 82.144 null] >> endobj 78 0 obj << /D [574 0 R /XYZ 72 82.144 null] >> endobj 573 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 580 0 obj << /Length 2614 /Filter /FlateDecode >> stream xZi'i>duXh! C̴c$wÙݕg9Q,0}Ws<Jc2+XNj6d0equ sРhȍ5AnlY|uDR((@ |UW*d#\4KAlPN ,\4x1q0Hw6nͩZ AmN9񝞂[ ݀}DDՀ{ N҉(ak򰏮D ;?FHN3Px-b8EMjη&6dǴ㔧܏[r(-&*YN$LIP-7 ( .J2_;Z:;^>f~Lq. E^vko&L93ʈi?8[vTylI]G=`sk);Tp`Wg ٍ25w;{ُDnԧsbrH/\YsӀa4[n`M@i$6xj4Q ,;MIN/6nWff#iqV6 r_U;OBP:8n8 Dc1Z{ͧlyբ!FTD|85toc}ǁn;j!k\DMO@aܩ/5 ÂUgqsnj+|#b񭎘 mÃ<dHͭ%C?4|ŧPp4jlTōoFmVcX19{` BNjµr&/%_?Yc\_wӋy~g@r?~Ϧ̡]Cm)$z|0b%6=BJ$wXwZŘA EUݻ.f'<S2 j-z _"=@t W7QPqoNJ, gpFVK-vK5ėaiQ}˫ٽP\"wۿ 9~Xb`cfCK  endstream endobj 579 0 obj << /Type /Page /Contents 580 0 R /Resources 578 0 R /MediaBox [0 0 612 792] /Parent 577 0 R >> endobj 581 0 obj << /D [579 0 R /XYZ -1 793 null] >> endobj 278 0 obj << /D [579 0 R /XYZ 72 679.881 null] >> endobj 582 0 obj << /D [579 0 R /XYZ 72 679.881 null] >> endobj 279 0 obj << /D [579 0 R /XYZ 72 546.001 null] >> endobj 583 0 obj << /D [579 0 R /XYZ 72 546.001 null] >> endobj 280 0 obj << /D [579 0 R /XYZ 72 142.554 null] >> endobj 82 0 obj << /D [579 0 R /XYZ 72 142.554 null] >> endobj 578 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 586 0 obj << /Length 1244 /Filter /FlateDecode >> stream xXr6}W-B >M:θ%j6x(bY )J /Xc,م᯺ ;jӕbK_88Hp "Dw*8ΛS]lW_9΋0,].?[obiFq I`핃Bg}3wfWE)ڂ:`a秽7>x]+-YM\$Tn7MgӦޜ3`XhL?"8x+ =lmU~FƘf~LOQRo~~ h}nf R9sF1:sBPč.gn72d|N0îs2w_gՐB ЩJoLU2ԤGkbRNBL- l)h/ru_UVv 8Ʋ х 388?Sb>*m%V[ZfhUje&ȿA`"Q$| "7zDž>OW/j h]L 6ڢg4~%3H8Ԛ9SWե6 %GVHhRS̯Zif617|`' #|dS Ǹ$n!n0`#L?;P> :I9> wxorbD*[ƂdiiLVeG#wׯ}jQ89T >eZ@{c2O0en8f#-7Բ?ܨؽ6l>ph] MY iFF*;⢙(W#CsIJ5SڃG+'eeyo&[0d`k\y|v1@XEPiL|R)PpXe Wt[ 2tTNmkg*F"ӦHY`OUI.k/^-k,'.yB)#G iC .psuu! %&-zG7Rbקּ]-%/`lc>8pjlj*6k\cWf9=U2 8P9d )&*sg\esrk~ݴk82 ^}QR4GbH |TaPHO9S|_,f_~ endstream endobj 585 0 obj << /Type /Page /Contents 586 0 R /Resources 584 0 R /MediaBox [0 0 612 792] /Parent 577 0 R >> endobj 587 0 obj << /D [585 0 R /XYZ -1 793 null] >> endobj 584 0 obj << /Font << /F37 122 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 600 0 obj << /Length 2974 /Filter /FlateDecode >> stream x[m۶_ofN _c;ui:uڎ΀$NB"eE.(R(s7x#vyv녷n›o" ,i仙.w?{ ~Xxng3r؍NcoKG<Ei˫E,Rws?Y\VwN.WA9/.e]Fϗ?ܣPI?u?p?bnv.b{N-ig=M/^9L'AH BGUUh8HrxI:n+7}".Gb~\IJdV;xƐlCp)7OC{Cl7H+|Jt)*DÑ AV wk;gmɆ}e> 6R3 @[ ڭŌv8ѷ`j 0.}0vlO-O"8uİ~Ď[w/$bV,[ybg!L,[1[+)(e9vw=x*Q/MF^幹kPX{r~Q:]ϻzS觎\(z أŖKV#+SjDM_qjiн32 zMqD;еz+Y*=Hⶰ2>یi%L#MSY.V;:)86{Ci LF cx(ahPW0 5+q1i͓=WSbQF0]?vJTu{-1_It F ;TC =wB5528MfV6=E]SM /}GR H" pg))"!]4ql b O5yJyFŽLdͪWRS+inl57(R2QĹ٨rCE]f5[5m&A1wb kߵz'6B =C^.1' 5r{n\RU-uӭ"xiT:X'ECx xrh[B7 $㬠 4xkud YN7B+zvΨSn\zB-=w]íb!jŠװNRk4g7Ӛ3IKaPn聣Fq,w:xx]^Ehkm|8O~ yt/w{~JMKM?bpӡX +4:.^}l}hs09T/,TtDmA($ĽW8'jc9cҟ~Q嵥j5+"l!h~AWG\4JoiDJ<^"Y~ʚ(O4Co#dJM^RR4-+ˆ_zPJozO/OtA hP2.CTJ+i*{)P,FבoYO{ŧhFgOWjxY.'8qMmzP>(np}q4ISh\k*bqI -? 0jP+ 94jM?I7A3j(tRs/uOE" N"úRRNv()ڊUϐ:h %7w`ekFai2mQԘ~%驓WBhx.,xANa?p&qr7q;3qy#鮘pif}R(4ͅ!‡9OJ c&љ0f؂8%t3'܎)1jm NZ&;92cܣA, 5 Eܧ17A*/ THub+Ltk:9z-Iy*$܀/<ĄL 0(fJjnlb#g:V UkUt0FoٴTw~;ab܆n[y[8i[0iԈ*B.UNL0f@<?}E?+40.(GnƜA2޿ΝnPv쒳 KA<+ sttA[Lʝg0adfL(dMu-,xV/W$B>e>OmQ8(Q8h)lX(œbHyO';jQοHa $AlPqe紑HyoAd$+ PO zpv#k=l/쇫Cr)>{צ#XL'ُ3ߥ,*@űj<> endobj 588 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 632.634 256.227 643.538] /A << /S /GoTo /D (limits) >> >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 632.634 517.086 643.538] /A << /S /GoTo /D (limits) >> >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 620.679 159.391 631.583] /A << /S /GoTo /D (port-issues) >> >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 620.679 517.086 631.583] /A << /S /GoTo /D (port-issues) >> >> endobj 592 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 608.724 151.99 619.628] /A << /S /GoTo /D (bugs) >> >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 608.724 517.086 619.628] /A << /S /GoTo /D (bugs) >> >> endobj 594 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 596.769 213.598 607.673] /A << /S /GoTo /D (package) >> >> endobj 595 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 596.769 517.086 607.673] /A << /S /GoTo /D (package) >> >> endobj 596 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [71.004 584.814 156.054 595.718] /A << /S /GoTo /D (reading) >> >> endobj 597 0 obj << /Type /Annot /Subtype /Link /Border[1 0 0]/H/I/C[1 0 0] /Rect [505.131 584.814 517.086 595.718] /A << /S /GoTo /D (reading) >> >> endobj 601 0 obj << /D [599 0 R /XYZ -1 793 null] >> endobj 281 0 obj << /D [599 0 R /XYZ 72 720 null] >> endobj 86 0 obj << /D [599 0 R /XYZ 72 720 null] >> endobj 602 0 obj << /D [599 0 R /XYZ 72 691.643 null] >> endobj 282 0 obj << /D [599 0 R /XYZ 72 553.93 null] >> endobj 90 0 obj << /D [599 0 R /XYZ 72 553.93 null] >> endobj 603 0 obj << /D [599 0 R /XYZ 72 429.513 null] >> endobj 604 0 obj << /D [599 0 R /XYZ 72 361.767 null] >> endobj 605 0 obj << /D [599 0 R /XYZ 72 212.327 null] >> endobj 606 0 obj << /D [599 0 R /XYZ 72 154.544 null] >> endobj 607 0 obj << /D [599 0 R /XYZ 72 76.836 null] >> endobj 598 0 obj << /Font << /F28 116 0 R /F37 122 0 R /F11 230 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 610 0 obj << /Length 3053 /Filter /FlateDecode >> stream xZܶ~mqKKԻE?N\P;:+qwc#J>_pH|nna)r8o|mL^}G?)OO,gy“r= y!Xݎke!gYCm&,EgP-0g@ > H$( % A?g`Y{ۯY-"&vdYo0%];PRW$;F]3f d0DY|@srV!?;ERm͖nL:P K`OkK۵^ kaN\Vʆ~iԇEn i0v <YEG`bb FR,[ N9Ls-ZBt0d9R HL8k/&3.HEW?^cܡTkG&q^! @$Īn! c|n yEZx="M3j [B` Utn2Zgw}Ag9 |AiCNQOk{Ǵ8 9njn ]U+cl> e0Q@M#É[~A*vg">"@w+Kxz&C|("VZU';QSջvӉ>jJmvz.Vm!i17 %*آ'p~x. :DWqtLB R=AAîv=艮F^_OL8 I &Hy3#%H`.I*'Iedb"N q:|~1X9 <)j M9Ҷ6՚AgEaՃ &{;7#WM $<,k@HE=a@./C*fa`ЃSҏgى;,Ƙl~fxЛs$ C)נΏUO\ˌכs.Ur$}hp*! QO8\F`.žlŘ!\fܬaITfTn.Xg//ӎ,'.R*DN& ܷSt}:GADžR2uCP)}uINA_?>p 5@N^Qճ7/__M,aY6J7Ē&\'wa/ ! r_ X= `pTa˜hbDWkbjG)(q=b {-y:R4ٵOp1Pa^b'jT%"`XzKy]y|&sVR 4ڞc|]0/ ,th;nĻWm rsKq߫B: `֔(?Ax%d8ho!5 eօʾx(pnau⫳ѝq ]n ,7bS} beg,KփT3BwzvKF6jk6O!݆#]V@5\ VN$j|(#}:@{ýR[87'I}&AEG8 JGC'OE?yP.kq/%;|&lT2as ڌJQ%c{{1 3Yr3I)gpzMߢwVMM&٪cT(7/1Q"lS3!D ٳW/C>I*)̾!c]$c;D,3+ U”+k0|Po1>EWͺ"8#ٻiioC'*;W)ef tW\=t[YQmhk1fX G炂x{QcIiN{֤C8Map`/uO C7rG'qO`Zq">mcj3kC^"|%L:1xpf}5J1!M D7>k _1F4ٷl]gOo4H #o#*p~v`V(FVv-}Cw??yƒ0:)\ְ"\ZZCJ f9*; Fi\w:0 J74QF аF5%4k(tPDeiӯܰԖ Ώd@._;Qg=&aУPý9hߤ"Q ($Rwˋ[ endstream endobj 609 0 obj << /Type /Page /Contents 610 0 R /Resources 608 0 R /MediaBox [0 0 612 792] /Parent 577 0 R >> endobj 611 0 obj << /D [609 0 R /XYZ -1 793 null] >> endobj 612 0 obj << /D [609 0 R /XYZ 72 688.02 null] >> endobj 613 0 obj << /D [609 0 R /XYZ 72 654.147 null] >> endobj 283 0 obj << /D [609 0 R /XYZ 72 594.306 null] >> endobj 94 0 obj << /D [609 0 R /XYZ 72 594.306 null] >> endobj 284 0 obj << /D [609 0 R /XYZ 72 262.667 null] >> endobj 98 0 obj << /D [609 0 R /XYZ 72 262.667 null] >> endobj 614 0 obj << /D [609 0 R /XYZ 72 138.25 null] >> endobj 608 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 619 0 obj << /Length 3223 /Filter /FlateDecode >> stream xZY~_!V\ޤ:c`m l?Dɖ˿>u5E5fbFV}f;f_~"aor ERnlYeRl&Y>̾ nFuZͿ7Ƿ/~xS-iX-SJVQ:[/.mYNg4eefEfԯ+۟\`qFAmWEGzmC"MK`Ϊ+uRgqPfQ w;-[ey޹p< 6 `_'yVwl"=] XmA^> 9Uؽ < VaQ>ѭVz݆<7Ȓ*h5")mah4nK-0{rԓO ן{F#"r ӉF}1N(+oRr=;ګAwgG4L+,tNA7Z)ǃC$W{XB7Dx0C"#{׽D%%|ݫiMFa0 g[=rGUFK^ánfד -P,O WoEƱ_VC6;d$d4Ak%bl ڨW`]]XTЄA†}ɫC .M6l Zpn;ƥkjL3}[+avf<$ߕ[L63A$]/oh-Ž32oܼ1 4)u.=71"V:GN>@ZYc xpK *XaNWO< S jyc4'FVt,X9 8ʆB}%)fVLO@arIAqf:thF a5N hQ9gi.!.a2ZÀ2G8^H~rZfcC ƳY]2a,rxTm7JlC[2-)12߼lp+\ćk7z|)HU1SK~C&2(lAYH b+ s'#ϯ=>qeG"04GYp'[I BS'Ni3^ K6DSW|*LwX, lN{aʔ"7 ]=՘MO =@S>g<'yZz;WG`_j ^m)GP(rT0M(Q@|YbtAaM4躤^yMzX I sF8F eޛsFBr7qO{9 H lwElH.ewnۜhn {c,ϣ(>\D>) '%?7Ø_uG3Bx*̄;4\+ϔ+M׿GKggBruWCuagS ,e.DS}8a:'}~_%wj^9 D1`N͋b:|Is'@67C)\qRydwq@п1ob?'PڋeVX/o*:)71dQn{ZcG voē(ey,,ϐY*p˙ o5+(zZ#Ss64y> endobj 620 0 obj << /D [618 0 R /XYZ -1 793 null] >> endobj 622 0 obj << /D [618 0 R /XYZ 72 594.306 null] >> endobj 623 0 obj << /D [618 0 R /XYZ 72 526.56 null] >> endobj 285 0 obj << /D [618 0 R /XYZ 72 199.587 null] >> endobj 102 0 obj << /D [618 0 R /XYZ 72 199.587 null] >> endobj 617 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F105 621 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 627 0 obj << /Length 2049 /Filter /FlateDecode >> stream xYYs~ׯDpolFvQcIf 0#Z~ߞnCR"evrh4>nP?ҟ,pߗ+wg8JRfQ/,H^$JR~oXЎ_Pg? ,e bj~9jXz[zI$Kax?=o_ < HD}?,'(O'1 0i25JɔҒz _H*5ֆΕ!-@39IE)ƖI$ *be%޲㢳A?ô ֘!)Sw 2~C{U0RaNIsh7mİ1o)o74apK]$gD=o]H $""%ۍ*0'Q:n[}}hCӒyvɴHrFk% zdD!I1Blݢs㈀WY[%7~ qaU'Q?YN^KzF+ɐD5V8c_/k=qRc_MvYf9Z0=f0eWW6LvW;`y^(&ymfMlNN$auV5.rbst,w[,93ai7( YZhJ8!9dLBRUWPy! ֪zz( HuGƈJ߉ &1 w:!yg`2í &Q+R 7vcuvv,U1M;̷B֭xǘ  $+:\1w?HU"vtڬJxa :]xqT%ٳS6A Gep_Yz(#y;!( )3mK(mB _yѷE^. ِdYb[h~{ o24 aQZSO7H)Lt{b5c B^A0A}saCR#2jS3:p}x}J̜'32!Ǻ|{j/94lZAq9K]=Rfl9`J-N!q6 zc23u>23,!F;ܱػcGjot֬Ew}3ݘ"jN}hVBp9( A HZ{ӎۨKUஞްed}X.y5 FX~l?yJVޥhۡ!ԡGZ[kqYXZ[C7s۫鬱0_x8ә/da1,<=מ},h_tS_?(@=nXIjXHVǤzBHVWOwmQ㭭ErX[ui9\n~uVߏ5hֲm 0wTm<;mk7֢ {zf;_A^-N&<#Z!{l@Ng#mwۅڨ{-`CWo*E Ẋ#fJ6謌G$Rؖ%تinLFְ{*CzD mcui*0ߑ޻3b$m9ږ՜NBg} !FhE т1#y.)k4IQ]G; bۓ#t>횝#tC9Uҵ>%Tp:avUbn[2S q˚t;?) F;&wb39: cfƑcQ:T؃ @vu7A{Oe*I$1//X@4q?5}㚧^]k0²p+bbpd/)hqJ,*`"2&mfGE WDaڋ'ft@@k XZu> endobj 615 0 obj << /Type /Annot /Border[1 0 0]/H/I/C[0 1 1] /Rect [103.103 682.974 182.465 693.878] /Subtype/Link/A<> >> endobj 616 0 obj << /Type /Annot /Border[1 0 0]/H/I/C[0 1 1] /Rect [199.839 682.974 281.811 693.878] /Subtype/Link/A<> >> endobj 624 0 obj << /Type /Annot /Border[1 0 0]/H/I/C[0 1 1] /Rect [193.214 649.101 352.834 660.005] /Subtype/Link/A<> >> endobj 628 0 obj << /D [626 0 R /XYZ -1 793 null] >> endobj 286 0 obj << /D [626 0 R /XYZ 72 650.097 null] >> endobj 106 0 obj << /D [626 0 R /XYZ 72 650.097 null] >> endobj 625 0 obj << /Font << /F37 122 0 R /F39 124 0 R /F28 116 0 R >> /ProcSet [ /PDF /Text ] >> endobj 632 0 obj << /Length 747 /Filter /FlateDecode >> stream xVr0+t3A[:dS7Cڃ f+p+!ٵ4ɡ]-{O~Ԣ7\ `ct0"I #(L )HspM6Uӫ7lh~ pa0N 1 @Vn#+l!z\Rq#t~CPMx3jHOjm]CBo{J;dvjuld억uKJ.Ls6ۚ_.ߙrJ֧ϱ KYL3O E"L,d1(J_deI1|,nu:m6l8zrUB4b4=g#NQU}'&\ !މD^׋`U% }Yv:ٺMgVhAwL=vb7r]ZS|IUE jd.G*s`7E&mk[1q)}KQD`}CQj]\̐0o&6\=.( |vi=f0G ƞߤn- 9ہ{ nەvw܎>M!صDB}XC5r3/U~bSv| ~LGb?@6:*[^ C!L0c$g+ +kdeQlirι{i  '~OcpbWw<2(xb+/_Wo endstream endobj 631 0 obj << /Type /Page /Contents 632 0 R /Resources 630 0 R /MediaBox [0 0 612 792] /Parent 629 0 R >> endobj 633 0 obj << /D [631 0 R /XYZ -1 793 null] >> endobj 630 0 obj << /Font << /F37 122 0 R /F39 124 0 R >> /ProcSet [ /PDF /Text ] >> endobj 635 0 obj [833 778 333 333 333 500 675 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 675 675 675 500 920 611 611 667 722 611 611 722 722 333 444 667 556 833 667 722 611 722 611 500 556 722 611 833 611 556 556 389 278 389 422 500 333 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 389 389 278 500 444 667 444 444] endobj 636 0 obj [1000] endobj 637 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 638 0 obj [277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8] endobj 639 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 640 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389 333 722 0 0 722 0 333 500 500 500 500 200 500 333 760] endobj 641 0 obj [611 611 167 333 611 278 333 333 0 333 584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500] endobj 642 0 obj << /Length1 1447 /Length2 5989 /Length3 0 /Length 6964 /Filter /FlateDecode >> stream xڍwT}? Q@D 6S%6`6It)ݥRJ ")!t3y?}پW_~۸n6Th^"iA@0XD pq 񮈿.3DC :U(ਇF!"@4DB  R;@UjQK":<0^ DJJBW8P E (p#TA]hG Y'<# yzz ApBh<w!p uC&8!q h'H#CX :XKhA~;v Dt&B~Ca0FHW@]WBQPW"]_CJ@(|8pHןA?Y WA!PxgH,FwoПẠО(߿%$ dBCh!9"@1Dx@? xcj_ t @#/i@p$ G8"Qg'eH/%@?5ap4F R2_FeeWPD((,B@ yu E?2j%~ \HP04N X,@AB Gx<$B !@f 9hQ1 tB]~`e0T( BO˿ x?Ʉ:׆V+x ȒmZ P{msu8w+ν]P_s䰏:߿0{zsr3#Tevl/m.*c1ej%yr3KhwtUf2J}ho0Ye+ÐX4̛:GD*څ1WqdXUE)f_WⱙIkqEq[6ϛzXi}'K.!爍3à/Xȍ iO:ug 5_U|dsю[qO'Mr/G@/Q|W{C8q_թtjټ!8]sfy&ͅ-%ӝLgB[,DDh<镦@ )=PvA,e>:ނ^2jbU|<uE>mnb_=EK9rltF1 Fݬ^N'*/; f|Շn#xongzʘw:?&/p]5 H[M <|j$80u^n1 yoeT/y@񲓿<h3'>mSZmɋᝨarT.RHɧ]G;r8,;l9ѶW)h6x1't{}Wg\ȵnV1)CNBKm_k w+CK/wB;ZB:Jy{ قYrZIx:;17=& ǜ o8L'S^WQ5B'mB/5!)$5?#K9C-P0Q[e+d3'}#ǐ-i ?7 b٪'eQ$^o5-9M;g DO7鴳>3ݼf3A2p&EߋI ,{0܂<䛙Ja[ECVh81+u_ir) ^9HphiK5mԒ`OH5PtW3U7ins %7Jw|; 0h#4Xp|a^^!rIW#̉Ei@{e ڦj]cc}}h~~uqHMmw|ñX2ou$фE5zl\sMbH+-WŇ9a q'*nW#̇kON6K=$P$Θ͂bg%"RD6XE qr޿wdfl}ؕ zLJˡc 0W93LGXAA9bwErXdhBafZ$ JĻ.ʉ}g_=,6d?jމ#o.șu3˞O=^ҺsasO >hQ|̹_xӚZ*O2CՆ4*W2*DRunuKaGG #LqX/matsJJg\@Ub{_5yG\#8{SϢ{Όj.A7,zt;'Ug-"\M4YPgY=Ӿ0%ҙhtLj5:cyŧ%xV;zSbCHXLƨO2gqG;1[q/|6*o@}MMPwj^+yXy7)暭ndf?"`q[2 ;ѧu⛵t`#֣gj6ieY칛M^V~|~A ?H~D̅3Ӂc3 FXS <6eԽ?xM_rXo r ʹ|%уȕ+E:2Qݐ\ܞνѤ=?8|v}}Z7I67LllM3}A%Sb-@jxkらO 'd !;SJޮU]{~`*.6v}%, lrUSv:^"E /m%lYrE VZmuEy w3^ޠ4⃳ƾ?5+2&@iKꑝ ^~sҰe,l1RY?Bvܣ3y(N!=xfHmiUL'a")\^Y_ c_>#]t{AYaCytԟ`/4srZ'_KFg_ }ds]ff_w鉔c Nq&؍ӊa7RU&nI\ |]#e˳٨sT8>xVhmLuR6WP3* Aݽ&DBAKKGrR{78nPq eֆ. 4j#TDsƢ8/duS UeSO<秬gpn_r4홴ާ {D$yB|빖\HIdu5hOUɗ,Y[4EgTi7{-F. $_$ Q,e;C,nO曵̍mz? τf _OL flq4me0_+c ߩmҷ/1\`|!3{vÒ]ǿU| ˆtm~c=. |rD]d*ߋ.Ѩ+ webQQޣUٟ鬿13 U&y}167&9;ƨN.[*2قkk.q=NjJlLhکe&F{1!y vť"iwRƾ'o3u;y~tm5SM]5a;O9z7 O]˹\}vܧ$*:V۫ jRnn,ܚMT4?Ӧ=մ"e!gH0UP Jݲ.:-[bǹutϓȈ2M8״c2%EAzl~Mį%iH #d\,1Edj| 0bk9\_).Q6@"_^c5X;IߵȞA}!9VN0`wBJ5#.-j%yWl+wD{ʟV5n ?Ȋz沀m2SgPF8+O/I*)~ZQ%{Gj`[5}'yDy'/n$õ i`n ()rz+a8qDNFܕ?ď]Nfh=4ex ZBL.}py#j> c$Vܽev="Ih2Wi˘ܭEw3)L]2wyr ;" Q7W&hĘ[;Ja2Rsq?UA;"!@M|!K.zv7h{$2#t*CoB~0]ZzR>tt,%&*4v )Gwn5SqHIFJ_tMy!qIy>cs>F9?|,l< L vmڪ5k$*'*`ˑtxTawyȞkd&-NNe({o) tsh% b.Рn^Hb{ CrŒsl\4/9/< ,Զ%$v﹝킃vߟ78McJ) Ϡ7_dSxeWJtfqazErF! //lIӳIo nvWjV9rP|`$XjcV˖sΈ_.hb-f0\k&WԻg[^s*]JCGKLeZJ:ivNw,1*-*D!Ɩ{Pgk;lIQ!$8~:pL2iꣾ Aڭ1f#Tբiy3࣍5(GO(~O~aC`^B1l"m&y<ϥksg^-Ƹz w[HIUЊ,WȆ\ӂKy-BhEN*wAWi7%PPŘQ5iNz -3Qqy%0Ӕ ~?#^&#i 5R]]򞄖L{vN\yO|_3 ,X!+{뙻řO]|R||Iݳ8U<D"U%9]EcƯ*1BЯZB`u:zX;̬ͫ ߼*p + Cnݣw}QסݒaVGC8> endobj 644 0 obj << /Length1 1406 /Length2 5979 /Length3 0 /Length 6938 /Filter /FlateDecode >> stream xڍxTS6ҤW{I B$t^7A)QtA4i_xZ߷~gywڜl&H'z&V" D89Mah8o;9 C"dqDcljh Px1@DBFDRDA 鿁H/@ wSsqEc} yiiIဲ vDzhW" 0)x\hOaa___!GEW]c q~Q=  q0_$08 A0!gh_`ݿDDOD0`G0!\(  4t~h G!1>0{뎀a DP0/¿`Yᬊ (_SyAs\w C8Cp6CyC`0&\ h@$-!!.@?f @O'ЀàQ !HDpр wvka'~}ugQ37w5ULM PSE J @DDD_'7VCG؟GFm HEsz ?c >goy~+*ޑ7;z={1L⿡Z o63#En ne4`~gCn"Q_L_>1e]d:t5?F8(UgoB$`8PѯƊ˜(/Er#= 3uC ~0,,^Wps oe;.j VQ.~='7GWEO1}URXW9,vdp|N9Ո׆;b2JWlҫnԖe1 XqG'Qzd{jM\a?%t&_IyUC:'Tw GӆiR۪-`5鈓W#1Hfˮܽo(% :o=Ʌ3!EݚJbdŦoMu dCgI.J~$*) 4yxMS2y oRE t]*oZR.U%疋T~SU޿[Musrc5<.g:dk.$3/NqF4e#5-ilu;OZ z_C[N؜n@I=%-D/K:8Ir~zalqTӖ<}+c=Ϊn.SB/O&c$@yR/A$t|Wd-Dz< 1h[AVSm0<Ħ}#̳[7SGX=sj٣_65*8R~4- 'kl˓?HTG#̑| ?)6ff7ȏS\^%3nxj|n+=錒@h>Y;%m}nh]ݘ㻐KU=>?dP3^5b">,2y¦Mfz'{|s>o EPdJivbqRhߨ<&̀7$9q40R"811t'0fҎB݉FI`NΚJ\ŋB([y~S%[0TzAwk: (͙i >c#$cȆ]dG[\ GR6ȗ)kkvl$ث a]&ŲۙvX&qDG9*K%>u'9 QSgUTxc!SJE3Yra׮㞈$UX]9Qߪw C=U'ۊGNbxz+DOX^ <׍)&>Ƴ6/ΗeY=>,IZi joׁt7}ICHyNAel YceƆz;ܕ~k~̙oQ(0%)8f1ahT%C.ċDqz6>OWMλB .3:ʊQNrTjQ]1rO4LVM*Kɜ7XRDXED[4[טV nqo\_1Y$a+_^}J'ہyD g^}MoN$ؿ*(=yч3" fpқg 8iz{o2p. M;>[H mER^$dml~Y׬K@-krWyzne6D~ز0gve ٷUgK |ʼz/ycg@;-KJzB3lo2GRYWSa9糗8Bqb*WRkPg ز.3{,O:1M9C;W÷fӋd`}Zyqp:qqִ3/'eIw|;5XM J]h/e<[x#Sf Â.&bmrT$ol1x* rP:K9<yЎF%#p($ m- !ve!5 }٘<:lRoX i<"VfDӣb~rPZ6M聭"P]{ΞL\LevJF'ծ{&GXW^,OnƏg)M<yjX`dHd:# /}>w67|O; ;YY;!\6~uJwc9pO^B讱vU oK(-,< v)si{<,|XG&ˈ8'ywr$e]B僟Mepgڶ1tzd!-&%Ze- rg*쒘R/JXdk7/ɭ>d=J7ZI#y|in))\i==*7?K|AO-0%=x&O!m⮳V!twiO/X!gPVja/.zj" Xp}z7ݓ )ޏ|{\ކYzzD͍$}ZFTW6ZtQށsO*`~EaX.e$P[cKF1gbf0$uU)Pc nq^VRՅ=jY쀹6Wά[%)]-yq-F/YShnLgi~uɆC <ۣ_ ;&є93?ŽƳ::aQ7,PDޜw3$^;zž%]% a|` DV(٠*][ oDAݟExoX9^8 J m5BB _ N7_c!亁c_tCxӱ[c+*7u>5ȏK []o3KGR)^v y/"z.CTߑH84+9@>yr"i^V]^ ehh؆fF7޵;Ɋw).N#gV],ZToLPNCb}#fؾkō6kɛQXS&֔ɤ8wnr??x竿Y87_1܈Sų,MmN}sCUd1sDϪ|@9BPᙖغR-As#[_A_n S,S'%ǩ~پ˙4ZsgPOWju% yκXgjóg|hRv6J~f̞^؉A<Ѻ3U5|1<%_[hyhno;,vdb>Cky>uL-|.6M[/FA 艹n] H.ϊ?t6V3"B0vC"n_6 ߯dYr*NUp6.JU1o>g:.uyoȞr}0Dæ$ԔHniMmsƕMd~XcN|U\&S:L: VOdg謹rt7ӫ]R/#lxHc?'s>ﶰ‹jD4szT7uC[[NFNMEn@ =C=r}N!*[gsi y=:$/`RiѩVaطz,E\}Jg]zΨ\y7??AiW~O2fN]eqĈF|pU[GP>3F`J:X)4m##~ W<^m1/LT; H\gКL-\Xj )O~y=3oT8?/M([I[ß~ XOyTp:#&_.,fv?m 56a D旽nWV(qw%Mt^\['cqlUEw#6H;D4 WWk -{eI { v*r^tD9KGJ+S-:1xjt eWlbt>5Qkq mTIDtI٥'3I˻Q[ҼJЀV_u8 Y#I9~ ൗ5򢎤WAv endstream endobj 645 0 obj << /Type /FontDescriptor /FontName /FRBTTO+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/arrowleft) /FontFile 644 0 R >> endobj 646 0 obj << /Length1 1606 /Length2 5153 /Length3 0 /Length 5958 /Filter /FlateDecode >> stream xڭTg8kt!]D^Ø c{Hޣ$D%!z'zAtE'M9\;?zWyuu46U# wp"2@E500%彍P\(,!`&H*((n#s/ÇIf2FA5JL!W0R^6đwQC1`yܥtq~IL4imA0[ըK|A_P)jv9hjT Ln /Q+g=I(=ycAؘ8N` ;Dp9K弟P/w]"L@->-d{&7VYXl7sx1%SɸbGu Ok;T>eʘ~rƎ:nXPn~Yb{N+/I< *N^-;9zWSu5ŝ>aA6Y '`_ݛUA ^g.l%ߌ4K4l3wFi8<3ba<2汰qiHLth7| f/H|&)}%\<|Hbda';iBY"ILua~FQdHhDݓ'%iu#,QexQ?nW~Γ9<mBwM8ʥ4Ǜo0.4G.vCWkam{:$ѪKl9cwuGTQ~N8N7Gm%ss3erjCg?_ʩsDEsL7)E̋GyׯDo_5:{x+T3дmm2/CAd `)>l;c:(}Lf oݓyBit<X'(Z>KTѺc!;N]ggQ*iwhLIN!O9w7Zf.c!`q)᳞'ldBUYI־W&"g?\^idh is/ J9 tl|T,u$%,n)rfU0uWV49ZQ7Ir3m)Q6'^6auyغ8^ {rme܇d>oP.딓b|oC;aBFe(;Qx h&xwȎ6y&#ڴhI]I[m(|oy 7[29 O n9l[0ѝF jpl3Ώ:0f.0EK{ Å0Rձ]!=I25& 4n|VEh+J9->c(]J.~g'v2+鉩 6b0Ɖ%k8tSR1y}KnAn(5| ^ ْ5';"D V=6<";"!" Fv8TM3^m&*c!U#9Su^C6ѼdӃ՗ ;]0?,0)>|֐qHy#ena ZFX>_Iam1\fymJˈ~CEntk?J颞5={>5}kM1}hwGʵȠ5okci,j˂|Q`6$Q{D;lm{6fS~!&ǿG;^jmSGeŚ M߭ץN}Cy`#_~tT}F<&{l}{Q%:ca(}6'[,_Orv} m;͋ӊp|l{LSjeҰ5ڦ\o@ϩ+*TA{0=ִ$}Ny=`FRuāy` 0\Ns@ܐ+D<ˑ X=J 6R+f|<Ƴ]lGY. ^'$Rs91~u]wr yF.aPMҊNh'37ûJ~o/m6 vn>[$*Ne>zjl-~{ǃx|kGFŵ8r ß -5*a|!h#,?Brý6[;.2܊'> e) -)$ Vx+Ȑpsj?( Rsx)慓X5:!#KɯK"&(3"J?}]Vǰ/l\֟S-ly ݇xVӎcXyFjά,$#7.IONyǂw80m _]} zB=doƣN}n yS7AiLٮ e;_ FXVlܰ``If^$Vc=],TE}|˫ ֟;=(F gY#^lq۝W ʒ ,eet|x#Qg<> axt,9b4V y~WMĭ:+>Zz3T,̇O iy me4-ȈCH4R3:ؿ"3[i {5#^ iKh+ͽ,<73s,r鸸۔(aWd:Qm򎁡6k24'߄091 O*$lN-|af;xfyNR,i YDAQ2j~HIwΉy3ԸY!qN#u*?=%[k4?rARF-SAU,)tF,UqhKYwwtp|C9X㥛R܅=JEj :+V)eϳ%n-Ddfx.Wڷ:Tt#-(D $35R&)5n-BZEqp׽Ń (fG9^1 ?9?ac"󲜩eR?U_v1r1+m,mN?}͍ 9QB4jI~SS:?*%v©%ea5!SPN_O/=Eebxl-9qZBs`pa=8/ [ey-s 4~z^(`!wz]ul50Aw#) ]R$NJ"tڶ*E-V,@cI??%LXn\ZV)Q ˥]LL&HnPgY_|\R ,f@v1#GqX(Sm:6hȟᭇe`V5*@ rl"TMa)|Gя@%[} Bx.!m"$?0.;2"B]Yj]؂gF@entH,q~0>JK܄*|0^=UF$[jUٕ}WLZP/ 1΍) Bb4sUt !ՄIT (Z ,ƾ)1 i\eq[f@L,IۜEY`?эeEξxNRfgؼW{XAF]F Icp F͘iѢ$h}59;j" Tn/Ce|Dv(yڼb꜏*g .$K1|Zs٩A0HTˆAŽh!?v 0Œ~%xJd,ܺX].<C?@c f9V/ϟGɦ G] .|ȩO\֪rwhJI8Lڶč.+4ӄE V\i%7(͖%_A^Q5dX$++^+(F϶86چ3x7[J$/'C$LV=~tp~L^ pҢTӳ* L0?ŵ6)й[' endstream endobj 647 0 obj << /Type /FontDescriptor /FontName /ZWXELK+NimbusMonL-Bold /Flags 4 /FontBBox [-43 -278 681 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle 0 /StemV 101 /XHeight 439 /CharSet (/b/i/l/p/two/z) /FontFile 646 0 R >> endobj 648 0 obj << /Length1 1612 /Length2 18631 /Length3 0 /Length 19474 /Filter /FlateDecode >> stream xڬeTK% n ;;kxc;4>̝u߼?Z2"rǎؑ$UTa67J932-m]d.FNxJJQN Ā&66+<%@din QS֠gO?!c@+hz p,mQE-iyI@h]m,M&@;' -Ҝb ;N@˿ۀ&@\  ddK;Kd7/ 7t0r'_7o?% ldip;0tr1/_.NvɀLmNNabӝUo`nKg'<+ߜ&s[33(vfV8O+ohڿ$Ll<@3xfy{)4w*3 -jBK`o{,; 7?l #lvaab;T`fdSL K;_Em&T-,Mi=v_ά%#-#M_j(E-wx1=l z k9#g;@o,?~/0v&̊_&. _U= t,ڛ|i\58. 1PTWiSfVT?p`ۆ+ xCMNۓAM_zu5/Ţ~3_M4z#wäxt@1IjGC;=?~z躁'όfxJa3zqvZt=Lr5 )<hK:\6RG(@;[r30znamC16sD ﻇs5v/ $&;i%2=wi^u3W&|{' Zc7:~-d},iѕC;\!p^.X.)\gЃMMINIloki47  84PȘ_ &tR_hըamd]j}s!ߪM)M.$'^ w]Ư \-GK%^UO0@>YVt`JH=).eGԒö:I >E4 uh\҂Z >&Jc=IVJz>}j{Ÿgo cU]$o0~ˁB[bBzE5.4~9a$f/39+jԹN M|uyNVW*~dTަo0} ؼ ᘮWaBiLL 8:>HRxМ V!T՘ԉ\5)^cPbKQ ?0*.,MqD3gUGэyRRc14mIZsR70R]tNh(`Krv+-@Mt`DTLi/OhkLx'F NyE4ޒ{Vڝ'\F0hgK70̆#irbs_U>|"Y8{k$ptƽORҭݜO "kI.ԴV@=\WVjvzF: %|.5+ү v;mZ;sO4=OR1l֎f5-QSw4Vo J!|[AyoFXJS0JWȘV8u E-]@gaJ*x nL(!;yeИ^NjdΑ(ۧ׆s0agXM+Gw<5" MpĄm}4i D>pņ-tׁ/[,O -qM&by ~C&'p(1%0N]?14^iYi2̌=hr@*g݈9Sj Jc $9wNnj7:[!Om]"End.Y&ww%/&azIJ9 , N̏LK(C__CTyAo%3:%Q&wůY֥@ъeU4M jWUՖX;]{o"ԥm%bE;_ݫ(ny 8YrPy!h\|gI4PVRSP}2aB(ބ:E)/ m/co> 2E$uk-6(3 My!ֺ;p*#EX+VO39`OpXFoe`;VXթsg4ek'+49P^pZ1^}U&F [cAw|U?KNm3 %!au$`cfNAU5*X#?`iR]!6]^H}-#܇e,LdB͈!(=D bcOaUg L&y,o`'BĈ_@O/K>ffx/vOuy]=Ƨ1=m[KP#C.Pp~>u/GE6&$&'ZRT%P2hmCRuo|UqzMI3 O}CFF3ɦ4J)W!QE!OV$/0*v=>`7$^Nep7(n]Kp<1(d>"ȶ:uŠ(9Fu7:hvr]A P Spj/5 J#={_ T}i S885$QrO>Tyf=}z/)zp?ع^yĒ uEgJq\G `: q*ASϕfƀ #XǧTXAM !c0 h||[`Tp\_DhWjwVO{@Ъ`( cU #3jI@AGԥJ,Я߾Vy[+~X?{nʎQW8R j ANYkG{8`+AôNAeK):YZ'W Hd8v% )UC}B]i7w+H<\Y1gN^.}O-GzPa>OOW1CX[/gk jV_䎺EWBu;?yB>\EtJ _ [&ep6p]>;0.&zl5Q6T`kaSbocDZĤ$/댩Fs,Jý Nȋ="c`!8tˉ0-N8g+#W<F\B& jVdM-4@l *I[3.C[WVLJNI3cHAw /RB>JhKm2`ec~6 *$&z˪_XfB8wꦊ-Qa93-m zHt 9D>@#k'[/k]dIKFA8srR6riz^Ķfi`ˊ9jZz|zɇ NE3J$f- lbۯ?Vp*v1!pV" 8ȃ1چl&r&WOC/!/RU{t g4nLlRGG.GR-p.Iq(v Jy^ /?) c9S⫌,*Ʈ\xt9Rhj4*i: -xE=h&|`S-猕0!~잵1B1g4ܶ[MR sA`(j˟XBWM*io×)Ұ^+lHMYv8M\+ Ct|3plonD׷?="-j7U4s;:b⑐ ާ8JI <^*h V̔"O@amHP0}{-+g~3o^}e^ thr<2 (E[Sma2%SwMq0k]6V~_H hs!qOP*M]2K+3ij*~ g%> Bղ{7S-Ot`Ûo=Dܮ@,*ǭ0Ҵ]oHH/xY C=X\[V{tgFH> ն #όB\]Ya ʵLBz݄WZ&Vrot ͔A@1BԞI6\jf&CC^fPW0/T"ukiݢs'Yؚ5.R/g98ɨ{*|L%)V)ʍ­oM9Z x[ަb6< #wk'E|ZeE ) It[XYB /='}b݌s|yN>nJBE:9 U^6(R7kkxH"IEH[هqG3" tRN \aOO{ 6;fDB|& ,6? =}lY'X ۩ dV,z>/j72DI'ׂ\ުf]1ICǤHCN.2t853.uMp#XlD%܅L+Q d1PP!eQY?Dx̄PIcxpV=JBXѫUsvfP23$}s|7_FsNYYMd;K %#Lcg:eemkC"f,tOX.G&%|9Ԧ׻COh=IM?h> fcAVkFJE0Z3Ҷp լ"nyD(E2zH ':3h˝S',\bw&MYOỤχzՄ{븍բ)F0/[) 7ſ F4!e '`zASՎZMEcڨT3ͤrNJM QaJn5ڰ$(}r׾xI{Ԋ?tiMao9ω0ʾ"i=#u'8}l)kɧKYM&7YX00gjGxK_uJ\]5(g%μ'[f'l)kJ*fum=Z|l z>>jC`\ހ ^P?'G6\˱~&Kcό'XJXcP̆"6$TVͫtGIJʧ5ok(qK0]puŻv,n4KX; 0T [%d4WZx֤|rMβ0~KzAU01O#4+:hMc4%-%47Tqsx^`y|Fa1~%$Z&ߞ[:{BjRp@)t{CT^MOXىz3W9EMYP>$JjQĭz"jד|w (J/y]mھìs3 .r !I;hCm8[F9}MTUV*:6IJ?qV]|;v Ndf=8R-heu4V*k ^YU-wP:0e Qi%=\ƣh,GC 8+g<w \tn_g1 Z}Q0`}WH9-~Nw5צT±:Y}9b(Ҝ8 wLlzrCxb>5byj>S|]#ƈZiۧ~gמq9 #LT0}+z p6‰S'?{ݖN9$CGY~3DSxU'M>T6vZ,+.&cQY6ꆓrJa\$2T@Y{K[AtQ5iow|{3Ǐ ᡫs繫CK"rm|qR:4R)j33"_S@Z/*?')^`do5MJ2pȑ7+)T>\vZw aEBz%ZYL,qqd$Se aV>+P!f#c0EV*5Qo|movN3Q3_2 C[L_v}z5I'@Ew=}0U{|&6{W +my윳_E͹ cy*G zЩ +7V %5 8Fˋ n[P"|@>FѢuOA{ӌ@pnhĉ C{Iq U.YLݺ?W@ܟ27Ό.?F  YxN"ㅜ᠅5QX r:#ȕ~EBmFc̤5NHK>Wa2<{=ʼxxo2Xf,qRkhy%Fn=8}KY9'T^DA(6`f=D״Ûg e7WEI?,#WZSV_[H> mXlHI0Ҽ?7  "f _*}bbθ[(5LQ;W<(>SӶ4t%z/{yfE2̺a󝩕՗_Cq0Fg<(],+5E9|?~KY}v}UA;7%hS=UH=h2.`ϓʅ㐇csjR\6pjB츐UAL;faƏ.)9{ +e躝3(!aJg}+7rIEO,>&'^(XP.'rUҖUMQ=Ak[2iJؤu`A?UL̺BkX9JKxHң]%Y3? CA4x1:exɷJP(Kė֔dGRe/**dxl5!yP+<~ 1InzWṃ޵d|;zK+"%%:꠶:2;F$zWh'O(FCą&/ IrSts!1<7t,c6b,R`fAiwږ(ٯH"h?Z=y.ēcS^d~sŠk:o48 09/J }s6yrlP];vvZ.щJgu}ׯ,9XI1 Y^׫dYSwp7KT2: P0ŬH0D=y .f˞y6 t((4$~7gqOX@7%tҨtvuR "@K9!#ޠc㤤*#JG J߁a!+×aոt\ :R/%S3!k\ҟ5OP[r\]ɐ3"[lҳT]_&r|ղJ̪I!|-CM> R}c~%`K@c[bdB@ \}ptGrKeaNOo|H, 合JBšs& 'gZ$/CyKfHwXƩOcO8-#bn/U Rid/J[Iř)ւyh葰_(J|Q]?8Gevu_i8QO=za"2; q~խ݁"HOnv**@rOJeN7z=:Q&'"pCEVhT\@xAG&oX?7~A,'kUZXΑl#5{eU BqdSָ.}I*3Phq.qf9X`(ʼLɞtmhjYM׭=ˡ k(tLK"3U5wq9k#EL3"MrP"rx~{GUzKI4\<[BxAG^mUuhdՃ*i4#,zD+p\':іkSZ 9+ܱ/VhSdZV+vUQ$RL6%1D)ܑ7IUp6{֡KXIX Ahٵ=#RB4-LDUP>s( CL̬ྡྷH!גz i%h#,?-dTJ4/i,$7*d ͼZ$Q}ᶵF}gICQwm4ÎW"QںbIhrߩx;uHDaڬ8"d(jq/Ax=B(ja%'[m2& vP (W 5JPeٕB%Y J;=a@*oQNGOWZdzLh]i:  In㠌һ 9zoZKOjnռOfgi%$ FREZnK>XőVu~Fn_a}FnrcO 7A7D l/*B^ ڠ>* j/t骶!+o2$_Y\ klm&@TLZh~qŽM_{*Q!r/켥Ws} cm{R^: %zRMUf)9q|tV*at& CL[pR!xvYmIAO6V؏IAUvUz8&3f0e4h=-m5|3-q5YBРtbG.Z,ı5)cBu脧͐o 8Z#WÜX@Ve n=|b[g昬 7$B9z ӉCtqdk9e(Z߻BK ?s;$."ԒTl&w?2w1Px"B5/=m3X ӯ!hEgțtUnW"D/;k1 W>2XECF6%XwjYK6ߤ(z*u>:yJt[ߘxtMXizI.JAmi1λ/|Ѫ:yawQOdmd(qEb5Q\,F{1w2T8 ouS+ G#OUuXX+S -YL yEsHcE S6u7: V7lTLyK|of (Ƚgx Y; |/JdXKȕK͸5p!Yx5Kw "gjn̡ކ ;Ҭ`VؿKſqdM @ޙ FW y]<< W}g9zbHp/Jlo4Ii)o&qeJ}\ |&׿[ʕIew#_ḡ'{b\I`Rp=4Lqۣ !-^ZܰH3=ʅŒyL;;2l"L^}bHdg<̚լNߒ&n'4Z?YNhYzm8UfdXIUKoEt8w``B<\}T򰸥Y3Lٙ$0gg49oLӆTKT>ELJf僒('^9r01$, ,ɫZoӄsTpד-aD@.G l*->x{F9tGoq Tf䔱uncH6,n.ʼnʁOYnɜ 3vY6.ӴdģC-rW ͟fXUuR)fKUJ3@XTJ{Bװ!޻Qa/1Ҩ9=2EPPT<tlkId \07" [RpDe"V 13 T!j#DP0{ U.U@D(L]) QTub}OF3y0mz 7 {57? mַϘרMy^t%7ptH$Jt,HlZ ^vfb)aft_{]#w9sk1YT Ht >e#*`{QwN09MWM./IPq۽0ىG{m>K#v]+^ƖiI!UTgIA0{OÌ9 $ϙyl 7" Wv\rdKpZPm0ZK-Sw_xu _%_,^NJp3cR^ e}k\'55ڧۊ.qȑ616s0t[eG?c-޷c稨?K5<`ia[5 dlBCTEnWG@cqVsi_NoԦAà rtg]#,#ދdO!ǑeX.f 깕Wcؓf>Hڲˀ -}zƔ<ЗU73!Q{m)ᕾ\6cBnB(Q>N*߶1O7_]y=OcUSȱX6`(2qr5wv(.g?BI5/G! ߨfD^5ST̡ <#VKP(:bi]:zܹC%yJI@N4o! /q9Ҽ6hkTKc@` lc?Hz|fXf# YAˣKȔdnǝ+Mcmd;AuYfZM'j,Ed.T=  Uri0@"{[L6OLa/m5a%JkL'3}FmezNꗭ Cdh7d6]$-^yC~5C<;uL[Jxɪ A fgНq;!gt΃u;ZTkPSSiiSWIǍ]ElHkJ!nspcM26$ v9}"Ek4E[yO ĽY: DXյbO+ C2"Si=g{<ڵpS~J,k7a|2 >95[N'$?`mSaKݾ4s6^=ߊx.oo5ELGLw/ݪ`{[p0ZVNLO o0d٩ b endstream endobj 649 0 obj << /Type /FontDescriptor /FontName /QYKIKI+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asciitilde/asterisk/at/b/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 648 0 R >> endobj 650 0 obj << /Length1 1608 /Length2 11202 /Length3 0 /Length 12027 /Filter /FlateDecode >> stream xڭxeTݒ5=wwkơ wwIp}ܹ7fdzsUY-&9H!P;A4JNW#/-W vrBA]%@ dp >89{mm ]FffY {vн읜@WFM U5}yY6@r%bX9X89Z* %gu ruC 0` t;ZػYEn7!gWW+ p;CYդdj~u^#-,*o+̫ ;BP'\ %lz h/,W5¼b՝ /wrC! {+64Nל`G4E ?} ׿0Z:9{,AVh*Nהlw"H";q]rߡeU z@J/o=P< GW)88aCd K50`vmGK=mrOlaWv-<fWאחd(WաZ^ίe'\!) frs6no PW'hοK_+vpkN4@GO_n 7WWE>%s@ %' ۴th-qa/'psiVQA@SZwJǚPi6C_ L;D=)| _ƾot;A&G1g J[|:;ۓ&%Hܮ(gw4n,R?v4% \ "gJ+$K>Nz^7XMKY(E"r ZgȂS4%֤*gmINh.H /L \NE~[ _>, c?+]l1\mCp ?SE5Ո6;v9) ։כˍN-#m6a3p ߾F9Ŵ+!UʯRHːIL!sZI$3 G*ɺ9[H =n{$ AHA܈?޷Rw#}e^#!3ͷش Xk<3Q%;wnUN3sXOފpɑ9J9r VO!|skgQ*2ٵk9eNݤ/_qrGC=wg+RkRAB緜d&v>u顯׸eM gK-)3C + Z J7pòK[<䀕D%tn`|2ܛi?mjwDA,o_SSe=w0No,NC+?"@f'5oJ!A i##²q1x/dgm{U7G+5Q(6uD_Sl&#oE6^11>djf1UգƊF ?8+U!WNbL6h"K]M.O"%N4AkRɧRϤbKLΰ[w<{hRė{#۔<)>fT)p?FMSjܫ*_~be MW"3Do'?At+]Ƿk E:_1C}O   <`yǫizDq' ͼW=9/3ڳjsXwV[u[Ry/Tz=ah2oC@Njf5L:M~-kԏσGSN}2 ##?V * R>B;IB?gFZ&HRaB=RtbMMx [X$#&-C X#B|ѵ ike=0kY`hDPk%GoPc }$Dz]?d|T*PS^y8:jOb/Sҁ<36{Jb4^{p3XFK3()rUOe %u*T\'4=.+\5Stuut<鳪0+` Qީ>jVnvi0_ '},7 7ȇ8`dRb\QhxBҿdnP$ hj "4cd]-Ixq{НQ h3Q1iUKKpxf@fܹ@}k5y݈|Y'ʳd31-~L x'-Ye^lIlp=!z2V.a ؛D5ǫWo$/y> JfP 3R 1H+(^ D7_pB1>D.02]9d汼 xT9$cY|å|*l+ZEBړʘiN'yf%q-?c5aPu)DIwPэF,5L% O}W:ݛdzfd f[h2x%h+!JG/ 1YZo}vs7n>.8N=–3ƭudS[\:ٳ0k"N#g~oSh5*&}blKCYnvw 搂f T; _al|j(|,z~l=F ݼ\T-NwcŽ_Nn*ĺ).,5e`/f M*2i7a񛬣&@<^3c9F/%ݽ:䍸 XV50M_p"L$T8]?(Hў Θ/3|j+|C8frHnVKjy#zǂ 5WB+7GwXLg4^[Tq!=iзrـlOb 'F(X!AoߢY3yİy-dOT9?m-NajXBQH7Yzs _ĿSf1(!I-Fy輳g3vp+ )ҶRu<у}ӿ=!ڌuwpb-oWnɎgb|hw5dK5س{_Be:siYA'sWjSTC-!#_/KRP'T`Jl@y6 1H \Qed\۫єjN4WyRWs*3F"I,ڳ< ,"k]M ]汝<1L:5Iq^a}1+3})}h, )`W#AQ D ;ŰQ:<ASvs&yD|[ .a4GCO"7+ %撅Eki6)Dl659*ε3G虻xneźpJij6 0S_ArD>!JMPd&V~sK|Qb WdoD Ugz5O܏{^iߩ]KynӞ9'`jQig9^D&4ɸUGO7c݆>FOCjWܰF pߴ[KFj`U-9_61=>"H +xkhτ2CЙ&p^`%#lܱH(Ciy|G1] w-"U^VBj[Ofj r׆(z&~n6H1k:ߧE14X^͛\t8}tl5ENT~|)uc|J:uڅ) =g04o\! 3@Ȱn"׉j f38H`,}ϥs< ; izP_`gTuM]sW r #Dܸh}(cK?=UZ/5ٔZ6Nx/|%v=5z,7™6 ͚IkbS>] ͆_ەԆb4J֊8s߳vY^w6}OX.&6xI^UʞKi;7P˄ (- l>_˖jHT/DtCUKpB!zo7,Gs-S܄>u\ӗ~+gN'-<^f|ÇЎ#x7bүD8Ih'('LxnƤV`o 1W1Ycɻ- BR+QYW~ 1p)|"뜈,8v2%TŐQ+Kw޿qNA7ب|8ِNsN0}43E2MS[twd+i,v07őCH8׎)FR&KϪ"3^V8a <<+2,MM~ހحv3~v,t]Xwr)O@~PXszGXֹ8l}1.}[O_w5sMcX9m }ţ[P3FsrȺc*5|bYv/=?bzZb˵+8oVJSG\SC<"pqgҽ{S$B\W_;8(y*PpGccN%ϟk==k+Y;E)T?;ʄO)ɦI㳡h4sGK֍צ|>/՞r{ag_{Froqg x8o"Q4P g4]>12Oc0mNNbAi&X3O߳WOg% qjį_)hZ2 mRr͓|gzGCD38`P*nI5ej\j C ;;Okpl^8oC;# ~3WE| 7fcЙ{oz5-Pu|>3/y 5@׀ƟexFTw7R2M/U&V<5GB׏H12VI /*͒> .QRt ӖRK`p|WfW]{X5Vjs]?Н /V w9eKwOt,E[嗑V !1{xkUd7{3Uh+8_լ|;{JwÉ}u}yN6oC*}VJ+)Hg5 bأH=&/4+,[Dkl *L,3aJmA&r2r>0%7 ߐv(1^S wh=<tgWmV1Qj2reV mooG|0Ѧ|#[~WSFaV)`c7Ȇ%V]u#CyH{x>X*=u -fāle+F;kwJBcI 6:fT?]>mUag9(k#QmzȌQ `z}ѣ^ h'!f! Chз$#Hm[q_ޣꚉ[}tB{C7׾L"B5N45E;il:_u$f[TӪ(ej j|kw4L|xd[UR4!&2jpqAiR"[FuS+p亏.7*؏^&{ `l0u6|I/y՘ Ԋ&r0Pc7e'>kM}|pm5-1Y[nJ嶡!%|WSr=I9*S?3@tu$7ԷTܔVT-;Jzk0gTUy>xՆ*-Twt@btQflWٗץ"7!)z"f)bOQɠi$TR>Y I,:s–{emug4GtYLuхHyxwpAN,1oa{m}-0 {8̟]_'-"P:?HrΟWC!LQOhzNEAI.󈡙I{޵y*S]SX'n'ɴ̧]ƽ/ u")ˆVrG 3 \HkwBNJKcE \tٜqR=U [rN>7sfb-nb}i21nIyGƖQB/x`=BTD@W#tf៓Br)KyNDg1i~0`Ȁ܋rw^vwe,* M S;H~m77 i lϠ ZAZt&F#g+|3r{Y$JJ LyaTI:]ҋD$/PqЇ+nź[^Q1j)bCRϝ@H&Cs ?q 2cD^]:̃PR?z^?u34ۊ:"~Q0f!Jcl\&*j[L5_3D:ULyXT^7TJ;1_&t?Ӈ]9-#NiY|޶x$j̣Nyz/J7wo1dŒ)崗oj /L % MIxcY*J>Rw'cӧgj-d4r݀&מ}ft# k (U@AHLMl)gLV1dW)#{'k"%1Gbjه:~?EDR`DZR)Ruƥ4t հOd#M<6~m:3;\&b\ʢѧUH1U:,Ed&/M5jӍ>C@1˨]DwUwhO)|; 'OO2ɭ뵒%]m$/2DY|8Ɵ?ۓe7@STŴ>'m2 /Rj;^)f@Ss}L:ڴ`t(f%|h3z3o(]aDNpF$oEoyyhD+G2ߪ{KYUVN+]z =_'RHBVZ!q{cYGxf2 Fί -vTP^~$FJqISέI,{󦶊Cj$'8q͏Q){Kf5l5\g* p-S;;633_17,tt/,ܛDa/n)\i!;z Io^bG:emp6;yky{&J{Aw0ru=N=u\聈RUI,f,Y{q|b[CݲXs\g T7)BϰJ Sf0LmQ"v}뻵D hY2@yȫa#5n$O֬^t=qO{e{mx-8{"8(rgaf֮Ϙ?H!wWz)"93]>>~vU<+./HEJ)}4ea #ĵB9I1?켩]*.rcw+*[u?nfAJ|Hh` Sa92J~zxvyU6ͶbÁ5,G^(a.ɟѽN\9NQuV&j>y6jzk})=Ld֊'r|%[SEl,n~/,s>uO4+YJ_Df¸#AWjԦ"yEF"5ELLgf^S2E6ݔнdK Q%kTbLJQ3heP sԆ Kt"VVT Y`pCr 'O湇m7J7褭bQMݍD8Mdk))*';gT&H=\FDZ"Hw]Xm4l966(bܺx[%ܳ5r}?瘦4 ҜxYؠ>$ xN+>8xMfT2ÙQ`RY Ū?(z3 VtgKfQ83$a7e2-ѱP]NF>6:].nhg?x<;@pZ%(ozN׃? [K\EcΑp vX"}BP(+?Db#*uR3i0z0Ԫb=dufTqTg94D>oS=f>> (sي:̯HBA(+sPԢcpvr"8Uas! s}TĂJ*Eмƚ#7Q 7_F)k6,/iȱ;sm͢ endstream endobj 651 0 obj << /Type /FontDescriptor /FontName /PYRIYB+NimbusSanL-Bold /Flags 4 /FontBBox [-173 -307 1003 949] /Ascent 722 /CapHeight 722 /Descent -217 /ItalicAngle 0 /StemV 141 /XHeight 532 /CharSet (/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/W/Y/Z/a/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/question/r/s/seven/six/slash/t/three/two/u/underscore/v/w/y/z/zero) /FontFile 650 0 R >> endobj 652 0 obj << /Length1 1630 /Length2 19782 /Length3 0 /Length 20631 /Filter /FlateDecode >> stream xڬct&vVTlv6Vm۶mv*T޽q?㙺&yϱ(HTM$]x VvƮ*v r *fzv8 Q@ ff`a0sssQD=V.juM::0Hg+ {73[G;3{ׁffK3@TQI[ZA@-47\mLrV&ff4s ֜b ;Ύf&V!_8W4kQݽV]c3g\Y| 2 ɺ e)N'So^XؼlIZ玵*NV̾A-$5`*ą?ր'H!.%T?Q/TF-}!Ba !{u(EJ[XN3Hu$`zKljC W0Tfbh<{=쁈Ks'Ͳ0MRW 岰 l):Hu#ߣNuVgwfEr$fٰ( R'C="mbGd&@ Y0ٞj6xtp7>DہɽlCi%Wow8FQR8e`|xbk/:6e8nϹAeo[یjB(Wxy>e+O9QhFHUiI5հۡx48k h:YӟcVNR6iCjTŨU"Z^&TJ V@5KSmWÁ}*EfC5]"pߙykG\&8D5<.z|=;mR'`t ;͹VY>[Bx:ŠP Yx3=;hKV9;Yh%BT̟q선dW|c>ߚC@u~߷2N4n'x6+&:YNyq+ٳE8 ;43C_)W!-D j | w.H\;Q" VG/wz>,Z[#'k |obuUCmMbpERϝ9!>wPIZ,;$(oZ uG5oL(Z1nWsfQ|<~hxWZ`hb+ʝC2}%c i`шT:Ƒ {h ?(t΢$-wͬ.OMfikIa˔' _̺LuB^4eP{-~轚ߝVgxzn/h5'\uLEySxx0_)dB u:__JMߥmPs)hWbSI6OL_ǘ"SXni T}^hLCS4 n1q?i3TmB6#FIW }jݦ n`5J̣o.XsyfU 6ky>2@%Dy0lB•Nu:u)ZӭE*Z|浖5'bT'τ#(Evxegڣ&̓eY\fV"* 0d;`9*'9gmc6X+0 n%O-qH0?e!˞♤#6.f vK&䃥Man3ƴYTWF;(Av$o17P'qbneMMHdsk Nإ#ȾH^06yEգs:K)4˺e΁#E#"HTeޤc3s=f 98.qgSjRHK  8J/OEt2ȸAiYq!Rb^@h !] ňʹvEDh׫Leѳ-AV3kZBKq-)ar@zw%y`y'AD%ÒXTo =@}H,.Jtjgv٤'2|y6fxs~>zurN5 30?5#jSͶ`+|e+],r ד $gAo³t\5p(X,"\e>-O?8 J0,(u.cxHW?CO?=c~0 HX+%~ߧ!]jPlKCULk{#,Of}%oqһ *RoQ0}i`+G=ĤX1Tq(]4%a.bR2l6$`7g'NTSET0P>o[@{-WPt@n5%p.^Ly; h{>3D1e3*ׂ5T޸cA١ D/yyKwX?!NF/)E9cm|Y$i AUhGk68<86K_@5y^(էSxމxrE\0t"nϟF84=r&߂%(.r?p*|a:4:z;()w]:BO}o+/4~:I @s [H= jf bQa/`%-xձZIs)uyAg8k_>.OEYj6dҿkUǧ2=ks5"GV;':i{AyJHWË<eiU]"`tڔ'F[鬮B&#pIH}&faÜEg"3זd/_*=4{09ilttLaeL@(DFQi/NvY[ (f't):`|z3w%?mk_4q~-y)RlיLa%2WFa0v44rz@2Q! Yr܏_-Jf> }X}䮪Y8&]P,ν(?ĀaE1uvlvR &tt&R˂Y{G4B7lBӚ9*9B`u?6ft+h9_|L! e"ٺȧtJGs|>%vpxscrFR͢0^HfK$WA2~ּyke{C3ɋܚR<;2d4J K HYskFpw(͛`ZmhjJ[W#=W]\ʪ -ŵxo̠nt^}QVzDU+r36%; '^|'ռ%)Cò~rv&冨yf_n ٵ={+n(ku`/΋P7f[iP{J c@Ya).ϰS:.0x2||l[o /SA*~Q*|m S!2=u؄mWZTfCz1z cUI~)]V;5LN9J rf~{4nzhpu'\V<">j$ԡxf;m-qf1uDb6\r'ҖYJG͟dd4E1C{e,Md!^ƶpeE,ߧ>?XD6%#U' SwYNdVMW}-32B҉܆V^sL>u|`Kgfv5dI uCvx}UrA+b$JτO < LY+Ew<1VSz>~P?\\}B<%Ao /?ycUv6P#%|HI0k%Z/ipbjAvCEil֪^y0X){闷آa:~I/R8bV؀br;zZit37jD̶ں|y{ZP|et56uJ\^L c[n[Fy[j#=.3 p[ON?R%Lmc|BӯwE-jNެ0!8FIf aWNiBOCXu'+!O/_KWY~tLAaI2&Z\ TX$LS]EeN]TւBDW ٱJq #wᕕ:O-S匟?uq ,Ss@i5KwMaxf2eS?WmŚ[85phrpR z̓io͘] ;)`5~$c,I5/_Nsb# Mn]ζFۦqAZw jR!1{[|*6cE6n-Y8V憿#[Yr] x۞Dck8c߫"=0T p$R<9y8KnLNڊ&Ke]7jE02Gcz$NZ/ +^HʹD%KސCf2BEmb^\sJ IߦrvBF#w=BZ";Y9NLt잞m• k. ܹ]nQ':I\G=U ?Y7d fs;C%Yn ԬHHtqzb5-9i܃SNN/nnQjOWjcz}" kgEgHGS%!a L=Iyw"~b*zZHȼ<[",㍢K,5I%08VئUʆ=_ae1(|O1W.(XȈE<5ƩuA!~(;ڴ8-F-{Jl.pZsM+sIUXmuR2MTQ к}|=ɍ=INj,#i`Tk)4ȬKP\ ,U@|i+[pYY{*KQ5.<KȸKE=1jvscmGP$W0í{3:vIMK8woҧe㤨Þf-%SﯤEJ2И ؈=LDkج&wGL(x^3`pSSAx2PcI'l ˆ0`%#УO.11w̌1"fuQ񑘣]z60<~P*L ُ1Zh4QgዛΪ\M0x}R:aځZ4UYjZAh&v/<}x Hh×4yS։dg<[M)}&H6*6J>ַk69%%2&~*SuUf㩍xSJdGݺؗ*!TV$ʒp8aTB'Y7AQ /f#ӭ/y5ΌtcɤgV{t?o|Жrs#)lo%zj0d2"6­B40Fl~H2N(Jl:t+@n^FnL^S1wixTl||9slaH)hQ͆5/]}yII(:j.h Exu/c4e1TyNdH!r~'(9ݲC5V4 kN![*@pےUEajS7n5 E4Ӑkv8P &.*4WOL] EFtͨK49^P b/ cmеe.#qA"k +l`7H-/J`ڣ2khDP }nU6u իX&B%x 1r{a wxΰO=>}vv 0@1-4PuVTEj]Ц\#tA|Wi /׷3^MNllr8\V8"vPhK@Y(ywy١[uqeh禛q\u- "3wi'`$ZW7vt<'uk|&}6O-jJ >Xם#RXl},)^ق_LS ߯X`̓Ⱥ4 Uk:Ny QrͭPs| ׼L3'v":/I-M`=h:a/aލ4#@NO]1"ĬbCD3hV R2meqK(iIe^~8 G3`!> ^Z^/=#N^i0fYaօN~;rF>^<~M%OmW鍂yS/Q[S` %MMj8Q,gF:6dS1eySCvʲJO:8);iL_yΠivp%\~boedu%]O I)9֨9_}L.S&S'ut`$fUdCVf)m7(Z ::]3=V,*)OHDv4c`#QWʹZ3լ/=`L+Gd˙v:.Gɉ>S8JsU'vN:JFLb%.f7Ih-P$)-LGCْb[+|g *Fߓțz8G *lZz>ıue(թ/7=ДI*" [ZPut8LĪa# - љ T Fy(Q5y2<>ѻݵ‘Go;D+UBMVLܒJ8ZJz؉:j):ƥGGW4qЮ IR m7U퐊D}ZR,q:x d0LNb~Ωf$`}I]._SL`tЙiזY"I^uV x0gfʵ rmZM]v$(iޜ@&n-s5 F>]J? 0`eEގ1+桦E 1-݌UV0{›_a{8CgV`0sH(ƶDEx&{mJnX1zxY6>DP\v7 3TN 1vpvp3_i MߔӦh) -WW>MCp[7mA0 AJgwdS!L-֥2lGAJBoKaIL=ipËBՃRTŁ^ξh!"X66^r8M."ko&J V͔kJ~4IVvUu$2 EgT1v I1_P[s~BrW l#Upҳ(*Ưu'?UN-ŬQԅD毮35.^^bF@( 6%XMU;筎,D *6iȇ ʕNPPpTiak\\ fUm#˻,*aF/FBb Meگ"vX̫вi/樺<]dvʢSY>:hNֱhՎeW;؟X#75B\ Цg^tklW܃ X7 8nf_ݲI1dsU2&pܽKzt0oƗ5nn}'ƺGw Z.fUXw<ݣYRҖP[iո}%M˔ɁPNܫTJQx;CxY>;?KÛe 2z&͍Z0\ކ b< ZFeP2@r"?،  f vz!yidR KS&Boԍزz`z dڰgM͸1m"mA' GƐ}U$<g 'K̅F]Tm8ޓP-}h}ԭ(O˔.\d Ky=ȓgU.[6%ԭY-?PUt~6/ij'{ytlP>¨FWɲ^g=fk.N){9") QD2kYf@.%ҷpB%^W;Bvw k!;%U;>~SqBzO4('4͜A0ҍD%$qcFS9߄ks=`V~W:?p4K^4uoLs0HsC ~$6B룖&Lu rc/'.t>+uPG1#5(ķAyq粦'jc!@l]K$~_#~'msM*_+($Hp!0CP6J2] ޣRL_q&Ӷ ~vR$v"m3 #sv?M637 E"ߎLx;2UPFcu=xL,kTJP ]}i;?9),!^K␓M,Ïp,' W 4Z'JXYMwR&fq>f(N!K}y0.?q}a֚I)y݂@rOQVO,+ 3j)?"Տ`Xo9T ;YkjW9Z?Ө[)(3d*o ZZ)( g7$\J'`;?|}Q1g'Fg)g+0rj/zjjSA@XI1Td"3vڝ,#!꫶,ʱj -M _+|Dwdx|l}x RA`M#HQ4,is:Rv  Ye*m\a B3 | tOPÓ6TWDUeAKQT=6^4MٖR"W  ?,α7Q1Ak \sǃ 6>3XlhVINê^>xy]L'0@BW=㏗MYs(uqW]q.E ]fuNrPE|yxv+vC!s-J"#"] f5W;vg UJ$*ev١0ȝ\MVF uصFe$@GR OÒȢ{\oYO*'g2i~O캗a@aa zY7Õ4ӳiy}qܢloaOZ0̕1,UV#fblPe+>7pHʭZZZѸdGs#w78sL[A@Gh]kgKJOWĞ5>MP+{ X<{{V}e?^@Ws yQoO6q, qz%|9BC-s@^ 2[Y?NL~hݛ([r7`bVR* 8}b+@*>(fzi:˚͒ƿ5G9+&L=}k fuw9`&9qf<{d,Wp%PL,25oF ̮G50 7N>D".6-m 6B<~1+=Ox:uג[FNta+QKWC9i!p'߮P(M4z/><m@%aҦ<ޣ+gK=3wDGn[5eս !Q VsKp/=>[@q<'xSbJ!sі ukz "F%WUvBW\hĘMOfw8HϝKmrtɅwZ9x+)9Up%:6[ 3q³Kr%c}#6+[/T8љ^:*_OSEd}#+U8Я:F]B?REB)7 rzcS)Hao]sFu$Rtf"U:Ժj}Rஂ^^y޺َnYK|Q<8k .֝UvZG)t6z'(LV.d)(o &l.;4&mCIsu[[Ь&kͨ|RCJK&{vf 9`YEfpM:]=(I7Ysl;B !ŇsE FsSp%wc~c;VЯI wq<3@L}_t^KMl4`Lp n< +W=rЛE[Yn2 OmIGo'ܙ9Pש'B?T׹W qكa/|\nt"J󩒣@w#݇/D5uiMޞ{+^6WLEEgo Sx؋r"cl 繴,L.$%f)G*>׽!dDQcmVDZZn- Dk9ȠP' -o)٪qDo!Yvu_CvÙӚ7R';8큌S d|ZZԫG2)ėM=>THIENݭaTaʹ6a?嚽csYIF ޠ/:x+m*%'j$]R̭sCpR1lV;]\|YHp}XW]Ag/b $qmPJr?xN"T9WHmSӇG^OBo\遍4W ȋ/A\1ZAmAVGIOzV nxɆy윈)c1kl~_q,Tov)0q_~`zV`肄Dt8nya7lG'DM(_u[-Fe9Tf1-^,SP6mj}6 1(?q=bz ›2{A5(pT >zH<*@:pV@pU) ݎ:4 G]);JP6ChR^X.HaiX،2:~'QnZ18*Y$\ !%s\V@GwIflӶi|~)fI/j<'T`7]uB Fz4ט8g :z }w^)JYKLH˟e2V1FOۼJH;AO#?ZRΫ)TL^"-3/uaΩ^ %=aV;ϡ7@cإVY$=Np_f>GopascB*Q X~g#kI^}~p7 56>3J+4^̿͜pl؅ b )<9Mx3A"䣈y0S֜XJmK@DGנ EHkC hnnUh= 5avlоd- >H#\5w!h&Ґ=}s͡ >`7)c7lAtb)zsHrK6j&gg}Q1G\5^Yh݅>?U1h7PUݑ s]ŀ@uWCJ=#ݽ)S*lZy+U6t:"cTNb/c!ÙnɣXXk{[BiK-ᅡ9 g<4M7Fvq(ƸJ`V0?@YԫJ۲|obZ~sJaQ_* `[L6! F,\.Wz2&u58l^#5nv.#eaVHg`VT ;(tRFu g FW҃\`7P: Jf;=X{Px1զ};&]"PFttw7PӜ7ݚ;T#\:hlGO3Nh2!;0,~3”$0 =1%B"}VœuQ<Ұy.r'w8MHpLd4\OO9D9$_,4i]Zˢ !ub^ ުQXo+1'g&%QhHPD80_UǶ~RLNT`>{w"6t͈Wqk~౐{Dlj>U)מk ff=$D8nfR%01"S3B]ZL'$?٤;S2M-"1vvGFl" F'YFHht|Fny1ObjݦFKX.^׳R+<Ib5UR_DJS;Tڜ=z'kYjWFa&:bK$X&O 1qv{%ż`$XrWwdF7*-rY24]<6ppWO(X|`ʤФ{Lw|iu$VxȞrr4m ~z/<șnWkZQtWrXLo^x$ _kɕ`jObG8IJ* OF va\&w*W5a?:elu/5ahS{&bn#QU @I4P )* \|^Wkc ۠(Э5+[%OJ ^U!=ssQ- lF8p`?}:TQi&Łڞ* Bʙ. [?_Y#Mx*GCP·]{>5>QWp6/Ze(/i9y9@C- h^{j0Jo2qՄU57U?sE~k}PxG*!u)OTU激P- J}{:e=vV^6bve9cH\#41'fDuQhXFwZj1ON[;VN< %7 M8X?43nސNevdA-=G{ÚpasFΝњ5I-1Eier:m <ڮl@'s.'2U4v'I@rN&VC;{4 ]Z^;$L Wu^{0Jwj.{k`CaqơzlEW|H&&Pv\k-(—ЌىzA;v(@Ednůf')o4cDv S 1J7xeL~UrcrD+,O:X9Lvl2vPڹטO]KDŽ͌c"V0mbS>ym/K7ӵtfzGW7⓷nÜCxf3czqiMsX)vSHOKlE8@fyI}"@W@Q5J˘.#P랊fx c3q8|?=sLtC!b{g$h^;R9j *|Bߦ>WW# cHL6Tb{BN4h,B.^4yPSdG&'7uyw1)CRw"*0࿑u?m;rݴ*g hiG姫%#іAvcQSUCW9> endobj 654 0 obj << /Length1 1647 /Length2 9775 /Length3 0 /Length 10623 /Filter /FlateDecode >> stream xڭveTڒ5Npw4FF-8'=X {͛o̼ݫO]UgשtTjl3  eb\!*A%6u<I9M )(Z.AAAt:uXXXi0ytY?\v{ LPk dHɫeU@0 53;9@ d;'9lӚ3334=́ VrX9w@`s;?<-!yƞ Pgs'UuBMr;ab򧥿ggj ;@w\f@ W. ?+`8L,4n}[v!yW 3Β999g^v `@.0=aj@Kt9%2O-W#qS1 yјϻlL 5]r+w ճBl\A2 wjn 4{Z`  |}Ldn l=U쮳e '68닙ڧBuZd% #^0Ú%(]P|1YX^F.W'&1ZVL[l *HcNOg+֥uE^~c1zze3~OTV!]/s:b?]]RF++*yn%z(lAa,մy`-+FUqXX ȕ exS(c`u A9"<\+Z}\ ?f֓<_eݟOZn zֳґ0C_&\gx+M!3=쫼ExzK 5bR52>`j /\$[RbBlK2Tx17R\5eҍ~XahU8JPW ǺZK +wc V($Rc0P4e0TebD smG/ܐ~LY 08g摆/Q4T[^y9L;(GQ@5l˽B_t (dWpcde!"DV>8(NM_Ώ h;ISap_mkwl=%UpQ.CxM1y=0#PLbI|U3*.",>ς/QMBc$QyKkȶ8!I߾RvH 7U|^J;|{"|6H A}5kIA6@euho܂31 zly#3 ;+ǭ[a}}TLmu"W[men<VoEOGU tΒVq`=@7O` oUKeU{/2/):1};s`E9};ӨꎋH̀ ] ۍ[U^o,Imn^ݜN2^=+9ݒ:W Hh3`T\+uݠ+4;iFb2W >խ*XgBƭE:ۖPӁ%>)FGaз^b-uL>ۮgap>![ﶭ=sxҀ]e]]gha׃xJ'<5ǻ5 DȱzshĉȪ(LL-f*qP bEnI/E $rLו;b m1">V-NYn54FƫhXb{ZF外'q4_x^\CJ{e𫅑!=;|՟7ϾW1M `e)=وَ3$o:Ϡh֢WM\UYƶp_Q p]v7k/I&26|6:ްm&lÊ{RELJ#+ڢT%;)nԭq/[v3._Ms/q5$jݺ[XbGl4+`)e=GdJNw͸G?1]r1JS-Ne*B ^kִb>N4i7:̂8BT %l7Rt`k}"tI7Z7 _D )[r7^&UiRjL]}@uT>OmqrI`TNiYt{m$ A;ELϱ/Zm,qH{MCE{{p2TE|S1&2 0Id}F GrTg#=٪La)M}9wBf}1Vt!G 5kݦ/qÔ/YRH9Tb X؜%gψ>@Xy;֢(jJ"]GHlV\##Ðl|8ri=D a08 ͥ"~} uUX W-iIrw*N a+!)TщGF>7 OZZR]b86aEc"v|dwWŸY:)ьfc9 8 >+"-|ɑt!)AGl!ŪUT1ql%B12_OafV6ƍ:ٟ%IzʙrT>c|I{{t@qxL57Ñ Cٔ~* /YL{Nt"YI2ödrտ_#q9 wTr4{EQB|KB<@=*i(cr*|TH 'O%FӗV25.P[/̧ç}uw~AQзHWI@z.8 PPyὗʫ7yyN}Ň>L48uZɸpM*?0]ܤk~j3v7a[?V""ڈIm%A\;b3/D6o?n9WlthH[?c6z0\:u**L]rlm0!,,Qj[!b3:Zf8RQ#llĢ.z ob?D搲1/MyJ@NTS0굦7zG}78#v)st[U57VTX[1yXKՎ֩vP'ù+[[N - e4T wFR³-undlYHdL0O?7ʆ0#RʼUm`{U㊸J7(]Vb pFO`$b#F]oԄQJ 䛊uWGTeJȀ!е|NV_cc-̅hEP8vUnp]?䎎_]o02}ڹ1 P!C{Zre$] 1Q&h.t Vz07F?@Ws]ͧ;br?U,g i cpGVENYNiE2D-Py!K.c}4rW ROT7\:RϵJHpr&c/\\PAJ:/œH !a9yP_?u[Tw+N*-r1$yMP|=? .Nl'ϵ"Qo u(RpnN ZEݐD@(F;z(?oGVO0<>d֩Nfcp!,46m>ŞoZ›Miߥd=$_O m8RZ"@Hgp qK[y=lFԄ3N/7;xxXTv2+e#B<}kڭ/̝&;A(}.|PmpN&>9Yeq` F;Vlo[V>ڧئ4I9o.0x xav 08,찋'+ZH.ʨ?8PJmb޺܋sKÁ \ӎ_&uZCS3^'K{H!scy'-zD1 _}\G}FWy+7-5@;8Anyk);3 }LDg75OG5/>o",w3vEoqtr_":a2J;` #Yb0 ^GXjmr/z#3X,4>K!㗋m]_&lf w7S*=A(Iz@AM|Ъ창9 DPR0{B} oP |g{,&`6æx+!6SBGAOrΈFQ̹tb3g֔)卅%4Cj-d$kV$sAˇH[1=|ñ ƌ1nHx q(c+IH^LQ 3ge)m_NopM7OckzN =j.Wɜh7ud;u] >mTM ^:eq6x˧P$ z9?ٮ@,xK!sfk\6҈.,Rqtly{QqIҪPeQnDԄ6{?ov8d[0 eOϖgg_g% 4muLb*sd A^>hqg27 |ѡL}fhǏw`h\'hO72#sDJ]mN(}lL֥[ko=C\)BNNs8iT:$>gYլ9Q@{?hƔ ܮ '`Vί2.yx,HeQH*mȝ%1Gmoh6a)m~Z:>"xk>&w!shIKJ)6R&1ݧt{4__fx#p֟S{:ye-A)l%Dmu4uh1fJ&w]#N.F70/)}8&Ӕaivn[0. 'EƊ@<1ˁb9X{&͸LXzvZL䏈[7 KTl2.%OZJ:d<&DsFY {އy;dwoS3.~s+Yk 0+5}Y]]Jӭ__/CsLbݔ+ZdBoZv>^(ݣi k2ٱ[7,2C  b7;k\p68YJ5K$B X4K֜/KJmlG 䘫Em2FԫНPȁ5s]4Oe/wKVD %!{, 􎩋|r*2 ujDD]z+:P?<﷨Zi{%Z?)w>t+< @#+ 50@ُJi(:-o8/L Fpt?2kJ.7-#Y3ʖ*/<'jx-.tNuSzku`? QNJf4X5g!ۯ.W@G<.GlAݿYKbp4'áTn?}jk^..%nV=G˗#jjs4)vBڌoZ5ɽKCeI%FT-/NA_2t_ pݫ@a4S}+,;$;dRe]?_%reVWKR%BA{a-kDZ{XB|O㜠1DJ :QzbNF'5xRD-Z I񂿉a09l>$ $+f2btwǹ[ qoi(1>P@ !損EDpa;ТveJ)6$kQGBeiD#^9Dm-8Gm =&A„L\ OW*.xE2Y׶CGShMuo>Y,I80߰EDsm.ef$ Fq>b9HliJiL!&vB^yT1f;>UDŽ$+ D%+!fdl ڝǯR $ޮ; D`IB0r a{QL۾4]9o(-۔fU<>zHpO zwvƃDRYfڎglb)J#C͔z*þH -R8S3v?RPTw@5>_0m+%UC[}oABMߪ8tNjęcA$Ti]nY%Ey|[0E,zh'iӦP_?|5&pP= 𪢞 |`?dž?{GKo-V^m,ҥE .t澴'$s/> ڥJ(Qq$?#n5棱Ւ=UtEA.4B7+Aq@-^Eԇ{X` C n>5Ct)PFJeAXށjV*;AN?eeGBkɁKJ|#'gvୀc(ʾ=ֶy_Jwbk $47ZkJ~M;&rzQ Vݵ7oySXTmM>|Kh0ֈ7T "VH.abU.xZ M-Qypa.*ƣpJj_v6 !s>Lk(޷ڍvZ z% 9=mF9qbN9ϲc_}zKu ƆL[<؃f:ߨ =Ew2Ii6J`y :hxIOuFudX,W2إ8B"c~X E'鳏{{.XxC^ H5m|\s4X7f#7nfhȫV.hTz؀;,rE+Y ̀Юjc@yg;[oͪ\KgcA+j endstream endobj 655 0 obj << /Type /FontDescriptor /FontName /AMYDOG+NimbusRomNo9L-ReguItal /Flags 4 /FontBBox [-169 -270 1010 924] /Ascent 669 /CapHeight 669 /Descent -193 /ItalicAngle -15 /StemV 78 /XHeight 441 /CharSet (/a/b/c/comma/d/e/f/h/i/l/m/n/o/one/p/percent/r/s/semicolon/t/u/v/w/y/zero) /FontFile 654 0 R >> endobj 634 0 obj << /Type /Encoding /Differences [2/fi/fl 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft 93/bracketright/asciicircum/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 149/bullet 169/copyright] >> endobj 230 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BITXNG+CMMI10 /FontDescriptor 643 0 R /FirstChar 45 /LastChar 58 /Widths 638 0 R >> endobj 548 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FRBTTO+CMSY10 /FontDescriptor 645 0 R /FirstChar 32 /LastChar 32 /Widths 636 0 R >> endobj 440 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZWXELK+NimbusMonL-Bold /FontDescriptor 647 0 R /FirstChar 50 /LastChar 122 /Widths 637 0 R /Encoding 634 0 R >> endobj 124 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QYKIKI+NimbusMonL-Regu /FontDescriptor 649 0 R /FirstChar 33 /LastChar 126 /Widths 639 0 R /Encoding 634 0 R >> endobj 116 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PYRIYB+NimbusSanL-Bold /FontDescriptor 651 0 R /FirstChar 2 /LastChar 122 /Widths 641 0 R /Encoding 634 0 R >> endobj 122 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XDVKOU+NimbusRomNo9L-Regu /FontDescriptor 653 0 R /FirstChar 2 /LastChar 169 /Widths 640 0 R /Encoding 634 0 R >> endobj 621 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AMYDOG+NimbusRomNo9L-ReguItal /FontDescriptor 655 0 R /FirstChar 37 /LastChar 121 /Widths 635 0 R /Encoding 634 0 R >> endobj 117 0 obj << /Type /Pages /Count 6 /Parent 656 0 R /Kids [110 0 R 119 0 R 226 0 R 294 0 R 319 0 R 331 0 R] >> endobj 354 0 obj << /Type /Pages /Count 6 /Parent 656 0 R /Kids [342 0 R 358 0 R 367 0 R 371 0 R 437 0 R 448 0 R] >> endobj 466 0 obj << /Type /Pages /Count 6 /Parent 656 0 R /Kids [455 0 R 468 0 R 479 0 R 483 0 R 488 0 R 492 0 R] >> endobj 507 0 obj << /Type /Pages /Count 6 /Parent 656 0 R /Kids [500 0 R 509 0 R 514 0 R 521 0 R 528 0 R 533 0 R] >> endobj 543 0 obj << /Type /Pages /Count 6 /Parent 656 0 R /Kids [538 0 R 545 0 R 552 0 R 559 0 R 564 0 R 569 0 R] >> endobj 577 0 obj << /Type /Pages /Count 6 /Parent 656 0 R /Kids [574 0 R 579 0 R 585 0 R 599 0 R 609 0 R 618 0 R] >> endobj 629 0 obj << /Type /Pages /Count 2 /Parent 657 0 R /Kids [626 0 R 631 0 R] >> endobj 656 0 obj << /Type /Pages /Count 36 /Parent 658 0 R /Kids [117 0 R 354 0 R 466 0 R 507 0 R 543 0 R 577 0 R] >> endobj 657 0 obj << /Type /Pages /Count 2 /Parent 658 0 R /Kids [629 0 R] >> endobj 658 0 obj << /Type /Pages /Count 38 /Kids [656 0 R 657 0 R] >> endobj 659 0 obj << /Type /Outlines /First 3 0 R /Last 3 0 R /Count 1 >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 87 0 R /Prev 103 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 3 0 R /Prev 51 0 R /First 91 0 R /Last 107 0 R /Count -5 >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 51 0 R /Prev 79 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 51 0 R /Prev 75 0 R /Next 83 0 R >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 51 0 R /Prev 71 0 R /Next 79 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 51 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 51 0 R /Prev 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 51 0 R /Prev 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 51 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 3 0 R /Prev 11 0 R /Next 87 0 R /First 55 0 R /Last 83 0 R /Count -8 >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 11 0 R /Prev 43 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 11 0 R /Prev 39 0 R /Next 47 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 11 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 11 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 11 0 R /Prev 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 11 0 R /Prev 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 11 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 11 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 3 0 R /Prev 7 0 R /Next 51 0 R /First 15 0 R /Last 47 0 R /Count -9 >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 659 0 R /First 7 0 R /Last 87 0 R /Count -4 >> endobj 660 0 obj << /Names [(Doc-Start) 114 0 R (author) 249 0 R (author.3) 46 0 R (bugs) 284 0 R (bugs.3) 98 0 R (bzCompress) 258 0 R] /Limits [(Doc-Start) (bzCompress)] >> endobj 661 0 obj << /Names [(bzCompress-end) 259 0 R (bzCompress-end.4) 505 0 R (bzCompress.4) 486 0 R (bzDecompress) 261 0 R (bzDecompress-end) 262 0 R (bzDecompress-end.4) 517 0 R] /Limits [(bzCompress-end) (bzDecompress-end.4)] >> endobj 662 0 obj << /Names [(bzDecompress-init) 260 0 R (bzDecompress-init.4) 506 0 R (bzDecompress.4) 512 0 R (bzbufftobuffcompress) 274 0 R (bzbufftobuffcompress.4) 567 0 R (bzbufftobuffdecompress) 275 0 R] /Limits [(bzDecompress-init) (bzbufftobuffdecompress)] >> endobj 663 0 obj << /Names [(bzbufftobuffdecompress.4) 572 0 R (bzcompress-init) 257 0 R (bzcompress-init.4) 477 0 R (bzread) 265 0 R (bzread.4) 531 0 R (bzreadclose) 267 0 R] /Limits [(bzbufftobuffdecompress.4) (bzreadclose)] >> endobj 664 0 obj << /Names [(bzreadclose.4) 541 0 R (bzreadgetunused) 266 0 R (bzreadgetunused.4) 536 0 R (bzreadopen) 264 0 R (bzreadopen.4) 526 0 R (bzwrite) 269 0 R] /Limits [(bzreadclose.4) (bzwrite)] >> endobj 665 0 obj << /Names [(bzwrite.4) 549 0 R (bzwriteclose) 270 0 R (bzwriteclose.4) 550 0 R (bzwriteopen) 268 0 R (bzwriteopen.4) 542 0 R (caveats) 248 0 R] /Limits [(bzwrite.4) (caveats)] >> endobj 666 0 obj << /Names [(caveats.3) 42 0 R (critical-error) 279 0 R (critical-error.4) 583 0 R (description) 243 0 R (description.3) 22 0 R (embed) 271 0 R] /Limits [(caveats.3) (embed)] >> endobj 667 0 obj << /Names [(embed.4) 555 0 R (err-handling) 255 0 R (err-handling.3) 58 0 R (hl-interface) 263 0 R (hl-interface.3) 66 0 R (hl-summary) 253 0 R] /Limits [(embed.4) (hl-summary)] >> endobj 668 0 obj << /Names [(hl-summary.4) 452 0 R (id320032) 345 0 R (id320034) 346 0 R (id320049) 347 0 R (id320324) 297 0 R (id320658) 298 0 R] /Limits [(hl-summary.4) (id320658)] >> endobj 669 0 obj << /Names [(id320668) 299 0 R (id320714) 323 0 R (id320729) 324 0 R (id320739) 325 0 R (id320765) 326 0 R (id320774) 327 0 R] /Limits [(id320668) (id320774)] >> endobj 670 0 obj << /Names [(id320783) 328 0 R (id320792) 329 0 R (id321147) 123 0 R (id321165) 125 0 R (id321636) 126 0 R (id321643) 127 0 R] /Limits [(id320783) (id321643)] >> endobj 671 0 obj << /Names [(id321648) 128 0 R (id362278) 334 0 R (id362290) 335 0 R (id362303) 336 0 R (id362315) 337 0 R (id362328) 338 0 R] /Limits [(id321648) (id362328)] >> endobj 672 0 obj << /Names [(id362620) 348 0 R (id362639) 349 0 R (id362654) 350 0 R (id362698) 351 0 R (id362711) 352 0 R (id362747) 353 0 R] /Limits [(id362620) (id362747)] >> endobj 673 0 obj << /Names [(id362762) 361 0 R (id362783) 362 0 R (id362798) 363 0 R (id362859) 364 0 R (id362880) 365 0 R (id363709) 458 0 R] /Limits [(id362762) (id363709)] >> endobj 674 0 obj << /Names [(id363711) 459 0 R (id363725) 460 0 R (id363745) 461 0 R (id363764) 462 0 R (id363766) 463 0 R (id363825) 464 0 R] /Limits [(id363711) (id363825)] >> endobj 675 0 obj << /Names [(id363853) 465 0 R (id363884) 471 0 R (id363932) 472 0 R (id363948) 473 0 R (id363973) 474 0 R (id364031) 475 0 R] /Limits [(id363853) (id364031)] >> endobj 676 0 obj << /Names [(id364050) 476 0 R (id364703) 495 0 R (id364726) 496 0 R (id364742) 503 0 R (id364762) 504 0 R (id365249) 518 0 R] /Limits [(id364050) (id365249)] >> endobj 677 0 obj << /Names [(id365309) 519 0 R (id365372) 524 0 R (id365394) 525 0 R (id366206) 556 0 R (id366222) 557 0 R (id367177) 603 0 R] /Limits [(id365309) (id367177)] >> endobj 678 0 obj << /Names [(id367185) 604 0 R (id367215) 605 0 R (id367228) 606 0 R (id367252) 607 0 R (id367258) 612 0 R (id367263) 613 0 R] /Limits [(id367185) (id367263)] >> endobj 679 0 obj << /Names [(id367472) 614 0 R (id367516) 622 0 R (id367538) 623 0 R (intro) 239 0 R (intro.2) 6 0 R (libprog) 250 0 R] /Limits [(id367472) (libprog)] >> endobj 680 0 obj << /Names [(libprog.2) 50 0 R (limits) 282 0 R (limits.3) 90 0 R (ll-summary) 252 0 R (ll-summary.4) 451 0 R (low-level) 256 0 R] /Limits [(libprog.2) (low-level)] >> endobj 681 0 obj << /Names [(low-level.3) 62 0 R (memory-management) 245 0 R (memory-management.3) 30 0 R (misc) 281 0 R (misc.2) 86 0 R (name) 241 0 R] /Limits [(low-level.3) (name)] >> endobj 682 0 obj << /Names [(name.3) 14 0 R (options) 244 0 R (options.3) 26 0 R (package) 285 0 R (package.3) 102 0 R (page.1) 113 0 R] /Limits [(name.3) (page.1)] >> endobj 683 0 obj << /Names [(page.10) 373 0 R (page.11) 439 0 R (page.12) 450 0 R (page.13) 457 0 R (page.14) 470 0 R (page.15) 481 0 R] /Limits [(page.10) (page.15)] >> endobj 684 0 obj << /Names [(page.16) 485 0 R (page.17) 490 0 R (page.18) 494 0 R (page.19) 502 0 R (page.2) 121 0 R (page.20) 511 0 R] /Limits [(page.16) (page.20)] >> endobj 685 0 obj << /Names [(page.21) 516 0 R (page.22) 523 0 R (page.23) 530 0 R (page.24) 535 0 R (page.25) 540 0 R (page.26) 547 0 R] /Limits [(page.21) (page.26)] >> endobj 686 0 obj << /Names [(page.27) 554 0 R (page.28) 561 0 R (page.29) 566 0 R (page.3) 228 0 R (page.30) 571 0 R (page.31) 576 0 R] /Limits [(page.27) (page.31)] >> endobj 687 0 obj << /Names [(page.32) 581 0 R (page.33) 587 0 R (page.34) 601 0 R (page.35) 611 0 R (page.36) 620 0 R (page.37) 628 0 R] /Limits [(page.32) (page.37)] >> endobj 688 0 obj << /Names [(page.38) 633 0 R (page.4) 296 0 R (page.5) 321 0 R (page.6) 333 0 R (page.7) 344 0 R (page.8) 360 0 R] /Limits [(page.38) (page.8)] >> endobj 689 0 obj << /Names [(page.9) 369 0 R (performance) 247 0 R (performance.3) 38 0 R (port-issues) 283 0 R (port-issues.3) 94 0 R (reading) 286 0 R] /Limits [(page.9) (reading)] >> endobj 690 0 obj << /Names [(reading.3) 106 0 R (recovering) 246 0 R (recovering.3) 34 0 R (std-rdwr) 272 0 R (std-rdwr.4) 562 0 R (stdio-bye) 278 0 R] /Limits [(reading.3) (stdio-bye)] >> endobj 691 0 obj << /Names [(stdio-bye.4) 582 0 R (stdio-free) 277 0 R (stdio-free.3) 78 0 R (synopsis) 242 0 R (synopsis.3) 18 0 R (toc...libprog) 441 0 R] /Limits [(stdio-bye.4) (toc...libprog)] >> endobj 692 0 obj << /Names [(toc...misc) 602 0 R (toc...userman) 229 0 R (toc...using) 322 0 R (toc.libprog.hl-interface) 444 0 R (toc.libprog.low-level) 443 0 R (toc.libprog.stdio-free) 446 0 R] /Limits [(toc...misc) (toc.libprog.stdio-free)] >> endobj 693 0 obj << /Names [(toc.libprog.top-level) 442 0 R (toc.libprog.util-fns) 445 0 R (toc.userman.hl-interface) 235 0 R (toc.userman.libprog) 232 0 R (toc.userman.low-level) 234 0 R (toc.userman.misc) 238 0 R] /Limits [(toc.libprog.top-level) (toc.userman.misc)] >> endobj 694 0 obj << /Names [(toc.userman.stdio-free) 237 0 R (toc.userman.top-level) 233 0 R (toc.userman.using) 231 0 R (toc.userman.util-fns) 236 0 R (top-level) 251 0 R (top-level.3) 54 0 R] /Limits [(toc.userman.stdio-free) (top-level.3)] >> endobj 695 0 obj << /Names [(userman) 115 0 R (userman.1) 2 0 R (using) 240 0 R (using.2) 10 0 R (util-fns) 273 0 R (util-fns-summary) 254 0 R] /Limits [(userman) (util-fns-summary)] >> endobj 696 0 obj << /Names [(util-fns-summary.4) 453 0 R (util-fns.3) 70 0 R (win-dll) 280 0 R (win-dll.3) 82 0 R (zlib-compat) 276 0 R (zlib-compat.3) 74 0 R] /Limits [(util-fns-summary.4) (zlib-compat.3)] >> endobj 697 0 obj << /Kids [660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R] /Limits [(Doc-Start) (caveats)] >> endobj 698 0 obj << /Kids [666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R] /Limits [(caveats.3) (id362328)] >> endobj 699 0 obj << /Kids [672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R] /Limits [(id362620) (id367177)] >> endobj 700 0 obj << /Kids [678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R] /Limits [(id367185) (page.15)] >> endobj 701 0 obj << /Kids [684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R] /Limits [(page.16) (reading)] >> endobj 702 0 obj << /Kids [690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R] /Limits [(reading.3) (util-fns-summary)] >> endobj 703 0 obj << /Kids [696 0 R] /Limits [(util-fns-summary.4) (zlib-compat.3)] >> endobj 704 0 obj << /Kids [697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R] /Limits [(Doc-Start) (util-fns-summary)] >> endobj 705 0 obj << /Kids [703 0 R] /Limits [(util-fns-summary.4) (zlib-compat.3)] >> endobj 706 0 obj << /Kids [704 0 R 705 0 R] /Limits [(Doc-Start) (zlib-compat.3)] >> endobj 707 0 obj << /Dests 706 0 R >> endobj 708 0 obj << /Type /Catalog /Pages 658 0 R /Outlines 659 0 R /Names 707 0 R /PageMode/UseOutlines/PageLabels<>3<>]>> /OpenAction 109 0 R >> endobj 709 0 obj << /Author()/Title()/Subject()/Creator(PassiveTeX 1.25)/Producer(pdfTeX-1.40.10)/Keywords() /CreationDate (D:20100911115721+02'00') /ModDate (D:20100911115721+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 710 0000000000 65535 f 0000000015 00000 n 0000002978 00000 n 0000233754 00000 n 0000000060 00000 n 0000000111 00000 n 0000026384 00000 n 0000233684 00000 n 0000000154 00000 n 0000000184 00000 n 0000030995 00000 n 0000233563 00000 n 0000000227 00000 n 0000000262 00000 n 0000031161 00000 n 0000233489 00000 n 0000000305 00000 n 0000000328 00000 n 0000031444 00000 n 0000233402 00000 n 0000000375 00000 n 0000000402 00000 n 0000035206 00000 n 0000233315 00000 n 0000000452 00000 n 0000000482 00000 n 0000039005 00000 n 0000233228 00000 n 0000000528 00000 n 0000000554 00000 n 0000043682 00000 n 0000233141 00000 n 0000000610 00000 n 0000000646 00000 n 0000047034 00000 n 0000233054 00000 n 0000000695 00000 n 0000000748 00000 n 0000047146 00000 n 0000232967 00000 n 0000000798 00000 n 0000000834 00000 n 0000050332 00000 n 0000232880 00000 n 0000000880 00000 n 0000000906 00000 n 0000050445 00000 n 0000232806 00000 n 0000000951 00000 n 0000000976 00000 n 0000063185 00000 n 0000232683 00000 n 0000001022 00000 n 0000001068 00000 n 0000063636 00000 n 0000232609 00000 n 0000001116 00000 n 0000001154 00000 n 0000071204 00000 n 0000232522 00000 n 0000001205 00000 n 0000001238 00000 n 0000074278 00000 n 0000232435 00000 n 0000001286 00000 n 0000001324 00000 n 0000093503 00000 n 0000232348 00000 n 0000001375 00000 n 0000001414 00000 n 0000112858 00000 n 0000232261 00000 n 0000001461 00000 n 0000001497 00000 n 0000117980 00000 n 0000232174 00000 n 0000001547 00000 n 0000001594 00000 n 0000118092 00000 n 0000232087 00000 n 0000001643 00000 n 0000001707 00000 n 0000121390 00000 n 0000232013 00000 n 0000001753 00000 n 0000001792 00000 n 0000127978 00000 n 0000231902 00000 n 0000001835 00000 n 0000001865 00000 n 0000128143 00000 n 0000231828 00000 n 0000001910 00000 n 0000001970 00000 n 0000132062 00000 n 0000231741 00000 n 0000002020 00000 n 0000002057 00000 n 0000132175 00000 n 0000231652 00000 n 0000002100 00000 n 0000002134 00000 n 0000136024 00000 n 0000231561 00000 n 0000002181 00000 n 0000002231 00000 n 0000139098 00000 n 0000231483 00000 n 0000002278 00000 n 0000002313 00000 n 0000002707 00000 n 0000003029 00000 n 0000002365 00000 n 0000002819 00000 n 0000002872 00000 n 0000002925 00000 n 0000229837 00000 n 0000230358 00000 n 0000005586 00000 n 0000005136 00000 n 0000003101 00000 n 0000005248 00000 n 0000230007 00000 n 0000005301 00000 n 0000229666 00000 n 0000005358 00000 n 0000005415 00000 n 0000005472 00000 n 0000005529 00000 n 0000008744 00000 n 0000008891 00000 n 0000009039 00000 n 0000009185 00000 n 0000009332 00000 n 0000009477 00000 n 0000009624 00000 n 0000009774 00000 n 0000009925 00000 n 0000010078 00000 n 0000010232 00000 n 0000010381 00000 n 0000010531 00000 n 0000010690 00000 n 0000010850 00000 n 0000011002 00000 n 0000011155 00000 n 0000011308 00000 n 0000011462 00000 n 0000011611 00000 n 0000011761 00000 n 0000011909 00000 n 0000012058 00000 n 0000012207 00000 n 0000012357 00000 n 0000012508 00000 n 0000012660 00000 n 0000012811 00000 n 0000012964 00000 n 0000013116 00000 n 0000013269 00000 n 0000013427 00000 n 0000013586 00000 n 0000013740 00000 n 0000013895 00000 n 0000014046 00000 n 0000014198 00000 n 0000014355 00000 n 0000014513 00000 n 0000014664 00000 n 0000014817 00000 n 0000014971 00000 n 0000015128 00000 n 0000015287 00000 n 0000015447 00000 n 0000015601 00000 n 0000015756 00000 n 0000015913 00000 n 0000016071 00000 n 0000016224 00000 n 0000016379 00000 n 0000016530 00000 n 0000016682 00000 n 0000016830 00000 n 0000016979 00000 n 0000017135 00000 n 0000017292 00000 n 0000017445 00000 n 0000017599 00000 n 0000017752 00000 n 0000017906 00000 n 0000018055 00000 n 0000018205 00000 n 0000018359 00000 n 0000018514 00000 n 0000018660 00000 n 0000018807 00000 n 0000018957 00000 n 0000019108 00000 n 0000019257 00000 n 0000019407 00000 n 0000019569 00000 n 0000019732 00000 n 0000019896 00000 n 0000020061 00000 n 0000020214 00000 n 0000020368 00000 n 0000020519 00000 n 0000020672 00000 n 0000020823 00000 n 0000020975 00000 n 0000021131 00000 n 0000021288 00000 n 0000021437 00000 n 0000021587 00000 n 0000021733 00000 n 0000021880 00000 n 0000022028 00000 n 0000022177 00000 n 0000022330 00000 n 0000022484 00000 n 0000022629 00000 n 0000022776 00000 n 0000022925 00000 n 0000023075 00000 n 0000023224 00000 n 0000023935 00000 n 0000007852 00000 n 0000005684 00000 n 0000023374 00000 n 0000023427 00000 n 0000229209 00000 n 0000023480 00000 n 0000023537 00000 n 0000023594 00000 n 0000023650 00000 n 0000023707 00000 n 0000023764 00000 n 0000023821 00000 n 0000023878 00000 n 0000026331 00000 n 0000030942 00000 n 0000031104 00000 n 0000031387 00000 n 0000035153 00000 n 0000038948 00000 n 0000043626 00000 n 0000046977 00000 n 0000047090 00000 n 0000050275 00000 n 0000050388 00000 n 0000063132 00000 n 0000063579 00000 n 0000067462 00000 n 0000067576 00000 n 0000067690 00000 n 0000071147 00000 n 0000074221 00000 n 0000074334 00000 n 0000080407 00000 n 0000088433 00000 n 0000088547 00000 n 0000091164 00000 n 0000093332 00000 n 0000093446 00000 n 0000096924 00000 n 0000099179 00000 n 0000101166 00000 n 0000103219 00000 n 0000103331 00000 n 0000104989 00000 n 0000105103 00000 n 0000108246 00000 n 0000110584 00000 n 0000112802 00000 n 0000112913 00000 n 0000115418 00000 n 0000117923 00000 n 0000118036 00000 n 0000121105 00000 n 0000121219 00000 n 0000121333 00000 n 0000127925 00000 n 0000128087 00000 n 0000132005 00000 n 0000132118 00000 n 0000135967 00000 n 0000139041 00000 n 0000025395 00000 n 0000025541 00000 n 0000025688 00000 n 0000025837 00000 n 0000025985 00000 n 0000026131 00000 n 0000026605 00000 n 0000025223 00000 n 0000024046 00000 n 0000026278 00000 n 0000026435 00000 n 0000026491 00000 n 0000026548 00000 n 0000028163 00000 n 0000028308 00000 n 0000028455 00000 n 0000028605 00000 n 0000028756 00000 n 0000028909 00000 n 0000029063 00000 n 0000029212 00000 n 0000029362 00000 n 0000029521 00000 n 0000029681 00000 n 0000029833 00000 n 0000029986 00000 n 0000030139 00000 n 0000030293 00000 n 0000030442 00000 n 0000030592 00000 n 0000030740 00000 n 0000031728 00000 n 0000027895 00000 n 0000026703 00000 n 0000030889 00000 n 0000031047 00000 n 0000031217 00000 n 0000031273 00000 n 0000031330 00000 n 0000031500 00000 n 0000031557 00000 n 0000031614 00000 n 0000031671 00000 n 0000035542 00000 n 0000034988 00000 n 0000031839 00000 n 0000035100 00000 n 0000035258 00000 n 0000035315 00000 n 0000035372 00000 n 0000035429 00000 n 0000035486 00000 n 0000038579 00000 n 0000038738 00000 n 0000039572 00000 n 0000038439 00000 n 0000035640 00000 n 0000038895 00000 n 0000039061 00000 n 0000039118 00000 n 0000039175 00000 n 0000039232 00000 n 0000039289 00000 n 0000039344 00000 n 0000039401 00000 n 0000039458 00000 n 0000039515 00000 n 0000230475 00000 n 0000042972 00000 n 0000043132 00000 n 0000043737 00000 n 0000042832 00000 n 0000039670 00000 n 0000043292 00000 n 0000043345 00000 n 0000043398 00000 n 0000043455 00000 n 0000043512 00000 n 0000043569 00000 n 0000047201 00000 n 0000046812 00000 n 0000043835 00000 n 0000046924 00000 n 0000050501 00000 n 0000050110 00000 n 0000047299 00000 n 0000050222 00000 n 0000053557 00000 n 0000053708 00000 n 0000053860 00000 n 0000054011 00000 n 0000054164 00000 n 0000054316 00000 n 0000054469 00000 n 0000054627 00000 n 0000054786 00000 n 0000054940 00000 n 0000055095 00000 n 0000055246 00000 n 0000055398 00000 n 0000055555 00000 n 0000055713 00000 n 0000055864 00000 n 0000056017 00000 n 0000056171 00000 n 0000056328 00000 n 0000056487 00000 n 0000056647 00000 n 0000056801 00000 n 0000056956 00000 n 0000057114 00000 n 0000057273 00000 n 0000057426 00000 n 0000057581 00000 n 0000057733 00000 n 0000057886 00000 n 0000058034 00000 n 0000058183 00000 n 0000058340 00000 n 0000058498 00000 n 0000058651 00000 n 0000058805 00000 n 0000058958 00000 n 0000059112 00000 n 0000059261 00000 n 0000059411 00000 n 0000059564 00000 n 0000059718 00000 n 0000059865 00000 n 0000060013 00000 n 0000060162 00000 n 0000060312 00000 n 0000060462 00000 n 0000060613 00000 n 0000060774 00000 n 0000060936 00000 n 0000061099 00000 n 0000061263 00000 n 0000061416 00000 n 0000061570 00000 n 0000061719 00000 n 0000061870 00000 n 0000062021 00000 n 0000062173 00000 n 0000062328 00000 n 0000062484 00000 n 0000062633 00000 n 0000062783 00000 n 0000062931 00000 n 0000063692 00000 n 0000052937 00000 n 0000050599 00000 n 0000063079 00000 n 0000229495 00000 n 0000063237 00000 n 0000063294 00000 n 0000063351 00000 n 0000063408 00000 n 0000063465 00000 n 0000063522 00000 n 0000067804 00000 n 0000067297 00000 n 0000063816 00000 n 0000067409 00000 n 0000067519 00000 n 0000067633 00000 n 0000067747 00000 n 0000071716 00000 n 0000070982 00000 n 0000067902 00000 n 0000071094 00000 n 0000071260 00000 n 0000071317 00000 n 0000071374 00000 n 0000071431 00000 n 0000071488 00000 n 0000071545 00000 n 0000071602 00000 n 0000071659 00000 n 0000230592 00000 n 0000074448 00000 n 0000073718 00000 n 0000071814 00000 n 0000073830 00000 n 0000073883 00000 n 0000073936 00000 n 0000073993 00000 n 0000074050 00000 n 0000074107 00000 n 0000074164 00000 n 0000074391 00000 n 0000077598 00000 n 0000077433 00000 n 0000074546 00000 n 0000077545 00000 n 0000080521 00000 n 0000080242 00000 n 0000077683 00000 n 0000080354 00000 n 0000080464 00000 n 0000083838 00000 n 0000083673 00000 n 0000080619 00000 n 0000083785 00000 n 0000085196 00000 n 0000084918 00000 n 0000083923 00000 n 0000085030 00000 n 0000085083 00000 n 0000085140 00000 n 0000087972 00000 n 0000088119 00000 n 0000088661 00000 n 0000087832 00000 n 0000085281 00000 n 0000088267 00000 n 0000088320 00000 n 0000088376 00000 n 0000088490 00000 n 0000088604 00000 n 0000230709 00000 n 0000091278 00000 n 0000090999 00000 n 0000088759 00000 n 0000091111 00000 n 0000091221 00000 n 0000093671 00000 n 0000093167 00000 n 0000091376 00000 n 0000093279 00000 n 0000093389 00000 n 0000093559 00000 n 0000093615 00000 n 0000097038 00000 n 0000096645 00000 n 0000093769 00000 n 0000096757 00000 n 0000096810 00000 n 0000096867 00000 n 0000096981 00000 n 0000099293 00000 n 0000099014 00000 n 0000097136 00000 n 0000099126 00000 n 0000099236 00000 n 0000101280 00000 n 0000101001 00000 n 0000099391 00000 n 0000101113 00000 n 0000101223 00000 n 0000103445 00000 n 0000103054 00000 n 0000101378 00000 n 0000103166 00000 n 0000103275 00000 n 0000103388 00000 n 0000230826 00000 n 0000105215 00000 n 0000104824 00000 n 0000103543 00000 n 0000104936 00000 n 0000229352 00000 n 0000105046 00000 n 0000105159 00000 n 0000108474 00000 n 0000108081 00000 n 0000105339 00000 n 0000108193 00000 n 0000108303 00000 n 0000108360 00000 n 0000108417 00000 n 0000110698 00000 n 0000110419 00000 n 0000108572 00000 n 0000110531 00000 n 0000110641 00000 n 0000113027 00000 n 0000112637 00000 n 0000110796 00000 n 0000112749 00000 n 0000112970 00000 n 0000115532 00000 n 0000115253 00000 n 0000113125 00000 n 0000115365 00000 n 0000115475 00000 n 0000118147 00000 n 0000117758 00000 n 0000115630 00000 n 0000117870 00000 n 0000230943 00000 n 0000121446 00000 n 0000120940 00000 n 0000118245 00000 n 0000121052 00000 n 0000121162 00000 n 0000121276 00000 n 0000123034 00000 n 0000122869 00000 n 0000121544 00000 n 0000122981 00000 n 0000126378 00000 n 0000126526 00000 n 0000126675 00000 n 0000126828 00000 n 0000126982 00000 n 0000127127 00000 n 0000127274 00000 n 0000127423 00000 n 0000127573 00000 n 0000127722 00000 n 0000128482 00000 n 0000126174 00000 n 0000123119 00000 n 0000127872 00000 n 0000128030 00000 n 0000128198 00000 n 0000128255 00000 n 0000128312 00000 n 0000128369 00000 n 0000128426 00000 n 0000132287 00000 n 0000131727 00000 n 0000128593 00000 n 0000131839 00000 n 0000131892 00000 n 0000131948 00000 n 0000132231 00000 n 0000138471 00000 n 0000138638 00000 n 0000136081 00000 n 0000135689 00000 n 0000132385 00000 n 0000135801 00000 n 0000230180 00000 n 0000135854 00000 n 0000135911 00000 n 0000138805 00000 n 0000139155 00000 n 0000138323 00000 n 0000136193 00000 n 0000138988 00000 n 0000231060 00000 n 0000140246 00000 n 0000140081 00000 n 0000139253 00000 n 0000140193 00000 n 0000228708 00000 n 0000140331 00000 n 0000140690 00000 n 0000140714 00000 n 0000141025 00000 n 0000141104 00000 n 0000141499 00000 n 0000142141 00000 n 0000142616 00000 n 0000149700 00000 n 0000149942 00000 n 0000157000 00000 n 0000157230 00000 n 0000163308 00000 n 0000163549 00000 n 0000183144 00000 n 0000183743 00000 n 0000195891 00000 n 0000196317 00000 n 0000217069 00000 n 0000217655 00000 n 0000228398 00000 n 0000231145 00000 n 0000231263 00000 n 0000231340 00000 n 0000231410 00000 n 0000233849 00000 n 0000234023 00000 n 0000234257 00000 n 0000234524 00000 n 0000234754 00000 n 0000234962 00000 n 0000235158 00000 n 0000235352 00000 n 0000235550 00000 n 0000235736 00000 n 0000235914 00000 n 0000236092 00000 n 0000236270 00000 n 0000236448 00000 n 0000236626 00000 n 0000236804 00000 n 0000236982 00000 n 0000237160 00000 n 0000237338 00000 n 0000237516 00000 n 0000237686 00000 n 0000237870 00000 n 0000238057 00000 n 0000238225 00000 n 0000238395 00000 n 0000238564 00000 n 0000238734 00000 n 0000238903 00000 n 0000239073 00000 n 0000239237 00000 n 0000239423 00000 n 0000239612 00000 n 0000239812 00000 n 0000240059 00000 n 0000240331 00000 n 0000240577 00000 n 0000240763 00000 n 0000240973 00000 n 0000241084 00000 n 0000241196 00000 n 0000241307 00000 n 0000241417 00000 n 0000241526 00000 n 0000241646 00000 n 0000241732 00000 n 0000241852 00000 n 0000241938 00000 n 0000242023 00000 n 0000242061 00000 n 0000242229 00000 n trailer << /Size 710 /Root 708 0 R /Info 709 0 R /ID [ ] >> startxref 242543 %%EOF PK};1]31_ manual.htmlnu[ bzip2 and libbzip2, version 1.0.6

bzip2 and libbzip2, version 1.0.6

A program and library for data compression

Julian Seward

http://www.bzip.org

Version 1.0.6 of 6 September 2010

This program, bzip2, the associated library libbzip2, and all documentation, are copyright 1996-2010 Julian Seward. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.

  • Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.

  • The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

PATENTS: To the best of my knowledge, bzip2 and libbzip2 do not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement.


1.Introduction

bzip2 compresses files using the Burrows-Wheeler block-sorting text compression algorithm, and Huffman coding. Compression is generally considerably better than that achieved by more conventional LZ77/LZ78-based compressors, and approaches the performance of the PPM family of statistical compressors.

bzip2 is built on top of libbzip2, a flexible library for handling compressed data in the bzip2 format. This manual describes both how to use the program and how to work with the library interface. Most of the manual is devoted to this library, not the program, which is good news if your interest is only in the program.

  • How to use bzip2 describes how to use bzip2; this is the only part you need to read if you just want to know how to operate the program.

  • Programming with libbzip2 describes the programming interfaces in detail, and

  • Miscellanea records some miscellaneous notes which I thought ought to be recorded somewhere.

2.How to use bzip2

This chapter contains a copy of the bzip2 man page, and nothing else.

2.1.NAME

  • bzip2, bunzip2 - a block-sorting file compressor, v1.0.6

  • bzcat - decompresses files to stdout

  • bzip2recover - recovers data from damaged bzip2 files

2.2.SYNOPSIS

  • bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]

  • bunzip2 [ -fkvsVL ] [ filenames ... ]

  • bzcat [ -s ] [ filenames ... ]

  • bzip2recover filename

2.3.DESCRIPTION

bzip2 compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding. Compression is generally considerably better than that achieved by more conventional LZ77/LZ78-based compressors, and approaches the performance of the PPM family of statistical compressors.

The command-line options are deliberately very similar to those of GNU gzip, but they are not identical.

bzip2 expects a list of file names to accompany the command-line flags. Each file is replaced by a compressed version of itself, with the name original_name.bz2. Each compressed file has the same modification date, permissions, and, when possible, ownership as the corresponding original, so that these properties can be correctly restored at decompression time. File name handling is naive in the sense that there is no mechanism for preserving original file names, permissions, ownerships or dates in filesystems which lack these concepts, or have serious file name length restrictions, such as MS-DOS.

bzip2 and bunzip2 will by default not overwrite existing files. If you want this to happen, specify the -f flag.

If no file names are specified, bzip2 compresses from standard input to standard output. In this case, bzip2 will decline to write compressed output to a terminal, as this would be entirely incomprehensible and therefore pointless.

bunzip2 (or bzip2 -d) decompresses all specified files. Files which were not created by bzip2 will be detected and ignored, and a warning issued. bzip2 attempts to guess the filename for the decompressed file from that of the compressed file as follows:

  • filename.bz2 becomes filename

  • filename.bz becomes filename

  • filename.tbz2 becomes filename.tar

  • filename.tbz becomes filename.tar

  • anyothername becomes anyothername.out

If the file does not end in one of the recognised endings, .bz2, .bz, .tbz2 or .tbz, bzip2 complains that it cannot guess the name of the original file, and uses the original name with .out appended.

As with compression, supplying no filenames causes decompression from standard input to standard output.

bunzip2 will correctly decompress a file which is the concatenation of two or more compressed files. The result is the concatenation of the corresponding uncompressed files. Integrity testing (-t) of concatenated compressed files is also supported.

You can also compress or decompress files to the standard output by giving the -c flag. Multiple files may be compressed and decompressed like this. The resulting outputs are fed sequentially to stdout. Compression of multiple files in this manner generates a stream containing multiple compressed file representations. Such a stream can be decompressed correctly only by bzip2 version 0.9.0 or later. Earlier versions of bzip2 will stop after decompressing the first file in the stream.

bzcat (or bzip2 -dc) decompresses all specified files to the standard output.

bzip2 will read arguments from the environment variables BZIP2 and BZIP, in that order, and will process them before any arguments read from the command line. This gives a convenient way to supply default arguments.

Compression is always performed, even if the compressed file is slightly larger than the original. Files of less than about one hundred bytes tend to get larger, since the compression mechanism has a constant overhead in the region of 50 bytes. Random data (including the output of most file compressors) is coded at about 8.05 bits per byte, giving an expansion of around 0.5%.

As a self-check for your protection, bzip2 uses 32-bit CRCs to make sure that the decompressed version of a file is identical to the original. This guards against corruption of the compressed data, and against undetected bugs in bzip2 (hopefully very unlikely). The chances of data corruption going undetected is microscopic, about one chance in four billion for each file processed. Be aware, though, that the check occurs upon decompression, so it can only tell you that something is wrong. It can't help you recover the original uncompressed data. You can use bzip2recover to try to recover data from damaged files.

Return values: 0 for a normal exit, 1 for environmental problems (file not found, invalid flags, I/O errors, etc.), 2 to indicate a corrupt compressed file, 3 for an internal consistency error (eg, bug) which caused bzip2 to panic.

2.4.OPTIONS

-c --stdout

Compress or decompress to standard output.

-d --decompress

Force decompression. bzip2, bunzip2 and bzcat are really the same program, and the decision about what actions to take is done on the basis of which name is used. This flag overrides that mechanism, and forces bzip2 to decompress.

-z --compress

The complement to -d: forces compression, regardless of the invokation name.

-t --test

Check integrity of the specified file(s), but don't decompress them. This really performs a trial decompression and throws away the result.

-f --force

Force overwrite of output files. Normally, bzip2 will not overwrite existing output files. Also forces bzip2 to break hard links to files, which it otherwise wouldn't do.

bzip2 normally declines to decompress files which don't have the correct magic header bytes. If forced (-f), however, it will pass such files through unmodified. This is how GNU gzip behaves.

-k --keep

Keep (don't delete) input files during compression or decompression.

-s --small

Reduce memory usage, for compression, decompression and testing. Files are decompressed and tested using a modified algorithm which only requires 2.5 bytes per block byte. This means any file can be decompressed in 2300k of memory, albeit at about half the normal speed.

During compression, -s selects a block size of 200k, which limits memory use to around the same figure, at the expense of your compression ratio. In short, if your machine is low on memory (8 megabytes or less), use -s for everything. See MEMORY MANAGEMENT below.

-q --quiet

Suppress non-essential warning messages. Messages pertaining to I/O errors and other critical events will not be suppressed.

-v --verbose

Verbose mode -- show the compression ratio for each file processed. Further -v's increase the verbosity level, spewing out lots of information which is primarily of interest for diagnostic purposes.

-L --license -V --version

Display the software version, license terms and conditions.

-1 (or --fast) to -9 (or -best)

Set the block size to 100 k, 200 k ... 900 k when compressing. Has no effect when decompressing. See MEMORY MANAGEMENT below. The --fast and --best aliases are primarily for GNU gzip compatibility. In particular, --fast doesn't make things significantly faster. And --best merely selects the default behaviour.

--

Treats all subsequent arguments as file names, even if they start with a dash. This is so you can handle files with names beginning with a dash, for example: bzip2 -- -myfilename.

--repetitive-fast, --repetitive-best

These flags are redundant in versions 0.9.5 and above. They provided some coarse control over the behaviour of the sorting algorithm in earlier versions, which was sometimes useful. 0.9.5 and above have an improved algorithm which renders these flags irrelevant.

2.5.MEMORY MANAGEMENT

bzip2 compresses large files in blocks. The block size affects both the compression ratio achieved, and the amount of memory needed for compression and decompression. The flags -1 through -9 specify the block size to be 100,000 bytes through 900,000 bytes (the default) respectively. At decompression time, the block size used for compression is read from the header of the compressed file, and bunzip2 then allocates itself just enough memory to decompress the file. Since block sizes are stored in compressed files, it follows that the flags -1 to -9 are irrelevant to and so ignored during decompression.

Compression and decompression requirements, in bytes, can be estimated as:

Compression:   400k + ( 8 x block size )

Decompression: 100k + ( 4 x block size ), or
               100k + ( 2.5 x block size )

Larger block sizes give rapidly diminishing marginal returns. Most of the compression comes from the first two or three hundred k of block size, a fact worth bearing in mind when using bzip2 on small machines. It is also important to appreciate that the decompression memory requirement is set at compression time by the choice of block size.

For files compressed with the default 900k block size, bunzip2 will require about 3700 kbytes to decompress. To support decompression of any file on a 4 megabyte machine, bunzip2 has an option to decompress using approximately half this amount of memory, about 2300 kbytes. Decompression speed is also halved, so you should use this option only where necessary. The relevant flag is -s.

In general, try and use the largest block size memory constraints allow, since that maximises the compression achieved. Compression and decompression speed are virtually unaffected by block size.

Another significant point applies to files which fit in a single block -- that means most files you'd encounter using a large block size. The amount of real memory touched is proportional to the size of the file, since the file is smaller than a block. For example, compressing a file 20,000 bytes long with the flag -9 will cause the compressor to allocate around 7600k of memory, but only touch 400k + 20000 * 8 = 560 kbytes of it. Similarly, the decompressor will allocate 3700k but only touch 100k + 20000 * 4 = 180 kbytes.

Here is a table which summarises the maximum memory usage for different block sizes. Also recorded is the total compressed size for 14 files of the Calgary Text Compression Corpus totalling 3,141,622 bytes. This column gives some feel for how compression varies with block size. These figures tend to understate the advantage of larger block sizes for larger files, since the Corpus is dominated by smaller files.

        Compress   Decompress   Decompress   Corpus
Flag     usage      usage       -s usage     Size

 -1      1200k       500k         350k      914704
 -2      2000k       900k         600k      877703
 -3      2800k      1300k         850k      860338
 -4      3600k      1700k        1100k      846899
 -5      4400k      2100k        1350k      845160
 -6      5200k      2500k        1600k      838626
 -7      6100k      2900k        1850k      834096
 -8      6800k      3300k        2100k      828642
 -9      7600k      3700k        2350k      828642

2.6.RECOVERING DATA FROM DAMAGED FILES

bzip2 compresses files in blocks, usually 900kbytes long. Each block is handled independently. If a media or transmission error causes a multi-block .bz2 file to become damaged, it may be possible to recover data from the undamaged blocks in the file.

The compressed representation of each block is delimited by a 48-bit pattern, which makes it possible to find the block boundaries with reasonable certainty. Each block also carries its own 32-bit CRC, so damaged blocks can be distinguished from undamaged ones.

bzip2recover is a simple program whose purpose is to search for blocks in .bz2 files, and write each block out into its own .bz2 file. You can then use bzip2 -t to test the integrity of the resulting files, and decompress those which are undamaged.

bzip2recover takes a single argument, the name of the damaged file, and writes a number of files rec0001file.bz2, rec0002file.bz2, etc, containing the extracted blocks. The output filenames are designed so that the use of wildcards in subsequent processing -- for example, bzip2 -dc rec*file.bz2 > recovered_data -- lists the files in the correct order.

bzip2recover should be of most use dealing with large .bz2 files, as these will contain many blocks. It is clearly futile to use it on damaged single-block files, since a damaged block cannot be recovered. If you wish to minimise any potential data loss through media or transmission errors, you might consider compressing with a smaller block size.

2.7.PERFORMANCE NOTES

The sorting phase of compression gathers together similar strings in the file. Because of this, files containing very long runs of repeated symbols, like "aabaabaabaab ..." (repeated several hundred times) may compress more slowly than normal. Versions 0.9.5 and above fare much better than previous versions in this respect. The ratio between worst-case and average-case compression time is in the region of 10:1. For previous versions, this figure was more like 100:1. You can use the -vvvv option to monitor progress in great detail, if you want.

Decompression speed is unaffected by these phenomena.

bzip2 usually allocates several megabytes of memory to operate in, and then charges all over it in a fairly random fashion. This means that performance, both for compressing and decompressing, is largely determined by the speed at which your machine can service cache misses. Because of this, small changes to the code to reduce the miss rate have been observed to give disproportionately large performance improvements. I imagine bzip2 will perform best on machines with very large caches.

2.8.CAVEATS

I/O error messages are not as helpful as they could be. bzip2 tries hard to detect I/O errors and exit cleanly, but the details of what the problem is sometimes seem rather misleading.

This manual page pertains to version 1.0.6 of bzip2. Compressed data created by this version is entirely forwards and backwards compatible with the previous public releases, versions 0.1pl2, 0.9.0 and 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, but with the following exception: 0.9.0 and above can correctly decompress multiple concatenated compressed files. 0.1pl2 cannot do this; it will stop after decompressing just the first file in the stream.

bzip2recover versions prior to 1.0.2 used 32-bit integers to represent bit positions in compressed files, so it could not handle compressed files more than 512 megabytes long. Versions 1.0.2 and above use 64-bit ints on some platforms which support them (GNU supported targets, and Windows). To establish whether or not bzip2recover was built with such a limitation, run it without arguments. In any event you can build yourself an unlimited version if you can recompile it with MaybeUInt64 set to be an unsigned 64-bit integer.

2.9.AUTHOR

Julian Seward, jseward@bzip.org

The ideas embodied in bzip2 are due to (at least) the following people: Michael Burrows and David Wheeler (for the block sorting transformation), David Wheeler (again, for the Huffman coder), Peter Fenwick (for the structured coding model in the original bzip, and many refinements), and Alistair Moffat, Radford Neal and Ian Witten (for the arithmetic coder in the original bzip). I am much indebted for their help, support and advice. See the manual in the source distribution for pointers to sources of documentation. Christian von Roques encouraged me to look for faster sorting algorithms, so as to speed up compression. Bela Lubkin encouraged me to improve the worst-case compression performance. Donna Robinson XMLised the documentation. Many people sent patches, helped with portability problems, lent machines, gave advice and were generally helpful.

3. Programming with libbzip2

This chapter describes the programming interface to libbzip2.

For general background information, particularly about memory use and performance aspects, you'd be well advised to read How to use bzip2 as well.

3.1.Top-level structure

libbzip2 is a flexible library for compressing and decompressing data in the bzip2 data format. Although packaged as a single entity, it helps to regard the library as three separate parts: the low level interface, and the high level interface, and some utility functions.

The structure of libbzip2's interfaces is similar to that of Jean-loup Gailly's and Mark Adler's excellent zlib library.

All externally visible symbols have names beginning BZ2_. This is new in version 1.0. The intention is to minimise pollution of the namespaces of library clients.

To use any part of the library, you need to #include <bzlib.h> into your sources.

3.1.1.Low-level summary

This interface provides services for compressing and decompressing data in memory. There's no provision for dealing with files, streams or any other I/O mechanisms, just straight memory-to-memory work. In fact, this part of the library can be compiled without inclusion of stdio.h, which may be helpful for embedded applications.

The low-level part of the library has no global variables and is therefore thread-safe.

Six routines make up the low level interface: BZ2_bzCompressInit, BZ2_bzCompress, and BZ2_bzCompressEnd for compression, and a corresponding trio BZ2_bzDecompressInit, BZ2_bzDecompress and BZ2_bzDecompressEnd for decompression. The *Init functions allocate memory for compression/decompression and do other initialisations, whilst the *End functions close down operations and release memory.

The real work is done by BZ2_bzCompress and BZ2_bzDecompress. These compress and decompress data from a user-supplied input buffer to a user-supplied output buffer. These buffers can be any size; arbitrary quantities of data are handled by making repeated calls to these functions. This is a flexible mechanism allowing a consumer-pull style of activity, or producer-push, or a mixture of both.

3.1.2.High-level summary

This interface provides some handy wrappers around the low-level interface to facilitate reading and writing bzip2 format files (.bz2 files). The routines provide hooks to facilitate reading files in which the bzip2 data stream is embedded within some larger-scale file structure, or where there are multiple bzip2 data streams concatenated end-to-end.

For reading files, BZ2_bzReadOpen, BZ2_bzRead, BZ2_bzReadClose and BZ2_bzReadGetUnused are supplied. For writing files, BZ2_bzWriteOpen, BZ2_bzWrite and BZ2_bzWriteFinish are available.

As with the low-level library, no global variables are used so the library is per se thread-safe. However, if I/O errors occur whilst reading or writing the underlying compressed files, you may have to consult errno to determine the cause of the error. In that case, you'd need a C library which correctly supports errno in a multithreaded environment.

To make the library a little simpler and more portable, BZ2_bzReadOpen and BZ2_bzWriteOpen require you to pass them file handles (FILE*s) which have previously been opened for reading or writing respectively. That avoids portability problems associated with file operations and file attributes, whilst not being much of an imposition on the programmer.

3.1.3.Utility functions summary

For very simple needs, BZ2_bzBuffToBuffCompress and BZ2_bzBuffToBuffDecompress are provided. These compress data in memory from one buffer to another buffer in a single function call. You should assess whether these functions fulfill your memory-to-memory compression/decompression requirements before investing effort in understanding the more general but more complex low-level interface.

Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) has contributed some functions to give better zlib compatibility. These functions are BZ2_bzopen, BZ2_bzread, BZ2_bzwrite, BZ2_bzflush, BZ2_bzclose, BZ2_bzerror and BZ2_bzlibVersion. You may find these functions more convenient for simple file reading and writing, than those in the high-level interface. These functions are not (yet) officially part of the library, and are minimally documented here. If they break, you get to keep all the pieces. I hope to document them properly when time permits.

Yoshioka also contributed modifications to allow the library to be built as a Windows DLL.

3.2.Error handling

The library is designed to recover cleanly in all situations, including the worst-case situation of decompressing random data. I'm not 100% sure that it can always do this, so you might want to add a signal handler to catch segmentation violations during decompression if you are feeling especially paranoid. I would be interested in hearing more about the robustness of the library to corrupted compressed data.

Version 1.0.3 more robust in this respect than any previous version. Investigations with Valgrind (a tool for detecting problems with memory management) indicate that, at least for the few files I tested, all single-bit errors in the decompressed data are caught properly, with no segmentation faults, no uses of uninitialised data, no out of range reads or writes, and no infinite looping in the decompressor. So it's certainly pretty robust, although I wouldn't claim it to be totally bombproof.

The file bzlib.h contains all definitions needed to use the library. In particular, you should definitely not include bzlib_private.h.

In bzlib.h, the various return values are defined. The following list is not intended as an exhaustive description of the circumstances in which a given value may be returned -- those descriptions are given later. Rather, it is intended to convey the rough meaning of each return value. The first five actions are normal and not intended to denote an error situation.

BZ_OK

The requested action was completed successfully.

BZ_RUN_OK, BZ_FLUSH_OK, BZ_FINISH_OK

In BZ2_bzCompress, the requested flush/finish/nothing-special action was completed successfully.

BZ_STREAM_END

Compression of data was completed, or the logical stream end was detected during decompression.

The following return values indicate an error of some kind.

BZ_CONFIG_ERROR

Indicates that the library has been improperly compiled on your platform -- a major configuration error. Specifically, it means that sizeof(char), sizeof(short) and sizeof(int) are not 1, 2 and 4 respectively, as they should be. Note that the library should still work properly on 64-bit platforms which follow the LP64 programming model -- that is, where sizeof(long) and sizeof(void*) are 8. Under LP64, sizeof(int) is still 4, so libbzip2, which doesn't use the long type, is OK.

BZ_SEQUENCE_ERROR

When using the library, it is important to call the functions in the correct sequence and with data structures (buffers etc) in the correct states. libbzip2 checks as much as it can to ensure this is happening, and returns BZ_SEQUENCE_ERROR if not. Code which complies precisely with the function semantics, as detailed below, should never receive this value; such an event denotes buggy code which you should investigate.

BZ_PARAM_ERROR

Returned when a parameter to a function call is out of range or otherwise manifestly incorrect. As with BZ_SEQUENCE_ERROR, this denotes a bug in the client code. The distinction between BZ_PARAM_ERROR and BZ_SEQUENCE_ERROR is a bit hazy, but still worth making.

BZ_MEM_ERROR

Returned when a request to allocate memory failed. Note that the quantity of memory needed to decompress a stream cannot be determined until the stream's header has been read. So BZ2_bzDecompress and BZ2_bzRead may return BZ_MEM_ERROR even though some of the compressed data has been read. The same is not true for compression; once BZ2_bzCompressInit or BZ2_bzWriteOpen have successfully completed, BZ_MEM_ERROR cannot occur.

BZ_DATA_ERROR

Returned when a data integrity error is detected during decompression. Most importantly, this means when stored and computed CRCs for the data do not match. This value is also returned upon detection of any other anomaly in the compressed data.

BZ_DATA_ERROR_MAGIC

As a special case of BZ_DATA_ERROR, it is sometimes useful to know when the compressed stream does not start with the correct magic bytes ('B' 'Z' 'h').

BZ_IO_ERROR

Returned by BZ2_bzRead and BZ2_bzWrite when there is an error reading or writing in the compressed file, and by BZ2_bzReadOpen and BZ2_bzWriteOpen for attempts to use a file for which the error indicator (viz, ferror(f)) is set. On receipt of BZ_IO_ERROR, the caller should consult errno and/or perror to acquire operating-system specific information about the problem.

BZ_UNEXPECTED_EOF

Returned by BZ2_bzRead when the compressed file finishes before the logical end of stream is detected.

BZ_OUTBUFF_FULL

Returned by BZ2_bzBuffToBuffCompress and BZ2_bzBuffToBuffDecompress to indicate that the output data will not fit into the output buffer provided.

3.3.Low-level interface

3.3.1.BZ2_bzCompressInit

typedef struct {
  char *next_in;
  unsigned int avail_in;
  unsigned int total_in_lo32;
  unsigned int total_in_hi32;

  char *next_out;
  unsigned int avail_out;
  unsigned int total_out_lo32;
  unsigned int total_out_hi32;

  void *state;

  void *(*bzalloc)(void *,int,int);
  void (*bzfree)(void *,void *);
  void *opaque;
} bz_stream;

int BZ2_bzCompressInit ( bz_stream *strm, 
                         int blockSize100k, 
                         int verbosity,
                         int workFactor );

Prepares for compression. The bz_stream structure holds all data pertaining to the compression activity. A bz_stream structure should be allocated and initialised prior to the call. The fields of bz_stream comprise the entirety of the user-visible data. state is a pointer to the private data structures required for compression.

Custom memory allocators are supported, via fields bzalloc, bzfree, and opaque. The value opaque is passed to as the first argument to all calls to bzalloc and bzfree, but is otherwise ignored by the library. The call bzalloc ( opaque, n, m ) is expected to return a pointer p to n * m bytes of memory, and bzfree ( opaque, p ) should free that memory.

If you don't want to use a custom memory allocator, set bzalloc, bzfree and opaque to NULL, and the library will then use the standard malloc / free routines.

Before calling BZ2_bzCompressInit, fields bzalloc, bzfree and opaque should be filled appropriately, as just described. Upon return, the internal state will have been allocated and initialised, and total_in_lo32, total_in_hi32, total_out_lo32 and total_out_hi32 will have been set to zero. These four fields are used by the library to inform the caller of the total amount of data passed into and out of the library, respectively. You should not try to change them. As of version 1.0, 64-bit counts are maintained, even on 32-bit platforms, using the _hi32 fields to store the upper 32 bits of the count. So, for example, the total amount of data in is (total_in_hi32 << 32) + total_in_lo32.

Parameter blockSize100k specifies the block size to be used for compression. It should be a value between 1 and 9 inclusive, and the actual block size used is 100000 x this figure. 9 gives the best compression but takes most memory.

Parameter verbosity should be set to a number between 0 and 4 inclusive. 0 is silent, and greater numbers give increasingly verbose monitoring/debugging output. If the library has been compiled with -DBZ_NO_STDIO, no such output will appear for any verbosity setting.

Parameter workFactor controls how the compression phase behaves when presented with worst case, highly repetitive, input data. If compression runs into difficulties caused by repetitive data, the library switches from the standard sorting algorithm to a fallback algorithm. The fallback is slower than the standard algorithm by perhaps a factor of three, but always behaves reasonably, no matter how bad the input.

Lower values of workFactor reduce the amount of effort the standard algorithm will expend before resorting to the fallback. You should set this parameter carefully; too low, and many inputs will be handled by the fallback algorithm and so compress rather slowly, too high, and your average-to-worst case compression times can become very large. The default value of 30 gives reasonable behaviour over a wide range of circumstances.

Allowable values range from 0 to 250 inclusive. 0 is a special case, equivalent to using the default value of 30.

Note that the compressed output generated is the same regardless of whether or not the fallback algorithm is used.

Be aware also that this parameter may disappear entirely in future versions of the library. In principle it should be possible to devise a good way to automatically choose which algorithm to use. Such a mechanism would render the parameter obsolete.

Possible return values:

BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if strm is NULL 
  or blockSize < 1 or blockSize > 9
  or verbosity < 0 or verbosity > 4
  or workFactor < 0 or workFactor > 250
BZ_MEM_ERROR 
  if not enough memory is available
BZ_OK 
  otherwise

Allowable next actions:

BZ2_bzCompress
  if BZ_OK is returned
  no specific action needed in case of error

3.3.2.BZ2_bzCompress

int BZ2_bzCompress ( bz_stream *strm, int action );

Provides more input and/or output buffer space for the library. The caller maintains input and output buffers, and calls BZ2_bzCompress to transfer data between them.

Before each call to BZ2_bzCompress, next_in should point at the data to be compressed, and avail_in should indicate how many bytes the library may read. BZ2_bzCompress updates next_in, avail_in and total_in to reflect the number of bytes it has read.

Similarly, next_out should point to a buffer in which the compressed data is to be placed, with avail_out indicating how much output space is available. BZ2_bzCompress updates next_out, avail_out and total_out to reflect the number of bytes output.

You may provide and remove as little or as much data as you like on each call of BZ2_bzCompress. In the limit, it is acceptable to supply and remove data one byte at a time, although this would be terribly inefficient. You should always ensure that at least one byte of output space is available at each call.

A second purpose of BZ2_bzCompress is to request a change of mode of the compressed stream.

Conceptually, a compressed stream can be in one of four states: IDLE, RUNNING, FLUSHING and FINISHING. Before initialisation (BZ2_bzCompressInit) and after termination (BZ2_bzCompressEnd), a stream is regarded as IDLE.

Upon initialisation (BZ2_bzCompressInit), the stream is placed in the RUNNING state. Subsequent calls to BZ2_bzCompress should pass BZ_RUN as the requested action; other actions are illegal and will result in BZ_SEQUENCE_ERROR.

At some point, the calling program will have provided all the input data it wants to. It will then want to finish up -- in effect, asking the library to process any data it might have buffered internally. In this state, BZ2_bzCompress will no longer attempt to read data from next_in, but it will want to write data to next_out. Because the output buffer supplied by the user can be arbitrarily small, the finishing-up operation cannot necessarily be done with a single call of BZ2_bzCompress.

Instead, the calling program passes BZ_FINISH as an action to BZ2_bzCompress. This changes the stream's state to FINISHING. Any remaining input (ie, next_in[0 .. avail_in-1]) is compressed and transferred to the output buffer. To do this, BZ2_bzCompress must be called repeatedly until all the output has been consumed. At that point, BZ2_bzCompress returns BZ_STREAM_END, and the stream's state is set back to IDLE. BZ2_bzCompressEnd should then be called.

Just to make sure the calling program does not cheat, the library makes a note of avail_in at the time of the first call to BZ2_bzCompress which has BZ_FINISH as an action (ie, at the time the program has announced its intention to not supply any more input). By comparing this value with that of avail_in over subsequent calls to BZ2_bzCompress, the library can detect any attempts to slip in more data to compress. Any calls for which this is detected will return BZ_SEQUENCE_ERROR. This indicates a programming mistake which should be corrected.

Instead of asking to finish, the calling program may ask BZ2_bzCompress to take all the remaining input, compress it and terminate the current (Burrows-Wheeler) compression block. This could be useful for error control purposes. The mechanism is analogous to that for finishing: call BZ2_bzCompress with an action of BZ_FLUSH, remove output data, and persist with the BZ_FLUSH action until the value BZ_RUN is returned. As with finishing, BZ2_bzCompress detects any attempt to provide more input data once the flush has begun.

Once the flush is complete, the stream returns to the normal RUNNING state.

This all sounds pretty complex, but isn't really. Here's a table which shows which actions are allowable in each state, what action will be taken, what the next state is, and what the non-error return values are. Note that you can't explicitly ask what state the stream is in, but nor do you need to -- it can be inferred from the values returned by BZ2_bzCompress.

IDLE/any
  Illegal.  IDLE state only exists after BZ2_bzCompressEnd or
  before BZ2_bzCompressInit.
  Return value = BZ_SEQUENCE_ERROR

RUNNING/BZ_RUN
  Compress from next_in to next_out as much as possible.
  Next state = RUNNING
  Return value = BZ_RUN_OK

RUNNING/BZ_FLUSH
  Remember current value of next_in. Compress from next_in
  to next_out as much as possible, but do not accept any more input.
  Next state = FLUSHING
  Return value = BZ_FLUSH_OK

RUNNING/BZ_FINISH
  Remember current value of next_in. Compress from next_in
  to next_out as much as possible, but do not accept any more input.
  Next state = FINISHING
  Return value = BZ_FINISH_OK

FLUSHING/BZ_FLUSH
  Compress from next_in to next_out as much as possible, 
  but do not accept any more input.
  If all the existing input has been used up and all compressed
  output has been removed
    Next state = RUNNING; Return value = BZ_RUN_OK
  else
    Next state = FLUSHING; Return value = BZ_FLUSH_OK

FLUSHING/other     
  Illegal.
  Return value = BZ_SEQUENCE_ERROR

FINISHING/BZ_FINISH
  Compress from next_in to next_out as much as possible,
  but to not accept any more input.  
  If all the existing input has been used up and all compressed
  output has been removed
    Next state = IDLE; Return value = BZ_STREAM_END
  else
    Next state = FINISHING; Return value = BZ_FINISH_OK

FINISHING/other
  Illegal.
  Return value = BZ_SEQUENCE_ERROR

That still looks complicated? Well, fair enough. The usual sequence of calls for compressing a load of data is:

  1. Get started with BZ2_bzCompressInit.

  2. Shovel data in and shlurp out its compressed form using zero or more calls of BZ2_bzCompress with action = BZ_RUN.

  3. Finish up. Repeatedly call BZ2_bzCompress with action = BZ_FINISH, copying out the compressed output, until BZ_STREAM_END is returned.

  4. Close up and go home. Call BZ2_bzCompressEnd.

If the data you want to compress fits into your input buffer all at once, you can skip the calls of BZ2_bzCompress ( ..., BZ_RUN ) and just do the BZ2_bzCompress ( ..., BZ_FINISH ) calls.

All required memory is allocated by BZ2_bzCompressInit. The compression library can accept any data at all (obviously). So you shouldn't get any error return values from the BZ2_bzCompress calls. If you do, they will be BZ_SEQUENCE_ERROR, and indicate a bug in your programming.

Trivial other possible return values:

BZ_PARAM_ERROR
  if strm is NULL, or strm->s is NULL

3.3.3.BZ2_bzCompressEnd

int BZ2_bzCompressEnd ( bz_stream *strm );

Releases all memory associated with a compression stream.

Possible return values:

BZ_PARAM_ERROR  if strm is NULL or strm->s is NULL
BZ_OK           otherwise

3.3.4.BZ2_bzDecompressInit

int BZ2_bzDecompressInit ( bz_stream *strm, int verbosity, int small );

Prepares for decompression. As with BZ2_bzCompressInit, a bz_stream record should be allocated and initialised before the call. Fields bzalloc, bzfree and opaque should be set if a custom memory allocator is required, or made NULL for the normal malloc / free routines. Upon return, the internal state will have been initialised, and total_in and total_out will be zero.

For the meaning of parameter verbosity, see BZ2_bzCompressInit.

If small is nonzero, the library will use an alternative decompression algorithm which uses less memory but at the cost of decompressing more slowly (roughly speaking, half the speed, but the maximum memory requirement drops to around 2300k). See How to use bzip2 for more information on memory management.

Note that the amount of memory needed to decompress a stream cannot be determined until the stream's header has been read, so even if BZ2_bzDecompressInit succeeds, a subsequent BZ2_bzDecompress could fail with BZ_MEM_ERROR.

Possible return values:

BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if ( small != 0 && small != 1 )
  or (verbosity <; 0 || verbosity > 4)
BZ_MEM_ERROR
  if insufficient memory is available

Allowable next actions:

BZ2_bzDecompress
  if BZ_OK was returned
  no specific action required in case of error

3.3.5.BZ2_bzDecompress

int BZ2_bzDecompress ( bz_stream *strm );

Provides more input and/out output buffer space for the library. The caller maintains input and output buffers, and uses BZ2_bzDecompress to transfer data between them.

Before each call to BZ2_bzDecompress, next_in should point at the compressed data, and avail_in should indicate how many bytes the library may read. BZ2_bzDecompress updates next_in, avail_in and total_in to reflect the number of bytes it has read.

Similarly, next_out should point to a buffer in which the uncompressed output is to be placed, with avail_out indicating how much output space is available. BZ2_bzCompress updates next_out, avail_out and total_out to reflect the number of bytes output.

You may provide and remove as little or as much data as you like on each call of BZ2_bzDecompress. In the limit, it is acceptable to supply and remove data one byte at a time, although this would be terribly inefficient. You should always ensure that at least one byte of output space is available at each call.

Use of BZ2_bzDecompress is simpler than BZ2_bzCompress.

You should provide input and remove output as described above, and repeatedly call BZ2_bzDecompress until BZ_STREAM_END is returned. Appearance of BZ_STREAM_END denotes that BZ2_bzDecompress has detected the logical end of the compressed stream. BZ2_bzDecompress will not produce BZ_STREAM_END until all output data has been placed into the output buffer, so once BZ_STREAM_END appears, you are guaranteed to have available all the decompressed output, and BZ2_bzDecompressEnd can safely be called.

If case of an error return value, you should call BZ2_bzDecompressEnd to clean up and release memory.

Possible return values:

BZ_PARAM_ERROR
  if strm is NULL or strm->s is NULL
  or strm->avail_out < 1
BZ_DATA_ERROR
  if a data integrity error is detected in the compressed stream
BZ_DATA_ERROR_MAGIC
  if the compressed stream doesn't begin with the right magic bytes
BZ_MEM_ERROR
  if there wasn't enough memory available
BZ_STREAM_END
  if the logical end of the data stream was detected and all
  output in has been consumed, eg s-->avail_out > 0
BZ_OK
  otherwise

Allowable next actions:

BZ2_bzDecompress
  if BZ_OK was returned
BZ2_bzDecompressEnd
  otherwise

3.3.6.BZ2_bzDecompressEnd

int BZ2_bzDecompressEnd ( bz_stream *strm );

Releases all memory associated with a decompression stream.

Possible return values:

BZ_PARAM_ERROR
  if strm is NULL or strm->s is NULL
BZ_OK
  otherwise

Allowable next actions:

  None.

3.4.High-level interface

This interface provides functions for reading and writing bzip2 format files. First, some general points.

  • All of the functions take an int* first argument, bzerror. After each call, bzerror should be consulted first to determine the outcome of the call. If bzerror is BZ_OK, the call completed successfully, and only then should the return value of the function (if any) be consulted. If bzerror is BZ_IO_ERROR, there was an error reading/writing the underlying compressed file, and you should then consult errno / perror to determine the cause of the difficulty. bzerror may also be set to various other values; precise details are given on a per-function basis below.

  • If bzerror indicates an error (ie, anything except BZ_OK and BZ_STREAM_END), you should immediately call BZ2_bzReadClose (or BZ2_bzWriteClose, depending on whether you are attempting to read or to write) to free up all resources associated with the stream. Once an error has been indicated, behaviour of all calls except BZ2_bzReadClose (BZ2_bzWriteClose) is undefined. The implication is that (1) bzerror should be checked after each call, and (2) if bzerror indicates an error, BZ2_bzReadClose (BZ2_bzWriteClose) should then be called to clean up.

  • The FILE* arguments passed to BZ2_bzReadOpen / BZ2_bzWriteOpen should be set to binary mode. Most Unix systems will do this by default, but other platforms, including Windows and Mac, will not. If you omit this, you may encounter problems when moving code to new platforms.

  • Memory allocation requests are handled by malloc / free. At present there is no facility for user-defined memory allocators in the file I/O functions (could easily be added, though).

3.4.1.BZ2_bzReadOpen

typedef void BZFILE;

BZFILE *BZ2_bzReadOpen( int *bzerror, FILE *f, 
                        int verbosity, int small,
                        void *unused, int nUnused );

Prepare to read compressed data from file handle f. f should refer to a file which has been opened for reading, and for which the error indicator (ferror(f))is not set. If small is 1, the library will try to decompress using less memory, at the expense of speed.

For reasons explained below, BZ2_bzRead will decompress the nUnused bytes starting at unused, before starting to read from the file f. At most BZ_MAX_UNUSED bytes may be supplied like this. If this facility is not required, you should pass NULL and 0 for unused and nUnused respectively.

For the meaning of parameters small and verbosity, see BZ2_bzDecompressInit.

The amount of memory needed to decompress a file cannot be determined until the file's header has been read. So it is possible that BZ2_bzReadOpen returns BZ_OK but a subsequent call of BZ2_bzRead will return BZ_MEM_ERROR.

Possible assignments to bzerror:

BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if f is NULL
  or small is neither 0 nor 1
  or ( unused == NULL && nUnused != 0 )
  or ( unused != NULL && !(0 <= nUnused <= BZ_MAX_UNUSED) )
BZ_IO_ERROR
  if ferror(f) is nonzero
BZ_MEM_ERROR
  if insufficient memory is available
BZ_OK
  otherwise.

Possible return values:

Pointer to an abstract BZFILE
  if bzerror is BZ_OK
NULL
  otherwise

Allowable next actions:

BZ2_bzRead
  if bzerror is BZ_OK
BZ2_bzClose
  otherwise

3.4.2.BZ2_bzRead

int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len );

Reads up to len (uncompressed) bytes from the compressed file b into the buffer buf. If the read was successful, bzerror is set to BZ_OK and the number of bytes read is returned. If the logical end-of-stream was detected, bzerror will be set to BZ_STREAM_END, and the number of bytes read is returned. All other bzerror values denote an error.

BZ2_bzRead will supply len bytes, unless the logical stream end is detected or an error occurs. Because of this, it is possible to detect the stream end by observing when the number of bytes returned is less than the number requested. Nevertheless, this is regarded as inadvisable; you should instead check bzerror after every call and watch out for BZ_STREAM_END.

Internally, BZ2_bzRead copies data from the compressed file in chunks of size BZ_MAX_UNUSED bytes before decompressing it. If the file contains more bytes than strictly needed to reach the logical end-of-stream, BZ2_bzRead will almost certainly read some of the trailing data before signalling BZ_SEQUENCE_END. To collect the read but unused data once BZ_SEQUENCE_END has appeared, call BZ2_bzReadGetUnused immediately before BZ2_bzReadClose.

Possible assignments to bzerror:

BZ_PARAM_ERROR
  if b is NULL or buf is NULL or len < 0
BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzWriteOpen
BZ_IO_ERROR
  if there is an error reading from the compressed file
BZ_UNEXPECTED_EOF
  if the compressed file ended before 
  the logical end-of-stream was detected
BZ_DATA_ERROR
  if a data integrity error was detected in the compressed stream
BZ_DATA_ERROR_MAGIC
  if the stream does not begin with the requisite header bytes 
  (ie, is not a bzip2 data file).  This is really 
  a special case of BZ_DATA_ERROR.
BZ_MEM_ERROR
  if insufficient memory was available
BZ_STREAM_END
  if the logical end of stream was detected.
BZ_OK
  otherwise.

Possible return values:

number of bytes read
  if bzerror is BZ_OK or BZ_STREAM_END
undefined
  otherwise

Allowable next actions:

collect data from buf, then BZ2_bzRead or BZ2_bzReadClose
  if bzerror is BZ_OK
collect data from buf, then BZ2_bzReadClose or BZ2_bzReadGetUnused
  if bzerror is BZ_SEQUENCE_END
BZ2_bzReadClose
  otherwise

3.4.3.BZ2_bzReadGetUnused

void BZ2_bzReadGetUnused( int* bzerror, BZFILE *b, 
                          void** unused, int* nUnused );

Returns data which was read from the compressed file but was not needed to get to the logical end-of-stream. *unused is set to the address of the data, and *nUnused to the number of bytes. *nUnused will be set to a value between 0 and BZ_MAX_UNUSED inclusive.

This function may only be called once BZ2_bzRead has signalled BZ_STREAM_END but before BZ2_bzReadClose.

Possible assignments to bzerror:

BZ_PARAM_ERROR
  if b is NULL
  or unused is NULL or nUnused is NULL
BZ_SEQUENCE_ERROR
  if BZ_STREAM_END has not been signalled
  or if b was opened with BZ2_bzWriteOpen
BZ_OK
  otherwise

Allowable next actions:

BZ2_bzReadClose

3.4.4.BZ2_bzReadClose

void BZ2_bzReadClose ( int *bzerror, BZFILE *b );

Releases all memory pertaining to the compressed file b. BZ2_bzReadClose does not call fclose on the underlying file handle, so you should do that yourself if appropriate. BZ2_bzReadClose should be called to clean up after all error situations.

Possible assignments to bzerror:

BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzOpenWrite
BZ_OK
  otherwise

Allowable next actions:

none

3.4.5.BZ2_bzWriteOpen

BZFILE *BZ2_bzWriteOpen( int *bzerror, FILE *f, 
                         int blockSize100k, int verbosity,
                         int workFactor );

Prepare to write compressed data to file handle f. f should refer to a file which has been opened for writing, and for which the error indicator (ferror(f))is not set.

For the meaning of parameters blockSize100k, verbosity and workFactor, see BZ2_bzCompressInit.

All required memory is allocated at this stage, so if the call completes successfully, BZ_MEM_ERROR cannot be signalled by a subsequent call to BZ2_bzWrite.

Possible assignments to bzerror:

BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if f is NULL
  or blockSize100k < 1 or blockSize100k > 9
BZ_IO_ERROR
  if ferror(f) is nonzero
BZ_MEM_ERROR
  if insufficient memory is available
BZ_OK
  otherwise

Possible return values:

Pointer to an abstract BZFILE
  if bzerror is BZ_OK
NULL
  otherwise

Allowable next actions:

BZ2_bzWrite
  if bzerror is BZ_OK
  (you could go directly to BZ2_bzWriteClose, but this would be pretty pointless)
BZ2_bzWriteClose
  otherwise

3.4.6.BZ2_bzWrite

void BZ2_bzWrite ( int *bzerror, BZFILE *b, void *buf, int len );

Absorbs len bytes from the buffer buf, eventually to be compressed and written to the file.

Possible assignments to bzerror:

BZ_PARAM_ERROR
  if b is NULL or buf is NULL or len < 0
BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzReadOpen
BZ_IO_ERROR
  if there is an error writing the compressed file.
BZ_OK
  otherwise

3.4.7.BZ2_bzWriteClose

void BZ2_bzWriteClose( int *bzerror, BZFILE* f,
                       int abandon,
                       unsigned int* nbytes_in,
                       unsigned int* nbytes_out );

void BZ2_bzWriteClose64( int *bzerror, BZFILE* f,
                         int abandon,
                         unsigned int* nbytes_in_lo32,
                         unsigned int* nbytes_in_hi32,
                         unsigned int* nbytes_out_lo32,
                         unsigned int* nbytes_out_hi32 );

Compresses and flushes to the compressed file all data so far supplied by BZ2_bzWrite. The logical end-of-stream markers are also written, so subsequent calls to BZ2_bzWrite are illegal. All memory associated with the compressed file b is released. fflush is called on the compressed file, but it is not fclose'd.

If BZ2_bzWriteClose is called to clean up after an error, the only action is to release the memory. The library records the error codes issued by previous calls, so this situation will be detected automatically. There is no attempt to complete the compression operation, nor to fflush the compressed file. You can force this behaviour to happen even in the case of no error, by passing a nonzero value to abandon.

If nbytes_in is non-null, *nbytes_in will be set to be the total volume of uncompressed data handled. Similarly, nbytes_out will be set to the total volume of compressed data written. For compatibility with older versions of the library, BZ2_bzWriteClose only yields the lower 32 bits of these counts. Use BZ2_bzWriteClose64 if you want the full 64 bit counts. These two functions are otherwise absolutely identical.

Possible assignments to bzerror:

BZ_SEQUENCE_ERROR
  if b was opened with BZ2_bzReadOpen
BZ_IO_ERROR
  if there is an error writing the compressed file
BZ_OK
  otherwise

3.4.8.Handling embedded compressed data streams

The high-level library facilitates use of bzip2 data streams which form some part of a surrounding, larger data stream.

  • For writing, the library takes an open file handle, writes compressed data to it, fflushes it but does not fclose it. The calling application can write its own data before and after the compressed data stream, using that same file handle.

  • Reading is more complex, and the facilities are not as general as they could be since generality is hard to reconcile with efficiency. BZ2_bzRead reads from the compressed file in blocks of size BZ_MAX_UNUSED bytes, and in doing so probably will overshoot the logical end of compressed stream. To recover this data once decompression has ended, call BZ2_bzReadGetUnused after the last call of BZ2_bzRead (the one returning BZ_STREAM_END) but before calling BZ2_bzReadClose.

This mechanism makes it easy to decompress multiple bzip2 streams placed end-to-end. As the end of one stream, when BZ2_bzRead returns BZ_STREAM_END, call BZ2_bzReadGetUnused to collect the unused data (copy it into your own buffer somewhere). That data forms the start of the next compressed stream. To start uncompressing that next stream, call BZ2_bzReadOpen again, feeding in the unused data via the unused / nUnused parameters. Keep doing this until BZ_STREAM_END return coincides with the physical end of file (feof(f)). In this situation BZ2_bzReadGetUnused will of course return no data.

This should give some feel for how the high-level interface can be used. If you require extra flexibility, you'll have to bite the bullet and get to grips with the low-level interface.

3.4.9.Standard file-reading/writing code

Here's how you'd write data to a compressed file:

FILE*   f;
BZFILE* b;
int     nBuf;
char    buf[ /* whatever size you like */ ];
int     bzerror;
int     nWritten;

f = fopen ( "myfile.bz2", "w" );
if ( !f ) {
 /* handle error */
}
b = BZ2_bzWriteOpen( &bzerror, f, 9 );
if (bzerror != BZ_OK) {
 BZ2_bzWriteClose ( b );
 /* handle error */
}

while ( /* condition */ ) {
 /* get data to write into buf, and set nBuf appropriately */
 nWritten = BZ2_bzWrite ( &bzerror, b, buf, nBuf );
 if (bzerror == BZ_IO_ERROR) { 
   BZ2_bzWriteClose ( &bzerror, b );
   /* handle error */
 }
}

BZ2_bzWriteClose( &bzerror, b );
if (bzerror == BZ_IO_ERROR) {
 /* handle error */
}

And to read from a compressed file:

FILE*   f;
BZFILE* b;
int     nBuf;
char    buf[ /* whatever size you like */ ];
int     bzerror;
int     nWritten;

f = fopen ( "myfile.bz2", "r" );
if ( !f ) {
  /* handle error */
}
b = BZ2_bzReadOpen ( &bzerror, f, 0, NULL, 0 );
if ( bzerror != BZ_OK ) {
  BZ2_bzReadClose ( &bzerror, b );
  /* handle error */
}

bzerror = BZ_OK;
while ( bzerror == BZ_OK && /* arbitrary other conditions */) {
  nBuf = BZ2_bzRead ( &bzerror, b, buf, /* size of buf */ );
  if ( bzerror == BZ_OK ) {
    /* do something with buf[0 .. nBuf-1] */
  }
}
if ( bzerror != BZ_STREAM_END ) {
   BZ2_bzReadClose ( &bzerror, b );
   /* handle error */
} else {
   BZ2_bzReadClose ( &bzerror, b );
}

3.5.Utility functions

3.5.1.BZ2_bzBuffToBuffCompress

int BZ2_bzBuffToBuffCompress( char*         dest,
                              unsigned int* destLen,
                              char*         source,
                              unsigned int  sourceLen,
                              int           blockSize100k,
                              int           verbosity,
                              int           workFactor );

Attempts to compress the data in source[0 .. sourceLen-1] into the destination buffer, dest[0 .. *destLen-1]. If the destination buffer is big enough, *destLen is set to the size of the compressed data, and BZ_OK is returned. If the compressed data won't fit, *destLen is unchanged, and BZ_OUTBUFF_FULL is returned.

Compression in this manner is a one-shot event, done with a single call to this function. The resulting compressed data is a complete bzip2 format data stream. There is no mechanism for making additional calls to provide extra input data. If you want that kind of mechanism, use the low-level interface.

For the meaning of parameters blockSize100k, verbosity and workFactor, see BZ2_bzCompressInit.

To guarantee that the compressed data will fit in its buffer, allocate an output buffer of size 1% larger than the uncompressed data, plus six hundred extra bytes.

BZ2_bzBuffToBuffDecompress will not write data at or beyond dest[*destLen], even in case of buffer overflow.

Possible return values:

BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if dest is NULL or destLen is NULL
  or blockSize100k < 1 or blockSize100k > 9
  or verbosity < 0 or verbosity > 4
  or workFactor < 0 or workFactor > 250
BZ_MEM_ERROR
  if insufficient memory is available 
BZ_OUTBUFF_FULL
  if the size of the compressed data exceeds *destLen
BZ_OK
  otherwise

3.5.2.BZ2_bzBuffToBuffDecompress

int BZ2_bzBuffToBuffDecompress( char*         dest,
                                unsigned int* destLen,
                                char*         source,
                                unsigned int  sourceLen,
                                int           small,
                                int           verbosity );

Attempts to decompress the data in source[0 .. sourceLen-1] into the destination buffer, dest[0 .. *destLen-1]. If the destination buffer is big enough, *destLen is set to the size of the uncompressed data, and BZ_OK is returned. If the compressed data won't fit, *destLen is unchanged, and BZ_OUTBUFF_FULL is returned.

source is assumed to hold a complete bzip2 format data stream. BZ2_bzBuffToBuffDecompress tries to decompress the entirety of the stream into the output buffer.

For the meaning of parameters small and verbosity, see BZ2_bzDecompressInit.

Because the compression ratio of the compressed data cannot be known in advance, there is no easy way to guarantee that the output buffer will be big enough. You may of course make arrangements in your code to record the size of the uncompressed data, but such a mechanism is beyond the scope of this library.

BZ2_bzBuffToBuffDecompress will not write data at or beyond dest[*destLen], even in case of buffer overflow.

Possible return values:

BZ_CONFIG_ERROR
  if the library has been mis-compiled
BZ_PARAM_ERROR
  if dest is NULL or destLen is NULL
  or small != 0 && small != 1
  or verbosity < 0 or verbosity > 4
BZ_MEM_ERROR
  if insufficient memory is available 
BZ_OUTBUFF_FULL
  if the size of the compressed data exceeds *destLen
BZ_DATA_ERROR
  if a data integrity error was detected in the compressed data
BZ_DATA_ERROR_MAGIC
  if the compressed data doesn't begin with the right magic bytes
BZ_UNEXPECTED_EOF
  if the compressed data ends unexpectedly
BZ_OK
  otherwise

3.6.zlib compatibility functions

Yoshioka Tsuneo has contributed some functions to give better zlib compatibility. These functions are BZ2_bzopen, BZ2_bzread, BZ2_bzwrite, BZ2_bzflush, BZ2_bzclose, BZ2_bzerror and BZ2_bzlibVersion. These functions are not (yet) officially part of the library. If they break, you get to keep all the pieces. Nevertheless, I think they work ok.

typedef void BZFILE;

const char * BZ2_bzlibVersion ( void );

Returns a string indicating the library version.

BZFILE * BZ2_bzopen  ( const char *path, const char *mode );
BZFILE * BZ2_bzdopen ( int        fd,    const char *mode );

Opens a .bz2 file for reading or writing, using either its name or a pre-existing file descriptor. Analogous to fopen and fdopen.

int BZ2_bzread  ( BZFILE* b, void* buf, int len );
int BZ2_bzwrite ( BZFILE* b, void* buf, int len );

Reads/writes data from/to a previously opened BZFILE. Analogous to fread and fwrite.

int  BZ2_bzflush ( BZFILE* b );
void BZ2_bzclose ( BZFILE* b );

Flushes/closes a BZFILE. BZ2_bzflush doesn't actually do anything. Analogous to fflush and fclose.

const char * BZ2_bzerror ( BZFILE *b, int *errnum )

Returns a string describing the more recent error status of b, and also sets *errnum to its numerical value.

3.7.Using the library in a stdio-free environment

3.7.1.Getting rid of stdio

In a deeply embedded application, you might want to use just the memory-to-memory functions. You can do this conveniently by compiling the library with preprocessor symbol BZ_NO_STDIO defined. Doing this gives you a library containing only the following eight functions:

BZ2_bzCompressInit, BZ2_bzCompress, BZ2_bzCompressEnd BZ2_bzDecompressInit, BZ2_bzDecompress, BZ2_bzDecompressEnd BZ2_bzBuffToBuffCompress, BZ2_bzBuffToBuffDecompress

When compiled like this, all functions will ignore verbosity settings.

3.7.2.Critical error handling

libbzip2 contains a number of internal assertion checks which should, needless to say, never be activated. Nevertheless, if an assertion should fail, behaviour depends on whether or not the library was compiled with BZ_NO_STDIO set.

For a normal compile, an assertion failure yields the message:

bzip2/libbzip2: internal error number N.

This is a bug in bzip2/libbzip2, 1.0.6 of 6 September 2010. Please report it to me at: jseward@bzip.org. If this happened when you were using some program which uses libbzip2 as a component, you should also report this bug to the author(s) of that program. Please make an effort to report this bug; timely and accurate bug reports eventually lead to higher quality software. Thanks. Julian Seward, 6 September 2010.

where N is some error code number. If N == 1007, it also prints some extra text advising the reader that unreliable memory is often associated with internal error 1007. (This is a frequently-observed-phenomenon with versions 1.0.0/1.0.1).

exit(3) is then called.

For a stdio-free library, assertion failures result in a call to a function declared as:

extern void bz_internal_error ( int errcode );

The relevant code is passed as a parameter. You should supply such a function.

In either case, once an assertion failure has occurred, any bz_stream records involved can be regarded as invalid. You should not attempt to resume normal operation with them.

You may, of course, change critical error handling to suit your needs. As I said above, critical errors indicate bugs in the library and should not occur. All "normal" error situations are indicated via error return codes from functions, and can be recovered from.

3.8.Making a Windows DLL

Everything related to Windows has been contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp), so you should send your queries to him (but perhaps Cc: me, jseward@bzip.org).

My vague understanding of what to do is: using Visual C++ 5.0, open the project file libbz2.dsp, and build. That's all.

If you can't open the project file for some reason, make a new one, naming these files: blocksort.c, bzlib.c, compress.c, crctable.c, decompress.c, huffman.c, randtable.c and libbz2.def. You will also need to name the header files bzlib.h and bzlib_private.h.

If you don't use VC++, you may need to define the proprocessor symbol _WIN32.

Finally, dlltest.c is a sample program using the DLL. It has a project file, dlltest.dsp.

If you just want a makefile for Visual C, have a look at makefile.msc.

Be aware that if you compile bzip2 itself on Win32, you must set BZ_UNIX to 0 and BZ_LCCWIN32 to 1, in the file bzip2.c, before compiling. Otherwise the resulting binary won't work correctly.

I haven't tried any of this stuff myself, but it all looks plausible.

4.Miscellanea

These are just some random thoughts of mine. Your mileage may vary.

4.1.Limitations of the compressed file format

bzip2-1.0.X, 0.9.5 and 0.9.0 use exactly the same file format as the original version, bzip2-0.1. This decision was made in the interests of stability. Creating yet another incompatible compressed file format would create further confusion and disruption for users.

Nevertheless, this is not a painless decision. Development work since the release of bzip2-0.1 in August 1997 has shown complexities in the file format which slow down decompression and, in retrospect, are unnecessary. These are:

  • The run-length encoder, which is the first of the compression transformations, is entirely irrelevant. The original purpose was to protect the sorting algorithm from the very worst case input: a string of repeated symbols. But algorithm steps Q6a and Q6b in the original Burrows-Wheeler technical report (SRC-124) show how repeats can be handled without difficulty in block sorting.

  • The randomisation mechanism doesn't really need to be there. Udi Manber and Gene Myers published a suffix array construction algorithm a few years back, which can be employed to sort any block, no matter how repetitive, in O(N log N) time. Subsequent work by Kunihiko Sadakane has produced a derivative O(N (log N)^2) algorithm which usually outperforms the Manber-Myers algorithm.

    I could have changed to Sadakane's algorithm, but I find it to be slower than bzip2's existing algorithm for most inputs, and the randomisation mechanism protects adequately against bad cases. I didn't think it was a good tradeoff to make. Partly this is due to the fact that I was not flooded with email complaints about bzip2-0.1's performance on repetitive data, so perhaps it isn't a problem for real inputs.

    Probably the best long-term solution, and the one I have incorporated into 0.9.5 and above, is to use the existing sorting algorithm initially, and fall back to a O(N (log N)^2) algorithm if the standard algorithm gets into difficulties.

  • The compressed file format was never designed to be handled by a library, and I have had to jump though some hoops to produce an efficient implementation of decompression. It's a bit hairy. Try passing decompress.c through the C preprocessor and you'll see what I mean. Much of this complexity could have been avoided if the compressed size of each block of data was recorded in the data stream.

  • An Adler-32 checksum, rather than a CRC32 checksum, would be faster to compute.

It would be fair to say that the bzip2 format was frozen before I properly and fully understood the performance consequences of doing so.

Improvements which I was able to incorporate into 0.9.0, despite using the same file format, are:

  • Single array implementation of the inverse BWT. This significantly speeds up decompression, presumably because it reduces the number of cache misses.

  • Faster inverse MTF transform for large MTF values. The new implementation is based on the notion of sliding blocks of values.

  • bzip2-0.9.0 now reads and writes files with fread and fwrite; version 0.1 used putc and getc. Duh! Well, you live and learn.

Further ahead, it would be nice to be able to do random access into files. This will require some careful design of compressed file formats.

4.2.Portability issues

After some consideration, I have decided not to use GNU autoconf to configure 0.9.5 or 1.0.

autoconf, admirable and wonderful though it is, mainly assists with portability problems between Unix-like platforms. But bzip2 doesn't have much in the way of portability problems on Unix; most of the difficulties appear when porting to the Mac, or to Microsoft's operating systems. autoconf doesn't help in those cases, and brings in a whole load of new complexity.

Most people should be able to compile the library and program under Unix straight out-of-the-box, so to speak, especially if you have a version of GNU C available.

There are a couple of __inline__ directives in the code. GNU C (gcc) should be able to handle them. If you're not using GNU C, your C compiler shouldn't see them at all. If your compiler does, for some reason, see them and doesn't like them, just #define __inline__ to be /* */. One easy way to do this is to compile with the flag -D__inline__=, which should be understood by most Unix compilers.

If you still have difficulties, try compiling with the macro BZ_STRICT_ANSI defined. This should enable you to build the library in a strictly ANSI compliant environment. Building the program itself like this is dangerous and not supported, since you remove bzip2's checks against compressing directories, symbolic links, devices, and other not-really-a-file entities. This could cause filesystem corruption!

One other thing: if you create a bzip2 binary for public distribution, please consider linking it statically (gcc -static). This avoids all sorts of library-version issues that others may encounter later on.

If you build bzip2 on Win32, you must set BZ_UNIX to 0 and BZ_LCCWIN32 to 1, in the file bzip2.c, before compiling. Otherwise the resulting binary won't work correctly.

4.3.Reporting bugs

I tried pretty hard to make sure bzip2 is bug free, both by design and by testing. Hopefully you'll never need to read this section for real.

Nevertheless, if bzip2 dies with a segmentation fault, a bus error or an internal assertion failure, it will ask you to email me a bug report. Experience from years of feedback of bzip2 users indicates that almost all these problems can be traced to either compiler bugs or hardware problems.

  • Recompile the program with no optimisation, and see if it works. And/or try a different compiler. I heard all sorts of stories about various flavours of GNU C (and other compilers) generating bad code for bzip2, and I've run across two such examples myself.

    2.7.X versions of GNU C are known to generate bad code from time to time, at high optimisation levels. If you get problems, try using the flags -O2 -fomit-frame-pointer -fno-strength-reduce. You should specifically not use -funroll-loops.

    You may notice that the Makefile runs six tests as part of the build process. If the program passes all of these, it's a pretty good (but not 100%) indication that the compiler has done its job correctly.

  • If bzip2 crashes randomly, and the crashes are not repeatable, you may have a flaky memory subsystem. bzip2 really hammers your memory hierarchy, and if it's a bit marginal, you may get these problems. Ditto if your disk or I/O subsystem is slowly failing. Yup, this really does happen.

    Try using a different machine of the same type, and see if you can repeat the problem.

  • This isn't really a bug, but ... If bzip2 tells you your file is corrupted on decompression, and you obtained the file via FTP, there is a possibility that you forgot to tell FTP to do a binary mode transfer. That absolutely will cause the file to be non-decompressible. You'll have to transfer it again.

If you've incorporated libbzip2 into your own program and are getting problems, please, please, please, check that the parameters you are passing in calls to the library, are correct, and in accordance with what the documentation says is allowable. I have tried to make the library robust against such problems, but I'm sure I haven't succeeded.

Finally, if the above comments don't help, you'll have to send me a bug report. Now, it's just amazing how many people will send me a bug report saying something like:

bzip2 crashed with segmentation fault on my machine

and absolutely nothing else. Needless to say, a such a report is totally, utterly, completely and comprehensively 100% useless; a waste of your time, my time, and net bandwidth. With no details at all, there's no way I can possibly begin to figure out what the problem is.

The rules of the game are: facts, facts, facts. Don't omit them because "oh, they won't be relevant". At the bare minimum:

Machine type.  Operating system version.  
Exact version of bzip2 (do bzip2 -V).  
Exact version of the compiler used.  
Flags passed to the compiler.

However, the most important single thing that will help me is the file that you were trying to compress or decompress at the time the problem happened. Without that, my ability to do anything more than speculate about the cause, is limited.

4.4.Did you get the right package?

bzip2 is a resource hog. It soaks up large amounts of CPU cycles and memory. Also, it gives very large latencies. In the worst case, you can feed many megabytes of uncompressed data into the library before getting any compressed output, so this probably rules out applications requiring interactive behaviour.

These aren't faults of my implementation, I hope, but more an intrinsic property of the Burrows-Wheeler transform (unfortunately). Maybe this isn't what you want.

If you want a compressor and/or library which is faster, uses less memory but gets pretty good compression, and has minimal latency, consider Jean-loup Gailly's and Mark Adler's work, zlib-1.2.1 and gzip-1.2.4. Look for them at http://www.zlib.org and http://www.gzip.org respectively.

For something faster and lighter still, you might try Markus F X J Oberhumer's LZO real-time compression/decompression library, at http://www.oberhumer.com/opensource.

4.5.Further Reading

bzip2 is not research work, in the sense that it doesn't present any new ideas. Rather, it's an engineering exercise based on existing ideas.

Four documents describe essentially all the ideas behind bzip2:

MichaelBurrowsandD.J.Wheeler:
"Ablock-sortinglosslessdatacompressionalgorithm"
10thMay1994.
DigitalSRCResearchReport124.
ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.ps.gz
Ifyouhavetroublefindingit,trysearchingatthe
NewZealandDigitalLibrary,http://www.nzdl.org.

DanielS.HirschbergandDebraA.LeLewer
"EfficientDecodingofPrefixCodes"
CommunicationsoftheACM,April1990,Vol33,Number4.
Youmightbeabletogetanelectroniccopyofthis
fromtheACMDigitalLibrary.

DavidJ.Wheeler
Programbred3.candaccompanyingdocumentbred3.ps.
Thiscontainstheideabehindthemulti-tableHuffmancodingscheme.
ftp://ftp.cl.cam.ac.uk/users/djw3/

JonL.BentleyandRobertSedgewick
"FastAlgorithmsforSortingandSearchingStrings"
AvailablefromSedgewick'swebpage,
www.cs.princeton.edu/~rs

The following paper gives valuable additional insights into the algorithm, but is not immediately the basis of any code used in bzip2.

PeterFenwick:
BlockSortingTextCompression
Proceedingsofthe19thAustralasianComputerScienceConference,
Melbourne,Australia.Jan31-Feb2,1996.
ftp://ftp.cs.auckland.ac.nz/pub/peter-f/ACSC96paper.ps

Kunihiko Sadakane's sorting algorithm, mentioned above, is available from:

http://naomi.is.s.u-tokyo.ac.jp/~sada/papers/Sada98b.ps.gz

The Manber-Myers suffix array construction algorithm is described in a paper available from:

http://www.cs.arizona.edu/people/gene/PAPERS/suffix.ps

Finally, the following papers document some investigations I made into the performance of sorting and decompression algorithms:

JulianSeward
OnthePerformanceofBWTSortingAlgorithms
ProceedingsoftheIEEEDataCompressionConference2000
Snowbird,Utah.28-30March2000.

JulianSeward
Space-timeTradeoffsintheInverseB-WTransform
ProceedingsoftheIEEEDataCompressionConference2001
Snowbird,Utah.27-29March2001.

PK};1] manual.pdfnu[PK};1]31_ manual.htmlnu[PK