Merge lp:~fcole90/ubuntu/precise/python-reportlab/fix-for-1005187 into lp:ubuntu/precise/python-reportlab
- Precise (12.04)
- fix-for-1005187
- Merge into precise
Proposed by
fcole90
Status: | Superseded | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~fcole90/ubuntu/precise/python-reportlab/fix-for-1005187 | ||||
Merge into: | lp:ubuntu/precise/python-reportlab | ||||
Diff against target: |
24029 lines (+8641/-4994) 195 files modified
CHANGES.txt (+49/-0) PKG-INFO (+1/-1) debian/README.Debian (+1/-1) debian/changelog (+11/-5) debian/control (+2/-2) debian/copyright (+6/-6) debian/rules (+6/-0) demos/colors/colortest.py (+2/-2) demos/gadflypaper/gfe.py (+2/-2) demos/odyssey/dodyssey.py (+2/-2) demos/odyssey/fodyssey.py (+2/-2) demos/odyssey/odyssey.py (+2/-2) demos/stdfonts/stdfonts.py (+2/-2) demos/tests/testdemos.py (+2/-2) docs/reference/genreference.py (+2/-2) docs/reference/reportlab-reference.pdf (+168/-168) docs/userguide/app_demos.py (+1/-1) docs/userguide/ch1_intro.py (+73/-53) docs/userguide/ch2_graphics.py (+8/-9) docs/userguide/ch2a_fonts.py (+1/-1) docs/userguide/ch3_pdffeatures.py (+1/-1) docs/userguide/ch4_platypus_concepts.py (+1/-1) docs/userguide/ch5_paragraphs.py (+1/-1) docs/userguide/ch6_tables.py (+74/-8) docs/userguide/ch7_custom.py (+1/-1) docs/userguide/genuserguide.py (+2/-2) docs/userguide/graph_charts.py (+245/-64) docs/userguide/graph_concepts.py (+2/-2) docs/userguide/graph_intro.py (+2/-2) docs/userguide/graph_shapes.py (+2/-2) docs/userguide/graph_widgets.py (+2/-2) setup.py (+8/-8) src/reportlab/__init__.py (+13/-9) src/reportlab/graphics/__init__.py (+2/-2) src/reportlab/graphics/barcode/__init__.py (+2/-1) src/reportlab/graphics/barcode/eanbc.py (+18/-11) src/reportlab/graphics/barcode/test.py (+4/-0) src/reportlab/graphics/barcode/usps4s.py (+2/-2) src/reportlab/graphics/barcode/widgets.py (+2/-2) src/reportlab/graphics/charts/__init__.py (+2/-2) src/reportlab/graphics/charts/areas.py (+2/-2) src/reportlab/graphics/charts/axes.py (+100/-45) src/reportlab/graphics/charts/barcharts.py (+111/-24) src/reportlab/graphics/charts/doughnut.py (+69/-25) src/reportlab/graphics/charts/legends.py (+2/-2) src/reportlab/graphics/charts/linecharts.py (+2/-2) src/reportlab/graphics/charts/lineplots.py (+36/-13) src/reportlab/graphics/charts/markers.py (+2/-2) src/reportlab/graphics/charts/piecharts.py (+478/-144) src/reportlab/graphics/charts/textlabels.py (+2/-2) src/reportlab/graphics/charts/utils.py (+70/-21) src/reportlab/graphics/renderPDF.py (+11/-5) src/reportlab/graphics/renderPM.py (+28/-19) src/reportlab/graphics/renderPS.py (+10/-5) src/reportlab/graphics/renderSVG.py (+18/-7) src/reportlab/graphics/renderbase.py (+1/-1) src/reportlab/graphics/shapes.py (+83/-5) src/reportlab/graphics/testdrawings.py (+1/-1) src/reportlab/graphics/testshapes.py (+8/-4) src/reportlab/graphics/widgetbase.py (+2/-2) src/reportlab/graphics/widgets/__init__.py (+2/-2) src/reportlab/graphics/widgets/grids.py (+18/-5) src/reportlab/graphics/widgets/markers.py (+2/-2) src/reportlab/graphics/widgets/signsandsymbols.py (+2/-2) src/reportlab/graphics/widgets/table.py (+2/-2) src/reportlab/lib/PyFontify.py (+2/-2) src/reportlab/lib/__init__.py (+2/-2) src/reportlab/lib/abag.py (+2/-2) src/reportlab/lib/arciv.py (+2/-2) src/reportlab/lib/attrmap.py (+2/-2) src/reportlab/lib/boxstuff.py (+2/-2) src/reportlab/lib/codecharts.py (+1/-1) src/reportlab/lib/colors.py (+47/-48) src/reportlab/lib/corp.py (+2/-2) src/reportlab/lib/enums.py (+2/-2) src/reportlab/lib/extformat.py (+2/-2) src/reportlab/lib/fontfinder.py (+2/-2) src/reportlab/lib/fonts.py (+2/-2) src/reportlab/lib/formatters.py (+2/-2) src/reportlab/lib/geomutils.py (+2/-2) src/reportlab/lib/logger.py (+2/-2) src/reportlab/lib/pagesizes.py (+2/-2) src/reportlab/lib/pdfencrypt.py (+2/-2) src/reportlab/lib/pygments2xpre.py (+2/-3) src/reportlab/lib/randomtext.py (+26/-4) src/reportlab/lib/rltempfile.py (+2/-2) src/reportlab/lib/sequencer.py (+10/-2) src/reportlab/lib/set_ops.py (+2/-2) src/reportlab/lib/styles.py (+33/-3) src/reportlab/lib/testutils.py (+2/-2) src/reportlab/lib/textsplit.py (+72/-35) src/reportlab/lib/units.py (+2/-2) src/reportlab/lib/utils.py (+19/-13) src/reportlab/lib/validators.py (+2/-2) src/reportlab/lib/yaml.py (+2/-2) src/reportlab/pdfbase/__init__.py (+2/-2) src/reportlab/pdfbase/_cidfontdata.py (+2/-2) src/reportlab/pdfbase/_fontdata.py (+2/-2) src/reportlab/pdfbase/cidfonts.py (+2/-2) src/reportlab/pdfbase/pdfdoc.py (+174/-7) src/reportlab/pdfbase/pdfmetrics.py (+2/-2) src/reportlab/pdfbase/pdfutils.py (+2/-2) src/reportlab/pdfbase/ttfonts.py (+2/-2) src/reportlab/pdfgen/__init__.py (+2/-2) src/reportlab/pdfgen/canvas.py (+132/-92) src/reportlab/pdfgen/pathobject.py (+49/-22) src/reportlab/pdfgen/pdfgeom.py (+2/-2) src/reportlab/pdfgen/pdfimages.py (+2/-2) src/reportlab/pdfgen/textobject.py (+16/-5) src/reportlab/platypus/__init__.py (+3/-3) src/reportlab/platypus/doctemplate.py (+18/-6) src/reportlab/platypus/figures.py (+2/-2) src/reportlab/platypus/flowables.py (+544/-17) src/reportlab/platypus/frames.py (+11/-5) src/reportlab/platypus/paragraph.py (+167/-53) src/reportlab/platypus/paraparser.py (+32/-2) src/reportlab/platypus/tableofcontents.py (+2/-2) src/reportlab/platypus/tables.py (+106/-41) src/reportlab/platypus/xpreformatted.py (+4/-2) src/reportlab/rl_config.py (+2/-2) src/rl_addons/renderPM/_renderPM.c (+5/-5) src/rl_addons/renderPM/libart_lgpl/art_svp_ops.c (+28/-1) src/rl_addons/renderPM/libart_lgpl/art_vpath_bpath.c (+13/-2) src/rl_addons/rl_accel/_rl_accel.c (+3/-3) tests/__init__.py (+1/-1) tests/runAll.py (+2/-2) tests/test_charts_textlabels.py (+1/-1) tests/test_crypto_algorithms.py (+2/-2) tests/test_docstrings.py (+1/-1) tests/test_encrypt.py (+2/-2) tests/test_geomutils.py (+2/-2) tests/test_graphics_charts.py (+51/-2) tests/test_graphics_images.py (+1/-1) tests/test_graphics_layout.py (+1/-1) tests/test_graphics_speed.py (+2/-2) tests/test_hello.py (+2/-2) tests/test_images.py (+2/-2) tests/test_invariant.py (+2/-2) tests/test_lib_colors.py (+2/-2) tests/test_lib_sequencer.py (+2/-2) tests/test_lib_utils.py (+2/-2) tests/test_multibyte_chs.py (+1/-1) tests/test_multibyte_cht.py (+1/-1) tests/test_multibyte_jpn.py (+1/-1) tests/test_paragraphs.py (+118/-84) tests/test_pdfbase_pdfmetrics.py (+2/-2) tests/test_pdfbase_pdfutils.py (+2/-2) tests/test_pdfbase_postscript.py (+2/-2) tests/test_pdfencryption.py (+1/-1) tests/test_pdfgen_callback.py (+2/-2) tests/test_pdfgen_general.py (+91/-19) tests/test_pdfgen_links.py (+2/-2) tests/test_pdfgen_overprint.py (+2/-2) tests/test_pdfgen_pagemodes.py (+2/-2) tests/test_pdfgen_pycanvas.py (+2/-2) tests/test_platypus_breaking.py (+2/-2) tests/test_platypus_cjk_wrap.py (+101/-0) tests/test_platypus_general.py (+2/-2) tests/test_platypus_indents.py (+2/-2) tests/test_platypus_index.py (+2/-2) tests/test_platypus_leftright.py (+2/-2) tests/test_platypus_lists.py (+106/-0) tests/test_platypus_paragraphs.py (+83/-3) tests/test_platypus_paraparser.py (+1/-1) tests/test_platypus_pleaseturnover.py (+2/-2) tests/test_platypus_preformatted.py (+218/-0) tests/test_platypus_programming.py (+2/-2) tests/test_platypus_tables.py (+22/-3) tests/test_platypus_toc.py (+70/-4) tests/test_platypus_wrapping.py (+104/-0) tests/test_platypus_xref.py (+2/-2) tests/test_pyfiles.py (+2/-2) tests/test_renderSVG.py (+91/-2) tests/test_source_chars.py (+2/-2) tests/test_utils.py (+2/-2) tests/test_widgetbase_tpc.py (+2/-2) tools/__init__.py (+1/-1) tools/docco/__init__.py (+1/-1) tools/docco/codegrab.py (+1/-1) tools/docco/docpy.py (+1/-1) tools/docco/examples.py (+1/-1) tools/docco/graphdocpy.py (+1/-1) tools/docco/reportlab.graphics.pdf (+4108/-3600) tools/docco/rl_doc_utils.py (+4/-3) tools/docco/rltemplate.py (+4/-4) tools/docco/stylesheet.py (+3/-4) tools/docco/t_parse.py (+1/-1) tools/docco/yaml.py (+1/-1) tools/docco/yaml2pdf.py (+1/-1) tools/pythonpoint/__init__.py (+1/-1) tools/pythonpoint/customshapes.py (+2/-2) tools/pythonpoint/pythonpoint.py (+2/-2) tools/pythonpoint/styles/__init__.py (+1/-1) tools/pythonpoint/styles/horrible.py (+2/-2) tools/pythonpoint/styles/modern.py (+2/-2) |
||||
To merge this branch: | bzr merge lp:~fcole90/ubuntu/precise/python-reportlab/fix-for-1005187 | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu branches | Pending | ||
Review via email: mp+158773@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Unmerged revisions
- 23. By fcole90
-
Edited example and documentation path in README.Debian (LP: #1005187)
- 22. By Matthias Klose
-
New upstream version.
- 21. By Colin Watson
-
Rebuild for new armel compiler default of ARMv5t.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'CHANGES.txt' |
2 | --- CHANGES.txt 2010-12-06 12:45:44 +0000 |
3 | +++ CHANGES.txt 2013-04-14 00:48:45 +0000 |
4 | @@ -8,6 +8,55 @@ |
5 | The contributors lists are in no order and apologies to those accidentally not |
6 | mentioned. If we missed you, please let us know! |
7 | |
8 | +################################################################################# |
9 | +#################### RELEASE 2.6 27/09/2012 ################# |
10 | +################################################################################# |
11 | + |
12 | +This is a minor release focusing mainly on improved documentation. There are a |
13 | +number of minor enhancements, and a larger number of previous-undocumented |
14 | +enhancements which we have documented better. |
15 | + |
16 | + |
17 | +###General changes |
18 | + * Manuals have been reformatted with more pleasing code snippets and tables of |
19 | + contents, and reviewed and expanded |
20 | + |
21 | +###Flowing documents (Platypus): |
22 | + * Added support for HTML-style list objects |
23 | + * Added flexible mechanism for drawing bullets |
24 | + * Allowed XPreformatted objects to use Asian line wrapping |
25 | + * Added an 'autoNextPageTemplate' attribute to PageTemplates. For example you |
26 | + can now set up a 'chapter first page template' which will always be followed |
27 | + by a 'continuation template' on the next page break, saving the programmer from |
28 | + having to issue control flow commands in the story. |
29 | + * added a TopPadder flowable, which will 'wrap' another Flowable and move it |
30 | + to the bottom of the current page. |
31 | + * More helpful error messages when large tables cannot be rendered |
32 | + * Documentation for images within text (test_032_images) |
33 | + * Trailing dots for use on contents pages |
34 | + |
35 | + |
36 | + |
37 | +###Charts and graphics: |
38 | + * Support for UPCA bar codes |
39 | + * We now have a semi-intelligent system for labelling pie charts with |
40 | + callout lines. Thanks to James Martin-Collar, a maths student at Warwick |
41 | + University, who did this as his summer internship. |
42 | + * Axes - added startOffset and endOffset properties; allowed for axis |
43 | + background annotations. |
44 | + * Bar charts - allow more control of z Index (i.e. drawing order of axes and |
45 | + lines) |
46 | + * Pie charts - fixed bugs in 3d appearance |
47 | + * SVG output back end has seen some bugs fixed and now outputs resizeable SVG |
48 | + |
49 | +###Contributors: |
50 | + * Alex Buck |
51 | + * Felix Labrecque <felixl@densi.com> |
52 | + * Peter Johnson <johnson.peter@gmail.com> |
53 | + * James Martin-Collar |
54 | + * Guillaume Francois |
55 | + |
56 | + |
57 | |
58 | ################################################################################# |
59 | #################### RELEASE 2.5 at 18:00 GMT 01/Oct/2010 ################# |
60 | |
61 | === modified file 'PKG-INFO' |
62 | --- PKG-INFO 2010-12-06 12:45:44 +0000 |
63 | +++ PKG-INFO 2013-04-14 00:48:45 +0000 |
64 | @@ -1,7 +1,7 @@ |
65 | |
66 | Metadata-Version: 1.0 |
67 | Name: reportlab |
68 | -Version: 2.5 |
69 | +Version: 2.6 |
70 | Summary: The ReportLab Toolkit |
71 | Home-page: http://www.reportlab.com/ |
72 | Author: Andy Robinson, Robin Becker, the ReportLab team and the community |
73 | |
74 | === modified file 'debian/README.Debian' |
75 | --- debian/README.Debian 2006-02-14 14:38:23 +0000 |
76 | +++ debian/README.Debian 2013-04-14 00:48:45 +0000 |
77 | @@ -6,7 +6,7 @@ |
78 | Python. |
79 | |
80 | Examples and documentation can be found in the python-reportlab-doc package |
81 | -in /usr/share/doc/python-reportlab-doc. |
82 | +in /usr/share/pyshared/reportlab/. |
83 | |
84 | |
85 | 05/22/2000, |
86 | |
87 | === modified file 'debian/changelog' |
88 | --- debian/changelog 2011-12-31 02:12:00 +0000 |
89 | +++ debian/changelog 2013-04-14 00:48:45 +0000 |
90 | @@ -1,8 +1,14 @@ |
91 | -python-reportlab (2.5-1.1build1) precise; urgency=low |
92 | - |
93 | - * Rebuild to drop python2.6 dependencies. |
94 | - |
95 | - -- Matthias Klose <doko@ubuntu.com> Sat, 31 Dec 2011 02:12:00 +0000 |
96 | +python-reportlab (2.6-1ubuntu1) precise; urgency=low |
97 | + |
98 | + * Edited example and documentation path in README.Debian (LP: #1005187) |
99 | + |
100 | + -- Fabio Colella <fcole90@gmail.com> Sun, 14 Apr 2013 02:31:26 +0200 |
101 | + |
102 | +python-reportlab (2.6-1) experimental; urgency=low |
103 | + |
104 | + * New upstream version. |
105 | + |
106 | + -- Matthias Klose <doko@debian.org> Thu, 31 Jan 2013 21:08:28 +0100 |
107 | |
108 | python-reportlab (2.5-1.1) unstable; urgency=low |
109 | |
110 | |
111 | === modified file 'debian/control' |
112 | --- debian/control 2011-04-16 13:00:22 +0000 |
113 | +++ debian/control 2013-04-14 00:48:45 +0000 |
114 | @@ -3,7 +3,7 @@ |
115 | Priority: optional |
116 | Maintainer: Matthias Klose <doko@debian.org> |
117 | Uploaders: Igor Stroh <jenner@debian.org>, Debian Python Modules Team <python-modules-team@lists.alioth.debian.org> |
118 | -Standards-Version: 3.9.1 |
119 | +Standards-Version: 3.9.4 |
120 | XS-Python-Version: >= 2.4 |
121 | Build-Depends: debhelper (>= 5.0.37.1), python-all-dev (>= 2.6.5-9~), python-all-dbg, libart-2.0-dev, libfreetype6-dev, sharutils |
122 | Build-Depends-Indep: python-imaging, python-sphinx |
123 | @@ -37,7 +37,7 @@ |
124 | Package: python-reportlab-doc |
125 | Section: doc |
126 | Architecture: all |
127 | -Depends: ${misc:Depends} |
128 | +Depends: ${misc:Depends}, libjs-underscore |
129 | Suggests: python-reportlab |
130 | Description: Documentation for the ReportLab Python library (PDF format) |
131 | ReportLab is a library that lets you directly create documents in |
132 | |
133 | === modified file 'debian/copyright' |
134 | --- debian/copyright 2010-12-06 12:45:44 +0000 |
135 | +++ debian/copyright 2013-04-14 00:48:45 +0000 |
136 | @@ -71,7 +71,7 @@ |
137 | * |
138 | * You should have received a copy of the GNU Lesser General Public |
139 | * License along with this library; if not, write to the Free Software |
140 | - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
141 | + * if not, see <http://www.gnu.org/licenses/>. |
142 | */ |
143 | |
144 | /* |
145 | @@ -131,8 +131,8 @@ |
146 | Lesser General Public License for more details. |
147 | |
148 | You should have received a copy of the GNU Lesser General Public |
149 | - License along with this package; if not, write to the Free Software |
150 | - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
151 | + License along with this library; if not, write to the Free Software |
152 | + if not, see <http://www.gnu.org/licenses/>. |
153 | |
154 | On Debian systems, the complete text of the GNU Lesser General |
155 | Public License can be found in `/usr/share/common-licenses/LGPL'. |
156 | @@ -152,9 +152,9 @@ |
157 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
158 | GNU General Public License for more details. |
159 | |
160 | - You should have received a copy of the GNU General Public License |
161 | - along with this font; if not, write to the Free Software |
162 | - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
163 | + You should have received a copy of the GNU Lesser General Public |
164 | + License along with this library; if not, write to the Free Software |
165 | + if not, see <http://www.gnu.org/licenses/>. |
166 | |
167 | As a special exception, if you create a document which uses |
168 | this font, and embed this font or unaltered portions of this font into |
169 | |
170 | === modified file 'debian/rules' |
171 | --- debian/rules 2011-04-16 13:00:22 +0000 |
172 | +++ debian/rules 2013-04-14 00:48:45 +0000 |
173 | @@ -11,6 +11,8 @@ |
174 | |
175 | include /usr/share/python/python.mk |
176 | |
177 | +build-arch: build |
178 | +build-indep: build |
179 | build: build-stamp |
180 | build-stamp: $(PYVERS:%=build-python%) $(PYVERS:%=dbg-build-python%) |
181 | touch $@ |
182 | @@ -142,6 +144,10 @@ |
183 | rm -rf debian/python-reportlab-accel-dbg/usr/share/doc/python-reportlab-accel-dbg |
184 | ln -s python-reportlab-accel debian/python-reportlab-accel-dbg/usr/share/doc/python-reportlab-accel-dbg |
185 | |
186 | + rm -f debian/python-reportlab/usr/share/doc/python-reportlab-doc/html/_static/underscore.js |
187 | + dh_link -ppython-reportlab \ |
188 | + /usr/share/javascript/underscore/underscore.js \ |
189 | + /usr/share/doc/python-reportlab-doc/html/_static/underscore.js |
190 | dh_compress -a -X.py -X.pdf -Xodyssey.txt -X.xml |
191 | dh_fixperms -a |
192 | dh_python2 -a |
193 | |
194 | === modified file 'demos/colors/colortest.py' |
195 | --- demos/colors/colortest.py 2008-10-19 23:16:31 +0000 |
196 | +++ demos/colors/colortest.py 2013-04-14 00:48:45 +0000 |
197 | @@ -1,6 +1,6 @@ |
198 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
199 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
200 | #see license.txt for license details |
201 | -__version__='''$Id: colortest.py 3269 2008-09-03 17:22:41Z rgbecker $''' |
202 | +__version__='''$Id: colortest.py 3959 2012-09-27 14:39:39Z robin $''' |
203 | import reportlab.pdfgen.canvas |
204 | from reportlab.lib import colors |
205 | from reportlab.lib.units import inch |
206 | |
207 | === modified file 'demos/gadflypaper/gfe.py' |
208 | --- demos/gadflypaper/gfe.py 2008-10-19 23:16:31 +0000 |
209 | +++ demos/gadflypaper/gfe.py 2013-04-14 00:48:45 +0000 |
210 | @@ -1,7 +1,7 @@ |
211 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
212 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
213 | #see license.txt for license details |
214 | __doc__='' |
215 | -__version__=''' $Id: gfe.py 3269 2008-09-03 17:22:41Z rgbecker $ ''' |
216 | +__version__=''' $Id: gfe.py 3959 2012-09-27 14:39:39Z robin $ ''' |
217 | |
218 | #REPORTLAB_TEST_SCRIPT |
219 | import sys |
220 | |
221 | === modified file 'demos/odyssey/dodyssey.py' |
222 | --- demos/odyssey/dodyssey.py 2010-12-06 12:45:44 +0000 |
223 | +++ demos/odyssey/dodyssey.py 2013-04-14 00:48:45 +0000 |
224 | @@ -1,6 +1,6 @@ |
225 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
226 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
227 | #see license.txt for license details |
228 | -__version__=''' $Id: dodyssey.py 3660 2010-02-08 18:17:33Z damian $ ''' |
229 | +__version__=''' $Id: dodyssey.py 3959 2012-09-27 14:39:39Z robin $ ''' |
230 | __doc__='' |
231 | |
232 | #REPORTLAB_TEST_SCRIPT |
233 | |
234 | === modified file 'demos/odyssey/fodyssey.py' |
235 | --- demos/odyssey/fodyssey.py 2010-12-06 12:45:44 +0000 |
236 | +++ demos/odyssey/fodyssey.py 2013-04-14 00:48:45 +0000 |
237 | @@ -1,6 +1,6 @@ |
238 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
239 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
240 | #see license.txt for license details |
241 | -__version__=''' $Id: fodyssey.py 3660 2010-02-08 18:17:33Z damian $ ''' |
242 | +__version__=''' $Id: fodyssey.py 3959 2012-09-27 14:39:39Z robin $ ''' |
243 | __doc__='' |
244 | |
245 | #REPORTLAB_TEST_SCRIPT |
246 | |
247 | === modified file 'demos/odyssey/odyssey.py' |
248 | --- demos/odyssey/odyssey.py 2008-10-19 23:16:31 +0000 |
249 | +++ demos/odyssey/odyssey.py 2013-04-14 00:48:45 +0000 |
250 | @@ -1,6 +1,6 @@ |
251 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
252 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
253 | #see license.txt for license details |
254 | -__version__=''' $Id: odyssey.py 3271 2008-09-04 12:45:58Z rgbecker $ ''' |
255 | +__version__=''' $Id: odyssey.py 3959 2012-09-27 14:39:39Z robin $ ''' |
256 | ___doc__='' |
257 | #odyssey.py |
258 | # |
259 | |
260 | === modified file 'demos/stdfonts/stdfonts.py' |
261 | --- demos/stdfonts/stdfonts.py 2008-10-19 23:16:31 +0000 |
262 | +++ demos/stdfonts/stdfonts.py 2013-04-14 00:48:45 +0000 |
263 | @@ -1,4 +1,4 @@ |
264 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
265 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
266 | #see license.txt for license details |
267 | __doc__=""" |
268 | This generates tables showing the 14 standard fonts in both |
269 | @@ -9,7 +9,7 @@ |
270 | |
271 | usage: standardfonts.py [dec|hex|oct] |
272 | """ |
273 | -__version__=''' $Id: stdfonts.py 3269 2008-09-03 17:22:41Z rgbecker $ ''' |
274 | +__version__=''' $Id: stdfonts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
275 | import sys |
276 | from reportlab.pdfbase import pdfmetrics |
277 | from reportlab.pdfgen import canvas |
278 | |
279 | === modified file 'demos/tests/testdemos.py' |
280 | --- demos/tests/testdemos.py 2008-10-19 23:16:31 +0000 |
281 | +++ demos/tests/testdemos.py 2013-04-14 00:48:45 +0000 |
282 | @@ -1,8 +1,8 @@ |
283 | #!/bin/env python |
284 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
285 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
286 | #see license.txt for license details |
287 | __doc__='Test all demos' |
288 | -__version__=''' $Id: testdemos.py 3269 2008-09-03 17:22:41Z rgbecker $ ''' |
289 | +__version__=''' $Id: testdemos.py 3959 2012-09-27 14:39:39Z robin $ ''' |
290 | _globals=globals().copy() |
291 | import os, sys |
292 | from reportlab import pdfgen |
293 | |
294 | === modified file 'docs/reference/genreference.py' |
295 | --- docs/reference/genreference.py 2009-02-22 14:19:44 +0000 |
296 | +++ docs/reference/genreference.py 2013-04-14 00:48:45 +0000 |
297 | @@ -1,8 +1,8 @@ |
298 | #!/bin/env python |
299 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
300 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
301 | #see license.txt for license details |
302 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/reference/genreference.py |
303 | -__version__=''' $Id: genreference.py 3376 2009-01-19 12:05:41Z jonas $ ''' |
304 | +__version__=''' $Id: genreference.py 3959 2012-09-27 14:39:39Z robin $ ''' |
305 | __doc__ = """ |
306 | This module contains the script for building the reference. |
307 | """ |
308 | |
309 | === modified file 'docs/reference/reportlab-reference.pdf' |
310 | --- docs/reference/reportlab-reference.pdf 2010-12-06 12:45:44 +0000 |
311 | +++ docs/reference/reportlab-reference.pdf 2013-04-14 00:48:45 +0000 |
312 | @@ -1231,7 +1231,7 @@ |
313 | % 'R71': class PDFInfo |
314 | 71 0 obj |
315 | << /Author (\(anonymous\)) |
316 | - /CreationDate (D:20101206144432+00'00') |
317 | + /CreationDate (D:20130131201657+00'00') |
318 | /Creator (\(unspecified\)) |
319 | /Keywords () |
320 | /Producer (ReportLab PDF Library - www.reportlab.com) |
321 | @@ -1440,7 +1440,7 @@ |
322 | endobj |
323 | % 'Outline.49.7': class OutlineEntryObject |
324 | 94 0 obj |
325 | -<< /Dest [ 44 0 R |
326 | +<< /Dest [ 45 0 R |
327 | /Fit ] |
328 | /Next 95 0 R |
329 | /Parent 86 0 R |
330 | @@ -1458,7 +1458,7 @@ |
331 | endobj |
332 | % 'Outline.49.9': class OutlineEntryObject |
333 | 96 0 obj |
334 | -<< /Dest [ 45 0 R |
335 | +<< /Dest [ 46 0 R |
336 | /Fit ] |
337 | /Next 97 0 R |
338 | /Parent 86 0 R |
339 | @@ -1467,7 +1467,7 @@ |
340 | endobj |
341 | % 'Outline.49.10': class OutlineEntryObject |
342 | 97 0 obj |
343 | -<< /Dest [ 46 0 R |
344 | +<< /Dest [ 47 0 R |
345 | /Fit ] |
346 | /Next 98 0 R |
347 | /Parent 86 0 R |
348 | @@ -1476,7 +1476,7 @@ |
349 | endobj |
350 | % 'Outline.49.11': class OutlineEntryObject |
351 | 98 0 obj |
352 | -<< /Dest [ 46 0 R |
353 | +<< /Dest [ 47 0 R |
354 | /Fit ] |
355 | /Next 99 0 R |
356 | /Parent 86 0 R |
357 | @@ -1485,7 +1485,7 @@ |
358 | endobj |
359 | % 'Outline.49.12': class OutlineEntryObject |
360 | 99 0 obj |
361 | -<< /Dest [ 47 0 R |
362 | +<< /Dest [ 48 0 R |
363 | /Fit ] |
364 | /Next 100 0 R |
365 | /Parent 86 0 R |
366 | @@ -1512,7 +1512,7 @@ |
367 | endobj |
368 | % 'Outline.49.15': class OutlineEntryObject |
369 | 102 0 obj |
370 | -<< /Dest [ 48 0 R |
371 | +<< /Dest [ 49 0 R |
372 | /Fit ] |
373 | /Next 103 0 R |
374 | /Parent 86 0 R |
375 | @@ -1521,7 +1521,7 @@ |
376 | endobj |
377 | % 'Outline.49.16': class OutlineEntryObject |
378 | 103 0 obj |
379 | -<< /Dest [ 53 0 R |
380 | +<< /Dest [ 54 0 R |
381 | /Fit ] |
382 | /Next 104 0 R |
383 | /Parent 86 0 R |
384 | @@ -1548,7 +1548,7 @@ |
385 | endobj |
386 | % 'Outline.49.19': class OutlineEntryObject |
387 | 106 0 obj |
388 | -<< /Dest [ 55 0 R |
389 | +<< /Dest [ 56 0 R |
390 | /Fit ] |
391 | /Next 107 0 R |
392 | /Parent 86 0 R |
393 | @@ -1575,7 +1575,7 @@ |
394 | endobj |
395 | % 'Outline.49.22': class OutlineEntryObject |
396 | 109 0 obj |
397 | -<< /Dest [ 56 0 R |
398 | +<< /Dest [ 57 0 R |
399 | /Fit ] |
400 | /Next 110 0 R |
401 | /Parent 86 0 R |
402 | @@ -1722,9 +1722,9 @@ |
403 | % page stream |
404 | << /Filter [ /ASCII85Decode |
405 | /FlateDecode ] |
406 | - /Length 1186 >> |
407 | + /Length 1176 >> |
408 | stream |
409 | -Gau0Bhf%7-&:P.Os5Dh7%%4/gQFoDhfX_5ZJLo?u4lh;0:Gs#He4;'gpXek)>BZRWF0K,X@+aHdhKRk*G>nVuI?O*Up&OPrGl9gW,_`g^,bO0p?c,\4q:T-<B?:on<feu?=]I%'H6t2^@EC(HcY.rA[q>ke:]$uML&LSpn!;##,g.Z@XuSnZ3,%?T=T`S\Y2C'W1oOTjJGN'?^Ottcd%8<siHdg<.pbOiTBIPcVj"!L:/]*<H'V3QY*:`2O0'(!m784+Nj=IJ`$3m_a<6=lb(3#]YCm(jg^8ZJAs*3VD8P,B<)PQ-RIq!F8dWDf8C9aSRC-]]Tc7!>Dh0>I4h?p@o\8^hNOWlH*gK)&.uH'N(60],Q/@bW#AkLF/u5^Ib2I!rdqqPt*O*rUSiP1R.G)oah$<^CPkf^B3[<.;6rJQ:?#;@2gh,c6h'G$P0S=\jga`bnX#1.f,7+JTOjJiWq>:=(Y7oN$eLLl&l[*kAZh?BAeu-J9b*RpJ5-)qf6tR$qFr1k[[$:ELZ@kLOjm3L*UM#@ApdIk3q,ELS+R6o7pd0'=Ktt_0abf]&MZE7RT,"0CO4iX;@8@%?D?X2eO?hUe0e/4'[b@C`1:6+\6$K8\K+SX<l_fAg4a!sHcq!C%jk'l.32,3q%'j(_jl&cm"?S`o7dT!8;lIDHc3(KuKV:9'%OsqC5&$+#;>s4FdeWoCU@d251m*-n7&WF\W#HUnZ)%*)Mafd_%fRE,^:OXXj6$H&#[K"=m&OSL=J'q7R5[9oS>2pXA,AH5BH>(%Uab9>;p1:@7`oY@CChDZmnn?Ch<7<pgdRq^it-uX%G^/Un0G\%2OnCKDX@PSfO2ki+q9^;2l7guh0<<V*iL;4<l<Yg%0s%g@q^mI>jp\_]Ais/CW,/tBh-CJQ]-l>G?j5qr,OSKL^[M9).D6aE7k#g:BiB0s$!4C0Xq#.,O+D0[c.2KT!\5<"?#l^)F*HQfPFF9&)\S.D_&F?Db$ZC?"oR@aAgY.Gn*8'&!UG9Vh+f%DJ!UNa).!D2G:YN<YV'J78/_M"gUR^G4;7:gP+7H_`W;t"XU.9`m@)8B!bbs%t>mQ4HRFTin1:DI6]D%r1^1O?a;iu=5cRqb2A#rT#R!>1Yh9/OhZ@>%%S,]&q)!emp@rd7aAo=N39Q4(ju7G/0MM!q%A/VoneQFIeF;:J!@D~>endstream |
410 | +Gau0B9lJcU&A9%PJ!aI(_I`Kk;TU@RRb"DV,S#anTZ`K<8m@Lkm-`:3qs->U&uisW,,7G4_QYnY4)`ugR8jLnrIjT_eH*<8i;)+=_?c#'_Sf6C\;"@Jo<Z3Xcb^\\b9:$.I\&36HH1^@(K0Sj1HHYKcci*Hke%11G?tp7duqKWj#ErU;1j(F]i=-_Q14);(#32L$:TXb;#CL9:[mrVg(O5>Sd0AsoI4mFM,'FB3`0GPKN[4dib7=m-&e#[:`1n)9]?V)PXY'e(?(9C$t8'nFu6j@__oeN2X$r5P8)A7jZ_KneacTm2>ZgBD4r&oQ<-nj9P`.Ecj[drf>'c`*L_thl#/FplIE0Y3YVd6fME'-$61QIc@2Rn5GU1[)csnj."blc/[l^ECOcj`G0KH5[I"6ZP+@5$7%(.^Zr()08L+>XWm/!3b?]h1fX\dh![!:/1X@o5DarXh"qh2f+s@\4Zh6Bu<i9,q(=*Dr;Vo82WmTgb),H0SAks!dH;pC./M`;.Ud8($,MQ8U;jG^&/rY7!14+C.LgT6hP><2j%^Jh<NsE=_k7SjAKI>c[$O<oC*u-%qNnNO:?q1[dAckpRO?g5(@h:LI>tKb$b#"583IO4GlkR9F<^5goltC]LFE99"BT3H;K]D(RClgYJb/8jOE-AahK@m;c;l["\`WC<4\=sg_#6c>"T/9*GbeDQ#B^pS[./NHL:#m@4&IR,,RRRK=?dj8%]Km'GK)\+_<u4V?r6hA"DMm28qlV>heuu3QbaP,,?DFBkA,A8EW"%juUb-$1>O-hh7`oZ,.hPB"Dc'ULc!U`BX?>@$EJQtB6EOeU>E[PS>>@Ap*c45I)bfHU;r=m#CH@(4XU!GTN[Bp0Q)qRQEi>gU%.+XblYPF,^+MZPMYBT4G/PSSb0#P'lRHo6BA8\;AD!@=#ZY`O_9,f,11;+!pDm8D]kssEQEHg.Qenn58UK2Y&49NnZAW$"jUS-S!d8V<Z-p8WG%@Z$'BSbM9MVpV,`lUG8,;sb>1fHYksnkh<+3kJ3,4b!RauVF#36Ve,$X2,")jtsc@([4XMa05OHGu/!$.k49W+]ppMUE]&#?G.+L#TWohnY<!e-?_orj2oiq*'ZIO"SNrYD'8_=Be[Y&(B"J(+0.\Std$]9\%VnF9GeK]LsmQgj2,%n)*BZ[W!o=Hs^~>endstream |
411 | endobj |
412 | % 'R120': class PDFStream |
413 | 120 0 obj |
414 | @@ -1749,81 +1749,81 @@ |
415 | % page stream |
416 | << /Filter [ /ASCII85Decode |
417 | /FlateDecode ] |
418 | - /Length 2140 >> |
419 | + /Length 2127 >> |
420 | stream |
421 | -Gau0DgMYb8&:HLqJ!^Eg@Q-%o;N`?<8HJ!`+DmRY[aOfa5d2G6d`*Q!h-F2^d#[X`V5T;`a-S,./5aT]fe^)n6\X%.?g-D-N9FiFp.n!^,O,dgC^4hB^S<admB(lH\&.stDNEN!@F4E_p)p]Tp#E$66Z"U;S4l\3&_gMa^X\:O\"KskCE65%3ae3j%d?lPcfbNq5%<^"<+JEIO,eC_s-`^J&c_;2;&kB;q4i&2b2o,JRG#R)PG'b_Od31M3e,SN-hGONai/-LJ"*OVVbYC2BP9b\L(0#=D.W8^]N`EA-aU@"`3OS[,gm!aL:*+-1:jYkZk//`-Pl#1:.r4+Y]W0p_pZ'"1h<CQ<'I=9mu%rYd!>2ai_hf$+jm7do:SXW`[,q9>bXa/-2KiGM)ODR<K(H@NBeeQY*;b_oqeKa?/AC`Zq"oN[#0P9h4rN!>ee=.?XNEJF-ka0-b?Hnl'32uY*m#4@uo1smf).:h#RFo5l@eZg.?<piUA10:fUhbZL`/HD@r<$P%'R&k;"Q$BQQ_C]TO^daQ`M3M[$#Q>e:.l^TYU<3_-F'3hZ&4Ef%kI\M3kP-'CZbZ6,mQP52-X]OFMYNC?J3,c?Qk2Kf-8,8O<dlioj.Q78.m^9_oVXOEE[?uVHQk&1=^_GKY>Ir;V'FHqK6[Z2\SS)Ca&=`56!T0s.q2016:nspW=oO>k`FP*5f$h)9?6.X:Yq;T*5-!q&?k19bH=&].\@e])eW*>%4615BpYD.J-gAro53dlF^!)69l,Q9`e?70E8(]S48c=<UVpI](daHP>=EV1(GdT1?>0sQ2`>uA62E0,$?(u6qfA-8WMWfY7F,t;W4dOJZO&i_L"RCcjZhtZkA\a^;[ZU)_WnWD$dlRQ[]1lrrIF*WigqB-nT;!6NXCHTD9adO]d)Q8Hb@rO>l;.r0->]kg(e6&4l5nrWtU?FdA9S0_V-o[Ba]%L[?D4*Eh^#G)@(/S^:kB*6XJUD3H$u,c\*UR-J'XbL_<`]"V'EBnF.P;TN_q2<HR<0p2Z^=l,"J;U3;[PN0Ap&FP?j#V4D"I^.["B]#!"m=eToE9q$X:P9*Ae:,.[c(>..Z\Gmqmj=,6]](*_VcpFB7(?JAZC=Vp7g-QM</gMUdGZ\C*oEnqLKGc,c:,-M4"I)Y=fNq,7i/XsYJ!BVo0.9W2>gYd1%PqHH0<:%h`e6u8kDQ9"hY0Vat\5ed\:a%XR1pg7];g'"Yjb"GJIEmjf]S\lW>j>7P4P.I4HVH;*?oUA&[a`%5:T8J=aK4=!''DW*/`@\YHpoX,e6pp4Hm`$oBcdn<D9#]^YG..*=Y@L(RSm(@c;+STUIp.VX-=[dODod3a\1tdO.XeG#_ZFq"<m?3FOgelEJl@<.=l%IjU/hsrhjsgB>k?c.Cs5`/e#5!Zjpg?1+#.],6;Zl!%\%\4?hh_*UL*DTL@NuR$!.J<-nq;^j"6@Kkkk](F!FcUS.(P$:?3W6;IrF2a<Eh)+EfRkZSi:G(`CFM7Q=leC>o\f\b3Xd/"5#BF]B0%1`*Np7Un'9B@DcEY>42anPp7gP(UH'E@APk-nCXph&f:+Y[^t9$&un=6[q:Z]_j=.5)\!Kr=oS>As[C!l_l(#-+YNAg)7C#TRN(/$l8O0]DH9tbCbbr1._4t#J6&C=93(G2?R?EA@8Q[%P*u@L7"h?9JongY49*>oOL(2<M]&:[D?5V$F/o)@2l)JOZ%/W`oA1R4Wcnd@YD%Uf2M?20^1>MYST<,b#E>5(Pi!i1-/;#MhMJ1-;/d_2n9PX_C>$Q_qDXH)EV"?mI*gtP5m<QT*6&YgE4KiaR:g56,.f\\AI\iSb`82!_mfojWXfAUj=60PRGZAc1hW.^h_JNk.f..25'V).<H(A4E:"2q*?3eE@Qq>dAT/)aG9n&BBQCcj,_2)]K*\^B$3k0hUp(?^/U\"]p*I382K3N)a*$<Z,DWg3mQ-#8Jh:eLYT,4.Xm8m-@O#7!B&"W#*@K#.5l?(7bURTq;6@!'K5o.4&Pt"cAFit&U!D*(I$M4P>',d:[.ZH/K3tP_@<bT<P9U4DK^YMVfT)F_g!3$(^*i!Ja*JoLbF=!<DQpA*`dk1FeVnJFhP*V>"[sna$m[b&0;td*?W';*i5iac"u+jq@D`qM5(~>endstream |
422 | +Gau0DgMYb8&:HLqJ!_-&Cc=+";HGs%KA.Y:J2DCY[s9\>XN6[61!+!MQ^.pLj*PAel=0SG7#!"&\MJTpG%R\7g@u'SH^k]HG!WmW$Rq%u@SC2hkgIETH@)p/o5/\!>jNI>W>ci_h;Rl81:oV4T,BZ?-54\Hj@gDq]@6IXc")#'$6-NNT/oiA<G"4$5XR_F(_$4rK=>oa'ra;U3M_S:FR]b/rrE_NJOkqg9:)Y`^<N4J/e@Zqb#h/7`_PcGY=3erbAcq@Y`Z[n<oHt)j[qA:+[3dZ`Mp:$Go])MA#,<'+WI]Q_\.fJ6D\*8jH#6@.i'_UU;r,03fhb<Xt8p%%ct2WDCQ)5.2%nA)WA`2720j8I':'0:3oMhCB$CFP3[+ESemaWfl;lJ:L'X]\9J`%R7ec$M54o5P\PVX.90HY<#6S&7PV"iTmr,:4XrDZZ/7Llr:7_$GM\0ol</Do(7?,=DsTHXc&@!3p_UDiIi]09l_AWdgf-8GaTb_8Q_`sl*J6FA.U>q'Er&sO"c\Me.$`C>V&hY1\EqS@FHgRM`9$`9GXq3*G$5,M?;iHgGq9b$?`QSX85o571tOKipRbN'Bqhk'M4WgNH-jN*?t.'kb0.\QB[&<o;TX,`cA?\4nehl(8lkp<5V<N-^@BfUlTeP95IGX@M;&0BNS\:%i:nR<9W4@80p*Qr8>_^Y<i4mm'j165AhC<k9',B"3gY4GN*BO'3*a`,Qcm:1HVo!IO+ZCI)I<OC7^iJ)&p3j0h%DP1@>"?(,f<s8rZV9iet'iN(%-::AKjng5K<@tpe+i1[D^"0^Up6.i9;BCXt[Fs3ljc]lVo$g77rNgHDG]#8gJ@\AhnSH(;KD*ZZ=M0pi_R[6fK>YOk/.4<&BaOQ#h54*r@'&9i1$+b7,NNf5*eh=q+HLV(jqKb:'`a"BR`/(:BGU9+]))R4,Ym23ZrM!Qm!*W,B&s86_sO6*L)/OTe]fdQ*jFH6i5:9gK6HXcoM!NM9;E\!8g73<t(.U5DTug%'9&FXE[%i%/IU"Ms9#nWZAcLoO#W)f,O<NK#!qMJge\#p:EP0=5`bG[ZM4We9H=8gX'_)F]+=m_/!AI%nDfX(/-;PWmW@p2O1Eimdc,h\%#C>I3$c$<J,P9&@u(^DRo1gOqa)=Gu$'2W"bEja'C*KOtRG`.SJ0"=lP`XhXNBe)U[JT8@Emj"b8>N@Od!O6@*_m$%eo&cW(f9:I'T6$^Eu6V^hBZu\4fK:HSk>g]4rhY-6FP^`4j+rQGlk"Dt$B2DPk5*=a\=ko`EK&:>CcSUmCk\g;2H*s&.f.$thZEprWH6k'SZu;ck6m3!EI_Q0ic))t^hNIIMEFXM(<Vf0fLBZo$XBGU<,&bSh"fDQ;Z[/9q7%G`^^-;Xe\Db&FfW%d$o;GYXMhZ5?:RF(;+Xm!7a6eZW00B`:`IH8XLi+NS2b)$$;Lh2e!@8Y&JODoh8'%&:\UkW.LdZD1T:h9\956h[naQggUJ[G=EH&b48<,FA)/E%^DlCotmKHkCXO_9hWl_$LUa7mdEiH^=?QON9.Z]RmRTPmrlm%HVn^U<9\]X;tWPf!&eRb2r<*V6O=7aMV=5g20\j%LX62q1cK^T9:TW(MA>\'dj<6qA.F#s)sMQ`,T]N1(.r_)p_Yp'S]c[(W>G4-8!&fIUa80<\c027BR:n`'[?oUuU9B".cI%IGAEOrQI7oQBL$[=,XW_h0]9=B'p`A$\V.imed)5IXh$:,W9a9@%d^a=KKXG4sYbQ(1MaV5]+*.Cqf[2=/e+e3l"&:\!7$K".9ddWNZ_5Q/+3INU$ejZgmdnBt;G-Va^Ln3`sWJWFW<[a9=KU6.u^uXrs@1G;uf`^C5Z'!p9[;bShj)0oq48JuQY#!4siMLa$5*TN/@qMH$s/@Gj*;"0oYYPlp2!8a1`WUmm#"V:G^4LG<-H9VFE7$H=K1H(+>'j`:+*m!^o+Nt?-Eaa5SBI@L2P_`Qlb/8?(oQnsZ#-99WN$%Jqk'm_k(fro.g?Te?d.mk"jjg#@,.X.ZhKh'(6Ms*]dDQP%t[*NfAG(d]T,sM!jl;sCSPs1$5$Vg=4['*p#0=2Qr,O%"OY"8>HFZC^2[C7lipl?!UKOnpjetFW-cEug>2Q8)EGB"~>endstream |
423 | endobj |
424 | % 'R123': class PDFStream |
425 | 123 0 obj |
426 | % page stream |
427 | << /Filter [ /ASCII85Decode |
428 | /FlateDecode ] |
429 | - /Length 2191 >> |
430 | + /Length 2177 >> |
431 | stream |
432 | -Gau0DCN%tI')c^`s']<n_FbrWU)oU?+Lm6T"t<BEDCPeVKn5-s3KghJ\BOBhZL[=.Ak>jA@U$:f8s&i%SXDVsF(U^mp$dsYJ$L90SC.r:@uC.?SPqY0L,Aj_I[V<"I5sKKl`oIVN<eKW34YDacLK;3Xt7nY>q,5&]i%lO+8*KI]/W!+_!SeN3Q2Yo\:T_q9glrGRYZ^DXRq_r:EmhJ7+3H;F'@l\$Vsad%92OZA_DfM9Q"Rq3U*(3P$cW/0:KVP:25r4`OR?.\14&9OaL5@3mf#??n#=*'2GNK3aY]uhMW;..F`rT,KMO'a651Q[O`>K2:;-&+S+92T_/-/q+F$<OWYd&N:%oWpnU$-r<o0'.DNO`36p[<YMMBU`;)hTlMm'>q8C"S\KaOabAIWRr0#:j02=Y-,_k7q0Ie(sonHAFed[Ln=VVh3d9J=sbcVsjbm(a')7/HPbKSZDQj[]B8PI]kJGmhH>&0s95J@r9^K*[Cm_"-9T*AjhH?m"acSJM6o9Et"FSE5qV9RcO?6>0dBQAWa/u%rM\]D[cSVsAWX.?/3EGe=D.:pXSR+09C3C]E^OFbNg1PaF"p*-ZVrol:l+aX.ijBje!#4ECJj*0+q&\kpYNqhE>E?+E>!n-b'9\Gm0N>!psBp=kUQGH`qP);+h9+-0k3@-$Hemq_s%?-o;X`jcYmK_(*S!C9<+,n`W@>r@;5i2"-Mfd0.YIFGMme"gX]mbC9hM:1UiW.tb*6E>6,K-1h#;iQe\[O&4PuMVkDR1#cdZ0X<Jt==Qd<PT[]K6,EG;Em;ddoVH]d^OWn_=LDbdDqIqT#6.4+/HknR84W)EbkRQT@o.(Cc>TSWo\sH%>YcQ10#;IOU80HDk"D,EA=\i=4q?O2ahp`'Ba'BoNio_(F&)5p<lVEWgbi#`[FCJYt!(L06R1.SHp@$,a^SP3Z9[_4Y*H;X6[F^d(1%Bni'c[i36VlW9'.Kk4=CaYUL/]uUX6+I-kg+U1["4KDu:U#TN#DKq/b0YY-SLh*,CQrQB\-LlI9bE8OL#&n!NZ.+UT'J%LP)+:IArRD8+l<WEnLmZu^=Vc;n^i^lMMC\##2a0S/,g0RXW<0@4X!*t>k7sDte]:]<4ImD._;LF)3:CdtL-<Xu-%9O(6Xq0#plYJ6H*@1g^4@H$5+8#9%7L%UCY[-YoU4#DMBH.f:\e'jMqg++*tQ<M_hb`c*(Tr4M-qh2R92r>\2GKm6i_!jn<+ElM_4SPTqSnpldo+LWo1_>`0oYI[nZXOM<H1GTpY*.QL+nUc<6;u909X8PQm163,<i,=>NmiPp.[e8J?Wn$tqp+c3APgREfU>2>YS^"/LNoG^dP8"Cm-q:0k2*&P8!GfPofL.[2BkRuKldlnBClE'kd72dq=?0QQ:ik+l7$Sk@S&qn&&&Bf)asgiSDZT5G!"]oNOfSigm`<i6\_i=?B:UD0%60j-QJ2tuI+&IM.LJI(sa*G5m,$i\8k/8GD6QLU6B$%sO6fWZau8_=K1APaSAAuon);61bmJ1B[iSb0MgSl@e[#2RF'^pem%2>cEF7.4"Uj??Qr"d-'q_*:AE/34A9:ZP"6e4&7G=Pu4bi$+Yt&>Od+#nO4:i6;&pi?&+ZBAl'0`hoG]huYF3k&bT:&]]Ire!@6m!R`&DiH#2!fs^n0;SuL-m#m&U=op2`[G:5iI]=YmKN+(.D1%^QbPc%afEp'(W9UpJFGk18njURm'O5jrPZ%!FrWYGl>%:$)'ZPGQK_Ca<d=:s8"C\h1\WL6]J8?Hr&1]3pYj6gjEX$e'7kstH9j&B&^&RNcn&(qZqDZ!k7,&u&9$Z8m'1OG.<!S>+73:7RgK7Xa/DIpNMhcqODeC,0EFk=B\qQ8c,]#f)E<r$!:1\1E'J2c(,cOb0N\$b+a.f8"PRBUj=f)SIq]P<&?J[p7LD[%80.+9+jPg/Qj2"%MOrf0TX:e]?!ua0,eDQlF9t6Q]=WO.7ZhU>dIFa@soW!3&<'qte[L\ZqBZOLne)RZK9R-t1(@7l+7*,Y^LONFQ;8%!ABC&i8N'[lKrnasM@W4SP0>&.gDdNm\FH?;U^::+>)&@<XYn5&2C.@ZpIKmX?&@=m8Ae20.*KN\QpLVu",?(qI8EUAcXdifYE!*+YbK29roim[rNV\:+57YQqHPud2:L/H*N8ep3>(us`,Q0'N^0*?7+8lZ>/*\_~>endstream |
433 | +Gau0DIrF("&H+gY^;D,0&@ZU8s0bk!(`I3Z#8CIp)FZ^j(hi/MZ^+%FUuJnVId\[f[[T*KJi/*29BI6:+7J&,h51tegYk;%&m^I\f@OkSGA'+8Ft`..pauG!5!JghI+5==%S&ABpS6='Hj#r!UL,W*:Q8X0ml@pX<ZN9i_GE<U5(^\3?$AQ]LrN*30Vjh)0Tu=Be:9D*b*ATgaVTtcFSYh"9AKI\mRV!9X"<CG2#]i%k5iod[ik?I;<P3G=uE&R4sIjN_Gcom9P7kLnQ-1?l*O#@03_.S^MI1=HZ;9?p)k89JYD[KE$n*CfbZPfTP8/oc,g&$<GW8,[s&ZuR0q!V#%,7e;Fs3SZ83i81e!-rAf?'4p]GU4\E.&PQ/(93``>/>r<19XBsonVD:"9o9a=b4DS!@;Fjn79GA%csUZ)4jV\]@P`J)!;>%s%7QnqH2@;2UB3MY5;hO9[LUVZL!d"\*`&[02*QHCi:(otCPN(Q#s/pQ1tbGk%tqJ#isF-E1[?`X_mfcN\ss,Y9%A0]$acj)H\B:cb9R4GscP;V[&@$#OgY87o/O0dG`I,7#;elNMtd_bSs^#%gE8pT\j,c9;14T4pJT@8Q-g`J^S;Z#8l.)ptd'$*L9j&I=4kB.R(]m9meHh?Jn`50?#9/Y_]Bc15uhKWZqe7+Gh@_CP8.tW@C1*;2VZ"kLQTNA\FGVpZ><(0t@9*8('alP!a5[;ReEYo#$OBup)c'=_4"q%t51Rm?E25;;/H<0oA=E\MHH-2`-2<e7UJ:LV-hM)kZ$D5csem,:S`aut:A;9X9j4YgV(s]2aCOj@PW@UPseh2M0X7Ef]*MHS\(/Yi`f&6@E$+.:pK8)'h18cKK#<,;`d+O@_;6@Og1B]s*&)^%@n<I2ehkWCga^eV,Y?8;!21"G\Vkh>*,@/(eP2fI6@4*(1G]`,@jN#AXm8"3$$jlUPA:/&5ddKK^-H:D=I*b[miV[,JIl!A5"60mU5c=K9U$_K,;<L[t(lNj_Q4Z,p<tOd4J/'8Q:9iNmeqB1$;oY1m/F'6:(-Lq>EU#OED&n)A&:F[:'UFc^frhU;),$.NP1536i%#)YMI+9Q9U+F+&XA$F$,j[^1Lu`V6!dKiZO4Ei;96*470Rl0I_hNZYbEkMY$S-<,f^s@3-/XG8sS.7UJWM,/7$\%XXPOZRPNpNRo%+p!)CBkB8L0$ai$J^)paLuPX1d6&`MbmcDUQP+QUZ)Z".uT8fcd8!8!FoFtJfPPC'QIHU]D3V$8-rbB9?2aXm'3/(/Me(pT$<CeYH\&]7d8ThhD#==cfPkqlso]c4r5@2i%^S=u-I'E9G9Ji);h>OE7$XXW)2IWlCOX2KP!pZ7]-aB7-"5C&&93YA/8nt:-jU@/jKFIa"gdC'`L&Ip0L]L%0*X4tPL"E)N%HYeX863Y17<a=?8ED7"b62$K_Y^c`BG<kq*P('j=5F'i>\)VYWU),m$b8DeE\)"bO4d:OtMG47<(fl+#1DcQh?&GYRC3[397k1")]JmZ,j(feAhdeAg6/obUaE(iS'LM\TVTaP[-3Rb%n?M[oMLZZkk&;h"l>Z"g5ktP4e;i8TlR$2B)mt.Lf&+).Xn+?[Z<5j@X\6sa^G2LJYKMhm]HRk%r3@oV=IL9pZ?9?g`uerCgu9Y]XWY(QM2_WbU_nl[\S@@*"&cK?AWro&>r].b2Jao_W`Zg),FkVlGC4r#p3HE&rSq=D0t!Oi2^BoaGs&M%iTTfeSKCc\W'lqPTLQ(N20A#1#_VR*lfpcb&l(Z+7Up`^Ul;X)'9Al)#ANEcTd0Fh/Se:TJrgjsBc'^QU%G%Nel,PO9[XgAed8+56E0EDf'WHiUO?TX_p'No1=Vj^%#k=IiS^sLFmhL-Kq_2u"RtZZaVUp#S"@FVB^eGB-+I)0pPZhaHQ.b350Vj<'PTn86g`_CMe.VuN:"C2VJrM6nt"F74b[7/KFWm6#k]d3cco1j1#^h"c7!L+cMsE/n!Ab7NQ<\iS&(1&-Wn#fi]JG_E"d:6Q5+/CFE:&9:83%`\+pP!!d:R!$9nT82Eq610Ke^KnGKqX&FeJ"cVdm%WX6AMr"Fdu8qgR&44ZP#mBGIim/+$'8#dn5SkNc0UW!A6_?ER2Y+Mec]_^`(8c;CCl3r<Ol<-_$p87/7H;T#38*k2TBui;gqVNloNfX/A)/S&G~>endstream |
434 | endobj |
435 | % 'R124': class PDFStream |
436 | 124 0 obj |
437 | % page stream |
438 | << /Filter [ /ASCII85Decode |
439 | /FlateDecode ] |
440 | - /Length 2347 >> |
441 | + /Length 2320 >> |
442 | stream |
443 | -Gau0DD/\/u')ldas'Zi(@&HN$'(tMiq2k6;2Ls2P[X]E<^(2`7q%AlrAp:5@J)=m^79MMpV^_$J306]!ln^HD4>Y/(%Ie<"rf8S(pC$iV_iTTb/Q*LI__E`\kblDqfpD<:iU5CPS7[sV31+(!Z0(uN+.oo6Q*,eJ1AN3&3'S@l7s0!(#(shl*oWV)'fMH+SF+YupC1C@5)Dr^;'03.rmJkC%B(&-]RTnB2(_#@id1pipZFN5o3"'P<ZIk`9h+*k6^^)kdMb]/fF%TS\)h6PC5Q5tASk!r;@?^-RZ,cp<+1Q@s-sVt=le!a2n<\HKOeM4W@8W68P:LJG-n2Z6B.;36FE]G;JV.Nl`BJ*/S.u4*"WIpOCXpOpOJL*8o/KkDlFFOlB(4>8qj+Y:p"Q[>5,8*A/L4V.N+>H8T&"j34II-=gD<b$6taRmn1o,pL'`7R[;\I@=js_X4k]*6C%D>]?"Pe1jK\&SfqSE4a]9-ZRD@Cn!OC@n&chA7..-GoK1K<!nmjs:'B&\.qO4SKmrnKI.]?DNlTUe`sF(^>\Zcbpb*aHTV?Gq89hA7I%\qT)bV"+"l3O;&B]":iM@BA71;Z@^HToh(hqB\)J'8BqH^t0=kG)?<<;5!g4[-RhC1id[7EHeS`B!$M^$=rQ/EY)HHiCrC9nn?P]!Ni`^M1G_\FME<b#.<Q%N)GeP^/"<!@r$b?W41k>Z6%e]pokDG/ZhV82L9gMZaOjOF7(;!U#06#^h8N"s3_P#Cee1tW1?l*eMs7CargDbJ#f^UB);QZdaF7K.nh(Ob$#C5j.^%"%0o,Q-_m^.=L%#jFgX#Hh?;lC#80GIJ^,<c?jeDY5X?1Q6q5GS3\_a)9mX%8@j<:>DXbFR7<'0Si3YE&'Sjm/D#fR>/'DrTb9fT=RT.c+oK%Qi0Hu/rel)9(f.j,LQb''S\uS-'OPSdOCMj.cLM%?VmiYK^[VFk[nj/T,eBl/o=<3]]G%%>&iir'Wl@D@NR;@D;*Ab(8d_A[3JkWFsRF6V-m78:f:hXKb/42C2$MR!A.OQkf1>?HT$:"@$fLMkkKqN#fTj@JX.L/TN%u7R6l8b7)1<Jce9Ru4iYcj"^-tL.Ff=d_/OF:a0aqPdt%;#UlS$`E;k?LoH0X*SX/n?-1^H,W9(4^q<7\ODp9$73DW=UQZK@Fq]apJInG?)g^`S*')`t,OS\\i3c/oa5u^im]c&e*<0oJmC1^NR[EZF4frs)imtC\OS!IB:rPqN@ZAX"E5J#4FMo=a1liAr,qnhbk--V#AHF0msht9UUj3"X94F=d?J<o0VQ8htBm6uEm[7nm/@5P`j9u"4lcVBIU5*_Wrk9\'i\UH%tJmqR"cN)-e>$@0=c`l1c?1k*!k,P29k*<:GWZ1=ZQ[.V^&N5H'rLLe-Sa/^aj*7lc%=_\?>fi9eA^/[]gIVpGiE!Yse'R"K,:#3l5B$%eBkYU$`H5E9A@b>1+F>YX24VP/#:%?#VL)Aua#_@&n=D=/s&dLN@O:?U!U`,2*U1b?Et$dZ'H>-rLY9p./<'jtJ`N(`$pt21<V5sXIkp@Xqo_eH@/B9&8W&Q=(9K.HNDdLCZcS-\HI<(kW&"EqOiF-W(('J1[J?`T);hXq`X(uEKZ>3VP"j[f;!V:saNnT;9uDGXJ-:4WR(E&X;6Qe(`j[lcKdE?qA,FN\@iJ32/7r%q4["?s&d)5;(N$3go27o3?.\2(WO:1i_k$]ri!PfVQ!+;$3CZAVh7")&2_:8_Jr\uYF42.^N$ga^_nsHJB>L0NB&:7PI3A$\B!$Er6`:q]&/i!81?3m8(Ip&lKBmn?i[110:9Fof,M4@bJ8*_sKfpQ;gD@1,),+V%^:->AVj/Z7>[QNiQ1#%".(I[3:6YJ2$L-m2I0'd=_H@O"6W#^'j7%m%T0X"lj$>AZK&LC#^[(n\G.;sjX4ZD;hJH>;IScnGJ8mjQlnQ#-!r?'k_:\]-&$Ena]@f"5I_Q*a?X\F*)c_;g__=!:S3$BA.bB()Ylls(<hq,`]V3BsL"W>HI9Gi*q/m>oe;_r56\PHN.MC)?&MI]CH]FscYrVJ%pWDE.5lH85@Z'o@#(/<F:kfG=AA5E%-G2Qn0]S7BKB'f91rRG1&tA5_E)!L:l>su:_/75G.'XHuCKsM@7cL@YrAhsLK('s4RRRY?*U\uG'QElW%S$Yold4qJql1/qn;6+&G)s#Ra6rBP;2o6KE:9a"mL@]4s.2Y9_Z]-L*OP=Z>KMo^LaBb3oFVd20l.p[aKsFW_(;*N-I\kN['NVeA_88B#/6OLfq<`OfV+kiDn_][/"/l$0Ub"3]5&_K4kVHVO2KojUWUN7NgH@t<7>Jte+q[h_MFj\~>endstream |
444 | +Gau0D?#SK='n&%!s)8pMYg_$*M>D=E4=&\+2F+K;D#sN1pL,<W7E-U.4#=7FJ)>>9LpA!mG-aGF=:g7Xqg%V?G;uB!reC!WWe`hkkbh3D)CDi4BK2$m[.lu&/C)T@3'SAMSt4,?2P.q1r-FAdk@];CC3=-)V7bFE=(TqXfg$Udlgln<m.QF9F<+.k;*i0[k,_u4cWS(1m67#6/8;(4[;&Y#b3)2f51d.s[F^J29GT6bCN]#YD,lc9/,,>Fhe;Ph-UH$.YN'Mg*V`^^LX@dss/6G1@Z/ol8`,/"B4C[lZ<5^>^%Jh4f6<QVQWZ_;&T&b%-R*;_#NL<ZQ$rZZIWP8Wh2?GO#*U.<'<t:lM+;%R%p8$d+[g,fWF.9F&Ep4"cI5406$J[8P/3Rrp<j9PX-M<1md33Dc[rmhbTJK<;e'(k$cq*LloPON7(3Z+Q(uC0QblsZLm]$XDp),>)N7_93qlSh2.0lOCpc.f3enrVW(Q`_W)W!ecqus*.oWmAQrUWG;Hjs"WaS6-AZW!;F/JV,[?Es1(B]u7-d+?\=@)=t+%4rp,E1+H<h=@)TMNQ7@4E8VY/rQJ"]_u_Z-cCNb9k;./%Ar5[VV:Rr/?L3M;8trf]Qj62*Y/cmQI!<IASYqj"Fm<@a%!O<%R^\IJIio+MTZ"hXtdZ(@W1gd:bY!VR'bkn[Y7;io/t:9c>D"mT^3rA2K;oe)T3N0#s/i4Ib6AIGt1)Rmb@,-s>ZC+3Dg)dAhNKpKIpN'%Bf>%].\a:8G`7F")hf(/Xjb<jk`uY.r,:3^l)ViWKH)8R#,n+M"5+24XMI6Q<+?kQ)kqBa:8qEr?tq"DG3rPopX)!E!Q!BsB9QLk)PVC59B[B\E502tkeUP6iE!RL1eMa5=j*0Xe7\ZrF)Qb,hR1PX]f_80BT]:YI"J4LUgB.e5&8=.0S#K$DD3UU-8Ebehkr.=HS,Lo:7h9)i%-m51Y@-IqR76S6'mk2XS]:NatAS9selF<:4$?f[9`T<UX![mPJ]7)/$qV#I+m:V.Tc:fUNj^kN:8<O-4?bNLFl[d1]@lkbQO:P=0]&A/SOc]q]"0'3=EFJ7S+WQumW&NH!O_X=-rmQUP2>1eFNqk-/mjnKdK:A+T">)$Y`=1PU)03/mmAb(/kM4@:i1m=\FqI1p7D;lk_93f6Z.Rc(ZjYn#LW;3MCFfd-$NE`;[Iobe*Gb]O/ZJH]L>A403:3\.>"_+a?.6c\#?5+Ib-X4k.2e(_S.G7U3b^$X/3SAs>gr_Q@)Z!Z6RPaamDe-e^Zt,&'3%k^r?"B<9q!(E,C,cCA#:%>hVL'hcZN(jt4oe(IO3)3D4Qng=K6toI8,>%jNe,rSi_f<_iHFf$;kq6@TR#]3_bbne'n(KISrEQDrQh>^Ql4CtP8*:hHaL)C'kP&1PKB;)5?WY8eS?!MOiF9[('t7Hp%WaYN8I]&0nObj_IFp6P$Qg!@-_""Oe7D71`cJ`'+u91@d5GiMs:Oa]aO4%VQf\sl[6GbGA-#NLrjI=DGO'$Q,Wfi_F<A9g:`_I@b5J-ASCIU`Gm7i'"C96CGLt/+ie7edX=crQ!pq&)t7NIM4<Q[osk'ImY=5e$dXDfac*l\!J`qu=j((EJqm_mC-XOn'kPAc2\JW]C56pq)0$<r>>D>Zkqg\amU=SO)[h"IYhc"?6c^Bb/b$ILoclVuZGlYE8$..L34=DX9e2_:oV'7"IC[\J!ffJ'@K!.)L1_JIEW81XP%Zt6`^r!,:%<`3+$k\G&Qb[cLqVQGm)#Dh2_[]0%C=+5.Z*@j$t=@h*Y5En$+nk(ol7_OqQHQaa$ruLehDbO-Duke^Zc3"G<>oNNYs:&#OglUF^__XV(ZW]7)(JhK&&EB4c@[:+,UbO7)VaSd@S.<-T5BtA-hi%4J:ZK<&)>g7g$O;.Po!O#lUN011C,8KFs"#3uecSV]e5NPu+bJ_)8dnVN7-q#>rNl.'XL!CS[d\,&pTRi>a,NTE5G"VU<P0L\mhl"hS7&P9Yb,Fm*Z]I'n_Tpe:0+\Z`EaA#sjjMM50KEl68>BkotI>=j'`\38:.JdGXAXbm#R;d(NLL`eiXoe%#oH_`$K\R/!?q'`d`[LDsf)b*N"h+.gEIN$D+-S_A:%FiO"NH,MOd$1XW9LD-j(Lan&FYoOmo,ET0+-!itr5@?`4_\g/MuRqW%!dI_U>\Ao?mXY+Wrkes"9r2QF.QF+md`h'=MLd\IJEXV1m6h5FO13*gH?V%in7itI4iEpN)D7f-I(*IZtl!;-lC&hPZ%hK_m$D?8MZ0eR0_QLQ#ums>r!MB_^W>)P*tk2/&Qf3S_J78p0T1_U7M~>endstream |
445 | endobj |
446 | % 'R125': class PDFStream |
447 | 125 0 obj |
448 | % page stream |
449 | << /Filter [ /ASCII85Decode |
450 | /FlateDecode ] |
451 | - /Length 2341 >> |
452 | + /Length 2296 >> |
453 | stream |
454 | -Gau0DgMZ%2&q(:PJ)JKol%W5SbOKEc5pJJ)!J235A/!9nJ,q6!2CB3<-)ikqYMW9SjBV&[PG$Z]*8.3H<Muil<O'krq!3_0]OL6b1\QmQ53lit<jM^-HH'R3YlDq-O8a?Ne8Ns!-Ytcdda;Sd_)',%J%N.`1q)E#MrL10IXKWQ9C:a6#QhX$"s]H,"t;rAfOW2Q[)XG_ck`O\I9i,>[_`@J+>-nNEdu!?1e]qgZ].MC?OFeq^,-Vk9J*>QZ^beh(T_VN@,?9?ZTm.0o92]X,KhrKRMD#$?O4^-dPRt3V=[GrDh?JmHk;BL*`Hb2]-U\0Y`TS?q_4cK1M(g>1eO1$e-kuc<?iLUjS+a:>#U+Y[D>$:bI?Q[YIUWImMri#X]=E68U^_t(B9*^<h.rnqIfQTMatCG?I9]t@S;+CU*V@g[r8Hi[)gW@G4%;AWeDjHUO9G4h""Y%Ph%]W5aH5')ReYZduE0Q;Yl:&NhGHJ`Rg-SND^,Y(fsuNDAi0L,]DrXmZ"91D.gaF0g<lY1b$m'D@ne:(<.%^4S#LQ_F8IK60]TD1qml*Q:P1*SH#?:b(\2li"D?VZsN2(l$'8j4`I]SFbO$OXsi@o\5@,ILFdTm*keeHX#;(rfP2l,jjr"YZI*F3S2Z+YdCJJJ^&E>7!*4]r)rIIlmAa=.opU//$(#O$]S^#="IY4a3aRXc8^iZ+aW0RQ65[c[Z7H"tI&K_6WMnX]QLL0'Io4icj@Uo@X?\\`e<&7,B(EU>&4<1ShM<:H(0JGYr<)JsK]9IK*=33;7,1@d?sC4IKm!eGh[!NobKTl[n:o\X%C-e1F9#N12&l/q%R:55:IZrsS@%@'!O1b*C)$3K/9Ya;O^_L8V,);i`0G5*=$b`0=m1\R,s_R!$f27fk7m6c"))KE7O*Lj&@ge?-6fMC`5O;V07_Ve+Q>N>L)dKaaHYdb?kBgIGDk=aC"dne^%^/9*CXifDK@maj0_I&VbX0GM&o4?A$Si@4G@.6rsEL8Q9m3i52Pb(X;uHCr/rQXP)]P5kL@&kd^*bSAfiF3P@3.*3d*$FGr:Fmh0E7hCkZ]nMNu]:_ej+VZ58)`$7Mu'(H_?//5\H>IUEAh*Qf>B<YEmq.:Ze3%>@XY^p1NZ]H+!cSdW1?MQ-g2,d(_7MS&bFW#D%&!mDCOZri0g&@$#N"PSBP+1P9tY!ah8n:l37&K/!=(ER;ti+9chGU,9aOUX`JoC,Gp[K8P'!:;8gB^D2YS5VRo?+EHd&NNHb/%u5U:/P]@&LE27m(]JV!9)Vl8[T;aRqD(M%6>QS7;FATP3`V-$Zs!s^q/UWJ1.6P$JH0lr^J.S.?Wmiq38A62h_rAW>iGa)7_Zdn@_<OJtJZC6hP11*(].sIQouBIj0*A]dJlE\R0LdbiqJ]6"TK'Gs<H:Wq5)@g`&pW+)3"7Oa1<-<?'23fbT.A<`Z(?MCf)k;=)nLdSD5T"L8sR\m'(bllC,-#m9F;F9>+]0sKJ"gd^>uZh&Y$*7a#@)7-.#h`3G[,:\O4!eQKk'k:)G!T8Fo0H.Tn;;[&apOI-8IXaPo)7h`Y@]/7=DYRqJ`.9H[A0729h?;L?.VuDT55Z2EiZLq.nb[Cc0MDM/R$`60c_c>UZl]PB&5('uD7Y`tnC/B.@tt$:qq3LCL*$c!iLoM"G4?A`8?4-&/1CbclgV%%Q#Rs5!?W4ZPh;POk-)d_=D[G$@H4qKpF0&RI*.Up7\?bqVbW/IoY>/:k'_`'Jd/a"Up(XnmlDOI,8_[OdK0"OI<@hcf3m*\FUK^C%4K`;8p&306/RIGI:MCVo@_G,R.f]?f'iQf4;,68KU`l<LSCM-q%u%d^C_0SC590V<-"`J*'q7=k0csk7jfIb+^gg<NATKWMf1;f-r(F$RcXih)@(IW)As>he(Xc9p;]CLdn9fDERKP13u+"KEjKUk0i*838D"C<NFMtK7H"\uX-BM=Y.!4lTci8ZSG*Ziq=FRMTUU\n[glY>;s9hoO2Re$:@2LA%UZqtfrrfVO/N'ei@hd&r">[62b#M7kp',(ImOBp3rli(^9K^cUa2K9PjI*`J"'YFHV>*/CiZG#2F-V>R9LS@\LkZY&,P9F"''`.<1r87bRb5l'!ZE_E^_i%"V'tu@sf3YHp%8n%eqJbmPUa4V\n$(F2B2affKrFG)Sm,YX[)M,:5mK5J'$&GB<sdLOle*BkIZYiI#mcqRpi3S9:aIcSQJOCcn9.p&TJIhqD34$_Ob`lRV%:4%2:KrTrc)F<9K$E:d%_%5JJ1Bfq#XY*mm(^OLDZ6?72']^=T,2TuA>2@dUXmhEB^Z!B7J9D]qpnHa,]8krjU=(\f!U]1F<2guM~>endstream |
455 | +Gau0DgMZ%2&q(:PJ#J]&\f4hTmri:S1pYRL+MaWtP@XEeJH7?"2CB-:-)ikqYFeahls/nc';Lc0N\"+O3E:3(`@c<&gC<US7J-%QqU\0&\imVVW&mNTFSdTekP"]7s2RXcG3sN@UWtP69MQs[k4n-^=&p*V<l03O?O86CO#g^KSK/e<i9IlPLq:J6Ml`R^9G>u38LLV!"24J4n6<nNnfuui8[k<Mf/R*tppFH"Cu+J`;D&@)Pb.;3fgo#$:9kOb[J2D_\+1g+FcB$b'soe,/VNhF@5l\2Q*3UCa;YcR67a-O,t07C$&r"l94:D:o$H_t9r82_1Nb?.:!H&2+k0)EB=#.RB.'.-BaqP7"C<loEfps-W_;TN3;B.g&8N1k2h"+>YEI32;<Pnll9Fd$<g7=3g^;JZFfFeZP80!K>\\OeM4%&3U<H41=`bi0]X1k,V"e/<6ArCsjr:>RA>@<o3H#`LUGKHdp?Kg)'rmKTD*2Ar1O?-&;^M(!]W.c#2^D_LW%`h!,-XgA1.]i@i>3tr\WRO/o!p4WJ;4u--50]'m5D(7XIT,[EmQs$<*>BLNKZYSTrdirZE1;B_kO8Ta<7<lm"p8hHX(Ip`HT-[(*#/!gt@;;>IsN^2$K)FV9#JZ1]:6ahJMBZqhm^#J1Y2u%JGJU:hI(I-g(OsRL;7\fMeq>cM1)pgFQT&0s/(1Vd!*Z;RaZ4_-T&Z9pl6m6^@iWi,4O[QN8<Hq'(AJZo8m@m"3$`5VS='q)U0HC7,7P)@]*)kK?[h('p>&GYAP.U>K>+d;[N.-Z>iV%\9Jla@4!@/cot(FQqNb-d*]j&P2+/=XH\2gs=<\)D./`<3s,rf39[3GWBL,jgg#QrgHdGlp?q3-7]/=:;2/SBr@k]nS-];J9WHX[k57>,G.@]M.OAX\7XD?WYq(ZkiW5_o*AQhVXuEZ?3#]P*+DF!bS$anjTfC:S#O&TCnX*WOYUNLe1eu&+f%aGGan0RGV8JD.&rFsZac<D/)fpIU2"(68MF4ndUFM?+_-kO'5.L5]bd[_dk[.85*jL,OGJctb6nig"Rs(^=ZhS32j#sd7JH:FW4!ZaSq2&&Ho-#gFUje`_R8aQji$5Y>[<45E-EV+('7>="Mk"1F0bl*g#UPf"kK/Tl;nb&GVG>`X'eNm1[JG@gN`nPjerAO\[8W84jre;9]D0IH+tdLldkkY=7WV<3LNm@,1hPf^=-]1?U)D^h5ahcViV.Y6/$[4+g5p57ibqC5@5/0i"$,AQ+<)kh1XfjSosbXhVe%!VWU%+pB=U*g$Inh-Eu2S/!Dd.k)>bQG?`T>Un`-bm$a.+``j_c$FtqF5^FL-5S@lACpt4imciKZGrKW$pYfKt=gmmn!YqGlPtW5"_$BIeZ.K9^i,7l-b.a9@?\RAJJ?FCUH$_]e)S.i[@]/7=D>7jKaurbY+!8l.^C%8NR'<_krpX,?MnLg(3cD3Qr@eC?@U\\*58YHiIdFm<QDLV;]'FS@:G)*_ki%$[mHiBl*5E6'W&IIuhrcZZ+g%;OZf2Uf0#LtcQ,\LZ"aju[Z,LTt2SU.`j(A2U"+4?s^O6OpEAWK(/fU6BlU+)qm..)9qg1[d:d4W+:EC"l`8+:VL!BDlZqa/aNN=MuZFoV:^19tXBV,_)>VC[9&DpT=2f3OZ@gAqK"cM>a$Y<g,J9G42[0b0c?]eYR7:S;rMRjlTtpAd;A^&q"B<_=]nF,cb<(r%P^[ZA@'pZ4N2C\SiqE>!PW=WED9(CSQJm<pKX#e646SV01T\m+M1;h+F,=lu591]QNp,+]k^mb&dOJ,]@k[mdu_k+4^Ic_Nd4[D`p^e\*Sn]9C.dU[I2)7mbhU2c`G)9#X/C6!))%S'7ndUSUImF#`!>/q,=ih!dETC`X'jd%&*AU_6=b!a8TAj;Y%\Z$QasAMo`5:XQdq]K:S'jpM4b-!'FKZM'WPf<5TL^OK&k^<?(%#aidk;t0k2A)OB83$9`/WPdNCnBeF'#[piQ+,5ZI.2hbs\AV(cLE)Nba-#Fm1aoVkQCqW:X^QkHB,KIAfhiAkAe7]h1KZ$+imXebU"-2P$BruqDV1&(mh/,#i7A1TA7$4h:B*iXb-58:0TuuiXG?$&Ocp2UHXqh5Ff1@cE!A$<rG].CVrU1uX7a#$9C7,RZk^)i>29EsiO$2*3id_(Fkib^BtM2K3RYGrf)I4sFFJ@h9qkY[<:lBP#G#iq*Y(]dA_8+-I$;P`<cZHl(>7N-;_OH3U[j_E.iS-XBl=uE[J*;)H)@`')5Q(#T4\<or4pEAitlU^n^65^BpgO~>endstream |
456 | endobj |
457 | % 'R126': class PDFStream |
458 | 126 0 obj |
459 | % page stream |
460 | << /Filter [ /ASCII85Decode |
461 | /FlateDecode ] |
462 | - /Length 2346 >> |
463 | + /Length 2325 >> |
464 | stream |
465 | -GauHLCN&7A')`jos'`,sO_!Es/\faY+4An]&Ko_#ZYn0b.107QCt<pB,SaN"rUKUjoroGq[UUT70s$2*L;TE8B4g@)$\+cFoja`b7eGZ77p_ZS+aMmUQU\IV_s$aRn'_rRS3%S9T\FCnLR1B@F*dE-SX*]a@puJJmXu@R-S78W:JO\.Y^3M%Vor\E7PU2Gd#_<G2M\r\3L-5a<#NP31G[/u;@3/&$EK<r=_TG__FR$<#tPmX[8gpM-k0lF(&!5KJ'mKY9%YDs'POaB)RN=aRV%iukt>N><`)U]4L3bQQp@HA.8XVWal"3>['f.YfBg4ndk0Q2ns4XW>7P17'5?p._P\q+9DrgIA/%44I'[#hYM\[g@Jrf^-cUoGA>djYJeFsd6)#=i1Tb4tMe?PA#+N\%C4X?m]9R2Xc/Dl/lPCi`;R8UpeU1NPX>.c25/[&KK4aHB%%!mF=VS,9J0[^g@C.JJ+r+"=-Bb7cOf]rD1=GUACs[WV5TO=9Gn:1sMSjtpmp*T^B<[FUA>8i8$f+IFBnRm%l0eG0`2_`b=B_M''Ym>&+!DKAOqq50V1_35:oGR@j6QUiA-m'S;^9_I'(fb(/i\=TO^(LCK<caXRmM&TZg<sEld/7Y25[6l`\?VO5e0E,KqUI.`?\h#BEJGG.*ONO],Tu4G44Ocg@%))JeHbDN0LRVb5&?pKrlRjC'QQPMB(1KFUG%0UZBi*OTNI\c/C+G0A1^_5I-.hjP&ZfNf9LjWDS\WGFPls4G)5ZRW9n%8'%[2R>=u5ZXRil"F3.+'L-/,k=AL6dDXfYe$#CaIh?]?K3p6>2++p]Hd'r#K"grI7jZ=W3RM;"<PJ:X=A\m'CshPi_-,)'l/=`j&l/BV#.TQC1fbj]4C%5RUHNjS[&fGDFTO17MH%smdf^(j9nR>Hfe&_;oa*J4TR5p)s,%r'.;-gSYCKe:Y%7`5O7K=$T_InfMnR.'g96q)O#:hLEps99S=--!2m8@]<6KG0DsoJSGL1cgZBM=V&6hG2El,8Y:o?$2S3+,"/iXg/VGId&E?PW*7&b'C,4T:Pl:EU!CW9"QN'f%r`^iQ')b/D8Ys^k;I&!X?JrY_]]@\/&h;764i10OZ.UV\i+\APPU`[CPm=3G;C*lSQ4Bs^Vc3=@q`ZiM4%G;95b-%8t*5pABBD5DHkDE7l76HWA?+ku-P%j_d]pZGpph-^3q"ecR2k#MOT$6qOC<TX*D<Qk+IlMAU)Qa3m]G<$`mQ5<Z>7QlnnQXdM:Yif.CMOZ=8$d<SC7RLbg$,o)acgia4HG3Lp"6';B&tr4"_b\NijaVdm1@k'C<?6LLCI1U$`-`l+O'I]CQXtXLX9SDI9a>CH+dj`W3Ik89X73&B+P2iPm6M/#,/]V7FMCOM(Gr;05<7`iNJNK,<T$.XJ\C==%^TMB3BDD9pM?jgsjcaC$LSUffPE*b+I7*:cP-5MI8>K=J=h1&hPeqG]_1A7n5.m]AlN2[H21<,mg]aZakX2G3eEV"8G>7el[MFpmO,IV4P;Cf,VHEn`Clj,f<V,cC27'>"tmX+]AOeEP'N^f@E4W379!*OXSq/I]FSgbJW[CZP&*Ai9&'UTC7:)*f@)AEW0-YgX$)F2K=^@VO0AUeNulDm;h"rY`kKdIK^G(Dn7+Y6dReeB<ff>:(?PG:mPm/+PSV72C8%=oVeNjPHd#Ub`FEp<r(FJ?Zk%;Bu.pd/^<&p$\=/e$++n0cXaa\20p?-.>3)(4/oF/IWmO9`u-5UMAWilF64r+ACNSBo*Am&=UD;Tj!qn(N3<Z9h.b"nY$sADRi%Qs_FpqEbkjVDPkW=#b:\NQ1j.8b'H%D:FX4(#Y)4p7T.oKQ$u?Q(cn%m,rYK-0=@7jRTF,kI=FNMT6d$#9DBleooeQF?rjDksVPAlEFL0gffUF[^"BY&@^;"r;QtM0pm`,P1Q[6*tIce<(5CD/kUMm@T2FqK%%;)3c1G4./mKL;+89CoNi=C=KL@jKdK>5M46N!'n_rSh[\5?)k65d<K(jN/PK?H)I3-04ub@l_9)G;bR3\P21$otT^_ILV[,`ipPVSnhYXq*%h-*\lqOLVGj,)lc]bGR1biH#6JGZbd@i5>ReSapo\'Lp5_X*9PlZ<XDklccX7V;h(1o*B]l[`VLe4tYP&DcHOt0Gb+u$kgL1>b[gB0O=>?3S%JncJI/fDTd#oaHZd@CqM0KDn"]e:>e4p[G2(9]/kFK"43]8K?NhY%Nn*TSu:<!MD8Doh15IHF4#-XCN"E$KBAiYlYjqm:.?MKc$9jqpqSX(_n.^@IpGfI/7'BX`9=lrc1\pZ/&rk1ZE[Y]fPPq_G?Wo?EbBO4-ekNIPQ([J]&^!~>endstream |
466 | +Gb!#\D/\/u')ldas'ZJs?oq1%;:]LjIrI&8c[_.fNXFR8/rCCSPZUdfFa%PVL]7'4Z[<?"a-%u!LU.H3I+d3+B:aB\G(",cf6<k'K'7tE]m]@5hk>$XIb3o6pm-@KT:Yt+HK(:[%Ych(ot:!;1rPd1PCMA%)(E61f#mJWBQ8@HG-C2qkm7c!j"C5i%;EJj$j.F="@Ko;V=Rr'B1YEgBh>*G[8r`.;G2ll8l[?T-6=I-UeJm$HU6[VB`-Spp%&jC\o"YB;U=()A%ca"#X>#AfX#-+Ku/_&F!Hn4iSqK*?F0son-FF>+X?siK^P\]FDAnB,i-.\:[AE@KVasVOq9%XIZialM,l[W9IX+5Jtb5e?KLMK9uIea=@5BO[7kFG9$jK(>2>%7HR.2uaP\V+bUWB.#Ae`sjuTeG_\-9U9<%H58tBaK80<PZ7:n)UZKt:t?mj)Rcg0s$XZsCE3N;_-:<-cTZkfd-f[pu$r3\22rVjn(*YH8OfDf:_Dab/C1,.Lo6ucC#+GiC(@rk%qkYnop,*)"6WMkQ!c'a^C;ONp"2LD+`FhRcULN4`cHe>=E9Z9?d7IbD?<$FFL'L-5.kHp[LAeVF$qY/%P+/G_X^K^ju6b0RNi9;4)?[Lage(FX`eRCOs"7s.0_TKdGU@01t=jM`mE1SNd<KJdtXs,faeT!Wu\Cg%8Dq'+oit"CdI[re5S0Jbk!gQ*GXD-'V3kn,1Y!,,5>BDNNl<b-X<\5Ic=+3HCo"LCr9KgP!G)K\AT!.j=gDdS.SdO?Tgj\_RM6Ie$<fUA=r)O<+et#jufaCE]EtmZ+'=Uer'ni\#1-&o^.+2ir&*M6?LC:7S\1!lbJ#h5I5_DJh()N-ASk<LcEFGtob2kUQdd[IZaC)i_3X\UndNgKg9du`8dSZ-K(V@#gf,8r<T(CZir^i#%L.cYc^s]m_JjULu[pm^uf("pREfGGPYJrWX/#b\HoD_)>mc]HBk9(I5"Wh"j;Q@?!+u8Z$cBi<h4I9Vs4^9+39KUahKh1gP6Y8-#)lA&+Q(32#mZBCZ&mR[u`F>6+Y#C@`;*<+1r2s@bH]_D/=$;N+bo?R<XrC0[4+UGPbXANA?.#hdkFHdsh84s)AnTrmV7Y,,Dj4&f=^5$(h2U;1Eu")3<sE(hcQ4Q@%S+R(dooG:kJI.C@T8Lnq6Y*odb$O%K]VK<8F>%r[JHlALC8u4cdG?4bj8MKOdF[T'Uqkd\9>peHd>Mc@oX_DAr4kE&4g>39PY5k+Ki(o'E`4s9.Y;CR`nY4NTP_LkA^e"i[Dg.dPCT#2X_%k=<4=D#VP>k9Y&_rrX'*9*6`.ZBYVp+-@h('Nj3R[cn8tj0pX?H)5rN\8:'Z:A,=n_.HQP.H<Yd[Y\qGuco4gh@h!_An%;)&R,,1Ic;@k,hqURkA5mI`ce0!+NfL"n$`@GF#sG_d^IA;WpfNI(,gI3-P,KctQ>^h0c,M$;;E$ggpiui!4#kfqj5RIL[\5-RQBYY)e']f;<c+X#CKK^`,<M<]g\!jaGbhs*FU4Ea2.$VPk5rg]K4MME+`+d%M+("LJKDE8[oI4V0k&3?AuhZagm9JYo46K%Y0P%:<9>N1$+u(Z^jA"b0(Y@VfKne:@H7Yu8UYaTX36(OcL>lALd>-"fDgFi-CuKBLqnbf8qMa7QR9a/rapKE0(tjZr\<R:LM.>Wo;h*'VPj+e(E.F,[=#.OgSI^s:O@8c<HIN01MObr\4FO6$'WZYTdJ`&c.6D;Io4dL#!8=V<O>tdoineZ[!nM5"Mt+=h95__qqHuBR8-r2dHt5__9ndnBF/&EEe!]GYfQZJ]+=`cp=6r^CoJ<g88"k1AuY,72a<7J+`A;3IF@-E%q==%H?"DPJ*@_9!l_`ZEb"4*<ClR.2Y'FK?s(YX=(skIbj)mH;rr_Kp)Js`QDLZQ&Jl4SGiFsE"A/c(8d"m;o6+rA==i/i'Wu5Y8/$RDnl]%+q".&0`c_Q4pg:!8J'Us..(2q-]1,S!:0#qhYcJtHq"jK"N4!A(<N0Gu(1C?^m?K/2/f3.X'SmL76G8%[]'SD)^cQ,/$$<hejaBk%Pp(Hi%$]`F:I00hDaX_.@hWaTQ`CPT<p=M`/M_.hs10Z!#lI>_G6]5/%c*i<$f-&V]6'6+MP;X2SA)[Feo9C1\pm1B\>)o"*Mrln,Mb@<Su#>>gfYNb.%gA&NnuG2DnDe=:3H'_n7p=D_5M0(i>YsqV:,'<9^)?@#'D8U8>'A6FCTF%4n&Zh?@U^aFuBsfnWmT?jTG3mJioL>q50^iR+s>!0!L,FoK!(eXLsnHVlf2E_li1sh-#B"aMBV/CtWoVni)&_ht-~>endstream |
467 | endobj |
468 | % 'R127': class PDFStream |
469 | 127 0 obj |
470 | % page stream |
471 | << /Filter [ /ASCII85Decode |
472 | /FlateDecode ] |
473 | - /Length 2019 >> |
474 | + /Length 2026 >> |
475 | stream |
476 | -Gau0D9lK&M&A8=iJ!f%\;5[5j9E&7*&)0g2?!n1Wi`f\&Zp\&5A5Z&uZ/&dE)+p4^`3p:'G$lPX.J!#RRl<\>d)Ni9I7A:.hoG6@9`RHbirjt:hhCTEpg\\sn`00aW5]=%0^/3-p2Dk,B.bid]%&o?HHrVRnL`5VntPN+lIk8&::PbUdg(@.j#O7rJ0?KuV!IKrK'FX5#Qof-gfUcf@a,[m;M>=_OT#uRs+Ttr%aL]m&9Z`Vpf^)Q)Gol_TU7*gZPiecbVc_CdP<pX-<D:M_[(U<p[*e4-5-PS+X8M%KO9;l3CHR#43NF3Q<:<+UhXn-8;T+>3J`@&PFTYt(t/6$O(/[RIfJf7;u&Yt1<\o<H?^<UrDCl_^)_WcQ:)=aW0hX_:l%JK[?.`:eSuGDi:ZYYAu%-F$'b)ZY8?mM.-Uo=(Nq#LRRaf^_1SQh.h<C>[]'K\(UMV;KM=W!:Orb-aKeV/7^bAVf5(19>@^!`6\LZF=iM&G9d*FC9Y662(*]S$rm*,h>"`ck\H4,<EYn/YE[/@.bet`E0X6'D]O(Rj+PC]qek@!NcFcho]jCFYg%@CTJ%q8bK#s"Q)`?e:7GT,*I-+EQKL3[`B0pWk9J1_[>9@\(BcjFt//3j:/nYd"R;C^,rnJn)W5\<JN)M2NW@G1jVOS]bnY8@u>YuaZQ!jg?a-m#f%C1]=qWO,MhG]_8>+;%\^O8T6m[+O!n(7HS9bdt\Z)lnGjJWrm@tQ$#c#/g'/.Wh1VI59nna:Y/3hs#lk;JbFW@$uGAboC,>\n&Ajf+%iXosN%<(/oi.\`l\eTZ\3_^:CFa0Vr#*h=PAe:olBY[S!f^g;4=32q0/L=E-giU7.hMA^mQV#p0dp$Qt#8m7A+a?9^UQ+JM_cTR0(3\AZ7Vu/[&C:>:VTrZNI*TF6$C1nB@_S!U/F>8bMBkp3D4R[TGq/Dfg[?e5<p_X=3]t=EDlZTCarLR%_JJ^@Mf8kNW[n(:",rfZcFHgdKSC=;?<L@Om%D`?HE;.B1:r^2m-T\"9$JdG5hrE/)(#139VUY/'ohF9,O9sB!eA52Ipm09$1`.b[;5#iVN3Uu)EpqUC21EN24=Um]YehlC.B*2OD5R-q\o:;28*+!B?.Dt&bmQYZ87h*jPSBS;4W^@.]#!,[Tj-(7-%QDYSWbg<fKL.LP*q3pkH9gb<ONu:`e[_RU?tS6n+Ek'V(k_]SnIu]G$1qSALr51hD\'$ID#U&ZU[cqI.'ARhC[d6SiY@7e?:7Mr:%"!n2Mr.`^NCq:%bk`fK8d/*<M(26N5`NNoj$._75q*?V9[<UcWVK>Ta]qAkY$<WaUC%%fa>WinMK0W6W\&a2PqS63nQLWRBcjA;=_-$ZlqI3K6X93g66LO'FaoTY%6c#a8;'n_E2=qWg%N^YH:jBPU8U[:W#l6GMnRg[A!,N)^;(pV;@?lDq4?`]dI.LFQ`@+`-*tcF'V<c\4e%ld2p-WZcW'i.SNHK,5$qE,Y56N"h2GC0MY^'Y$WuIhY@GO]Xf>ni.uE"9p]3?7%T#fU@FaWN)`!$NLrRcLe]B\2RbuWlaQ6"4P,uZ1W5"r]AY_Hk*bfS<EHi*HC@BA`-GT"ckf*O1TN/le/3E>E?c.+X\RFq;XB-pMgWFr=aXkH\hs@B[5s6"As<pUk6kuD;qf7?>+nDKWWkH0NC,(EH]1'.A#*,9)e`F,dB%K``ChNmfpe[f)35%93aljGps!*NgZ!Q.A`VPJU*kc0QUh78^K=5%c&/O0nmBKWCO,);?^gUV"KtH+fg6'E/*rl7eE.;[*EBfg$7$nIs[9Tbjab$3bY/:3?1!cNY`&RBh07#Ym?Y5(7<SiRsgX&,u3WX%d-]F6W_21rA,!tq+W_JSIk>:c$erh+5]0$SGVh>>lXH1[J1kt_5OY6`6bNL".sMHToKb%AnA?Ul`I(sm=@Lcp%l:ABK&H$VLBR61Gg=T9QLt4@.UunO";*NqXuojofIU^E0F;r1:Z4E/f]'5TMGf/Q`2Rg:61u_)_NfC#DD?8\,~>endstream |
477 | +Gau`TgMZ%0&:G(NJ!f%\;5Xu4Q@*$^&)5p;%Bq8/`,Bcqck9opO[Uinq9lJ8$mj);@U"[$UC(I7&iDd6F65f7d)J;rIKjkDT?$Hk`WOPBE<KV"mDAW;r%c"!pjRMIQ"(%d)"`,lHT2r'1RAnBgaO:92.squn;\r@H-s&fea2i.%=6PEmL[BZS=g*SZ9P/VDpSPJ668E>ZbNnVL=9f)3,*)u7$FZI="sUY`]mTGIlrA3D7fd_Tlg,GQGG2>8Lp&;arm>J'VPf#Ji65sZcUa;(k0fu^-*^ON_c=dCV0QFT9B2Pk76C>'#d2RP$dG]i=pr)Y]=.=fR(/P+HVFZpmju.#d:uA?)HBX^+qe[YK&-U9cWk^hWko*"qLP/f;lNO6QS?uDCImc3tQHfMiC*Vj<MG5*/I"G>dk[*l?TR7s'`?&`KhF0`Q?P2_@`Ds+d#F#+Q8GK&$$Co1BWilb#qNCJ>H\Z$N$l+#VZ]DZ/DU.*.=abqKR8dadS^(@]:\qqIQATl]4f(?*E;^pJQ8E99pJMW'2IA[%)1NU[F4&5''=.6Crp:,pMFhR9[>G2(k8`dlLU&(s"RtXYUa^MTOF4Xj<"oJ4cp"_)N2KF=d#/KINgS6N"o-P,ub=O\F,SqGY@`21o]K/7#cS/bfEZ\k-ZV'@koOAF>KRi4<g65$V&.73L"c^."'NOXej?Eh@J!eTQ96!&Fp[9XsPOH`Pa]96Ab4]LXoNd9D?4$,HC\VH=Ul!<#N/84TMs"03X:>$0W+X;nZt]K.*V4hl?(W0:H>*5ZGm'78PtIo6O1%B2ME_qu9['[uIS8dXLVlKrRE$X/\A^chqN[66%gSp_<0[9B.N:@WV"ea?gaL-A!sbRjMC<F\sV?X#\)R(Zh^.%gZ3#BJ\QrT1pL!nCK(%dfu<M"]g:R,V+P?s0Af8g"=uWU"oV0XmiIK8e/l+B4GAVm'l&KIT[+p]fo':<;j_cCp&@=e=ic:FL>*Pl?23CKkb17-[+ZG@,9g:5=ud>sfX^.`ZBo(GWa6\Hm5PBOJnXkR8MA\\)E.H],(PO<ZYk\WI.r"B7t$Aj/]hX-00N,;ZK[Y,W7/o3<5*V5\3,PUi3s\;rZqmgNK;Xh)3a;>t6J;FCrJ#Mi?5;mQ?aX!:,Gg(,?86nB[ZH6mV+k-#`'cqeJL-2^]TXB%jM$Q#l<NMLarrGOf$E:W+;#Q4:5)1VA0Tq7o<SlG=!dsdFi&mXCkUXMn"m1K⪻a]Lg\Ug-VN,7^@"PX@PA[8M#uPALW45)>JBaHpBN4q=k8a:"j,2G%H_WWKVsQ,JV\)7'H&JL3rusNUJP]_Yd1k'.`0F%P1h+:dbli-2>rc?A.T/C\)(,;VS$HDh[1_2nl*o)76&4p;*GE&JC5B-PU&,lkE1D>^oZu1Q.Uu=EbVZi3F,l56CAW'i&B2Y3X>k!7Si8^(m6^"3"4uGr4:rdV+tD=_MZF!a0_I)P(/lKEc_il6M)9bn%A/uDXZpPY=IRBQX)&f,7@>s>W@7H^p[_@J2\cOo\ZoWpF-QWIWX%WGlr)4V`M),I<2E4)6LZ93*G`]e>5XXClG>HSYsHH%M-0be$0_E!#/%e94<"!h3&=bN"Qa?]$G%UlM8qr-W<<tL[[A5n<5p'VffI0l\6E=_oZ*j^$&-Y;[]\)llPMu^F8'Q*EKZR2$TVV[R#.&1V,YI#)##aF1LjUP"DsoBdG=C&6hhUi3g@&(1.U`q\2#KOU>"r.B@stl8&$f"=#$fk>@7F+QNLC71iMfY4n#c'iP8K5]TfW,6gC%q75/g<a.T;RCc50!S2M<iSAue]cVh`<35]Z,>?*qA3u8jg)\-R039\*hHRoGIAnW\-j_6D_XmpAmF!hBe3-OEo]kuHDfETVJ=&QB9RG"b$3GSGg^4TtM2td144addk^k]b)bW:Q_<TtMfhqb%',Ab3F@)mBVl#(k+%XPhfXpnrZ,])aX@5Pk9Wq0rEJk'Y1lZU]co!4INj'KL\q?(N7]U$@Nc?0&il[!u*/R\0CbAIAN:R2HV(]OM6-+*I~>endstream |
478 | endobj |
479 | % 'R128': class PDFStream |
480 | 128 0 obj |
481 | % page stream |
482 | << /Filter [ /ASCII85Decode |
483 | /FlateDecode ] |
484 | - /Length 2337 >> |
485 | + /Length 2285 >> |
486 | stream |
487 | -Gau0EgMYb:&q)^sJ#IctfNBm:8_l2L6Saj5ZJugI'*4$-GS.=(VUR?BB"FI4ZsQ$t`JZ9S,g3EV5R875])'pUdoE4U!rN`&GFScJT>@"X+bUHO;@*/K+(c>Y@<QtfrU_@OSfNf!1`6#(GV[9_:/Ck7Bk45</tA-IV(gp$,iD2;iq*?_[dWmDi/_<4isI"JdfO$j^4:8:a0Ke&"Jf$0?_+Cjj5mh<,i3S+jds/3"dP>Z3"<-T_F]jb>UBd6l;iWBn%XJ-2jjQ%?2i/5YPWkm*U7do3Bc#<)Xrs3'WcBuMV,"'GBIe7Q?j[Cb?&V+\hfjMScrR[ntQFur$!/kV/4ab\u8In]6q@e;HV",)F8>ef6C4sLdc;.XP^U8r[D[nJ>/--B2l,94oZj=kCMXICfa^sMuP\3$>W_sCb>@ZblUjQSL@qR3X$a$D-SFMI\u6k^=PL4J&+Vf@?M/WI_=Crg(uTr/^Ueu?)@2oB(WaW1;0uTCEk!&Kj5IGh[.64E(4K5Dksq%*/<#&^,Nhi*5cdr30a8qY-iX,D2MDKaJB,Br?&d1.2!!1'`QI5ge5#'n&:,aLS"G7!AM0g7tl+o9,Xd0ai't1Lao0t22#Z17i*n+Q$;9+B;)CPWaTWi@\.!JIZP[K(f\Y"aYLC<)6_Xp^qe[(/2LN:I3?=U0LA,Dk#ba]g<.8^Vf(Q[i&<)XoYQFZ\hell9A?ppQ%[t%!p:1f+7G,91d574^S!)or5l&i"hG*>oLWI%H[c"V7%/bb71Bg)2WcOOQF_*U?0E#/\'0A%`4Hb00H'c*@mKgY>a$)Z(;fD2H4OV?dIRjVM*HA![$=L5=:*'5Fej/^+"2Z,&HpVF0-=&TORoNLMO._;Uf=@E7)r:[&]E,];AuIo/WKa[LneM6C7_1AUIHKpBVLc,e#`>a<FrTd!lH7RM&3+p5DufV5d$<aKH9[i01jf(3j5(F_Ptp_Oa,:'I]lQdG.Z*/N^H?hj54#T#N67)r:*G>JRgJ`+tXuM:$;(:B"OT>_S\1hWJLIR-#VC&ZJpd*R.SG:_tj-g-<KAamSZd/#<sT`eZ7MDN5EK3q@lnX8%gSm$7"*<P4?LT=9c[\H$]ZrqVgClI0qNl@Y&9WAaf0eDLpbQ@37,<1\,fmku0Mh-+`\<Q"+%(_U8SL<,Z0$OoPP0"j/efJCS2Y8N+aMe/thbnSaFfBXUC4?>=o5FU)[[_FR=rC8%.E`&FFJ]FBP3D+s)N8R2pILP4hGSH*[$J%MbKhY7s4oAl"t]VPKKJ\#<6qt;l%(W%65i]0ML^]+SM0/]n+<T]:^.P)D%ass2s1Uu8Gd!\*Pq)M!*cG=$uZ"ZbZU'j)+*a=V!h5/2]!n`]o%7ck(;dnJ4:)L1IMO0k7RhLnmQNYkA4MegiCT`[RjW&T;l!csG9%ODk\ODQtgo.h+Y)U!aB#[ek/&,.j;P7f=*&h+;:1Xr*CQn!^BG^5pCH0%`:1877H@d.7V(sSk/XMX_qFTdfe9g%d3fI_Znc4a-eQq8L3sYXdVpqZD]G=/AoE`Q>4>"3o]tnb?R?92+OTS8D42qVb.\BAo;&,I!'KHT//@]6[i*C0k>WDM;"Hqo=3&&rPEl6.E;dse:R#WA5h!)->'Pgqdfpl/ZPN=r+/\8;.15!gb[o:eA3=5akSYt\iRl"(62;4<Jp/-ETVGK5&aHh0RH0c[4XL3M3mFn;;FOAnkd'IVhT:-olD:%,qa,VV8hlu?5',`8KV3Q"*%f.-\Q"_^Xl3CI.Oj3XEh+a'gA<3H0eOG5.BC3.KDY2d8+:;G^3;QV4TjPbK&nT6[XO4X!7C65R]EfpL9!Q=-^)?Kd'ClB6$n"OpS-ZF4:%LQ]_Vs]]P42S_\!^_qYIX>#'J?ZUkK]KMA0lA8m?E/Elkmh8LHFkWm<nq:USlE3h,%uEYa]BJo$FJ6R725_)g_8LkjBfqL,'8]%_Mqn[G\Ckm+4$Hf6mJ^e(MHK9mFFJiM"Za4WH"f]UQ_[e+f6AeQ].cL?CY,js[tPFb@ibm;u"Y=_"7i4F4<u#6ql@0cF!c^n834=_h[.>@eg+.T.K44n=5%:\hAs7pG;*B%cB.QBs]JgQ2X2%Ui1.S[-*H<=W'`>]4uMQ?[q1>F/G$TU=bZ@)ReEXo'A%Z.!YkSIcZW]e+#md"/c=HFl78UC!dliIQ;CL:6mK(#=Qmr"XI?^^J26(QF%Hh=lYRa65f+nF%2kq^][gogTPi3N:IL=$?T-;s4TDLNf)Wn8qBEqo/:(lIO_g@-!@QKAj7ubp9npdKOXq'=u*h*9hV#:/N\$Zq<=eU7NHdfN<2JK.gHP7H;`:%XCIZ$W2Z<k3hRT:/Cin'L*mk~>endstream |
488 | +Gau0DD/\/g')ipps'bW=+mHjD/bq7epd=ea`HF2LaL/i)%[Y.dQ7/5^,cW+)2uDq0)=#1\SD$OGVaXF]e8Y3,1Cn+FUd"d2rcakGrH(VL5(jV>FI?#d%#/kL:@BisO1lYWL!A>nPU</&d%?n(n]gUOh_'j][E4,D1:[rc*$=kP;R8>HK#+\G,FHnjNX\H7Ac#DT5,V>r:Ei`Cd_.;CF'H5V;_,2]8$[Dfp%B,+I\Fq,]eBE>E[Mh0e#0c5(fN6tU=uBaVFR8T,I`p)r^mu+=d]ifqY+QadR"_t#jakK>J*q$@Stnd)mlc>IS<rJK`;ctSPd@Xo_aW+?&t5"mHk8Hc/RW88n%*ZRuP\,CU5-`==8u.P"s-?;B(sZH'#"NJFAr'_.P;jKLt$EkNUMLf=o%"[t4:ol#)j="1mRd,0TW$;Qc"T<#'F^"F_^4lbXO1OhQt?5&pq0_n"C74;c!+g"Bd^o`;5'Hn&ujVaBIM7ooSBhjG/b#A$B>lU("ag3>H"EMD!WB>4KlKX^WQd#MokA!JO3o_:8;b':=k&D"R<&`Z[cB`e,VPa+p""!_9H+V*C==bf;>Sh=.m(F&JJFVYNj>ErcSNSjm@7Z7of+j@3qo!Oa:<DMAk+6YX496al5I,,Y?pX8acm#lU;4FqP[d`;5o59(Xqp7L;9)h3$H`e!OZ5C6A^UM19&,ODOb%gBY))?HZmjt#PZ\oMmukS6=kbb.qREjpsg^u6FZr(Z%R)VGnClh5T7Au"VDZVom9(dA;[as[L4;5UF)X_[lc!$WX)W/I945a0"ZePa@ZZ:e4J<D]FM.[L.?1qJpk.="FYhZIjhQEB:0oGAJUfO:M>C=DPE``6TY3s)2!JaUHt.-s/df`iSNa^2iE`r25LCk"@HSEkkbUT5U'75OhKJi)h;@5p:V+W6;I[47c$a.ON5?P3m2`BZgp6n"MKjc.K-3t[LESe7#Pj?G,6b8-8+J(TNJ5C>M!^Q6LeBq`.<'D9?5PN_;^:,dpVn^FK6(f^J@]eJUVO_S=Hr50RXL6M,k]KH6GU[ceNq\WEf_ua\:AO#/QDLkB[,2S5Npl'UW<VlJb:J84hH^.sO!bo!"k$2ht6qIYL8HB^l"fNc3:9qQL;uP`l;Z+d:Kk@g@lD<(`^@$O&09!8CWYW`k7XQfac.Blngr3gl0rZZ)Y-VTmbBsE1c2[16@YXhoLs2V]VXots!s3Vam,mV:\1`Mf@JHoSGrY^3\M#d_jsoslA/38+]!;\=g?d_a=STSEUA[,FNR#XVJ"gXJeY3F6G9.]_:>MbfRKA=b@a1%tfN]9&[1hPb=7NRP?umZXnKibR&T0:Cin@JSR;rdDB=_2a]7N;C??W`7Ieh]W]'JmoYqNdRA#d))?RoJ]^bltLJZHYem(mA;1S"p@6@Ntba*6!HJBU#E4i%X->T#1a/XMX_q,-6m1j\"q3f\HVn,SO+eQq8LSV)?m;f5Q6?Ag*Z4[u^l:J5V5YOUC=Ae;s>EaZG+8$&Yfo!pS?Xod(0,DSP-_NtZoH5@M`(QL\15gjJ*KBJ[oDL?N]PaFXZSrP";^=2c7;qthTYW8uD-Hdu>/\6<J2M:/6[o;(I3=Z$pSYgAc9q&'V)Kqs8"%X!L'^E[VCtZ,Z`t"8->3dPLf+rM*$[8(*?ZoZP]bs_t#47^:n!HHAL8GV21+4TLQ#L"=#&D&?Be!W\#JJcAc!0>u-cp837tUoo7Z>/2m5E%'o\M&?MI*YLqH2\(Y@:"YZ=PA#iSBK&=tMnM!7[3)H&7*d)>8:qnqUN;+/j-faR2"3qsXrjdBb+WHek9LH#1<#*PM0K(T25/Wo&$G4<uGfCMTgV$t71A5C^2`^>7(qSi(iZI,>Cp3Wm!nVGA8)Pr,h':4:%:<Z^)s8X/2X_r?+u6+Rj2mQ^O/UmGlsqW-\Y^1c'5RZ(TI^q',U7Y@;RG6G'4C`PCgn7^)j^^G8eD<]?WU$uB"Ulg-$ACWVl]r<b*;crNr?1G;01[q6HNYWAqOWQd`KiHCo[&Jgb\+S7V;03M>IOqq)%5JGZW2<Hq+\@roPr@6`*k<T"&9>6+l2esd/d*EMe8#4)lpS&9\3==^hYC@+5f&#_BR9Q!lSe&qr$UjYN;hGtSb7?g[,6cgrBE1WdP7D#b!_ndJ"QYD9`RE4+&LVaZi-hnm,&->,biC`1U]T::I"Z#o!t.:]8M`[-W;"[fGm<8q0L\c"I%5H]P1k=P:i&@J_22)9@VC_a^$ts]m3PLjtqr"5rA,ORWfWthUjHLL;A-$-OkMLc8?U0hRVnGkl4/kk[a~>endstream |
489 | endobj |
490 | % 'R129': class PDFStream |
491 | 129 0 obj |
492 | % page stream |
493 | << /Filter [ /ASCII85Decode |
494 | /FlateDecode ] |
495 | - /Length 1610 >> |
496 | + /Length 1619 >> |
497 | stream |
498 | -GauHL>uTcA'RaVKs)@k^8ROZ`SaXqaJaKc!SRG[4A9K%Q9LlAL7%d)R,j1qnrqBa@G"<aoOF`/F_a:pq3]]=rarpo_'tU$b']@dIIeaOAfRQ6h@EWT*hu_1/LBi;L*eZu>D@\eQd-pZ(4WJNfnFMp>M,[D_%#qHH,)6DSl`.s[#8jZbfBcmM$ol3T]$Rc>o_b;OTFUaRfouigV"g.P0q?+Ag;fWe[;WIB,8f4Qi&L0`Q"I_UVj^]a;S.Kg>oTLH&-E?9`"]!KR2Pnbn>M<(U'rABK-;I76'J."q1M0MOFl3;4'Fc,";q7rqW)0s[)HuQ`cRjZc==,L-OGck7QCEa+LRiqFip,OS\U;R.I:&"pXYXMj#nIVN\_:5I+T>f>J&%3mC,16GF$Yq4@HHVkBj)6jKlMn[LU(4H43f]P6\?6p&'#d[Z=rg+j%YuAZHQr+-1LYG5^?q\dH6QaJu8R79)/F:!If=\j`j%'$:juFRaTtZ4g!Fht1-"aLptc[`X!#R%Zdfku"ELJsfHFHN+!YL4V5q'_#@b)Cda'&gq0$iI$K[6`6G*="H/d#0&E=.KsGNb5C)=l1Y&#>Hg1sL=;;iiuY4fD7<lddEc4O:&_p!g'[bt>O_KKd5b2b+B;B/-,h;kGVd4CC76+/]`_S,Hb_C'Z9ARME?l]YE_^,;@Up0?qg:Z#L7)6GUoP6oh/L9i/He+so.QLt9.^FN@]b@IjMh"1ZWkc5T&-VK)R3h@X7.Z<EeM3B;A(35Lb@^BjOn=obf!@,F1blpV9#BCR&sC5XP4J<a>gqpnD@\W+!(Fpn`E0C/Wq=:/2G!&+YfM;4Dku`g8onN0jjA"GH8'*%6eQ3Ca+;iT!\4\Y,@Q_)jd!S>,"\>HdG]Ei`JmN[WF0\/Wg*O7F8U2:r-):q=:PaR\r5.0>3Y?F@&),;*uf>$i>92lk>$]lU%`a2R-C,q,'hEmu+760S7k[Gb^c)4,_?oQ$2B.G`YI)0$0?L?D?6Ha(tBmr`I-AZe'\$ZQ)n#^q#/4rK7k^991(!)&3WgIWQ1_DK+F_)d&j]m7[eRmq>9=qM)9Km@d$=VP'*jZ'"_gS;&)@H\rR"3-[ng!tUEQn)fld\,1MX*M-[7I$%=GS1$B=N6GmZF]W!bc.3rd7l?_.7URIC:9->E+trYg=(uTt7ej!K-AcXeZd+7j-F>1FmL_c_+-ktI<[>XgO1(X8FVOONCiQ(c/u?C4NoUn"N\Q#k#kXcE'8!56We8T$kgh?hFgih]irslbX&s93R]fn;:?=$&,#U.+!tloX)nZ[HJJV]@:2r'`8c#ZOBJ%lLH,]?YmaAkE3jk<,SQdp5g.cphZUY=#8NR]7it^[6cs*4Z//mBNiT82P9]4/2/Ht[u(+&F>>@7W[:P6g7C$jku4#Z8RiE`%R.!Gje1uW?:-*;u#XX[Jr3D9$KL%SS`".?#X`gtg^L-m;t7.'@;MF=)Y[_&VfJ's!(E:6R@jkGtV`8(W>qh51tm.seP8nBWr#gTS:U#?c@np9N-dB0)-GMDN1Admd1E&."53#Q44_$ajIU-!J_of+.f]QeQT`S3]-Dff9hU5d(``cR2Hk]])UMW6%hobrMBK6>)j_1+4pihH~>endstream |
499 | +GauHLgMZ%0&:G(NJ!`D6FojspjI;;V&(tj/?!o>M`ooUf(BlBf2Ii1T8]mA8rV$dNagkW4&N>9)L`$[5%u4e0'LI?-U&18%!T"7DVfs;;&I^H$]7(QN+5gUQGjs>D6!2eM@d&"<^E9)d39Teha%JiWWTM,9RU-Uq%M&VRW[<K+kcgZ1ksH<]HuqNl70X=X2.AeY9=+`7k0bq4rZl4[BCN%r^?)ad\%]bYXUS,3L]JhZ9.<C8Z7u!udErO7Y@2Yap<t'XR0H$uS:W)'%Eg1nVB?&MUGH(:ir[2i$DUBmn'&3W0$/bV'u>#DQA[;hM9uUlTA%^rfrrt,cC&C;_RGaY[&TdG\$kh_HT:=#B-Pmf1^'M]RECf&g[=M\b@q@PUNk#R/^mno7;;^f_6:?j6WNIET!&Bbs5'I:2mT*<(#k!peAf]#%mhW.q=.*F-3+u+2I(P=_^2,sBPO]-nMPp;.%rcp5Za":Vq^/5OWWs%_'a^3dJ-usAgiaeH&P]I_+Z:_^3p5(_gjRB%,drr/WAc-86h*"K_%'s9]qqI2_6cD-DiP<;$tP"SbZL!du+H[G9?/]RGkO8f!pJ>ApaL%b7FFebdtdnG@%m/I]s>hs'Tq?Q$#V4'hM,>NW\-in=l?5:3WT9Y+aZ])'N.R"IV95O?g@P.8V`WMP5FS,>Z4oD#j.O%eOqSiQ47bF@stUFP6sH-B5qIh48T<'?#ma6>gH[<\m#dAJW<e(eDY1oPc:HT*p93VP9oDNG`Y>iNS_4[^EprHsGbi@G/6)QKO*fA,Q:Zi]/HGY2Canl$UUseA[Y'nUaW&@T[?!l$IJ%gNH*U$I5gfr3mNN7n5g4H?Z,DQ:R-XQC+:;Qfu_P!(JXig2*92Z%1JUiOdq0jjEV"A$M<<1X@<bm%g:M7-H:/C?fJ($DjipjTri1QqM;\?<9XKYtI@/V))fC.I?Cg(h[qn?Y@7I.Ige>%;@#fEtZ6b(@HLF4)nmT)X!Fcb#1%OjC,VT*b809:Lm5H5%1sfO&t]:o!+=^If,WY32)]OQ562h+JckZ-]JF::uUo/<u4/?#M7_(JnX5mP'/I2/5NXM&p;+EI-.+l-)RE"UoBLM%\/4oL`;3djZ%NOcN4W;O(ZX*Q9.0-%o9NZZ-'%T/gr_dN5ClDC=XM@SS3d>Tp\U/,$@^2gZjd3`(N8Y29K,NfWBFHW^%io[:E=Kd)hMQp"p3FW!^OJr$I<^fEQ)kH!"1C]je%3I.KoJ4Qf,XOlmGM#J*/0RP5n`C7mVFpX/!1NF:OYlC;sMT61gj;?(bXS@Mmh8OP%_Cd=lYr!op*G2NOkM/tcf;j0C[,?bJ`*8[n^C:j,AW6T7h[.T5E7h)hLpX/kGofLi'^'_P29#3"Jera#\bB&6:5"Z1A[3J;hS6B;n_U!hR_hh^/8,C#5R*\i2WWHq(E3Cj.=qRO`PkL>_QKq`iejl\K'UiV;GL<!<S2/&8C+%W",l'tPC[U#jU(2j-HWLp3Di/EU*^h\AWQJJ!h>T`^WQYT&L@`U_.(E:?E81&fg"g&o%skqg>p%5bi+23;Bf<f?JfT&1Or::mD*Ob"4=hl*TneRs"6Za(j)B-R\L7sdIc'gGDBW5f5oAJ52]Nn:#Ni0/I/~>endstream |
500 | endobj |
501 | % 'R130': class PDFStream |
502 | 130 0 obj |
503 | % page stream |
504 | << /Filter [ /ASCII85Decode |
505 | /FlateDecode ] |
506 | - /Length 1667 >> |
507 | + /Length 1847 >> |
508 | stream |
509 | -Gau0DmrRJH&H/2gr"&\$F%OOmC]cS^]?[4_hFuZtS#1;)+.29uHa.^u-!-6s\A,a.),/s,#V!;k>VOl[qt0TaKF^6BmCRk3'&\O"F?fTZ#;Da#htQt$^4m`MV^MM7T(pLT7PR=0TbkbER+Ac;4nhKYV^E1oDe"MU/h(+#O^,Q?7QXON8S&5eor<,"U$sODE]O)WM1JR%Fb/^0rX@h*?/jbtT<7bbZdRU02Lc!]cfG[Brc*rp,,IulMMZ\W]d[Pug^jg#73Uh4C5ki<OcW,-NN*:&K:@polt:cg838NOH'/9]OQ)3,9S&*:mWFBBVSqo67'Bd=HgBu$?>ij$2`D(V;O,HC9Q-;-:Y+jN9t^XbD7QqMRHhI8R+@bjheaOh9KrpihXJna^0TnR)36Zfgg[*VUG/-MbS7+63j=in!43[PJ^N?XQ!mq5)\N2:2jSmoh/\r62Wl:M!#$fGm#M'@d54mWaWN,<7#UQ.OrD1(VlYuOEn\Jj%LQJT)DF0(R_5r-$Dcrpc=r,sTPF#Jn</C[UWS^qK_&+![395J;E@(mXJO;IaO'jBo/53bZcW"H.Jk0GlkUi]H>,_m[Bf7bRYV0j"q+SOS-a6;/1!]p/.cpK.b#9;Elouh,Apo3Ou4X?.#^T\1rpXP.B&&jHWsp0pCqkoM,_(:Tj-FDjUc4J9;U^69oB00@\AgKH;-Zh!MuX6Pg5#m(%%<Nhck<js&Lr&0BtM`QqYd^(:+K5pmm+700s4_&4XR%\J3_P?AG=a89H"D]ug(faU^`/\jJ3,_l"f17JnPtXf\[\W/@KeJKtnr0&Tc*8a>dQ.a`eimRH$[W83B<O/-i['Zo'J<WEm=Y=QrDk_'!i<D%,VltKpra@IKa#7UiR-qB!W'@YArjCJZis&MgM'tF3-6e(B=aW3!N=M5TPd8UXB6;p"i%8>']H^L>8E*OXqRC4\I$\R_];TRp:c8DcJUOLfqdBYB&aP"7\rr+'[lPKQt7Bia`CY#T.UnZ)0F^$128dnLO*V*5DF2>W$-=9@#DI-U&Hu-nho+F6,o0r8VPi@[W1&_?RVEV48^]3p!qAnY:<:@ESq0_TBD<s(Ma;_]hr'FlamBl_=gUajnjGsd0cK?U(/<?b&rb-QOF<RbbD>u'XCOTn*4Qujf*NVt>S%#g+1F:5aPA6qq^a_o67Jb]AdRIHRft6>Vg:>L196^!bO*rZ@3r]Lf8V-75r1+t<m@nl'Hc[<=?Xt]<9NtbcnQU#Q8?4q]PB8a>Jc?(gUup6$>5#65%M'W^:U@:!0foMH2*pV/F:,m,2k])r-`iUG43TX0'pd)O[Tah?H4BUheVanRn^C`;cKINWb+pYhM&M_V'.nM/jEr>6E"j9Egq=+JVch1S&OIjZSsm:o3SJbaO.J%_%bL9cL(`m@I;V]32#32^W1g!H'chaqf2Q0CIZ][U_8Os'\dNiqZ;[;`\Y,G>@Q0f2Hj0,L3$*2Vl")M"IXFi0I<#;Z_H653H]'kBNZa@CBtZ0r,Dc3"@(=?bY?pQA_-h@YX1`>(oD2:tdnJOu/Xp*AfS>MC70,eu1N9rrq<TtB.W`k3E-_$ggu=7sSk(al?]S7B3>)c*_p'%Q?bV&nVmc2"[Ll"dao,g[$%mbs4*&0'mhP?47_4,q?GiI""M5$R>phG(ZF9%Qe!#7^qMXkn~>endstream |
510 | +Gb!#\>Ar7S(jupVs7!]19f?(]jI=r3"0uG@[KTm$H,(I0%(&FWCa;n).6Ht$h]_)SPW!\),f"_ID2$m/n=8t,OBVE"qL=^!kbfR]5DBkA1n7Cp#s'oUU7[4]8"Yj'_U[!+A*S8a5o^DESFMYDrfNcn+2L4PZ.Z!_%XTo]H$asPm6pP4Bq)AI:o':(QU/IS9T;:,`)<bd1?58hr'\Hk^#M?UT*Of%-b4G-Sc:U%/akppreE:)3JYeB/sr.b'9)`daD410/BcP[:hdEtA/-C_)QQM!`p!9iU\gHDI&%3TbX=32@4:4N+aH[HY2eB9fW7teDGpt$A[",.<YVplq0dIhq*aJ;=j,90VV.a?#'#oHQXZ;!m+ruEMi8NPO8dsf#jUiiK0^%hl9:.UNn4m8lOhqA6?C&@21T\H=TRa-5nXaf2Dce9^BrMX#t]&#!cHjSp_!-&do<Z-OOFCgR8V=JnUFXs]Kf/Vdu$CM`:"%E3;NGN"ijPm>MRlidZfQBm#3SJ^FCllNpLF&E'u2(V0m&I%\n*JB:PfSoA&,=9]5,l3Ws-)e>NdL\c&'P[U>.k7]0m,p7,@;bWloUCeQ.OG+XC]J-"M?WCg>JC!VU3LhNY@:1hKQDU*Xln1FS`@;3rKD,<R9N/K6d,4i&fM'OGIA'HenLZ&sp8t-8#rV6dR+0k@G'O$LL3*QFr9:9hI)[)$'E!sj.kKLPsC5.*E\3_%#Q8ri2XX^ah%4;1>O(s)/#"]O5QRT'\'cKBRYu."WfNa9_?+E$"]s5eL\:C()</shn?;*qD?Vifs91C:`B9NPUKoKZ"Q`.0JJ<+9qT$-AR<Wb1caSj#L2*0P<[oRmdg=ndU77$++EkB-CBJD+[V#b]^dPU!W.#jR8UW/B5rPl6]:_Ykc9o+4Mng-,ICP&@`!5^kA6ie_CBbD7f.0L9cplnl-Vk@[V5m>*EP_[+ke8AXpGZ2k\4\+SOM9Gi_"k<AdUdjOmXJq\hptVSYagIM]/<*DR\/UubF$_4B1ZPE89$?n^,ZDhP65[F2&%0D:25r?(Bu]9fo_3Ql5JIWa0;H*&>bb][<,$U&?);2>K#EPbo1stMRJ>bLbZ\WHo#cp]qsE<COjcg/^DN*r9"m#:jSt;nTg=J)qnI'PhU0R$ia&n$==aNh`]gX-Ff@C`?U2'HFikdJ[Z*>+3eR.b7JeN-+0$.<HD`\-HI(M1:48>k=5qf]RA<-A41Q-cb)@iB1smeVl=$[",?UX9,/KmT)6^OrWk2KK0tuXqF`\/nh9L0jGqo41Tp(FR0&YW?6ak2'7ILDlds>&'H)-@nl1c1b6X&g&Fn+9R7,:r&-,aY$Yj=e%C`V@6*_2pD1"Uqih7[)ap'fsFc@FW$mbo):O,+`#C0II!=NRQ8Y)V',5-3IXlYmJ$Nn*=r_c3WK56Y"d'%8[ProeHJ(qnc6cG+.J<o%SE&-0N\02alId#>ScZ59*MGW;&a#tf*hlr,4\DYIIGW*,*Y:D6_i$D1>=+$noPM=SmX@'6Q*Q"/IiQFk%Koj4?e\iB+,$@LM39/Ln5iqDs>M>I0PW4?eu3=lZZUAb\]kk&5Ui+g$\4hI"JmH>ihm<R6P[mTsiMb+UHA,Fmh%YjKFAiE&D?s"mNZOa$Sn;JB*a38e=lJPmJr+b1Xk&)j"R-V#4%/h75hme)Z]8@BVN:-m9i7LmkQOG*iqe?3@^j8%V<$pE)9Z7tZH^3hS-:n/j>Q"pZp[DK9rJ:=&d6(KlNr(S#Bm[h=FFO/rh=(_?&"1qui-V@`Xa\XcG'e?N&&3]@;iY,mB%*1h=ZI"nK/n'!lkk.hD"Uq#J(<=C1&=5_/[^$b4h6;9V"GjK3^3BN:2Ypq~>endstream |
511 | endobj |
512 | % 'R131': class PDFStream |
513 | 131 0 obj |
514 | @@ -1839,9 +1839,9 @@ |
515 | % page stream |
516 | << /Filter [ /ASCII85Decode |
517 | /FlateDecode ] |
518 | - /Length 1110 >> |
519 | + /Length 1172 >> |
520 | stream |
521 | -Gau0Bd;I\s'R_puIlMd'l416PagNJ(a?qk%5QPBb)?JS[?YGS-fgqi0;K_s4]9FPbDUZ**RMZ;]RJ5RUF7-SL!1uG@q`cT^hbq,d1I)Kqbn814):Bi18;Dgn_a/7V2GOh0kFS:s&rIP:?ECNTPqJK4K!1PR_h$\teXPNJ&pA9D#[W+iU^Agh=!2M/98mii(ZPkSSAQgeKrf&mD,<%#I>.;<dU-3$It*)^k'Q'`=Ss5_r*(RSj=nHJiepMgX,K^H@:VcgO28h<O-,F<`t2bA+'uX+**kPuAj;?UV7[H^[MpeWZ6DDj"]rQ+/'G"noZC^GE9%=pH&oiNHnTdUo);LThps=l*HA^j`>Q[i34W9i@Ot&T[m%U\2?2;G$X$W+-Op=hi?3G/+PfYBN)`sf1e-sEfn`fc0,h0f\6,0f@>SttYZD8l_SU0oG*:T3<:1h(5Zb`tT2Zeh>1oiP[.OQeYWF!X\%6rlPpi)-hD@Hkb.fH<3^NP-ZV!oD-b9/e9&*UIXT:d8G+]$S"9ND[p;jWk>>C/^nhm=JUU@&e+_62>DUSOe]&.6k!rmjV"e#+9:+`b<!U95H.J^p/@Sp^th&Wg>ak,0$@Kb(7bSSl+9A3.=L3pX\q=:%$o0mo7?V-E7(Hn]fXbeo&XD9aIQp%;;!6`&38u#@XBuk8$X*VWP^QWf=j6t%sA;*X,ktP*f"CrW"bIZ?8ELg&]cUikHG8\G-nnaQb%PY?5*VEU%=2A&%_^Ah9k,47Q?T*V'PI@ZO)7"tnb4#"r0gaYU@9Ug(S*J'.W`57Q=eH'jA:J?Y'kFGAN9`fAGHUDV"raPUh,6Y<\9Qb@0p8V'i_YYuCe.K$<no]gNjn]<dDdT,Z]AV<@(2D%[,\5`U%01TOd"LfDXR2S>RNTc.b_[B2gc*'q[RGEKb=1QdF@OST';2AHML,.U!C/^m'.AQ[DQhNZr?6OkPF:(A=6K<4MY!EKps:UgFHO]?/U`N`$+-Zim>pQB(TEZ9%tXrj*LA.mmSk9Ruk[iO.p99m*Ybb3mFAQ*!KPn2:"4'b*cj9Eo+(G8Y53D4?*J0jJo0q`bi$YG6Mk[b(WFF7?NeJ4]=g#b"+J?YP*t7i'5J!kS!~>endstream |
522 | +Gau0BhiHJN&:R./J!bS]QC]3h!r5-_IFpXSUm"hbg5U4Kckd?Wi,3#%[aUK@ral4'@ClbUFh;<!(shB5n!e58+/\i(g\7cPpcX>grq+#;+O.`pHZM_riE\JaHl3FlrSBMbGSYYtA<C9DE:@UV7'98+S.g:l$l]\Rm8gP7%M5k&Rml6_KNR4O0dLj/i[&]`#kia&>f.$6i&"tuX=C4#:bfG)%I%LrIg,];2m_9G"-!<HQuV!cE2BY<;cgK;@;7C0D/`'f!@sI!5cpP-p<iNU]<m3g8jE5MC_1j=V8Z2\.\fVR+"QFs#:j%/^:D`IAI7kTaGM/`!uo-m%+uKm(rR9^:TrZGc>FPIaYTaVdX*7XXaC[cDKeRQV8@Up#@%WE7Q]b.`[.+ZJuBG;o1l/!/S<l3--5sf)h)/!9Q\31rPBGlU1ek`Su8%OL4@3d"0&Mu-Bn^:bQI,"Y[9?;6H0_@"OpKA0!c.5G[AmC1SIp=Do!UW0S-@/@4ba=R#U0E"$3>5I39P<Ytl&=L/,"b'^^1ugqkp8.,%su;.UeThD@Hlb!/O94$iYNZV(#!s*'FWdibm15`#]L5m8S9XC5>SN@nF1GI-9@Vcdkq:i7()JbOBQpOM\@8u'2:^qBr?pOT+U>+kpfqEl_-`8YC&1A#J%>__h"m^*hi,'eb86LAlQj`G7apZnl\F-;2rGe%0YP(a]8WCUT^22eOT)AgU<e%&,0euUbhTtfTKiOVlL@A?'63nWs5kQS>Fd_O)</dVLeA7\mYgGZ3uMK"ReSur\r5k&6IpC=F1cA?ilbA7,/oDUOd6KVo.M(e23a[t7=a:-dS54ZB.3(Auk&uMK6i(b;;6C1m'bQ=;B8G8BR4+YsD5[5$BY>ae7["3eienm)b_gD)oO('D=!Q@?`&oEG':b#3M_<YsG-/'3qOaW$3$dD.%d>kOS6K^?7L/)L0Uq,*(F!^=-;HU_=)Ep6WVj)"/KGEY8_:7gk:Nsg+&RIYaI]>3lC3Sm\F6tYWSp*j+a1Zr4%p<MO[84$W4sS@gT=3(%62-%WO@C3T]NFN<(eeQ6;,l8Z>IK-Qj^7LSjMK8s4G5nST&UJY*/;iqL1r@L[dko>YORpboa9f.@-]$W[6*1$"dT](1G=PgYl.`+pIE7-M=3kF)6geQ7S?.f8)HgZ_f5)u@%[_l~>endstream |
523 | endobj |
524 | % 'R133': class PDFStream |
525 | 133 0 obj |
526 | @@ -1911,342 +1911,342 @@ |
527 | % page stream |
528 | << /Filter [ /ASCII85Decode |
529 | /FlateDecode ] |
530 | - /Length 2014 >> |
531 | + /Length 1981 >> |
532 | stream |
533 | -Gau/XCN%rcn9]]`LP(AV8J0.3j4MWm#>;[@/!(HJCMX+8I@qiXi_5IU7E+qKrU-V^'.7XJc>dC[hKM*=*ISdaTC8@[#4Qp>K52S,&M.D\a5.XK2t2!1Gjs&<JR?f"B.t?%]\2Y!L-,r'F=<=m*hWMJOa.:l%-<IFP*7gNBh-cQDce--ILM.L@I_L^s4)N>BK7)Y_ck6A42YQF11i,!m[.EYC@u28g,#+Yeeu/rg,G2V3=oh4fK0!1JbEC"UU+Cpi0UJ;B/#oN]htbX\uWPB]KELtP<FKPDC%MuTTG>k"bPn*[6d."ErM3%>Zc!lkPk%^2Uq6t6Ui;"!]n>$&]\9:,T;?Q?^l(<f8@4qdA[204(_Yc4;J8=BE]qW<\Sp'NKl'aU^0(QPdgRmND>92]d@&4/*fiR"DW4*gjgB$Cl6GMj:F]f>@#%!.I0[QQrt/>YUgs^&]',$%(?g7@CbD*\;O$fW4\GM.!#_3,X-=>lo^9.1dc!$,-QT=%hTOI*Ngf@'[ap0(I?Wl%lV;%#Y7dW.KfEA@jg!g_F&')XXqAWrc*;6QX\LT-WDLPLpi=k->/ef4LteN_=Ke!(uV,!JX0/k'/`Mr:08i3R():R7Mg_1<5ab1MRN_Q0IpI.eSfja=(mT@7?ViXM`!F&H23'A[)bTZf!\3i["L_:(-Ek"0d*,k`oj^d=XN3Q5YH];\>2$(pN5l7p_O75B(iMFU")qnD+YrpPL=;!5.R3X=LmW)3qNKKn-T)9oY$[o2s6do9j75hH;4NrE-4__QR!@LpYMQ)\VY#g\9:6\!U&<0njF3qK->:?0agYHHSUUH%6dMkV!JQ0@aKs)HOs>iEf^=(9"H.u7iCjP%d5&MUOtS2bTtsR;ClD)Q[&mN*G1X3KrHtq^[*C^9<-S!]q55lrfJ:DH?:,Te"]t_\CPnrGBU>i,#"E(W9?rGR!o<MU#dSJ0>fr:7@/WJO2[#.J_YqMhO<-)LW(LDl+H0eeH7@88SY:BPU7##mfhEKSTR@dor2%P07)"6?U>dk=.=b**$S]W*6Xi!)19d32d!JjA<-Qb85QEIXX$bHE5GtY:=Ou+Nq#WYD8m8_n:5kZc9,\k+'#mHW[63$/X>>.0N^1$O@9^siI\)f-.[V;QV-!WG,fL\gSpXP6GF+1_FC"0eR_epK0i+e"l=Np_t*"-0(6=c@I)TS+Yla/!PHg6&_npu4b.>/f-nF6N7;&G8(0.IL*n1Ch8P2\_UF=X<$#*L78?jnm=FRO%^=R3DoOO+_q_<S>U.,sA?BSL'fgL#ZRECrlSXNV$Pg8@8j/T;T7k81C7*\?r<NGF<Z07E2C<2j"n![R5BZk:gSRX(77OMAp@d9"T]OSEhmd)J:LND#jkK?nP2n\nD,GbBbHJGPmp,mlREKL?/@466m(^Q[<jV3N\L/6m0&o.?/uQ:DS@!LK9J9(X2`[+DJ;+c;EQ-ECDXitJhE\g;Tnik!bKkq7<EfsenRqlPGWPYTZRInf1DH:H#XsBangNZV5(QKWY[&<"Al]rJhWS`L3Lr"84;_%a7nQ.E_]n,#a1*ZQ-dHlJh/C;Pif1^$6k!_/)m!7h*>2Gh4r9FS0obYNak+PnI-OH"7ca`]Ki'[.#"Ge8*i)t3JLNoRE"B1m)9aZ0[i=^(e_M-gKkYm>'tPC2X=WO;f27+a%g"4*WIbD`/h@c`QI%NL/mVS2M0u5H?aW:E/fQa[53`?#=Q*?bEu==2eIDDOBf@C^3MUTe"Ic4$LQUSXccHZR"gXSOGlEN)r]H$^bJLWFC5R3J$DOaeleFh@=H`.3'T?$P.W^=32m-FND:HY%:)#])T$==hOA>c+kLC5Ym5660n(:9HIuV(6A_OX5$f8-B&lf^SC%6R;ZmND3r$hD.GOHU'\+kt\dh,:"cc\s6RYD,DD<-ETE-:mb54BBu;BbLdmVn5B^,J&8S*\;]FAU*GG$X0N*E_>MLSI:>Ot,#Z-#3]tUJl(fFlFm<KTA2%7l++(_&YKS4&pJQ&M)`@cf+BO5CbQ\#Q~>endstream |
534 | +Gau0CD/\/e&H6"/s5Dn0=Am)Cjg_S-`PL92fa=NDf,DPWGonGkOuQC97T+BB?b\\feVVbX6g$Ea`Hsh@Si_W[`P9c,ir\07)CF&ZKJQ`.&C,ngXDd%YqVd(A*^0iKhSg*Co8@"eI(D]`:RZTmaW<W2"_">#*7b;YS"V14DaE)PY,1![890%alT\hVf^&RVIrAIMT*<]pb+lG#VqMj/3M*lpL>?W&=Oq)V^lkcOkoS*`ON^lNaiptEs6c3G6drC;IkVlq@D97MN@td$G@ic]Ndl.`@,5/[1PdM0\Qe+FlA\iS&MqVfF(L%=+8@>@S@3<]3FF7KKZZQX\>mskS;'^i;#'?s%V9E(kQJRJ&Cq6<1?#3/BL"(U(.H(/;B$ud'M&f>T#p]s]oQKV!aUs?PE#=E52,:5%`/4(9J/hDFE.^4KtXWsa-?0J(X-]r&ff(cHU<(r!%-HVW,gZd7GMNf/<k"ZG/h2225uZ8&c5,JVT;RQF"")^5!^G_;TE!6+D%qOfOp<=q1G5W3GrA@9%Ad1D/kYSnED)PYuZln:4IV=1R;M)KdThNX+ZLn@]!PF$9YkXXrmuO\=DJd%$?iI:D5<S&5>,27;R<keWMF,="</u$H7>r.[Vf+\_=YMe1:12kUOa\r)Lj5a'RXG2_Ai^7-TH-;9p*0Csd*s'GCP*'mrHNPSHOQ-a][49UF7@jfe[?MSG9NC?DZ'G"PHp^K(rOG^I3ZqC#GE8u."UXaW*C<u[$bPeMV9b2mBVlG[Eli"qdIO79dE+12/P"!<otWd"*UV_m='D6N0_C[lH)mlU*u&\r-->(>rSOAE]>MG.#=7j3('.>r!4)fgtI3dR5haOgmCc")p6rcrGR2ka6r(M1WH'5lWZ/j_:=r[3_oN4VZAGj/^@eJiqPm#%c%f;=Ckh%snPeVAK.df2HoMIT)A5lc%QN+rSjNNdDAU6Q@2c:l,EG<3PQ`@Vie?LJsNpqUDtPb?3*oqKOCRWp\>REJ*V;2NItUJRm$+DPN!CMlt<aOFr=C$0Rm;ut7A&`#Sg_0C>2D1Wku-K0'(FHLN1;54MDV^$'j*1of\kBocsCH$/g&c-b6O)qMidP*?LKAs%AMIhSg6*,upRB&E"]$%K,aP7HggWCWsiBrnr["h9UgFIrGqNhccN]7%g[1EC6hbSD^9%[ja-2@5U)c]3clm"]'$_*?P\bs76M#57?CJeIW:>gi/N8S;h)?=$;]LE(%&Yp2>34aj40g$,8:)>_K_5U@eV*&Z!.SJ^W\(WT/,A_)d>B$\BfESILCD?Q8]N(Msb&Zr799Ro./4iiFWRs.LCAf.4,W[i&_p#i4HanW9N<=gR`Y=uA^k8_,g]"hrVh*QI;:+18HN2cD>FUgpJ)uE5HNmFKXm\0G<$^?LlFuh1;ILe-Ic]<h.pP$H:C;ljamjH=T<7<C0>0k0*"!anlt^@7a_Q7blLMg_p&doMDJ7+R)co`#iAEfqYA_4B4;Op3@en,b^?smPT<aJQTsI0Aqe?3e"b`Wh\s`poo?-46Eg`N8a"u@d:-UNGLU1CfV66=qFM?P!LGpSQ6_`V@i&E@b.]s$2Ic*BS7eh';>^ZL/(s]QKLg.;^M$L92j^`X&mg(oCIpl)#L8.msa'E6jNN\Jl>9#^29.;SqN!(1%@[t9W_LK&DINgto^h6cXf+$)0HtHqQ2Z&LAKKluo3(XB"<*;3aH'Zi4GUZoYg(X/[kF_E@D(Q\k+Q)DfA(]dC"=oi\+ghdVXD9b-+??3rp^Fa2I701f?ruEE7"B*NTj+e>Xj9WUkB-iII*842$-*DmHr;@$E.g]^:$N(YQQtC@m2`+YcRbagP'G%8<f;I"5)4+Bhg];+g[q-[(,K&TI9OB[@ng>?&CTF>#bJ_X"n-\n-a$oB<'?>7:W),Mr5lpON^8kkbjETrdU6D@["I1YW(GP%_cjEt-aWDP[d`RN4ULQf%*k/Pn,eOJakWA3M]*2*DFG$G+8c66bMU8~>endstream |
535 | endobj |
536 | % 'R141': class PDFStream |
537 | 141 0 obj |
538 | % page stream |
539 | << /Filter [ /ASCII85Decode |
540 | /FlateDecode ] |
541 | - /Length 2096 >> |
542 | + /Length 2111 >> |
543 | stream |
544 | -Gau`UD/\/e&H3^ns5C[#8;9O=j>XV<5,@G#V9QTQ2:)d<0[LFYZ_9pTUuHX6IWr/0kLFLT0blA\R62N4hECTQ*C:/6L&NkW!8\1DQOb6m&I^H$4$a++=7GPFnDM@G6!038a3a.ZJmLQqER*OZ:Y1>6g(_akSmF4j%M)`lW6#P\csSZ5h1IEJ#&(T`7J[SE)K?>;&k@Ju3Fmm+"]l1MaV0dCDI=[Dp_\bC@JKG1'L&F6.oZjg&3g+`$H;BM)3_oud+R3Q"jW8cN7jau3M:A[g8FNa4f?*aSRJs;$&=up`HfU)^obKJauXPr]fBD-+k+S^('!h>_^=*5p5D2KgIk&cj*0L<$OagS/i-lCpg+$hflP2md$4dXSO5g-=SPJ*0cILG</IXaLP.)nEMtDii&!')Kq(JEfE=f/n_C?hD#LZt`dDZm8WbNaI5#m.Dd@X0[OOqW_/Tr+1BWP!8<,T+1ns5/F+F7TIHrIXMDC%r.Hr*<D16A+17TI,0>R(?1CQdPPS4ZD:UmgV9EU63k`ea.@Iafa5&je0-"/RkMAF&,i_)0gRu/c7QT--%`]>2NJ,tIEhNF@3jlhjdQKUr<KN)DmlQ]LL98!uhs+CO87MdaE\/&C,UFV:8@1:I4aUIC\GFgpIN:QG`B.4[?K6YiZC]U@OV-itBqP?<,&\<C;74E?Kn^G_p`RW'=s-r%-bPc-D6*peA%"d>oKQ*oD'26R5M*LaA.RkBY0"&)r6udeqQB]Hak1X2S'oNX8?qP-gnY&i#8L`jJOu]5d$<Xo[5NqGR<_ASoR]Bi_p7naW[;k+2MTAs>;Opc$msb;$e-Of\\6a?RgYYA?&I^M2%]knUWr/s+&sBK.'dQZVQ!3c#h8&qp0Ggr=5q]!I_L/2!bJbJLW2>_2_WhM!/l^C4aFn"8VA,*._oeL!5LL#t4Fk`pJ!OX[I:dBT$!$8J$69luX@to$^dhE\bWPlJ*o%-`BS(WOI(;`G5o5XK<ePNEgqu/7gg*Q"e.CqUI?oK;:h8%]cW]j=-edh*46;>-Xmih'='2B,8gXI%W(phO.'[5(^lu$rMTLqen?B/7bb;.7S4]3erLD)mk-*[G^p2Z!Y^A7?p)Y'G&F,a_h6g@[dtr:j)X!-2F-I(^a)YB\_.2Pi.&m=PK;pr!4C%;V]=j!pZR+2O3q1cB'@K6j!ri57EKQ=<9#SS4d/*cf[aXMXSd?q;+o5l0pQkT]j2'kT]mG.\rQaPVr@0uI-kItXOF"btHrg:ZD6\*u'*^+ee-Pfl&dKXn;$VD;4@>*"H;g]7BVbL'!e='oMFnN7XE=0\,?Z&lE9Z:]l%tc*.%26b(6SVPp!lbbs1P!P[,c!AktaCKUlKAR*6EQFIoO:(?dKj;$f8kolV$fK2#7]m*O?jD=-gr"k31rP::&-e:V/L:PDo9(2$&`N`#Z03E.7qf(&tPr<\'&@d+r:(%loqd0r%Ak,BZ5JI5=atLSsuT"0#1Ha,NAUQ[9RYp:q&<[m+k=I_u6]H!\'`K%92TOpOf6U./<ZNbr0&?q>ZR"6Q(=Jk_qkOO^<;G3g.ule&T/1,4;VC+OSB]>ZYH3[fG'eTROXkA+PZhP+.WNT!u8TVt]=bcW@/O>8C"[M_EG)&=)DN''GXs#h</RfKjti2DA$'iHfE_Te9VD(sk03PHi/Xkm+LE@Wk=_\8%5pc=r<#eMOYi?6p.E1@5S2f7c`@/!`-XX20.mWP$IN9Qr'-"8.D$I!4T2K5sU[%-)M2a:UT+EZ7'4h56@g58<D6sZ8qM8(I,dmKtMO,D+p!(2q?gfAH-b0cJL@uooWmlBu0Xd)NC\d:qG5>1XeU%l+?Ja2Sh[0_2Z;LVE9BWX)sURb#ahmC,j&2dcN3m#6Q,?&2[PeVE8N4'uTr66':<6JPVG:DR\l]DBXMY)8-.f0-rF;EAK,ZF+i4]8DadPZ?HfSbk$*S[M_HJSd`?Z-#D:B55;>Q-"#W;-JP_:nhnqL_u(TaO@tGc?\7@O!NE^GI,(d.DtDSQ6U"g>1Uq)ogWoC_T^`4tZ#*\f)_(h]e+F[%q<Wf@LoEFJF!jot@p4SV42-(5u^-YXb$'Su%IMd3;WP-Td+$KDtrB_T,(~>endstream |
545 | +Gau`TD/\/e&H3^ns5C[#8;9O=jS'GcOL?[*2X@["5W0b#5YEJmNC9cl(!$4E];$[eUoBn%%]05$,*U(-_rpHZ@gF[_$2nLA!5'2c0CM76,8d6gG(L3_0&bF0iPE"@K<QEO+$d"M#(sa25][DGI_%;%C/YE$0Y%fc*$2Kb:m2n@OMPO8]17%d?pRHX@DFB%JcRNDo]G9QXs^0`:!b"R$\bJ8DB]d.75%VC3N*aV.YH6,X?bll!pIesf?t_XkUVU@L*NASHo]96(s>mQJZ3aT[8HRd_Q?cDS3crK2n;n$ce)>PXTP+HN*8IY:LGC7]K[&#`'0^+p7)3@4!SPj@YC3qKpZ8bH\/GdFmNFTF1fIYWg3H*s2?S-VV3<hN'G#1)b9M[GN+Ako$U[b;\2Us*WtfAk=ukn.gm-k#q`CNP=?3@Cn7P7=4+RuFKAu*aq=\Le+-Q%1J!Il6:q*sN$p()0C-rn0eIF6.?An]E9D.FH#pDD9<s,3)+;bSnf^N/OcU1"Djge#YO$%C3G6Vm/+T3+&pa'Ve%)+XdU<.\9,'d3W0EK+.#cPW@:fQ1,!*[_4\U;*g*^_fX`Bf3nQ@Ee-8J<[,u$q,Z-H:,#bKD4fBfA8)7egf`Oa2*7Og=foa.^!`%m[>re6_aUC3G%>YD8Sd1roh)M;1X$Nk_Q(#p%M31BmF/tg+2d!BRp[t)A__n!B#cHM%H;](_Q\!J($Da/W^3FZ<c5U#R!r=Rg)^Y7mMGM!Bd4!^5&d!IUk>U\j4aRe)A5Pq6+`^h5=g0-LKXq6U>#IDK-D2:a%P%JWd;VD^Q<'hfi$p?+pP?MgS[bDl,]tHeV_(nN&.u_18::[rUhuS_"\MPQmY*eg0ruBYogG4%;mRCja!XrQUG^`Ai"NOMcf%LI&X1o;n;*TjX"m$c85r$*t?6J6pngUo%@[?8EaZF%3AiVJXobf2#.dI>8;McB*bX^o+(%^]KerHIeJ5=*J.oKuO=VuCF/u]J80/-@rJh2E_U(e;ipj,6oAY*R+50n\GVAquV:qk[Xk70rBrm*;dGEiQ87T:VuZ]pslANDpM6jd>VM0=3_^#k3]>1%=]<)fpI9#^cp\5lNg.&gqm^se/$W[T>2cs]j==?p)_30uEkq`.e!c!S4mJeOO]@.S!ASJT?aKiC8)4tUPlg;A>NNH<.U3=^cHWT4h"oE>%:MlIoIT^!N@*c?-PlFm8uCe6Ll-D%^\1A=V9JH,L*PhEul74`6YdJohOgV`IN,@N)dS3EAC^*>i/60n?JIK=hBh<,IKL\SM.O_E^%Y,?m8]*3_(LQt7#q!jFadsaaP?n<jC619WU:_T/P*,-Z<\N["ni$6N<9i<l"SUImmc,0N6*8E#,p!TIco1F?Aq(ECgh5'W!l_u($^:(9N[55u5q<#c'`&IInOp6>#>O<9?Ms".Xlr@cl*T_I%IWAdu:8Ts?eGhC?G'!In\&&rE&V$a6i7(QX$$uaJ-U:l*++(\,;+-&n5(e?<<0H?*?#gg^HSXt-MV:9UeTVp6Q0LFfL*5==@6]-j]KgW:,@Ypm"n'j6FDh>`gY6?f0XZ]TCRl]XJk^f)nO60>D[74=71MXfLFUr5Dm$/TZ_l1s!gD-dm!<<"MiXd/pk;`&GtOYm&]8:;L2B#,'0V&D,$d">VPldQF\]0c&b6C99L06](g6n=I"6&>C.3]LKsN@/1('f>#L/IKI)G+9BkW7=r_E$(-T"JK0daC2c?b.l/th/GH3)ta(ZK>@d_K4aHBKfi]=VdOE"G-\;<TZr$ArPg1iS>K[%-1%[m+1*nGT&-GhLTR(!B(&]/D$HIp''J&!`=8.a2N+N*+5tXn'"Oa4EA34g)9.kKML\/!]Uh'.%5d/BJPqinnVXWr3R1:"fu?i'!!mVhIFD=,HX?f!c]p`f!;6=ZC8/b.NZ'GAjb6Q6h4!*M\@(Z`C3Vb.-8RUnO,!rSG8G^:tqaPIb?]a*uJ^e_2MK;30eAmb7l'^UfJpMu/d9q[rIUF^%?G*.>h))g<aN?CH:[J6t1I1:oorX4Qe5enl7B,8]BjgYuAX2o*t2dbQKdX&Vf-^3j3M$g:(I+R4;pot)3XX=Y7uBYg:T3q>pLO[Y)[%sAG<#QFfimC[c~>endstream |
546 | endobj |
547 | % 'R142': class PDFStream |
548 | 142 0 obj |
549 | % page stream |
550 | << /Filter [ /ASCII85Decode |
551 | /FlateDecode ] |
552 | - /Length 1850 >> |
553 | + /Length 1892 >> |
554 | stream |
555 | -Gb!#\muQ0l&H.(+r=>Yo<OqDS?t6uO9r0,K-s+f\-:k+8qI.2JhI+p[H@8'XqS'61F\rW.(S]\*-SW0=]5QQM]NLTdpiVMpUD_J&5!=8[P3Ytp9WmjZeF1g[s750ujb:;bgCC1L\kYEP"IO7UnO(XDEFNOs=rI$e&XO=,@]5]"?GPKF?DBs'mf_.4@?!/K]L9Q-]2\)d.\jP3@i@rXM)^eE%@8nEN2/!rnZ>e9!W+]3@O<ffP5:(4+0#8Re`K>s1_qRd*-uPp<+/n!bf)9Ua=KsS3$]_cDD_=`Y=#L&Gpgj[aMuM?BU6Z\P)\NRPOTYe#ecWZ.)oRA)/lE7S,'O'T!b@jN`7Fs?<GX4NKg#2T#ksnj(t0F3*$G'.ErMao>M`q^c&G$0p4Al8S@%E)UgI`.2$h;le>kKD[E:4l6MuigCk:mi!m,Q<=JS9P54&$RREYl>85XEfXH?Yl/#I=j`li/Dk5InD;P"=i?slM'%T;?TE\B9f8RWgG4bm>2hS0'pM["t3NWX9lSu#MdS4F+Fi\A#;Xb*9%EM8?J[8iG(:94TZJQKhhQ"XFfeP2(c2('fZFPe7e*T@fZg@lC8!UX"L:#mb#8Ps+p&9qMPK4e5f5!Er"a&RNo>C+Gb\0R2MNa"(.fpRj`Z4$\n=puVD'THN'A4)k0M*/)e7X&$Tb2??E7l4n`A-]jh:`UCZ[8Ca'3;8mQgE_YfoL\gIltW/E_\L32hQ:M%/UJOc\L8)#"7kCd`AIkA/Y@E10GS^c4:ub8N1l*\XS;?V9$14Hr!P#KSRYN"Lf!60J*9^i@I[$)P!,ti(L1EoX6Lh&J5%@5uX>)`$M+>Oi%;*L,6B+b]Zb/=dnR6D&M)\X8UOb2B$5L.i`=NE=Ystm8ThF"&`N'du;EtT1Nl'_ap2,mL?>mDkl`mS8Gl=p4M;4)NP+(XRk/+pM^V]?`^-1Lq5PD5J$J[n(l6lO8tIbd/h[(SQT\`k"M^MM$0!D>X0;\&?Em%+<E$=]1c@L=OnJol<o0=F"S:$KYNrpAYj[('VXnHFX8r>OYMe/;_T&fH#4?I%%l0oRW"'jNKqt8&IDR>-j.\3PQKugH70I(Lu6[>O5oKk,Fkc5_\:MPG:TJoK.tN60(cuB:t."+QIA4K#V%*ej5fG(<)/ErKq*2gJ=<%L;taEDb6Am!._>T.pir>C<lhR'gs3i+mQ\D:Y0\K,_8BP6`.m8_d27UQU+A]7WZ]<?KLR)1?'pD/bL8:&[M7Q2g[;E*iA,Esed%_7WOK63U<BH^%+]Q,2)N0$mg8KC*S>g<1rPVFSH+#B$JN2G9?+q^gMIbD4e@RC7O&=0GmGik9_'&YKr+QVJ[4r#])[UMaAR_XXm8*CWR>4pD0@Ho0=B#]g9r"W'7.2q^F3]0<c%4-+uP6k<&F6P'SW+s/',1*Ko%m-/'OQoYL7Ztk:UT8+49)GEXd5qXbn:G539rRPco,?[l]bV,rPl$J7*&TUYsl)7F,b@UZ4PPk]so>4VU'*CRq0_W=Z[<G.C4W1U6.9rVUN,j[!!RpNn<=DPofWpau'K)cZ%jc@A]kIDYh^k4c?1*<1cg3<2=N_Sm3er2B^1SE"AKq"3Nk'tU"nn=Y6QetM0@HbN?7qi;g5.];)`eWn%1o)@7fa#l_k'iS)B4C)5"F'lnQ#$dqU6[5gdYF(r&^GX-<,RX"c[C2`b8C;q?\O8Sa?+#*W*Yk%A%A6g.rd3t3s.)<^4_f1A=pc4P]osuY\me2`HFNNAN`#9<8FDr'RI/U3Vq#Ihmb9FLNE?T0oW;doEu$Gs^7.GTh6j'%j]<=F7SSuiCDZ,6cXM3MDa?%lK!"$-W*$(?-/.t*3&t8Nr!.:B[5.~>endstream |
556 | +Gb!#]D/\/e&H3^ns5?d^W&&OqojV.^ecP6iU)CTrCCPC'Z4F<2=_o?UQ)N@'YMXDchbl:SinA1sUp)HAN]]N"giKhqD>\JBs5T(%q2cZ4FNO2h(m>mu!=];+@X*4iiUk&oN9u>KlZAY?fFK_"o]3WB;T=!M$"ILf+\Ha#d^DNdals*?\gnjt8AbiG3Y\muOP^SI7JM^M9N@3)F4mR()F#Ec/QDRA74)0M:8F=(k47lZ1E+!*iV.LuIt"u7DSPL^pKa3EV'&kmY'4r,_aIK]<G>&M8Rmm[18<0dZFlE$jTV4o2&<DlE@EZ"Z&-uR-+9\I-n*+#.u2uM\kj60k#4!,0sXFB3fU)&VCjb)o<1NrV".]TlQIc?MkN$qA.k:R8CoO=oP2+5'PjC)?;GcGo?Up<2+O%S.[#$.%-cOm8l)CgA6c%bS)u<BMM">io7YYAHNJ!s9+YT)QS%Gq*)\N9o9p;3/`GU>!PB\F-E6T_P,rk8kM\8M0"dENCRIsOcZ$O2Q*6serHL]]$'#,#5P,S7Lr;/OoaZJTG2fXQF2C*0ep"]tKq$L[lA3i@8E"(rCP^c2/90;k%Ml:2`pgNY*-nNXU3qs1W%ODI`RrZaD0EC:'7kXdFCsmsRa&&(QHa=%l0]-h2e;'^HT#rPU`QFZ`Ncb+MubZrGWpF,a(Cm!!hY>7$M,rCPuO`Dne"<eQtjL#9p&SK_[b))=b+)pO\.`EEAZpMO#V0g`h:fLg`KsK3h6-[hs#E51$nprGi%6L4WnMN7jGdEU8mF\kP8pajF%",-g?Ap7de5hA-EfoanPE089gBF!-"-PLM;L9Pg%!tWkl>!&AH#[>d#Z1c%lK7'm-9nJ@GV:(cf`9@$o'DA@+-]=%0:Zb9j\OcZVS*m2pm\37f),mY#=:fF+^g8:esMk,=7)9PPe3N)U\7hW<GAAH6EL8)'o+m6M$U4hLl>roZR[nUfXt>tLN,YD0e&ki[j_0:kK19K".$+9sQ&@4F`?UelgLW)h3:%;*[\YTI8nqSCA`Q5kWZLO_:MiSB`V"[1d6do%&d4odl^ZaTn(eP%OZe-[D$7tWip.BWY^E:hQ^j;?aYQ_JAndj(=hn7Ltd"!"_!!F9M<EU.Pe?qHU;I'HocGO.^o->"a.Zc6W-ou*_3eF6BHIC6.1$`cMFV^p5P5`&0.&H8qCRR;<R=QrGDXM%$.UQM&pXdRn9l(f.D966*MK`lbtPTK88_nZZJ?UbQnLI&PeQUj/V*r>hFF=ip/<nQ1Z'Rn^6(+@;nG)iDo^JOLsSc'hkT`a?t96GYsHp%0&+?i,>g3`JF4)3Jp-73d1m_*!=iJ(fbCO6SH=6p]E)QAQK:lg<^MC^&EQ0>&%%g?,Q7;g3blLa(`nG"p^)5.kc4Qbpe\OghtI*12OefLbe.E_IGc=(8h[\#E6?U.X8p1+l+%_J$alf.c0^ig^^<6Qj2@j&os6qL_I+&NNY0!-*M4aYYl3:os(o"""qV`A$3*E??;;Xnb0AS(2QH:TCTI-KP>i?]u)QPkWH&K9DnLf=^3"ChVkR@q4_eUS7n[C@Y=g"-lR[e)q>=t5ltY-h+U']k*RQ()@:NqYG%npSYq+E%es9i/utfj=;5htsEBcZAim))uT0HL557p+!p/PaO2G%"`.8oon"<QFk#nL>fU<!8X5rKE?AuIWmm4[o!+[@#nW:#J\$Ve+?`&c]/!MHSg_Tpd5;%h4o0V+FWm!f@K8:AK6B3F1CBgG2V:1?NldgftRFY_'c^/^O>U;h`YdXmWm=J0:E2,BYBO5:'Y5rcS!N-NJp^ToiQ+#hO#=j?)R"4\i4Jjej_,Y%N8==Rl-Q0&RRhtr+oQbNI/.&RSh,s*Ns,#/Nuhlm1"hW#_u^"M6PToXU?ap?LZ(^l1F%$b^\TP~>endstream |
557 | endobj |
558 | % 'R143': class PDFStream |
559 | 143 0 obj |
560 | % page stream |
561 | << /Filter [ /ASCII85Decode |
562 | /FlateDecode ] |
563 | - /Length 1284 >> |
564 | + /Length 1362 >> |
565 | stream |
566 | -Gb!#]hf"uT&:V+Ls'bbCW`)@9r.^F3O@30XC3n#[Y57.E2%4(9f]AF<Nr.FP(Lnu@orp`lMIT.7YWK2Kc@"LXQnVNiB)Os:!Np))p:Ud0"g\>*a)GF0$\-F@UOU</ZanWt^is'o)MEY[1EQL7-SXL'-W4E$7g']jVY-cp3?G.+c+OQ2J6B#`\.Im""9&*4-8uek9DD]MfAaLe&cR%VZgTSp;]G`!5IR,^@<Jtp#(,D0U%.r3EJSm>jiA^0PVX_aTPQX'BQq@7%;.@#5eUW#?nFo(T9P]hQU"T)B&@8Qe)pN4Uru`_094t#:(=D-A%"<Q5$mFk_8%478!\BOO?Blpi;$EW#RLt/QOnQ,.g37ta[)d0$m-c0aq^SN5-RDpfQf?BV6kn5(CqfC2@sk/<k3ej8="hBS5?)4PrdQAP9bb@po8aJY!6=8D'?U=q"drl*NONp%A.m:jUWD72k7jbU0u^2WUKjaW(M`C!4(F1TF!;)!?&),.BH?:)Nh+X'MK-u,[FieWBG^6LX[rcHL-APpN/C;<&@Y17cgLUX.2</,('&CB6]B.gq`>!`krISlNQ+^q0*C[le:.sr!`AQiSYXS$*flf,q?bF7mO;KQ_<p;1d$E55Kb)2O??;%]EEA$r,=n6hVh?J)3t*cq5-=tNoK$jW'ns^LYJRPm7&G#_.!):9$[KmeY<=3_B#7?,^B4Om@]6_.FKmPh<=cGrH0-YhHH+7,V)m0D'0U)c!W`/"r]`QUniYc-oe"3^$j.[74%V?I)Ms]:;AnZVFR_5Q,Si`Dbl9U"5kY-j]DgD'h[]aduYtE"[H"87YIn.7@B%E7aQqcik)cC?>iWQDTBieTtX#A<F`=oe70)*]00\Kp^"9u*[:JCeDI]\aR0r80mi-QYprtS%uM%kfF#jjS(!\D)1B:PJR!e%au,H`8u+!_MbI[rcZ?s4[;eu_=%DmWF2]c;pF#Vt+.g,Er2f.nI9iF/?qJm3pFNdD@m#-T=n[r*Ck&^sX<%i<);pklhpCYN9*Ik4`Surhl>54;0Z-2G>*Vnlb#!5gHTsbAR/0)89Y2tW3SN$4PJm*"7!iZ0k@dXklW)hO]h0Q-'Ci;66p#.P6aic9n[R0!iJE(YHV!2dJ-:"-l?h]0_7ET"on*?N@8fBMY]c':Ss]4'nAD,=<$"`I@)7Q0,n%5oqZpO_6%LRJi.`VSSZ-=J[d+sZ+mM(P$l_W)jJJkJ.'&'Ud"c6b_m\]sZ6BP*Z45!\Ve_<(E.;7lf-$Z_DZS?6`C/T)<!)o4jY.bS"<?N83W~>endstream |
567 | +Gb!#]hf#8Z&:V+Ls'bb#`MlbXo%TH+OIUX.e)dV%imYU%AIX88JV>^L*;?Z*/B2Ce2T?ke8q+k_G%]rI^7"eIJP"b#q&AGr(CU$"4Tf<4+pR0H%P06kpVh7Ff6"m`C]+6\a"sf)*mgA?jMrd-E?TD+'Ll//o'+)//sWL%KJqVf@fad_%i.0nn0--o![H%rB'3!U4@BLbFeq@n405)-[g.JB#bhANEM=S=Hqai(.S7SdIYLh<W[<or+]bMF\:qmt0]TCs,qMoq&Hrll>7=MClqZkcrqoP[2D^l;&Xf<jfC?Asj*@!]We.DhIP%aG%);5>bril_JEG/P$SZL2U*.7g3_,mR8dbZbP(_H3l$bQbAd"kp!;%"7$u<u.RotGJHj9M?VqJO9;G$c]"/`+eh43oR`s[:4m-C&+NK'"^>Q'c",=Sd1$83[q]++t6?r2Tj`ja:54T`U)$;_%\^]t#h\H8aD%d_PfjNMG&U_Ts=Guqh&"(<@Q3nG),=U#L[SdPGRQE]a'Z/dqEYWjbp*\lcbOBuS=qG:;I]ROCM:HZsF7Sg+0Knp4,_%#Q*9Af%`e.q9&c+!EhdMPBG!(Bbg'"CH2dZA*YVI1BBBhn+OgGBtdf1R$KpNu6grTV[3WR?T?>H0Su[EA<_-&UUZ-j4]..+b$a:ZLsQPj>jXe+n>)E7[#F-hn;C@IE>BrY&bO-rrkB:Nh7rRW"nC4+Va30)pMbd"=H@ce_!4GME3DD'pr9RAK224l>Jt6RNr#J4]A=GZY'&dXK0r0K@^8WH<MIm.l/L[%helk+O@"7rN_V3ZSqE(22t+5Og[R*<#)mbX5CZr3g<=Q%5?,C7q7H<Pg9])eB%A>M^IB^h'Y?C4*h$-7<2lOMIS*l_;ZKM!<C;iQhK`cY+<!+A*q;qL8ZP(a9"-Nh7I2pLI,IZC)<sTrhpZPO5?5r>7Ns\o25YC.u((g6JA?4eV0`+[`@4:%ipUJ(ksiG/qYDRLeVs>uNZ/#NYtK[bP9;"-Zf3S>CG>/Ke]!8\%Sr6:AsO^<DC17@nQ4d>`Li?(KC3g+.?7rHM5tkN=5=W'9P<]K\$h*c\"@cTTGi+H2AC>AQtR41n_%q#E]B4rc*j?dS)'.fptV(X^9nP\gX<hPd07#dm>0P,`s&UNnK6"Z4NkpVf:M>WnT&b^L5rPZc%gV^/sE8$(mY6?s[plqPRKH.*OWml5Pskj@jn5_>jhp@Ml@5ajVA2DDI_j'_922`rhU>N!i^$mp&%03Auf?1K;3?[[S\(o'J25,7&"eW.`[cZ["bHcTe0l?5XbEO@7]$EADD\D=h@Ze1^b2+S4[AK-rmCtB`Oi;/j-.j0INo/NU%V4YV%s*kV@9IKi?M[Fas~>endstream |
568 | endobj |
569 | % 'R144': class PDFStream |
570 | 144 0 obj |
571 | % page stream |
572 | << /Filter [ /ASCII85Decode |
573 | /FlateDecode ] |
574 | - /Length 1582 >> |
575 | + /Length 1552 >> |
576 | stream |
577 | -Gb!#]?#S^l'Rc%\J%..s8;g_hr'dH1aK@GTW7anV6&I-8<J,]/;s^c54:\("^3@SaL27VZ"c5X(8FYE<3To2.K+38*[a"7h"*d%^?a"=N*>g)1]9Wi">PL2C>^YjBfW/Y;&-C1aqVa-(24]YtmNj3jba;9Fh_WA8(ObnRS9?O+@'ab/K,)6O,7ag.g-M\;^4l!b.rpI;W6.pbVKa_d<0E1(q!o%eJ&CJ_'>kpLL#M_WVem:LFVN\E'L6"[-ErT5(jAVHP9,'[4FQ:qRaj&U+eR'0q!to]@6'q@Sj@Mc^?$H=3Zh7#QLHtFE?hV4bA_e;r1RbWD4TG?Z"r9QG'fnM6qAl^i_HR/!YH)A4a?D2Z3PlEO72qWnDX7nHe9A]+22BsL[!+<n<fs.C=uQ6A'_V4hL3KLm]=UID\(J6eA\]I6hg5QiqJ(Hcs1MQ*)Ucm<Op6('X'oPS`U;<8[7&W#qlS<"8Bji''7f"$NpY_0,<OS,Y]8o6qfgfJD4T)SKj$Z>%gHEUV']kBbs)u2eW`W'-Lg>3'Y[\m-kuOfBWrBTXe!#%g@m\.T%Vg_hoCfkFf5#0K=X72YD<uc/G5tnV63LYHI2_i(.&f.9GDN+)'&N>\A9kLK^%!P2klps)-,7iU@h_G7YfLQgJJ3=!F*pZ>%QFaq,OHODX7+&t.1-H'7@^N6+)!!G[?c`6%^4]E9Lb]ird3@PVm5(qiZE#NpU\X;+kZHgK5,@b:q0@)jpT1H](1g;+4S#X<!BV8g-\$I0er-:A:jYadZ<n2Nc9.&+?ej;_YR"u"Ru="%^,Q,\?Ep`cD:E#$V?jq8o(/j\SAn6(`).oN*D'7#ol+>IA2:d(dn:_.Ck(KF@2_'.2T"*pX$ECoWGl$1@.?R1*$\;hc"^t$U)g8lJ_\R^kelR\*BZJ;[`<ak3rB']iKS&Q$d,kLBi=NS#R-IEgfaYO+#T=_8Xl'(uoCU.[`E`jLQeLW?mq\F#*[?KK%mDC(04>)kg'3lrF1g'40%lo2CW#^M_I7PApI1u;V%ZN;Vl7PG[J[IL7L-pWZBGHob"D4=)2tBF(+gJ*Wf]Y>pW<JJBO61asbS8M_.4@gkcF!h^H:39?O44QE)e*+K@L*uu;gcHh8*kJ$4gHl_03'p("9.D:-/,mR7>_Z7cb.\i&X69m&CVIJP&*`uS'_En.3V:pO:`dtkm]G%8&_:P]I-n]K/+NUDMJ(>MGU(jcWo8jjdK7*P4iF4H8[lkb]mV;#ZWo'U!'rS8)%_<BnE4_$@8B]LpbarKFNE*X/ETrR)Cr$\Oe]STj!cs+U,hU#H!/i&s=W.<nIM,GI+P8T[KcnnS<!^gJJ"/Yb/o)7mXbAAM_Tr/\arIJ*smR2M5i([hSu`JDE.Un@hNX2$pW&&G!%8Uf%+S\?O\J-/ibpE)A:K9&H:8.RiH#YP5?hRAZgHD;r<Pc,U@tYl!Qm#cIJ0i^H1b"$q"jVPLe1OW'1iAJ;Sb^O`SU:eMMM`gtA4eSa9Qr.4$Lg5s<DasNEl1s;U;6ran8K(E'Q5GE>9\gGY:Es@pD(iubXV=:_Jcj@gfDsh:tX*\+Ya+'@7F>!OrN8Ur$~>endstream |
578 | +Gb!#]D/\/e&H3`ds5C[#E&L(iAA*7R5GU`##"tGe0b=aI0[S7ijs!YP7E+eGrJm-(`GK,(Y(\l%![ecP*Zgr#mZ+_a8DglO*G#4h-h-Gu%CQA&"Dl\1@<)hG-bZi>]eb$6C_/qkH.FYhLU<q&p=$.^,aTBI$KG>;=mp0?*gQ?R)&]e?5-,;B)*.1/eFl9.pGMSo^1'd//5iXJr=[Ri^`F@hms1uM"#-oC+J1=:o_c1>R/@DWT+.eb^&d@+/SAEu,Cb=sfL@ddM]C_=W\P9G.@pnqQ/lC<4l6^dnLXFunQAIbHlJZ*U14]cs8S.?5PD2JB[M*lZEf/@&W8/Z.9VD;A)N.9rm\?nUW:1EpEs]+6Xn0'2e(#DLmWE,^s`9a"8Jq0Iktp$L[Wpne$]@-N;WWgg):nO'+1mC9lr/aFH,;)Vd*VF>TA*?_KHKW@F0SjriiDIA*4O_f*d0TC2U.'<uILfKnqD2I*#tLQ7\6gSc+EBZF3/H2WFji6-;h(GlgQi".4o/VZsXMP8bK=Cc=[JEZ=,Z3gj.h1)fOUg^Y01LSq&\hJdQDRd5]:#F[_EF]YdQ0+s!0F^/p=d4&b2l]"!Qg*RkZ[5iVG5[=$tjOJCm*ON1DB_bpP;bj!b*KA)[kj/frk>?K>Ut.hRJck/@QK!98U.$](dbGH>msot*7qJ"-PV11d4FbG>HiPca/J*e!fo<m4?ik[T$$r/0N19u>Y7Bc(+#&B8Pq;Y3p7X&TcM2o-m.eD9_?6[<QJ=0Hn=:=r._I?139858;SrelkIY`D?_@B5;-jQLN\Mga0/p!`P`*1H@mEfb,,&7^'eLQj&gN[E5ij-X8PLlh;G+1uH(QH,0k4Hb4K3'l%;euqWhcG@6__$ujGDUNP2;o#Gg;1R,^u`&7Zg@%C@-FZ<fs"Z1<IX\QH)*jD:qm((`LtW4ed5N32-l(4Sq<Cnu[F61i5="-D:4GbBf`Igt0.bX2Z9KFaL;-H.giZ@/$XCI`(fX$p'@U-+ed;V26Pb:%Bna&e!5Fpt:G@_:BEC0BCJJVbCB-LbZ+g#Kl*=E@"cjZPm5+HMSbf'GM2'b)hUSP<-*ZQKHSI?5PK;FIEoN91.!a"g`MAKJ\b>$a^kq](4Mc3pij?M!9Gqj%0^$c5]&Kfo-jIo.<UWE^bk=&E(mIdZY9-<DcSi0j5jUSB/.3"('B0BS1ho;SngX1.-Fg9IcV-PZIgWbbsXYORH!XCK1+lMeg"2k>dJ:4dhn59qEsR]J0o7._Q^n_mj8JgM#Y^L8LsXHD-X\[FFCLS,>.?T(WW1Cj[2I<O.U=@U0U5!l[\8k/;$JP"1g=2upj?F0HQZBiN"F[<D,Ck'Q#.2u?_t^DD!,=>nX054Y2=q.GU&e/,04JpLQ.hH&l.SH;t"Lj)t=BQX:99_]-hq)Djep<\2WiA;Wg4S'XS&2]q>U$-tqWX%gXc/@UT$9hrd'hh#"="MZu]0k?D8"RJ46Q-mmRp!<TXGVl@:sGqN4a_BT,AQu=bJalPB4O#R0t7-h$?o\aFg'a#k$#g8]%&'Jr3(8R]sE1hK\sO]~>endstream |
579 | endobj |
580 | % 'R145': class PDFStream |
581 | 145 0 obj |
582 | % page stream |
583 | << /Filter [ /ASCII85Decode |
584 | /FlateDecode ] |
585 | - /Length 1651 >> |
586 | + /Length 1696 >> |
587 | stream |
588 | -Gb!kugMYb8&:HLqJ!`D6YmZ*t8Pu9%jM>gL,_2AoZ%0J(-s#D*g3C0Oln7ZR?f0N_V)gQ_<[C^1D:k/"R2qj)F63lG_N;K!s#[CaSkn=sQQ_"o9M5X]_$HnSn7$]ko^V])m&j&=8<Y;9As82A3Bm<8;Ic\J`N7&<P%f)e2"[."q=,%#>hp3W+in%pd0_=5DLp%1IfUqDI@6t8`=hM=/$KBCBYg>uHmTD(A*_-dP3t/k>T4'^OhiJ?5JZn-TB)X%j>e+_d:;bfY1$(Y9s_VJ=Ac_m<\LXP%#T'*!cLpE^u?_'J==aQ9iDMZ#+*Zm.#HQR^MV274IL#>AX!DHGL8N'$:?crTM*]6kn(2FUKBjcUnokZNL]lK;_VKr"&&uCB7S01@n#!)!OIN=U8_S0"9sS&/QT8e(=uF7&`2KeL2/WQ.^P@lC?>mXFt)Vde*%A(&rY#QNO."RLmtq/ptWQJQFgI@`fjf;]7#-V,*`86nXs&\S(Uogjo"ssEuN.K)"/H(>ThL5,BG[PKHm&kf`Al#D4s/,E"nbs]p5XecC)=VAcSG-YT1Gck5DVp+$.LhH9=iR:7+&0r=2$+/,@*r5ZC=X-nQuLKg3*d708@gK'@k"'uBr&"e7'jQRa5hY"JGkY"u2rT>DWFnlmMb6Pm*a\HJ`:e4q7r'KE"JL9ldGY8H]Yqk<GB^0.EA<\l96/69&3qgc65>gc345(<+qZ:7":_TD83':9M[ZBqS2]Z^<I%W.u;n]5sOo6g>A!-1=b9%;)4!^mq]Q7q%Z:(q?n(Ke3]]EG2be0LX(@Lnp&C_$Thc"gJ?-Wbm1&qhNj%m_9N.\Y\a,<&\gK./fEYZiBjp^lMK#hahmda$q8g@C>Y'E^t*.=4o0-0*h(U6@g6%F86XS>:ENFF'`Jj.%&]U..Y#U;kk-.`NR!Sl\J"f]aV.G=2U*krEm614=N;^#"r*!0sTeDD'2].,9I%R9FRAJtLjS0&H3:0"TZ<OO"`OQ\sa@.k6!a2/V)<W#NuEK%-llK]N\82C$Q)k&&k5dooYT)hWX/$Ji^YV[ndYo3Or/?j\+)Ole4WZ>N@jAkW1i8XlTOs887g%cc49qHDLT@+6a$<h@E5_burL\KiC]FckOHkFE"K>1_5GUs%;O4sP]i?@4!)EL,sBoK1=_J&uu+L:_8EB>dg)o4tICe<\_iZVZW0aBlcD<-Qb"$1t\30Tq.G26_/<N.EKtJU@jk!@?U>WeD<aK(4%^3S-gIa["A^bIbd?>oNIGc,m>6#B$/s]l\5TNE$_n9NpKQ583^Ac-Z#$(<FR_dFP(=TX,namK-CS4eRQ,n5s&D]3>cVnSkD'lg0BolGbBLC`g[]d?A.+*e\TlP'o<fa%r#KkTHs*'^`e![56Hf?jO5dm'1mS_T<RS4n_*JLZ<J,!Vr>rfO5E[6.oqe55/%T_/<)!a^4'=4_nC0m8^h>`p"Z1?5RNf!$6aB9-<>.,P)DF2K1<#_^uf$mU;OY%\8Uji>GATqt)+Sq<ss'peO^q,1M*o'!4>^\X-eE5s"6OUf+(S=fo'E?o'dSHk#PKV"msOGX(i6]19am(mB7E15>KW"IfS\Oi]GdRcQKhddBVgmIK(d>!We?6'V4bh(\q3?S!%*[,BS$Eq2k/\kt+Q^O#'^I.TAS53ub~>endstream |
589 | +Gb!ku;/b2I&:P.Os)<<%l3rDZag*1qkX1fHBS!80&d*Og0[S7i@O%!b8_*K_rJm-/->d6=SrEnU"#Q#i*KT*uqsHQ!LCsL[mf0WqGWCC`?i/ad0[%9C]b"f=n7m,oo]c.ln#hW`Lr7:AP%d8W*$>-,TeMh5@`Df!_%\sp)S&MkiqS<2Y4!<"0_HWW<O>.&M-V:p'"bpZ\pnX>=NLbb">7M)#_nf]29[!A65oT!bn^SZWTL/Ocs<3bVT_eCp(:oOHjupA\h7(XQ3rS("WG`91nU*?Z8"4jPeol5\^C[],J8.1]AYuhg[j(l_T2(i"EoQDa-5t9S7)mYb?bLM<n@G5ANkb[5@Z\VK3ujLmIaa`%H.Lm0A]9Of-e=MbqYZIG2ag(^#4[aS7\09S.O$oBn:B50Sa+4cjN45kRDQV.$t`S""R$TeA+MQYbGo98TaMYCMK6?J3bM\K2l24KALet?K.l;.lm^.@"r]`c(Y2T<q]?DKbcs,0\]?-'Mf3(gt[Y#QZal2GJ2d",;7c%Rroe00QTAgdXp(1:^s>?XGu4KEIG,UNH!l'HUf;4OXYX=3U-jd600qL!c[or-s82CR:=A6@U7G3';$/!eJHZ7+oJ0$]GU=81J,TIB8P"*'._a#^uonjSf%Tc.`iI&JO3E4PH@\-TU<ffasbZCe3HY-Vi#TX8dK=7ddHCHE..9sQKZJpORe,YBOc&`;Iuf.87Yi^Jgq[6cd/.kfNW9L>"WqD<YH`1cSE_qZ82H9WS(V+PA'gf_pcdIon[Z>^K4HDf&VZoW[?\"RX<@H^-pEuTcGm`ko:eJ/V"[9NWKs%ZiH4XN2;5Vh.\((q@"nO!RG&lX@YO2`?$kVdfTk$f5F*4?Yg$48.[+6p_<@?17B7L+1]+[*-BKrJ__N?:7d&"L<0p[U)+8"R69A/*g2V$8EhsV5:U*S?Wjc,kHa&\Mi*cVVh8$2,Uco:D+N1?*LE_5[YKb1?ISKM8JjO;jQ)?"!%C(3NmD>+c^`U6ech^e/Q^\"1E;Gd+EY1I\QQhr4u6Moi0c%*f5Ha($I_MaGj=`c`Viid[!dV=dD@%tc,rX\C6<%Jo'C5MVX6@F,pg/Xr7Y-62GQA_Coj7Q3_BU_,Q]Q3embfI7^m5(HN9;;DCYM+N<u(.Q@5[7FU\MLAdPke9Wf>#<.)Lc);1F;oKGM*>]A<+So5fYXI"#HBuJ9UgS'Ve"-C5rXT#]!8&7Anh'm?opAA+9)O2I(5o4^7,C<-`TNhgc,gc!$^do77f>,[(VDVU=$fkJn%k,7(<m=G.SV>B(P&o&J25T8;j6&=[>K:>0leI%SVdqG4>\R\Y`W%9eZ2L;[Fi!3RGR=U0Z=S.MW#k/$&ik;ibjulP7u-S9hp/hq%_BJuYGUXXhB@#g(@`Q,e"\;6+F4[G.0pICS/smt#3.(>SV#c2eu>4V*X'AoLW:J5LV]VNnCZdj"1CEcFqTo:aaic6ir^\K%G5<RW^#,FWk7Utp8o.uCTkFOQbsqk$G,Et3uEL'@.i6mH/4:`K;oC9#KtWim5Xs'@7a^ZIUjAoHq*/1b8>jrEo1F2lYeOrXVM-Q:V3JmM[hAEQHG`(3LjEgKhKX(H4qaa%Xm[2E9)AnGS8hlTj3P>c+VB;Tpp>PdMqa:[j-`Qq/2(i?p[%4Lg@OY]b7L9//TY>?t>m,3!gL.fKgsB^Y(Ue+8l9V:!F+~>endstream |
590 | endobj |
591 | % 'R146': class PDFStream |
592 | 146 0 obj |
593 | % page stream |
594 | << /Filter [ /ASCII85Decode |
595 | /FlateDecode ] |
596 | - /Length 2264 >> |
597 | + /Length 2319 >> |
598 | stream |
599 | -Gau`TD/\/e&H3^ns5?d^E&+5X/N^Di/d'Or70=60ep?NaoF!6J2B,4e8Lg>+lh;AJ3DnhT9:'*;l:;V7GC8iGTa'#e^OcDZ$DJ=mqW[['"u4@X)N:C&c/-mLg&BiprOkKQG;?#:nT!'NSkQD$J+&.#,;X0DiLERpKG"*.I6Z75p@f\KYgF%WBi[L80hkgMPb6j]!T?X^7`q<hWVfDSMbaRYk1QZMB88>@9X>hS$,><%@apIuLKZDPDp4Sjc1lBWC.`VH(UA/".:&*ZL93JKhi.=i)LViE5/7Al.@L0.1^<nlr;WNH4unY#O,c]/S]]LaLa0K1AU4K#l>.gtj72Wtc2fDI.EDE'>\6VHXAMPSAZ>>K,pLZH8ktS4$Y>kcKFr.$-(U12!fAmN:$)D(Dg]6\7aanl^`QQcWPnWI\(($Fn>^SBh.oE?0(X4-s-?1(LBk[k%p8)]Wc`i7lWg$qe"o/nN4A#qM0U^<gj$5k,*g0>c:j4q;AAMV@*r\,&.a+X^aFd,e,Ct,N_Y<>Y<)$nd3'@biCmg^OD_$r.`A0jU`<Cg>(rNO2j:'d(XhagThhCV8\6:]><sJL@X%;I`X-e23hE,0T4R#nY4d)`V$Ur9dY/:`1;LtGC+C/8p`08[pt7'@*A%MH(_Hrmb3PWl@MfCZ7$EiISYK`*StuF+,9k'*;92]CQ`m)-ch.X]2.*[=b%t%]RhKWMH^-3^hFAlrnZje0f]0C7<oHp=^"4KL[4!1;GjmVN=tC[sQ-,+",Qkeu.uT1I#8X&.9_g5C@@L)(A0lqbeB0GP//-\hDYC`*HQ@>_`W95Xg28bN-`r[a=o.:]2.fs65\e4E)s$4Ck]_9hEF_&b`?tdUATT5X@sE';$!ifefZLaH.k0GR>S`lH5A9V<N>"/#3gZRW+Q]ki*[7eR!]!a'k)Dkg<OU&h3YV]Tgt)[F7#&`U)='2LEp:+-"A=C%?AmT*4:9<qg,dZiX(qDu(D8IgN:?O6=H<HH?=\n4QmN3paQ;45Sfo)b(:D8?4CH<19&fV^II,3\l^CiU%en&q%E'972`\it([;>3$@"(G8l/eCKRkd$&cE#US.^j%BP1^e_>Zo8O;oDp#89-jr(`\?;@Sj1'A/UVl8h^4</<W]`Fk`qSHllX%a,`gdjM6n8LSRSMR@s*KRWco;[#Lunn',#Hflf*4iKXZ$rZQ\`CkXoo;$S[+e24J:4.4dpaT@JXmk=BW;ND_h6OS@,<;B?QK[;gRn@cbM;kWPqQ'u?laY`O32j@c!^s1NF3UE&G5F>:5&De,dDfHoZU.q(d;RCN%-f]*QZF;pjHa"O[12d0)+-+3echYrS_2m2mor%Wd8Fp-=5%la-HK#CeO#PBJf.5X21)=meotrf&>!ec?*l)p797Qjo)#,?j6tpu'cPJLom)&X9bcn'ict`8KjoJ*co.k[[(.a\WoPGGhtmEnT#?]2K3m]W>5I9VR/:;0:*pK!_Lq)_oC:f7)bAH'YaHFZ0&N[,g,=1V*&kJrA^DM]*"sq8UV#g/H_8[!Y8VhG?@X<o"JJT[!f[8/h#qW_<oA$#%DPi+cTWAtCG73`)H9QWmW]Ar#.-kXS'-Phq@]Pqm[b:5S7aK=nO#hFWgTD`:U66ZE*bf/?tOJ\O$**U"?NCYQ<+s(a?+L/,CfGRrJ`ncLX]6VLIV5?kLs`Ta>hgN[\GEsIcT)(>6B8dikF`@jAO%6EL4#X[SG[?3/Gqb4ob)(_3DaebM*6j'h:2Tnk,CYl_>9cdDq"2(sh`0^f<cF)N@[u^%A^^k]%S!\-ls7!8Yf*J\NbTQ+'?,4P^(t<^<5\DAK/g;I@Q\;">3LRtgK@"V1!'f`oS>Y<BOrr9Fg+90HMI-Rmd]A%63)fN+NZat$nb7X)b4Nd]=Jj=Kro-9GE]jPpA[<!o\QG!-`#S<@\J&$REcdJfs3'ut1uTrk@&17Fud-A=f$q@h=)c?RDopQBUVH*\k*n<`2f?^#55)a57%,VZYZS]X6_'5=R&lNl@.T/OVP-jV(WX7Hd#&!8BF:N\,h:#uPM_hWVLk#f4XCo.Dj2aLQoG/(rur;\@cW<:'DO-Cb6FQ%TB[FN.X)H!PSVH_P1#]8KC4'9MPo=)j:0q7=E)@,VL8*BMO*f&qjrl\g,IWrGuAJ3JQj<X@.-q!7&ZuL$'SB`b4l+Q^s-M"%t)llJB4lbMk\1>IA)7c,))^8t]3O8&cFRuB*18o-F=$ams0T%5a>Vh\pLQ95r$ADtTHL*jA*F(:LNMg.NSG)^V!MqFtJ,~>endstream |
600 | +Gau`T@;jm[')`jos'\a^i8fu7D:u1bp2WE%[+GH!??YYRh?!RA99d[j,./[2YOC*#)cC^N`ec@^0$Zm+9-T//2`#@n2528nNP]m?&\V>o&+<"F8nh/LBTc&&nWDZ[NfSWR4rUh=B60N4T-qPP`>irZO8a0:ARTC$]U/H%Yi>Fk(l$bpnIZ1Qo>X^$k-V(k_MmWi^mqSmd`F/j2c`$2CIufi91c?XV7`'>kqcL7/ZnM7Y=RlI16J^7G8TScBZao*%objKGcIlf;Z#O>(11bFfAQYS%sBWE-L#Sq0\gO']Y=Ka-^OucpHe!5%s[jE`6#=[I/<,B0@KH&o)3P*I%h)3->P*t++OA1k:M%%qQq3:@5@cp_"\$S>bP^-hk;d<3)A]:Il+%odIWS!+<&<p<GWlkB69njIKk"bi\2jGq=B4@<(:r3hEAA":h@H^Psn['`n[5eb#7B_%9^5>c:^g?'-'H#'ng&GhX-2Xs+e;Xk=954D'TGc;&W@Zk+`tT%734je)"sIXU,\X\UD%KVrR=='B*=%**B*+!YEH5ngC3o)03[)^V![7o$b9BCFO:<h;uL3\C.,:*^l&A#GZB'3!2>JXBuGJ`H!`'5G*'XQBP0$I3b3&;'l1pjA^sTn=]mc)WqfX_U6TY6E_T8Fp)QqZ^,@-Ll'b);lJ%GhK"0Xc16e:Hp?,CQ<!!ZT";5%?FOa1AJu@V>B.:^EOJKrA]kB&7YY=\("Q\`@MfCb6sGl^I/mjRJYNKiCEhn?<QSJP?Z*,<=dfe_CUn"XPhdq-@Esg#maXei]T66(j1;4Uf]/OuDS`[9o<=6'eOm_;nDJ.e[9@ot.[Rh;:^m9/A!R*DhcP`($5KRSK5G'@.r-%"QBT'B;J3;)h!TH#pFbtsN$GWY[G,Fi:>2dL[LUn$C5d*OJD?"k2TXRBd'&7[kKNFmO&&H(g6u2Kcg[7c#&Da5@kX1sDkodc8m1herM6OtG#$E4Qr4:I6H]%3H&/b4$eS9Y=#U01>e.E[gIMV:Gi/^@7)mD:=m'uZQ-qJ_6r.=FhM]gu4:((Bj#iaLf+$_K.Z'\g<WrFK]LN%G?rH#K>a#oiluML]Y7OH7#B$iAN0s/I9q7h]N.W'Re'LQ,huVN.Kt)p,Y,9k>9&7?MLm9krJf:bQ#(]5VqA7@q8U/7K)hFt'`uE5F3CDF/#4rZ;4)+:W[8:m=?s@McRPH6f,O`,X?hGc>0)5%I31YW3I)/IjL_TTXg4gt.k_HqI=<Q$lE#U)cp]0Ru./o)\8;!s%Du!9^Zbb*Y3#t4jp`*o@\l?CRG]>65q4#P*])DT&jEa!\d:rGO'V3O4F>$!g[0bkUe'3W2.`g*j0[A*c.^S#`-TItTo:>9cKfL+A9$D`'ZnbOU<*Te7Tsjm-DHu6-<"-TWf2T96p2YpMHtWP'9l%S!>as*BgEZk?X-M,3Jd#BT8+G0gC$=3C+hZZ7]'bjm*]YZnMa%[<E:tX^I=k#]5K8(uOa`M4H:3!a+]a`,mh'D@ROFXED)Ri@*.ORbCcn287ih61'[G)jn!c<;$]=T06?k?ehKjQ3q$,5g0Q!+VMOTZ!9@kK9L@aP(Wm#)aa_^fiHC-h7&)H1\IFXc*oE#_@&-u!b#A=gulS`Kn^O_siB_X_g^A<4Ln"HP/C/@oi]]2<%%;:a:2kHr#9.k^j\U,)gE'_0j_N,`1X(HNt2osN)_g)8^_91n++*e`a$$8bV4c]rSaA;"LBAqGiol'b[I)ppCo4ZWl9kiscM2[)!A3W,T$[3YNHuO^&n$qfj,amp73::hTe_\,hDiPJ&l_)!Z@^%*`I/2+irhRY!9&:DSpLEh"1&A!e4>plc.V]\1Kgm#G]-r(J+8S/%)Eig2omlJs\u8uei\pS-A=;n;E%`=eUGe%Y%&GUg%Oh./^eI1M[fWIgbj5u(OiILZ9E#D25IN\$*X4(F$=ea&LY,q'ilkV8PsKW3OcEr!O5qMYo!US@.2;=UD,^k?cut$Yhjop84:cBV44E/anWh,^"JKVr)E-<Ed]S75(5<LO0$j<YHQ=Z(,3\/3'G)q>>J:d$_R4\L*_G:+UV/-#PV_QoYhK<.:LCQI5;!L9DUF\1W?*isgn!_0!L_(DJqf?Z`l_0UfBfAcKX]?2eoeaO`q9@5JPuf,%k]:u:7*O'niO%/2%@=O_jPDmPRt3!L[7qWiP"??7`4`P1@<q%hW*Ns9!aG6fM4`MT\\=(s%t?3lM:V],/Zl*H/J8-fomQhi8aEChhDRu9!M'5,0Vo;AGcn4hL/$X/jG4l.lpJH8NI7Ag3Y,ol7JCKZ/?<*k<-Dq3OrblR*NJ#3?94?#?!$8JH~>endstream |
601 | endobj |
602 | % 'R147': class PDFStream |
603 | 147 0 obj |
604 | % page stream |
605 | << /Filter [ /ASCII85Decode |
606 | /FlateDecode ] |
607 | - /Length 519 >> |
608 | + /Length 596 >> |
609 | stream |
610 | -Gatn"995Pr'SZ9Pr.hVXPZ1Qt'-:b/XjjA9ZCk,GFchXcQOFnMe99Qf^TU"fMTf!DNKGc3ja5:niL2!1%j1PO"$RKFs-\Lp-u/7-74=Js<;><ghrDb`WB_BB/.e4g4hgY;f2O9V8Sb<JV3\h3N(<Q\pRL0@NsdXmU2pen`83cGhj9`/0N>k[_!H@tDr6h[<SE`/S\8&e8la7BPeAFB[kWQE\KUm@]!=>R?RXckW8I$j7KEm(8fR\`NR)%l<^emeP]EEM[VJr#6Z%5P9=K(%^O2IrN*5dNQ::@HEiW?H:oSKiO\<tX/hLRUdr/:YV_NG3P#m^?<kWA8h'nE`IsWf/,`A(8]f`I=DKQJ86ttEfr?6%O\YpE9FYk,=#KCAg!"8:(]E$o)r$UW@Lc!9bcjmlp%SGKP>iS3N'j"@uVS8k*oV=PU3(k$,Eiu*+NE348cq:nh[K^?U*b9O@2ePb]_4D`P42g*0L$:"0XL7hPAf(kfR(/sPBXGpQ,/W]lQc&Rs!I54Zg&~>endstream |
611 | +Gatn#?Z2Df'ZJslp^[%0;DNA9-=C5"?+"Bro"\EYocYsu>S7gVRI.*#\"?$NMQBMrUk48QAY8SSE-*ORp86Y%DZDt6nF8"4l9eSR%7gKP'Y\+\o>c";IW#of'SaPaPLuIHSTh'M;Q>HjK13otG9*mAWYVaI"mN>uM'6Z95m[!]5Mj+M@0H9RY_9PR^7&((p!&PiZ]W8=]Rn2(0[&/EdhoCJOM1*jI_FYG4Q6n5RBU=skSU7`Pq]/Pa<&fU!'_aFRg!h2F0-VAR&(LFXU?:KO0G;d1d2Yk]uC,T"R(h!r96R$CT6[K%L[;[i"\eh7.jYrKXt>14S2q$=^%,E,_#=lU!@qAhb6rjqIB$:>cJ<ml0pa+Y0Uo0,SW"@2e\C2Ptamj<Je\2HldpFi@Vb\8L]@mb0;)jm=2a87nAEEq/d[eB\#cUhkO/Z7"8(uD(`*s/K=&ClBU(F;eZ<_l_]hpQq9I4aG208G(m4-f!:R`9_f[2e*h76,q9Thp8*,6"-4'Q$/)S<l836>-Z.,QVHmualZp\F'jhq0M4Hfc*Glqk-cD',\c#\@G=RD%/KA7YkqM>&;QC(Po&#ddlhghpb\BE~>endstream |
612 | endobj |
613 | % 'R148': class PDFStream |
614 | 148 0 obj |
615 | % page stream |
616 | << /Filter [ /ASCII85Decode |
617 | /FlateDecode ] |
618 | - /Length 1887 >> |
619 | + /Length 2070 >> |
620 | stream |
621 | -Gb!#\D/Yn7&H6"8s'aF@'[jl5n/I4Q8pRDjl<7JrB3fYC^FZVA[(t,G,u4I<bq.d\kJ^/1<>S/kJ_caIkBV5_((X[JGih*1!D]Q^C>sg-___C4i!a#i&`-9T5PtHXRFdB<#;@3D:(SBL36+.uC#6uFcH4JNa;Of&JCi6eI%Tc<RKVOPAD&g^3<r4J;Fm@`d)j]I%Uf,JL\]1K93#EBU2Oknc'.BbkcGf$d/Gg#)Zb9N!O`Is6M4$RY9n\e>dIlQV_qbU$6$qrM*ePU:r&a&nrQKU$03;519P#q8>?@X<%m`)Mdr]-R\fj!["'o,k.C[p`)(&>?^I%`6-*XJP8k%>bHc(4QRmb]EC^J)931%+FBXu5)DRe?694Gsqc5ier;13m)d:63+pJPhiC"k';K_agUTJjq>Jo\%gVHC7qkG).0c7>$-SXbVo->n!>GVom-=`]V.bS%aAX4*QLbbhA%No<JB2Gh&.gNe-Ls>;3jEg;&BI%15Z?DrdYk:m*Tfc7DnG1n>Z$Z3/h`i*J/i`D6Yl[6:"JoZEBc]Vc71P2^&n``DV'rC'8P"NYRBFG9R1e^.b,Ugr%narj@?kH9%:"QnH))2"!>H-YT76XH$@ZQs%JI427>cq9'qYqd+'H+W+I$PiT^'?>PGtJp7?>hGe.JgdA%>_V4\2Tir(pT8p&`9O)?0"inp8E6bQX3shX*c8'B-iO_N?T5c#C:73O9nkR2m8a"L-k@m5t;W]qaFfpD\FJVjFbb%A4?Ko8j*^`'"PQ70O+IH^XdQ^78>4$ol9R!fR#<n@1YDNSO2t??_(&M1[C382CrsArE3[_`tQr>[o$l$K%1[l!;(oA!U(VONdiF2-=aLTBsa`dAM3`mb#tGS:%#oi`$/JqU.Ym=kEn*lS8,51M>)_W$'C=4X&@G62WQgtDk4FKPMBO3SXc4ASt3P;ZgLhAEF\.l">D%*,C++Cl"PK)Q^ek8]uSIQRpf?;Qs$THRnRE!X#sTj.V`X:-da>7#%geD7];S>)$FdfL<p'GIbp%kYEi94<dE02)i`m<j`Rbj>)Hn22-'pXhuh+u<B8*69Z%o]@2MG@Qf^5,'S<qdoHrT).Se/$',cG.P'dF]g1CN2BING=7qn"5aE`S4In3TQ1XX@&hnUc+/hN_*`2k#8Yq-P]*j76Zc'pX4p$V8pk&5`mYd2kCnndp^4P6/b0n2uel<ZX0XZ%/Za1aM1Oh%T-d,@1YZbNtF=Z]3Y#Tq1'=/hu&Jrb_iR>&_?Z4rPC;>L_.SLo4j5e!(8Pq:o<V5kK"Br03U`!\+0a9Z/_e/aIu5:!bJ;@7]&C-_Tk0jraF3Y2W,'f**LdFCgMTl`Ek#[4DBEn_/Ta\Pi7cHl!&^SrTa\Ia'=2f7[T(WLE<`ZFNYRXA6Lh`k(YrF+S$rK;K=UnF0&$d2&j>JD981n?]o.*Aa.q3VO%,Q),n]MR86++%5Nnct4oNp_\gXA7/cbK3Ffg-DPd/.[t$YU!*'g:@*"JF;CVbPtVAc;SI^,<hl?e[$\CIiDADGk?7/4?>nlK0-pGb]P5DB=3ie,o1lu8/5J=JVe5oP/:<Yob@k>"I8*up?ae/"?[4%h),qt*lQ=WW7FUgDML+u4<JSpPGUNE:%H<!a%^>dc6Q+oO03@@h_q,Eq)`JnN?%k8Ba>:`'sa*b_0D<+25\A[RDrW?TIAI$ZUR^T4\oW$lO[[R/MQ/:EjpnP"SF&1]'bdUq9Oo,s*k`$0I5J58%W7WjslO.LkIH\N,:VK+1l`;@U<6?^VZ\"*EQ_m`eT=lW^2]slDtCA(E`/-S7$Q$#^&jcAe-Sh+-))NFW9XbY&;"R+sTPD\To!V_pHGVf@X2?mUbn^RP-npSC*/<O%(AF"hfNQ],QZ_kKj,0iMCZ;~>endstream |
622 | +GauHLCN%rc'`D@2s5C+H@Af;h;=Q/&>p)o-[TJH!SZuXS^JGP[X-H)<PiCc]mp>9ffl?@(lXm&K-'F&H5'RT0"qH*Mq;756``%+F@DH-8c@L-*/keLG]BSp"5Ft)LA`(<8#$kgOLSmKZA"%?RX-%?pN!OjDn%(l6Sd+,aK_'LF"?%N9a*cD=g.J/=AJ+\'..lF7VVeVI>BXfJge53XSM,Y1RD+9u-88<o_u+?`A=E_&$+Hig_tE]`"IN[M2E]aCAZ2;m(jq`^4A7SN8FkCH$KN19)<?q,YZce\&k&*=nN@BaaKmQ-ZWkKrUqqF%'&Z=]BuI@41tNL6<K?$1+AcWM)g_q2,KR9C0S+r;.<`U#dkhD[SqSrIG1HIRX8>9Yriho[YRKe^FS>pTp15M7DT'HbDAQn,U<u'egWgu*@t`MAdObMS!#+iF4_"IE`B6i@]fJOLE>8KDa]2u1O&;8q^lQ"VfR]PsZpDQ=Tl'QS+>BQ0K8\$_Y;%q.)-$brq)_ePMQ)F()16]o2RjQqs8L8tku(n[I%Gk$E^==fpG3Ds>fdhi\>HL\d&B_1Lb"ic(%\N"_]paQ%R8)<!?F^rk]h@iAJK4LI1q(,BaeAj_2%:<:Gqqd\KZA:5Z?)6AAo>u_b]''C%)f<OK1E]buH05:$e"E``+/Z)T\aPe1f2^o0\k!B0mh#8lj/TJNiQ`V._!"C*C>;1'@/m5hok2Zk?E5(3QpkhnFMsbMe%.C=[:%Kf<d'GA'"&1HTL!N^okH`h)eM14Q/=VCEC4(le%Pl2Jl)Cio"b9jt=*&5+$P?]-oMd46s>0QMNRRdNHqXAF]AL_jMa%.>?YL>XE6VT\e:?/q:&=QlFkYO'?]YBRhXna6(^'3%>=O_bN"*S3+7!(dP4XLA[AYl7_@>rD-lVaB2%,Qd'"lqOPK:pYD20)920_B"_PKip-DT^H@cADeqLg_V$s%Eu&pij)J!(C@4H-itr+g$JJBD#D(U4NbW)V5--S?gE^:TO9-2/33![P#r(BqW5m[PmPa0%i05Qfksg6?X>0YPW#Un='Y9BQ*i+.^!4ESV&@8b=t7l>^,8Eu[Kp]ome#o7@qS;G\OT^:iAE&>'^e:8GU*tRP]-&I'qhW*=7]e4=6RO3Z30:7B`;V^p6+d61;!Qb?1^G<PUU[u,7Bf?*;uHs\"a7EM6NYo2Y1n/JSb*<#J+T4]@2OIF&^7LW@9))-kJ<c>7*7.Ci`E-\Y%unV[8P\/26OMoX!hY`V7e/ShH?A)ACO)Q3iQ\nBP@m(<P9gU\"*Ipu:9:_)aNo_]%\8*0:ck-kTQ8*`nC1,t)2W>(0>^oPaii138u2A266L<N8;V$J2"];D/Z2,MoBs7HVrl!AVZN:m/E&CpLpU'a\GG%UYG62iot2SJ8&j7O#`ET[rTEdno3^MXQ^@E5]<Mq0k%kq7G#6S'n(t1/P#)L*Os.W*LKGl;'JX9_(ID@>pmGBg>IDSC]3%fO=kc]3!Eb18#h#XN,3\SE*9FS&S:4?Y=<CBPp#9L+(OtfmF_JgI!@No9>roc-rS%rP;n"ZJIsg<_7oW[O=>AUDE7Bk2?dF7u8=5W+`)b9ba^4)a,k'<75q!;ni`-@gVTJFOub4a@4pqW>K&qknaPS-PUXS+C^]]ZSiT1U'Pd5*TikX2=',OQ2taM-^)2n'<h;,Snp3":RecV@,1cP%_F7bi+K+4f-SE56$g_#rUgKf5LnL'OXg#><fb[5eofU-bFdc;g,?KR0293_5U76YnKW5(?1-Y@S"ol:F]"Ceib6HY!OQrSQD6Q=bs4jpo4d7PIY,dl]_ijneR_:l;d[a^hoREYiuW6kd%Qg9qN#b6)qs,=cMA`j>W&]r4HZaBn8TR"^60*:>8L3F\Rr4P=NVBB0FmW#^>>==\\C0oPGiXI-uC32=4Y7Z/C5iKH^%*sO*Om@l,[)HR(J.E!0:(7\Z%%G@^b`nW3Kdt^kKVhBsIT_i-'O;L\%R-Gda7)^&j-KTc9c=DV%)>p\L?rS(DG"YL<b&.:t1cb[TAtT@iSI+I2C>piBptGDIQF:YTq(Re@KPPFX[;7`4h1rr=,UZ[D~>endstream |
623 | endobj |
624 | % 'R149': class PDFStream |
625 | 149 0 obj |
626 | % page stream |
627 | << /Filter [ /ASCII85Decode |
628 | /FlateDecode ] |
629 | - /Length 1977 >> |
630 | + /Length 2035 >> |
631 | stream |
632 | -Gb!#\@;jmY&H*Xms5?d^YS3t(,hoUeTHBW(.uJITQ5U]sGmGgTZIML?7S7g9?b]*7G3lAoCJP,""L0LTa5aelHZsSR_67YR7leuIPeR+4-.eo+6LN2Ade#-)R\$/MFaiI2A&eV0]tj>o8Uu$1cb?rP4:s>]<Q3u;-JA3_@tr/%q&'TYhK&ei`\oC2Qt&g@Sg(B@4[VG*Mc`imRH1BB87\H\"H1ZZ.RED>2l(jfdgn:KUjaq*rkb@,VF<q4</$5j`E^NlXAVp^%s1D6Wg:W\aQTrt^!4o,5>G4tMMPKV)u5NUI!2b4XV(Bj?_Fn24#duiLGT&NOjQ?:0i'3+0q\-lqbgAt!K0Q&,@4>ccIM:@]2j.R^pSqF`5iC0e3=VAhcRjoU0&rS;K-=ZN$;<@%;`PO%(MEj&BcAVJuall#%YR]\*)#Qnl<#r5?u76!lsjPCZnlloB5K"1DZ2H,B)^\?b#PHT:E$'R.KTSQK]*>NQ5eb5D]<[4['a6rl0jlYb1Rr!T^":f?r3,gZ7pVSFd%rgZ]E1KuuM<%qkip7EV@k+:t,WHiF0jSFQ-]TcJrXYCXc#MfR.<`??X!'CR3tlkkW-Ghb#LAZ9;0D"XY*6^/bs;62_!X<0GF:]U-<cNjDo&>\9`>M=DX3(N5.GH0U6S$#m[$SY]&l1Xe87Fsd&rhEo/)h#+oLPG)cdp/*`Y:QaM.k-1J1hkGH9I4u3X/K3@;P8n;\b]WOV4U/``/k>/1c+h^Z]d\4*jJ'THZhJ?"/fX`'B+_YgUl']=,>MF#e?]_WD1-qQ^-.t8/*/VKVTF<+Wd&@ZbGM*24'gL<X@IkA[g]Cb]qe$?BhY]iJ9A#_F*f$"2@LGK8.g;XY^ZP+juBI,"8ZjCA24cK)W4\Tm3u-^WXgtjZt"Y-g5ODF>k22TZ!rl<5QH?Z[@PdTK\Q\$b'90<A2Re6b%@gBQD;q!V:sGX;'7<3E[\pMR4>@9_$'a/>J8pYhGXg:QXfg;7b&?;MIgR;XJ];SB4?]*s>@^10p[_oj`hb!i`KaHE*75rA?_WOpBI<=97YU0o^jlBZ2iR(53WamN7Y8F9WVAjLH\Sh6l5sZio3?8@VR=6NCq+&X^%)kN^an?X@>Lk:2P%VG'Ni/g2Dn70Y"`i"E*KDh//)^g8WkZor$(qa)iVF:hZS'0T9a;d)?=ZWEMaArX#?76P!cN1qA,ZY/q>EV>?eoe_*VZGO%9Z>c%H/;f+>iV;!"DR[tBPuum1MD0!Al6=[2c/'u4V[K8e4!XEY`4D:%hIC]^kN.:3#4RAlJJopX]=*`M$L1.O3:3H>m<@>1[1IHr;ZW!hnJJ8dLLlc:.@3`JC>Ydf&!^\;YNMQQ]SAR">2[@l(h_F0j,9q\;F#,!aeL[a,PZIY-JHUgK\1B*S(MD<R1Q$!K/O@D?)bNZYX>8<m?8li[2LKc-&9"M)c)JA^OcD!fA(85ZDpB;S$#G/lKcN"Mj,>*^#biL>%(>QD^)tZB<p>dJ(10(n"Rb7&>kS24Sp-(e$aQ#%knGf.#ebSUjI*lL<1Y/U#`/g'S#WTbLAg0o@t"t'u3O[s0Kd(a"PDdZU:VC(;pjW6D`5TGe;e$Qg_(02*5bn`DiI'-rY[iNr?\?j)6P=lPePMQTamedeB?"m0L9hVu<mZ1'gb\i0o&B<0ae:/UiSD0WKhaauF*"7WJAZ46?a5_ps9!4Q-t`GW_6g7ZQ)bT;o;DKDN(-_&=Q>p@[IKeGTTR)\*4!$7Af!>\f]B&ZN/DF3j\;PGf8(;&A,Q3m13pBp*CXd4Ps42u*g!(T(3XauaZ(nKmPb]#-/Rn'j[P@`lKks0]Z;67iJ%@NXi(7qe:MpAqgb3I^]\L[R;<NBJ1U)GS7oO;_EA]O`8"]QllR4@,N97!l?@cJ(^)BM\Pg^McIX)]9%N/.J:?@>P%&<Um5S@QeeMp,S,FJaJGVV<2)Rn+Yu8!n[-oF/!/V\Ud0f\=Y=@cHlIjknAe9~>endstream |
633 | +Gb!#\gMYb8&:HLqIi&;:,T@.b;E(U@*obrde4j1<BMh_tYU#PJ,Eg7:P*XY%n(AFu95Lk6q9UCCASO4eHY2E1R<?Wf?e>2tAjf]6qXL[\Y"+\CgqMUBaYgc"S=b3m5BH.u,G.GXJaN5B+7G_lrGX!,/7ccCP".H)ZL]lm/=!R51Dk5CHe:MV12JWe?eb>Jn(6'KGYFf%L%KuYZthk]^:Th?r,b5g0/U3r%fH0o%t2LlT'CsoDk.^c3\caJ=5!e^S?VtG,:WjO$;qWln3!H,4=N;\Y>oV`;P'6KE>Q<>h/=C4f81t[*ccmuC[$U\'3`:nn*(Dd>->&MhuUK.H!/6o!M-mG!\Pq[jc]3T05@/U&EU:RRpHYR/X(QOF0R!UA4ar)`m\h9']qrOKH\J%3CWVo.*5%a1Fo\#'eJE(dDn@T;5JN5K+]PWZo+&RN%9d.\E;F9*KS?^j?GeIN^b>S.[3MTJ?W*95ZT3Urk`B.8T/]K9Y?MT4W"hAMP?UC8laHX&hJcYPK1\P/N2FmP>oUK0+gZR8f]7K74(HkM#;4c9@?6+?tK,k;K&m`g>.G2>%d7."DW7&*#-_73BAmQFC[QMU0L3D$8+[[0:Qt3'Vg4D[f&,Mk''jHA:#Sf3AOg?_kbag(X9Cc;W("g7P'lOEiq;a)NY8T\36l'QEBFNrTQA'jZD&?Z20LB3Idat^:+q,GJ)f(pq]I;;uDT@0@Nmu5\)uXdr$E,_cAdHg<Be_&$&Ao?RK`^b7-HlkdSgsF-V&l(/2>]n=)j\,7m#Y*rZ\#E!K1BL>tNuHjrIJ+j3!+k)E1smRaM51),.dfJ67!M.Z0tof`UJ'I!]XX:#1mmsmY(colj7l^ploo`r0RC$W?R%_B=G:=VI9djt&aF"g_=FmEScX'bl$feD->rj5[\Rd-Kn9U!hA/?S[d.3[G;]\`qSSJ"978V&@7EqNUTV8!<eM'XHQWH[]BAg`3FmBAr#43.5KIW+!s_hm<pkM+>O5$oIBN=kaXD,QjP1Fl)"o:a7o\1DbE$\rt?*_s>18(LA.6aHjPhNZjA\7NZIOaCNF>/1a+eht:m)u&)44D6,pfh*Ii)'\GR`DU7#XlFkh:=0$95U]rVjR;Y[Z"sPPG_-F7:NsLg#tfRZLJes+50=BA%f.tAZga>^C&,V.Bu6]jJgMS=+#$J5^e-nHb"5O:<2A=mAst)2@k$5J_E.+LGCiLQMUJPi.:p$=+E\Y7cQ/RppqHd\5WhgVqSrZD"B&gKobbJdn#u!/O?AnJ`H"L.RV=%374YOWZdpr(/ud'*OMXPSM<u:<)6],Gk"6d-!O*G1?lm4Wfj4X$MNmF3jh#NYKI#Oi+qdad5Z.Y9YnI&upd-plR+*kaR(X7q7ScDgOk#*_1W;(TQHp'-*R+G&.B;&@CD:nVRiSP>LpLS:XeY+o+%qh-P(fZZ@ppcr"NP_=XjACtJ`GQ6#Qq!7b!THPp-C2nR2a-#>H'+ck?\M+_!/5Pb;lG7%=$.[5ReEgWi\U\K)SX6[[l$`rLSA3k+YHmaruoK^4pCJ@%"u1asE763qVX\I4<kKlPX@Ln)4Q\kNh*]Ch%G)0<-K/!P)&2&!JsZiST5\[$A%OfM"5nfP$JJ&;tjF7tMa_C<np!o&A'&dc6P%9/11WGT&M\NU*3UA'c/Y`\kB/PHmMuS#K(WlKcNb6jaKd0"L/@<[]HY9aI,!]8Ml.]c?]KeEhUJfY<)Ri'3e2Sd*YeGl8.,ohT7\)e%1$\6Qp^&bo1CoO*QkGfs"8W+E,UK"(llYs!IG\bc.Khf*bS1u!Ua,+bj2>T%Ih[<_T,l;Fqjf=,DhAjVmq>]S?kp5Qht'Z\PXZoK@\,CQ2/E?)g"dG<3SV/F(f)$DAkE-8m/Wlis\MkAu4N1*Da,)RJP7PVC94[<IodCmdFqVKdJO%/0@Z\/G%Fj6W3/>/=gn*-.Y+Ncf/BK#S@f!E8=3#E^jON'c4!]s*X'LGV]JK`567e65tmeX&E#%#XL7`J@)/>Z,IH[3>@%u99[`9_LHMpug_3Ad;!r<!SFIgH~>endstream |
634 | endobj |
635 | % 'R150': class PDFStream |
636 | 150 0 obj |
637 | % page stream |
638 | << /Filter [ /ASCII85Decode |
639 | /FlateDecode ] |
640 | - /Length 1724 >> |
641 | + /Length 1704 >> |
642 | stream |
643 | -Gb!#\D/\/e&H3^ns5@!dW)FtA-sJ@]4uHJ!AFk[0oe7(6:f,Tn<[3GN8]Ar'rJm-&`6%qO5f&lhJJD+r7h;5=mS40qqITA=;?35IiU&W-k.u9LCu>_04G*=f_h5.J#Agq/N$.b@a,Pfch/di1j/'\nO9O5Sdn;=hiIPd2b1Y_SD9,a4S-[+<"n3Zjqa]dp"?iEM'W7&RU;TW!@6Qi'oB(@]Wl`Xa7kjoDj#7alT20D7>fUW<UE?RfK^1l9;;Hhq@gU8IQSX:6T%Bn`/&@n3%`S%160FKVnJbnM38$k-F.Jsc1+'\45Uqr.^f#6EM%Z&==ZMrkD1rQ1I4'=a,5?U\";,E&cPKt5#hl>#-PLM9n&^1-g+.2"$Wj9B=Xr?o+VO<5f2[hR-uDCM;<!mfH\)D!TY3J^@:NYAGc\S2pRu(HC>#0f2semWcZ60&>b:oal1Zur$b;f7J*=;l-&XZ9_-@dcXtYQ0Hrsp*:?PQU9]#n);kci`6@[nsrX<.KV'40f&[&Ek/#X2#-d*%<%__Ni=Wap&_,oR&=70\7</!o`F%D*CP)H#l2M?ZhPGNfHMDj#IA!Kf5nC$d_"8hrYl2)ee$Ve^Ok7JGMKAd:ioH[I(lC>miT#FGKA-FmBgN.;D[TA9lcLDKuV]]5fYGSLmfjKs,-N8XY?a3"F@T%i41u^7N@O=e!j]$eBL86!8/=$0$[Fg;7iEnT!SnABKR'\utl]bEu;63%3A(HOXoX,AjO\/t"Y#g`l.sQJ3cRpc!Mh9:E24U$T^g]8MUSiWIVGPZA,kL(XQ(hG&9@(CN!iRB7^oaPd9*CjCA0r>(W>]q57CosZBo)tt.'655o(IiEljfb_6g5Q1e>W#8\'$?.+mW%tp7S:*RFpe-8NO/q*2_,.@i"j!(M'4]W7u=f6&48b@g,r/c_n0+i_X90eD#iE7rJ2+@A`s=OT43@3^ZUsi>N>cUdN$-_3pF#j!?<5$^j%+ebqpsBj_nEN_HSmD;C%l[EL6dVf+Q53@PbR+]G10ap!s1eY:``<)*Ee%<[se8@e(Ng0!/'_^7d/RV0/dOuJ`P#3#jKM9OC[a].?3=BGs+A3m1N<%D!dZ$&a^LuTgo-)aFt/=)V@F0+M'6C6;XLpR$I@`lG;5@Hi+QCes1hh.Jh1-Eeo6UkOs2.a,B4<n!d]g9q.a*B8scWX:%l+J!l18X/JmX#,9PKD4WZ'og^X4q*W[4'7i+)h7QKY1X+f@_dM^jgo1.)eO>f*V+u\'%P1\a=C/)T(otaAh`LSht\nbMi!E1q6gPr6!FTXC40qhQTqJs!912.]H@PZ5dQpfi3"Wn`Jms<"cOc'Lb]O,-%SfXrtH4/'@@%43Xp%f5I99*kD#h0Mm(Jn-'$=rA2IZHX0C2c_c8I*W"r_N4D8)B%4T_i550@96,+94I6Ek7@hbe&%J:HXk_2(lTYIO1IZ7MU\Jd<(d2SGN+br12+M1JC-&6AfZ7u??31-u0XV@8GS7j)H=hn+cZL?%1M2\H40[/537A&7.cX7#qkrC>;It?-EfmN^E)BFbF43O_L'=JGQ6s)-HKOm-,%L@*0'5X\6cKW'S/MV3QZ7_Aajl^I4/0R*;X`(+fN7@ph$`l\JO0maiNR;8$J2oAs1?G^b(_?;/<dJ-r5%1kDr;$+5?QfQD7g*R`t]=sdeCXRasQ]M[9*ID&Sl'(>5g11O))#5Lt[Qu%/k@8l!9aO\F2S,BK/-L(Q!3*XT~>endstream |
644 | +Gb!#\D/\/e&H3^ns5@!dW)FtAhBd*4encdmAOVo2(^_)c.-Y9CO[Oo!l=Re[7nU5UFR`"t$qYt7MFcU!8'a?2UB<FQ3p(?a!PFi9lO*q;(FD.%^?*8n&q6;i+5IqZ3W7SYL+!<Y4!)F!kP48].tK\s'iPIG.jip=O_oi1g$oY+kcA5q0ha&(&4!>KO7iGtN6Y'C-(ORiMk<aPnd-YH9[#`9$0sU;IqVq3L9VJ:JYUK*PBe;p2::Z_Q'd-^+KuG+YuZs$8/;cDWo5i68(,<A'P7EO5)#eKEJ\nX"@>t<RNi)=c]DU37i;uLdhBEn6[*f[Q8D'>/IQ\c4gDH1X:ndr?lT:IA=,_^W/<Gk@[9\X'$GZKZ@d2PZ/S,JGi9"L"3.76RR>*D[N[Vt.X2D#M5$S9:U\+Gj(L]oI7je!O,Yi6/b^-e&O_E;_+lo:Ou2%cE;JkMm37`Ul1!NH-2KSA.<"Ws!nECX9aZ;\P[RIfPt&)#MAmS=e")`InI&dX;]Ca@\3u,(7PKi5Qft#/m$T.cll@_)-X\-WT>3_6^\;ru+RktTHNr@%$/Dk"@UE!Brc><h^`G^kFm^geJ*[^1R+J9?;+k;-RoGTAWO=5f3-k>"@bD5=)F&dgmOno3r/NgY+$+H!MSn*QliF5pX(ni`s7lBd*i6"-"lE>65/Mt_gQ4*pd&uBGU/5q-5,S)X<bFgaCq+f;.f:/J[8K:ng`fu>'f3hu%^K>d5^.WIed$#7n7;i[/,+%tA:nU48k=fFY3[MB$)lK.=UI]9BMkTZRk3IBM\h(_@!<.<hUB<38;DS@&Q==Y0eB$8LcQ&!<65cR/.sJpU&bqnonD.]*E>4;9729J>7eN`<n#mbCcJ]fnG\'$[oalg0r_uS\mu,3I)^:X`i(F%"d4TgZXiS:'kgcE*WOOhdo:HDBm<gi)3'`j>.7**>KIM(/9jg`dUUPp.agrr0@/n=\H23&@P`B<B;W#`(f&3:.3K9A2"ZT7T&+(22fd`3&KJoD[Y-HHk:PoKN+JW>^;%k$=\FqG9jek`J1kYI'<JqJ@4/\TGX1M/a&FJ;FL94C4_i%Ce@bTRH!@1YpM9t\Z;c<IXms[fn-c;<6Kt7_a(="XT*AP-hRmR!(5G#M:VE;9fC]XR+HC=X*g-K[75dM%11:MfJYYZX$c/6nC6K\TR>&^_4oFLsE_HpH9D;?IMUp?V[&[VIkQO+XOHcPG8@Za&DCHAm[RQ1$>uEZ`d!M_AO3iXflY$sGCm&mr$l(9bW?n`d]*7tB'PF/]\fj'e9>3(q7`g6K'e!.bRa'Qd.3hU"Qjos!Jn39d.P.imdh^Zp=$.qSj\=%7oN,-,MZ.pQaVsMNDo6j_C,/[cX\"_AqAm[UbQKZ88]k'Z2i9OJ*PJuDF[kiKc$KJidcnlQ[[Kq;X(_lAMH>,dHX+?V/oEW2DEhuXmJ$u;TaWHc?R=c0@JC8B7u%GgiOd-(Yf31jK`6%+*?BW#LL3'qdMd:Ji!jGm^D:rb>A?o6<[+Xi\t,@+]K,cuD2Hc_&P8AT'@2E4\V0#bXsq9Sm4d?>?2luAL+9uOcqoa>/_DKL?Sf\AdsFK63Mq"eL\+qBLg5bUI<.o07dE,'Q`G=0CZQtK:,`O%Y@d[]XH17Agg"?a49aCb%1.h_YcekB]?'rEECF`ZB=X.-WW-<3+#[T=Z"&K]DU$F44M&s0S``1]BfJ<Q(BI9<&c~>endstream |
645 | endobj |
646 | % 'R151': class PDFStream |
647 | 151 0 obj |
648 | % page stream |
649 | << /Filter [ /ASCII85Decode |
650 | /FlateDecode ] |
651 | - /Length 1800 >> |
652 | + /Length 1711 >> |
653 | stream |
654 | -Gatm<hf%7-&:P.Os5E[Ug"BWLqI*UrYQ/Of@KfXPCL$5F09gRe\PT(O;K9CbIRhPHmC'H8f*N#,13n*Apt^.<ntAjo^AFD^!3[bhqp#F2JB85taGXGH%rWiI=.c\"r:Sc@%&:YSlc8%Qp0:u'r(uBHPrUW)ZNjO:l`7a(>0a=TaIqGcn7%dGjBqtm[3+/LpX"=5R+Ca=$WWXBQJAOOH?fUVIphiJoDR9"m\@K4SEesl)ul[]s3I&N<C5pO&1diJ&O;6%@#5b?#n2DOrsL)&n-An,X\91fF+MB,$jL$[0p$p717UX2ZK8Ho;9X?J1AT/doVMdD^[DV-N?]Da6>P;?$8RlI3<@&,<t_kh\XZH6NeT9IrG<CD^H-IM?25`2i:^GMbd/?LJO-cU)Gfk@6WrLhS?pso_0U)[='>4@NI2\aE9P8&;4L1B2i>o)-'ge=6E6h.+rK^`T<-8T$7_%g:TZ@)UV.Mi7q+sHS;Y<.4r=HoTC/?2=<G/+@2m67_Z_t=2&HL]^+/6g+='Qi^a(4c@=kEHN27kUBM^L`KB87SbZIWpC%H+DhqK]ZI@HnAKclc7>?H^bCrHMXbk"/oAR:pp)@POY3R5-`Jf,B'ItsgT+I.=?XF0/(!%SBc9=h$\od75\B#,Ga7[n%VhI%*)-(ch!rC>rBi,?!K>kT:2,lb7@$*f"U:*+).mQcA9M(%1t)gl]JGN'?.QD;?1COTTiWj)9F?a:McO'!c2N<+Gph"'BUdQ9q_Wtu.!-ceBS0gcNM)(ip+A@$r'm&dtK0oJpU/>43Y6<1mWYImo!N5>r0^""d%AKPZsV?BL`!@BlJkWtmo7W"SP(rVcB!(8EH,aD.UD,fpG[tlC;"`]CNpUS$"j)INH"Z>2s<Tq5cBt)GFfa:=_T.]bk6(t*Z5WHo(EjfTLrgb'jaUbj1EtLZr#msD^OhIR2gE;?mj4!gN(m<]+riHsJ?T.1<&?QOch]EAEeDH#R6PZ8%F4C+p4LYYcd;Vb2,P?$B%DRhB`%"FIb-iZs)G.,@L.d])4=Bs1!C@g#<@,VdRSCEnm3nV4l!eu!_8N/gIORggS?=aW7k6um@BIA7eEr)<N[6)gP<D2,N'\6b9.i$.e:8l_<OF7I:J[4MU_FNR:0E.4WTtL;V5?I>4YmRHo970tk)"k71c=^$j@pY7e`M*ErSYP%DjacaDZ2jM+a#(I'_Vp-'(2'S+3ITCT.?-T236q^C:IJQ:@DIq_.+-Dl:.pU<N`fMalU?c",pk2W4bsQG4_q]=C6UW.(H-\[l)BNb0X!(dEOPB:V3_C3iD$YL@*cA-TJ$r*/-]I_*DgO6R%>]9.&-@8.<NTDMej;dnYR(&7)R`3rA^2pjt(orN`6X_/TVCq]?8C7DOu^"82Xjjll?R.Vd8-*-25'oZDWcK`g[42D84<T_b`E[7KQ=[\W)p'KBf8E`Lj\@:pOHfVo1FWCkboe>9pu3Q[<1UW/%arh@D]/Pk*Fiu<R"p!hG^(GnP.<49/T>I&"PCH=j8IPdY-nWFkiFeEl[e`Z?/.!NV49B'W?4]9IdV,)8@A"3(i=gP-7Z.eH)24cFjosCM^;.F,%N=AaSk1Zb#&KEHncgI3Lf5l.[B?p[0:iEU:Q1=P^Yh?ase<BZ]ZD-s%&d"'\I'q*]@o%'`T('@=*5I=g[@5t#gV'<i_=,!;PelJcjUQj@ZQ+tV3Cb(W2K'Aie\cb/LbiKB!P)ulB6P%XhKV!smb?BpjIiQL+;W>Km2D+pB><;gdl\Cl_8ob_583Ork:<e*`.i/IFC$#)HP2'?*?))arW<S:[iP~>endstream |
655 | +Gb!#\?#SIU'R^LRs)@_:e_(q]P-#75:JK62):B[$?0oPG5Y5$8(Pu*Zb&6q=G:D4Nh(8,uWRqj9M.MkEnD&(L8/k%jCKKt%#&l_XX*6JS%a5Qi-e8E4\+"QaIeJ#8AoG]c!Vig5NIkk0F3`+G]dke!7E2^Spl6*Ur+o=A/JdM^[,?,afE3XS=[j0S#`O>MI(k<NHls]Q1+G'oRV=AX-s^esQsX+6ljoJ3?X`a&)2u\YE__<CC/DEq.,Lan.Cd.krJ`B!>Ifji\ACR@r*qeoa0d7lK!9ma\ZeSip[u%`/\,QX_=K\f+<F&hJ&fHCM/\Nd/G(M%_*G65k07ZAo^`Hn_77RJ'G\^1(5,KQZWmh[!"m3`kUZZgJCinW<#V:SaDTS.f!o>Q@5BCo3b*G1+*bd@oHu(u#&c/5ikl']=^K0LD<YA]>ei3d%p2s$lqCY7kfl6p7uRbf1-$F)9U#:k&at\Gs$O_N[b#$-2Dc+ar=<TbpR`G,rR9[/?N7jQ%2KU-m4>c]IC^8&:0B*+Zn.lK!2L=2.3X4t.)EcRP5kfI48Nb;`cajJ1c!KQ/5g:Sl2%;Np&qK++_"p"e1o4X'BaJ^IKe!KiuO*!0/bsOVJP-,\9\rfjYdm`^gPO!`_(MiTdV]#Q*IB6c=ZPgPB$EB,L91[VSOm8*`&*E)bGD=!Xg+`+d,0S&@Ab$4Y,Oa#tdh0h]0Vn9b/q"B-JKYSXH]h7+"uAc*eQ0FuV["SoW(QJX/R[.jIgN$UU9$^]Xh#AgreLeP1TgTE`RC9h8AUdqSA1N?<$Ce%DPUjXJTiRDK:V@S<""_*#n>1s2j$;diE>-GqQ>&!68peP?aB)MAfkUrjEb.8X#DYU2SO=)W\+TU3=McegoBnchh]]ASUDVZ03B(ArpL=VX(*!m*V8HpGp7Q)VAP7_OBbobp\,ZOQ\A5Lkdd5d1YIIWimf$<cMG+*sh"-bCt]_,YPAhiP8tp`S,DU@d!tP*Sb_3iOi'8GNT%acOP78?K^I@u[ogANs]KJP]!BV?Xd4ZK=@fa_9+4U,Vn+`US_PXuVUW&\r?]"%1.piTOB=)[FhU.f`.6XsqOae72A)A9]tjLBonSM:_a^Ge"i]hr.tjb#b_cXlk=A-/p=%?AIRZbG7t](a:HODI^+Un=e1^0hj^!/m8S/g;t(D7h!9Y5>'&->>tP'-2UR;6_3SXgL`+5BZ!sFI6/upj1J\J5YeGqidYFh.cC*<:9Z>CE,*(.bb<6YRkj@;Pt&pJOO1fjP$(9=b5d26TufoiRqsu)fN5dS&#/1`_Lbo*CA9fe>ZKn9-H"5e[#D98_2>PQ"/Rsm@TkEF";E@[AWF"W,*m!JW2$+jc1/e:G4A%d.3Vb)bE3ukj,mj"F=';GkO)+QlSMBu>bJ6FQN_<m86'N\&WOgo-[VW<JoQ2?.sB9P@dej_Hb\).X&rBs=JCVMH0c<Ip3q!A]m"l6*ub2WFl\Ej=nNP1E*7.TJalhC[FZRjNkXd!2@_D_;m*(N4USMg)/>EKH*2]^*upK+h503)J"^Ft.6XdiVumr/9h1VU4'^Ke"XZ\ZmV^a*!*&g)&;'2M`qTIjm8k+OA(l6O&aaD<U%\smrUZqVe3`:%]?A(CG;jK%$(Wrpe,)f,c(6m.C[/Iei>Mss##lK&/:*tR\%d`t/T5N'12n6`L46PYk#i$5%r=6,FXpd@P>GDm1J)[NraO>qIeFS"HPA7~>endstream |
656 | endobj |
657 | % 'R152': class PDFStream |
658 | 152 0 obj |
659 | % page stream |
660 | << /Filter [ /ASCII85Decode |
661 | /FlateDecode ] |
662 | - /Length 2062 >> |
663 | + /Length 1761 >> |
664 | stream |
665 | -Gb!;dIrF=9&H+gk^;K01.ceN.R%L5jOcm>O3pCt5?"d$!OK-9+lj[a6j'@Ge:Z%SJ0b=u-cpVU^.06b:oChRqRi,IEi3-qrqD#eI#gS/W\4mf7_/28N(k%."UZ8-(j!2$<g[h)ioUN)9pMeIKd8*g]T;jGS`phoDAaK2j@@(TbnIZ[EmW1O)p)LFZUQ6I@jMGt#nk]GdEDL"b"/E?E]CYW8d/;Hdpq7Qs:50t:1TjNnV]2\Fp+5)7k-&!nh3R(a(Nold,@U"V@h/8Jr.p2?>glqQl]AE2-`2n7Kabu!5OZP>mJ!0kF7HWK'qbdWNbaK'5l#\a&==%Z!GsTSKIbIlLZ,Y3k)7\$jDeA-ZBp;`heBhF%GrsM3;@bg2h;AkHtO/-#ZP[AD*oFJQmcg)YBL*7[%AH&H\j21/-Eo]30abh01i;Fo4.N/P"$$]Pc8q[i;klbcD?8>,r?'N/rb*'q&PeEKf7Z<NNLlZIN7h<WQ>!h-"#bjiS!.I9(k'kE"<;R^=.LpWc&l@#cZ0YOL,.s.hb,%0q!)%:%U7VG<B$&XOEr?;C7P$)5i_K+:LpZJ7ig$^@:r=K;L'A$nu0UgNgAjf6r@?,d+&#OPT00%[+'r$/'1a'pLH5+m'KbL)WHUR)]/OipUI7m2RAUY"'6*;;)CK)ApK2]ED_8*!d)*&nI+m"5hP=MXWUW"q6u@g6otpScM2/=_OiIYU%$URQO74o:d0%;XL$p"pDKdOhr'R%C&Op\r1]mCEARX1Z.AamW6]c@G\c3$=VE"+-iN\9UOsp`kK'"A&:DkL0hU8[sJ@Yia-eiRh'nhY["goW*(kj'Mj3L6e\(5,jf<#hFB+'9*(IN71i!^m3luA`m]*<ThRqT2A<e;Yd,G)a-(e"(@=rPl]h9U.P+GqKj2Dd8X[bPkc5>>[A\$S.(qeF1"#FECc>P$&:Gl<qOjk=nd_$o?9T`@Sc/u9m=VaSaHbL)#A6C7LGAA0"9u8mVb"F1'1[q:_^6o;lg&B>/D&H^($(NB5d1]lh-NPImF/Dr'5.?\N"u'A8!19?G,-g,(uC%4gf=n];lmDua<W]Lf8G=#d]C\[nu^J`)do`:K"Cqf19;c<QRpo4,0b76Sh]6!bW\5MSm3fq!-E[Ah)5@_E$q$+bDT`D\%kP4Ld7ti/']W)C_i$blljVuJ7A]Tl71^o?*>"jZ:4VBU:ld0^d=PblS.KL2N=]_jqI'Yb%SGV5kns?_4N34Qn:QK_B:u22i"pt&ZP#"AO0>P=1DuR#+!bYD:TQZ2<k\Ne7\N.]6jEqHjYMB3J?27TuJrj5FL?f0L*>V)m4Ur_]3#]'%[uS@\ke7iN%&t+AjQk(,Ep^5V-8[e+NL\^1]W/hZ=LRXVSTuCJVK2KUUQ3r<F5CGJ-6:G9V]qN`g\$%XGKLoXapAaRbuG@$n3d@slR<&uit^WfMm[UaYfA(1C+b"UntbO17F7JHNZR=qkR"NJ+JUpeFNb%_aFS5o&8,6-ki)0`_IN'WTA>B\HcO`X'$kL/A5ojhOd^Ti?\*__Pg#g<$A!ZAGsB)0"A)15`\EnSAB9&;YW5SJK.'^T8HWDZ0G^\`;=8:GW_ef#rMgQ+$2PT#IZ[/Jm%4NnW0Zilu*B!^nMZZmq4Z9Ut@'V0(Kg"sh6k\Yb;s$!OA:K*Ec:`ORZud'?VlU]^?]F<N05*1Mjg+U+^F;,X':pi(jkS[)%f[RX>2/Am++[r/D;6qY*/2*jDBfXduDq<QiEC*Ip6:tr?T.#ehqnhc]=PSMCb&Z<jNd1H*h1r8tNd4*WA)cAJp>q7@UCHD)kMV$^tGs`Yu8r9l?WpjIE9=l(HaQ[lR"G\N5f>:n5qeqiS.%J8WEUE>VqVtsp^(0lkW#V&&rh*D=>SHslS[QP9F]b_]4S%`A":/GVMTS<)72VG``j5Kt+"r'Kn<P>J>tWGrYQ\p^If%o*IeUL@s1KcOqW/N%Vu\le;D`i7'=bRKK\&$A)0Mb@f%5)SRr,(\m;t:(Ckrp.8.:"d$TF"iL$*J/LnW:63R+/'<'HLb^#?$V\PBVL^I,53Y0\Bd=qAmfa%-.0X_)@P~>endstream |
666 | +Gb!;dhf%LD&:T\)s']4`8B(D/%G4oSUu\\X:-+ro$WU2`Qc1$4/cJ&KlO`pEG@k\c8-0Ki4Hq7EQee(_De?_O>oUBIB:JW<"h5Vk`u>t6#KAR(HWCZshr*,Vq:Y`BR9e/3I.6u\X6U:E>'#/ddqsZB]L[b-(uC-:S=arKe06q<,Ct$5_t%6+P(Gmm/DoXRDp\KR#c6Ghmn:k+/3[@Tphq#LD"R`+>]kPCZ^bN*gHO9H@'/;?<e$I6W+25aTQ<ZC*'n=)TiV)]Q0Atj=HMmJ&;sY55[g<sSuL#hcF-D8KF1*_df6>1Ko&,(?lUE8;!>3X#r2mO1.3NEP"K4Mo,8Ja/jX1mJndf55=o"3$L)-lXWSB7;_;+k=Q";O/6B1b#kB_qZ"-GB8ec$3Q[t/oRQY&UQ.;u3WaUpt:nS1.bTWU0=RS2@27$J%WN?Y%P<j#\#6erO6c_&]6maD>\?5^b+uhbDcXmULFa88Sqgf>)@[3;6C0Wr::G/*t:Sq;553b_OF^6=#C=RVgb<B?oF2AjieMRQhh2C,t$TBj#\2h'2J&:i4<q":RPr4:U!u$HR[_cS+W?\H2K/*`\(C(T*m9,'Om;WB8,C:g*/;Gnib*5R2S="F;D*WI(%!u[`D[oEBVMbeHK.qCCT[;LKr)lQb=]lO,#ss0*PNba)O:oel8LR#lj\!]]m5:t(llJs,#D&k-X91q%\k'o\6Ql'7rpd8*)^HcjTZEH;Zg?SZ,`[Ti%GdmmU?..5+#&8!pj'cAYM1u!*ZrE-EN1e/6E)<gdJ#abN0NY!'M_#2n1%C%OHPEm:g?,m.T!M[i'AV7RV:^.83TjiWNGOV:pqg0)-$r;8]B5%\tVO-jmY?3\Y_trPSP0j2S\Y:S`@@M9JY2*;o!R3r^dgtrrCgHh038HFjG-870JlhqCJu2+R4CP,VlTPDI[%-]eW0!ha:Mrnk9E\p2DTdGAm[/4Z.bfV:)$I<GX]C_-L,QWfZJp$Da7HUYi+eoLlN6Q>2M_;T1YAKGLA/7ddFK^J[p17Ed=bCAQST#FslchLUCGf&gOUFC6R4Nk,IDjk.Vod+]@^[sJ0,*^kdfq1:Cgjl1=bbo3Rc)Z<GOiXAVU[+u"9N^X`6">\"t'h3!,W9r;WO6=2DRn-@m-[\9hF[L*RV>^d+["iAa()Y,\1dDWh^*$HOata8@^*[8IP:GZ*o9k<HlZdns3puJXU5t>$lD1HA3%(5dh``FT@=Me,rNj2LXNL6=_8dL`gLH4Y_k:;nJm_Bme4SfO&lTBndIm%LWTU_=4=h.nB#.+br9bocms!Y-m+D1OTae8n!?^ZrY2c%H7Z]juP\2J$3DO>kA6N_3]pj\Nd]E'j_&'689*5Ft2rsYsL?7](7/K?I6H'l`Hb&.hQLcS&XfF;^5g!<\D%!"f#:U:q^A89?@i4eO"3C.RK3<hhahfcd4Y-pKl.A87H6+81f@uRN9p,F<S,4.r,9f1:G$p.YPK$j@bGin<A2LhDP_%[ln5ip_.TRZJWQ@9u&&M60R+ZSL(L^7uT3S#p(`?-tm<NpJd-Xs-lHC>?&!,l=j8qfG98HF9VC$0-C!@aa0L)9<>H.dg,HN$H,]4!Q-#-j>,01S$b*%.gJORY:0U1n,0B(W0f%fDu@!Bk4T!Q/SHf@-5!H2'^KZS_n&oiMO'2uEPr<bc.L'<ds;peBApP;\$KDo7_``A6Xp^7\X7C4?dX#/F&64/.][2dL`WlGa^gX>3Y[P\nhq[B7]Q6_(:Ha[WJ5Pl8SHBCo~>endstream |
667 | endobj |
668 | % 'R153': class PDFStream |
669 | 153 0 obj |
670 | % page stream |
671 | << /Filter [ /ASCII85Decode |
672 | /FlateDecode ] |
673 | - /Length 2007 >> |
674 | + /Length 2136 >> |
675 | stream |
676 | -Gau`T?#SIU'R^LRs);>"3/+A9Z6e0+qN,=6)P@JDe6O0Y+eU.8@O%"m8B(+JrU-NCcQr4S\X89ZQ;$ijSpTnaPrra?5L9=gF+=c'G^&+tkJL[9?J"S]i%oa#*$<uY+*l,`W!?02\F!V;LNAK:I_%0-=Htm&L*tTSAB.2W41(Lt+5qh.,)4j)6&ksIkgB5i])E,?KTC[1a`XR(B4o5K@T44/D!<]u,g3ai^bV$+_r"fMadn+N\GdhN0S3l\D/JX+iT\[d0_c-12\u/V:S;pdY.lW3YID:gX^aRg&n"NIFC91VE'h'1^aQum^f6[8$nE^\BL&*BnbIaj4Xd_;;KoUZRN'+fHTQ&CdJ'1_H#5K&*)"28<04&gb.0nW6:oPFQ(/7Y\&&FJJ_N77)07BXWTgWt/6#[;<);0<p)!_O]ZecRIL4;C1h!o/Q=$HN4C_Os(#X#3fKhm_m4Zm0+HK:-^Ihkg5N%;B&nb`"/^:W,oC_D'g"#$@0CSr=bB`^ADRrag^:1jb45n#4Bh&F#k;b7Ccdfq'R7^5B`!(?>'(l/$20sL:Jg`[QXj.f`$EDs;Oko:.6@XKurW"R^d/dNqbr5PDf@iMWVfPB:r?CeVj,d?1&T=dcidmFB]EDJ`j[d["Tss(QH3ZCXF-^BRPjs5j9=o7994_dHKE,3f`1Wt=2c-13R_WsOSW[m??"1D&fQ`22H4`SmGL=<?Oi#FA6EB1$.Lh,S1GNo?l;=$c49cbnh1aaFDriIJ1;8>!.?L4;/=cUNanTU=-Hln<Q&M\9/1lS(_U]-Z$!Nf6IrdlB>ha^%aSK?nZ>TEP*=C7!O3J-ao7_E/[L0smb6RGh)5jKV*hA]T'o>MQP`&+J*0G`WQQlH?DsVKf5Noh]!50e.J_raCoR^==Guj-/H9pV._WS9],1`;0V#T"@0+Ek/W=;BbP@6AVX^EqbW*R[@@T.IF>7b9u.BSJS#E3Sn!^ISJ:no7MBR&3tQ3`,bVj2&oSuu8#\/7JH90U1>4>c@Oh^a\Wr$.2h=o%.F%KdoF]\3#]J$QmtnYTQL2JfYWWSI]DfQ:eKDW1lhUCMt<$&iK#R;SCh]]=1(JC3HR#HJhM0B6OEYpq%QEUd`miY6")_HlDJ:%gEO:5k8Em:$1PW52MqZ/m]Vc*[aKYrt$)DW[P?R`1pdRM3mR4Y+p(:j)J@Po!t0Da?G<iQfrh,\eUC`/B$U_6M6eN9=HfSL;o*d[s97Pu/isWiUERPb;`H=P6J5HGgsUfi1"J)aKolSn0ccNR#XSb[Q21KM4dm;SYt#;d>W;Ul,qBVQ;1*B'i`<f<FOn'j,'.2n[WLXQ^]tV(q5%,f6nk]7u<F86)TT3GXjMVuO%`('Eegii2V;1hq4!rB(s7,@bl99Kk/t&qEVJ'X;S[,]8iRY2X``?2Tsh"97W0LfM=PPa,?cY<+VS?>&NI>>>VlErBX!m08Ee:"RES8[9X9R(isX!b"Gr@*RZZ)[`0=67ljecr6nse5/_&1L(bF9!>D%Ei7*.,2'ck\12K;2FEI+YGX)GV)@AqJX&Q%RTr0*'Yu,-X>'%/?&n?+\^N$8/mPOZ:P:>U2PW/1-)IiUQE)77'I*ZH>]\47HP+^*![?UIg5K2d/^ULI,[lXT6iD[JpMDu"68^2pJXQdjNl=qu[W""1k3'<M)pPT1ZhW@I3=PciIaaO1:lb_XBSNWo:RjoD%[IH0XUqE]/C%O6W9:piL#+/a:O$P24_rlkf;B1;#Y@Dl44=8MZHh-tG]3@FBWDme5\Cp*!hBTFMpc49[[qg4%C_NmI41j!<.u-5`aSn+`taK5<;F[)C]96UIQKpR/)'p'M'FX-X^.@ZgFbYss6!Gs4kn6M$"M$)`!8"'cI#D4aV:@U_7mSLJCh4_DuKL4gQ_c$%oL)K.i76QDQMfGAg9:I^-iiuZ1_bAAumMh]7/B!LI&Ga`gUV:`Jk3?heekrZB!_Q)p'8m40B[YQ(!%;Hs)BhpH1ACmDGr`E_W.[#rX[Na%-.0[!4*#~>endstream |
677 | +Gb!#\D,91O&H7^.Ii,;0U9$[qqVIM4^qOcC["gX)hL;u+OH[26_6L>Oe!Kt)2rc/8V,4UI?0R6"RWL[`bVLpGfS9\1q<ia"!5'Djl%KXs'8C#dg\!H55JsDXiPE"@"2C)foqC"%e/S?P+4hJRr,S@uZ-Eto/W[&;`XWLt:,JF[*hYiLBqsO?@=e\EcmSd?HN"=1^e_nh&5')"W+NOZHZ.f9\nlKdmML]Q0RW1Or3:gJh5E8V`R3s'Jb7NEN+tsPUr,=RatbKS!b4$[-DTVg0RS?Rj4b6F>@bnFOb(u>5*AMR.pu2sGcEPM=\tG/W0>[:9>R#X]kE_k[7!NqjA/$Wi93)qp%BUMcarT>U#1?NJ;]@4I&=4T5U&K!pH5eeB!F66Qn`'EL`$:Git03mI,IjB^).nWY^f<bdTD1"%UV69F3:=SGuS3Y3I4j86CJ3;@l7LEClDm`JZ/nfDHSC8*(O!F,S9RDEXub%AkZWhBjn7,UrEJXkuGZA1#es.7&L<2b73Yi0Q:d?!]gW5J6#a3H-Ul;eWa\^`gKSfg5A'Ya!WK"&D<sA92\o-0#DcE0]Jhd/S#1h,*b0''l"*iV^?")\U/$VEa5%PWX,:p)d:NSRqHD+MMK&%X:s)7oaL*#oe?V\"dO-4M+.h+CNu^)Q3l9#O7u=B[!O<_F&f!@$lpppmQu+C,mHgDaQEU9Wat'\[uH)]eg%U'UUBY8`[HmhM8D&WA&&Ea8]j@me:pjD=ib9plNR*'K@Gip[p"[QQCND'ijC^`hU'T);K<:GNI_Bc]c")r.6<mVRAlr4g_'"iA%A,GH1>`NH[gMAl"m3QK/oGR%?sb?17;XI&`tQ=!fgR+K>gI'1V_4'KFkR_/1neF9ObV6=Z51:oA[@^DmZ="DU99.lJ9-2Bkl!GMQS`u?^t2/L!;Xd4b`.\9c6jS/3gb`o^F&B_W%%]_?qX5f>bBTYP%Q`&'aML*?3`@D='HCYkV.K^1msn7(A;VAY9]*P$+l).R1k^*FH:ha8M'tNO=5F]//+9&Du="W.n%-<L2?kh06W#=o-P%YL@6iG+H=.;<?5C6&-[pR:Z3[g#ETd:]-Q)WR-0@$-m]NNV;eNr$"9G>SA^D_KHjOK?!=N])VD9pH#p!ktYm103;N,YD/Z5T)J=@Sf8b`YN89dgXnYtpO?po[l\s'cP8/P:\;#'-<J/`kuC2VNSS[J-SXP(J&5<MVc:>U,N"V(%KHG^;mcDW4a,A`[c'spgIZ)Or-c$#><tbj89/F`M//QiiQ6o$Sp7tVD97$W2VW4o\pJ@m+./9L4F@YkmH-T:C,qC&&HjiP),:SD'IZaOi4+)e'#1ikoUgla5gPG7a5\835+@3(g(_1E).0J,_Cf5dX,tKBd=O0)E&C#3$B@C2*uo\#*+pEUYMi18*aV:dDsd@R_G#i>aplnmKp[p9.:V>jP^?)XZ-L"m\+&2"i"Z?F-^(\$;'`oe(U%tT6'LT;fA/=5r*K+$IYTbk<THKjASN:8Mc1Ran;:79`7?GlDA8dfMW<r'AB*VnLM.r&_mg&^1QAr'"8ci!,OlEY@lLS,o+Ti%;ZI(r6T90V"!oTrQ:8Z"n4@[ehknskj&1DL.mCdo9M>?3I;\O"5:;jfENd/!d%Hm)$brTe_nf^MV-:2`Wj0sVF+Po)F;VRm5]6(>24t0^GT(IiauRc)pmQ`\ip).rNa5HOYq7>+<*kOQ$_=%o-=0>l>$;%u.!IcC"C"]3.qDn1i0[X/)Q]+h\[>kVp8H&81b+_Q_T:**7,R6@K*4N#"$O)l'2Y:j\2X"5L^"0jiR0B'ET//Xi]`]KDhD5;F^S[L9<)NlB8(Q1'XT.uO8LH&!tJ2JB$+>!!--;oPQbBGSWgsYKbb7+'o<K#!@'I[;(_`;%l&s]/58,omFg8I?ki]8);U0PSs^5BXMU-iipMXWXh_)JUFO\PAt`CmRHQ8_hJF++%jb#6cX*$a?K'4b['P_A))='\VG7+D*DsbhHW'&U^O1uQeQptdD@?As]A%1'2nP.I8$<64_4]FgZ%^\Fh"L6*"`Sp=#rd6j8ZfieeW3b?S*g'FgZbm,=PI<#j?^r*LF;jr@G*;7-.$A7lHPpL<5+Q8]4S+sa7DmSc+qWI26kNn4E28L&,l`aVd"l~>endstream |
678 | endobj |
679 | % 'R154': class PDFStream |
680 | 154 0 obj |
681 | % page stream |
682 | << /Filter [ /ASCII85Decode |
683 | /FlateDecode ] |
684 | - /Length 1789 >> |
685 | + /Length 1870 >> |
686 | stream |
687 | -Gb!#\?#SFf'Rc%,s)>Hq.We*bgDC$XqN,7*W`ujQ[d<]6dV:H<9X-`kAmBpgqqq.l(e@1:o-(+\;#gdGSNFmTgj?1+o'm[/f-DTPkgSj85X@s>&I":5;85V&rR6tbe!"0bD6$C5YjKEs:)dtD:O^#YHmD_3N8_ZiVV(-imk.W#dh;jhXUEhs[QHt'YXaW*G)Nf\[QE!MDS7BbF#m6?IR\?GB#:M\h$(&ZHH$RmL#t`83F.Fq2.'8]1\H5@qc>$?oI!mb)Y-i9\712j$W?aq2Ft@dQ,k+T-;7hi"F8=7l4s,VT4rWA(Z(E8/0Bas]Sc'M?N0s'DgIb:#8AqkCF'Xs26M:'-R4K2bjLRt]O32Jo43aI]N#LNhOe06(Greu^A.M7_6VuV2o2h7%f(p8MTp'SR\upMQZ"AJO#nB.hfo)i]M@D4h7KZJP(k_@17jsJ-#F>m\9V5J7Q^1XUVi1u.K:NW8CRr^g'U@:mn[T3dIH47ipfU?.C`WMP'<Q=9+4noKr"t)K]r1tBZoG5c#6=B)Y2Ip%NHd,aM0eIWY:G^8*&'/b-\$=aQ1dLjFV*["ZOdf3hQlaD-L,V!?AN^#n;Qi"=9[++rV1G(T($P!\d`XiNaqdp)mS^MU[G`K8&:V"]>O0oc%?BOUAG!17dBAU`?oo]j<=3Hng_,>Z]+Vff>_\D<5KKd\Oo!TZM)GD70s')Gc:BP14LDcJc7*RFK)g[j:/Mr9B7#"3S\[A]tc`Y7tdVe.^PP"UJkqRuS4=mYWjO,sQ4`O:".f,Po;9WJiV5V5Iclb[,<CiN$c!`g*Tt@1I+ogs?>C5i0%*',iC0W'3f5J:b-AYWXo&ko*\LB0AF6oTmeJ[\=]\:hqQEVh>(;OJdY];jWe=fiCeBA]ph.j[c$tUN`V)Q<384#N()kAWR:aPndmZ1#&@Yg@>/jmJ-'+C'FM#@>F:?8IWH!/J'c!K,ika&6u"dR?F.4f+;&QDK]&dSP'[p:q%1Up-&Sf'a<P.h,[+&pP%Qd9Zu-H<$Te(*bH7`kQrf?k(ZY'BP`2f?dQ>!/4W^[1]YV(a&2r1US%?=61er$l_<,pASTFJ_WF:A/=gLdf0l1l3.T6!?pg4N5h6f7W6g','0%SqN<6l_qu4Ke)mKXP#QS66rsH5CD%n5>D[ShOQY:/@m@P;Vn)9m^(LSIMWcL4#J.;O*fVSPeSZm1NfMuc6GF<WO[T;&YWfq4@No%-,\hV#ZnZ/MSGGnMM*$)A<*D2bSlMT#k'fMN,Tm;?@I%SFGUVf"V<^FoHn@FPJ19s!E&u1oT1T:d6VMAXKnN0YjJ_Z!`]A[cr/X+'rjc@jb.[-M=goKU]D]YFpAk_1MkU3ntAT'nBR\RUf3i5l10aoWaTB:0cs0OYO<d[<C3+dtWM9eo`TCP@?H>ii^Y>2jkFW4V<3-Yq5$)73NW[Z-X=<oD)QLES4BS?7Uk@lKMCdEagEFY+`#20?8P3T&"S'@1f.:Ku_3DZsQ5p]^bm5aYT8(,sZk%5m?q`.JXAas]XgVid7aPOCc##K[Z6aRmd1O'q3_n`+P<mia$VI`i7RC_QSaBErAnPL)E]B'(Si%n._H*[+qM0d9C1+Ci769EY;/:7[q,Vj3Wet<R'oSce)V/fg#LZIID*/86\2Mni!AUJA;^H;e9JV\X]hnY4kO5\",6hgm'ZpJ0.ljNlgp;,Pi9_WXXrJj)2&]tCgg;E+b<_$TZFlI#G).V]5>)'jV:YBt;87(_s*2kW-_HMXF(MW][PWj!O't-sO@eY,em;e2BBFp6M9rBB="7m+?IK~>endstream |
688 | +Gb!#\?#SIU'R_X]s):hCLbj:U,g3Ju?k5u_?sSC/9>1#;09gQiZ_9dJU_<R^mujssgMLKAE4<hQ4tQ<ro%\9s%iKmnYJC+\8q;g3]Y4^q#[p[t&:"kHY2S4#jbnUp^'L$s*@*=p@P:<-$&rqcBNVL!e:UU)_8)(YI?dVC)p<FY21^e)R8cY[e.Xt;17;W1A]e[GLX?nV&M?Rq8t"94h7KGS>nVXun"!GU^)(^`ZC5GWW??b2i.X(of2i&FD#D4ECl4cf=W:\@"s[QRG\+\Q">_r%(jBe6/2O4iUD][kY1Ni[-JF(kKfLqGY-,8TiPA&OMP+a=n?C3MPHbHsQIUjV//CLo=/aMAZO3gc=)cJ"QaI%!.%$P+=Hu5s/#0]j%P#C:Zn*:$X,Y&=Y%N><J-c6g.Q)*3Vo5Gh,;@7ja+B',0L^].E_h5KaFN#!ld3;e6qnd<69_VQ@+VO8roLGS-oRRc$tT2<1TF\'#p.67q7*M[iP2/rK2)@%^)G!Ys,g&@&[2tRAB&#+6]62`VEWW6g4K%-$VG2fl%PXgE,N[d;GXkh27R:Pj1GbXY"S%).rft9AgapU[%cM([15p3NG?5'Qk>N%>_]18H/Q6$!g/:(PSLj]SB/!qRB$S>f.Bb-G&4E*!+%WW@.&TJ@c](-7APMnZ+K=:g<m>]$rT)5)T\BHiJ,FHpcXb5:pSjnpt6rne5^+jXP+9O740^X`F@WU>FEk4r$*\tRWt__j%`#p,dY(X^1;E;9.7gCm:h[UKI:"'V-mKE"eYE?8PUn?.(5ntO/&IHG`n\#DS2ei_O6PtB-7RPN+"OR@NY6$AI,[jcB)L4VU5@#VN'0f8E,YFajX?qmBE:S\1SMgJp\^'?5"FN9Z*pGkdSup\4YCldJ*3m%tDLoW`c!sc]+)*C+D?K\lJg9Ep?W0Wb-kB@s1AgG*Q\F5O.^dQ-Z=A)/T1hgsIO-I4XebpI*>u^DEN2`Vn^#RG/*:amSY!/s5?!Z"Y:"d4g#5SI#eKrgS.[QKjL?>apIll](h6M&MjXb=m31EAkQh=i_5;OqJ:j!G9->^CAm1:P+eR^fgdlR)V;!7EP-iQt.=1XM+K8E&8kXmO>V;:okWID$[0$`gRho!9mr%f=/6gHYR-OTRHtojartU1K[TcJ];S;)eO^Dd*@;O)24W(p5Y6H]faQ,aKF3JBQ@5(7_o\2nT<5`OueWK*I\B`8^2,@2?[<;hk#s[KT$lrA!VXke\S\FY/u7]"/qP+@HLbIpkfHQ)h-EK6Rpe7aRaedRoG6'JC8XhesMrI(4K?1LiLZfl=%'&'b(ikN6(n3al/>>?*pd\5!k>@!qr(Z.+ZHX3P3;J^oq^#[MRd!&R*XM5K3"%L>(*Q#7Hla7G0.;V.F5C3JVS-QYGn(FkQ0gHbK29OKf+46*df5N$N!g<+5:oII6[]CX8&;k`Hs2#I<U4k]R6K@<bD:Hm*$D#C7lUL<uGJ2c#n0\I8]BX4n!An4.G%@5Ks;gM5sATf-#8BfY\<&1#:6L+%?LMmd]E0\SNFO@<M-:V,l(%Z^ok5"GY2V[7n2C9*81C;JC&\&)0gRG.6m/cN"&guV6_X#%&Tb'>,qN#bluCD=5s"b,(trQTmtYu@q6"Mg9"/%Gh!UDR\BV^;[hM71EIrtGmULOV@t!JCACS^XhQ(e!9!/j96E'8/jq]@r8*+fCkmWtdP-p>gg(?L0KuouS3flmD^Lg%U88Q2a5,oH`k!B+Y*@^#La*HN\o3N"8uknJa7m65U,d9r2NtcE4]_-[,l8Dr/A`(9"<"Ckgd`*JKV7N;N-gN32u&cuhtGIE*[=6)nPZTG^`r5O<[S^dVG@-fEJ)>ToZ#j4IYK\63_9om/:J=Z!d=nLp>'KDY~>endstream |
689 | endobj |
690 | % 'R155': class PDFStream |
691 | 155 0 obj |
692 | % page stream |
693 | << /Filter [ /ASCII85Decode |
694 | /FlateDecode ] |
695 | - /Length 2417 >> |
696 | + /Length 2486 >> |
697 | stream |
698 | -Gau`UD/\/e&H6"/s5AK:Lg)j=-2D[P$aaV2"A$-UEOPsi5>Vu(F-/kUUmh,:muEXnfM1?bE3Q39@Z%f[hECVgOnPK(5JDQc3PbM0]UJ]T#;AfemsBJMS\`A"o4QsP5P+3OUG30H'<a?dN,ai*e[)I/iqYAEd*2+%i/`WL(hPc8*Pn+RNp6-QFKVIOJnne\*h4.ifa8o5Q0)eGJOj2q.q"6%</E.<`<(MeEiMDT8@TFnin0'WK.%.0.>t_@<[;Y/$M+=2s1mtIFGtlNEQnkY;O+]%J3gi4,3C"H87c5:#I>^H4esS2D0W#\QWBPs$3S!IZ/X!s<q$fi9gt1`AX."J5aFm\_ASIA`FC-X5beAk?S`EM+nX\s`RP=P^3pA50;UF)J*I0qBIc;AiQ[@+hHJgL1Oig:UoDCtjMP0M]^n)Iot."_Yg;h)HEOT*<jt]d2[aN#//R")1Wr>sY5&BPI(^6aP(-!>aCs96KnJ1HGojW]0gh:Z=`W#fYF7TmG/\U)5t_WJN=rgd[UQpK15.6F<KS]$kV`cREcoS5$5LO9TmBn?EI0O(MN$9i[c1GU\Y]'hBf:qC3]jmf%D`bQ_K!fFF;(2l)c;P1.Ss,].cmJDnJXS>82$Gd3H<)_bF(b/C_)h('X9&hk-WGr?C=8B97^62*-8sM3e,O_DZII:.s#TmLp^HB^h75X,`4qkCY@9q\P,C@G_2Zj6N$-R[:+?;0g!CG=?Wo_ej,dMNf6Pjm!FnZg.4/'7l#-/&Vaj@#%l5BW$8_K<fj+>QS'>rActT7bh-Y>;j'Vs&-ZfE"O#lCDO@1mRrPW'COt]j&>l,qU<8kgrh0$J_p)(%A\-iKned*]!eSqU0+),a%:hepY-i'Z^/gl'80Tr9D@Oe3,t$7V4F.#$s#t`^$poQP*<+lR_'LW(;&>6fO@C_DhFhAiR71"[_&85^5aI4n_)\XiUGHf38#<#mOHD@VldI0X.LkN>rS\E!ALZl]B9>]LL/5+::1-5(+`g>3cZ2@ICXMfZZH>lh,O+s!6&.4\^u[%9s42,'>l4osd8lF\%\,(Q&JGg8,HZ3'j*KiJjqp_o=n^BS!p/'rb/c7UG$XYU@2Z\)@$HUQ-Ejge*dDaYe?$E)(8CAC-PJ,h9Ne6<[t_nlRAtL!@icD?N'[^6or\"sS7XNgPFHsjbC!'!0qTsk[%"=65'P[>Ve$q2Lg>/g-jVDtdNOe]b60>!*IiJu""0h>/Oq6$Xm4^,\r9.\7_IZYYVQYi*1sFY'!hmc)n3e&Z1).)&b37!0tT-@\QCBl69!2iK\'c@_dZQ+<CS$>*[1NFR]QasD'nB2W\.@QR1OA2K6Xh"-_3'Kp^5@Ng];C:Am^,U;.)_Q2/RA1V>oBNhl?Fg^)&X!ro\@AEMGNl##EO4@X$?%*]19SYZ^i:ScTOaTqqQs9D+V-rl"-kWu(Yn4.;1T#88\OEKt$#gRV7H5i8\:j6^H3I;aA7m@Ro_CS555^ic_HM,eGK)g]@"m\fbo9F]c/NgLESKWTd5a<e5;i]BYd`5n=],$>e`]u7gJFV[`&s/=_C?s:tS$4/k1b;B7Nn3W=S\[V'i;^oPopdFs?P4igqNV:JS^>?Khrckf"o^?l`R8(ai,+>dU]L+-R$\/+PY^bTKiEc5ji0a)V!sK7*(q-)bFBtn8j8HCp7c*nH5j4Z[*Id4-l[Jm6bJSc_4s1:lJCs:d#oL+-G+HH%M"os.+MA^<O*+/V)'=s7DK3p9b;$X,&rsm.iVE\+),BlqmR&sEUNq4mQ\9u]eBhK+6530(0m+E-J]qNr:`ioq-J^R0pKJFtU=)6\:OhKZKl*D&kc<VR"nt2fO_RT"O?GR@\:sc[UuUh`BZm(*jFH<<dlk,eG+"W(OLhh?[\%_g/sm(@a8=\aS)Hr44hs-UTsT(/qGM3,!;G5(mQCS^f8e=XKnJ!<*o-"XiS]g)?!$_H'q=Lq4=^;^lri40fgbt\1&QJ&#JDK-oYtm#U-7u!,CeafQS5PFPFWFA#R?,qp2r%"^f-H&-[\#Z?#t?,EgKGn-YF"c:VcLgA4_][qE2=;28.rl3W?9Pc_'u.5j"M`kPI;n/q=I'jH"K*d!l,nDD"s3;UPFAk`EITBLh!CnE.^g`ca^Ijc;sKX!sH1)B6SedpA\lR>AMqI\jkqHo2Au'qJSV<OU.i5F=4j'1PL0?/Hf!]\smD6+;88SsA5MJYL:3ZH(h>gDaIG91?=POCE-8,Y5T"CurJLc0`1RQ*>sOj\j%_X6W_.Yj)%AS_#'\$%]_F_L[_X+*]>WQ;&=mh?#5),u"Yoc[JG!1geYccnPmS[^os7<HSCc`ZfYOIL6lRjbalE7Ykr`mUPuK)%MCj1,cu[\r')q?a7S)OMY_7P:_PU&:2168ufoe\D5FGN.#V(Zr]Ckb;i1JE4!#eGlI%oYgcaY~>endstream |
699 | +Gb!#]rGUFK'E1-[reDG!$ulVE[J]D$.F=qd&KpK3-Jl?8;t5I&.%?,?W[*kR)"t`5Ng+'9+*NgX^fnO1.Iup%h")MHM@Ua*n(Z/:"*cbYf;Ch-?'ltspUraacf)c`J+)_&SmT__NF=X\Gb+A8N,/.]^;!K,OXak\nG%Sa[_LG!;q5]6%h7+UH:.2A0[7t^#fbq59]+0i'squfZ&HhakCsitF3mC5Hkm\C_Xr&>^9TKkpKe]miA-@qCX+uf,?Ol#*5"HUj(?AB*>l-t0;L?P$b]Mm*rj-f/V&!=qQsHYBOrqO;gp*QqiUZff3O6o5lgiQ@fX.n$Dqe2klPm>T[Z(.Q7m.=>k']dV(/;';!-B?]Zn4G(<g_Qo_QnY:8`qcYT@#m'8T(Vi=iTtms\ugq=1),[G`?Z#)>EZbgUOtHc,"NoJg#-V9<g;oYru3-"A_Ce\G-K[p_#T5$p@3A+AN4V'Ro;kn8V$6Z%K*nZ/)<:f/WD-p`oV?UfZAliW$/[lM`ODb&MRA8W$Ba'?;S>^\.k_^C8`T@ebg!(t_Nd"#NZLmVu)1?1(K3EIapWl8PF9Jp35J7:rlJE#-$9G+L-r:SQV6&*/Ga?[]73p`0p9LX$3(+5i-PiKV:"&*5D/ONWt'GZV.$qo]`jHKsd+)^6Cf?+`X.[KU/WNOj3gOWR;k13q[((bL9&4r:A873T6^s_1(:t-S:5/TK5^l=4SIUiTL<TJn8KLNCpU<,"19k,9?.hpU6,dOGWogPS"V21FW=rbm"q<B,SG[WO3C@We^p`;h\,L[RK/!sIWEW`TiZ+;&eTb'_n":!ELTYdqr_:OjN"h]-P#"1p;Jee:CBOa7ui-=@O\+CKDJjX;r8N[d/n!BVteo0d(Dj0purTnr8c?1kglGcEgAB)kCb=&r:N%*3+rdPJhRlc(OJPje$'1rMGlZjPait3fLP@?*8FhL;_Y.7l%LWF/8KQ,@?/351\>WFJ/=RfKP=_JJua::h-V%^G<FW._Z"2m<k^rAK0du%gq6u.h.DOm>gj+`ZP$95@+-Ml.YkK.<Mo0jChN(g4@FZ<RQLW[`O:6RJXA@J)O8jfY3=H2lB'J+C`K9fRaTiI+U'HC\#@grq&b7,R4ZngZDZm+ng+n8WlS$Qrt`/5`OJ]DEM.Wb-8)q9UR"m5.WG@LM=10tSNBH7qR*8'Fb-aB)BUCLl#;BerK+p'=G8q\M,nl&;LZ:qiW#ce6TFHNlJP,;cLW$-3R*XgE2h(V?g<cL?e=$4?E8qf_(=d_%q^?>9GiF[.8`7N?``%\;+/"3a5Md.*@"0'Xl8lK9doX4ZTAJ2NcEZ8+abSaFjda8`<s4b@O@?;+lAahpcU2\(lIF*_$'.b@SWqQk$LJ1&aYMl"khd_oWRDCnCon.='bQju?\s/mF2!`U*I$=gm<IO[r>a\7]nl]L3WSs&ZKE$=1i)4/8L<jm,UJ'(d;i8^lV]b6ePsI['MW&<4KiIO.e"8:CJThq]fkL^djt)Rl'%J4dGo,L]jooLY`I]<2i])L4CeA8PQqb1FG_EG_S/rN(0hpc3G*N;m=,NHc)eU<E*sS-XEI>o,c.`sjNi/o<FW'f??q;_HY[$(Q?eVJ,URL!!P95C,A.\shkoBn%N<(X&80`<.R4CQ?!?E2*Jk+==1d6BeF:QU7nrU1("i<^)XgV.jE](d63"^=G0(YirKpe^):trK3gY(Q%F';K#C$_V+0Wgb1bmdQ09$<T'a,l]N$*r"#,Ld=rT=Z<c3DW8ifQD=APsnB#!s.EG;GK9j/d\A8+lEj/p7_>'X<'A/MP@Z91>Q_GHBZI2>>-S)L.&M]X6bgQE$<taLYWnlQIhdZ]`"%YBl/4#pKU3\'R7c;JY>#K55`njN]/hU_Oc;OOGg/)`!o4o6s)0pKsEOWp/2p6UU,%Dr("fP$-J.VQWVVPk*X.=-dOY9bIs=!23e<q`_S.8#L`U3B;>E9#@BB-HaQrTa08Lp`&oS=;`5"e,a#5,l\qI.pr?_I>]Q&keq"g>RM[q-4h<8rZ>jA*h+;O?fA@k\?$!OoL[JjRDn,%TLV4^oTpcO:HYF[YD5(<KY_=:WroDu+cD]L`n$#2C!6sL50O&Pe-dS^V2o)9=Im.qG;FB$(a/@E"J,FmSFB^>j&l&mUr<`\^FG&C:F_ti]FPEa1Nc+K@PP46#rL0RL[X!0C<l5^n\=9]Hf:!U#HZ<;CL&+h$a.$ETq>J,>Msi,X[O67@8fC;bfFHYS>ES5oT$R/OOdk?)Tt.s#;PCL3meTh!DZH9enH[sEA66S2ZeWso5([!YlM.tBgXXDP9<iq/;8$#2hEKU^IcVK^0u3=@'JLGS)rQ1]Ght>[rYiLPYHDg(LJL&0(R,uXB)dJ2XoEjUid91/;120S&1Z(uZOku"SA?LI\Dhc+>W'4#]&2n%PMooZDI`'n/%l0?=EMf"CIW@-flsJP(gttJ*Ec%c=:/,F^:NsnIY\gOCj4[G5`=:Thq9jQn,3]:U/S;~>endstream |
700 | endobj |
701 | % 'R156': class PDFStream |
702 | 156 0 obj |
703 | % page stream |
704 | << /Filter [ /ASCII85Decode |
705 | /FlateDecode ] |
706 | - /Length 1781 >> |
707 | + /Length 1735 >> |
708 | stream |
709 | -Gb!#\D/\/e&H3^ns5D=BQnu70.*Jp/!<nX`!BOaoQ?akcp^8ZN1)iea81Le:lZ].8a)M_Bb$8>"0l38j4$IuYSi[O'nX%n[-jM`&_!sDcikZl@i]B=t0&YdNnDO$0J2D%3+cO(\$,U\<HO^R8]TOfX18e<^pkh[iGi7;P1-I`bK<'DG"E3@ojW&]-+>b];-Sulj):JqYU&n?#LaPi_MZmbpZ\iBM:l+XV:,D&=-=:3P1RS1`i6M]TQ*)Bbb:9,=H/?I_+j-`]Yi&XgRbfanSOZR+Om%!]0/Eg/>umnh7;Il!8i%C'4*^A7g]#s:Y2d*3J1LDBnc]k1*"D3o/b"IpFYF#l59E0Z##<ec+r:Y/#+sjAHq\K69;"0um4">II42+CHM#D+0S8iIEP$r[#hF!3h5=tj&.jbub#tF;k+VjP,qm^2dI&\ThspDp`Wpj/fCui[JRIj>YMe\%#b4f3+Bd1[*@RMGfb.t$At1:uQ[4[je12GVeF!<lIeRC<a:pB+g<,Yr\3"-6"&k#&+3*^!R0U_H)&W\"k91Thj)GeNoHYr@e/=f;)4ro<'7$F"VSG5T551KT]j/KU`jWa/'Zk;6go&G7B;5<`Y.7kJI4?F^Ht@1%R%P;U&CCnSaeVAf;(6c191\cD5DC860p(pTf];o$@bN?eki)DkmL^R&`:KUU8$Sl4/1/$F9I_@;a:;$f]S4F7'hM`_\;:?hFW?l=lGH<:Qq;[h;jm3N%noK/pj+$sTmiZ!:e]%V`A2p5Z\ecETqJG!0;,S/'rddWB*?5hhg<UE8.)b2M/8>K+aZpcdpA8qk[qXGRiZ#6D_,CIiQ""R@q3i4j.gZXJ8n$*8u/EmAIWSH;mIDc.SS"R(nLr^7GhJ-0MF8)<[DP9cDE>0&E\Xl/m2ZqGG6@c9esf#1(H7X26)IT8rDE,&7m:)f?DsXa*Q[]]&'l42D4AeBsGQHOmK$-.>o9?p&"LP[i%^($NV"NdYHt'j73kqlBRAg4aOKknS/0gbEnU[KDUTB\!rXHK[1SE>O%bT2O*_re[nMN.4Wd3MVV[QTp"5ih$*X5r1ZUg$RuPU5*7[7$R'HbJ;Ft=Rn$O\*e.(L2*4DKh9`Ml^2T\g=Z6m.(9lV+D\/#ur=e0IG(M)m3[oT-e#\?[<t^Ms5VGcBg.?sL(L2%*o-LWqMIWr#m4kTDQHE&CX.EQpljL8E&b_o#(69cb`?!^AVLA]O@89N[>=at1W&o&4mlmiqlqq@qXU#-aoH?f,bR=]OHai]r(P8f,FYhqqfDPq"jf2-e+[o;['"g:U&q#HMXhJd.LW1Y;CsX*S4Ftd]'4-WY(QQ(>8Lluj[LG>;Z_e0SDrc%Rn+-P0=^rGToX>bd_bkV)[oBHT=Bb_Q,1_?un%EHshfC16iO$B"$!?-U)br4Vdn1"<`;^&e0L5k`pEK6P-ZV\=SZ`]RJg7PpHEmL0,mg*iMFjT'4ItdA1Tq@ZOR.Udrk6J!Q;B"8Y&"Jrh;c'K0HW0u;4)1HXYUO)3I-)\A[li2GrG'/D>YP:)"02M,#R,MBktlQ)/pf&W:l%mmN=WAO3(oB5NCuWG3[`%[[eKfo%166cg$N.'sR^B@'_m-<=r/d6\O]&0%\%u):3VAfK0H6MT#g77[J9T6J%='U[qMCWj:uEL4)fY!92_q[,1'sm=rfH#GZ;16jFamFDFLi"eEKOeL.k=$'Pcjl)*^)h*08(*"7IT2BJ)+:t=ohk.R]V2m#[^6Z:n-,AX9hQGHo=I!HlTK"sM0YYPUP=(i3CrN/H)iPE8A602h~>endstream |
710 | +Gau`Tmr-r=&H*Xms21Pd0P>>>8X<n4!s0`P!u/hfXE.5Qn/#9&,W:mcOAoKRYMYK5n&0C>3EQn2YpA0HTAI8*Op<W=HM0-D!Nq/rIdM^L__;0GDupm5_#**Tao1I\2nQL?6U(u"2]foIk4I`T>=gUo9;4:<Di#a;-a(-^k,0RDE5&IkJJ5r*`!h'M9nM#F^Oa\7?jcCa5Y`gZ#m\cH6;OQU"@\/@$KhhPhdH5cXlcfW"U2'h+'Oc<W$biR#Oj+;)/qmi;+FKTFWk7bIO$3[Sc,k+&jLJij$>Kd<!#s[1aT7\d7dN4Zt*0#3nmqpk;q#<!E%p/*XYFp#bCbj#:,2?_^W2>&Bi<6P.a+KdGZ'n"X&-iAJt4]g[1D.?Jd"f^Q).l9ZD?dd#k[N;KFU:3#asNqP=7_nbh+5XltunD)g@Mj)HMSDb8CS/I6SU%%M!hDGWcqTY-#f(9![BD!E0D$7X@:AYh^rBbZho8OfbF:LQSe%X_;6L%,k!5p;Sj/m+k1ol`*I`1@6[\#DEL[L`r._qD_g<kiXK'`:]><YBjELNb\Z_Q\N7V^&-(dbm\r3RnJ6U&e8(+k[P:0``k6gb><DQt]d]!ZHuaBo#F')Vmpk+73?9e.7DleqA#QRbUd8K-aDDOm.'^:H=-_?</ZJ2pka(1aOT`K/Z$-mCn#73j/A"\AX`WY<[qR(g%TM_@NMe]0dG18%_FbhJ\%jjUdih:B3^G5,N,0;uf8O]&S'I9A*ru28F)ifGp$S>7e:gf_u6n6Dc/3f%AoVXuXDVYG\rs<+ak2JtmK*)#%@Q2V4?@`o$JE-&>m#.`Z0ocl4OZpeOqQ;c,HAnWu:*i3*QZ4.Kaf!1tu'do4bo.P][Zk*CNHMBWN:%\095\^R/(/,=a?bZWEaUG;j0qhGYG?/:H#ofd]sIK/dD&09(-Sq]b_XPjp.<adB+P%nM4Vugl\10>iceLbY_6a]Zfdn!a]$^maDG+g0:B2obH:)<>AhLA&qct9:ZGWEqE"5s[m9L;!'2'0P@S6!0Q^c)H2/D#?FBI&jH>`!9[kk12mCXbqc8F@fuiUCOjgd]<__QRhFV^@uq'4>k9J4W0`8tq.kAH?`46ag,>3_[g?...;q75#1S"=DoSe]9YWZPlM5K\<%O,b5+WQ"Z#4O;(<a9Z#>d`YD@KUaYUFU992ZRbIO[>AH68lHRsniRE=A(-AT3ac?@fdraEG0.nk8)<WT*!6)h@_X)4&n.VkV.ij+]p1V"s[fO^pkCi&N]-W>]=HkGVgB5EAoZdtn7iIAtaE)I!Q\h:%YINZP@X!I8%DU*q4<_!cs"=T1/mop_A8Db4>'p0=!M?Km8TI>lrUkHV1s'ok\?USOQ9B0E*^2gUG^R$&J:?,F9RsfcSn:8aCMLj\KS!2t1[O]^d//Q+Z_@)[elPf3.#k5S(DQb(UN1s-.*CP[Unr=/S'f`h^bcbDkh/@m`^\i77(R`SrU:P.Bjd(03@*?p1LB,`o2Q!l[d%J?3H+'kaQg<4UQ?ZK>79:n<=lm]Lt:Fmk<m^>O#`lXB_)?f$Vu"25$mjg001Y$BCKU$R_8^3hD&A\Zs@/Sci*S\9]F,)\K;hjZ+cm<r`LQ>#or;9e/i(,hkKu=GGm$sq`aWWZf)g$i4NRTj+`NOo(E05U)B41A$:Vn=WR9g1Pin]4iWomJSN2#aEc<Jp=`Lm5*DZ#okgMX0b/]:jmlp-M'Dg.D6r#,7-MT/RtfCUIfV9pcKG~>endstream |
711 | endobj |
712 | % 'R157': class PDFStream |
713 | 157 0 obj |
714 | % page stream |
715 | << /Filter [ /ASCII85Decode |
716 | /FlateDecode ] |
717 | - /Length 1752 >> |
718 | + /Length 1650 >> |
719 | stream |
720 | -Gau0DCN%rc'`B'qs5ADEjp\8iLF(."3Zr,tTNdjrNNllAJUj&hA1eMVP#PWZfC+lOHVGI`8qI1p:m^@:H[$Y)_4tApr_G%pZOskLbm-I`;%A'4mDJ,hhN*\X4s(mBbI)s*##XH-aY9E$NfSY!P*jk,@Tm8b`?[N/o'B7W*$:;/J%^W,^o3t:,"R[k`4Wj8?A:IND#S'rK6T?CboN`&aMoTG:13]IN./&4rq[^k^?5];1&/j/`*aC77,:B7>\GZbK#F'FKgKiX(iW=7n:fd\n?EaI4U4Fc^@`L3S[sm"$mN1<.9/Bp8tR':r]qlf0D#2T=ha(=h2s"PC-j2r2JrkD%=3m>@-0iJ`h7@.`fb%bO(QN&9E6g0%mBAYXRRubP>2uG:g`OI.(a")Wc@J=>B/Z3QhSC6NI.CSXA57BoL*fN!gJurXRXEm0]KUU_Oj'r.9KB<8k%gMQgY;Y&]X52qZJCOVmY#+KG""HV>11/G_;%*mhQjZe.E.B/p$N'q1o6-NcQaQ(W^2ac`^1cFI?Jle0lh"&9n\"L+1G/Ai?P"1ai[b3l.8jV;Q*kVaT.4Y3AUL37e)%_u0A6A4j[@UBmu"k=jn:VS]R\gj3hY@3nuCc_[mG)@2BKn<4@2.aX5R%*Pqr:LTYQ[O*%0N#/phC`#B)"7<fT`>K9W1GfG)@'QZEbHAj6XdY*4/CffulR,8Zq0(#Fg4X-*efgLYK<W$i+/\;5$)SdR4&!.73_[?7:fCRI$mTM`+0d!R&3]u@HRZ]04i+A?r4A\95m..A.pi!:3bVu:XkN4-#`$;-'C:SdQ*Si&USf*$0R:Zcp&[VjShZr[-3Ejh)JO8)_WVj>faDcJJ&Xm"TF,%t+.*,s0ce2LCMuHY6h"CM2h<Z2$![$Op<[E5>"hn8VG(MHg:F*<$`?Ij=]_4:.n_rWin'Fk#FM`i?j4EWVg4!cXer8<<n*9K;[nW?'=IIhBn=hn'W/:Ze7'=<T9p4t-C`G$Bu88ne0Uf/!CjF22-/LC(:?FoCM7E:LI*36jW"u<Au4b''Q?croF<el-AP9G>u1IN`Wn!!;NO+a#BkAi\s>_i,DJ*8%#,%tB4Z^1%>0jYaLEF<1`&mB.$.+6*TYVK+oQZ"k8R%<CHi+'Kh#@n05Ok!B'72+75L*:b%Cnr:rFq*_m/aK1^"1fkA)Rp*;#o2:h@pMUhs/h!MuKs.4l(kO$oA_)KM0&RVZfEA\Omh)@4:7f(d#'gYW^&mH/9E13"qpZH8%>XQto8p_;I=pRV3<--=6>.AlG0`kB?[^^878Zf^q[HbQhM>tC1XqB;&"/o+"UG!j;bE2K`Wn#9MHO^?gbOT24=q%'09]9S5.Bs>#c2R`%Aj<eIp-FH^r#;X9;*IL.^9`RU^n]^Jp6IosNmKpsUP9"_B=[pnHaZ=Y)>2sFV!cD,>C[iW`W[S4[<MPC">7.2n3aUL")0c<bSMbKj=[QPb].HJ*-e$(4NR_jEC=7]RWasX*A+5E>7O1lOpZimA_08/9PC#6q[R@ZY9j)GE\(%&,hE(:\]$K-c,tbRX38QCfZ-MS2V+[L69j3[q+%TN7c?V^XPEg+4^V8CqH$uIOCgN].-5,bf8kkOOp/,X(VS*-B_>!:JBX#&Mh+EQWJ<K0&b#;X5IDQk]c519uVcOtu'BU]?UcWY=f$jSjmgeA+hR+N/NKR#kP#"c@5%EgtS^VF#@^5Oq(8?C/#i/lr/M01;iHf.?+S"8I[UYrcjiX+kE4G'f*$>+aKtH$X~>endstream |
721 | +Gb!#]D/\/e&H3^ns5C[#EsGLk]AsG"YVZa7,0dF5^bEQ2B^'&CPpr&qP.JDWG>rB+l"\1h!mEq5b9D5X4ZqSj4E0Q2Ze'!sE&NF%(ERfb9FL>V-\U_1r'!8,q0[MJh2b9.8>=1Fdn*/Q:/?>K<`mjd-&f\<=t"B:inC)@EI'qZDWc9o3%7O&,U%`'"f-Nq$)?0Eer\KdZU/AZ.;K7DW)>6[Y?o';+.3%<1&UhVN6l_F@pul/'[^D)5bB#(W+C^iOiFC<h[(S\N*d(Tn09;C(.SoH9h.=&pFncq;*&)^?GZbM?_k'</9)%+7LIbT16n4g<B57Kj0-a^6*Lu/?hj@O7]SRg.XZj.>:?K6`"/L\Bb9a<.,[cUW.*5mQ&DKL6bYn4OKqJl4U1gn;!+._Hio@OJ9^7t)Ql#2=\G4*\#*CR[%Nsbe8aiNK@ppmd`'c4Cm9.s:E90t*iH**\#9_&)QqAZ/3r1WVBg<pK*[V@%hgHX0,J8QXEN*m^[E7oI_N##6IR=h<IKW0k&hniTf+#M#e8S+p0g4(Z8^[7\9P%mR4Z&(LaN,k<nPM`ZX3B;,>-DEc1<%s\_-gWr.Xo[2VO*u229C$'#h]Wf%EVe.1Inc(@ln]20iDHZ4%6.!q$?N(d?I?NB;l/K5Wkm3@9+<7%V1&e)N%U+B:k0ZoMd5r^NT;0>;Ul'a2RHn+Xqec"^!!eTTh,]+qZj()[(m2iMKF1fb<nDNT^e(D;NYDrS?`Z$PZM5'MS?`oKP@Pus`/`d)XCs$JP/Ai$[kD2BAC2To`2&LQIuNjq"_d:?YZgJW$tU`ARnL(T1!OH-h0)hC)TqgH9";:a\p6i,`tI(8U[5.8t-.+Z`=Y<a'9l!JKgW)f`_cIMP*Za(u.X^ra\%4]6'F0HXm[M^\do9p`C_cRRr5l^\H;f=X21niHg1PZI;U3K5dHGeg"WmjG_1R".JoNn1['R>.7,2/F:BeXuuA:[;"GG1C>S6r8p6'/TiU[NV3@it#KDNr5d@<eA&TYK<&V"\*CP1<!b5Nu$p%:;X&Bod;9P7HHR1Sd>Q,r;:)p9Us146_TK<+mpM:Xl.Cl_LGTU&;K=]g17B8'n#%HN?2**p$QQ*BFiKLSJK&)n/=c2EVT.Udp9m9a$o_DWI0@j!?hqZ5;FGmST*h7,b3<Nio2.4Gf,Y]a4kds&=H^&"JrA2H@"p2K*q_*,q31jqU5;M7Y8e:MG!gB-aM"QAbMaU\"TL@^-IPK\=Fil+Y`5<7l_9>CN6a/MTo5E!E[R6Xs0?>dq]IlkNTp26Ek3hB;2TP>RKrg&[S(.*AS_Ft@s#K#Z0a`<I(bKrHu'bLO2`Ue='hkb%9^^VQ]Wa4FVUDqB5(0igloB/>:_]P(4o,(pmdqZ[-9!One<;"%eVZo$j?-?W!2S%@"?KHrTLURrq+EBVo`9)6*^#@=IYKDFogG$1-dE*BUqCWspY,6QY=$\p`S/N=hc<Sd"BiU*:pb!K*^aH4>V[0,td=]8HE80<PiVD4mLmCIa^IJ3>"!1mt5+8FTW#7p/OnKF;o>),[-2Yq+acBhuM^KnU,O'&&AR6=1,*m>,md$_gLr-42k]kbo<efsuZ3^6k;[Z\=Ied<UnS5j$"])SmaRn'c3DILSoVdlQ.1Q0*1M:-?hnh7++KF.~>endstream |
722 | endobj |
723 | % 'R158': class PDFStream |
724 | 158 0 obj |
725 | % page stream |
726 | << /Filter [ /ASCII85Decode |
727 | /FlateDecode ] |
728 | - /Length 1567 >> |
729 | + /Length 1645 >> |
730 | stream |
731 | -Gau0DD/\E'&H7^.J!_lh8OXWsJmVEP;K=$_X!<r8:/rPb[+GJjnI)h<c8DWmh`JFS!e^Z.P+[?AZSSr65!/A;9k_qteF-fQE7K`M)\YmQqI;3"_h%f"\F.sahs*(?DX7,F%U?pE"/!T_CHpWp*9TFq;IXag331Y7g6>Cu20-2DBDQ#E"+sjV'Z:)\`UF=DKkQ#54,#cWBe84D\P"tW,01`n#`RW]4f=>iHbp%V0gd!/9SaAGrr`4,5lEWF7XOZ2]BmO?c9ZnLp)%G+%9$oaPbMMS&\1Y6:@h#lE#>IYiNPli;^SBZiHFhY=WU>sM=Hsm&o<.*o,7L#H-7X'RR]eugIDU8*VS8fTA;Vn;gn=hN%\)]aOf9,[CcdCVo<K$f%LOX'E:]K8&YUEXWU"a=e*<nn]A:q"PF3T.BqHrkaui%2anq^lt8W*:F7K#S7b1#'%<@D?qJQFkQQNrV$ImHSTSQF/;jeW#tc@TAP6RQo%V_epLY8^/0QEEp*e2emW4>YiHL<L/IW@Ws*DRZh_b6u);5/27`E[H>BWIq"r9X[L;7?TKSVdL_9)N@,[AZ/*L_ZK0!j3_,8=F=<SWH;ZX9C;#T6C)N1U[@9]?2c^+G5)j=HP-dq`0Bp$NZN8Y0@IdU%<;cZ%_O+-*Yb):](b6:?>8[B^>e*ts37,3H24lqYa0%^0bsEM8YuLe>iPS@X&E;8n>h!8=8jU4@N(Rl`EG!rHs9<WV4'pi"*kC2c/(IlL*q_Qgn,j,BbK9N$5ap^gN@;f5=&P'kYl6GL;DZO&$I@s=BEI5mRo@s'dMEI=dBR,]:6hn=iJJ-/JX'/S/Bb'm6-:*Ai-FKV:c^f>s1[QgE[04DJh<`BYf1O.5L]`g7K(:Sl1.2>*m$%9'#Z^11`F^&@Qe42C/Cd30jg-#[5M3-P%4m-<iZa`>bM3t:1+;R]N[:/EUUMV&@T>5Din`P`T"c5bOBCspB8LMNXXbA;4Mko-]nZ-b1W>gG,Whg]*OG[OqZ9*?dr;]/m(4@'9@9\jkQMLMp5es$iaoOh\e>Z\ha]'Rp4.k(9LRe=AHn/=),abC(6+ILD.l]l>rYV%h,9m5WLIFg8W2,K9S/U>DA9SsK&TW%J+QJgsFUgHg/!bO8F?PF13j%[XZ(*&7m!`cXPAY;6QZ9U'.]2#cMCO2OK0iOtLEq=:kk9,EU18sV91i&nGtFZ?nbMY4iC+h/:O`HSU3K#&q:24B%((jHE4-[,?XVhYj/sZ.[TbKN^'V*R7*7ic.#Xp(;.k7C:j(bTe*bCO]XN+L[^o[@,+LE2Z6J\G+NF8.c>39Wm+F.P:?TkQ[dd'0G$ZQ6Q]k:H64MS'?Wnu?D$J`t@i`t1.^JeaYM,:#>=UND$3H1]9$in.NatA-GtRSCfA8VS;IJ=e:?V!&@:sn;DGHf#0bAc-8mLjk#=SN$c6eeJP<!FK>](jTB7Uj%jmK%6NI.2W>^g90\@h\@mW"2]3l<g!XGh<R`sCJ/]C(;e*sil(8N]mH'kT"EA<Sku=W)MAU/F$9gP4g(:\3HVkcMh0I+*%?FjtPUPWSG,Wchn#:p9g.38%I&~>endstream |
732 | +Gau0DD,91]&H7^.J!_lh6PXut8Sj1U.WGWl]A@NAU7t8BU:!-Z>jSk:G9,W!GBTM[SBL!t5nLjXl^;CWH$3fN%bUF6R.n)jpb7AF(CiDW$r_+k<Y'qWiI#lpnEo_\RBI&dkde.`LP(]V3B[*$8mkh[JglDq'bfs'^c"j)jR@[.0(*dIn@ZJ(V@.DW5cB*a<iB;G(s&*+9L-NA-;\aX`&K_^E!Eaf*Pq50)#aU5\+:-RZNMnga8ClF"Msj9-"K-`lNCYG3?HPJlZA]F&U^h^Yg+gs;c2,0l,$80e7mLD>u.ZPCYkUcB.ZnkTjud!Rt+h3-,`aBYRC4;A#77)_@2.B#W8fD#_`G$ROT$0_':]YThM/G#gm/*er5HeX<gh>W/Mqq8>\.k#PSKY73@k$AdMV^'M-3;*8<m6<nK0ORNt;WPpfQ=DA6,MjD`:_<Uub.aEg1?Q,ZA:!nOR["fc:)[*6<?'P12*#csmV"UL?\UthD('c*'D`f;NC:cU&#KY_T8eVAL's8*/E?k(15$La;3jsXEcU]ECqZQpEL]6#4^BKVl]PUhLeQJjK.P,2=*)DcGuj=5J/^MoKY36NZCW1taaboTV\@nt\:fCTjKY5<<d)FX^??&8*8j!or*NE7M8b0Vq1P)"kGUGo#<&E/kuaK_fs'QMFZC*<Iu+;lO:e31+LN)*K?p/\jcI*SDt@<#.%bY=LqNlUIPT3#Sd2=f4rlI+N>X+hL_i[4Qgn!'crfOJ"_rDIYn2-9g@`da'pDd@$f*D_a^C3?YjlLH-Gcj?d$7MRWb`@-dZ7mi<<C,X[iTV&Lk0'_oDhZuo=X;+PP@1l7#J?o=9rT.2:(]`S&EB-<R)c5KuPKX!W#(9EYS?\T_AGf2o!*kkX4Mm]lOY7L8P5=os<RpMAiP&=B#$jN;7I@Q7W^`Ug$FH'f*Jo&VF=g!Q-Q>?r"0-VCK(/[aMUf;0,fZt;<^N>TC.\]N$161Z;U&6%U!fpTVQI!(Mq)EaJT&*&cB6f;%80q$nK"\)HMe%J[GY"7%"s9>+_gH`FiU.e5f-clQ-HOZrr*p`.kd-t*Ehp&rM@,k'jZb(!\h.r$96(tZPeT5m'#;PLhJidNc`qAr[Q_ra+=DE't%T5MV<^ALU;)?)Ae\"pN@@-286!9#uteYK^"6-r`\0LX/:73`g@^Tqs/GVA'`3sB$b()3<I1-&4E6A9.-/h6ej<$on,3%dnACIW>4ek>0hQ?>.oYIdh^PuQ09ZIplacK4(iI+#'J[>VPfIqq/X."XPIrloFS=UXYU7?VDcU.87Niah&YRNaZhYAD0.a's$cJr=T0ZGbZJ3#&4tqN:S"*>`([Wt3on8&hJC'qBlqhNXl]aGlHjhC(mp\,#4L;b+=Q<mf@15;].(neoj<1eOE?.m`W9P#VGjnTP(a+K)3=NDKDB[k^==cA$;=<3:i0d`H,233@qJ1N:'5#Ef*,0J7Qs]VC4N(SbqSK#N3c^p8M_O_3G:(JKP#66r3t.4J[Iotjp@)=]U1'/mc+&f1REY#_-kV8NuWAHZ(f^qB,8>JeOR-h'WDbaX`=!dh*&5[%K*rt[NUThS4-JM7=*Cc=FA.9/L.pu4<GgVke!GJ#0,*hZQ*jd^>.)?I%RA)pPbFhZ:LmlQ([+*i."$*r,h~>endstream |
733 | endobj |
734 | % 'R159': class PDFStream |
735 | 159 0 obj |
736 | % page stream |
737 | << /Filter [ /ASCII85Decode |
738 | /FlateDecode ] |
739 | - /Length 1852 >> |
740 | + /Length 1576 >> |
741 | stream |
742 | -Gau0DD/\/e&H3^ns5C[#Es>,H-!?Q2/T"[a6eZ+R\"T2`JX0u;S)-V4l.fX\4%as;>"^an'khHN\iW*'Gk]uJE:FIFJ&aRbb:25Z@DG!m/q=+#!7Q:>4h\N'p[WpDCW@$G7jH'6-5!t5H1Ae)&rTZLg_c/9E5aI`>e<t3QPX=SrLP*_'>ZLq%qCF:5t'W!@A&:Q<<3Cb!k8GOPUo^o"U*G69Vm<*i!Or1#`Y;inF#,Wh;-='I'-lR2b\_,1&h"pbeSA6A&ECI;3(@F"FLie!3,DjY<HAcZ[inF@WqG(E"jjF_@s_R38lgD8q[d+Q\>FM!*tF`/u2#VN221:K<np>d,7Mu)H@04%G:"S9!s\&Yi(qHTAA2Ni>oGPM9_,k`jNA;X'ZY2b/,_,@2VPpo+OpS:lp,V-l69W!cj0SW$i#u;PCmaY'kIQZEa-4>g(9WBB"n.eJ"Y(fEoiY;#)N(P)2G+OB]7Lb;')s6B/odQ*l2N4l?qu?k[=&7h<WWGfS]t:9="2B]P/6-Zh;,T$W3t1[f9*bWh]FrK+O[c]rbALW='@*DbN:nDN53a%J6(A*O,5,Epp(Z5A18KEFG[r:EJ&LEK:W*0)oIO!f0:aPQMnoE6_(:<Mh7!%Ta^/M8n^.uTC%5'6rant.(0(M"eT?Wqu7T^fI#$1%`9T:@]Ga(9f.agB>B&N+RaTl`76LDN'?H<.[L2h5<7d%,-cmTHs5LIO;o-5%e8><I"Ko.m;)"$lR$;@]2]T4>R(UYmUM?(ih%H1`l-JnXcb"Ddh_lhUcpG"u)caaoaH/7?cN5A;V\UG(j1!?2*0\F/=+7c?/M9+)A'48eB^-",meroi7^Ts'a/i>B3@jDH%fG%BU:/bWIhYS2+o2]PPXrf`6:?O-Q,P7uG\+"5uaDX&.$mG7.2`?1^K57aP4*lk!1HJ?+jWOZa&DUqEn2H\q%k=K,e&286lD)1ebs49.[(0SiQ+ZPM2d?aR&'8g`NGdkBBcur<XO9R(3h!aiN2CM0gb.,_c@B<(9dHn`f4/(5KiaKtYSQ3GCm'@AJD"#3U;jnhsp6bKsTY/D-)&2,2pAi!eK(Fo>[bo,TnS+IF9EQJ-_E80MjB4(5&P6M,ke2(E*A6V`3&tJGIt\oNL2ECER#kG,Nl.W>ZO#2Cr!l2#cSQ9nc'ZGlf*#P%)bS-s09WE9oGTndCi/K4h`B[uAs9q'0,D'FcI8#U1b:@:(\"7PKXM<5A@b/larg/&i\*-:g"=XQokL3?bt`P&!@?H!%AE;ef.e>Ccm[5;<**TR8Rq(''Y"@6VCP3&i$M[%9$+,m#!R:?QuqS^fVSu1&9[-)PI<C+@L?->mK\s@4tbQRe@:]9/2fXA!R]>.'8@chR7N=l0s[b$>&OT-o`QA'\VqZ-ccku`Z_O)c)r&ppH,^s?W%b-gZD,Er^c!1LR!+%hg9%M9<p2O47:ehd$Q`f1"RFkEQCYP2/.T03-(r+4\6X25hqI#SqF!Y'!Q8eEipGe"4!$hrMjW<Uh5NB7';C*7qN)/#X@=#m[=a]@AXtGt.U07!)u?q!f%f%AGC,qJ656erQRKhc0*+.HE]CEGX;^JWh2eFs0'[g:'^l!E5qTK_dt+CfTZPF'L<8!k=-Ck1ilVgRhU46Yp]itj7'-GO<@nm$'o?c%4St"$XqU2j]1iokmQm*G#<j&'/O]\inB@-9O3":]`L&4rktK^"8M`AQRK`&nfa$ZnJ[;g,2t,PnZ%r.KbtWH5Z/qrWAa]@6DBI`P#F[g_<:7AqGMWh6n!f!*E8QDU2DRI?1-*C:k7s'X60dhU.2pO7K$:KPoGqjd/[`?)n8Zd@(GR9GWQP[NQNn^UnFbEF/hd2/2p<[b~>endstream |
743 | +GauHL?#T!t&:I(.5KlbH;M!m$2gM?DDePqIiASB2LT'iRZ.HpR5H)9VMH9JdGBRi-8Vh47.$5-ua#h=sZSQ6[J;QQZrcTN:cZ?V1,=")Qq`kS/JGDA+4R`%Dme96aCHGpnVP6+]#OgpOIX"DOT;3(\S9YW%V>Zu86do&MLC98n%`O!EKF(=k`;5MhHk-=pQcFKp(R`PaK8bN`d#[t]lK/H9J&2%Q$0(]g3%REuN)O`[(6!+Lb+[IC;"FK,$sjcEBAcY4@$:ca$MZE038p),8\Dqtq"O%;]0JS!r<+$`_(+BIAMgLna:Jqk*"A:X"_9l_`;CKdQH)ulVXK\hct\4B&J9,q9\F33^qF3nQq$EbFS`\6n,68!/?\h8RW3;=O[thF'GCGu%?hF=8%8Ag,>U%^]R,P$*S%qsq(V(4@D4Ji,&VXh5E?Sr`r_:%7WT:06L&tMeD$p,U+8tDjmGCHd;@&$-B3)[,4ugLKk>rSga#44iGhoV]7K5=H8<$[HE)[3NlMsji/b3K(*hUO4/P]l:pg7R.:Z=pcXV>[0kQD@01CkZ"kc&6lR.A8Ot=N;,cgG?p!@3YoqNXA&GV?hR2bo%mR>5pO?n]\jG+o>]ZNj7DAXo/A8qcE=m15OB&__5ii;taFE.EDKf%g'])BmGMH\Jl94FH!GaX5jX*gY@m-A3oF1/qPX#VDqe0@o6"gf$l/e-L)>cJf3L1?c\83^]7H"C\.GRS:PD+0CJ-Q_a[)_cn]Z:SJa)))0sQt%`ABK\hSSA$3d\Vf+aa>!#1"l1`)GHrA:U=B?#[+"^'NepQ[FL:*rZTEH@[X:ou8#:"SgEEq@6O4C'^onI0h6H&Q(jD6kX@0[N;ijhjTM&uhR#Z(WlrG:1R)>)R%8F<pRl#WH8<E9'(T>oi=<n=S.0phYL:\I1?kZD'F3]C)-8?8]?6g>@.*"22lVNY[lnF\]P*47<[3l+S8(L4d2En/XpmO8lRNiF3X5kMKG?u+s>QGE%8&@:Q]75M4DMa)u(?Gm?606Z%JWWT!RY@?eD*M#`VlIZo#<5Sl%$hV!$Z@?8k`+5E5__PDW`fd$F3G$5.q?F=<V4h[Me9$QD#Tf/g7c"$W#gTE_="b*U1+dk7C-p,_s$#_S*A"poH0g<s&kt$lekgu;"8,3;g3VRHaf+O[6stq.7)I+fpZR8oTkj+I#,Dk3MFE"Mm"Q"4?7unhlO`da8iEdJOM=EPs,=>;&[FeicJkND<NQa]:kajROBJ*LQ;8:c5)$l!AAFO&^KIc,o(5SnR6V)[>fS'A1kTsG(l?+4T&u=0^rBq.&I(m*=$_LZ__O)!s!A(F/=9@a1qC!L+Y"ZCk[IdAai=0%24AM(V#(1ccU*Q;pPu@D!O2/h;Uhn6!:)M$-H&-:<ZG&NsI5aMXqCJT92\5l@CI:Tl5=UYnuP>5(dbScF',d6`W=rf7Bmkls8A:]N8Ln)VF)ee0,ZNAEtN&pN-_6*e&[D@Q7t5/?2?EmPZmh)-`t\\4.t"#jG4nK-b&tjdNb6FEOfYS7aGYkm0sW=#=-a<;\D&fg.78+c9jQ""BZ"!E[3RlHM[`^\8h5\O'p~>endstream |
744 | endobj |
745 | % 'R160': class PDFStream |
746 | 160 0 obj |
747 | % page stream |
748 | << /Filter [ /ASCII85Decode |
749 | /FlateDecode ] |
750 | - /Length 1611 >> |
751 | + /Length 1810 >> |
752 | stream |
753 | -Gau0DlYkcP&H@d/s"If[P)?buJ2(bZ;GrZVgEW%38>f!LBX%fp`Xcs29eNI:^NXi1KNECI+Tb>"4#?c'h`TI"f_"?ocS,C0m(fgV%QH(_#2n"4)K`^/<Ms*u?7n6:fgYsaf=0P.):4gml).a:K1mOa.?&/4@-*Pg7)cB8,)*@G:&qHO[!_'_A>B6W[LlVm2GjMR3e\i;necr>C6T#9.(LV"TLK1oPHeSSB.9bfEet@6U`V>dh6uV<`7)b&-d_Z*3kp2o=)=olqe`]I6kO-JYnXp7ClI@d#r3S4;/2X7BFE2QYpeo1WcTEUI]it_Os?)o;=#qbDJ'P'n;nB"VCK\eru(gU#u@86LJOjmOhlSJ3*TQ[H]HbMf>0Daa6N!P7DCKp;M?gM;I&m([dY&$_A1j>m,Jj[W%IWJ4o1gR#l5IE#oT')(e#8t\[mq"nj[jr(oSfmO$"GcLt5V/(O/\\,J_0,>Tbt7En'Dl(;Cc#i<Uc(E7U)T$8TiF"Yr-W7J&OBPc.dP\Z3F!=fOsRl2d;t,=^OeX^uc;3mG^GZL4a7C]6[+0HV36KI@P03*od<=B?%Y)oFHL?Ah>4k[-H'lTA3N\q+7PBWZg(S4PC8JWqGdk;TMSAH49@#g4A@8YjBU-g/6&DYeg@+_NMqajN\)#&oo;oF.>q@QG1P\bscW3]i@%4#ELFd&F'E\\=ZX&Is=hWEYK%%h,XQpZ-.k'=F]Uq1h#iq/\2i$49opAi7%A_X'3[1/])iSk]iAWc3d2gnn%PJq[sOH\#Z1muEOPmfK>Vq"P<AIQr2_Wa)?!.uXiJ!CG:.6\K8@"QDhnH!/hg<o#pO($rkm,.ApL?K6"imR0J[,B<f59;b/YkL=R]HfDVlo629!MN4ng*-U@]QL9E9L4R,p[:DrG[0M<pETP;!/h5!+Fqm%uSi]q;'j=htoU=Xq>i$R'U3l<`R+DTRkO20a(;Kr_]]$in@erYK"G(7/d[>j8!4NJT^@qYNH4J[=[A#fMWs.rpX#GQ@g>YT+,!?)@?IE*F`m"$<TPb^mo^oC9?;C)TC\JMk4bRW1CY(bI2Tnah0bI@?*TX<D^G_$VE4CII'Reh!4A>Q,@<#%0,_=EomIW4_Eo#;5(5I0?,U%XXh6cL6UmjE0h%Q7:Ql'^bhQMD/TeMJ?%a8=m+/@W&oD[3hKPmV'#7(X):=UmA'CFFqJ%R"$KY(+WT!NZ:0L_[$[1aGPLgg!oA@e%j#08@>'<4A&IA@M*!4sW5h6;qWB6OD4i'Q^Mcp:oVRR`=>#B@_m[6Ifa`Y#!4DJY8ppAL4.K4H?0!],Ner'Q#Am#AdpX!-Vd#jlufZ09Q.B-f]:VHH3WH0P.niSh`q*)AeM$P=K/=amWOCB5ZS"_nt[g+P//?r5GWX-$TtBs/CW$BUQ-,$JG>Wp#Y[;5jB]P%a`(_;>#o\ukE:KEt(AT;uXGSC(ek60m)"7IG!E7B<i)MsY=:&$e<:D"AdmSNXtrLh">V7^H5C#">k=LLWB7Ipmc8\G[*/E.BchKM.)mL"/&iAi9Ou^T9d>*AQka1%4FLjd:a_Cq-8d/M'[r14d%&=`2,jRf4spq^#H!*BegXT@7Sqat7<Q#?E_ljjO1W9JcP~>endstream |
754 | +Gau0DCN%rc'`B'qs5ADEQ4Ap%amX$dO=oqIY"c7R=>:qK5tTZ`(VN:9:;(#L6csRgf6-F'9oqcJann'ln=E8XjPr=@^Z1jJ`JAtj'i5IiBL5#*ld4iI]c<T7r,[/s/CsM"eF*0>3#E.0kOdiI)o\"=jh_j0DM/Y#-b`fbdaJjH>j_t(eFC.WO%)."oP%]]%(q.6E@.uMb`mrKa/h-e,#(MKFF.V1cLc$XY\m;^k*\o@L:!>i,/l&MMs;1>rhe'RFJ_&NMZg5hM7qYV<)0BF9ne"M8K1[MVH0c]U(LYlZB2W<Uc&`!N5F"b:8q]2Z8lWe=.,RLeg(]Rn/pgu(h$rXO=1aA21*OFcGo1eYUYa\]LCEfQL)c*QPpI#MA$U@)bFLAMV.?nRF4c>2="6Z&uI+?)X/)Ae7GaRM#qW=U[oYCr4iiaP[pD=YT5P<XmL%C41!KoJkW+@ZA<(',9t^]KjujG=hrT4ebR@F/I+0`(TNp[R,MYF*Q94\lce=<Hk]M52+SODU'DWh1_pFPK%^cdfc/unZmZdfr[)N4U(k^1@P25"?Gp!;==Ui1><sc)D-qP&H7qEX7[8*W?2;)qCY"0@[U!Irr-7I3D0U(/"4(=k,(*[_'Mk:;QK)@a*$&[n[&nFIk7K6*IlTgoe>>56V/8AGd!ER[ek@K+CK:aQ/9>.8PUu7dSq1'2W2c/?`>(d!,0I>"jElLgF-fH"k\a?[n`Zb,C<?^.&t(2,n%kta7EgdO[\dM"Pap"*9K(,A3TXgMB./"a2\k9sJGV$;'/c:]$W_lf2Q9C2;'P4:hs5li`SE1O62#L*H%klS@;X#!,<"q@)imFNN5mM4kW0WC(K'HL_n?Msn&bdr04#3,@FC9sIV3a'\ru;@Z_R"XI_OI[)*R$Yj:h,jlf%@hMA4B?'PHV[gJKL\hQY."Tf#0R6Nm&Nb?,BF4;BY3ehsBJB0pMadbRSb(;R`@Za`Bkg034`p>4`<#Ru='H.=#r'm_n^mp?"!.c[M'T4M"1B<SBTA8I*llL3T/fj"h?/GspOVDE?jIt?WeWDS"DC1SD]cg,=mD7K!(Q2GG+=Jq/o0e4JF7sC\56Z3IdmQf[NS6j`QOM;s+#-A?.O.aJ'Jl!V`*m_$n2N<jbH/ine"p`NEJs388Fsd0mi`HPg;PL\M(IT?;:?M2<@P3rSX]#/gKikdq?KYFqoZ7H8(!>sA:tk+HSe-q1/JKk-3*tq*B,CGt#][)/%AMZ_7BnGr8`JN/DHV,\agI(Z;k2;S0?)2LNM?t`NQqIl0Gk4i*$][A)jDD]-QGGbSdlj]Qo(n%]+>ST!brIT;fINnLq.7Nqnq^nNZYVL`<DMg&=$R@4EV`7`ASro?jECeU_93,KDgpSHH5XO&0Ml[3"QQn>">pk;)jjY.'=]7Ce)4hi<-7<45iM!IdX[Y<:f^SR;VbS)>'!Qo&3\.l?OL]IX!u)+%9uT*"jkB.97Zi>Uosh?!FnEcoL"oJ1VW1^HnJu_0-8:3XiBg+$O8>h>s(/`LUB_Fp\4Ug-%QY=h"D?qR4;c:*0`#eS.6Zmp6!*LQMIP_nihHc2%TR9]X'jK3jH5K4$eKLYqo7oGN,>C;/V%F.(5Q:@t4OQkQ<][C+a3m[IuNnnd;C2o+0(grI][;bZoi58[Qfom9IB.Mp5(M&U:*0Znh;d0>!dZ]B)$aiBjBIRsFrYTZ-aSUKE'"6Wl#dH/VgqS3ca@>ZuXI;O0Um!-ES\$p'=3?+BB]M(e<=K4c:LMQ^sOeVBY&>,K(@G;1ecI1^[N';.S$3u.6lN,=La*G5#(]@+=Pr,&'r!2;Zldl~>endstream |
755 | endobj |
756 | % 'R161': class PDFStream |
757 | 161 0 obj |
758 | % page stream |
759 | << /Filter [ /ASCII85Decode |
760 | /FlateDecode ] |
761 | - /Length 1637 >> |
762 | + /Length 1522 >> |
763 | stream |
764 | -Gaua@?#S^l'Sc(=p^cPb&uiZkCh&s";JC>(dT/r*DTG7GH82i5if3>6a!MD#qVQX3C]]:.2AWYf8q;k5?66lE@g2uqrXebWNr_F=Tg'kh%%,=k=IKEB/,48@DZ+7X828\8_6Ih$E/-&Pdr,+@&T#`]9XBZ]'.R\-V5p;!d;IorS*N`eL7/S#(mf3WPq0A5.i7FI4W9=Z!J"MF(SI?2lm\_i)*B_K(sk,c1hIOXr=7;Ko>,IS*;n@f.JNQ=`?s!6@hn;PoguiLID%$D!]Gg]P.TIO-Y:\QG4D82"0j_q!O[oC=3q)n<[*(p8HDO/bs[pM+ABT6EQf*+].NZ'JEuP#B[jf30:/RMbrm#?cR_Aml[#@Cf?s6jJ<\Rl_F9j.RSiSjY6naI@iQQpQ,LQ3MUCNK8u`3@EZ<]s]jM7N`^Cdn%)P$#9BM$$&7\Ql$<)aWS9iS:S?$1gM%tYGLWhB$MjHu*djUK"la)N?:LKW(E*br]Cdcl^kLVi<*bqu+_p]PX<Dl*E.6`ORJO(h%8LoNe`YM6uiV#rCY"Z=Mi3eC<1h'rP<BWYNGBeKZI@h(#@R>_K6S.H'Qt6djJ;hAQNO.at!D?YuLS+ZhX[S27CNQZ<,GL?$>i/#'_=2\:=52rS2P`j%EZs#lGX'e)n^6s4:=nQ8lAbXo\i_C.4oYP\nhG8q#N=bb7*(QEKGr=t2i>r$bj,>RI'$X()4[C!:f;599;r4kf2(9RCk0W>C!1'V`EKMYq6N[YQ9.&n[SGm/;>=2nW!b%D4-mYh:mOIDRBV+2?p`"n`FU79FcEVJ.+^1eck0>G&N!Y'!5\Mo<oPfmPP,(8o$3*S8n@bOnjrAnMo%="!9F'_ll9?3IuO'G_hK\(kmH0sSP(IA7[u7OXRK/jn?[6.Pcg0n%am'$)0ckIQbAZ#7R+uh"4@?.eFc^*VX'hi?7D'IdZ2)B\<r;%b2SKJX*3]LB2l$Bd%K3sK4:`Qlk[RS$A[0)Dlq$ABB_WkEW<@mIA9*;=pN$k9;HHMCh'peMVb"TQD>YgqeV[sgYH)*Re'6YJ("_K3bs,]E=f'##\9uIZop1[s/HNd,-.6j"\mGq[O&qt5nU8PGIt?MWh!*(;T!3FESpNDXHRT/\A*o@:Th:)Jn>`.]0WR$jH8u3]N=b=ZdJ:#WSYJ,ThWm-HVSlke61(_f!Q"gN3f$)jnjK(MiV>rKkZ&hcnJ6(SnPK?E[)3M^81KpqcmIWM<etHrcj.6PX:0NQg]uTX<mOUA4o?a0!^:Z=ql;:175Dd([GW:C;p2).'DdP4BNWZX@"FsEPh]AhCJVWq2]a+:8&%?lB,M4\Z<;_"Dc]<&OkJR#<'CZG.R*.!TEQhQ*IO!%W:@HKVmui(I8l4F0b[@DUVLJ=ind)O,pM$E$FEN$c3CO6gNZ'*jAo"jb*iIl</<5m*b*8oR@0"Dg5/_QA;X8]OUuf#[L(Ar^[p'#]in-d<O5>jLFrTq:X"Bp)'[t"[g0VI@GG$R9T,c)K2?Khh7@^FS/@aZ2#GO8!RS71G$gs:`SngA<sg$*djK*JT(,3$FT84UReG;_pX;5^tt\n0@N4uns7dTUl2oXP'lBNYWdemJ^Ne^R>U__\D:B4E/A2]l8V>:1;OiJX8(sI6bE"Ef$C&`~>endstream |
765 | +Gau`T?#S^l'R`L25MVStU]Q>A\+<F1>8jJ@fVTV]+Y%mWm")\:#<O!8U=K8;hAI7@J_7uZ.Zko=m`[gX553ni-8<G(UAk$E^lL:]]dH'eQn<lVRL-;*pj(HZIHgJs&aQsb=I(jg4Vu`BHf$u,[S1s?Kj__Ajg<naX&-OqpMe%+3l;0HKis?P*,oHj=+5UK!G>lZP76RU5=uS)b\nVuR=Kg*+^IF)-K=+kAq.Y`HNiR+'0PDZdkAZrhSZUYi;gRn[KQ;86_eH]aB5ehJtRM1`;Jc#)Mr?Gk4P+0&!@WYeDJ1q&QFEt!h%tTZC9ZM_]WI6^,dF\OCr#h\%aMmns8@\e1kEZQKE@j'a:YK=DX=/0&Cnle0`YB68$Hk<[sF&[??F1B_GSDo(<QJY7.:(8;LZXa\XN2?5Or%/ta5^_8"=Bh^&'GkQfHX#Zm^M/Yi4t5_[8Zo5)3AD4gqEmm+3AmN?%dP2tgBaTrV*,NrUQg"-dd#K;E(NS.1mo\2[GdpMWXq.hShrrn8O"ljr<*&!\Dn.4&jjsh^APH-[@2]4S(08ApKk&87GjaoGeo4T"h0&XBW/@18W<h"JcC0&cKiEa3oF1idjH%U`'!C)R+?MOFti4FX+oQE"#I=A>RVmi$gN@F]147S&D)_sic%&Oe6RA7&Mcgb#QR-D#G>.'<Cf`S#8B8"cn/CPcEAECMR%g.Q_+,:/TE!b3dq;F*I>#ZJq)+4a*I2G;rX6Pps_f3$q*%PaVka(E7jO`F\Z"mN<#Ki6:kgHGGRel]2QQ=a73E5_N1/%gT@ADB/O[6"0ktVIeMc-0:ls=PZO<L?*hFQO:./h:J%g.QnTXJ;V?IAgAM?B6^2Vi=S@g3?-!TmLB)Qgqki2j]',&4ZGS'/llN@p1hM/:7hkg_q7[f_DhE-tKZUEL_FED:e0_?U6S<4\C/*CAL=KMZ.sr(?M84^/>G$"'aQC:G9D"U4QD\s.r&kscKW^GL]l0,r'CMAr/%X!_TIFjR6(\OdM7_fc:*%'(C=?k#uEB3qoQqe:Wk8JK9X,Kb"#coP.dE*Ac(C.[A@=mZO3q2s4U@C80S^?5Y`jj&_F8EBOqq8i-LMo&/$!-8*A3f!\+O)a#.cu:;:?(ii0=B[:1h<a-s=m2h^q<>J=9i]:s#C*!8)([2uQek?'d5tK\5__P:n[KJK+W\WSA'uJ?kc9^[in;p'rg7'GTsr=G)M?e]mP^cu^a9PL@:)N[h86YPduek=5NHe`ZT>kO_Q>_iio@aNGC5X_>>'k1@X_@b+R8i?/[Fs>QFH#S&9ka-6M&#/?Z@%gl3IH#Z]<0u#5G5[YUF+KdYFK0>0X=*O;:3n$,,HRDQ$<.Fd.2ei&^T3r,gFgU\7"k[=!dP-LXr'@ocCW%3T0RFC!ce><b[<khp^)_\LCL@r%WUnN[o[iUI`Z,Yns[]C4_0#HLSTe3)KkO8%RIO,,Eq-sT$G=feV&8lnNP,^JOH+iRi_D:9N5;t4,r:Ihs;ls@+P+*!Ytb9QE\VX`fCU#5_XieKH5~>endstream |
766 | endobj |
767 | % 'R162': class PDFStream |
768 | 162 0 obj |
769 | % page stream |
770 | << /Filter [ /ASCII85Decode |
771 | /FlateDecode ] |
772 | - /Length 1622 >> |
773 | + /Length 1650 >> |
774 | stream |
775 | -Gb!SmgMZ%0&:G(NJ!cQH:1:YuXIIu,+\cFIZ+7BV>4fceZp`Yb,Z5p;47:^E87)ug)egl`5dq&-985DGSiJnh6TNN4J&d!b3P]Pfr%rB.E?Up*j)mJ?DrE$,4o+F9`7[6l7M,EFV]5:R*-6Gs_ar4TO?(^WVB[;,kt0Jj.VGY,BQ-&YM4bMJSDt#$6tV%lgttHaL*n1A$4&%3)4uJAk),?"*9'1+rmA=Hq^X=i?7.e`M_;MJa'H=9n%4_1.8ZVW<M?T%?P#)4-2+saFe],Dr^oW@La]YF12VYGo&nbcHbjFH=L:9/p$)p_D6E=qb,25ac'9]cQ^=3M9f0iD$=a8o51B*2Y<+rJ\IuEFh`k`J/rLo`(qpH&9Q8>[oUJ5tOtrq?_h=J_c7#E>$V@D4o>C;0la98mRMQk<0Q*``]85dh_=`,p%.4,i,%:S3_[(6d'rC0q>`gSTTV?--PEKMA\2?J=<;Y3ghCG\&F?8K,1`(0iDD>I^H?;=F?O#-V)h<a\m0-i+/kH[ZBHt.q(ee(%iJa/Ya\#JS;Nd:OHu>W@qZS7qV;tk5BaT[H0'^%p`cJ#-))H=lRmTX]1kS3c"m$/JU1'Xf1n\;#6mrd]1:M!Q-PCoAlI!gIp^3<te_(%C3/*VGd4r3G)jD'n<froT(EaJmg)8HX1W"AUQp+Hi<s2,6D8Q):fe(:(?4iaP2a\71Qe&=8Wm%iMVRGr842JO+qgi*!-6$D)E/F>!<b-'H?f$8[Cd3I9?Jf\>of%Qj$L8#sS>D=[Q7`\TimF*;0YG*0^V%0EC&;F$Y!B8,Xm2=V:_S=3EXnGkm`s4hUQ;DHOeS]f]BDDFk^B8-2N4TYR8Wg9C4i4r0Z@-b\mX[0$b$o.+R$>UK6Q,1@[HP?/HXMBh"\P9%9,1QW7]AZ;bWhU\>@G_*=BL<n?)RG$3\ms`\^$reB!sg)`8GT%2R*`dHa*+95^Lm=cGt(i]:s?e\]]CO'+S%,t5$+*mW#&#]`T@VFIOkIP2*?-f[9>5B*+QPD\J&7'],i3Te*9)dr.R<8d3F6a&d%>6tB]\c.?F44/OD)112rOd334+1Bn5(!.@BgaG4\4>qo1%3'HdDa7ar&-Kt:0UWW'.eC)?ZZTCF8*uabG-"7a<gr=e"2r\iSEL81R9l5ukh:^42D"#"T>R,o=4[t_^%Ar^9'93/Pm?+2Wf]RoQ=Q0+)Pim8>mg!]n#KPr92QfQbiV^f!9C:!7K-\1@Z,E,&N=N!("H+r(;:S4'#K*sfA4THVauLrOCPQA$7lQ>Ki>(RN"L_.Rmq&FmjbUs?&+tda`qrBkk#f>e6;"3Ot=X*7C-\KBq;1g-H0lma;`b<)C3m;(m^=!CDbbj(5-7KYZ/q-f,lD!T="a`p^L-g45eS'FQQT6CHlUi("cDKn(ns2gnPo1227j[+T'_fL"[d6/Qlh&dC6)6%$!`6p$B<^mIo[a)]ca7>^aV/oC%6je=seS<)i(:I1+E>8D(BOme.[:M]"ht_L?u/=e)G`M&&GC>;CcQd1BOG.@'%kkG@DZUHR5poE.>1[iql5N(c8MRt)t9"\BcWCsNAocb)h&3V^Zu2mel/^Lcn[D_;iQo,o`B1cDbK7VEArmpD!-e!#7]reP^p~>endstream |
776 | +Gb!Sm?#SIU'R^LRs);>".YFEeZG*t'%quYd`mVe@SN"7/&oFn986)CSGe\]oPb#b;,$0L#ZuZ4O;U!>%F"T*VBcAW$Zh8[8"+6KPqlpU="1&0`Y3Egi$8,u37ph=<m*0a,&-C06X`+t`S)^8NVBoN(1+,uJA4fI7Ht;KFQHS;5%(L.5oYCrEQ=CF+KW9Z$h-Y_1;H]>+&gAcd$6itS8ND<+E1%4*nN&]3=Vhr=J_:j,rMgJ.r;r4!R8-g[efuM[(DG^WTaO[n,,:mc,!,P%]mn'Yh;1_#r<'r5HpJEc!1YZuA1J!;P1?qVs!K?um!US6buTr*aF=9eoc#B8$A]_$mba'me6h1f_H)I";9FjAc&Bol,$@_`Qg6timd^8.fsEGROjl&&H3kn)9trX#PZDcrj1F'ef\g4jhpM)sDYGUCqn<qk7:M%U.2Nk,5U,2KVd'i<""IG/^5Ph@@<bQA=k-9'aGX6MS&hNY>#%Xhh2=$+J@OdgDbIZN'uJbLdkKuL_qonka6>e8^5&VQWIqZ(Tae$N.7l_hX21++;eN>R5=nVR"fH\r["@^;h`lhOaQ];dXV<Ze9eXMKTpZSc0/T!HFZu^*b*NeU:?1(mBja-dhPmiB3\LcN:QO,,]548HZ@N(O<*,=Fm3m\oe-ZR'S2kHAWMDU'Hpt'VM"Tq=$UZR9]<@ORXL#.5/OlAlGibnf:tHdX_A;I^c+,72QY2frbUA@X/\r-0Hn!NCf@haIF$Okp?,!Y>a;E(o1grZWO=>UJ%PXeQekPGWU_TF>>&P_QKns@u0/CHW)2\8?FR:Q\M^rJ%if8"2+rADr9Tcf,;-,*[3QX#j'gkoef.9Q=,<BPJ40IVXQ)rGF1#X3g0$8<I0TPH((;KmG\AR5)&lDp+[f7X+M.9^[<HsW[=Kmb$4/-WUCZYT>P,sr<\Yf)Vn$"O`)qo!-aOR'NO$fG6%"5>ePHna,)-tVuf6+g%S7,>)bS)N:=>>m]//<;tl=uHE&tcMq:A%3R)Xb`$g`^TfRfH;10`"mfYcOe3(!1/G!3r8pm\.0n'#k0ljLYcj'o=D?D*n2FiYH&rc\Y'=g,+cq?L#$HXm/S\mAW5g%M,hjhjN1WquSn3,k`(1G`?4PXKCUUqk#.g]B$ODp:1nt7mA/h<[g^KSLuk1Zg$jn4Lr&955TS]V<sJlnHpc>O03eD.dYXAEdQXpm!.F/-m$pN;<n+V>htX13NJBOWs56F@$9/J4<3c1IY8_pK,(NG*CNLAB(SAYL/dX==R\e.D?:)E]-WXl=!muM^/VA:;K9J1U=.6K`OHqOHdG+4c:FJ*Z]g0XF:>98c,7@h@=(//+"7P;>R$E_fe\$!lCNt5&)Rl1Sr[B]\7C;`E*WF#rA<0C!=o#:B^cLNZE5rk-(!LDI+S?0.\lD+4]fXls1,7kgEO1h$N#@+_>^DNl&C/MpNrM0+Oj#@R-K'lQJ"E+KR2,&&]F!?@.3;N.6>_n@XqQoa,*@FT#ntbo?@llIEM&+kc+T$4T?^"rEI)LCeOe/i,!llG_RG^+;g*,=cI*R:\k(eMTk$q3^M)uTV\sVcU0p4XnHWWht)&%ll8>Z<R2$chk?6_*eZI8gJ+^g4D/=gJW@*_QGMaT^)V82mAj.m=8+JhLu>l%$lY.erWT#lLt;~>endstream |
777 | endobj |
778 | % 'R163': class PDFStream |
779 | 163 0 obj |
780 | % page stream |
781 | << /Filter [ /ASCII85Decode |
782 | /FlateDecode ] |
783 | - /Length 2297 >> |
784 | + /Length 2152 >> |
785 | stream |
786 | -Gb!#]D,]1[')kW@s.MAO=*CaZ#0F&f`<VQfKN^pZi)FUgI$GUC@s\t_UWeZ>b-0^#7t-)Dprl(\-3Z-!;>8Pco^pTQ!nt]P^jhDCU)-2NHQ>oodVqN=]@j(?)4_1[G<YK`"S9=?54pt-k'm?'O*>bkr\6*IU.m,-POUmTZ+I@2\!lRL%LauHCNZW0VdToC4mKA+56$""ohdm$'^M\gA`eYE3[<sLb,1rscY<.Z%KGZIr;$k]p3ngQ(<6=d7HZQ9_Ojq*.$l8\ecNeujm8p`AMP,d5Q!7!Yg[Fg%1!:6S))+4`5l1#=Y\<+ibFRhQH#k*T"[73V_bl?V!^OHg&M)9eEmLq-gsNfN1;B`Ufjpta+%Vgg)s51WO.eWDKktWIKFCJ_=i/eOW,h,EKU`rpW>*Z\e[lB3GhsUm?@AQW!S+DZhId@?7*Nm\o]-SKo&U2aHS\pH)2_a8!n<!.JpgGP;qbj2CY2Ln-LR`A`RaBfp!kT?LR>ZK0/K"$HD6jJ[a93csm<-YPV-up:()lFVJ"r>U%247#d[go!Qc5RZukRm_'+n0@Wo@(Q#d,iu992?F\.?chHTj2e8KZ%L)%P%67-,'1r""d\(\<-:/LqOqd._rejR1C^H-9?m3ok&RNkAD:3-QMDu314?Ol:VO!5XR-TqcZr&t>SbrODYu6s&2DI6uI!0i.S:7?o9N&"H<?kqLr]j"W'(Z3V>Bj3e4tb*0$a_oQ26(GAdmO9'$ZhVK/-#+%`JXntCQs]siFD*Pc4^B1.\d@*_S2/80U[m#i`>#3+:Y+ojGH'^[R&*\`02\_4B(rmRG@K8N9[f$=l*g*f,D$RTPfB3I;R?57mV[/hQ;Qq:,s@X$sO2+ZrR^6Mjj:qV3;7f#NTCd,XCH_,WDI)lbHmELPJfJ_Dmh"ndDO1nbeS&`Z1R7.Vr<M5iD.U;6M.G<@>eY(.\br;aV57l(FiO_9C[[F-gT2Kp?Y1Aho;*MZ*r/#M7aU%m%Bo/5fK!\i4p!LehiL48A&il&=?`E;S)Vpsm"tp)^JeXLb,g_=^;I2\EBZ2gB$]*C73Ke36&:Xb6Tt2Mt1`PIN%6>e&H6$<mDZp,W!Q'Qi%Z(k5-$$u2e;q6iC^c,0/)oET-^n))%!)-=1$D.H8:\`M[q>W>?\5a*D`2';$mB%8kl=q":*W.Kcs>[,=8*'8S$[OagH>XQ.aWhTdTbZ$EoWQ_.M3,QOj,c4&l1WpQ17BmRFNMS:CfI\nO'Wba^BGO+F2"+t4)oS$ZT62IP@j\%)\RWL,0p]hG=>uGCZo)4,F/,p9:h*I&<-McO!cJdiPs4&sQKCD(as;.6S[*9mK\dOpYK3=L7,3E,;8?74(^"GC8QL85b2Le#+^GS=08:PQ9@KXsf6iKcY+,Ke^/#<ugo=&BpI/1%&7Uc;]Wc2aj8^dTmFZ4*bP11P&&XTh91Vl+fUn`d*PaP"9iL0a[\ebGc=t]eZd7sG`(ZJ#(-f8%ip?Fl9O/%$r$>a-npVH+e]*H5eZ`uVil-]1J,f<CiYC;f(LOrR?";O;Cs3-3EUjJYU5q5i2"HOU#8a<,L8XLs?p2OFF$CVc-Q%J8P?R%gi4%\"p[?[hZC/jVkpl1p$dH`Z[H&=j<mI0e]_M'bqt&!<IY6T/lQFU]gFB*FOI023/nh#DIik9nc;'Z85$T/D3B=/lhR\rI;Z;O(m\WL%-b4YLZ_$>qb>g*,6h]Kk?Q!d5YK@jF.S6[pV/a:nXQ^Mj'Y3Zf&Q#L-:.]KAS1@Nf5X+#&<k58JPl1"o1ZK!=G;RdJ]n5<,`Hc\r_57hd5%J&Kr":&7A5_40rNLiK2p1,>5mV["a@,hQOkJ7/NdBY2C4_5"NK6k0n;rLsa8O<;/b(9:1bXdBr63XgW3_U-9Oq@?mh='sC9:nA2=XIEa!M-Cn1aD$HR-;m-Lo,9s#gSCaommc(!%1).'D/J#m#o0f4EMYQ=Jsqh&F8X+NShZ\aC]C1^;(ppIp_&eM(IqK4]aKd`ABBd50YWB`\Ucb@bplP([).X%4KIcj3MW,AVYcaYQUs3h'<O.4NkRBb8u"25*na?A03OJj=)`>s\%k>%3f?6#Q#o?&YT9LnLq$-_<]T23@>Z#G'%QX7?``]:(Z>pTq(>F@A`qJmX)EW"pm.,H"8H0$\erc1b>qDe=gt)WW+IDDbu&rSm3oo?`)Lptn2eMr-Ut*H*U,hSDKX;K9eN$_Lm@@SFgp;nA&(^g7rln%@HdgWb@gVgI1<D)k!<F&LVLA<l>'0i+b^U,DCb9CoQE/oUOmqa%RCp&>ih]aX\'g7:<Fe*bMRCm#2D~>endstream |
787 | +Gb!#]gJZcs&:LI6J*;=5ZIs7<9>8KOPm7R+W,V9YW,/crLTr_F-V,.11VtPI^YL,-(_^l4ROXI[[R[+\dqAM,44(dXNr=GE!UTXOrm1\d"b-YMX53pX":k@SNLS0%B=?FXK%Fnl)r9m6hQsc_HVa0o<"Up@#<es:k!m7+<TD=5'^1cBl<Wm(<7$@Pam[[P'<$?gRFZ<g%ono4+lgI::>$cN4'UWm#QG;Bi3,Wf>drQm'nauSIq0;1n/fI!=#'e4&K4%GR7n@f6>!MKeY%n$)6c(#@:1S%&2Z>-dWQ,5":ikol$<B#?<+d*a!6`QJKt7n)B+`k*/o]`Y#uo=JH6X0(m#aX1qOLm37g#&EW(/4)IC+h[c8LC!?XV#fX,#94<4%'Sj/+XG&qeMBQcuJ$O>(_`Y,6hV@ejuZc$UROH0=ko.[gph-E)O;oOoiL)R:#-GhD[0U(2Q,;-tLZ]q(WZeg!1r3X&98'I-p]egQ@9Ek1<]7c&RF*1R'W*M=scLr.i=Q(`s$"UgZB3FX<NRmCoqQsJfg4@KcW6m\>&H^p8k#ihome5rF\WdO8O6!M+O1*YDh(dM'+78dq/#:RGX%6o`./&>A^IUo]"nhO'#\c2'+e^6?-VTe6;W+R+]]DbBJ046035\Y(PU*1*(:%\ed9'mZ/P&ce/@=B9?qCjBa!o"`;FI[pN13kW]t,_tT:;/0]L&(+hJ5%YHY$IHJtuTdVG#aBeaBLplb8aTQF"T$qc#<,(INLY.U,5sgNcXP]l$^fk7oak/n?]o/G#(f[eCPXE3n$,LN0Y.G`u)e*[u>`Lnd\&1`!m"MMY@`'='ne'SC]b4-Zu^UC=6@pP82'L2%ud1uo#u*[,O4SU2HhH.jW,mLo]RWDs$iiZuL[lj&;PAgTnK%U2:1e@tiPVZf+KNp^j0PXH,?,"#XkitsT3L^j1*%N%+Tn=dX&*Ta0kX%>eJ%Q6PAWSqB`A5mq7ZG-S3^rL/iP4,CN;e(.sJ5]h&32'O*/n4`\MLQ&A4qlJMk!L3u;0jB\6fhX(`=@on!^m29Q5)GQ"fONt-lPV%**XRnEKdDi#C1@5EJB("`=\IOVaqdM9@(O,fA+ZU4/I""s63T8f0#Np'i\qpW'R<cH$ug2K1h5W0CQ`rTo@&6]]_7hfFQbEjCVMLInM(J=:<4(AkBcf%kO6V9[<f.\TiAKShakF*:Q%S('h0A3ZX<-p8Dq7W;mC*nJJC"6X7`/N'7tI!SsZ*9a&"Zi2VB<Ag3)D=Q7u9Gu0,"[`eT?rZ!4%[lA+eNWZJk`[$fsW$e,P51#-$^4Y<lV)*-H"BS?(ld+^2b?JKRR!1tjLuFDo>RcOTUde!Ml"IZ/QeGN6_su=1-k[PTA"Zd7AgU/"BXhthlup%Pl2Q5J1PIhh7MIF-XCe&pot8SUC=[8"P^sLjB.$UI#`]QmSbXBc&CI8b;&\2JO4\]Y`?<*&iR;;U*#Ph+;KL"@\C7m!AK&^no't"S'f4ci,)-aJo9_%_B+6gYZ*@c[7$C$A1"EQH#2H(4gs'?p&lcaoU+$SN'Q85LnO&HFT/IQfNsXtR`U*_e(B^gVJi+2_EF#jF4&PPadqO>X'QZ@bH$WNnc/mO5hb*EG35ce\C)Kn)@Ng+sS6t%6%ogCtBIX>`)Q$+MZnMS6mN>S5lIpe^J+pgplBS+@<Qb(T;n4USB\7J7$ouo`k1KL(=YV,=7EY*ngLmNR6;,:@?n9gKo@)Q]IrKCa"XmuY:QA$NW#D(`,2s)DNDha,d3KB7T@S.>'3V-1oT?f"PMIGtFj$#R+[?4Rl6WB*)2)g(_0r/;]rQ)/^78Qsj#r%e`t,dtJ8uqBZNabVI)_)s`@LEm^S^\\`UT@GI.dlu'+?Sd:2r>2!(g1Q7N^lCooIDEk(qHj8.of\n2I>Bj0k66'[JA#[9Rt:a.r7TbKjNmE:.jNU=!d/N#3aqYt!V>g>LoXh:(6&6)if-Eqe&!:+l'&8:lZ])pCaJ7D.R6[^V\!o=<u<(2Q;UW7Zi`PsD#u_g(XGq8,q&h#<,W6n.h"%(H!<@kOoI(ZU#=YQpr8H=77C@0>0L*Q&%&Tps?8#7GabgfAj8e*]>_nW41G3>+6_7PC2H''G]r6V[c$[omo<.quF-_W:l*DASf1NdW0`[Id9>Nj&n7_resgg&M'b~>endstream |
788 | endobj |
789 | % 'R164': class PDFStream |
790 | 164 0 obj |
791 | % page stream |
792 | << /Filter [ /ASCII85Decode |
793 | /FlateDecode ] |
794 | - /Length 2300 >> |
795 | + /Length 2382 >> |
796 | stream |
797 | -Gb!#]D/\/g')ipps']<nDOlK^>4QHVk_CF+H3VgMCTDf/=;M,m;)U@tW/st`UZd3B)9OU(S#n>Lmr$K18S.1TLX3VP3:W]&IsguJ8cd4)G^8P++$c3Dht3?K?9pe<5.Wm@o%.Y=?0JY!?G1^>`HR?'r\;h`;*&:>np&)04$K[VV0[T<KRj'QL=_,570>.*&q62HIg+Ai-SX`WK9dT1:\.]PC%XtpbjYin4mAM&p`"lN3Z:52`M?Z2Ju:Bo]3?bULK(/$9L5bS,3>5(<i?FceKUJY:VKOJBR.ie99;P45-60bX)"!j]n6$%YPn2'ddHrn)Rj'i]0W=l%N0M:fu5oqM]6,%eN?pe8iH::R!C`*g@10&"D@5cA[$WWR]<lZr!OEM0kiKa^W-Jdm0??0Zek+nq`?PtF1hW"dTgg#=UYTm(4LOU"cenO6")`:<>n8;21'n8fj(k2!LA5B*k^WZJl^)rE5o9-2KZ#"+fB"+YCTtuR'@KmN$2d`"#KKdLXF6s;"+WmRk7>Q@!>;;4Hb&1Tec71&QqIL>Au%R$d7cLAW4EiB]_b+;h^],Gr7N"GQ+X2239:m:8)9-ajK5k#K(gVr:32CT_">r*U.TKM!.=24:#p3Wj$bWTqm<ZJ8h$oYS<oaJ&VJC>bg2N;NcDbraf'H=7m@/N_'g-[;6<h04p0MgIT"_LhHf^`*-o,l=D(UC?WLL_GWor^*k-j,kk9l@YY?PKR]Q=X=Ae9Ea6cZ9p'eLs2^_bh5Xf-3HPpfl\qs?3pS0ZaJi(5:9.3rBWG%cRf69kX.37;:r*=#cSbJ4QOmQ$L<D)'r'oq1cRU3?]J':D4fL^NkQQ5"*l.CN5!clkL>S^i!!g8o-l_YO[$oqO?4$RUKD?QP_Z28$A'="b.V+8J25C]9K%g?,kTS+X4^!D>6rkTN]irVe>[2nPA`sOQKs<L+Ko*=(/E<`a,"iVJ?7n4W_cNIH/OV/-R)f-AfL!WB+p\W[#?`4PUJo<d+"W+O\6'Bh-rhOHcAlE/,0,12TMSdRcM0#la;i_r>`L3ZkE0-b+q--R"54QB<%<uMe,\$!3CnV>AIYmCdJfNS-mVZf$ASH?j'>]q87HU2kpr%1_6;jQ"1bC$g/TUjN!(Wd]\^sQR_k3bKd<1X9,`Fg[88pHRWL5P:=Ts*X@Nt:"6%Qm#li_9\&5]RlOa&P[IBn4p;^fb2X\K@c1Q&2J*kXHs2*N7P7Z%:>N!nRGgW-WqQF=H%;.@5:;Rh5B7oM/0F@V$&+IEcnBJTE_uX0T6[3hR\j)d>_]e"L&U96bhd'R*?ud@br9X=g9b&//\$o6?=G@?4LcV_EQH(A%,sUi[5?le54Lqj[r;##.4ahW`ZX4)6onbcRVGsHAjD%YXLR?,N%Y0Yc?e&ps?(AN=UIGQ%=(@gp(30;QaSI5m3PQsUrX.\2T:X;FoBDgnn*?s97(CaCm+2QLl<utF;EBOVF*0VqZuO.VY/!0FXF9s;:?bnRghK#9DuLZ3Yrb2:4X%l&`St<].:f>feW!Gg]b4b'I_]_c8HKk>/B]JCE4L!`+>mGlh;9Q3/c&m/$g'q>+0_r3C0k<'PsJJ4BqI/?e(,]2$cI_DES.K]<=3Q3=[GH?P\Sj&@Y74RA^!BeRA[#a`U?4mgMFLp"!8-9Y\A6`9'u=n3#*>`s1kN6D;SpP[(?"7h.X/+=j"K`KYTfkh0uHf<ho]0!&s316PeVK'di-dFu93FS_J,\6075jDqmXjYtLD;-ZB#_X7VMn0S9\@&4pJmkO%X_K4aknRGpiPi=Ug!iO=7FDo]?'^;pQuNTZBYJ_rV8b0WlJ.8&)/cQPgVmcf9a&ldkV%UBcWT*BbBq&G-SIe-l%oZ-6M?.$=KqoZjVA'o#Z.hdp9UV":68q=p\lPaVP2\RCrk&a(g68B!fTO9mpg,cMrrF's:Q4c!!1HX6K1:ENN)F(`'K2F'&CeHU;KJT'4Q.$<oeIm<Bfn+!J=VgNL+JHZkkSA^JW&YX'P%TN(@@<R`GdYLdfaS!O$^T'-qmnlCbjpj^pZ8!j67iY7FgI,LjkZ;^Ph>!!,E##,gVFZ*0^!W=L0>(/ZJaLq5O4&_Ua]SA+2CJ`5a*(SWnk]2RBUctLhQpbo$m'XM+&=7@E+7^@)3_?A4d_Q[S\7;Xk[46*3[9>:o!['2Z61L\mKqD^ot@WIfu6JIbZa/$(uoPF'$K1??PW*iJPn<Cc$Ys:H1C"H4]uJhJNNln$Lnc5K%f.;dbJccCu79IfPXsQMpBV'O!f?$T\c3rCk)hJZXGLn81)aG?.1hLj.]/2@[\srrYjT,?=~>endstream |
798 | +Gb!#]D,]1[')nK&r.cn)h8O1J@JS`niWBaU\;F[t/T,duS>+$OaIYcI-o3*,09uROh'9Z7$[BeiC/Y-<Uf$kBcZDD-/Nfui5L4c_$,EMN8*:q<<U_7&l>@X?$g@D)hgB_H``oQ^[@u,a\<V68NR-6]'miTuhS)8XlZHMQgc"p6>&6Ko%(>Ep$Rf_\)P..<_k`N0?mIF^73W/]#k6.#!-0[>)43F^mtATjiG\_9_<!cQ!;ukKs-!WZZi,1QX^6"JCM<_b.NV0H0Oo>eA;WMP[B`*PG_e3;&Hm0CkaU\0A42$2O27;*F<A>DKV@+=l`\:s4C+.K.Nt$BSfhsq#ap9&$Mg)0]F;]Y\BV]b;&HfL#T_%j$/p***/g%ga#oo\q/NIHMje7UiO8c8C79!X)o-fo7^3XfnW=FEKgPKXm%977X'll(iI9S78Pc\gqWRlBcr4^s@=3>g6B,5q/TPfPhF<bQO)&-";EU/c`,+_Y@d9uGn0Eo[be\Tf3j5]X-m^XmA%jIc)srDWSn"GEI$0&A4O1I2^b*KXCBHU6L;P0fgi/NdphEpT\`+l&$Usf#DR/'-nB7?"pku``SB=dD#$k[V1u8af)'qr]8n8,G>'q>^l"3Qn(*\dT/2ImB3*nqE3("qbeqB.f/=,NoMi`QF)hff5jp"3V9:5l\"a1MI"rRedfSl"t"u=;^g^nt.Vc.Aa_>coXcNJ</Moa+Ii!s>pc>60-Uq1Q^V]3sgE,X2/+lrcS!CGtu:adA%WKr?NA,=7lfb#@aM`L4t(<OT[Un!3&gaV*><qZ.&q-mOQ\@GZ12$G.tSWnRQ@-_*TfP%WuYFYPd`(%H:HF`s[KMY]E8l9n^.9!sEOD=[cMRe4'lCH4QcJpQ+;oY'aG=h_'_Gk;scQU,AHdt0.=`&Ahr@OCdF%dN)OpmTf9*[inPO6st(LU[N13PpMeYHCn22WF6AN!I<RfcYr(Z+af5qAg*3+5FVS,E/;%Rk)ZbUVJ6KcoCe6FPAtV,QD.>adYc5%cCTKhDmAQ3j?7jt<1G'[J!7N$^%oj0=urXXn!\COn"`c!eI&dK$(EEP4Q]Ihc!A,SHGBW1gqEoQeWb+JPq]^+<>idoc_:Q?`4gMr5pgP!Z:Y#7<Hc":0nl1rI%h'gH1.6`0A.JqB/%3VjI@01tiUr[j$s=GYS^iKOpuCT81l&^4[7[Rg1t<^VhoV-N5R6GN%A$Bq8s>F%1UXcVP/4YtS`C\SDFQS<QGB.iiEQp#W)WnXod\dlSW`g2^WeWj.qPUKEW-*/*Mb:.@7Is&!*E2O'R/o\OiiBL:Hd%F=Wjj"S?U\)RlN_#_e`G^rm1,qN0^h7upYiYikQ0ufm`qfeti-!GigA"`Q:$0-,@J\a4k%FGnIIp'd%Dse>HQu7DC>8#lN11eikT\.`:U1D&^fh@ZoI;T?EA:K58WApjKuVQ)#T`CoAgs''*(1D_(Bs+8G;^KDQ=A'JIUR'O_%S&,)G=DTo%7&("W_ht+jA`]P-@\QOg)R*0XM@2r2*4*dQErgD,cWZdQq,u<cl=`_.![(]Q=s'?Y%)p+Q:BBZ7@_eYpdV'5lIJV0p10]LWpeIp\!oj<nKrPnUf1JQLY5E`=9:6]h@-@%KRf+MITu[B4[OKOj4>#fOHOAoXAQY<JVA.H-gh+lA0/?8!3Iqk"gBo5PF$ai)B*mLOZ$6T(W$<kQFXM4m7C**/o44?!?e<I(C6nE8'%`*f^G;^%&W,*r;4B!lMk,5?qL[?[dO1h]'.W(G5n6Y'OSnn8dI)e`H\bB^?66BQnu]8%A-Tr#GRnqj(#R:+st*hqHf;<Rg<kd8[k_7.$tD(Zc;pl'utJcW\Tj&SAnKfA,sk\1XOd>K\@h;g'c=9ciBF>@IX&g$H4Hk47lg2B-4"0XDbh/7noaa*HCf!R(7@Omj/(cTCs(Gl&I+AJ>H?\s3.C6<%5),Qsr1aA]/*6*@RHa'4+?&m5qsQMo*pIhTe$m)JcZN:)m=m*>>e-Y1lA(bBit69)bb_F(,E-Ul[[mr;#L5_):SZCIS>j321lf4+N%),.HGk@$[6M!Q&WW`[Pe^3\\C3i&=jGdVtF$\X2u33:LM.lk&_/0^eq87cU'YsG2:1?<XYo+\U4p7:36GnI11C%&T#d"+n`]3+XX[3)(lGg5rRWrd.qB$mE]F4U%'[3+@uTNCIG=gt$Ogf!Y)"W3$9+5q'EVa2_7c+cG`CMp:dVS@33DHA5f[Q%U(rGs9K-RN4*@r<EFRF\P<F>%A..T-AP@fIoU?2mX[T%@!X>+JD#`TXojZJ3*$;`GZg@DjC\;psU?%duPda)gZ*)pO-r*`,A1gK(NVmMe_*c`:(pJO['0<a4/'l<4VV#JR3TcYYT-X!R(C81tVAbt%Yc[r6^#WIZBt~>endstream |
799 | endobj |
800 | % 'R165': class PDFStream |
801 | 165 0 obj |
802 | % page stream |
803 | << /Filter [ /ASCII85Decode |
804 | /FlateDecode ] |
805 | - /Length 1977 >> |
806 | + /Length 1804 >> |
807 | stream |
808 | -Gb!#\Iqou`&H+hTmk>FcV^8hBmb7""Q#QBLVA'*V2<N%I+NV08XEmrg-#J&/p,=5lBB"/OZZ'PEn8>&LkfoSU,DFLaDs714-,:T)\@;khN*n>kYS2+dE"*loV^F](:Vt*'?4+A`2e],f'^)!Xr,SS.8El:?bOZ[Mg$))_%Fkue-YRHZ02*N[@8Pqj4\0:<Pb,);lmoQ1Q3J0C4"n)]F)F8Q^[o[`L;A'N]Q$.5q94gn4,=AhUV65m]Br&47prm4\'Bc@Zb+i(m9`$A#+amA\3#l]Eg9WNQ^1dJ,bgudI(4O:hi4i\,`RBE^0nsr[?01[YTJFlh[S$6*e>RG%qjp\#QT=0$<,3I9_8!P4u-Z$iPk"#1B1=kN252iS/H;Jr?0c"bhoFpQ%>>0k/]#3?kjO&P\LPKbSRtoXp)@J1W4.pj;Ip.^hG.Jmrp-oS4YX06*ohNBD<26rYKqhis,=dJ3g4bf62Vdm=#JTrUb&'CEA+G)BV`5g70XGZ1"dEX*bO88&$Z\Xh'b^-L'L=`0>!TQ>V(06Yg*r1E*<c#Gi2m-p1+,_N_(r%P0I:Fi8,Tk#d-g2I]cs'nh]MV3;W,6&F]*U8oT(q:h17</-#B_&V!>bT8bQ3LBLkRim`/WitOc^gJ]%#dZNILZ'6@mtDJLrdO<j48ij+i?(jWNG2$oO#D#uQ"%p'4'P$:H^cL%$T8D#0at"l=&p">gk$>Dd:0sqWUd(I:Y^3_8N0o;k)YjM&S3NI#rS`uUW=$Q;bb@g-e<qbH%mu+jT0t@q2D&/RQhalJtE.^:FRO88Atopb+,Y3PoNYtRP;aC6&'EtKNp01ac)%9nbC+P^i8YIZK)!S&nAt%Sl,,h:??"tR2%M92],p6,oPaRpVi,'p6e^\FN"aqWU-!C;(>fNB<3]">"<7\QM;]V5nL]/NC99n-r6([&)=o!lh7*l"JFmqUl(].Eu53on7@D?g^A2VY05/$f/m6:O>NM'D0J\E$#8OkP,tI42=;b<=u[_b*\J4tE5P][hk<bre+,S7@6V7?rmAd6N)`m=O=BFmZS71L)Z!;]CX1Ak&WOS^U*Z%&;e>"^:uhlNEbadoCE0))5'XeYUu`/2hCocrUcFWW&J:a=)bPK56mP"MLBB5EOASg@p]19",sV=,Xkb-pU'=VifI"g$/M%hVr9io=/Yb@@PGbNmCL8(%%A1($2W;+jE`YlF2Mj3X9t'gsLC+d'VU(pVS.4_R#s2H!>+o&Y=luaDe>kRkM>+B34RKYpVOCmkPssB'<'[";FZ;f]F;.J'(,8n7B1br.H%MlL,QJKnV?o$`TD($Y&tpg)2pW\9b$D8<3E+T6;9[S7-T7>P8m-G"W^84lU7dC]eu'A7'?GmiR8nS4()3ao9Gi6HPfbXOqUcu>mRKkQds9+S>1Z=!Hr8+YA\Vu7cfiBgUjUZQ`tJ*,7Gj?d+5Wr;K\Z#*mhBij?E;;HjrM1)g@8`V)s6o$NG;cFU@8Gjg'\.WE5,BGK@&fpf"=$`_Hq6s%PQ9/1Nope>-N]gDc.>'Lo;^I'6Q6#4t7a5abGlr[)Iu+dIqdN'LoXFK]bAUH8(sN=I.OO*P*q:fJ@U(M1u8s1MAipE7u+beBX?*+=/g[hmm&26/ftr1&LK.\S1j/M`o"V64H.1*W=!8$.h%S`4TjS*;iR7E<<1$8e;'GXBK^0Gl5Z1rpk_'St&rl5OZMb#[+8m#pQk*XXi?_+T2mtWtVUFJ*NQh-&3NOj4tMI=3_hmBY0@f)r9ZE`c0Ihd:]]3nNs2]m-6!i>VA0:FEX^_UX)9&.J6Q5(ThPt20Brk5ktUjE"XXMCjfoJ<aGEeXrDL,VaJo+Q<*-lK\kOD`t5]8c$6V.(Z0bJ(I>7^pYpg5@Ri^3Rqjp8G;l/Q.j&23@n(@)hO*,U3^H!p-JLGecEDoT'T^l4@EXK!.u/RS$/Gma[%=V2GZV]Jelkoh#"_.*$1::@lio%.VtX`NE-h(.bH,p_~>endstream |
809 | +Gb!#\D/\/u%/q:js+)RPfEjZ/P4drPrK(S":`pU\g/p'P5]E#aOW*KFkY?-rmmiu1f=4kPWE9cUZ"+otHUp=jScpJ?>5E0)"8k?6Me`\O)^[:ANo@e7#!PdW:S(<WX@CbO^is)%$q:9#3Bd3"[cDF*k"I3Fh6N37SsW]gHoO8TL"=D$&\oY^""j_P5G70YkXRai<%)'F*icidjA4>,n?77ap=gHY^;Ar9qs`2F2]U;NO*/>I<dshuIbaTb!DsG03>[RPZk+?[R>Qd3Zbp\5Y2OJ[7O?FV;+OfdiVidIGU(fG\jk\YiYm\4%(sA:4t1s_#-PX_j(W/(6S`6KADlH.^^;<E9?3]4nl\hiN(o9_SJkBX1+kjs]=>9gl$cr,<Q961Gj0snmDemD5P4[;r[MDUU2e*_#el(Wc&seA"AD3+dlblW#qA5+U]HgTSV:#EK<WEPXCOZ!L]J_sVUJ.W3EZ.5a%)Mp.KN]5*;DHm15Iqh<J`&&!A)EO3V643n1n!;KY.P0=lcN/`_)315^S'F>Y&*&U6l_D@\l;%O/OI#R!?FH/4OMCY6;kKdXE(GH]grTQXgkU`&Cp*p<7KN;\VMC<r/<0_S)-t[3A#tJZCNKB,T;n`sLp"B6RubEnm'*B^1]-(U,;;#ap38DX1%dW`#-K`1M<Ub]:C$%2NA/LFJF$#RP,URFa,8J;n09/M5bn5FsV@<p4`cICN<`h`dVe^L+%6pAnMm^L@s"G/O!6Vp0j-@*U/0K_ti^*;auhm%1Fd46Z/ff>I\KWMoE^"T`E6((P:r'QeSM"9)+Hb`L)3XKIq8As,on/07X,do/nO350H]Ag!:uN;[Sl:W#%`5%9MQJjTYjYu7TiVS1\B:&.Z.k(qcLPj%EAQb=N/*PXc/-_sX=;([kim[HbDU"Nj(eHfu`<@on,mTX?-*RjAZ&Sti'M]"1u@a*A2%#0?-()k#_Dfp<S/m0LE$Gi'F,$<+q9hY-;:]+Z%kN@otW0LbFY'58^,/J@1O^iNYr[oA:O>/AmKj0[W.O"qmf5$)Zp0P_M?,L.)*Ra-a(0#qRF]*k?L4nrTNfOSm@0LacYQp)Lru,qn-IbttgM>Wpe)=3f0H`[oc`sHt^H-\>5>G_E/gp"R_j#4nT>F*5Iq`WGq#X5&*'[?3\MAd$!q,NVVnTo1]O?"oK)SPU)mt3]9!d,EDRMQ/fB.Y+c,NM-0@WOWcY8'rb%aD+knBVL,1#aiWjmUfD*DHBJ;qB-.5G4j<`h++.]I@u+fUIS9lR6_0:?4h+@J\2WE>XiKV#D%*aa.40U/-e]S?tn,VaH^f?&VN/?%`6BkH%g/L1N;d[ZQlW:i['1A/L3=LqCgit/00;90,%J1K3>hlS+[7nksGQ%i_[CQ!j'E]P6PE*0^JHi-`K!RQK2(Kn]"!Q6F!n-9=ckSNfBfiF`rn.dl6(:?`9,8ANQ%IW9k*AEY>K3iRj$_9huLPoaX>&;_(C:&h:HM($ZF<a%$lGkrG3,DZ!6j'tpSOOd"d'T*BC"&M7`?\=G]*5!/=bXt$'_;EO5#[BnCD<a\D'!OEl"Pftp&2h9^bf]`4X*5WAO;DQqVIoP>_`EcBJ?3)p!a$=@840)Y-.^H[9mp'Fnej7I\H(kBnd)7+0?DlH>fL.*a(m[^=OA4F;Zn^P.N?hk$%)RIi^M?p7\4!_2!i&^'2!4GMjDEI2i+3W3/CmMq(2mEl4bnH2@n3o,&-AKNhEjZ.cH'A)t2W[Z7IgKMm2PLE(Zn;Bfl!<kU!'fc:<2?YaE5AMDuHAI$jsH2=s8>Id1^3+))i)GX*-"Xd/VU&~>endstream |
810 | endobj |
811 | % 'R166': class PDFStream |
812 | 166 0 obj |
813 | % page stream |
814 | << /Filter [ /ASCII85Decode |
815 | /FlateDecode ] |
816 | - /Length 2416 >> |
817 | + /Length 2211 >> |
818 | stream |
819 | -Gatm<CQI5[(&^>3r.g1Z$@<Op`U\?kBRk1_Z^Yf8U`$Z;&.]P`6s5Hp;B_krm]Z)iP[BlGlg;mr[O%'&LPP','N,bIU&U'lU;'IfeP/SCO/<5;K4$snp[iWTIeNI4/DQ1):M;j1#2RDO"EVl7rqsUT`7S=ZV2RVE/'cJPI]-PBT>=pF>9fN^1rfYbR]u_s?b`N4FXEWR\)5AEUD(%c#q,+9QSeY-di\MQs*OfScjb<!!XL/8"QLh\2rla%8BYgDnp;g./7\N'X]%\fBunH&ZC3Q18k13O='DF:/pJFHD\rmhN$H2H//)4.Z<j*<bh>g(8V`gp8jMd*.JS75H%`i7)iRN\efR%DhR/J(P+/kI0&`3Z+Gu-6E`hQS'm]n0<C17H8kOcZN_haI)?uBAQJ4'\RK'?>Qnrpa8S$"SOrI-4dl%/qj=l'0/;P^N'gPXF;-LfYPE$9@iDXI[)/k)cZ'7c")N@L9NMF&e(r3dm86aUj-B"_fe2WM'DDVbtpP,S'GN7XYC<R<j#@T+j)OW-Xbp,D[:a[5s.H/H?#j[OHGD@F.qC#MC&T!u?ZX.mffUpQZL?i]mg_8+2H:J8+NaFKo^QbII=2!(*IS<TM9pRLc3W.3lI,fma)l8@$<:Bri3t?=HToD4pN5JMB&+]$LK),m$*:ra)DC.o`N+WNfg/]!/QC4*FR@4@,&sFh$<K^_YeP0s<Tq.[_b2b]&&!?L1qa:;X[#B=kT_Bj#^WNWcJeF)C!(/7eM?9Sq-s[Xge=t5SDk%HO*oZXTbaZs6/X:Kk=cl@:<<<&5<a]nT]3Xl":i!3LZnaOW5pZ\40sV&.V33UpNCkat2o[f/kLm@L3uh?fdo>;)4<&*FaYS/7"oV)paM`+_PQH/d'NH=@o3![sd*1*hqI[])EO*)V!,7kte"02^Z>/>SQ_q<4pi0]U0[?XX(1(a^b%(pJ-@#kYQ;1T!j'"\m[</RZ*OoB-^FuRAB*j?@\Id*4(k#QXER*9cDB2o[\4et02$a:'J%;N#A9)\6,7!_ZP@OO>O_`P!L11fr\^[GlfB2:/Qd<PdO'aT41HTTAcYlsYZSj=T_iO,FpkIei'42a>VVf-L*>H!iH\4i1nQJ^b9mL't:gTAmW!U'JLFg+ce65m@F^0!pe#:\3k9\1D=cN`)-mI?<W2fgi,#_,CK;qoq0Alup8kOM>2k\ml<i4"^Dr\aQ2.ED(qp<uMX4?m84"(TJ@`*s9\%M.qEYEb#WJ(<I(nu7Idrda!VhRk3Vt4$I<FN*t?`7&;@R'OTg2D-N:k3SET9n5p:tdB#>_J5=74CGhQ"mik&8o`<`sV?/X?5:<>ubj>G)0EJ=oqEO:q(*M_P8t48u:8E::P-!`=qaM,KN*=,#(u]lH7(3oiMZ]n$r)G"8SGR6%^ouRO2@UIXNWqWeI+:R9#),LY]QaL)m)\^%8Tqj)362d!"'th<rZf6c5dp5AY!%Un-'W7eQ`ATuk?gX#G:>#%>tn?%[CjgMZ?NM:(EL6n[e4\*?3KR+qB7T\GOF-aN6^#B$oiOF9&"$#71K]dM+e:930;jhT#alZ\is/ttmK%G>\l`[>nIe%<M4?(8tdC%3uA4>3<#H,N5HnDgZ+MQQc%C1#I)EPbj8LfDT7_?G"0[.X+XG<b!CpA\k2hmqetGA"t="W0R[q3[GbLU2/F8\]9,V#%^O5CVn,As`8#r!6;&CGr4_j)KmY_:pp#9No>)boA)1.5s5qV9iQ`#t1/bgEhNc-E"7Yo&oVUn%H7!2auFPf4b1sar=-di#IeQ:3lfp',A?#>pDfN&92lF\:50Gi*8XXi^1?Km/"3+r>So%IALF5C@FLZDp]lr;PE5W;he&qkH52qbNd7#?'$jb=2'j=D7W`A,`9;(C"YJN($[^<!r*Z8oUI^f6tV'3<siWgBXo"4S;d`jQ)<1rY*+GtaYqB5RQ`NI)FW4J+gai2]W]b0^TK*La?]1GTs'lT:[JTiOjU=2AVH]+We4TQj/B7!\$5I]'+Ph.5K7<3ImT&,/Ub0k=&I[*`J''(qI),+iG?L;nL!ifI^)h\h%'ecR<DpCBI!eX28l^;]2*WujccjJ"50"JmNUej._2j1*"Qs:Ts^k5TtYMJMu0R)+O_-'g&cU'o6^mMg>M3fAQcn`l5&gb3%rl2s%k98b18i^"[1rE_JoP3&CI<CD^+JtKH13Jnp?J7NL(:J9/,7"EX>gteSQqKB0hbW.URSIg+kpc&n>Up7G(Z,%?!;2nO-^;H<dZXqh4B$ooPikb5"eK_p#9bBNUanmuK<4riL,]n]8H[mVUhf+1U^J8)pYN3YoPQOet)B^DCs;oAL^<PR3!Op('k>bT7mc?&aT6VN"(FbO9RUR:rB+NTb]Mbo;id>qZ!@Z+%*NQdKY[Xkk<37O)fFHstk1^oc9tEc9EKIeI,A&rkf~>endstream |
820 | +Gau0Dmr-r=&H*Xms2-"q@&G\X99sF+6T]C,ZN^]^Y4^?VFYV5UA[.OmQ)*F9^Y^'rT1NP/JX7-<A;bY-O7+.Y'LEW9L$j.G#P_d3c`]\A,8fMR`^($.>Bi4j5PonY(9['G-8=f\K5P^pi0s8D?Tr.p.m7Oro'?J-m/3sNDUm5-1CUd"(FB\=0UcL++XE9pU$GorJ)n&h&f=_g/=9UC%LZ\QGAX!P/E7W/>0Wbhl;#]+=u'Tt#qfZY%7\Y`aM/eSN4VAt/C*YfAq(n7`cFtaX_O>`P)nA.*+/\k0`U(rl:F*,_]\e);klYr==?<gKEN%of,UlDKdP(bI3)esE0GpWV%ds]`n4$d`^(0bV+PCA@\snRk\7g`NTKaA=I2=<,tp;&bt@o:JkTjL>,@S#J[1Yh+Uk7`I$GCF%P7bPDm!&9/R'jS-AJ=O0?^2Mm'ER6NA,MkAU1<YP5hbB:$KRM4%S?EDf;J+['qMr<[]uJO"+AH#TL6uE#$<h.u,i7Khn>lF"XR^!lcFgl1jg'N.)`T:.g<#p3gf8#`XquS2^!Mp7B4?UN4+(+=q8]jNT$MQQ<'")Nbbg@R=['e9?cQ9su5+NbksE2R<;;'noL*e=Cth1I0LO$V)]$f`XSH"j8S35)G#nneJN=&\.2@6tp;V=-/RoLPkCl&2^PS)fq+Ur`+!U%=Ck[$*XC)oOk-MDq70<ZZ=(YiI1&?]c]>+SmTSk:LH%M$UQ$T?6WIp6<`jm%1SL4>0*(BL[2Z=G_3%]aqN\DM&j!XYc^i3B&#;WbW?*0bdd(#fpO2[pVSAOl4)tWcWIf&E/`+;JqOa?NtOtU&P]-oG^(11SBbO81YVVKWRQkBO\bEtFE['OC_?O`Xfc089U\Qq4o29K'B5km9P,f\!::_MaiUK?4.m\6TWBa>$n_2RI`iTM>PjJg$/_u[h,@Lk09N_.lt[ng0uX^$WA`,\:?hGT^m&;3=L8Q#o=1UIjpnkk9HVT'm5lPeaj>5,F.f5mM2.uk#M.ukjjn&l0^Acp=Od\b"0-AhAj_EnrN"t<"mb1\nm3iLd:RfEU5O;RD2A>dPSJt]9FE2FUpf':0P@+rU,%0aUY?p#U[:&/4e[cs,WT,E?oko4_cAQk*a`-346?0q]7I&fIsbu.n$X3[]>n!jj-oSJ$jE(LWZDK<D$6#U^:G4TJ>$CmNjX8%Y[5aB^)S'@ooYI1;iG_'c?dCtPZ&SDqg&A,Yn!FXT`3l&DLX-)p#>IcSMr"?\?cl`RJVVY<J22J/Z?Lf."R\=CedZDP\MVd?5RNFI_SBLO+;mN9)nfM_*O^_XC4J#o1E_$Z:RlM8RV'r10'0:YY4ch3a++KcW+#4r#Ue%80X9u["IH'.Gu4"/(Y)i;pf-cd&a7/PR\DNWo0'91[()9f[dYr**u:N;6r"kd\p:XVGLG!n4kQs`D*8iT8c-P,,R2$B.[(SKh!k?nZI?jn_C(rPe1>q!S':9pQJ/+Rk;t+H90s/+:S78_G/nd:^Z-8-4W01BeQA&d7fk5qeADOEG+fNMF_UCFrR@@WiW*sh^;-c_*<+[=3;@GZdDIH"V/ue;rnNuBA<d[AuHK>i=]dcf)!C/](pbG4kr[]aO=9S'k@)W7b]q@e%Tt/A'Ji;!A9KgAE1WtD=ch_W?NRgaJ1otoE0=P%8Q-M`(j@Z-_Er%j#/?-`K08V0DtV3rbS;U8I3a`E%EkT'L2R$.`Z/Dd6`EHQ$#.4WJ\d%j:XsD%%_cL1U*"?OB-YGh-ob@C>>dTQ?!thCL=LdV3oY7U6u]U^S'8,_7A?X)luOL<L<>!bE%]tQ/$2HZ&P%2gHW$n)m6T'^GPgUH,l7%k?Ybt,7>*jAA</oY6:eu[`doAHE'RDl21*Vel8O7TsbKDnIn=$`_U<W,Zn?M#T$dB&8=F;@[!g+3+->i,\I2GMCgomVG1?Y;&ckpQHg%9MG?+L!NiB/@Q7DX/`</1(.t/CJ,:JNLgGY.bVq-Y7??+Uq1`\ZGY%i!nPFg"#kgWuI/.eaX*"e5]2YmBHjRDlTCk9"k\b16r<5FQ_"sq3?T2=KL?\/^H"*$5OXR?8GYcXkmKVItQ$Y[NK<XZJO%8N&j#`M^N*pn<)KN'0g)o-JHHRZ)lGF&hB0#6MVL)t<cK[BHK<%:fYTIBD32SSI<Ad-Nh[LcXk0U<#6U0i>dEk<cI9+4_]j+EdSiNI+g(er2".^-GEpo^\r9QYKm&]I~>endstream |
821 | endobj |
822 | % 'R167': class PDFStream |
823 | 167 0 obj |
824 | % page stream |
825 | << /Filter [ /ASCII85Decode |
826 | /FlateDecode ] |
827 | - /Length 2097 >> |
828 | + /Length 2372 >> |
829 | stream |
830 | -Gau0DCN%rc'`B'qs5AF[ljg%2q4/!Ecu$l?+PX3P6T<N65YI?\L*AL<MOXS@*E%b:WT,gLQ3;bTo%n_<mZWO-Mr-Ml:C<ibVY&k)VRT.FN8d-95gsd8R3!FIF*J6THcHd<%u6_DjCeU__h5-F%*u:0QubC'@"o[CFMh.c3';`.G\*X+TkON06^i8u'E@lug*t?]WD35dPet]!r\5U?`IrUh;O9n<C#seP"g=QTLk"s5<MEEc(<<Q"AWt^3fun"brBShM!o2[N,9FhaLEhg,?t)rB*cGP;%FLnlQCOh_iTu_03!1aROlRcjEbWX]/E)nJ_BubA<&3KM6n[Ye$"G"?XPSF/]q#JmpP1>T(JH4sZ.@AI3ccPt0e)dYVqs1%;p);eS1@7d5SnM>MAm1gQGVe>G&B,AmF*'7+opUPKaMETCr=C.6=>JJ/i^YI7E$&?3AHdsA\!)XjB<i,\Li(N16DPK>igKQKq-8=2T"R0Xb#22=#))(j>G1B,s^i,Ae(-&:qUDbT2)GAW2Ljmd5ZcT-+DO.<YfR\f`2E#aMf?YG$R.+#j\lkkY/0q!:U1tTPH/aP(E$n"l-pkX_hea&[j1A*;Ys\"_EsM*!gOa$5:4EK_$a77LmlG:]g1-f0muCJ3]pj+5PYOL+Nb8i*(WG93QrAU;BJXk)[$3jEk/M!R"&p^eC82U>Z_ANi:GO-k[t9agGKhHF9/,Xe.R^jK1<qD+2tC7au1[ia^c74^/6,He7Z[jWMor+&VX?Q@8f41G-QB/B#"K`&fR;bhD#dZHh0RDH2n7:X"(Me+(C+13MOHo-TNtD0W%>PAK*<@c")Kc`CO@`G)O/gb*\P8U_&aV^P"_KGu?-WYJ$pdEYqc"4%PJ54&ssZ_WDU.#>Kg65W6@8r6Qt!`jZ7rmDMo7Zl+l?OT7*Aft0O#g`>moBR./.:a2I?W(KX6+]lD$NFBc:POnoGFlU(E!$%8oM'sRe3'j]G:+I7SFfCR^XM@N/R1JTg\V?RYWq>F*`:!sXP`SCU(rQF"814_T>mh0p`K[/rBRs3239JL9df"3@rlT'De6ulO8gI%=%FdI$Lrm$RNP=miju/%KMbF+a!]Y"C8+=jhg7#TnYjo`dK!]JBnthonhK+"a"V9FFqJ-gprr_%(rbe\rpm;`N>DSB[.s@3bb@j?7JrpbTc`bCW;CQD7SfOIM(T//!B"<:QM7Z4Ij?Q)\C93SbF-['b<6XB7qdr\_ZcuJcF6'Z6c0.G](2sCUK!URi+%QlPe/H;Y.NHS1e"+fL2Y4$(CDGNIZ+Ss$`]^2M2tS"*akWIB2JumDQgd:XeF"n)g&c/0m'VMh#C#Nmq9s)gXu5R<aXW]G?\M:"_^YTk_pRZ1h_g@iERrIIeJQ4rtBnlnpAQ*DpWu53M0"5aNQ?2fT;@m7E<()aH+<SGB01W&g7oRL.F&S<CYYRjL49moiNc-a6OS4C8s_-&nE4ZFZ#L*dG(?NQ&7)S<[a8V0JcXsa'bHU.:H:]Uijp1k$h3`GX\q1a]8^;?n8C)6_LV7.7["39_rgTaZ3]6V)F*I`'9!/V?2#G;7IOKHE`-S>B4%G_L@b$7t*,s1!bCMHAe-g)2"lY7nN"YaT9M>,%LeQ+<QuQa!:c\;$7$/$USr>I!<s1Nh6%B>1<3rWm.W91<8ejqfpb?Gh+&)8%m49qrimB'k6UWT?g)1Y,oK7n]%OM.Y$%Q\;5f(N8k]:I%VWhKYlRtGC.ATc8Ug6H;.bqGFNsbpYf=WPi#q]lhaJR^MiiEn;2nmb'jdIotI[)oFih$.TZ8,hB+tpepN5,Vmu'C3;ouJ?J"rJO*VIZ8%gtj&8Z<(\8C[nhOQe!A;7-ZHDW<^bO)C%WMoGbOg(78r-2s+*bA$dj&79V^Q4hY^7Rm7UF2eUEb>4q)eI<6a[4'q=Q'^I'UKfKWD`RO%sq05-U(NPM!A<lrg#SG-f>D3Fd->tb)a.r#n$.^qJ]_b-eGtU,I_)tgnXDe;'"Dqg&=->0@&7@?=05]\sIDh8U9VSYou9o%6@"SiFlH9eeJAEBoYr/aVJ)Q<,FXuV$\+b[!Ui+WVK<;Rk7jX8_b2C_AtC6\U[0)@;[*S%M/O@gR"`9~>endstream |
831 | +Gatm<CN%re(B#9ss5@E&$bHL2NGQXY$;;8h9Y6d^m%W6\[oh-G5tdH]7Nu-$Wg!8OF"ScnOn3=?o\kQN?Cq$Rk?^3H6i;q]CJkfDI7c0M`YA/]RSc2+L,;&k2q.`=YPWZdoB^]gj.iC5E,n(WRf0q7^9]RN[M7TAoUW3qJ+#'RC)?bo0Gna%LaFr1Z,%#Hf`$Q=T2R\6)(hXKc%Z+p;P1R(G@bUEUWdEODc+[Rdg,Q$S@s1?Ju2mgqK"ppT3Yj"d;_#=;.)*uMPGW[D;</)?M_fZ7tM*04;f7nY*V/N!mlbe6Z/nJV7@j#gbj@EB'E;%XJ@\$[`)mA,dLOIk5S`(T@^8RmlK;#V^r2(ku$Wn<)uSKO7D2q`HlB'pLt<^p?;4n7I)D2Slo!TPtPV8+m.0-c/umb-rDE`duc-U(B%=8`2)trm+8_Vr4Q/#?:o-9ZE[p$!YLUh:+J8AcFWBpKB(*Goe3-P4q9W[(HX8,&ZVieRoQ6R36'_Bc,hC>X_";g*#ARN1s"FJcsIIn.rkBHAEhf&N=S%,r-ImPGs-N1/,-TU$ElY>YJ$HKPPif8+!*oM-WKjZ_bPWP3V'^II;:l`$Ejc1//"cDD\'bL+%=([NPq[Ac<OE.P>r]jL%9!oW2\>mnP,r+'Yn35)NH2mkQru$#Q9"d'EA`4$q*]@R-)/?V9mX^Z;i&RqqgRU^]0@,h=F7:OK@X]q;4.Z[9'(NY,O,;')H5)-a5q#j.4t$j9uYG4KTm*7X$sdSH]hWZ;nLej`A_==\;D0V!_.W*l4B<!j"4^2NL[8'a:b/ATPK+175[iS)ZZ*C=?F>/#WhmL]^^24o=>X:q2%<&d..26fKpg#.-<@;i/oI.pp-ARX_PgL1QXX\-1,.LUaIf=<=8MV-hU_i"8LMAX2=.;ar^KoA-6_:<a/g"eW-I=QOC%W\W"#VD>h"n0uu!h.X@%b.4m\ju%<2P!"-8'gB-2d_A`m%P]o-VbHounZYY(?(6]el5KeZ"YaBm$"p>A^c+ZQZ]G/>m]KMdZn/&00@BntR`sYAQ8@FO3mI=oW^Z?t(&We?6<BLa^;1o"'%d8%jUPh>-Bo/)68,iBQ^(<n-+ngcV6Cq'N>b*=,YD--Mhk7nMClfEelrnKou%5`CE%6/(@75"\AXJ*S!E"Cf9+`79Zu/F>X]0eH8PEef)D?%E:-q&;i7W:NS*#-4aLKY\e[F(V,R2+dWnN?#*?p(bT_%VGc(b:e3%is^q#`iOs:=h:":#1!Y-K=2&XN>%%!Z3JLN!V>>Hs3q+^?UgMW3@=ULuc=i!j-=RHZd93*h0SOJuFNX87.8<ArKoKmTcL#R9dgaV/H4;@i^^gKJ_s-WFO/7R:RVN_(a(R8+D"%ZS;_I*n;gcuA\geoIK;b9[o%r<3GU0+'ipq1]+d"]#!K+s]n&tn@r1R)&p*[,:b*D4$U<3HU7_Yes%8KLe%Aqr5p(LY(=*$l*\on_e`H3'N"FU\?(5RL1*b>'2lmRl)?abf;i6\C88<@R(7(DJp2CnM3$3P>p>SHOFCn<$;p9MO8,cmA`9OBu71.A&nS9$(Qa4*X>t7TLrOls^o*1N%)ul.3+-(e;po'b%'@DUrrU.(_d<H?T7#Clr3#)B@Tu`.%OsL95(?^$&>b]j?&*nXVb[&+'qslk&'b_k!mr+-3k3rOO4#""%VBAidYR$`4E%T5,KHG<7,fC*$BDR2%W,q6o0Cgau6XH!prpD%u$HG09].^K)=EUH>mC=.,c?R<D0YK+Vd$8^\u/GK%5*jI$0T+R8=As3\[r8@:?+(5'E<%)LIC2sT>Cr-B%8'PeJf?L8dD[U(n*!oBM"rBfsaJeTC8pc"k<)dK0#dl)FE`oCb'bi>QZk>Ere96T-$6J`doShs4!1J;10K%TRgi,F4H#=]a^!h>$si']bTT%`h:G\V*8a2]cdr1Nre&:\'n_UK1_%k<Ic0m$HbWpUL#Mh2e<o%25V$n;,@US&s[I52I>)is.TjslKd`\?_EDUH?5n=BMB*^As^N>jMNKJ=J6"]JGr?qp2!B59+F\VBr7Y+t/D]&=o2MD*>0=grW,.cY$ads1M[;&T&%]>pX%AeU25VSNkuA$:_XF,%ib5srO[fYWaShb.%CDgXOC8Gc,Yg[96Ji`&_mN5@O)L0:rK@+:AJ<3B%(f-uac(heLSR.]5$PoJBl)@lStE..!Wromn;01k?$p!^t,]iJLQBl;O1Nu-05m]kGlP0m[>G8JPAQG\c="8(UBj'dH9e)?9KNr-nIUE7KfpO*ULF"sSVG@tS%),?_.hbDQY<Y,)Fk]h2+C>3D.)nB_/a%4Ej2i[$IkI=hudSV+RFW;qif*_B$g8dGpUX9A?H5*B^q[OBUGeE&nmI0u[k<0,s~>endstream |
832 | endobj |
833 | % 'R168': class PDFStream |
834 | 168 0 obj |
835 | % page stream |
836 | << /Filter [ /ASCII85Decode |
837 | /FlateDecode ] |
838 | - /Length 1896 >> |
839 | + /Length 1841 >> |
840 | stream |
841 | -Gb!#]D/Yn7&H3_"s'\mk<)P`p?u0eYHq9_bbphr>'&WB"EO$?^bgsSXh8QPolYgrdgq%?=#9d@daTfC>qs6,Fo7d?qr--@t>QDF*^tDos*#BqN31fNRj9FI7NfQ@E+$&YlIK9@dB_R.!J9-a3I_-=Oje<kidH$T!EdZ@q6cJEe#R*E9ErrQJQk[&^%tS%0d.]J,OfHQ*OOdtOMM'&"j?+d""JUF03!6-N4GQmtJq@HWhM`1KeY9uZ;">5sS3ULKnsZ/cj<I?)(uToCJDKPGmSgCb2pd?7ckDj7Rd93LB\e=h06aVe%W/C2h?8gR+k_H^p)4JOHV>pI!`WIe'Q/(]Er,L.;`\Mi?&71nP/SoX?G)XYpTZLEK;WJf=`FL[T0M;r<R()&gI6]2(b^_2IKV<S.1((,>&o`*&[T'A,sGHePlY5g+]q'B1K(BON?]54"*3]/!>Q=Z7h^k1aFX[$,iZ4`R$Td:i_$K]&O+Q60U;u!.J7BPA0kE!)/kJ_i[H!GR\mjE:m=WDS1d0/1hQ!0Pr%44=4tUWolf]XClS]q\$:>gICH43=qX7mBOr+Qq0QGr]o)K7Vq]e_jrR\PLP3];D+$12N^4d^iQ5sSK7P%bc,b#nB(V67&m@t9^1B<QO8`iH-dK4pf6Ke"g2E^k*b:M[1,R*.J\.sa:pJ>'?X'j&#Ur*I!Bpce8bei-aP#tRDW`_=HQDuUAFA=<m.udiMX'gV3uS=`0&:,FZBW`>*e8'e-=3@!V^1+>6&*,*Z--ZH`J'b0a]T<]HeB6rT5Ms1T;nU:+pZcFJpbh$MT"cmj-S[/0JR5Qb'/P<SPObK29#`a@TJ&Xada7i%ab)_4OMZOLI[YR,BI#kqE<nQ%s)Z.*6_3n7;P2YT9e8W_6@EnbiCqc1g*g8Zkg?S<9Krd;P0OUKYiq$1jQgaV+Y]QTY06^@qU_4n63d&:j_^pVq^k9H[CkZ:.qp57icn]^ctO*AoVl$VpqEpHFW7ZJeH$kbS+_8<)<Ogd)$9M=.\IM$6FLIp,hup]V=L%'9"BgP9;DN<M;F!*^/CNarkZ8FOmQc)>P;"jt0JO<`6KIN7uV%d/=^-jMAY#fIn1U:s.,.V$FELomh,]`k9@"fCsXFEX/0/*h'B0='p:HLS0CPo3Z]#J?hIn8+q+YlF/0M&*IgKXeq)5HI@psa"9p"mL@A4>Ej\#af,DK9NB*n[%s</<a_jn\W73?Dio5d)aWs!+#f]kVJfkboK9%K3cE^Y3Tp!4P+h;;6"Y!Z'$iME]4h;Ye]$2eirtQa<E#lCY\=VY8l[Ojc?-7AjD7lF`9(NP7YG5j:?C.F<`Q2!j<#$UGq,dqd,\00I9NaPp,/3U@J<_T?H[^"[A7N-CI"/&0IY4f#d#W&B5$taN)3UaIJ-[E(.LLp.pe^%g\]OuPE_N5LK9@?a?7t`!Mc+?7a<c!EMfd%S72u!Ni0J7Ve=I6OkU"59WnUS-Wlj(:0+s^6Ll!1\C!X[18=m].uIFAh9$m;;*&(-gFTo:K!5Wrl\$p\:0GOc]"=NmN*7K^4,nI5[DU_s67ELM4Sm]_npokRj0_Di+$\,U8I7,no7dc,IQ:5OAcq$Yh)]`NmJc/ECZ?UJ2mbl/h!m(iY"a$Y>3P\FFaaN,OdO^W-98t9mIc7Xo6q3K\u;3kp\47B[)aO8kOESHTU9>3[4^Pe<*W$2iL.Q7G"uZ9$^u%@JY!?(JhTbB1g>;O"Q.+7^I:V;(q]N,=CJDt?1&pl0\N9eqL=G9c6)BFRs,\OUs-KhE$*qEHiq60_&okM-j[f'UKS$a,_Cs/CUg,g3gF`t$1uJYch6YpBK4_3+cMAM6oHAJ+R>uRqj*>L=a@-l!f!)b\A"*4I[7nMelltLfV=Sn[[:'4FWYPSs)-;)I.SLa[G@P~>endstream |
842 | +Gb!#\D,91]&H7^.J!_m+!j[3Yo4D0G&fbkeU3H6cg.G(n2YK2b_d<4`fAY.bhjM^s"Gi7Dr_O/gZ$0e$5Po]fM*5P2Y@g);']=?=n#eeBHl0f[FkdH8DW#PSGjt+i^g!o-#LMp_h,\J-@*ITG&%@G:R7`l%4M#*]*?MTS;DgX#^kBlj0*!q]6&HER&5[q.rkF$Hh[S.UT](jn1Mlskpi?RjY:qrE`IEA;^XI6%II"@Cjh'j?,9B4>V('l=,0[9jLIXRoQLD6YDPtA=#JgTGm\m>o1Z>!d&onC!QiTD4C'KCQ3b173jrf5s#S]4OP4JsuFcdMK(]oQ@`a*%l%PjE,iY<Eu5a3"YKS(s2>g#Z379$Jos5b\aX*OL\CTSmkdnE0<(/%/,>R3-</;?(H+q2$5@`fJiK#o.p1,GtoF<;2WiaX,XhV'H!VL[^/?m6pL!XDgA@@YVG8-.k8F(p9k.VPDp`=.J5"*AjKQPEu!r;HNeCO=cCcH$;2_kU6-L$4hk>Fg6gdK'SBp_T)I?fZ0L9`beKJ@?X\0>lZ_SaX2(=uAOBn$<GuYSf15[`Q8<l0\N#H%_^aa;_G"Pe'-)rUnnSA;/,5"%'1LokU61A-gH]Thsc0%h/gSocbZa?/'8N(ukJh/N(i37lZ"D\(s51bL6<$]Wu_[<V2'c\r0W-T!";j\=Bb/CTh&U=^8orjeTB!rHld!gHOQQboEXtUTIbhp%B3Zk(\A"+_\L$plWeCMmkf-W0Ms:aQQga1,I=qAh9LCNZ=a&OmphN._$-JOdoa_7.Y9FFFnt4ZVY_?_?jT_D!VJ7Osa?M<KHPGJL<7p'5WcA**(n"GsW-VpIQ,E-cfF66RUm(R@L^o'%F$A/N46Znf0)$!&SM*%*V#jJ]X!7D-6Q5Z!o-e,EcTOFu_8pa@noo3t"uQ'YGE4Vs^E$-PS1gc'tiJq>L8'^R7%"_a;bL-MHREk3NE>ZO0BgUG98-LZGl;f6Skd@rBTAG^:N"S<Cq5&!,IIBa:b4S]D0s%&*8Z,SB8b64>'%$nYP^Z4tBB4n.-7VU1R+EKP9uB-)bp5_d9PM$P1q]2Ht^M^tZ#VWeKiV7Ej[BS<N<AI9I3#cAZr!f>;C.qs)?`S;J:,smDW#Zm31P,Mi+N_a79#3:VSqSOr)]IZX[8"dC@iYd#2p+3Zf4l)-&c=X7aF)/`(rFM9j\7C>p@<4bs:HrE2CEID;]fQ&SYURtWAte$=7SGA7p!Xn0)b.Gkak=\TFiq`%Jh0r$d,>]toM=,3[W:A/)#g!bq8a$12_l$O-<uKW`]E?;+3u)Hhg)M(ZUJP?NXP?S@_%5#fp'1^]e445m8aCOY`61T]4]`fLWr[.n"_3.Uk2h'bZQ)X/C9D0JZKne4@"V@/1dD9I_UIt-tPiCH)Aga^PNd:Rp4S0<U^%^5?301Jd3]:6%?sRr1[jWE.4d&#:A.>7X<ZH,sME"'fZ^lN335S-Mu<>32#`@&HNQtiK9sWA6ssU^P*Zm0R";QcMY%!bkBlgWQ:&8"?!YuU$qcc_(<WF5#^WNRoB4h7+TC%,;_O:7[)GBf@c=f5#>QEW4CS*03Ou8^8kSQ::jhZqGK!#_Pnq&s.mZ;9Ae?X,'7f8"@po(DD%!?:iUe5'kS&e'?["!"r4Sq]^i_\s.MfPS<0iL^%qksj]pZ;_73!],(rBaV8Q5@eC[5_clmQ#M5DUtloX\pGV/e&gg@brIo`N:6Qc-0lGmqi0:XB[%3*.:m59:M0iqV_qgrJ.*P^X+oX_a/*6RD7fZ;%B%_<M9CjSDlp,n2%='kZk'Y8bJp%pYri`lP/CUO)UF*g(Im`nkD-#;+L]sqc94STF[ND+^~>endstream |
843 | endobj |
844 | % 'R169': class PDFStream |
845 | 169 0 obj |
846 | % page stream |
847 | << /Filter [ /ASCII85Decode |
848 | /FlateDecode ] |
849 | - /Length 1384 >> |
850 | + /Length 1769 >> |
851 | stream |
852 | -Gb!$G95iiK&:j3Rr#b'!fEkO-P,sETn0.0W5_*\0DN*u%5X7o*bsi=GP"sU,oc6qr@rJ\NCrk6WLb-8p_iHUDOW54sT4@:\!V#CpI^sX;EFGGi1Ub=X^P1S.rSBd;T!Rf'7M,F14c1QuNp6:eRL,F&;%TR;3[97KHR%!>/GhREkj7H9,FB9,JIdm/+6i>J$r`UGaR>Hph%r1ZkB&F08O9JCM8dGh$^gr'o1PjtTDqi#4L3dQ'lft=-K1XF3&-2Q-gQAMMC?J;O@l`t\[Zli%G/)0BAcW8<ZmC%[(*cPLg&UjRB`8W\[6M,Y)BpC&uX7j]Cr+2f:rqhld8[6qK?4.QpuM1lfZh>E(5$?j*)W5pib0?%KKh[0'#.7*RLNKC$F&FheZ6K_Bt)/j5&c)CkCSi-Y]n^-FJ1ARO6VP=XKHg%C6eCmi:e!B0bYaa'3gN6LDFD@FjGpXc-NJGhYFbUJ]Zl:ro&(SJ[g`Yna.j)S%G5rJCCmienn5*QJu<MCPNJ<R0*'W9@;oA\:ulkch*0mb#;(.`g5V=PE2<Ic.qq&E&Ve%R\$M3KXrW`:EFC9@Oc@YA"@Jcg1/+^B1gB-n#QNchS5"3C=c!GQo"j)ng@*XD#JV%1l'Tq+-4h`3ONRBQUGYlpMiuL76ab)R#L"BYe&Rjc*"CNUFloh%tXuP_tbU9n>i';;4#8>&g5Y-HQA:1*Mofk<s=;kbeAS[%D7dQB3*;Ot<Tfl#,5IF\q&L0]siGi?AFT";d.476\'e1Kd/ZK]t9<IJ?SC=BT%J`nu>ICq^H8IFJJqD".>^D3CcS+Xss*;)';bS<J%U+F">H;Pmtr(s7ftGjq9ol+3f/_ro$F#M6%MY0bs#p3)!XPa*-TBQ6/2dt.:cApPp'RN45"]j=[mgMY'XC\`t<g8*(%cE;Mprl&JEV7K-o>RYbqWnt2'E+$*nAQjl>bsl0c$S/q?!KDVtZOot5]ij*`n43[,EDE@0eQ]^U,,$.@"q@)7lPsB2jFNVAY3ZaQV\Mj*5Qo'd7rkQtr)Es$&_h+*'ND2ZC;9'!DU`7ofqdcM#pdbOlgjW*W@^NKi<a4o(N^[l>eeH=Z9_@bZY%UB@=1D=GQnRoQ^Qhs#5L^uc3\2jpDf\pQYBaCTftd!K#*:=8DML@+m:\$gW-NU#>;Lgn4uU3c9T841*LF(m%TAGTg,Zeic)U*E*PH!kR>LC*PC7g*tqH)AJk>Q%,jV/k)jDcV!6Kb\jHPq*T@5,jtj5sr68k^\+p<B-U)WLX\%og36Uft8[ND-$s0bSpe3In0]/c)UA%-<h6B*Lr8:C@SZM!"`jbOVj>sFtD9$aG?V">G]FA?Sph6XEBI%H\Ek"2ubDdK'#gE1>R:V*cn]g6d774ia+%u)-jT~>endstream |
853 | +Gb!#\D/\/e&H3^ns5?d^YWF7j--NT!^`TkZ/IH#Wep-S;Gq^Y)QJ#*/8lBZb?b[gs.rh%\Z_7AA&4q725()e>];#Tor:B8rScSaDJb->lGWne:i!!uuP:Ll63Bd1aHK&f<%O2f##&Z(476'H%jL8nr(ID_%CRSKA8PW'-[]<(t:Jd]ccf%>Ia`)h46q2W9b#cqakQ4.<o,5Z6RA;+e/>m7:bt1Bq9I+`8d@KOF="e"Q"X^ug4Fd;4.Hn>ATocpc`\cJiKX2%W`4X<-Y)-a7#Gi`ie*5'S0`6J@[*K.QZ-;Qr&pG<D,rZjapuX.$h+bGB/[+>lmBL4lAq^F@/6j=%@%;h1nFssR5hTP\,C=c'Kqj2<4WemSGWdkLrP2hT<FOr/DX6[/<Z$RHg\5#p$;'\uHHFYfVr.-Rb><toM2agR5MWu8N@9+)O"2@\&9h*JdEDdWFDa*A0td]B`9eFFU@&#BL8l)Sq5q8_B`>V^V9!&M'H'd;Y,"ZOY\ih][4YdVT<EoA#\RjH'3E9IS4LoeS>u2LX=2Y4aFAc;1I^CG:!Uu<B>n%-7D:S*%@'VOMQ`^QFA[&\W'JV$faA;=mQ2Ri[/(S>-u=RN\CYM_;lsFZ8iq!9]k2\M;UA'O'k8SrPt!]?<TDSL<_G>X6:s*FZ((06a=.[;8(0Rt]*(h2`7/0iJE=QQ,1&T".O6W';m9G'M455KX@S?W#o&W\DWK?3ej'diAlbIY<F4Wq"a0QD9b8=oh!?n)8`upLm#JfTqEesXm>C[s"*T/QR;fojpbDC4L42j;QkRaq5$3j1TPj#ri^)CHDY<`'$3#'e'"K*Q2eq$Lei^Xl$6aDUj0;[+C/7*NM5$>1NfEiWGN/;YbAkjZKZ7RamPXRf$ek6_QYQ`C%$PI7(9E*S.)fZN;[)T8P-XOi_US]-j'3j<MCPQjp-qZZT3XRg>5$2u]/MrWT`]LlQ]9!%%"gGYnU\[cisOmsLkARJDHZNJ*aZ0FP8e_90\ONIE(&4/^*aEe7mrgGK9&\^':]cI,Lie;H9#KXKMc6Q>Z5aF@bmL5[-"-$hcA5i[R0:$gBtt`B%a;'1_7(lDUa2\7!/;7)X&1R]frCr^u&0#>f<QA,>.*Y.?2Ti[Ik!aoV3Y*fClc>&!$utS#hf&ZTWM,'5JXk-C1)0Z]W,@&M`]0:`+Foq[(!ibL>mR@='qRjG.S5N2&E(]_7ltB1fXBBVrg>Qtb<tD4oH%%=\Q]i^\I@r^C6X`T^+5)$YU0j*52[ErEha?1W&gEKu`MDkC1\]LVp>pa`iSJ)Ig"!a]rB'O8`OmZPif-PI+MYg=K#H.ZJS?5M+%EYuEF(!J\5-5.%#PN?Y$R<DTW3ErS%nsEq<X:/Ts1:LEII`QuQ7E84ZG%i^c5A;J<ZPD0'D&=>:QKJL6de,fUR,qd05YSIe=Z=@[-49fp5Cbc`S.r!a7,OmF2Mj<*I^1S"RXkc"8ZA_PgG\ZXWUO0.oGQ\:+VULq`INVTnu?,cN@Ej$j6N-XF7bMT=IEU6`HTAEet7a<Dt8S%`k*KfVHo>m9XEh<=`ZllEJNJUj,cAH.:FV\Nm00,UZ7On/#M/"`k$e@f;4dHCaOk>(2,?,(8@YEg&!Z&'Jd"ZLWFWW%BbJGpJtiYW;GNGlijf3]q0[\2a\[AUJ8a[`mam"mGa#AE,kgt510V"BHB5ac\'Vr+1S(b&FR]>Cl=Jo>tGI)N2q>J7n?t2]Q&iI$uiuW6RukLa5LWC/jJp^0XTFVG*Zp.#QsON7DnB3J)-5qP5~>endstream |
854 | endobj |
855 | % 'R170': class PDFStream |
856 | 170 0 obj |
857 | % page stream |
858 | << /Filter [ /ASCII85Decode |
859 | /FlateDecode ] |
860 | - /Length 1465 >> |
861 | + /Length 1614 >> |
862 | stream |
863 | -Gb!#\>AN7g'Ri"959(G2S732u@S&3E+`00BOD`L+]2+/:Q:BF^P"(iWg$uiGR?;kiFsCN3\d=$\SiPD@^@-;_R,G/br^Jo`Df`G"Z,(TkSq-32*mAQ]j*Wh2)@l+GD%K#fSQ_4r(?1qEi2:of'/"="'TMR<+N)%6//>5E!"JAifcaH@b]ECf5c>]VqY:mr3I>?A-k<*3CDKiF.><87>X;+bb2Z-^rsSFj9d"r!MT,)rYrnS%S:I[=fn&j;FVA4Rg?gLR(^XAdTe`p\1:FR@,\&Q+>Y$OiYATkBa!g+jQ-gCf]FMoh/a"OHNb*H3Ukjk`@8-nu[]ERs;AG=']T>r])T-S'=Cj%+Bskq>c[<q%g7l\Q[-;:<^Lor,\?6PGjiqE4Tl'W(!Fmi635dqZE`slc$NX-3/Bm,Em4`qF$@>Den0b(>-n<bV,\`R'T,3hGKpXpW:Pe?2?3iJL+L4KOgkh?h*N)!qh>mkFTK=-?`PHZYF@Tg?31'nYG<!%hi"'@t23#A6XJ0VL_)nP#[cUN3q.:N,.?hOc;FG#VP80!`X[A5T8Qh:pL5SPR,WRbtNGj*=p7s^[/q?-L]Z_e,X"n3d$D`1_X@P&rog(**8VPlY6#s>!'_$]@KPOJkh@"n>KqJufK0?H5PR(hh7*u_cgZrK!/^tQ)8LrbRqFko:^I$u?`!#WpPUq-6W\iFB&qNI?gcR&m!`.%T4'2;Q^)f[X_m0\)lC9;.Mre[61p.K7NEMeTVH[)(7eb=l6347T-4s96@9>7]/:d%12N@qm@Oe=T^$$Yj/8<$n[Q!_Yn-tgkd3_self-<onO^-8XNaU@?E2Wcf^oO)h<A3BAK]`ti-f'E,HYhGflPJ9(-Ko<n/Wq7U"G9Lk!?L"*0+dICT0L7a#t:.92:rDkg8"g_Vu>e1>TAI+imWO92g1BK2!`@UCtM\Ci;V9Jleue#WgD"UoKU=[,VUSj;>-@AQ=]a3s5Nq(P5*`2epOgq3'Z2"U0rk)sj(<OtEd-&X0)d9qT)?)7nJ85.S!UA?q+W6*!8]_&3m=^Hf@/)%t<uKhjST[cHnJ5r.nZ"P<$\;!Wo&>W_;4c?FfY`9hQ#X.f&$e\$kdS1m'@C?[a,-h,tY"Zp^W1S&XnBE(594KnL_[!.=YjR);Ns#c$$7e=?^s.AB"N-P$NG4Ze^:U1k%8ulWiEY]Z%BJXB)r%6%U0Q3F^$'(;.]?7?OL5XGJ9$21$0tr_p^,Qh\m,t+L\Q8uBR+*2C&&nk;pg?9fM(1HF-X.?2HYe`j/Kh9qmm32/Ne?`u&A2[<rU]"NIB$rm[@`;t&&F5]6]HZs5Ct%4eCZL/T"n`OCL(b2\ZL!tGI9r$!XAgteZD/^UG(b3hi]9jhg^521r3l+gO3o7BXd/Lf$'c_V`%;K!G&ShEUZIn3]9mcT'^i*%TC<G',XBe]*o`UHo_&cd+;>6L,;EpBG%_e8/d58rrA;!h9#~>endstream |
864 | +Gb!#\>>O9='Rm78s)9gCMLrF5\MR$CG[Qk()JOAM*@dX1Xk^j/]d.U%SX09P4a,786O7EQ5b`"tcfI6\chSP"HMD9F^L7K=`s=<dCp4os`F+%Y#G^bWFjt:l[p+$`FqB0gF=f-_#.USeqX%V9R#@1W7AG2R8A!D.9?"9o6A)=e2XYXn`>!_/+OD_B/'o=uJ3U1?,7]>)?:]qq+Vt`MJ7YQo`j;_HEu=i\UPj0+r],379r;k=[rbMAs.UqaGN.uc$m2AA`PTs-DTX2MI4!7Zk6IJ,"'3912"&#^+C1#+<-LbHN]VPq:6t"qZZQ"6[*A%,A!08k8m$iJfpH!5r0@A?,,TD``Bh`s<*Nd+"='+`9(Okhd_(0"6;"O0+@^@5^k=/I'.&^K&VJ&]Kejj'!_FYm>d-m>:lSU<isVD*Uf>T`A?@EIK)]mgo0Hd[9l&Sf?!pt-raEVf)XI=A*D)I)HZAS_(nY0K*J<fa6.6ZUIiZHKlc,KS6c?kdV3re6P6rJ%DJJij(uEX)*?>Jmj:[AS(gPC-4ol)cY^%%0(C]l*3:slGPWV,>rF"9JQ*iT9*TT@;oEY?WF?BR4I]ka^hZZA9LT[^I_Ws-nj9^oeHREKll`"?ta@Jp=iNW3OTj@A=p'KGa3P=3i5.n]2%.2I^fLKbEIjRQU\4b?S,&k^l<J*TpDb`l'Cqmb.AM;8@Q<`o>Ml;aOs2M%<Ur;#m3.jpVc[4ofg7LOT?7t[Je=bO_.QZc!RWG/819hHMZ0!<?&Q)fS;@-[d3Rs-"b.JplHZ:$[@QU%mo%Y(:#GhTq5e0>fMjMKcLf#.,:.Qta,+'n^;+@MUI<BZDM`V?-GYC_Yg_>X\9ait"RidYt,P'7"iVL@s["LcR?M2L.\h;t8h9R2j>W4X:R+SY$LT!f%nX?fQ"?blW:EUjMnA#ofT0Yh(KAdD"7*1'clr%mC4d)V6DhDGI"9`6;N]?3%(e-;.JQ5DVNSuI4b!Nc'@OSOnVCoB'dXrga6I#$L0@[RIG&B(.0-ndUMX--&4"K0%1\ehm).o_ZkXh";TpAuGqC52Rn;K\iCM%*Pp[6n#+:G9%(!_V3<_*pqEj<9&@FE$G65+(P4B$a)`e&!)>jRin^(343T:j9MlnaJ`/9kpD.\>t,\@K4QY1B"'DMH_o,mdu/.9!_liMjh2<$jj[ZT8Cd2_U>IY"*8_XfhC2BdI8DLbWHAgglOe/8,er5t1$,K)d[)+X>+_`)FYlBQ?_G?mRD@UJ'X2CA3P/<`._&7pmF([&_Y;V92WC3l1.#\n8>#SS-^U^gt:QN$@A+.f[:m01sKAF?qs(@D+.i5&K%3kcQ'V<HWEICf2Cc>06*9,tL>!AuRW>iu0I0$(mG)L1Y3/C*n0[SH2#Hjt2TCicqrl'oc`?\JlkaK`'R-!$N/1L'fkSb?WpUE2S;H8$rMD4tn6t]$aYRRYn]PAG88A(QUeQL1X$fr0,AQW#\\:1Ed]lE23MGh@I5#%.er#=hPj4E\q_h_!6=R]'K8NK)Id!^s2g:pdns@BGU"Ao<$giWfWq3pNLK@LjkH),Y-jWl&Ln-oPBl+;Wo?(SUn%F4\O^Aa-RIlQLC<P#0+hL>/Y9)8OL,_5Q13T:]~>endstream |
865 | endobj |
866 | % 'R171': class PDFStream |
867 | 171 0 obj |
868 | % page stream |
869 | << /Filter [ /ASCII85Decode |
870 | /FlateDecode ] |
871 | - /Length 1175 >> |
872 | + /Length 1187 >> |
873 | stream |
874 | -Gb!#]@;hVr'`B(%s5?RG:J.OB@Y:qRoKKoH/Q/E_bPIs2pS$#G^`dN%>2/;1rV@B=CX]:l<$7;qBq)n$Q_SV_NrafIIo-(b(BFK:iG=>N@9@FJq2Q!O$[BFXcYhl$e/V+!:dQ.gL!6,ETDc;u@T0:Y)^CL\=+!2QlU+Z5T@nh[(P]h8?!%(.XK'UHs"@dM0'?EUIlu$iDG'Tq"P-pgrMIU5r!_;'*S_GLZ!Z/U&3JlT^hjGgERi3OHqYN0YY,5u9#LpE<@#n>LoZ4Fq<%>;lD0%:j>oTa2S@ro)Qjj]KVXQNKoh%YXH]B;b%,g@EjUfK,RtcSNO@-qG8U](lEA;A(^YfnqWo&Y9V4sp\;\D)9a:t-oiL>"e+%/c]V*##4(VjsVu`[m_AkiN/fi^q1];;p6pdHf9.j._S-K\d+mnj.4:k+TE6Un)J5/Op!)LEcM,+@ub^2e2oAct"X/_,A*Ai"IImq(&L_'7,eIoG,VdPk<bijcf:uYXbh=>Uo4QVtg1Ac>HmZ)LJfRPUN)?V.cf3bf#bJgCY6Q7s[0%[.s&?PrXQH\L!$F+FV(7+qtR@HcBSjgq1OkX5>UR`uVF7c1TP?ff4o^KL&&j?`M9lH:J<EVRd;(/+%j#a_F-GaL%XS-71o>,"T<<Dl0`RWgrPq"""ja/D"l.1A6D%/"eU:_44B?._Ni1)s/LT=Cl?gt=bU.[hek70LeYEf_DK-ug.fB3)D(Uei0*J*$jh'k`)O-("u8Xu-Yam<;Jn>JF&7,j>:^dQWAYRr'n=(8e*ig(#J"72O-PpM9K&FH/p$I&%sI+2N&,>a&G&]2[;PF:9V&Mc('D7Q\Gm*Z>0;ogOM$qAn625F@?=6>S[Rhgr[\r.TQn.^%o31qMWQ*"='F7CQZ-gGZ^Nd!k['XA,?kQmL/P-X2l<buK4]]`U]0ud.2@-k02*4ViA/?3miW!.n3'O2GO2M16Q[.Kn3'R3P1?0&=(9Xj!Afh->nKs4-2kp4=@Vr5)kL#[H]D'_"8Sd'gPIgWp5lFe)F7NpntQ18?ZNm(H#0Yt)se.343q^CD8.)eHhn6Y)iHZ<3W=>+n%J$7/V;J_"!1-X?]5!%H=^(U\r337,(lNOt[Y'Kr)V[#ZO4`YV%YQ09W"k't[o2uS'*aiDg;cllR^St(2[NZ:Oa[O*pp(N_$<6t~>endstream |
875 | +Gb!#\?#SIU'R_pus);>"3.mo\UdRcXp94u^&0P]#e1:7N(J:E5XnkRZW_N?U9.Kp7;JS%$e2D,1+$A`WqV7i=,&m2o[GOO^nAbs?-3t0;f`I8uGVHa\^LkC"_f1-,pBDcD^@/R?'^@Ej_(Sa'(UYZZ;EUL*_1i'$]iAU\JHeL]%OZp4W<mqX%=VuNDd`3M_5)bMC<8oIhHe"b5FDE'ZMsf[fQ/(gQPbDqk$Xg,5,r?gl_GtTV3oEk$D\;[Q-CrmLOjloZSm<[YEU[_j6@:.)Eo67?7a)=Ga3<c`>CG=QsY$4#.Y62)\\pR;aVee#q\g1I9l@RipcSSM#'cm^+q+5r<:oS%)o&HX5^BW#h2BC`H_M.&DCKP*CBOoFg*hfH_2AB&/6(iHXm&alnaDMXN4>;C&s6i8k]jCBOE6/WM!Q_ZE3YN94o96q6^1Y5E]T*'6/A6!PdmI^9<5?=R6`Iltk%Fe';nr\lc98qkoABKk0Ge2UUpe>4dPr"o&/I0Krh\DoqZ<HQa%sfcKPjR?,]3NSP'VptdHYZ<'']j=G]+8+qB$,CaBOQ#tW2HPYK%Kg4B4^#1HSdIZaPj/7%MG@\KVrH7mF/]:?N\mo293R!NdMll#C"I0!:no*jNWETW6pXc-f+cn*3JNn%X1#(8KB1>FJcbUt8%BTG;0!?e)f`,n_ifeG&8j^DD3b>c=0KBB5,]7;O.!,3u.:Y!5X#jAL1hU_2J0SOP/s"6Z%\aWHB!4]PVVX<m-MAXANqoa^4[*"h3AiLbl:;$IqCD-WK"-6+2NQ4>O*,@O\WX!eR'p=?\^&M<=N5AuAGU\n*tLku,)\("N.GC2Lb0hJE^9`^L@ObB]#7F=^^saFoY$i)>R(J.rDhBX=m-r@frcZHFn_i9e#)%V@X&mt7GHgIkcL#)W(Vq@$9>3Ipr]t-<M5WtVGCs[k(?Y_'<,<&`e'$p#H"5U=^4'Th.0.^Wn&"j4D"JFVk"EHe7+tce\ad%onq:9l#]K&&S/5tNg:6NeiT$$PNq&[)\!p88&L?lHk%`"(`38Ye?5Pl74hS(qjV>6pS3Sj6+\4uf=TEl'ENq2>+(pn)VqeiHc'=fI<l?HI)1M>,4@keN:sL=7+A.3(jgrIZAJ$QnsO'9+Or:>C,&_?Y8\f.Zq.6="ao+c_P*8OD)XmeQDm=VT=gOJ$jYYjYe/jA~>endstream |
876 | endobj |
877 | % 'R172': class PDFStream |
878 | 172 0 obj |
879 | % page stream |
880 | << /Filter [ /ASCII85Decode |
881 | /FlateDecode ] |
882 | - /Length 1016 >> |
883 | + /Length 1030 >> |
884 | stream |
885 | -Gb!$H?#/1K'Sc&Yq%)Y#OGr1%ZK.)'D.A2a#$m^V>m,ag.u@>3c6S[Xs*fi0[nYVr[YU:a#^3Gu3IWr6V,p.ERkLdkdh:Tf*'Sa=J2#4!J;?^'5(bN[n`]^lKH@:U@YcH*r&BPX4lar%$d%"c/=G'O]3pe]7t,lcgl+`M?uoZdJeu>;1`7KnpBfjXq$\U.M5VPtd[QC-c#d7u:g3!jZ^=KrrX7lWlPb5b.YIL;mTYGG=9Ujh!mE%PCY1D)'n!!(4O%$6Qmc:BcQH_d/Z.^OlbV'q"2KM906Dq;1T<7d1gJ8`)3eBEX6^6g&ujS5KaIG3s%b)&;?%\TV'NV2qOUD3LG8)P]ad"ueA#^%3>`)lY.8ou5jt,r[.d$$p2=4A9JGbhU0X.BWiRI)@n(V-&O.1cd*`%Y&6a3hMYOO=;HC*fOs1]I<-q&2MJ[SW*u[R8:g=oJ#E#Q.'<5H/024\a\Oa9r1EB=*%7+ZA&3(6T)f[I0>Hpl29U_%PQi5n8*-P#Tj$fYd#i\MU^k)8=Cq.OrBBi6*8/r.+K1Qb:d,69.3nJQkNC.A7"@XYj3)J[jcC9a)AoZFR&Pe(Rb/>-ae#Dp$_E9_]("M]tmkYVBEHtf<K-]^=^aMB(KcmhnC9=%i(7!n8ehBC#iR1KY%0<jjB<<0)S7d94jFC?W1C#V<Ka2CKOc*I]hjekM=+`'*f]f*f`57UYKlU-jO-^Sc(c2J>647S[8nV)-/SC,3aL"\m%VjtI*8h)RS6=H<QF)s@*jUC&KgBb[`OE']SY7%+oE?aLm3,(QI+dbhTZG!+FiI=Eqf;OT$OSI*R0,"Y_Lm!MdWYhf^qtpg@"KrR='$`P-K\q'[M=g@iPeP&-a'RQ'KUj;_@ccG@-X((JUp_6,f._UP%Qd"$rOA-2lS0kHrim&@k7>!nI7+?h43Z%TA<3qnWJugLG<<[UL5UUaB,$P<]cURZctcIEM*&8Jh2K4^r'"il/BAYXq#L>(DgL^D\gl+/keZSr8ODY4SfEnmZS"~>endstream |
886 | +Gb!$H?#/1K'Sc&Yq%!_M+=Y:9AB>q,gVsGM%(\>5]*JPY<YDUES4W"Srqe-^Z6a?(gEL*%+P=LkkP4$"Q!PD\Dn`1L9hU"\;g@mG!Q$Nr![8\:kla1DLP,'5!SUfu`=Po3q/I%:0uLinCWVp./=G'O]4R38#C_*#>R^obi-noBJeu>31`7Kn[gD']q#j0nOf0D'def18c#d7u:g3!j2&hTbq@0;<FU_]LPsKd.G:g`4;[#=e!mE%P93?5+bsmR,b=fpDB!_"B]RoDRQSQlB/n"2LOt3\2f7p7pH@Q:s??goe\]E<Ic:+V`C<pXA35.FV9pea1rr5g3(j0cS[SW3#;BKDZ";>%?7QOu1]q$1jTr<>$2UY_aOVN88ehcT9G+Gc_#eN%"""5"/n(cJjekDNgHRsc6]Fg&Dog+.CJfQ9/*_TLNbN[G,1lD.&\hq>8<-O+olO9L5l@\<K+E/I74!r9SU.ZoF?<:8S*#/-5F/^7kdp,gDXrf\3%#O".kUq\nGIkDK<I2`^h0^D'l%AU@6JP/9g@-q372M@839c(f''!/c8ahRa]18Q/\]5)@U^poS`"iQ[O](S(*n`AjLb,Ws!tNhtV)<9I'T-.:q0)mG0Y(rd%:\;H*&,2E-ER^j;3dF-B$R?@4b>5$gA-$P`57fto6;rXr0h[U/%P,3+r=K`>=DDHXW!O>**X7;#CJiGLXsO:9.!WS1nU7f>]PsIeR^bXeAAFMJ.l&[Zpm%Li_EH;`Dbg,4WIhFL+.8V-u@kr*3erbbZ\d?00Ph?7Y;<]kB;;2.'i>Y*RHo'"Do(_Kbb`T!?GWXg02rcq#IT%UVOah3FILkr7aFR]e@TH_ei9Lr;(\J![oZsb:iE<HlIsh9d-[A=qmR;;pqC<r59YRIZ"gU#5)17]RP]WO<VOQm@AdL1qMY89'Q^e^t\0NE3ipA%RV=s-CB$L8AjI)ZAqedKid=C;"okW9CL(_i\615be.-u9;"96E)]?]rE$f%;6K:5,7NnY89L56'@@da\S2ljIKM(uT&]~>endstream |
887 | endobj |
888 | % 'R173': class PDFStream |
889 | 173 0 obj |
890 | % page stream |
891 | << /Filter [ /ASCII85Decode |
892 | /FlateDecode ] |
893 | - /Length 1017 >> |
894 | + /Length 981 >> |
895 | stream |
896 | -Gb!$HhliJ&'Z]**r#a5-&mYp@L%=9<D9J4rEJ_<f@1O]^@T@TF\@-"]s8<;IVK^dk1m4Ph!<_L)4un!Nhh&Yo?W@'&"i-T1?G/jZ0I0jf^>hR9LNgjboPH]Wk@;C86:)YNMBdPpGk>GgfX;It<JkW/<7(0VXUc/YnONn$cLV*V,"N'3+bZdd&68UKQn0VtKM@jU$cWo]=iirZOn%7J3ecWF,VSI%55e?5mlIso)=F[XaE85j59%%b4lr0'XU_(!QP7L3m0ks+fF0Z;dH1#gq3!FOquMmFXqUFr7NP[#dCb$?JgH50'E*D36%liDXYCS[Ki3$EE7(.2.%&_TRi1E86FKc!K'rTm"!rQ1pM_XZ!u7!$d^iZ.KX+W$?I6BFHN8Xpp[0mB;AN7ik"+9H#gu@Tgk56jO>+DZ\;a[KO>%Z+jH9N;+LrjDQd;CB#(j6T$1YnV#VPY[*X)3?jf.+F2[YFs+Kr`VHB;4a'C;eED&iI%)M5!cU"=psC'o6`R.rh:]VK#gHGB5#*eLKi^>FREC*pSE9#:/U+q8l%a$UD<?[ImhMlM0S7Jp7B+\L.(8Y0qAbA(FKP3uEk+"rY0TW_[4@Dl@F-pbDfWF@@uO9rp*-G)tK?>/<@H@S@6]N?\S,CeY5GJ6]D<9TDQQYLSfV]SW25$sOmiQQUUK.RM"0q7J8Y1b^!K.Pg2mEskE_M*+tUGDLUd5X+kE+M2Z#qRWq0qH(*kf,\'0Hq9%XTq=eKh)"fUUReJCe0pm?TuaOe`\NTQX>\']GZTE:;O@-AZ_Mdk+uU#1CT-m*80_k!JM:iXHg[]5K^Y_LVUc[ot\DQY[=8cDcc6s-8Q#"/6l9f:lpAI1PTq`[Ub'1[4l1$`tHp?/.?j@@aln#Rh/BeW8E9djupdS\e%6]\,`(BEmG5l:ij4&f8C/Yhb;=^TeF^bZ1#U3$*Ico3^ulr:7eRR*nLXc5%m#u)2+V;T:^3/&F;D:X<X;9bMi%mY%i%aJpLFqcEbe/JWM5q%HGi3_'Xuj~>endstream |
897 | +Gb!$H;/b/B&BE[jp^[$RM,l$_*SX0Z[RlrFW=Q)R,8)cJ5dnU>N[q6hIO6?m[*tOI=:7YJT]GP9EW5k7"@6^mW-uo@J57&qs+15ZaL6Ui5Tm[kce3F2CH=bZF5mC48qSfh'6DE?nnt/>[T4-p>&4sZn`_<8:K>$k`!#G0M\lR'A<k7J6ZPk^*8fYiCcR\:D!Lql&lNdVe.N\%$FsBtgd(Q8ZJ2gBDf<c@@=X-!&O'8^0<5*EfSD+qL"IqhN@;8WfPo*%2]r$)"f;;<!=TYHm.rCC=Z$#@O;lGg*L5ZY"U[n:OSjSV/4%/m[4db6F/:OpbeXE`NKju`_].20*K#SqY*I;8k'Oq:Q]Po%.uoDpDd<l50H/fS<ZHH=2l0X<Xcs6U'c+f!crc`G%iX1gflL^KG$$#nKFJ<Kj"[JaA_;XhG$+%p=O*"GTd1\3hU3hCTXQ:"6WXgfaV\!CL62_+4Y_5g1!cO+H='l6QR'Zi1mc.C5Ku'^'`)gB^^urp6$EVYrcIn-lMR/D^\(!63X4gp`g:q6hW>sOJsSi8-;)`A88j_PGd?1.r\j%*#u/a.2i8WgRKlI7_5pcg*OoijNHg-l#]]?L*e7W'UXg7&jW%c#JfNS"oo\1^_4C6eEk,O]M;Z=gTm7ct*"6"H,3O;M0aB#+;M(m#:\+Q4E\M/iTtJr\H_XsRS*#8nkhsaf9MA6<PD\!PT[^fE?(V4V*UK/YK:u*W>,[e`jHcj;FhJp[@*1Sc+V&[s%hi)I[1[)Z1d-12E\M#FGT[4rB'8\tMYOjt9%Bs-P-U09f#N?DC&$!=J5GIfaf`r;Bmj+-Y00<c/t8#>Yqc?6&i(8_FkUbPMaRbCHWpVs2au$_`Yd^\#FP.iHZ?!L^>j#(\G-F*?)mMCB3,a?Js9,U)+1ed9"keX@L^T"qS;]pk4^qJ,+gW_2T,qNNWL30O\VO6nGOQ_EMR!DrQD.aZ7llAdT9coVNX4UXGUi~>endstream |
898 | endobj |
899 | % 'R174': class PDFStream |
900 | 174 0 obj |
901 | % page stream |
902 | << /Filter [ /ASCII85Decode |
903 | /FlateDecode ] |
904 | - /Length 991 >> |
905 | + /Length 962 >> |
906 | stream |
907 | -Gb!$Hd;%Di'Sc&YH%uK3OI"g-Z6\2:gVsGM%(\&-]*K+i<YDUESB:')^AVS$?CSCQ[YU:a#YqUa:-O\fSR4_ARl>(GP60\@'&J"&J1rN5J;?^'\U]aal/_#LJe%O0&VQBpIM>:ab]NFP6A\F9$Egd-0=^#jM;R*g[aU'>fT$=VGS)J71IDFF4[E%s?bgJ8P9m#9E`37C\^!eRPua=.Y0P=#q#crG9b(O&Ud9A=%o'tAQN]Ot!mE/0)q].uk2L-Zb%*B17)#(AjFrsgau*Os]mVme9Kb-41<B3W.l,X],T4p43.8$8R!R0[a20#W]P]g9<4=325?C1N;RK?l9F=qJTb(5C\"]&sA&BhM!?[2R=)TIY)gO$Yhsr8MEFhJFM!E/9/--\r`X]4\1q\-]@hCKHI+qPu0>"1Xi>C(2`n5k=hG_gi^)^6,1^qDI^6E%2inK'a1fsO`@-1jkX/ZgD$-+1*1^Hi)_B3f)<Uft1_@3T#l6(VOi?aDVP8!Ef#;Ve0AL6cEU8nnt'TGC[8JjG6eVt.)UYZ,[62A^*cWQ\D$0te?-C)q2k=4JdLb'^fJ]M^aR8plX.hBJd(^--AB6&<L4[?:(f-$*oTW^Xl@F"`Cr^l]L%I!_Bd))P<J3ki8=`5_/NG\%u40]>)KB<.A[d[kAZ'7\JcCeo<('a0u=E&(ba806_q?5cu_N[&g_CW?%?RAQLU=qWn?(#lQTbc5'!M$sBP4aV%a9qSP(lU'%R0,.WKdCfP7>G=[HZj]j.(!r'%_(X5Z`n!NYRh2#ef2eR^"o7+o^)*E?t%k2:dPp%Y*2cDMY]>(jBG`qdrU<`P8:G;Ds.P!B3M82#O%\YmIRa5S<sG67rr-kg[gR5dtJXUeesiXB:!(7._XbUG^&Zq0#^:.+VXB"oRkNo'/*s^*QLuNN1@)b4Bk0qZek<7RW"7=aLdiNlXKr0#9FAE8;H)Cpi\Jqh.\RolkD=`>aU=4fqUb@e&bsrNg9t~>endstream |
908 | +Gb!$H@>gU/(rtMMqAgUoKAJSXM+N[#DAsN'3k4!nYnmX8WbLdrYtOGlqt<[r3nbOZ25crr'O0jd`ubhAr@%g*^/=is'EE&]Gl7XD_@S@$&W]1>L\L=\nma^Hqu;Bj6:sD58)3MgS\2VdE`qZo<0^.\Kbi-o?iO-0VA!1<fe6akEJP"763qtJ!8i3s_sDQD8k@-9>=_bN.Ou7$8nVm]HZ9)V2i(hk4ad7,%H;`ECE*910'I9k?sfm<_H)(djY(bCXG+)/DeDQ%b=gK)?<k<9(t7=UVB-TU)ru?^0K)h*PuonWG+7Zf@1i2-o:o_6Fe@M#BWA/FG8M=>=SHMNJ.>$(kP&dRV@pI$*h>s.e[7Du;8Bb=o`0q)l9<;hAb7UaLCLLFe^mT<>JNdXe\8[<Frt,1qkcV'4@&fkH"l?WGhA-lD]fJ/&@Ib]!MXb*DpA,P%O<#]Y0nF0+BR/]V7F63;Gi8t2<sR-:_4^9S5MQg+ANk(A[-$K$PpVT(_W'd6&u?K#YWcH+Z(+TjX_QcJ3;XDg#t2*QmbhQ1WeQg$jfS.MY*OFHST1XP>(%C"t#/#0a)C0*Am+.(3=D`pjFNt/p.7Bc]hDj,o"cEZ'$L1KFVHL!$CL!@ScU5p3qgMP7<$G4)!91e?HV,jIg#];o+TKIQc3ggH4C)-8ki@k29MC#[r'ee3UqU^_8]KfEi?VdfV=J&?u-s&GlqUeu&bIa?dW<T*,ihB\7#0PVRZ/D#uA`r+XL'=dhqdMgHBi7TSoi0aBWV!"j44ZI=UbQ'ldh1Cjg4ghZs=a?dqnL#S]-aELIfrorq+bsM,_G89D@,(Tnq58D#Z1Qd=_64@;_"ErJONSKc0RYq?^\c)jnE[eCqM**>;YW'D:M\p$G20<+K(CMnB(1=S/NC^e<MsnP-l=&fQM6Hu;!tU00V>Y<mHoYAGG>Z1YIFG-$jk<`<arVQ[9IG;i[KDPg~>endstream |
909 | endobj |
910 | % 'R175': class PDFStream |
911 | 175 0 obj |
912 | % page stream |
913 | << /Filter [ /ASCII85Decode |
914 | /FlateDecode ] |
915 | - /Length 1810 >> |
916 | + /Length 1647 >> |
917 | stream |
918 | -Gb!#]CMt+O'`B(%s5@jk'kES'R=TXFrR=jeW=mTj>GU(I8<K;pi5T8&D,2V\^=Sq],`Mk)THt*O1\SB"a7n]3LE?HkmPW5ihMpL=XUfj\iu.UoDZJf0r&$Z&qg*_Rf43hDi\:"NaY:Okk@_Qe.lrkD-cXO"Sg\W.eoO4/r;6s(RsFr<]EH57>)4?,"qpfY"PlXN8B>=Fk#<1,QkZ3Q@U_O3]S,ek)#rPSr::S]6-fr4V9s']KMP_Nra^*TRMm>jWMgt]4m?_(B9UN.f80X(2`Lh$r14]F?B5haq#3ODP,a]*$9/\ua=G?2emqObkn=Ln0DYY@M%Y;f\)"'F;+,(m%"1B+Wi/IfDKO$W+^;pBUA_e##i^O:r][tpS5MHV\J,S=Jgc:gFKoa;DkJ4V^J:dNmI/FmcmJ8VpYVOLTd%BRdn"!+mNbL[5(ssr%YH"ei3bCrRFNrM:)M$LOHIF/3'p)PeBs"!o@.oc!7@(g9qt"%$<]C]P;S?'c]mWt;grNl]X^b@-*\4)@aJ,^ONMMtof/Fe/!=sm[bfdDp"4.7Z]`dM%"9BT^h='58A)HU5Cm8075(h#>PR\@jf-HQ(^ZhlhMlu*YJ;u"I&7,)$>C8T_&ZC6AH=#"jsAU($b-BBH$,8$(Laj^klRb@]XsDAL6E5'X9o;.J6<Eas4r[;@"mfcp5Nf82.A!S.g;>]MS0FrWS7b?K5,b@#NGuA3>GL*hVp%"a\kQ,")N]G[`64LcC*%`A7gCZ3aUtVQpD*e9;^(-/niB5LI+S6H5\`sK>6e'QV=lWG:aF?;\W+Y;QQ)as"h9Q!Zc-\8?pP*\0?PS$Le>OGYRR26T53pn,_i,ZF;&^p^;!e,ts04l-uMe$bHm"_m0s\lZ)&8ZTP-'6TDfsH^T'>QAQQe,YNb3=-/_MUP*?4>Jk.+=M"XEP`ONJM/(scNE_QEZ]H'#KQCBt#J"sUZjP+*IVi:JGHHlW4Ag/9.iKa?A:IV.T3Tsj`+f"%?F'Zd0o^8>D0!)O(p__k7Fu.jBr.h0bg>gun[9NO9PIFBYcItEk?GIA>0Dq1qGNV!2hs_&[.r2c/QA8sS82a#%@M?Fl9$*CcEaWe/rA]cNGt3"L9R:b&&Q-(OmC`[EQ&Vp8sC*X>+i?u<7ZnD0ZhuGZsb_"*1[C'%V$p1Zt!(kWTc;9aNeLnSPs%4KD..-;ema.YaGSZ:;:3'fLU']6H>,S3903fG5?@K8Sa+WH+pa>oCT;<*j4t;jh^cS/LiR@2Yq7U62Ob:pT@G^%M)eOqH,?\f4VKpN7%AI>oNh5\4e!RMD7Zqn#VNl7_aGgcK[R5e,f#oVY;][]e2U4r.8eCDW$Ec>^U"+_("N:6=Q4aQ)RNMY-:HJ8_HRK/oerH.pWLfYY+.<HsD'P#&%iE,&XN`&PXje``ebgRlQQZj302\-27ftVg/+N9]n!2NJ%JWa^XRX,n#HSb0,atN*WNiWe<S]9Hd>gV>1E/Agt-6*pCoQNKPNVY*qc01k72Um1SkRfKY(2<R=O%E3?M")5lrskU$Q>Vf7S%HG^sIUT-A_Rh5R<E!ds>59:m)`8l5r-;&G5MLIBAL%CEKp5\XlC84AQ;jDfV$BM7cTQc'B]$W.[8*XBL#/:rq18DEq<7Nq5/t.(-%D-e3]BeXXQJ&=GL-=k>EHG<Nn:[3hON$ABi"lQ;h^A%n*;=kJd!V=e@4Mg1*Y,516^->emR08`;g<Zh!BrD;<&^L0Ae-SBh)MXfc,!9eH,ORs+u^a=l9/D&5@EX2d6G[cG-?fUY?M6.oj]dRpI9q7JqHcucUB8_N9ZQH?*_e]~>endstream |
919 | +Gb!#]D/\Dn&H7^.J!d9YK!*aj]SG@AhWZMl7!61KUq;nR.[(^4D.6Gu=dFPeA!6n@d6^[)UFulccckFiO(USkL*?QMju"akI\4F+XUV]@P<%9ejhYI9InmSGVf'PX`eG(Y^2FIU;1pj`cEHtocFG?Z;Dbp3Joj(A1K5p:*HYE<\H,eE9F?^i6DO]OqXYR#dlufRn@1"t;ab2eJQ*h'Ms9=L9YS@(K>I'O.i@-iEgji^DGg2T;#pS@F:Ka.8PUAePR-n@m7Wno#J`krVjH""a5cr\G6YG,6Rui0(1(Z62(],3j:EoZaL@oDT9^V*Ru?uB=ptp93!k3!dVXOKheoUL@l^56;.NP1Jo:lj:mLV4+?=>d>ehqQj4MV!HTX;<;sT/E-5_L#OE^YcdpCm:$6JYWEnl-7_seXDY9,akV-^^.ECTLGBu]naF%F!YlaE.+V'87>SS/4X6%hAAOr^)\1A6K@$cuLI8ZQl[L^,Sjc6;Y&U"_oj72GGf;6ek@+,F#=e;!.Ic6;:qT%?<O78=[Q\=g?EjH1@#7d#kH4`!mM5LIV2K)"k$L#A\+8Y.ZZ\BZL#P/Y6Mm>a[!OE'+?KF[Al5=uJ6F/%k#3i%A5R*$c;a:1pYfNKE<5G:k785@8J).0Y8NMCrLGn!Cjjj-5<-Zj2WE9!J8X<#R1X-V['C?uTp\+cf?)4f-\25')#6ZB,GSEPVIXp'!#':QA)fm31N=!-jji5e-VQ"tpqa4\:RHGP986eS.CE-3+NmHKEa0^&nUj?hs=B'%^i>*C-8'C4r7WQ+W>Ss26`J`%7K)g@LP#NF"=gC]B2.sQ./<bfN:1lloJ6#l[GF#X*;]L!t(i[\#J_mi=<J3+qrb9`)R>Ei5O0An&d-oMn5l6<=X/5FU"`ndO\An[.+eTse1A"`=i&-(LG#I$\dMsNNj:eL@+E%GX4Q;]ohj>8bf_<8%*?>75$V6HUd+8`MG"d5[TU/qNO*8Tfs%l:f<R"SJ:;S:McH3;5&7X-C=4@;KdI=^f^nL/pGD8BS*QE*\s3U^`Z#Y\'N3K(.?1Ajr?>a?eFKcnQ<U2X6:1F1lj2WH+6G88pQAAKXp[tn@OfXei%k+'>J#W/G/:+u6%YRL,diR*r<#'*`Y1s+*M^;bMV1uVI:&&/a%WUSpdiY$#@;d7;s^_g/;\.!E'+/NQ^ftc>TQXnQF5tphh-e1R8^#(Z!F,XJFQM"P.j46Ab[*;p>0^U+]5m;aa=\TRSn./O*k6gr?g/Q7+@d,UXa3iJM<9p&l=Oi?ZqEl.UqSPE/;Jd2:D[>1QCNmH4QT[.t'eaW5*"(eJlX)/>];fn+O_02[8@3W@;*)ipUYijl&WQBDag2-DM#C4#83]F0X?48YN%(L^81dSZWB3#8["tk>alrEIgLQo;<'Lo@HRMI]6+"1$_5m0i[b85MU;hQcJ+,jq<[&oqT*'Yj^>[qr43^S.4[$AhJtmk'q8Z*!42JS<[glsjXIiUn_Vfi7KJ!d)Qab&[ZsWEGkR<@!12%'te)>Y<!qZ)B$hhqp^#IOKY3Z<!*=1s@!lO[qS#eh$1Ut!q"J>!YpV,rVCX;OP;;_]*I6=PM+NrH$`/c=:I4&hE\Z1erpl9,MU%))fbMgXN=SgY^"QgScM/oerk_Cf<%Gf<Z6_jQ/~>endstream |
920 | endobj |
921 | % 'R176': class PDFStream |
922 | 176 0 obj |
923 | % page stream |
924 | << /Filter [ /ASCII85Decode |
925 | /FlateDecode ] |
926 | - /Length 727 >> |
927 | + /Length 1164 >> |
928 | stream |
929 | -Gb!#YgMYJ*&:KW#Ii)/e,q(O_?[/>2+]:S&oj_=Zp,I&-Hd1uUV16g9';LdY/lIcL-ba/)k3SMBB5Om:Yk:"p!%q2pHY%is5[&d,R3&/Fpll\l+3)CYNX[3=IG_E+32.7"oI:GTEmZS;YXk-h`lQRq`R5T#_BI26^l0CQW'Ube?QeX+k:g5$>7Lh_f+#0GWJ\/-Q)NEu@PWN,(=G,[_tRdt4NhhAKjjpLiBKa3oI7!IJJ-LB/?pfDPBZm)354Xj!$5t"%*ll1LRLd@'IcoGT7.>@Vt4gso^.A*(BW#b-%Qd7SKMFJb(3^s]S$Zl\9PZ:S2VI,M&iR6M5..AGc9+!^8,-!n/@IN=69Los66u;)R`$o"kg.#jo.7Dmcc;dW2Y/='50:uRR4oMFcG9\K2X2MD;O.jP$6d4Vt]uD;Z"\#88\f;,&sS_#g&iFOl1J-Mn.8ckseVZ'\<G/$he(P>r+N'G:ien$2#sjVQ6-%JOQtp5)MKbIL1`D=PeN]XH(B4'Zf^&1G(hKcY6RhQ@)$l/%-/A$-7E<qZ2B,)=;0HiVo]]gk.RI?BIf!Ur&0g([NkUgs`[R=hSepnJm5=BO.ho^!SmY2S2m7F<HOOn>P"7)ETS$S7V1RRDCbH.'Us92t]qQkBLSYpqbE!6Kb:MB%BrdEh*fR4&XCBP'0dWhF'6Z40Ih$3n*e.%6%'t3K\._5u4D%ol7`K8S*BF)N<&slD,A8~>endstream |
930 | +Gb!#\D/Yn7&H6Rhs'ZW+:/5rnbWEOWc/#4UjAp09QV.7_^g_3a]6&8Q2ZLM/@OFq"RMTD3[Z%J"B-*Y4H"OjH3PK@:9hU#;)#h7X_0-sH_=fDji[+LE:FDd4'754H(d[B_ei[,(\7Ret@jPhAA4a/*fnr<US]o?XE\j8Z62SKR'gZ*!"!=8kIT6>R_CVHB<(&2Sdr0Oqe%!(@7!c>Vr9"^P:Ct8p&DfW=iQWsP0+'deJ.Xu!Z(>q9R7MNJjdKj03%-?rhlJJ,_f1"H)i]f+$_e>?&OfbY-1Wkr5rcY=;W%aDV;U@!PuU,8L.Wl5P(GTCOmnY#/I5\<KAKKS"eLkg`DR7Ic'5LD0^I$nn.fl0!Xp[@<1-/Ym_.BgT&Is!8AY_2)'6\Fp9mS^ic1j<#A\ZZ'N.<Aa&d2G%5#A?>3n"LSs&Bd(1'09a9e&d<3gWC`/rD6hHQla%H^\F=tj`iF`o-S_`/Q=cP.u%^C\J75rgB.>D`ZWDaf*5?uSV2n\DP&XS2fIPagbD.BQ:r62tCY!u#a&`*trCifG0t7/0X+5=<I=_@Q&5RFt18/'6qI8oiLb8:3YgT:KV&`,kcfBIb;sJ$4ukhQ/\Fs%GQX/%0L'5s6,&)HJm0%Gi9K;c-7JCAJlpCmsIgd-P?"n-h!AC1O5N7ID$-<`5)4&]K<t)Gr"N61d5EXlm</&6_X?e_P>uF/.VYB0F9U;.lB_ZHHeC/d=-nS1O'+^1m?K!G3Au=b`FE\;-aXOi)kjb:XnPAL0=AUWb?2<0rac4Q"(qQgcB(rk!VCBAV,i6fC^=Od)lpf+\^.SZOo;mdL;#6]%'PgD0?$$8bBJNi2>,8@9BFkbZ$h[F\kP<H"gRUhOtT\!V+Yq*\.u%[fR9%9f,49F+C'oEI/*<phrIisOf_;nVQARQel>o=GZ_mXW#5I\F@HJ:?7Hd;A(^b4o7$d;nCP]'Z]3\DaA"\us[j@O*(qOdlR46j).Y.go^%lf()R7jT"06lQk932!$iU#HH/Z]l/`ilL:*bX3'\m(%CtiZ'#5*4Z@r#T&DR.!.BE5V"#NOsKO3FTW_!:*o!N4Z7_qg2fAl&bs1@)q*@e87E;b!OYQ3h&U+RYn>i;hQ'A-1SSYFTs;!)YCP@T^7<9QK"t'h`_0U=GRO)[7Dj6<*V6\5f)~>endstream |
931 | endobj |
932 | % 'R177': class PDFStream |
933 | 177 0 obj |
934 | % page stream |
935 | << /Filter [ /ASCII85Decode |
936 | /FlateDecode ] |
937 | - /Length 1059 >> |
938 | + /Length 1051 >> |
939 | stream |
940 | -Gasan>Ap#k'Rl+-s)9#_.BQLf2L"#Th2SjCG*OuP^.&;hN4XUsm7BA=^;n#o)qkWURUP]03EHOj004KH/\q6'(,lpUK7!hZn,g[LiQqGmiplSk:@H1/_u]Oo,YddPn.uuAde2]*!mj(WSo,.$!DOOT@h()aSfcui!dOrNbJ"cu-,78/hSG!Imbs(KP")G]rfY8N]mU"Y=30:9]9@;2dc]RQ($8#Ka*,=+heB>n]&hM#lAfXD$M?_PdtjU=ocq,K(QFkn(aLJ8i\Y#U\lEkW#Ud"C9&XXAk5#BjmDN;t<E"q[0LFuTOp).HP*te!%7jQVnpdA-BDtq-U4SY2/LW2dg$o8mXhK\@6D[:q%I5_OcmWCJa*s]Q-U*\EI.T][+"7kR8p6\ZH7dKn\*%!s'lpb2(tmHDC=G$m)I^9]FLFPt(DJ*ZArL=QI_eamm1l]VOb9?'!^?i>)_j!n$ksSP#r"ROUPtuK]W8IO=r">!lCcqoYL^?n)^s=N[mFT/KXG#t2rtrMeb2N\4FeC-Q!8Y*,kS`&EZc_ncnP(?/>OroqEpO;<cjX3G7k>l1C'B:0V\eEY^<[;A\h$-5K-#P>s47;*)L?1KF.6CkJF#6.khUk$L#tq)!SnX%0\\XGJsC1#`\KPo[4^nHpekTM6e>IJoHbB^?&&k<d_6g1(t\e#2j6QTq=@#Z!(Ed!;8-(ZI&M'&^IZ!,A\>[L`L&U0SfVQVCf$?.mu61\7:s0%aKX)s-#bi72td,EK`_Ajg>,iT\gKgqdp>gE6dSffT:d5/-n#nCiHMfLM&QioKKujK5f`fX)Q;)&o,f#4k2$:XQOc/MIE<Rg*&o6cW4&8T63=ZOq@dW`WfkdaHU[-5El3F[;1?\U+s/@Y6ClT@=2Al@Q5&@fi2(C()qKES(VNrXs6(h<[4Mtb[sq"dRp%-=T1q]8'nV#*f%;@\A>m,_k(AM/U+Q3@Kph@N`uuP!m5LR\%I7Qh+-6uPEfYAj(/jY?6"aJ.E69Z4,;CH&uJ+P6HFP8NKDVq#4>8X)6V%/_CZT7M\el1`][#Agr&6mGK:4N8H~>endstream |
941 | +Gasan>Ar7S'RgRSs)9#?+<=@JV!`R#ecouR%G@KC24u3uAh/uN8LO2Gn"D;iZD\ch(q(uEQZJugn=nrUh#mRU_W$:OAPfO[7R71=/USs"0-2c"kk&b]5oS,nbOQ(fN.6u[0@O66+94Q4ioqNS(spLe1$6k=)MBO\,u?L=[2]CE)Yji.n.'pIpE';L:XVk;i1mYSS*aE.^HhTF]K84<-2f^XkJG(]$.rS:06]me[->,BU:K<=cNjsn]P3JoeAa2"c%=0?]m=b#gB%pW(nk[VD#<Ys$/Y#[>oiRcJ-%Dkk^ns$M(s`R(ubuq=,HdS0S_H6kU4cnb30nROf_TqK>Hb)U3=oIg0V[CB-'*Nh>Z&Vke`1;A;_"IO<R*8%%r_to?aWD3`cR3A^_c70<LM>KiP%CH.<3?bbDF,HFfadWOuWG@-K1Zb3bj1KdduNI2;T,@+gB^iO_@;&Xi\-M`<.V%_u)NI5&6qb3GaBT=NPB@;V]Eo>(`c_%P%1U#4@8W-(<IR0We1\>m%5i(9;]?fXaQ6D/<1k!_sNnb$5?RpIM`SNhr8Kq/=jpR''SA_8q1b_kVlbb&C>*S&H1Ak,ghO(#p'd^_'"c3]F4G64"X"tP+(Y+ahjo8\(q=CI<*S6hX/9i";Y+DDE6724(1hY4\K^km!tB4d;?g^&9Z1%[8W];nui$\06+SZE5ac@VD8nHh)`)oPL/0UfoYF444CbRL:M#M_,[!CneoC&!<Ih2/T"ET8F#!QSCP:;a:h@/nImX5P@/G[s/S6Am6AR('nk<Y*N*N1!%\Y=@Kd2brC`P;T^6#rC*]L2>dcXfHH;T\;+he'D>ZRicc:4->X,3lVA45KT/_4[555qK6S)m:%cZ")eA,eT#tCO(((J)qd)NRgpB^-+hiF*3U#=3*$]rLWj@3.d85(;_3E8%O5Z@(Q[V3?ef&HPB"LFrI-h2#:Y9^cZf6q2Zh.l8@Q6`jkV<>:Qq&BkgO++`^-'5aZ7B@??7/^m3G@U[YL6(!S]n8cT8R#,A"A)P6CVe4K_p/R2GZXJ)MG$0>7MiF>OX~>endstream |
942 | endobj |
943 | xref |
944 | 0 178 |
945 | @@ -2370,72 +2370,72 @@ |
946 | 0000044494 00000 n |
947 | 0000044648 00000 n |
948 | 0000045280 00000 n |
949 | -0000046611 00000 n |
950 | -0000047980 00000 n |
951 | -0000050352 00000 n |
952 | -0000052637 00000 n |
953 | -0000054973 00000 n |
954 | -0000057465 00000 n |
955 | -0000059951 00000 n |
956 | -0000062442 00000 n |
957 | -0000064606 00000 n |
958 | -0000067088 00000 n |
959 | -0000068843 00000 n |
960 | -0000070655 00000 n |
961 | -0000072771 00000 n |
962 | -0000074026 00000 n |
963 | -0000076740 00000 n |
964 | -0000078806 00000 n |
965 | -0000081192 00000 n |
966 | -0000083287 00000 n |
967 | -0000084769 00000 n |
968 | -0000085270 00000 n |
969 | -0000086527 00000 n |
970 | -0000088686 00000 n |
971 | -0000090927 00000 n |
972 | -0000092922 00000 n |
973 | -0000094351 00000 n |
974 | -0000096078 00000 n |
975 | -0000097874 00000 n |
976 | -0000100283 00000 n |
977 | -0000100946 00000 n |
978 | -0000102978 00000 n |
979 | -0000105100 00000 n |
980 | -0000106969 00000 n |
981 | -0000108914 00000 n |
982 | -0000111121 00000 n |
983 | -0000113273 00000 n |
984 | -0000115207 00000 n |
985 | -0000117769 00000 n |
986 | -0000119695 00000 n |
987 | -0000121592 00000 n |
988 | -0000123304 00000 n |
989 | -0000125301 00000 n |
990 | -0000127057 00000 n |
991 | -0000128839 00000 n |
992 | -0000130606 00000 n |
993 | -0000133048 00000 n |
994 | -0000135493 00000 n |
995 | -0000137615 00000 n |
996 | -0000140176 00000 n |
997 | -0000142418 00000 n |
998 | -0000144459 00000 n |
999 | -0000145988 00000 n |
1000 | -0000147598 00000 n |
1001 | -0000148918 00000 n |
1002 | -0000150079 00000 n |
1003 | -0000151241 00000 n |
1004 | -0000152376 00000 n |
1005 | -0000154331 00000 n |
1006 | -0000155202 00000 n |
1007 | +0000046601 00000 n |
1008 | +0000047970 00000 n |
1009 | +0000050342 00000 n |
1010 | +0000052614 00000 n |
1011 | +0000054936 00000 n |
1012 | +0000057401 00000 n |
1013 | +0000059842 00000 n |
1014 | +0000062312 00000 n |
1015 | +0000064483 00000 n |
1016 | +0000066913 00000 n |
1017 | +0000068677 00000 n |
1018 | +0000070669 00000 n |
1019 | +0000072785 00000 n |
1020 | +0000074102 00000 n |
1021 | +0000076816 00000 n |
1022 | +0000078882 00000 n |
1023 | +0000081268 00000 n |
1024 | +0000083363 00000 n |
1025 | +0000084845 00000 n |
1026 | +0000085346 00000 n |
1027 | +0000086603 00000 n |
1028 | +0000088729 00000 n |
1029 | +0000090985 00000 n |
1030 | +0000093022 00000 n |
1031 | +0000094529 00000 n |
1032 | +0000096226 00000 n |
1033 | +0000098067 00000 n |
1034 | +0000100531 00000 n |
1035 | +0000101271 00000 n |
1036 | +0000103486 00000 n |
1037 | +0000105666 00000 n |
1038 | +0000107515 00000 n |
1039 | +0000109371 00000 n |
1040 | +0000111277 00000 n |
1041 | +0000113558 00000 n |
1042 | +0000115573 00000 n |
1043 | +0000118204 00000 n |
1044 | +0000120084 00000 n |
1045 | +0000121879 00000 n |
1046 | +0000123669 00000 n |
1047 | +0000125390 00000 n |
1048 | +0000127345 00000 n |
1049 | +0000129012 00000 n |
1050 | +0000130807 00000 n |
1051 | +0000133104 00000 n |
1052 | +0000135631 00000 n |
1053 | +0000137580 00000 n |
1054 | +0000139936 00000 n |
1055 | +0000142453 00000 n |
1056 | +0000144439 00000 n |
1057 | +0000146353 00000 n |
1058 | +0000148112 00000 n |
1059 | +0000149444 00000 n |
1060 | +0000150619 00000 n |
1061 | +0000151744 00000 n |
1062 | +0000152850 00000 n |
1063 | +0000154642 00000 n |
1064 | +0000155951 00000 n |
1065 | trailer |
1066 | << /ID |
1067 | % ReportLab generated PDF document -- digest (http://www.reportlab.com) |
1068 | - [(\242\252\270\340f0b\216\324\353o\343\364\370\200\353) (\242\252\270\340f0b\216\324\353o\343\364\370\200\353)] |
1069 | + [(c\0243\337\031,U\034\302\260}\304\003\260!\242) (c\0243\337\031,U\034\302\260}\304\003\260!\242)] |
1070 | |
1071 | /Info 71 0 R |
1072 | /Root 70 0 R |
1073 | /Size 178 >> |
1074 | startxref |
1075 | -156378 |
1076 | +157119 |
1077 | %%EOF |
1078 | |
1079 | === modified file 'docs/userguide/app_demos.py' |
1080 | --- docs/userguide/app_demos.py 2009-02-22 14:19:44 +0000 |
1081 | +++ docs/userguide/app_demos.py 2013-04-14 00:48:45 +0000 |
1082 | @@ -1,4 +1,4 @@ |
1083 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1084 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1085 | #see license.txt for license details |
1086 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/app_demos.py |
1087 | from tools.docco.rl_doc_utils import * |
1088 | |
1089 | === modified file 'docs/userguide/ch1_intro.py' |
1090 | --- docs/userguide/ch1_intro.py 2010-12-06 12:45:44 +0000 |
1091 | +++ docs/userguide/ch1_intro.py 2013-04-14 00:48:45 +0000 |
1092 | @@ -1,6 +1,6 @@ |
1093 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1094 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1095 | #see license.txt for license details |
1096 | -__version__ = '$Id: ch1_intro.py 3790 2010-09-29 14:20:28Z tim $' |
1097 | +__version__ = '$Id: ch1_intro.py 3960 2012-09-27 15:22:33Z guillaume $' |
1098 | from tools.docco.rl_doc_utils import * |
1099 | from reportlab.platypus.tableofcontents import TableOfContents |
1100 | from datetime import datetime |
1101 | @@ -181,6 +181,7 @@ |
1102 | disc("""Many people have contributed to ReportLab. We would like to thank in particular |
1103 | (in alphabetical order): |
1104 | Albertas Agejevas, |
1105 | +Alex Buck, |
1106 | Andre Reitz, |
1107 | Andrew Mercer, |
1108 | Benjamin Dumke, |
1109 | @@ -189,13 +190,16 @@ |
1110 | Chris Lee, |
1111 | Christian Jacobs, |
1112 | Dinu Gherman, |
1113 | -Eric Johnson, |
1114 | +Eric Johnson, |
1115 | +Felix Labrecque, |
1116 | Gary Poster, |
1117 | Germán M. Bravo, |
1118 | +Guillaume Francois, |
1119 | Hans Brand, |
1120 | Henning Vonbargen, |
1121 | Hosam Aly, |
1122 | -Ian Stevens, |
1123 | +Ian Stevens, |
1124 | +James Martin-Collar, |
1125 | Jeff Bauer, |
1126 | Jerome Alet, |
1127 | Jerry Casiano, |
1128 | @@ -210,6 +214,7 @@ |
1129 | Moshe Wagner, |
1130 | Nate Silva, |
1131 | Paul McNett, |
1132 | +Peter Johnson, |
1133 | PJACock, |
1134 | Publio da Costa Melo, |
1135 | Randolph Bentson, |
1136 | @@ -240,16 +245,26 @@ |
1137 | heading3("A note on available versions") |
1138 | disc("""Our website ^http://www.reportlab.com/^ will always have up-to-date |
1139 | information on setups and installations. The latest version of the ReportLab library can be found at |
1140 | -^http://www.reportlab.com/software/opensource/rl-toolkit/download/^. Older versions can be found at ^http://www.reportlab.com/ftp/^. |
1141 | - Each successive version is stored in both zip |
1142 | +^http://www.reportlab.com/software/opensource/rl-toolkit/download/^. |
1143 | +Older versions can be found at ^http://www.reportlab.com/ftp/^. |
1144 | +""") |
1145 | +disc("""Each successive version is stored in both zip |
1146 | and tgz format, but the contents are identical apart from line endings. |
1147 | Versions are numbered: $ReportLab_<major_version>_<minor_version>.zip$, |
1148 | -$ReportLab_<major_version>_<minor_version>.tgz$ and so on. |
1149 | -The latest stable version is $reportlab2.5$ (.zip or .tgz), |
1150 | +$ReportLab_<major_version>_<minor_version>.tgz$ and so on. |
1151 | +""") |
1152 | +disc(""" |
1153 | +The latest stable version is $reportlab2.6$ (.zip or .tgz). |
1154 | Daily snapshots of the trunk are available as |
1155 | $reportlab-daily-unix.tar.gz$ or $reportlab-daily-win32.zip$. |
1156 | - Finally, from version 2.4 onwards, there is also a Windows installer |
1157 | -available for Python versions 2.4 - 2.7, named $ReportLab-2.x.win32-py2.x.exe$ |
1158 | +""") |
1159 | +disc("""Finally, from version 2.4 onwards, there is also a Windows installer |
1160 | +available for Python versions 2.5 - 2.7, named $ReportLab-2.x.win32-py2.x.exe$ |
1161 | +""") |
1162 | + |
1163 | +pencilnote() |
1164 | +disc("""We plan to drop the support of Python 2.5 in our next release. |
1165 | +We advise you to move to Python 2.6 or 2.7. |
1166 | """) |
1167 | |
1168 | heading3("Installation on Windows") |
1169 | @@ -257,8 +272,8 @@ |
1170 | restartList() |
1171 | |
1172 | list("""First, install Python from $http://www.python.org/.$ |
1173 | -Reportlab 2.x works with Python 2.4 upwards but we recommend to use |
1174 | -the latest stable version of Python 2.5 or 2.6. |
1175 | +Reportlab 2.x works with Python 2.5 upwards but we recommend to use |
1176 | +the latest stable version of Python 2.7. |
1177 | After installing, you should be able to run the |
1178 | 'Python (command line)' option from the Start Menu. |
1179 | """) |
1180 | @@ -304,8 +319,10 @@ |
1181 | |
1182 | heading3("Installation instructions for Unix") |
1183 | disc(""" |
1184 | - |
1185 | +Many Linux distributions already include or can deliver a ReportLab distribution, although this may be a few months behind our own releases. On Ubuntu, simply use ^sudo apt-get install python-reportlab^. In addition, we support the Python packaging mechanisms so you can use ^easy_install reportlab^ in most Python environments. |
1186 | """) |
1187 | +disc(""" |
1188 | +If you want to install the latest version of our code, or to install your own reportlab to go with our commercial distribution, you can install from source as follows:""") |
1189 | |
1190 | restartList() |
1191 | list("""First, install Python. On a large number of Unix and Linux distributions, Python is already installed, |
1192 | @@ -397,8 +414,6 @@ |
1193 | bullet("""allowtableBoundsErrors: set to 0 to force an error on very large Platypus table elements""") |
1194 | bullet("""emptyTableAction: Controls behaviour for empty tables, can be 'error' (default), 'indicate' or 'ignore'.""") |
1195 | |
1196 | - |
1197 | - |
1198 | heading2("Learning More About Python") |
1199 | |
1200 | disc(""" |
1201 | @@ -440,7 +455,7 @@ |
1202 | |
1203 | bullet("""<b>Dive Into Python</b>. |
1204 | A free Python tutorial for experienced programmers. |
1205 | -$http://diveintopython.org/$ |
1206 | +$http://www.diveintopython.net/$ |
1207 | """) |
1208 | |
1209 | |
1210 | @@ -466,44 +481,49 @@ |
1211 | target dates. |
1212 | """) |
1213 | |
1214 | -heading2("What's New in ReportLab 2.4") |
1215 | -disc("""Many new features have been added and numerous bugs have been fixed, a big |
1216 | -thanks goes to the community for their help in reporting bugs and providing patches. |
1217 | -Thanks to everybody who has contributed to the open-source toolkit in the run-up to the 2.4 release, |
1218 | +heading2("What's New in ReportLab 2.6") |
1219 | +disc("""This is a minor release focusing mainly on improved documentation. There are a |
1220 | +number of minor enhancements, and a larger number of previous-undocumented |
1221 | +enhancements which we have documented better.""") |
1222 | + |
1223 | +disc("""A big thanks goes to the community for their help in reporting bugs and providing patches. |
1224 | +Thanks to everybody who has contributed to the open-source toolkit in the run-up to the 2.6 release, |
1225 | whether by reporting bugs, sending patches, or contributing to the reportlab-users mailing list. |
1226 | -Thanks especially to the following people: PJACock, Hans Brand, Ian Stevens, Yoann Roman, Hosam Aly |
1227 | -Randolph Bentson, Volker Haas, Simon King, Henning Vonbargen, Michael Egorov, Mike Folwell and |
1228 | -Roberto Alsina. |
1229 | -This page documents what has changed since version 2.3.""") |
1230 | - |
1231 | -disc('Reportlab 2.4 is installable with easy_install. You must have installed a compatible C compiler and the dependencies such as Freetype and PIL.') |
1232 | - |
1233 | -heading4('PDF') |
1234 | -bullet("""Canvas automatic cropmarks.""") |
1235 | -bullet("""RGB alpha colours - colours can now be transparent with an alpha value.""") |
1236 | -bullet("""CMYK overPrint - physical colour mix in the printer - similar to RGB alpha but |
1237 | - used in professional printing.""") |
1238 | -bullet("""Colours module has a fade function that returns a list of different shades made |
1239 | - up of one base colour.""") |
1240 | -bullet("""Unicode font file names are now accepted.""") |
1241 | -bullet("""Lots of improvements and verbosity to error messages and the way they are handled. |
1242 | -Font size can now be specified in pixels.""") |
1243 | - |
1244 | -heading4('Platypus') |
1245 | -bullet("""Added support for heading styles h4-h6.""") |
1246 | -bullet("""Improved support for onDraw and SimpleIndex.""") |
1247 | -bullet("""Add support for index tableStyle.""") |
1248 | -bullet("""Added an alphabetic grouping indexing class.""") |
1249 | -bullet("""Added support for multi-level and alphabetical indexes.""") |
1250 | -bullet("""Added support for an unlimited number of TOC levels with default styles.""") |
1251 | -bullet("""Index entries can now be clickable.""") |
1252 | - |
1253 | -heading4('Graphics') |
1254 | -bullet("""Chart axes values can be reversible.""") |
1255 | -bullet("""Labels on chart axes can now be drawn above or below the axes (hi or low).""") |
1256 | -bullet("""A per swatch callout is now allowed in the legend.""") |
1257 | -bullet("""A new anchoring mode for string 'numeric' that align numerical strings by their decimal place.""") |
1258 | -bullet("""Drawing has a resized method now to change the size dynamically.""") |
1259 | +Thanks especially to the following people: Alex Buck, Felix Labrecque, |
1260 | +Peter Johnson, James Martin-Collar and Guillaume Francois. |
1261 | +This page documents what has changed since version 2.5.""") |
1262 | + |
1263 | +disc('Reportlab 2.6 is installable with easy_install. You must have installed a compatible C compiler and the dependencies such as Freetype and PIL.') |
1264 | + |
1265 | +heading4('General changes') |
1266 | +bullet("""Manuals have been reformatted with more pleasing code snippets and tables of |
1267 | +contents, and reviewed and expanded.""") |
1268 | + |
1269 | +heading4('Flowing documents (Platypus)') |
1270 | +bullet("""Added support for HTML-style list objects.""") |
1271 | +bullet("""Added flexible mechanism for drawing bullets.""") |
1272 | +bullet("""Allowed XPreformatted objects to use Asian line wrapping.""") |
1273 | +bullet("""Added an 'autoNextPageTemplate' attribute to PageTemplates. For example you |
1274 | +can now set up a 'chapter first page template' which will always be followed |
1275 | +by a 'continuation template' on the next page break, saving the programmer from |
1276 | +having to issue control flow commands in the story.""") |
1277 | +bullet("""Added a TopPadder flowable, which will 'wrap' another Flowable and move it |
1278 | +to the bottom of the current page.""") |
1279 | +bullet("""More helpful error messages when large tables cannot be rendered.""") |
1280 | +bullet("""Documentation for images within text (test_032_images).""") |
1281 | +bullet("""Trailing dots for use on contents pages.""") |
1282 | + |
1283 | +heading4('Charts and graphics') |
1284 | +bullet("""Support for UPCA bar codes.""") |
1285 | +bullet("""We now have a semi-intelligent system for labelling pie charts with |
1286 | +callout lines. Thanks to James Martin-Collar, a maths student at Warwick |
1287 | +University, who did this as his summer internship.""") |
1288 | +bullet("""Axes - added startOffset and endOffset properties; allowed for axis |
1289 | +background annotations.""") |
1290 | +bullet("""Bar charts - allow more control of z Index (i.e. drawing order of axes and |
1291 | +lines)""") |
1292 | +bullet("""Pie charts - fixed bugs in 3d appearance.""") |
1293 | +bullet("""SVG output back end has seen some bugs fixed and now outputs resizeable SVG.""") |
1294 | |
1295 | # Noteworthy bug fixes Section ####################### |
1296 | #heading3("Noteworthy bug fixes") |
1297 | |
1298 | === modified file 'docs/userguide/ch2_graphics.py' |
1299 | --- docs/userguide/ch2_graphics.py 2010-12-06 12:45:44 +0000 |
1300 | +++ docs/userguide/ch2_graphics.py 2013-04-14 00:48:45 +0000 |
1301 | @@ -1,4 +1,4 @@ |
1302 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1303 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1304 | #see license.txt for license details |
1305 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch2_graphics.py |
1306 | from tools.docco.rl_doc_utils import * |
1307 | @@ -1227,28 +1227,27 @@ |
1308 | heading2("Further Reading: The ReportLab Graphics Library") |
1309 | |
1310 | disc(""" |
1311 | -So far the graphics we have seen was created on a fairly low level. |
1312 | +So far the graphics we have seen were created on a fairly low level. |
1313 | It should be noted, though, that there is another way of creating |
1314 | -much more sophisticated graphics using the emerging dedicated |
1315 | +much more sophisticated graphics using the dedicated |
1316 | high-level <i>ReportLab Graphics Library</i>. |
1317 | """) |
1318 | |
1319 | disc(""" |
1320 | It can be used to produce high-quality, platform-independant, |
1321 | reusable graphics for different output formats (vector and bitmap) |
1322 | -like PDF, EPS and soon others like SVG. |
1323 | +like PDF, EPS, SVG, JPG and PNG. |
1324 | """) |
1325 | |
1326 | disc(""" |
1327 | -A thorough description of its philsophy and features is beyond the |
1328 | -scope of this general user guide and the reader is recommended to |
1329 | -continue with the <i>"ReportLab Graphics Guide"</i>. |
1330 | -There she will find information about the existing components and |
1331 | +A more thorough description of its philsophy and features is |
1332 | +now covered in Chapter 11 of this document, <i>Graphics</i>, which |
1333 | +contains information about the existing components and |
1334 | how to create customized ones. |
1335 | """) |
1336 | |
1337 | disc(""" |
1338 | -Also, the graphics guide contains a presentation of an emerging |
1339 | +Chapter 11 also contains details of the ReportLab |
1340 | charting package and its components (labels, axes, legends and |
1341 | different types of charts like bar, line and pie charts) that |
1342 | builds directly on the graphics library. |
1343 | |
1344 | === modified file 'docs/userguide/ch2a_fonts.py' |
1345 | --- docs/userguide/ch2a_fonts.py 2008-10-19 23:16:31 +0000 |
1346 | +++ docs/userguide/ch2a_fonts.py 2013-04-14 00:48:45 +0000 |
1347 | @@ -1,4 +1,4 @@ |
1348 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1349 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1350 | #see license.txt for license details |
1351 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch2a_fonts.py |
1352 | from tools.docco.rl_doc_utils import * |
1353 | |
1354 | === modified file 'docs/userguide/ch3_pdffeatures.py' |
1355 | --- docs/userguide/ch3_pdffeatures.py 2009-02-22 14:19:44 +0000 |
1356 | +++ docs/userguide/ch3_pdffeatures.py 2013-04-14 00:48:45 +0000 |
1357 | @@ -1,4 +1,4 @@ |
1358 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1359 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1360 | #see license.txt for license details |
1361 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch3_pdffeatures.py |
1362 | from tools.docco.rl_doc_utils import * |
1363 | |
1364 | === modified file 'docs/userguide/ch4_platypus_concepts.py' |
1365 | --- docs/userguide/ch4_platypus_concepts.py 2009-02-22 14:19:44 +0000 |
1366 | +++ docs/userguide/ch4_platypus_concepts.py 2013-04-14 00:48:45 +0000 |
1367 | @@ -1,4 +1,4 @@ |
1368 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1369 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1370 | #see license.txt for license details |
1371 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch4_platypus_concepts.py |
1372 | from tools.docco.rl_doc_utils import * |
1373 | |
1374 | === modified file 'docs/userguide/ch5_paragraphs.py' |
1375 | --- docs/userguide/ch5_paragraphs.py 2010-12-06 12:45:44 +0000 |
1376 | +++ docs/userguide/ch5_paragraphs.py 2013-04-14 00:48:45 +0000 |
1377 | @@ -1,4 +1,4 @@ |
1378 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1379 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1380 | #see license.txt for license details |
1381 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch5_paragraphs.py |
1382 | from tools.docco.rl_doc_utils import * |
1383 | |
1384 | === modified file 'docs/userguide/ch6_tables.py' |
1385 | --- docs/userguide/ch6_tables.py 2010-12-06 12:45:44 +0000 |
1386 | +++ docs/userguide/ch6_tables.py 2013-04-14 00:48:45 +0000 |
1387 | @@ -1,8 +1,8 @@ |
1388 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1389 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1390 | #see license.txt for license details |
1391 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch6_tables.py |
1392 | from tools.docco.rl_doc_utils import * |
1393 | -from reportlab.platypus import Image |
1394 | +from reportlab.platypus import Image,ListFlowable, ListItem |
1395 | import reportlab |
1396 | |
1397 | heading1("Tables and TableStyles") |
1398 | @@ -397,16 +397,41 @@ |
1399 | """) |
1400 | |
1401 | heading1("""Other Useful $Flowables$""") |
1402 | -heading2("""$Preformatted(text, style, bulletText = None, dedent=0)$""") |
1403 | +heading2("""$Preformatted(text, style, bulletText=None, dedent=0, maxLineLength=None, splitChars=None, newLineChars=None)$""") |
1404 | disc(""" |
1405 | Creates a preformatted paragraph which does no wrapping, line splitting or other manipulations. |
1406 | No $XML$ style tags are taken account of in the text. |
1407 | If dedent is non zero $dedent$ common leading |
1408 | spaces will be removed from the front of each line. |
1409 | """) |
1410 | -heading2("""$XPreformatted(text, style, bulletText = None, dedent=0, frags=None)$""") |
1411 | -disc(""" |
1412 | -This is a non rearranging form of the $Paragraph$ class; $XML$ tags are allowed in |
1413 | +heading3("Defining a maximum line length") |
1414 | +disc(""" |
1415 | +You can use the property $maxLineLength$ to define a maximum line length. If a line length exceeds this maximum value, the line will be automatically splitted. |
1416 | +""") |
1417 | +disc(""" |
1418 | +The line will be split on any single character defined in $splitChars$. If no value is provided for this property, the line will be split on any of the following standard characters: space, colon, full stop, semi-colon, coma, hyphen, forward slash, back slash, left parenthesis, left square bracket and left curly brace |
1419 | +""") |
1420 | +disc(""" |
1421 | +Characters can be automatically inserted at the beginning of each line that has been created. You can set the property $newLineChars$ to the characters you want to use. |
1422 | +""") |
1423 | +EmbeddedCode(""" |
1424 | +from reportlab.lib.styles import getSampleStyleSheet |
1425 | +stylesheet=getSampleStyleSheet() |
1426 | +normalStyle = stylesheet['Code'] |
1427 | +text=''' |
1428 | +class XPreformatted(Paragraph): |
1429 | + def __init__(self, text, style, bulletText = None, frags=None, caseSensitive=1): |
1430 | + self.caseSensitive = caseSensitive |
1431 | + if maximumLineLength and text: |
1432 | + text = self.stopLine(text, maximumLineLength, splitCharacters) |
1433 | + cleaner = lambda text, dedent=dedent: string.join(_dedenter(text or '',dedent),'') |
1434 | + self._setup(text, style, bulletText, frags, cleaner) |
1435 | +''' |
1436 | +t=Preformatted(text,normalStyle,maxLineLength=60, newLineChars='> ') |
1437 | +""") |
1438 | +heading2("""$XPreformatted(text, style, bulletText=None, dedent=0, frags=None)$""") |
1439 | +disc(""" |
1440 | +This is a non rearranging form of the $Paragraph$ class; XML tags are allowed in |
1441 | $text$ and have the same meanings as for the $Paragraph$ class. |
1442 | As for $Preformatted$, if dedent is non zero $dedent$ common leading |
1443 | spaces will be removed from the front of each line. |
1444 | @@ -414,7 +439,7 @@ |
1445 | EmbeddedCode(""" |
1446 | from reportlab.lib.styles import getSampleStyleSheet |
1447 | stylesheet=getSampleStyleSheet() |
1448 | -normalStyle = stylesheet['Normal'] |
1449 | +normalStyle = stylesheet['Code'] |
1450 | text=''' |
1451 | |
1452 | This is a non rearranging form of the <b>Paragraph</b> class; |
1453 | @@ -429,6 +454,7 @@ |
1454 | ''' |
1455 | t=XPreformatted(text,normalStyle,dedent=3) |
1456 | """) |
1457 | + |
1458 | heading2("""$Image(filename, width=None, height=None)$""") |
1459 | disc("""Create a flowable which will contain the image defined by the data in file $filename$. |
1460 | The default <b>PDF</b> image type <i>jpeg</i> is supported and if the <b>PIL</b> extension to <b>Python</b> |
1461 | @@ -437,7 +463,7 @@ |
1462 | not specified (or specified as $None$) then the corresponding pixel dimension of the image is assumed |
1463 | to be in <i>points</i> and used. |
1464 | """) |
1465 | -I=os.path.join(os.path.dirname(reportlab.__file__),'docs','images','lj8100.jpg') |
1466 | +I="../images/lj8100.jpg" |
1467 | eg(""" |
1468 | Image("lj8100.jpg") |
1469 | """,after=0.1) |
1470 | @@ -655,3 +681,43 @@ |
1471 | disc(""" |
1472 | This indexes the terms "comma (,)", "," and "...". |
1473 | """) |
1474 | + |
1475 | +heading2("""$ListFlowable(),ListItem()$""") |
1476 | +disc(""" |
1477 | +Use these classes to make ordered and unordered lists. Lists can be nested. |
1478 | +""") |
1479 | + |
1480 | +disc(""" |
1481 | +$ListFlowable()$ will create an ordered list, which can contain any flowable. The class has a number of parameters to change font, colour, size, style and position of list numbers, or of bullets in unordered lists. The type of numbering can also be set to use lower or upper case letters ('A,B,C' etc.) or Roman numerals (capitals or lowercase) using the bulletType property. To change the list to an unordered type, set bulletType='bullet'. |
1482 | +""") |
1483 | + |
1484 | +disc(""" |
1485 | +Items within a $ListFlowable()$ list can be changed from their default appearance by wrapping them in a $ListItem()$ class and setting its properties. |
1486 | +""") |
1487 | + |
1488 | +disc(""" |
1489 | +The following will create an ordered list, and set the third item to an unordered sublist. |
1490 | +""") |
1491 | + |
1492 | +EmbeddedCode(""" |
1493 | +from reportlab.platypus import ListFlowable, ListItem |
1494 | +from reportlab.lib.styles import getSampleStyleSheet |
1495 | +styles = getSampleStyleSheet() |
1496 | +style = styles["Normal"] |
1497 | +t = ListFlowable( |
1498 | +[ |
1499 | +Paragraph("Item no.1", style), |
1500 | +ListItem(Paragraph("Item no. 2", style),bulletColor="green",value=7), |
1501 | +ListFlowable( |
1502 | + [ |
1503 | + Paragraph("sublist item 1", style), |
1504 | + ListItem(Paragraph('sublist item 2', style),bulletColor='red',value='square') |
1505 | + ], |
1506 | + bulletType='bullet', |
1507 | + start='square', |
1508 | + ), |
1509 | +Paragraph("Item no.4", style), |
1510 | +], |
1511 | +bulletType='i' |
1512 | +) |
1513 | + """) |
1514 | |
1515 | === modified file 'docs/userguide/ch7_custom.py' |
1516 | --- docs/userguide/ch7_custom.py 2008-10-19 23:16:31 +0000 |
1517 | +++ docs/userguide/ch7_custom.py 2013-04-14 00:48:45 +0000 |
1518 | @@ -1,4 +1,4 @@ |
1519 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1520 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1521 | #see license.txt for license details |
1522 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/ch7_custom.py |
1523 | from tools.docco.rl_doc_utils import * |
1524 | |
1525 | === modified file 'docs/userguide/genuserguide.py' |
1526 | --- docs/userguide/genuserguide.py 2009-02-22 14:19:44 +0000 |
1527 | +++ docs/userguide/genuserguide.py 2013-04-14 00:48:45 +0000 |
1528 | @@ -1,8 +1,8 @@ |
1529 | #!/bin/env python |
1530 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
1531 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1532 | #see license.txt for license details |
1533 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/docs/userguide/genuserguide.py |
1534 | -__version__=''' $Id: genuserguide.py 3376 2009-01-19 12:05:41Z jonas $ ''' |
1535 | +__version__=''' $Id: genuserguide.py 3959 2012-09-27 14:39:39Z robin $ ''' |
1536 | __doc__ = """ |
1537 | This module contains the script for building the user guide. |
1538 | """ |
1539 | |
1540 | === modified file 'docs/userguide/graph_charts.py' |
1541 | --- docs/userguide/graph_charts.py 2010-02-16 23:32:55 +0000 |
1542 | +++ docs/userguide/graph_charts.py 2013-04-14 00:48:45 +0000 |
1543 | @@ -1,6 +1,6 @@ |
1544 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
1545 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1546 | #see license.txt for license details |
1547 | -__version__=''' $Id: graph_charts.py 3563 2009-10-01 10:52:36Z damian $ ''' |
1548 | +__version__=''' $Id: graph_charts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
1549 | from tools.docco.rl_doc_utils import * |
1550 | from reportlab.graphics.shapes import * |
1551 | |
1552 | @@ -133,7 +133,7 @@ |
1553 | properties.""") |
1554 | |
1555 | |
1556 | -heading3("Labels") |
1557 | +heading2("Labels") |
1558 | |
1559 | disc(""" |
1560 | A label is a string of text attached to some chart element. |
1561 | @@ -246,7 +246,7 @@ |
1562 | |
1563 | |
1564 | |
1565 | -heading3("Axes") |
1566 | +heading2("Axes") |
1567 | |
1568 | disc(""" |
1569 | We identify two basic kinds of axes - <i>Value</i> and <i>Category</i> |
1570 | @@ -576,7 +576,7 @@ |
1571 | caption("""Table <seq template="%(Chapter)s-%(Table+)s"/> - Axes joining properties""") |
1572 | |
1573 | |
1574 | -heading3("Bar Charts") |
1575 | +heading2("Bar Charts") |
1576 | |
1577 | disc(""" |
1578 | This describes our current $VerticalBarChart$ class, which uses the |
1579 | @@ -687,9 +687,6 @@ |
1580 | ["fillColor", """Defaults to None. This will fill the plot rectangle with |
1581 | a solid color. (Note that we could implement dashArray etc. |
1582 | as for any other solid shape)"""], |
1583 | - ["barLabelFormat", """This is a format string or function used for displaying |
1584 | -labels above each bar. They are positioned automatically |
1585 | -above the bar for positive values and below for negative ones."""], |
1586 | ["useAbsolute", """Defaults to 0. If 1, the three properties below are |
1587 | absolute values in points (which means you can make a chart |
1588 | where the bars stick out from the plot rectangle); if 0, |
1589 | @@ -704,8 +701,9 @@ |
1590 | group. If you wanted a little gap between green and red bars in |
1591 | the example above, you would make this non-zero."""], |
1592 | ["barLabelFormat", """Defaults to None. As with the YValueAxis, if you supply |
1593 | -a function or format string then labels will be drawn next |
1594 | -to each bar showing the numeric value."""], |
1595 | +a function or format string then labels will be drawn next to each bar |
1596 | +showing the numeric value. They are positioned automatically |
1597 | +above the bar for positive values and below for negative ones."""], |
1598 | ["barLabels", """A collection of labels used to format all bar labels. Since |
1599 | this is a two-dimensional array, you may explicitly format the |
1600 | third label of the second series using this syntax: |
1601 | @@ -865,7 +863,7 @@ |
1602 | ##title, subTitle Not implemented yet. These would be label-like objects whose text could be set directly and which would appear in sensible locations. For now, you can just place extra strings on the drawing. |
1603 | |
1604 | |
1605 | -heading3("Line Charts") |
1606 | +heading2("Line Charts") |
1607 | |
1608 | disc(""" |
1609 | We consider "Line Charts" to be essentially the same as |
1610 | @@ -943,10 +941,42 @@ |
1611 | |
1612 | |
1613 | disc("") |
1614 | -todo("Add properties table.") |
1615 | - |
1616 | - |
1617 | -heading3("Line Plots") |
1618 | + |
1619 | +data=[["Property","Meaning"], |
1620 | + ["data", "Data to be plotted, list of (lists of) numbers."], |
1621 | + ["x, y, width, height", """Bounding box of the line chart. |
1622 | +Note that x and y do NOT specify the centre but the bottom left corner"""], |
1623 | + ["valueAxis", """The value axis, which may be formatted as described previously."""], |
1624 | + ["categoryAxis", """The category axis, which may be formatted as described previously."""], |
1625 | + ["strokeColor", """Defaults to None. This will draw a border around the plot rectangle, |
1626 | +which may be useful in debugging. Axes will overwrite this."""], |
1627 | + ["fillColor", """Defaults to None. This will fill the plot rectangle with a solid color."""], |
1628 | + ["lines.strokeColor", """Color of the line."""], |
1629 | + ["lines.strokeWidth", """Width of the line."""], |
1630 | + ["lineLabels", """A collection of labels used to format all line labels. Since |
1631 | +this is a two-dimensional array, you may explicitly format the |
1632 | +third label of the second line using this syntax: |
1633 | + chart.lineLabels[(1,2)].fontSize = 12"""], |
1634 | + ["lineLabelFormat", """Defaults to None. As with the YValueAxis, if you supply |
1635 | +a function or format string then labels will be drawn next |
1636 | +to each line showing the numeric value. You can also set it |
1637 | +to 'values' to display the values explicity defined in lineLabelArray."""], |
1638 | + ["lineLabelArray", """Explicit array of line label values, must match size of data if present. |
1639 | +These labels values will be displayed only if the property |
1640 | +lineLabelFormat above is set to 'values'."""]] |
1641 | +t=Table(data, colWidths=(100,330)) |
1642 | +t.setStyle(TableStyle([ |
1643 | + ('FONT',(0,0),(-1,0),'Times-Bold',10,12), |
1644 | + ('FONT',(0,1),(0,-1),'Courier',8,8), |
1645 | + ('FONT',(1,1),(1,-1),'Times-Roman',10,12), |
1646 | + ('VALIGN',(0,0),(-1,-1),'MIDDLE'), |
1647 | + ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), |
1648 | + ('BOX', (0,0), (-1,-1), 0.25, colors.black), |
1649 | + ])) |
1650 | +getStory().append(t) |
1651 | +caption("""Table <seq template="%(Chapter)s-%(Table+)s"/> - HorizontalLineChart properties""") |
1652 | + |
1653 | +heading2("Line Plots") |
1654 | |
1655 | disc(""" |
1656 | Below we show a more complex example of a Line Plot that |
1657 | @@ -1024,22 +1054,56 @@ |
1658 | |
1659 | |
1660 | disc("") |
1661 | -todo("Add properties table.") |
1662 | - |
1663 | - |
1664 | - |
1665 | -heading3("Pie Charts") |
1666 | + |
1667 | +data=[["Property","Meaning"], |
1668 | + ["data", "Data to be plotted, list of (lists of) numbers."], |
1669 | + ["x, y, width, height", """Bounding box of the line chart. |
1670 | +Note that x and y do NOT specify the centre but the bottom left corner"""], |
1671 | + ["xValueAxis", """The vertical value axis, which may be formatted as described previously."""], |
1672 | + ["yValueAxis", """The horizontal value axis, which may be formatted as described previously."""], |
1673 | + ["strokeColor", """Defaults to None. This will draw a border around the plot rectangle, |
1674 | +which may be useful in debugging. Axes will overwrite this."""], |
1675 | + ["strokeWidth", """Defaults to None. Width of the border around the plot rectangle."""], |
1676 | + ["fillColor", """Defaults to None. This will fill the plot rectangle with a solid color."""], |
1677 | + ["lines.strokeColor", """Color of the line."""], |
1678 | + ["lines.strokeWidth", """Width of the line."""], |
1679 | + ["lines.symbol", """Marker used for each point. |
1680 | +You can create a new marker using the function makeMarker(). |
1681 | +For example to use a circle, the function call would be makeMarker('Circle')"""], |
1682 | + ["lineLabels", """A collection of labels used to format all line labels. Since |
1683 | +this is a two-dimensional array, you may explicitly format the |
1684 | +third label of the second line using this syntax: |
1685 | + chart.lineLabels[(1,2)].fontSize = 12"""], |
1686 | + ["lineLabelFormat", """Defaults to None. As with the YValueAxis, if you supply |
1687 | +a function or format string then labels will be drawn next |
1688 | +to each line showing the numeric value. You can also set it |
1689 | +to 'values' to display the values explicity defined in lineLabelArray."""], |
1690 | + ["lineLabelArray", """Explicit array of line label values, must match size of data if present. |
1691 | +These labels values will be displayed only if the property |
1692 | +lineLabelFormat above is set to 'values'."""]] |
1693 | +t=Table(data, colWidths=(100,330)) |
1694 | +t.setStyle(TableStyle([ |
1695 | + ('FONT',(0,0),(-1,0),'Times-Bold',10,12), |
1696 | + ('FONT',(0,1),(0,-1),'Courier',8,8), |
1697 | + ('FONT',(1,1),(1,-1),'Times-Roman',10,12), |
1698 | + ('VALIGN',(0,0),(-1,-1),'MIDDLE'), |
1699 | + ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), |
1700 | + ('BOX', (0,0), (-1,-1), 0.25, colors.black), |
1701 | + ])) |
1702 | +getStory().append(t) |
1703 | +caption("""Table <seq template="%(Chapter)s-%(Table+)s"/> - LinePlot properties""") |
1704 | + |
1705 | + |
1706 | + |
1707 | + |
1708 | +heading2("Pie Charts") |
1709 | |
1710 | disc(""" |
1711 | -We've already seen a pie chart example above. |
1712 | -This is provisional but seems to do most things. |
1713 | -At the very least we need to change the name. |
1714 | -For completeness we will cover it here. |
1715 | +As usual, we will start with an example: |
1716 | """) |
1717 | |
1718 | eg(""" |
1719 | from reportlab.graphics.charts.piecharts import Pie |
1720 | - |
1721 | d = Drawing(200, 100) |
1722 | |
1723 | pc = Pie() |
1724 | @@ -1056,19 +1120,18 @@ |
1725 | pc.slices[3].strokeDashArray = [2,2] |
1726 | pc.slices[3].labelRadius = 1.75 |
1727 | pc.slices[3].fontColor = colors.red |
1728 | - |
1729 | d.add(pc) |
1730 | """) |
1731 | |
1732 | from reportlab.graphics.charts.piecharts import Pie |
1733 | |
1734 | -d = Drawing(200, 100) |
1735 | +d = Drawing(400, 200) |
1736 | |
1737 | pc = Pie() |
1738 | -pc.x = 65 |
1739 | -pc.y = 15 |
1740 | -pc.width = 70 |
1741 | -pc.height = 70 |
1742 | +pc.x = 125 |
1743 | +pc.y = 25 |
1744 | +pc.width = 150 |
1745 | +pc.height = 150 |
1746 | pc.data = [10,20,30,40,50,60] |
1747 | pc.labels = ['a','b','c','d','e','f'] |
1748 | |
1749 | @@ -1076,7 +1139,7 @@ |
1750 | pc.slices[3].popout = 10 |
1751 | pc.slices[3].strokeWidth = 2 |
1752 | pc.slices[3].strokeDashArray = [2,2] |
1753 | -pc.slices[3].labelRadius = 1.75 |
1754 | +pc.slices[3].labelRadius = 1.25 |
1755 | pc.slices[3].fontColor = colors.red |
1756 | |
1757 | d.add(pc) |
1758 | @@ -1087,36 +1150,154 @@ |
1759 | Properties are covered below. |
1760 | The pie has a 'wedges' collection and we document wedge properties |
1761 | in the same table. |
1762 | -This was invented before we finished the $Label$ class and will |
1763 | -probably be reworked to use such labels shortly. |
1764 | -""") |
1765 | - |
1766 | -disc("") |
1767 | -todo("Add properties table.") |
1768 | - |
1769 | -##Property Value |
1770 | -##data a list or tuple of numbers |
1771 | -##x, y, width, height Bounding box of the pie. Note that x and y do NOT specify the centre but the bottom left corner, and that width and height do not have to be equal; pies may be elliptical and wedges will be drawn correctly. |
1772 | -##labels None, or a list of strings. Make it None if you don't want labels around the edge of the pie. Since it is impossible to know the size of slices, we generally discourage placing labels in or around pies; it is much better to put them in a legend alongside. |
1773 | -##startAngle Where is the start angle of the first pie slice? The default is '90' which is twelve o'clock. |
1774 | -##direction Which direction do slices progress in? The default is 'clockwise'. |
1775 | -##wedges Collection of wedges. This lets you customise each wedge, or individual ones. See below |
1776 | -##wedges.strokeWidth Border width for wedge |
1777 | -##wedges.strokeColor Border color |
1778 | -##wedges.strokeDashArray Solid or dashed line configuration for |
1779 | -##wedges.popout How far out should the slice(s) stick from the centre of |
1780 | -##the pie? default is zero. |
1781 | -##wedges.fontName |
1782 | -##wedges.fontSize |
1783 | -##wedges.fontColor Used for text labels |
1784 | -##wedges.labelRadius This controls the anchor point for a text label. It |
1785 | -##is a fraction of the radius; 0.7 will place the text inside the pie, |
1786 | -##1.2 will place it slightly outside. (note that if we add labels, we |
1787 | -##will keep this to specify their anchor point) |
1788 | -## |
1789 | - |
1790 | - |
1791 | -heading3("Legends") |
1792 | +""") |
1793 | + |
1794 | +disc("") |
1795 | + |
1796 | +data=[["Property", "Meaning"], |
1797 | + ["data", "A list or tuple of numbers"], |
1798 | + ["x, y, width, height", """Bounding box of the pie. |
1799 | +Note that x and y do NOT specify the centre but the bottom left |
1800 | +corner, and that width and height do not have to be equal; |
1801 | +pies may be elliptical and wedges will be drawn correctly."""], |
1802 | + ["labels", """None, or a list of strings. |
1803 | +Make it None if you don't want labels around the edge of the pie. |
1804 | +Since it is impossible to know the size of slices, we generally |
1805 | +discourage placing labels in or around pies; it is much better |
1806 | +to put them in a legend alongside."""], |
1807 | + ["startAngle", """Where is the start angle of the first pie slice? |
1808 | +The default is '90' which is twelve o'clock."""], |
1809 | + ["direction", """Which direction do slices progress in? |
1810 | +The default is 'clockwise'."""], |
1811 | + ["sideLabels", """This creates a chart with the labels in two columns, |
1812 | +one on either side."""], |
1813 | + ["sideLabelsOffset", """This is a fraction of the width of the pie that defines the horizontal |
1814 | +distance between the pie and the columns of labels."""], |
1815 | + ["simpleLabels", """Default is 1. Set to 0 to enable the use of customizable labels |
1816 | +and of properties prefixed by label_ in the collection slices."""], |
1817 | + ["wedges", """Collection of wedges. |
1818 | +This lets you customise each wedge, or individual ones. See below"""], |
1819 | + ["wedges.strokeWidth", "Border width for wedge"], |
1820 | + ["wedges.strokeColor", "Border color"], |
1821 | + ["wedges.strokeDashArray", "Solid or dashed line configuration"], |
1822 | + ["wedges.popout", """How far out should the slice(s) stick from the centre of the pie? |
1823 | +Default is zero."""], |
1824 | + ["wedges.fontName", "Name of the label font"], |
1825 | + ["wedges.fontSize", "Size of the label font"], |
1826 | + ["wedges.fontColor", "Color of the label text"], |
1827 | + ["wedges.labelRadius", """This controls the anchor point for a text label. |
1828 | +It is a fraction of the radius; 0.7 will place the text inside the |
1829 | +pie, 1.2 will place it slightly outside. (note that if we add labels, |
1830 | +we will keep this to specify their anchor point)"""]] |
1831 | +t=Table(data, colWidths=(130,300)) |
1832 | +t.setStyle(TableStyle([ |
1833 | + ('FONT',(0,0),(-1,0),'Times-Bold',10,12), |
1834 | + ('FONT',(0,1),(0,-1),'Courier',8,8), |
1835 | + ('FONT',(1,1),(1,-1),'Times-Roman',10,12), |
1836 | + ('VALIGN',(0,0),(-1,-1),'MIDDLE'), |
1837 | + ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), |
1838 | + ('BOX', (0,0), (-1,-1), 0.25, colors.black), |
1839 | + ])) |
1840 | +getStory().append(t) |
1841 | +caption("""Table <seq template="%(Chapter)s-%(Table+)s"/> - Pie properties""") |
1842 | + |
1843 | +heading3("Customizing Labels") |
1844 | + |
1845 | +disc(""" |
1846 | +Each slide label can be customized individually by changing |
1847 | +the properties prefixed by $label_$ in the collection $wedges$. |
1848 | +For example $pc.slices[2].label_angle = 10$ changes the angle |
1849 | +of the third label. |
1850 | +""") |
1851 | + |
1852 | +disc(""" |
1853 | +Before being able to use these customization properties, you need |
1854 | +to disable simple labels with: $pc.simplesLabels = 0$ |
1855 | +""") |
1856 | + |
1857 | +disc("") |
1858 | + |
1859 | +data=[["Property", "Meaning"], |
1860 | + ["label_dx", """X Offset of the label"""], |
1861 | + ["label_dy", """Y Offset of the label"""], |
1862 | + ["label_angle", """Angle of the label, default (0) is horizontal, 90 is vertical, |
1863 | +180 is upside down"""], |
1864 | + ["label_boxAnchor", """Anchoring point of the label"""], |
1865 | + ["label_boxStrokeColor", """Border color for the label box"""], |
1866 | + ["label_boxStrokeWidth", """Border width for the label box"""], |
1867 | + ["label_boxFillColor", """Filling color of the label box"""], |
1868 | + ["label_strokeColor", """Border color for the label text"""], |
1869 | + ["label_strokeWidth", """Border width for the label text"""], |
1870 | + ["label_text", """Text of the label"""], |
1871 | + ["label_width", """Width of the label"""], |
1872 | + ["label_maxWidth", """Maximum width the label can grow to"""], |
1873 | + ["label_height", """Height of the label"""], |
1874 | + ["label_textAnchor", """Maximum height the label can grow to"""], |
1875 | + ["label_visible", """True if the label is to be drawn"""], |
1876 | + ["label_topPadding", """Padding at top of box"""], |
1877 | + ["label_leftPadding", """Padding at left of box"""], |
1878 | + ["label_rightPadding", """Padding at right of box"""], |
1879 | + ["label_bottomPadding", """Padding at bottom of box"""], |
1880 | + ["label_simple_pointer", """Set to 1 for simple pointers"""], |
1881 | + ["label_pointer_strokeColor", """Color of indicator line"""], |
1882 | + ["label_pointer_strokeWidth", """Width of indicator line"""]] |
1883 | +t=Table(data, colWidths=(130,300)) |
1884 | +t.setStyle(TableStyle([ |
1885 | + ('FONT',(0,0),(-1,0),'Times-Bold',10,12), |
1886 | + ('FONT',(0,1),(0,-1),'Courier',8,8), |
1887 | + ('FONT',(1,1),(1,-1),'Times-Roman',10,12), |
1888 | + ('VALIGN',(0,0),(-1,-1),'MIDDLE'), |
1889 | + ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), |
1890 | + ('BOX', (0,0), (-1,-1), 0.25, colors.black), |
1891 | + ])) |
1892 | +getStory().append(t) |
1893 | +caption("""Table <seq template="%(Chapter)s-%(Table+)s"/> - Pie.wedges label customization properties""") |
1894 | + |
1895 | +heading3("Side Labels") |
1896 | + |
1897 | +disc(""" |
1898 | +If the sideLabels attribute is set to true, then the labels of |
1899 | +the slices are placed in two columns, one on either side of the |
1900 | +pie and the start angle of the pie will be set automatically. |
1901 | +The anchor of the right hand column is set to 'start' and the |
1902 | +anchor of the left hand column is set to 'end'. |
1903 | +The distance from the edge of the pie from the edge of either |
1904 | +column is decided by the sideLabelsOffset attribute, which is |
1905 | +a fraction of the width of the pie. |
1906 | +If xradius is changed, the pie can overlap the labels, and so |
1907 | +we advise leaving xradius as None. |
1908 | +There is an example below. |
1909 | +""") |
1910 | + |
1911 | +from reportlab.graphics.charts.piecharts import sample5, sample7, sample8 |
1912 | +drawing5 = sample5() |
1913 | +draw(drawing5, 'An example of a piechart with sideLabels =1') |
1914 | + |
1915 | +disc(""" |
1916 | +If you have sideLabels set to True, then some of the attributes |
1917 | +become redundant, such as pointerLabelMode. |
1918 | +Also sideLabelsOffset only changes the piechart if sideLabels is |
1919 | +set to true. |
1920 | +""") |
1921 | + |
1922 | +heading4("Some issues") |
1923 | + |
1924 | +disc(""" |
1925 | +The pointers can cross if there are too many slices. |
1926 | +""") |
1927 | + |
1928 | +drawing7 = sample7() |
1929 | +draw(drawing7, 'An example of pointers crossing') |
1930 | + |
1931 | +disc(""" |
1932 | +Also the labels can overlap despite checkLabelOverlap if they |
1933 | +correspond to slices that are not adjacent. |
1934 | +""") |
1935 | + |
1936 | +drawing8 = sample8() |
1937 | +draw(drawing8, 'An example of labels overlapping') |
1938 | + |
1939 | +heading2("Legends") |
1940 | |
1941 | disc(""" |
1942 | Various preliminary legend classes can be found but need a |
1943 | @@ -1162,7 +1343,7 @@ |
1944 | Nevertheless, here is a list of things that are under way: |
1945 | """) |
1946 | |
1947 | -list(""" |
1948 | +bullet(""" |
1949 | Color specification - right now the chart has an undocumented property |
1950 | $defaultColors$, which provides a list of colors to cycle through, |
1951 | such that each data series gets its own color. |
1952 | @@ -1175,7 +1356,7 @@ |
1953 | be visible itself. |
1954 | """) |
1955 | |
1956 | -list(""" |
1957 | +bullet(""" |
1958 | Additional chart types - when the current design will have become |
1959 | more stable, we expect to add variants of bar charts to deal with |
1960 | percentile bars as well as the side-by-side variant seen here. |
1961 | |
1962 | === modified file 'docs/userguide/graph_concepts.py' |
1963 | --- docs/userguide/graph_concepts.py 2009-02-22 14:19:44 +0000 |
1964 | +++ docs/userguide/graph_concepts.py 2013-04-14 00:48:45 +0000 |
1965 | @@ -1,6 +1,6 @@ |
1966 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
1967 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1968 | #see license.txt for license details |
1969 | -__version__=''' $Id: graph_concepts.py 3401 2009-01-23 17:41:45Z jonas $ ''' |
1970 | +__version__=''' $Id: graph_concepts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
1971 | from tools.docco.rl_doc_utils import * |
1972 | |
1973 | heading2("General Concepts") |
1974 | |
1975 | === modified file 'docs/userguide/graph_intro.py' |
1976 | --- docs/userguide/graph_intro.py 2009-02-22 14:19:44 +0000 |
1977 | +++ docs/userguide/graph_intro.py 2013-04-14 00:48:45 +0000 |
1978 | @@ -1,6 +1,6 @@ |
1979 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
1980 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1981 | #see license.txt for license details |
1982 | -__version__=''' $Id: graph_intro.py 3375 2009-01-16 18:23:19Z jonas $ ''' |
1983 | +__version__=''' $Id: graph_intro.py 3959 2012-09-27 14:39:39Z robin $ ''' |
1984 | from tools.docco.rl_doc_utils import * |
1985 | |
1986 | heading1("Graphics") |
1987 | |
1988 | === modified file 'docs/userguide/graph_shapes.py' |
1989 | --- docs/userguide/graph_shapes.py 2009-02-22 14:19:44 +0000 |
1990 | +++ docs/userguide/graph_shapes.py 2013-04-14 00:48:45 +0000 |
1991 | @@ -1,6 +1,6 @@ |
1992 | -#Copyright ReportLab Europe Ltd. 2000-2009 |
1993 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
1994 | #see license.txt for license details |
1995 | -__version__='''$Id: graph_shapes.py 3375 2009-01-16 18:23:19Z jonas $''' |
1996 | +__version__='''$Id: graph_shapes.py 3959 2012-09-27 14:39:39Z robin $''' |
1997 | from tools.docco.rl_doc_utils import * |
1998 | from reportlab.graphics.shapes import * |
1999 | |
2000 | |
2001 | === modified file 'docs/userguide/graph_widgets.py' |
2002 | --- docs/userguide/graph_widgets.py 2009-02-22 14:19:44 +0000 |
2003 | +++ docs/userguide/graph_widgets.py 2013-04-14 00:48:45 +0000 |
2004 | @@ -1,6 +1,6 @@ |
2005 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
2006 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2007 | #see license.txt for license details |
2008 | -__version__=''' $Id: graph_widgets.py 3375 2009-01-16 18:23:19Z jonas $ ''' |
2009 | +__version__=''' $Id: graph_widgets.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2010 | from tools.docco.rl_doc_utils import * |
2011 | from reportlab.graphics.shapes import * |
2012 | from reportlab.graphics.widgets import signsandsymbols |
2013 | |
2014 | === modified file 'setup.py' |
2015 | --- setup.py 2010-12-06 12:45:44 +0000 |
2016 | +++ setup.py 2013-04-14 00:48:45 +0000 |
2017 | @@ -1,6 +1,6 @@ |
2018 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
2019 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2020 | #see license.txt for license details |
2021 | -__version__=''' $Id: setup.py 3730 2010-06-16 11:56:53Z rgbecker $ ''' |
2022 | +__version__=''' $Id: setup.py 3963 2012-09-27 16:14:06Z rgbecker $ ''' |
2023 | import os, sys, glob, ConfigParser, shutil |
2024 | platform = sys.platform |
2025 | pjoin = os.path.join |
2026 | @@ -209,10 +209,10 @@ |
2027 | 'fonts/_eb_____.pfb', |
2028 | 'fonts/_ei_____.pfb', |
2029 | 'fonts/_er_____.pfb', |
2030 | - 'fonts/Sy______.pfb', |
2031 | - 'fonts/Zd______.pfb', |
2032 | - 'fonts/Zx______.pfb', |
2033 | - 'fonts/Zy______.pfb', |
2034 | + 'fonts/sy______.pfb', |
2035 | + 'fonts/zd______.pfb', |
2036 | + 'fonts/zx______.pfb', |
2037 | + 'fonts/zy______.pfb', |
2038 | ] |
2039 | |
2040 | def get_fonts(PACKAGE_DIR, reportlab_files): |
2041 | @@ -224,7 +224,7 @@ |
2042 | try: |
2043 | #infoline("Downloading standard T1 font curves") |
2044 | |
2045 | - #remotehandle = urllib2.urlopen("http://www.reportlab.com/ftp/fonts/pfbfer.zip") |
2046 | + #remotehandle = urllib2.urlopen("http://www.reportlab.com/ftp/pfbfer-20070710.zip") |
2047 | #zipdata = StringIO.StringIO(remotehandle.read()) |
2048 | #remotehandle.close() |
2049 | archive = zipfile.ZipFile(zipdata) |
2050 | @@ -417,7 +417,7 @@ |
2051 | setup( |
2052 | name="reportlab", |
2053 | version=get_version(), |
2054 | - license="BSD license (see license.txt for details), Copyright (c) 2000-2010, ReportLab Inc.", |
2055 | + license="BSD license (see license.txt for details), Copyright (c) 2000-2012, ReportLab Inc.", |
2056 | description="The Reportlab Toolkit", |
2057 | long_description="""The ReportLab Toolkit. An Open Source Python library for generating PDFs and graphics.""", |
2058 | |
2059 | |
2060 | === modified file 'src/reportlab/__init__.py' |
2061 | --- src/reportlab/__init__.py 2010-12-06 12:45:44 +0000 |
2062 | +++ src/reportlab/__init__.py 2013-04-14 00:48:45 +0000 |
2063 | @@ -1,21 +1,25 @@ |
2064 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2065 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2066 | #see license.txt for license details |
2067 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/__init__.py |
2068 | -__version__=''' $Id: __init__.py 3788 2010-09-29 10:44:00Z rgbecker $ ''' |
2069 | +__version__=''' $Id: __init__.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2070 | __doc__="""The Reportlab PDF generation library.""" |
2071 | -Version = "2.5" |
2072 | +Version = "2.6" |
2073 | |
2074 | import sys |
2075 | |
2076 | -if sys.version_info[0:2] < (2, 4): |
2077 | - warning = """The trunk of reportlab requires Python 2.4 or higher. |
2078 | +if sys.version_info[0:2] < (2, 5): |
2079 | + warning = """The trunk of reportlab currently requires Python 2.5 or higher. |
2080 | |
2081 | Python 2.3 users may still use ReportLab 2.4 or any other bugfixes |
2082 | - derived from it. Python 2.2 and below need to use released versions |
2083 | - beginning with 1.x (e.g. 1.21), or snapshots or checkouts from |
2084 | - our 'version1' branch. |
2085 | + derived from it, and Python 2.4 users may use ReportLab 2.5. |
2086 | + Python 2.2 and below need to use released versions beginning with |
2087 | + 1.x (e.g. 1.21), or snapshots or checkouts from our 'version1' branch. |
2088 | + |
2089 | + Our current plan is to remove Python 2.5 compatibility on our next release, |
2090 | + allowing us to use the 2to3 tool and work on Python 3.0 compatibility. |
2091 | + If you have a choice, Python 2.7.x is best long term version to use. |
2092 | """ |
2093 | - raise ImportError("reportlab needs Python 2.4 or higher", warning) |
2094 | + raise ImportError("reportlab needs Python 2.5 or higher", warning) |
2095 | |
2096 | def getStory(context): |
2097 | "This is a helper for our old autogenerated documentation system" |
2098 | |
2099 | === modified file 'src/reportlab/graphics/__init__.py' |
2100 | --- src/reportlab/graphics/__init__.py 2009-02-22 14:19:44 +0000 |
2101 | +++ src/reportlab/graphics/__init__.py 2013-04-14 00:48:45 +0000 |
2102 | @@ -1,6 +1,6 @@ |
2103 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2104 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2105 | #see license.txt for license details |
2106 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/__init__.py |
2107 | -__version__=''' $Id: __init__.py 3345 2008-12-12 17:55:22Z damian $ ''' |
2108 | +__version__=''' $Id: __init__.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2109 | __doc__='''Framework for reusable object graphics, in PDF or bitmap form''' |
2110 | |
2111 | |
2112 | === modified file 'src/reportlab/graphics/barcode/__init__.py' |
2113 | --- src/reportlab/graphics/barcode/__init__.py 2010-12-06 12:45:44 +0000 |
2114 | +++ src/reportlab/graphics/barcode/__init__.py 2013-04-14 00:48:45 +0000 |
2115 | @@ -42,7 +42,7 @@ |
2116 | BarcodePOSTNET, BarcodeUSPS_4State |
2117 | |
2118 | #newer codes will typically get their own module |
2119 | - from eanbc import Ean13BarcodeWidget, Ean8BarcodeWidget |
2120 | + from eanbc import Ean13BarcodeWidget, Ean8BarcodeWidget, UPCA |
2121 | from qr import QrCodeWidget |
2122 | |
2123 | |
2124 | @@ -64,6 +64,7 @@ |
2125 | BarcodeUSPS_4State, |
2126 | Ean13BarcodeWidget, |
2127 | Ean8BarcodeWidget, |
2128 | + UPCA, |
2129 | QrCodeWidget, |
2130 | ): |
2131 | codeName = widget.codeName |
2132 | |
2133 | === modified file 'src/reportlab/graphics/barcode/eanbc.py' |
2134 | --- src/reportlab/graphics/barcode/eanbc.py 2010-12-06 12:45:44 +0000 |
2135 | +++ src/reportlab/graphics/barcode/eanbc.py 2013-04-14 00:48:45 +0000 |
2136 | @@ -113,15 +113,16 @@ |
2137 | else: |
2138 | manufacturerCodes[int(k)] = v |
2139 | |
2140 | -class isEan13String(Validator): |
2141 | - def test(self,x): |
2142 | - return type(x) is str and len(x)<=12 and len([c for c in x if c in "0123456789"])==12 |
2143 | -isEan13String = isEan13String() |
2144 | +def nDigits(n): |
2145 | + class _ndigits(Validator): |
2146 | + def test(self,x): |
2147 | + return type(x) is str and len(x)<=n and len([c for c in x if c in "0123456789"])==n |
2148 | + return _ndigits() |
2149 | |
2150 | class Ean13BarcodeWidget(PlotArea): |
2151 | codeName = "EAN13" |
2152 | _attrMap = AttrMap(BASE=PlotArea, |
2153 | - value = AttrMapValue(isEan13String, desc='the number'), |
2154 | + value = AttrMapValue(nDigits(12), desc='the number'), |
2155 | fontName = AttrMapValue(isString, desc='fontName'), |
2156 | fontSize = AttrMapValue(isNumber, desc='font size'), |
2157 | x = AttrMapValue(isNumber, desc='x-coord'), |
2158 | @@ -295,15 +296,10 @@ |
2159 | return chr(z+((10-(iSum%10))%10)) |
2160 | _checkdigit=classmethod(_checkdigit) |
2161 | |
2162 | -class isEan8String(Validator): |
2163 | - def test(self,x): |
2164 | - return type(x) is str and len(x)<=7 and len([c for c in x if c in "0123456789"])==7 |
2165 | -isEan8String = isEan8String() |
2166 | - |
2167 | class Ean8BarcodeWidget(Ean13BarcodeWidget): |
2168 | codeName = "EAN8" |
2169 | _attrMap = AttrMap(BASE=Ean13BarcodeWidget, |
2170 | - value = AttrMapValue(isEan8String, desc='the number'), |
2171 | + value = AttrMapValue(nDigits(7), desc='the number'), |
2172 | ) |
2173 | _start_right = 4 #for ean-13 left = [0:7] right=[7:13] |
2174 | _nbars = 85 |
2175 | @@ -339,3 +335,14 @@ |
2176 | x = (59.5-9+self._lquiet)*barWidth |
2177 | c = s[4:] |
2178 | gAdd(String(x,y,c,fontName=fontName,fontSize=fontSize,fillColor=textColor,textAnchor='middle')) |
2179 | + |
2180 | +class UPCA(Ean13BarcodeWidget): |
2181 | + codeName = "UPCA" |
2182 | + _attrMap = AttrMap(BASE=Ean13BarcodeWidget, |
2183 | + value = AttrMapValue(nDigits(11), desc='the number'), |
2184 | + ) |
2185 | + _start_right = 6 |
2186 | + _digits = 11 |
2187 | + _0csw = 3 |
2188 | + _1csw = 1 |
2189 | + _nbars = 1+7*11+2*3+5 |
2190 | |
2191 | === modified file 'src/reportlab/graphics/barcode/test.py' |
2192 | --- src/reportlab/graphics/barcode/test.py 2008-10-19 23:16:31 +0000 |
2193 | +++ src/reportlab/graphics/barcode/test.py 2013-04-14 00:48:45 +0000 |
2194 | @@ -63,6 +63,10 @@ |
2195 | story.append(bcd) |
2196 | story.append(Paragraph('EAN8', styleN)) |
2197 | bcd = createBarcodeDrawing('EAN8', value='1234567') |
2198 | + story.append(bcd) |
2199 | + story.append(Paragraph('UPCA', styleN)) |
2200 | + bcd = createBarcodeDrawing('UPCA', value='03600029145') |
2201 | + story.append(bcd) |
2202 | story.append(Paragraph('USPS_4State', styleN)) |
2203 | bcd = createBarcodeDrawing('USPS_4State', value='01234567094987654321',routing='01234567891') |
2204 | story.append(bcd) |
2205 | |
2206 | === modified file 'src/reportlab/graphics/barcode/usps4s.py' |
2207 | --- src/reportlab/graphics/barcode/usps4s.py 2008-10-19 23:16:31 +0000 |
2208 | +++ src/reportlab/graphics/barcode/usps4s.py 2013-04-14 00:48:45 +0000 |
2209 | @@ -1,6 +1,6 @@ |
2210 | -#copyright ReportLab Inc. 2000-2006 |
2211 | +#copyright ReportLab Inc. 2000-2012 |
2212 | #see license.txt for license details |
2213 | -__version__=''' $Id: usps4s.py 2966 2006-08-31 15:20:29Z rgbecker $ ''' |
2214 | +__version__=''' $Id: usps4s.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2215 | __all__ = ('USPS_4State',) |
2216 | |
2217 | from reportlab.lib.colors import black |
2218 | |
2219 | === modified file 'src/reportlab/graphics/barcode/widgets.py' |
2220 | --- src/reportlab/graphics/barcode/widgets.py 2010-12-06 12:45:44 +0000 |
2221 | +++ src/reportlab/graphics/barcode/widgets.py 2013-04-14 00:48:45 +0000 |
2222 | @@ -1,6 +1,6 @@ |
2223 | -#copyright ReportLab Europe Limited. 2000-2006 |
2224 | +#copyright ReportLab Europe Limited. 2000-2012 |
2225 | #see license.txt for license details |
2226 | -__version__=''' $Id: widgets.py 3764 2010-09-06 13:24:45Z juraj $ ''' |
2227 | +__version__=''' $Id: widgets.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2228 | __all__= ( |
2229 | 'BarcodeI2of5', |
2230 | 'BarcodeCode128', |
2231 | |
2232 | === modified file 'src/reportlab/graphics/charts/__init__.py' |
2233 | --- src/reportlab/graphics/charts/__init__.py 2009-02-22 14:19:44 +0000 |
2234 | +++ src/reportlab/graphics/charts/__init__.py 2013-04-14 00:48:45 +0000 |
2235 | @@ -1,5 +1,5 @@ |
2236 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2237 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2238 | #see license.txt for license details |
2239 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/__init__.py |
2240 | -__version__=''' $Id: __init__.py 3345 2008-12-12 17:55:22Z damian $ ''' |
2241 | +__version__=''' $Id: __init__.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2242 | __doc__='''Business charts''' |
2243 | |
2244 | === modified file 'src/reportlab/graphics/charts/areas.py' |
2245 | --- src/reportlab/graphics/charts/areas.py 2010-02-16 23:32:55 +0000 |
2246 | +++ src/reportlab/graphics/charts/areas.py 2013-04-14 00:48:45 +0000 |
2247 | @@ -1,8 +1,8 @@ |
2248 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2249 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2250 | #see license.txt for license details |
2251 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/areas.py |
2252 | |
2253 | -__version__=''' $Id: areas.py 3602 2009-11-26 16:25:50Z meitham $ ''' |
2254 | +__version__=''' $Id: areas.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2255 | __doc__='''This module defines a Area mixin classes''' |
2256 | |
2257 | from reportlab.lib.validators import isNumber, isColor, isColorOrNone, isNoneOrShape |
2258 | |
2259 | === modified file 'src/reportlab/graphics/charts/axes.py' |
2260 | --- src/reportlab/graphics/charts/axes.py 2010-12-06 12:45:44 +0000 |
2261 | +++ src/reportlab/graphics/charts/axes.py 2013-04-14 00:48:45 +0000 |
2262 | @@ -1,6 +1,6 @@ |
2263 | -#Copyright ReportLab Europe Ltd. 2000-2010 |
2264 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2265 | #see license.txt for license details |
2266 | -__version__=''' $Id: axes.py 3748 2010-07-27 09:36:33Z rgbecker $ ''' |
2267 | +__version__=''' $Id: axes.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2268 | __doc__="""Collection of axes for charts. |
2269 | |
2270 | The current collection comprises axes for charts using cartesian |
2271 | @@ -37,10 +37,12 @@ |
2272 | isNormalDate |
2273 | from reportlab.lib.attrmap import * |
2274 | from reportlab.lib import normalDate |
2275 | -from reportlab.graphics.shapes import Drawing, Line, PolyLine, Group, STATE_DEFAULTS, _textBoxLimits, _rotatedBoxLimits |
2276 | +from reportlab.graphics.shapes import Drawing, Line, PolyLine, Rect, Group, STATE_DEFAULTS, _textBoxLimits, _rotatedBoxLimits |
2277 | from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection |
2278 | from reportlab.graphics.charts.textlabels import Label |
2279 | from reportlab.graphics.charts.utils import nextRoundNumber |
2280 | +from reportlab.graphics.widgets.grids import ShadedRect |
2281 | +from reportlab.lib.colors import Color |
2282 | import copy |
2283 | |
2284 | |
2285 | @@ -76,8 +78,8 @@ |
2286 | class AxisLineAnnotation: |
2287 | '''Create a grid like line using the given user value to draw the line |
2288 | kwds may contain |
2289 | - startOffset offset from the default grid start position |
2290 | - endOffset offset from the default grid end position |
2291 | + startOffset if true v is offset from the default grid start position |
2292 | + endOffset if true v is offset from the default grid end position |
2293 | scaleValue True/not given --> scale the value |
2294 | otherwise use the absolute value |
2295 | lo lowest coordinate to draw default 0 |
2296 | @@ -93,10 +95,14 @@ |
2297 | def __call__(self,axis): |
2298 | kwds = self._kwds.copy() |
2299 | scaleValue = kwds.pop('scaleValue',True) |
2300 | + endOffset = kwds.pop('endOffset',False) |
2301 | + startOffset = kwds.pop('endOffset',False) |
2302 | if axis.isYAxis: |
2303 | offs = axis._x |
2304 | + d0 = axis._y |
2305 | else: |
2306 | offs = axis._y |
2307 | + d0 = axis._x |
2308 | s = kwds.pop('start',None) |
2309 | e = kwds.pop('end',None) |
2310 | if s is None or e is None: |
2311 | @@ -109,15 +115,19 @@ |
2312 | else: |
2313 | if s is None: s = 0 |
2314 | if e is None: e = 0 |
2315 | - hi = kwds.pop('hi',axis._length) |
2316 | - lo = kwds.pop('lo',0) |
2317 | + hi = kwds.pop('hi',axis._length)+d0 |
2318 | + lo = kwds.pop('lo',0)+d0 |
2319 | lo,hi=min(lo,hi),max(lo,hi) |
2320 | drawAtLimit = kwds.pop('drawAtLimit',False) |
2321 | + oaglp = axis._get_line_pos |
2322 | if not scaleValue: |
2323 | - oaglp = axis._get_line_pos |
2324 | axis._get_line_pos = lambda x: x |
2325 | try: |
2326 | v = self._v |
2327 | + if endOffset: |
2328 | + v = v + hi |
2329 | + elif startOffset: |
2330 | + v = v + lo |
2331 | func = axis._getLineFunc(s-offs,e-offs,kwds.pop('parent',None)) |
2332 | if not hasattr(axis,'_tickValues'): |
2333 | axis._pseudo_configure() |
2334 | @@ -133,10 +143,78 @@ |
2335 | for k,v in kwds.iteritems(): |
2336 | setattr(L,k,v) |
2337 | finally: |
2338 | - if not scaleValue: |
2339 | - axis._get_line_pos = oaglp |
2340 | + axis._get_line_pos = oaglp |
2341 | return L |
2342 | |
2343 | +class AxisBackgroundAnnotation: |
2344 | + '''Create a set of coloured bars on the background of a chart using axis ticks as the bar borders |
2345 | + colors is a set of colors to use for the background bars. A colour of None is just a skip. |
2346 | + Special effects if you pass a rect or Shaded rect instead. |
2347 | + ''' |
2348 | + def __init__(self,colors,**kwds): |
2349 | + self._colors = colors |
2350 | + self._kwds = kwds |
2351 | + |
2352 | + def __call__(self,axis): |
2353 | + colors = self._colors |
2354 | + if not colors: return |
2355 | + kwds = self._kwds.copy() |
2356 | + isYAxis = axis.isYAxis |
2357 | + if isYAxis: |
2358 | + offs = axis._x |
2359 | + d0 = axis._y |
2360 | + else: |
2361 | + offs = axis._y |
2362 | + d0 = axis._x |
2363 | + s = kwds.pop('start',None) |
2364 | + e = kwds.pop('end',None) |
2365 | + if s is None or e is None: |
2366 | + dim = getattr(getattr(axis,'joinAxis',None),'getGridDims',None) |
2367 | + if dim and hasattr(dim,'__call__'): |
2368 | + dim = dim() |
2369 | + if dim: |
2370 | + if s is None: s = dim[0] |
2371 | + if e is None: e = dim[1] |
2372 | + else: |
2373 | + if s is None: s = 0 |
2374 | + if e is None: e = 0 |
2375 | + if not hasattr(axis,'_tickValues'): |
2376 | + axis._pseudo_configure() |
2377 | + tv = getattr(axis,'_tickValues',None) |
2378 | + if not tv: return |
2379 | + G = Group() |
2380 | + ncolors = len(colors) |
2381 | + v0 = axis._get_line_pos(tv[0]) |
2382 | + for i in xrange(1,len(tv)): |
2383 | + v1 = axis._get_line_pos(tv[i]) |
2384 | + c = colors[(i-1)%ncolors] |
2385 | + if c: |
2386 | + if isYAxis: |
2387 | + y = v0 |
2388 | + x = s |
2389 | + height = v1-v0 |
2390 | + width = e-s |
2391 | + else: |
2392 | + x = v0 |
2393 | + y = s |
2394 | + width = v1-v0 |
2395 | + height = e-s |
2396 | + if isinstance(c,Color): |
2397 | + r = Rect(x,y,width,height,fillColor=c,strokeColor=None) |
2398 | + elif isinstance(c,Rect): |
2399 | + r = Rect(x,y,width,height) |
2400 | + for k in c.__dict__: |
2401 | + if k not in ('x','y','width','height'): |
2402 | + setattr(r,k,getattr(c,k)) |
2403 | + elif isinstance(c,ShadedRect): |
2404 | + r = ShadedRect(x=x,y=y,width=width,height=height) |
2405 | + for k in c.__dict__: |
2406 | + if k not in ('x','y','width','height'): |
2407 | + setattr(r,k,getattr(c,k)) |
2408 | + G.add(r) |
2409 | + v0 = v1 |
2410 | + return G |
2411 | + |
2412 | class TickLU: |
2413 | '''lookup special cases for tick values''' |
2414 | def __init__(self,*T,**kwds): |
2415 | @@ -375,6 +453,7 @@ |
2416 | annotations = AttrMapValue(None,desc='list of annotations'), |
2417 | loLLen = AttrMapValue(isNumber, desc='extra line length before start of the axis'), |
2418 | hiLLen = AttrMapValue(isNumber, desc='extra line length after end of the axis'), |
2419 | + skipGrid = AttrMapValue(OneOf('none','top','both','bottom'),"grid lines to skip top bottom both none"), |
2420 | ) |
2421 | |
2422 | def __init__(self): |
2423 | @@ -612,31 +691,24 @@ |
2424 | |
2425 | def joinToAxis(self, yAxis, mode='bottom', pos=None): |
2426 | "Join with y-axis using some mode." |
2427 | - |
2428 | _assertYAxis(yAxis) |
2429 | if mode == 'bottom': |
2430 | - self._x = yAxis._x |
2431 | self._y = yAxis._y |
2432 | elif mode == 'top': |
2433 | - self._x = yAxis._x |
2434 | self._y = yAxis._y + yAxis._length |
2435 | elif mode == 'value': |
2436 | - self._x = yAxis._x |
2437 | self._y = yAxis.scale(pos) |
2438 | elif mode == 'points': |
2439 | - self._x = yAxis._x |
2440 | self._y = pos |
2441 | |
2442 | def _joinToAxis(self): |
2443 | ja = self.joinAxis |
2444 | if ja: |
2445 | jam = self.joinAxisMode |
2446 | - jap = self.joinAxisPos |
2447 | - jta = self.joinToAxis |
2448 | if jam in ('bottom', 'top'): |
2449 | - jta(ja, mode=jam) |
2450 | + self.joinToAxis(ja, mode=jam) |
2451 | elif jam in ('value', 'points'): |
2452 | - jta(ja, mode=jam, pos=jap) |
2453 | + self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) |
2454 | |
2455 | def scale(self, idx): |
2456 | """returns the x position and width in drawing units of the slice""" |
2457 | @@ -726,30 +798,23 @@ |
2458 | "Join with x-axis using some mode." |
2459 | |
2460 | _assertXAxis(xAxis) |
2461 | - |
2462 | if mode == 'left': |
2463 | self._x = xAxis._x * 1.0 |
2464 | - self._y = xAxis._y * 1.0 |
2465 | elif mode == 'right': |
2466 | self._x = (xAxis._x + xAxis._length) * 1.0 |
2467 | - self._y = xAxis._y * 1.0 |
2468 | elif mode == 'value': |
2469 | self._x = xAxis.scale(pos) * 1.0 |
2470 | - self._y = xAxis._y * 1.0 |
2471 | elif mode == 'points': |
2472 | self._x = pos * 1.0 |
2473 | - self._y = xAxis._y * 1.0 |
2474 | |
2475 | def _joinToAxis(self): |
2476 | ja = self.joinAxis |
2477 | if ja: |
2478 | jam = self.joinAxisMode |
2479 | - jap = self.joinAxisPos |
2480 | - jta = self.joinToAxis |
2481 | if jam in ('left', 'right'): |
2482 | - jta(ja, mode=jam) |
2483 | + self.joinToAxis(ja, mode=jam) |
2484 | elif jam in ('value', 'points'): |
2485 | - jta(ja, mode=jam, pos=jap) |
2486 | + self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) |
2487 | |
2488 | def scale(self, idx): |
2489 | "Returns the y position and width in drawing units of the slice." |
2490 | @@ -872,6 +937,7 @@ |
2491 | subGridStart = AttrMapValue(isNumberOrNone, desc='Start of grid lines wrt axis origin'), |
2492 | subGridEnd = AttrMapValue(isNumberOrNone, desc='End of grid lines wrt axis origin'), |
2493 | keepTickLabelsInside = AttrMapValue(isBoolean, desc='Ensure tick labels do not project beyond bounds of axis if true'), |
2494 | + skipGrid = AttrMapValue(OneOf('none','top','both','bottom'),"grid lines to skip top bottom both none"), |
2495 | ) |
2496 | |
2497 | def __init__(self,**kw): |
2498 | @@ -1377,28 +1443,22 @@ |
2499 | "Join with y-axis using some mode." |
2500 | _assertYAxis(yAxis) |
2501 | if mode == 'bottom': |
2502 | - self._x = yAxis._x * 1.0 |
2503 | self._y = yAxis._y * 1.0 |
2504 | elif mode == 'top': |
2505 | - self._x = yAxis._x * 1.0 |
2506 | self._y = (yAxis._y + yAxis._length) * 1.0 |
2507 | elif mode == 'value': |
2508 | - self._x = yAxis._x * 1.0 |
2509 | self._y = yAxis.scale(pos) * 1.0 |
2510 | elif mode == 'points': |
2511 | - self._x = yAxis._x * 1.0 |
2512 | self._y = pos * 1.0 |
2513 | |
2514 | def _joinToAxis(self): |
2515 | ja = self.joinAxis |
2516 | if ja: |
2517 | - jam = self.joinAxisMode |
2518 | - jap = self.joinAxisPos |
2519 | - jta = self.joinToAxis |
2520 | + jam = self.joinAxisMode or 'bottom' |
2521 | if jam in ('bottom', 'top'): |
2522 | - jta(ja, mode=jam) |
2523 | + self.joinToAxis(ja, mode=jam) |
2524 | elif jam in ('value', 'points'): |
2525 | - jta(ja, mode=jam, pos=jap) |
2526 | + self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) |
2527 | |
2528 | def makeAxis(self): |
2529 | g = Group() |
2530 | @@ -1485,6 +1545,7 @@ |
2531 | dailyFreq = AttrMapValue(isBoolean, desc='True if we are to assume daily data to be ticked at end of month.'), |
2532 | specifiedTickDates = AttrMapValue(NoneOr(SequenceOf(isNormalDate)), desc='Actual tick values to use; no calculations done'), |
2533 | specialTickClear = AttrMapValue(isBoolean, desc='clear rather than delete close ticks when forced first/end dates'), |
2534 | + skipGrid = AttrMapValue(OneOf('none','top','both','bottom'),"grid lines to skip top bottom both none"), |
2535 | ) |
2536 | |
2537 | _valueClass = normalDate.ND |
2538 | @@ -1755,27 +1816,21 @@ |
2539 | _assertXAxis(xAxis) |
2540 | if mode == 'left': |
2541 | self._x = xAxis._x * 1.0 |
2542 | - self._y = xAxis._y * 1.0 |
2543 | elif mode == 'right': |
2544 | self._x = (xAxis._x + xAxis._length) * 1.0 |
2545 | - self._y = xAxis._y * 1.0 |
2546 | elif mode == 'value': |
2547 | self._x = xAxis.scale(pos) * 1.0 |
2548 | - self._y = xAxis._y * 1.0 |
2549 | elif mode == 'points': |
2550 | self._x = pos * 1.0 |
2551 | - self._y = xAxis._y * 1.0 |
2552 | |
2553 | def _joinToAxis(self): |
2554 | ja = self.joinAxis |
2555 | if ja: |
2556 | jam = self.joinAxisMode |
2557 | - jap = self.joinAxisPos |
2558 | - jta = self.joinToAxis |
2559 | if jam in ('left', 'right'): |
2560 | - jta(ja, mode=jam) |
2561 | + self.joinToAxis(ja, mode=jam) |
2562 | elif jam in ('value', 'points'): |
2563 | - jta(ja, mode=jam, pos=jap) |
2564 | + self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) |
2565 | |
2566 | def makeAxis(self): |
2567 | g = Group() |
2568 | |
2569 | === modified file 'src/reportlab/graphics/charts/barcharts.py' |
2570 | --- src/reportlab/graphics/charts/barcharts.py 2010-12-06 12:45:44 +0000 |
2571 | +++ src/reportlab/graphics/charts/barcharts.py 2013-04-14 00:48:45 +0000 |
2572 | @@ -1,7 +1,7 @@ |
2573 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2574 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2575 | #see license.txt for license details |
2576 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/barcharts.py |
2577 | -__version__=''' $Id: barcharts.py 3761 2010-09-02 14:40:46Z damian $ ''' |
2578 | +__version__=''' $Id: barcharts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2579 | __doc__="""This module defines a variety of Bar Chart components. |
2580 | |
2581 | The basic flavors are stacked and side-by-side, available in horizontal and |
2582 | @@ -49,7 +49,7 @@ |
2583 | "Abstract base class, unusable by itself." |
2584 | |
2585 | _attrMap = AttrMap(BASE=PlotArea, |
2586 | - useAbsolute = AttrMapValue(EitherOr((isBoolean,EitherOr((isString,isNumber)))), desc='Flag to use absolute spacing values; use string of gsb for finer control\n(g=groupSpacing,s=barSpacing,b=barWidth). ',advancedUsage=1), |
2587 | + useAbsolute = AttrMapValue(EitherOr((isBoolean,EitherOr((isString,isNumber)))), desc='Flag to use absolute spacing values; use string of gsb for finer control\n(g=groupSpacing,s=barSpacing,b=barWidth).',advancedUsage=1), |
2588 | barWidth = AttrMapValue(isNumber, desc='The width of an individual bar.'), |
2589 | groupSpacing = AttrMapValue(isNumber, desc='Width between groups of bars.'), |
2590 | barSpacing = AttrMapValue(isNumber, desc='Width between individual bars.'), |
2591 | @@ -67,6 +67,16 @@ |
2592 | categoryLabelBarSize = AttrMapValue(isNumber, desc='width to leave for a category label to go between categories.'), |
2593 | categoryLabelBarOrder = AttrMapValue(OneOf('first','last','auto'), desc='where any label bar should appear first/last'), |
2594 | barRecord = AttrMapValue(None, desc='callable(bar,label=labelText,value=value,**kwds) to record bar information', advancedUsage=1), |
2595 | + zIndexOverrides = AttrMapValue(isStringOrNone, desc='''None (the default ie use old z ordering scheme) or a ',' separated list of key=value (int/float) for new zIndex ordering. If used defaults are |
2596 | + background=0, |
2597 | + categoryAxis=1, |
2598 | + valueAxis=2, |
2599 | + bars=3, |
2600 | + barLabels=4, |
2601 | + categoryAxisGrid=5, |
2602 | + valueAxisGrid=6, |
2603 | + annotations=7'''), |
2604 | + categoryNALabel = AttrMapValue(NoneOrInstanceOfNA_Label, desc='Label to use for a group of N/A values.',advancedUsage=1), |
2605 | ) |
2606 | |
2607 | def makeSwatchSample(self, rowNo, x, y, width, height): |
2608 | @@ -144,8 +154,8 @@ |
2609 | self.bars[0].fillColor = colors.red |
2610 | self.bars[1].fillColor = colors.green |
2611 | self.bars[2].fillColor = colors.blue |
2612 | - self.naLabel = None #NA_Label() |
2613 | - |
2614 | + self.naLabel = self.categoryNALabel = None |
2615 | + self.zIndexOverrides = None |
2616 | |
2617 | def demo(self): |
2618 | """Shows basic use of a bar chart""" |
2619 | @@ -194,17 +204,68 @@ |
2620 | cA.configure(self._configureData) |
2621 | self.calcBarPositions() |
2622 | g = Group() |
2623 | - g.add(self.makeBackground()) |
2624 | - cAdgl = getattr(cA,'drawGridLast',False) |
2625 | - vAdgl = getattr(vA,'drawGridLast',False) |
2626 | - if not cAdgl: cA.makeGrid(g,parent=self, dim=vA.getGridDims) |
2627 | - if not vAdgl: vA.makeGrid(g,parent=self, dim=cA.getGridDims) |
2628 | - g.add(self.makeBars()) |
2629 | - g.add(cA) |
2630 | - g.add(vA) |
2631 | - if cAdgl: cA.makeGrid(g,parent=self, dim=vA.getGridDims) |
2632 | - if vAdgl: vA.makeGrid(g,parent=self, dim=cA.getGridDims) |
2633 | - for a in getattr(self,'annotations',()): g.add(a(self,cA.scale,vA.scale)) |
2634 | + |
2635 | + zIndex = getattr(self,'zIndexOverrides',None) |
2636 | + if not zIndex: |
2637 | + g.add(self.makeBackground()) |
2638 | + cAdgl = getattr(cA,'drawGridLast',False) |
2639 | + vAdgl = getattr(vA,'drawGridLast',False) |
2640 | + if not cAdgl: cA.makeGrid(g,parent=self, dim=vA.getGridDims) |
2641 | + if not vAdgl: vA.makeGrid(g,parent=self, dim=cA.getGridDims) |
2642 | + g.add(self.makeBars()) |
2643 | + g.add(cA) |
2644 | + g.add(vA) |
2645 | + if cAdgl: cA.makeGrid(g,parent=self, dim=vA.getGridDims) |
2646 | + if vAdgl: vA.makeGrid(g,parent=self, dim=cA.getGridDims) |
2647 | + for a in getattr(self,'annotations',()): g.add(a(self,cA.scale,vA.scale)) |
2648 | + else: |
2649 | + Z=dict( |
2650 | + background=0, |
2651 | + categoryAxis=1, |
2652 | + valueAxis=2, |
2653 | + bars=3, |
2654 | + barLabels=4, |
2655 | + categoryAxisGrid=5, |
2656 | + valueAxisGrid=6, |
2657 | + annotations=7, |
2658 | + ) |
2659 | + for z in zIndex.strip().split(','): |
2660 | + z = z.strip() |
2661 | + if not z: continue |
2662 | + try: |
2663 | + k,v=z.split('=') |
2664 | + except: |
2665 | + raise ValueError('Badly formatted zIndex clause %r in %r\nallowed variables are\n%s' % (z,zIndex,'\n'.join(['%s=%r'% (k,Z[k]) for k in sorted(Z.keys())]))) |
2666 | + if k not in Z: |
2667 | + raise ValueError('Unknown zIndex variable %r in %r\nallowed variables are\n%s' % (k,Z,'\n'.join(['%s=%r'% (k,Z[k]) for k in sorted(Z.keys())]))) |
2668 | + try: |
2669 | + v = eval(v,{}) #only constants allowed |
2670 | + assert isinstance(v,(float,int)) |
2671 | + except: |
2672 | + raise ValueError('Bad zIndex value %r in clause %r of zIndex\nallowed variables are\n%s' % (v,z,zIndex,'\n'.join(['%s=%r'% (k,Z[k]) for k in sorted(Z.keys())]))) |
2673 | + Z[k] = v |
2674 | + Z = [(v,k) for k,v in Z.iteritems()] |
2675 | + Z.sort() |
2676 | + b = self.makeBars() |
2677 | + bl = b.contents.pop(-1) |
2678 | + for v,k in Z: |
2679 | + if k=='background': |
2680 | + g.add(self.makeBackground()) |
2681 | + elif k=='categoryAxis': |
2682 | + g.add(cA) |
2683 | + elif k=='categoryAxisGrid': |
2684 | + cA.makeGrid(g,parent=self, dim=vA.getGridDims) |
2685 | + elif k=='valueAxis': |
2686 | + g.add(vA) |
2687 | + elif k=='valueAxisGrid': |
2688 | + vA.makeGrid(g,parent=self, dim=cA.getGridDims) |
2689 | + elif k=='bars': |
2690 | + g.add(b) |
2691 | + elif k=='barLabels': |
2692 | + g.add(bl) |
2693 | + elif k=='annotations': |
2694 | + for a in getattr(self,'annotations',()): g.add(a(self,cA.scale,vA.scale)) |
2695 | + |
2696 | del self._configureData |
2697 | return g |
2698 | |
2699 | @@ -398,16 +459,16 @@ |
2700 | if text: |
2701 | self._addLabel(text, self.barLabels[(rowNo, colNo)], g, rowNo, colNo, x, y, width, height) |
2702 | |
2703 | - def _addNABarLabel(self, g, rowNo, colNo, x, y, width, height): |
2704 | - na = self.naLabel |
2705 | + def _addNABarLabel(self, g, rowNo, colNo, x, y, width, height, calcOnly=False, na=None): |
2706 | + if na is None: na = self.naLabel |
2707 | if na and na.text: |
2708 | na = copy.copy(na) |
2709 | v = self.valueAxis._valueMax<=0 and -1e-8 or 1e-8 |
2710 | if width is None: width = v |
2711 | if height is None: height = v |
2712 | - self._addLabel(na.text, na, g, rowNo, colNo, x, y, width, height) |
2713 | + return self._addLabel(na.text, na, g, rowNo, colNo, x, y, width, height, calcOnly=calcOnly) |
2714 | |
2715 | - def _addLabel(self, text, label, g, rowNo, colNo, x, y, width, height): |
2716 | + def _addLabel(self, text, label, g, rowNo, colNo, x, y, width, height, calcOnly=False): |
2717 | if label.visible: |
2718 | labelWidth = stringWidth(text, label.fontName, label.fontSize) |
2719 | flipXY = self._flipXY |
2720 | @@ -447,6 +508,7 @@ |
2721 | dx = 0 |
2722 | else: |
2723 | dy = dx = 0 |
2724 | + if calcOnly: return x0+dx, y0+dy |
2725 | label.setOrigin(x0+dx, y0+dy) |
2726 | label.setText(text) |
2727 | sC, sW = label.lineStrokeColor, label.lineStrokeWidth |
2728 | @@ -471,16 +533,41 @@ |
2729 | lenData = len(self.data) |
2730 | bars = self.bars |
2731 | br = getattr(self,'barRecord',None) |
2732 | + BP = self._barPositions |
2733 | + |
2734 | + catNAL = self.categoryNALabel |
2735 | + catNNA = {} |
2736 | + if catNAL: |
2737 | + CBL = [] |
2738 | + rowNoL = lenData - 1 |
2739 | + #find all the categories that have at least one value |
2740 | + for rowNo in xrange(lenData): |
2741 | + row = BP[rowNo] |
2742 | + for colNo in xrange(len(row)): |
2743 | + x, y, width, height = row[colNo] |
2744 | + if None not in (width,height): |
2745 | + catNNA[colNo] = 1 |
2746 | + |
2747 | for rowNo in xrange(lenData): |
2748 | - row = self._barPositions[rowNo] |
2749 | + row = BP[rowNo] |
2750 | styleCount = len(bars) |
2751 | styleIdx = rowNo % styleCount |
2752 | rowStyle = bars[styleIdx] |
2753 | - for colNo in range(len(row)): |
2754 | + for colNo in xrange(len(row)): |
2755 | style = (styleIdx,colNo) in bars and bars[(styleIdx,colNo)] or rowStyle |
2756 | - (x, y, width, height) = row[colNo] |
2757 | + x, y, width, height = row[colNo] |
2758 | if None in (width,height): |
2759 | - self._addNABarLabel(lg,rowNo,colNo,x,y,width,height) |
2760 | + if colNo in catNNA: |
2761 | + self._addNABarLabel(lg,rowNo,colNo,x,y,width,height) |
2762 | + elif catNAL and colNo not in CBL: |
2763 | + r0 = self._addNABarLabel(lg,rowNo,colNo,x,y,width,height,True,catNAL) |
2764 | + if r0: |
2765 | + x, y, width, height = BP[rowNoL][colNo] |
2766 | + r1 = self._addNABarLabel(lg,rowNoL,colNo,x,y,width,height,True,catNAL) |
2767 | + x = (r0[0]+r1[0])/2.0 |
2768 | + y = (r0[1]+r1[1])/2.0 |
2769 | + self._addNABarLabel(lg,rowNoL,colNo,x,y,width,height,na=catNAL) |
2770 | + CBL.append(colNo) |
2771 | continue |
2772 | |
2773 | # Draw a rectangular symbol for each data item, |
2774 | |
2775 | === modified file 'src/reportlab/graphics/charts/doughnut.py' |
2776 | --- src/reportlab/graphics/charts/doughnut.py 2010-12-06 12:45:44 +0000 |
2777 | +++ src/reportlab/graphics/charts/doughnut.py 2013-04-14 00:48:45 +0000 |
2778 | @@ -1,9 +1,9 @@ |
2779 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2780 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2781 | #see license.txt for license details |
2782 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/doughnut.py |
2783 | # doughnut chart |
2784 | |
2785 | -__version__=''' $Id: doughnut.py 3785 2010-09-28 16:41:27Z rgbecker $ ''' |
2786 | +__version__=''' $Id: doughnut.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2787 | __doc__="""Doughnut chart |
2788 | |
2789 | Produces a circular chart like the doughnut charts produced by Excel. |
2790 | @@ -27,7 +27,7 @@ |
2791 | from reportlab.graphics.shapes import Group, Drawing, Line, Rect, Polygon, Ellipse, \ |
2792 | Wedge, String, SolidShape, UserNode, STATE_DEFAULTS |
2793 | from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder |
2794 | -from reportlab.graphics.charts.piecharts import AbstractPieChart, WedgeProperties, _addWedgeLabel |
2795 | +from reportlab.graphics.charts.piecharts import AbstractPieChart, WedgeProperties, _addWedgeLabel, fixLabelOverlaps |
2796 | from reportlab.graphics.charts.textlabels import Label |
2797 | from reportlab.graphics.widgets.markers import Marker |
2798 | |
2799 | @@ -54,6 +54,9 @@ |
2800 | direction = AttrMapValue(OneOf('clockwise', 'anticlockwise'), desc="'clockwise' or 'anticlockwise'"), |
2801 | slices = AttrMapValue(None, desc="collection of sector descriptor objects"), |
2802 | simpleLabels = AttrMapValue(isBoolean, desc="If true(default) use String not super duper WedgeLabel"), |
2803 | + # advanced usage |
2804 | + checkLabelOverlap = AttrMapValue(isBoolean, desc="If true check and attempt to fix\n standard label overlaps(default off)",advancedUsage=1), |
2805 | + sideLabels = AttrMapValue(isBoolean, desc="If true attempt to make chart with labels along side and pointers", advancedUsage=1) |
2806 | ) |
2807 | |
2808 | def __init__(self): |
2809 | @@ -66,13 +69,19 @@ |
2810 | self.startAngle = 90 |
2811 | self.direction = "clockwise" |
2812 | self.simpleLabels = 1 |
2813 | + self.checkLabelOverlap = 0 |
2814 | + self.sideLabels = 0 |
2815 | |
2816 | self.slices = TypedPropertyCollection(SectorProperties) |
2817 | self.slices[0].fillColor = colors.darkcyan |
2818 | self.slices[1].fillColor = colors.blueviolet |
2819 | self.slices[2].fillColor = colors.blue |
2820 | self.slices[3].fillColor = colors.cyan |
2821 | - |
2822 | + self.slices[4].fillColor = colors.pink |
2823 | + self.slices[5].fillColor = colors.magenta |
2824 | + self.slices[6].fillColor = colors.yellow |
2825 | + |
2826 | + |
2827 | def demo(self): |
2828 | d = Drawing(200, 100) |
2829 | |
2830 | @@ -121,8 +130,12 @@ |
2831 | normData = self.normalizeData(self.data) |
2832 | n = len(normData) |
2833 | self._seriesCount = n |
2834 | - |
2835 | + |
2836 | #labels |
2837 | + checkLabelOverlap = self.checkLabelOverlap |
2838 | + L = [] |
2839 | + L_add = L.append |
2840 | + |
2841 | if self.labels is None: |
2842 | labels = [] |
2843 | if type(n) not in (ListType,TupleType): |
2844 | @@ -157,7 +170,7 @@ |
2845 | whichWay = -1 |
2846 | |
2847 | g = Group() |
2848 | - |
2849 | + |
2850 | startAngle = self.startAngle #% 360 |
2851 | styleCount = len(self.slices) |
2852 | if type(self.data[0]) in (ListType, TupleType): |
2853 | @@ -203,14 +216,23 @@ |
2854 | |
2855 | g.add(theSector) |
2856 | |
2857 | - text = self.getSeriesName(i,'') |
2858 | - if text: |
2859 | - averageAngle = (a1+a2)/2.0 |
2860 | - aveAngleRadians = averageAngle*pi/180.0 |
2861 | - labelRadius = sectorStyle.labelRadius |
2862 | - labelX = centerx + (0.5 * self.width * cos(aveAngleRadians) * labelRadius) |
2863 | - labelY = centery + (0.5 * self.height * sin(aveAngleRadians) * labelRadius) |
2864 | - g.add(_addWedgeLabel(self,text,averageAngle,labelX,labelY,sectorStyle)) |
2865 | + if sn == 0: |
2866 | + text = self.getSeriesName(i,'') |
2867 | + if text: |
2868 | + averageAngle = (a1+a2)/2.0 |
2869 | + aveAngleRadians = averageAngle*pi/180.0 |
2870 | + labelRadius = sectorStyle.labelRadius |
2871 | + rx = xradius*labelRadius |
2872 | + ry = yradius*labelRadius |
2873 | + labelX = centerx + (0.5 * self.width * cos(aveAngleRadians) * labelRadius) |
2874 | + labelY = centery + (0.5 * self.height * sin(aveAngleRadians) * labelRadius) |
2875 | + l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,sectorStyle) |
2876 | + if checkLabelOverlap: |
2877 | + l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, |
2878 | + 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, |
2879 | + 'bounds': l.getBounds(), |
2880 | + } |
2881 | + L_add(l) |
2882 | |
2883 | else: |
2884 | #single series doughnut |
2885 | @@ -261,18 +283,23 @@ |
2886 | labelRadius = sectorStyle.labelRadius |
2887 | labelX = centerx + (0.5 * self.width * cos(aveAngleRadians) * labelRadius) |
2888 | labelY = centery + (0.5 * self.height * sin(aveAngleRadians) * labelRadius) |
2889 | - |
2890 | - theLabel = String(labelX, labelY, labels[i]) |
2891 | - theLabel.textAnchor = "middle" |
2892 | - theLabel.fontSize = sectorStyle.fontSize |
2893 | - theLabel.fontName = sectorStyle.fontName |
2894 | - theLabel.fillColor = sectorStyle.fontColor |
2895 | - |
2896 | - g.add(theLabel) |
2897 | - |
2898 | - |
2899 | + rx = xradius*labelRadius |
2900 | + ry = yradius*labelRadius |
2901 | + l = _addWedgeLabel(self,labels[i],averageAngle,labelX,labelY,sectorStyle) |
2902 | + if checkLabelOverlap: |
2903 | + l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, |
2904 | + 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, |
2905 | + 'bounds': l.getBounds(), |
2906 | + } |
2907 | + L_add(l) |
2908 | + |
2909 | + if checkLabelOverlap and L: |
2910 | + fixLabelOverlaps(L) |
2911 | + |
2912 | + for l in L: g.add(l) |
2913 | + |
2914 | return g |
2915 | - |
2916 | + |
2917 | def draw(self): |
2918 | g = Group() |
2919 | g.add(self.makeSectors()) |
2920 | @@ -336,6 +363,23 @@ |
2921 | |
2922 | return d |
2923 | |
2924 | +def sample4(): |
2925 | + "Make a more complex demo with Label Overlap fixing" |
2926 | + |
2927 | + d = Drawing(400, 400) |
2928 | + dn = Doughnut() |
2929 | + dn.x = 50 |
2930 | + dn.y = 50 |
2931 | + dn.width = 300 |
2932 | + dn.height = 300 |
2933 | + dn.data = [[10,20,30,40,50,60], [10,20,30,40]] |
2934 | + dn.labels = ['a','b','c','d','e','f'] |
2935 | + dn.checkLabelOverlap = True |
2936 | + |
2937 | + d.add(dn) |
2938 | + |
2939 | + return d |
2940 | + |
2941 | if __name__=='__main__': |
2942 | |
2943 | from reportlab.graphics.renderPDF import drawToFile |
2944 | |
2945 | === modified file 'src/reportlab/graphics/charts/legends.py' |
2946 | --- src/reportlab/graphics/charts/legends.py 2010-12-06 12:45:44 +0000 |
2947 | +++ src/reportlab/graphics/charts/legends.py 2013-04-14 00:48:45 +0000 |
2948 | @@ -1,8 +1,8 @@ |
2949 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2950 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2951 | #see license.txt for license details |
2952 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/legends.py |
2953 | |
2954 | -__version__=''' $Id: legends.py 3723 2010-06-08 15:46:32Z juraj $ ''' |
2955 | +__version__=''' $Id: legends.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2956 | __doc__="""This will be a collection of legends to be used with charts.""" |
2957 | |
2958 | import copy, operator |
2959 | |
2960 | === modified file 'src/reportlab/graphics/charts/linecharts.py' |
2961 | --- src/reportlab/graphics/charts/linecharts.py 2010-12-06 12:45:44 +0000 |
2962 | +++ src/reportlab/graphics/charts/linecharts.py 2013-04-14 00:48:45 +0000 |
2963 | @@ -1,8 +1,8 @@ |
2964 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2965 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2966 | #see license.txt for license details |
2967 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/linecharts.py |
2968 | |
2969 | -__version__=''' $Id: linecharts.py 3662 2010-02-09 11:23:58Z rgbecker $ ''' |
2970 | +__version__=''' $Id: linecharts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2971 | __doc__="""This modules defines a very preliminary Line Chart example.""" |
2972 | |
2973 | from reportlab.lib import colors |
2974 | |
2975 | === modified file 'src/reportlab/graphics/charts/lineplots.py' |
2976 | --- src/reportlab/graphics/charts/lineplots.py 2010-12-06 12:45:44 +0000 |
2977 | +++ src/reportlab/graphics/charts/lineplots.py 2013-04-14 00:48:45 +0000 |
2978 | @@ -1,8 +1,8 @@ |
2979 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
2980 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
2981 | #see license.txt for license details |
2982 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/lineplots.py |
2983 | |
2984 | -__version__=''' $Id: lineplots.py 3735 2010-07-01 12:24:52Z rgbecker $ ''' |
2985 | +__version__=''' $Id: lineplots.py 3959 2012-09-27 14:39:39Z robin $ ''' |
2986 | __doc__="""This module defines a very preliminary Line Plot example.""" |
2987 | |
2988 | import string, time |
2989 | @@ -213,7 +213,10 @@ |
2990 | else: |
2991 | labelText = labelFmt % labelValue |
2992 | elif hasattr(labelFmt,'__call__'): |
2993 | - labelText = labelFmt(labelValue) |
2994 | + if not hasattr(labelFmt,'__labelFmtEX__'): |
2995 | + labelText = labelFmt(labelValue) |
2996 | + else: |
2997 | + labelText = labelFmt(self,rowNo,colNo,x,y) |
2998 | else: |
2999 | raise ValueError("Unknown formatter type %s, expected string or function"%labelFmt) |
3000 | |
3001 | @@ -298,10 +301,18 @@ |
3002 | uSymbol = None |
3003 | |
3004 | if uSymbol: |
3005 | - j = -1 |
3006 | - if bubblePlot: drow = self.data[rowNo] |
3007 | - for xy in row: |
3008 | - j += 1 |
3009 | + if bubblePlot: drow = self.data[rowNo] |
3010 | + for j,xy in enumerate(row): |
3011 | + symbol = uSymbol2Symbol(uSymbol,xy[0],xy[1],rowColor) |
3012 | + if symbol: |
3013 | + if bubblePlot: |
3014 | + symbol.size = bubbleR*(drow[j][2]/bubbleMax)**0.5 |
3015 | + g.add(symbol) |
3016 | + else: |
3017 | + if bubblePlot: drow = self.data[rowNo] |
3018 | + for j,xy in enumerate(row): |
3019 | + usymbol = getattr(self.lines[rowNo,j],'symbol',None) |
3020 | + if not usymbol: continue |
3021 | symbol = uSymbol2Symbol(uSymbol,xy[0],xy[1],rowColor) |
3022 | if symbol: |
3023 | if bubblePlot: |
3024 | @@ -348,13 +359,27 @@ |
3025 | if self.behindAxes: |
3026 | self._lineG = Group() |
3027 | g.add(self._lineG) |
3028 | + xA._joinToAxis() |
3029 | + yA._joinToAxis() |
3030 | + xAex = xA.visibleAxis and [xA._y] or [] |
3031 | + yAex = yA.visibleAxis and [yA._x] or [] |
3032 | + skipGrid = getattr(xA,'skipGrid','none') |
3033 | + if skipGrid!=None: |
3034 | + if skipGrid in ('both','top'): |
3035 | + yAex.append(xA._x+xA._length) |
3036 | + if skipGrid in ('both','bottom'): |
3037 | + yAex.append(xA._x) |
3038 | + skipGrid = getattr(yA,'skipGrid','none') |
3039 | + if skipGrid!=None: |
3040 | + if skipGrid in ('both','top'): |
3041 | + xAex.append(yA._y+yA._length) |
3042 | + if skipGrid in ('both','bottom'): |
3043 | + xAex.append(yA._y) |
3044 | if self.gridFirst: |
3045 | - xA.makeGrid(g,parent=self,dim=yA.getGridDims) |
3046 | - yA.makeGrid(g,parent=self,dim=xA.getGridDims) |
3047 | + xA.makeGrid(g,parent=self,dim=yA.getGridDims,exclude=yAex) |
3048 | + yA.makeGrid(g,parent=self,dim=xA.getGridDims,exclude=xAex) |
3049 | g.add(xA.draw()) |
3050 | g.add(yA.draw()) |
3051 | - xAex = xA.visibleAxis and (xA._y,) or () |
3052 | - yAex = yA.visibleAxis and (yA._x,) or () |
3053 | if not self.gridFirst: |
3054 | xAdgl = getattr(xA,'drawGridLast',False) |
3055 | yAdgl = getattr(yA,'drawGridLast',False) |
3056 | @@ -801,7 +826,6 @@ |
3057 | height = AttrMapValue(isNumber, desc="Height of the area inside the axes"), |
3058 | outerBorderOn = AttrMapValue(isBoolean, desc="Is there an outer border (continuation of axes)"), |
3059 | outerBorderColor = AttrMapValue(isColorOrNone, desc="Color of outer border (if any)"), |
3060 | - background = AttrMapValue(isColorOrNone, desc="Background color (if any)"), |
3061 | labelOffset = AttrMapValue(isNumber, desc="Space between label and Axis (or other labels)",advancedUsage=1), |
3062 | axisTickLengths = AttrMapValue(isNumber, desc="Lenth of the ticks on both axes"), |
3063 | axisStrokeWidth = AttrMapValue(isNumber, desc="Stroke width for both axes"), |
3064 | @@ -853,7 +877,6 @@ |
3065 | |
3066 | #values for lineplot |
3067 | self.joinedLines = 0 |
3068 | - self.fillColor = self.background |
3069 | |
3070 | self.leftPadding=5 |
3071 | self.rightPadding=10 |
3072 | |
3073 | === modified file 'src/reportlab/graphics/charts/markers.py' |
3074 | --- src/reportlab/graphics/charts/markers.py 2009-02-22 14:19:44 +0000 |
3075 | +++ src/reportlab/graphics/charts/markers.py 2013-04-14 00:48:45 +0000 |
3076 | @@ -1,8 +1,8 @@ |
3077 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
3078 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
3079 | #see license.txt for license details |
3080 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/markers.py |
3081 | |
3082 | -__version__=''' $Id: markers.py 3345 2008-12-12 17:55:22Z damian $ ''' |
3083 | +__version__=''' $Id: markers.py 3959 2012-09-27 14:39:39Z robin $ ''' |
3084 | __doc__="""This modules defines a collection of markers used in charts. |
3085 | |
3086 | The make* functions return a simple shape or a widget as for |
3087 | |
3088 | === modified file 'src/reportlab/graphics/charts/piecharts.py' |
3089 | --- src/reportlab/graphics/charts/piecharts.py 2010-12-06 12:45:44 +0000 |
3090 | +++ src/reportlab/graphics/charts/piecharts.py 2013-04-14 00:48:45 +0000 |
3091 | @@ -1,4 +1,4 @@ |
3092 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
3093 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
3094 | #see license.txt for license details |
3095 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/piecharts.py |
3096 | # experimental pie chart script. Two types of pie - one is a monolithic |
3097 | @@ -6,7 +6,7 @@ |
3098 | #a wedges collection whic lets you customize the group or every individual |
3099 | #wedge. |
3100 | |
3101 | -__version__=''' $Id: piecharts.py 3744 2010-07-19 10:48:38Z rgbecker $ ''' |
3102 | +__version__=''' $Id: piecharts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
3103 | __doc__="""Basic Pie Chart class. |
3104 | |
3105 | This permits you to customize and pop out individual wedges; |
3106 | @@ -31,10 +31,14 @@ |
3107 | from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder |
3108 | from reportlab.graphics.charts.areas import PlotArea |
3109 | from reportlab.graphics.charts.legends import _objStr |
3110 | -from textlabels import Label |
3111 | +from reportlab.graphics.charts.textlabels import Label |
3112 | |
3113 | _ANGLE2BOXANCHOR={0:'w', 45:'sw', 90:'s', 135:'se', 180:'e', 225:'ne', 270:'n', 315: 'nw', -45: 'nw'} |
3114 | _ANGLE2RBOXANCHOR={0:'e', 45:'ne', 90:'n', 135:'nw', 180:'w', 225:'sw', 270:'s', 315: 'se', -45: 'se'} |
3115 | + |
3116 | +_ANGLELO = 1e-7 |
3117 | +_ANGLEHI = 360.0 - _ANGLELO |
3118 | + |
3119 | class WedgeLabel(Label): |
3120 | def _checkDXY(self,ba): |
3121 | pass |
3122 | @@ -59,46 +63,46 @@ |
3123 | format method. |
3124 | """ |
3125 | _attrMap = AttrMap( |
3126 | - strokeWidth = AttrMapValue(isNumber,desc=''), |
3127 | - fillColor = AttrMapValue(isColorOrNone,desc=''), |
3128 | - strokeColor = AttrMapValue(isColorOrNone,desc=''), |
3129 | - strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc=''), |
3130 | + strokeWidth = AttrMapValue(isNumber,desc='Width of the wedge border'), |
3131 | + fillColor = AttrMapValue(isColorOrNone,desc='Filling color of the wedge'), |
3132 | + strokeColor = AttrMapValue(isColorOrNone,desc='Color of the wedge border'), |
3133 | + strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc='Style of the wedge border, expressed as a list of lengths of alternating dashes and blanks'), |
3134 | strokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Line cap 0=butt, 1=round & 2=square"), |
3135 | strokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Line join 0=miter, 1=round & 2=bevel"), |
3136 | - strokeMiterLimit = AttrMapValue(isNumber,desc='miter limit control miter line joins'), |
3137 | - popout = AttrMapValue(isNumber,desc="how far of centre a wedge to pop."), |
3138 | - fontName = AttrMapValue(isString,desc=''), |
3139 | - fontSize = AttrMapValue(isNumber,desc=''), |
3140 | - fontColor = AttrMapValue(isColorOrNone,desc=''), |
3141 | - labelRadius = AttrMapValue(isNumber,desc=''), |
3142 | - label_dx = AttrMapValue(isNumber,desc=''), |
3143 | - label_dy = AttrMapValue(isNumber,desc=''), |
3144 | - label_angle = AttrMapValue(isNumber,desc=''), |
3145 | - label_boxAnchor = AttrMapValue(isBoxAnchor,desc=''), |
3146 | - label_boxStrokeColor = AttrMapValue(isColorOrNone,desc=''), |
3147 | - label_boxStrokeWidth = AttrMapValue(isNumber,desc=''), |
3148 | - label_boxFillColor = AttrMapValue(isColorOrNone,desc=''), |
3149 | - label_strokeColor = AttrMapValue(isColorOrNone,desc=''), |
3150 | - label_strokeWidth = AttrMapValue(isNumber,desc=''), |
3151 | - label_text = AttrMapValue(isStringOrNone,desc=''), |
3152 | + strokeMiterLimit = AttrMapValue(isNumber,desc='Miter limit control miter line joins'), |
3153 | + popout = AttrMapValue(isNumber,desc="How far of centre a wedge to pop"), |
3154 | + fontName = AttrMapValue(isString,desc='Name of the font of the label text'), |
3155 | + fontSize = AttrMapValue(isNumber,desc='Size of the font of the label text in points'), |
3156 | + fontColor = AttrMapValue(isColorOrNone,desc='Color of the font of the label text'), |
3157 | + labelRadius = AttrMapValue(isNumber,desc='Distance between the center of the label box and the center of the pie, expressed in times the radius of the pie'), |
3158 | + label_dx = AttrMapValue(isNumber,desc='X Offset of the label'), |
3159 | + label_dy = AttrMapValue(isNumber,desc='Y Offset of the label'), |
3160 | + label_angle = AttrMapValue(isNumber,desc='Angle of the label, default (0) is horizontal, 90 is vertical, 180 is upside down'), |
3161 | + label_boxAnchor = AttrMapValue(isBoxAnchor,desc='Anchoring point of the label'), |
3162 | + label_boxStrokeColor = AttrMapValue(isColorOrNone,desc='Border color for the label box'), |
3163 | + label_boxStrokeWidth = AttrMapValue(isNumber,desc='Border width for the label box'), |
3164 | + label_boxFillColor = AttrMapValue(isColorOrNone,desc='Filling color of the label box'), |
3165 | + label_strokeColor = AttrMapValue(isColorOrNone,desc='Border color for the label text'), |
3166 | + label_strokeWidth = AttrMapValue(isNumber,desc='Border width for the label text'), |
3167 | + label_text = AttrMapValue(isStringOrNone,desc='Text of the label'), |
3168 | label_leading = AttrMapValue(isNumberOrNone,desc=''), |
3169 | - label_width = AttrMapValue(isNumberOrNone,desc=''), |
3170 | - label_maxWidth = AttrMapValue(isNumberOrNone,desc=''), |
3171 | - label_height = AttrMapValue(isNumberOrNone,desc=''), |
3172 | - label_textAnchor = AttrMapValue(isTextAnchor,desc=''), |
3173 | + label_width = AttrMapValue(isNumberOrNone,desc='Width of the label'), |
3174 | + label_maxWidth = AttrMapValue(isNumberOrNone,desc='Maximum width the label can grow to'), |
3175 | + label_height = AttrMapValue(isNumberOrNone,desc='Height of the label'), |
3176 | + label_textAnchor = AttrMapValue(isTextAnchor,desc='Maximum height the label can grow to'), |
3177 | label_visible = AttrMapValue(isBoolean,desc="True if the label is to be drawn"), |
3178 | - label_topPadding = AttrMapValue(isNumber,'padding at top of box'), |
3179 | - label_leftPadding = AttrMapValue(isNumber,'padding at left of box'), |
3180 | - label_rightPadding = AttrMapValue(isNumber,'padding at right of box'), |
3181 | - label_bottomPadding = AttrMapValue(isNumber,'padding at bottom of box'), |
3182 | - label_simple_pointer = AttrMapValue(isBoolean,'set to True for simple pointers'), |
3183 | + label_topPadding = AttrMapValue(isNumber,'Padding at top of box'), |
3184 | + label_leftPadding = AttrMapValue(isNumber,'Padding at left of box'), |
3185 | + label_rightPadding = AttrMapValue(isNumber,'Padding at right of box'), |
3186 | + label_bottomPadding = AttrMapValue(isNumber,'Padding at bottom of box'), |
3187 | + label_simple_pointer = AttrMapValue(isBoolean,'Set to True for simple pointers'), |
3188 | label_pointer_strokeColor = AttrMapValue(isColorOrNone,desc='Color of indicator line'), |
3189 | label_pointer_strokeWidth = AttrMapValue(isNumber,desc='StrokeWidth of indicator line'), |
3190 | - label_pointer_elbowLength = AttrMapValue(isNumber,desc='length of final indicator line segment'), |
3191 | + label_pointer_elbowLength = AttrMapValue(isNumber,desc='Length of final indicator line segment'), |
3192 | label_pointer_edgePad = AttrMapValue(isNumber,desc='pad between pointer label and box'), |
3193 | label_pointer_piePad = AttrMapValue(isNumber,desc='pad between pointer label and pie'), |
3194 | swatchMarker = AttrMapValue(NoneOr(isSymbol), desc="None or makeMarker('Diamond') ...",advancedUsage=1), |
3195 | - visible = AttrMapValue(isBoolean,'set to false to skip displaying'), |
3196 | + visible = AttrMapValue(isBoolean,'Set to false to skip displaying'), |
3197 | ) |
3198 | |
3199 | def __init__(self): |
3200 | @@ -138,7 +142,13 @@ |
3201 | # now draw a label |
3202 | if self.simpleLabels: |
3203 | theLabel = String(labelX, labelY, text) |
3204 | - theLabel.textAnchor = "middle" |
3205 | + if not self.sideLabels: |
3206 | + theLabel.textAnchor = "middle" |
3207 | + else: |
3208 | + if (abs(angle) < 90 ) or (angle >270 and angle<450) or (-450< angle <-270): |
3209 | + theLabel.textAnchor = "start" |
3210 | + else: |
3211 | + theLabel.textAnchor = "end" |
3212 | theLabel._pmv = angle |
3213 | theLabel._simple_pointer = 0 |
3214 | else: |
3215 | @@ -147,9 +157,23 @@ |
3216 | theLabel.x = labelX |
3217 | theLabel.y = labelY |
3218 | theLabel.dx = wedgeStyle.label_dx |
3219 | - theLabel.dy = wedgeStyle.label_dy |
3220 | + if not self.sideLabels: |
3221 | + theLabel.dy = wedgeStyle.label_dy |
3222 | + theLabel.boxAnchor = wedgeStyle.label_boxAnchor |
3223 | + else: |
3224 | + if wedgeStyle.fontSize is None: |
3225 | + sideLabels_dy = self.fontSize / 2.5 |
3226 | + else: |
3227 | + sideLabels_dy = wedgeStyle.fontSize / 2.5 |
3228 | + if wedgeStyle.label_dy is None: |
3229 | + theLabel.dy = sideLabels_dy |
3230 | + else: |
3231 | + theLabel.dy = wedgeStyle.label_dy + sideLabels_dy |
3232 | + if (abs(angle) < 90 ) or (angle >270 and angle<450) or (-450< angle <-270): |
3233 | + theLabel.boxAnchor = 'w' |
3234 | + else: |
3235 | + theLabel.boxAnchor = 'e' |
3236 | theLabel.angle = wedgeStyle.label_angle |
3237 | - theLabel.boxAnchor = wedgeStyle.label_boxAnchor |
3238 | theLabel.boxStrokeColor = wedgeStyle.label_boxStrokeColor |
3239 | theLabel.boxStrokeWidth = wedgeStyle.label_boxStrokeWidth |
3240 | theLabel.boxFillColor = wedgeStyle.label_boxFillColor |
3241 | @@ -210,7 +234,7 @@ |
3242 | return text |
3243 | |
3244 | def boundsOverlap(P,Q): |
3245 | - return not(P[0]>Q[2]-1e-2 or Q[0]>P[2]-1e-2 or P[1]>Q[3]-1e-2 or Q[1]>P[3]-1e-2) |
3246 | + return not(P[0]>Q[2]-1e-2 or Q[0]>P[2]-1e-2 or P[1]>(0.5*(Q[1]+Q[3]))-1e-2 or Q[1]>(0.5*(P[1]+P[3]))-1e-2) |
3247 | |
3248 | def _findOverlapRun(B,i,wrap): |
3249 | '''find overlap run containing B[i]''' |
3250 | @@ -237,7 +261,7 @@ |
3251 | if len(R)>1: return R |
3252 | return None |
3253 | |
3254 | -def fixLabelOverlaps(L): |
3255 | +def fixLabelOverlaps(L, sideLabels=False): |
3256 | nL = len(L) |
3257 | if nL<2: return |
3258 | B = [l._origdata['bounds'] for l in L] |
3259 | @@ -246,40 +270,69 @@ |
3260 | iter = 0 |
3261 | mult = 1. |
3262 | |
3263 | - while iter<30: |
3264 | - R = findOverlapRun(B) |
3265 | - if not R: break |
3266 | - nR = len(R) |
3267 | - if nR==nL: break |
3268 | - if not [r for r in RP if r in R]: |
3269 | - mult = 1.0 |
3270 | - da = 0 |
3271 | - r0 = R[0] |
3272 | - rL = R[-1] |
3273 | - bi = B[r0] |
3274 | - taa = aa = _360(L[r0]._pmv) |
3275 | - for r in R[1:]: |
3276 | - b = B[r] |
3277 | - da = max(da,min(b[3]-bi[1],bi[3]-b[1])) |
3278 | - bi = b |
3279 | - aa += L[r]._pmv |
3280 | - aa = aa/float(nR) |
3281 | - utaa = abs(L[rL]._pmv-taa) |
3282 | - ntaa = _360(utaa) |
3283 | - da *= mult*(nR-1)/ntaa |
3284 | - |
3285 | - for r in R: |
3286 | - l = L[r] |
3287 | - orig = l._origdata |
3288 | - angle = l._pmv = _360(l._pmv+da*(_360(l._pmv)-aa)) |
3289 | - rad = angle/_180_pi |
3290 | - l.x = orig['cx'] + orig['rx']*cos(rad) |
3291 | - l.y = orig['cy'] + orig['ry']*sin(rad) |
3292 | - B[r] = l.getBounds() |
3293 | - RP = R |
3294 | - mult *= 1.05 |
3295 | - iter += 1 |
3296 | - |
3297 | + if not sideLabels: |
3298 | + while iter<30: |
3299 | + R = findOverlapRun(B) |
3300 | + if not R: break |
3301 | + nR = len(R) |
3302 | + if nR==nL: break |
3303 | + if not [r for r in RP if r in R]: |
3304 | + mult = 1.0 |
3305 | + da = 0 |
3306 | + r0 = R[0] |
3307 | + rL = R[-1] |
3308 | + bi = B[r0] |
3309 | + taa = aa = _360(L[r0]._pmv) |
3310 | + for r in R[1:]: |
3311 | + b = B[r] |
3312 | + da = max(da,min(b[3]-bi[1],bi[3]-b[1])) |
3313 | + bi = b |
3314 | + aa += L[r]._pmv |
3315 | + aa = aa/float(nR) |
3316 | + utaa = abs(L[rL]._pmv-taa) |
3317 | + ntaa = _360(utaa) |
3318 | + da *= mult*(nR-1)/ntaa |
3319 | + |
3320 | + for r in R: |
3321 | + l = L[r] |
3322 | + orig = l._origdata |
3323 | + angle = l._pmv = _360(l._pmv+da*(_360(l._pmv)-aa)) |
3324 | + rad = angle/_180_pi |
3325 | + l.x = orig['cx'] + orig['rx']*cos(rad) |
3326 | + l.y = orig['cy'] + orig['ry']*sin(rad) |
3327 | + B[r] = l.getBounds() |
3328 | + RP = R |
3329 | + mult *= 1.05 |
3330 | + iter += 1 |
3331 | + |
3332 | + else: |
3333 | + while iter<30: |
3334 | + R = findOverlapRun(B) |
3335 | + if not R: break |
3336 | + nR = len(R) |
3337 | + if nR == nL: break |
3338 | + l1 = L[-1] |
3339 | + orig1 = l1._origdata |
3340 | + bounds1 = orig1['bounds'] |
3341 | + for i,r in enumerate(R): |
3342 | + l = L[r] |
3343 | + orig = l._origdata |
3344 | + bounds = orig['bounds'] |
3345 | + diff1 = 0 |
3346 | + diff2 = 0 |
3347 | + if not i == nR-1: |
3348 | + if not bounds == bounds1: |
3349 | + if bounds[3]>bounds1[1] and bounds1[1]<bounds[1]: |
3350 | + diff1 = bounds[3]-bounds1[1] |
3351 | + if bounds1[3]>bounds[1] and bounds[1]<bounds1[1]: |
3352 | + diff2 = bounds1[3]-bounds[1] |
3353 | + if diff1 > diff2: |
3354 | + l.y +=0.5*(bounds1[3]-bounds1[1]) |
3355 | + elif diff2 >= diff1: |
3356 | + l.y -= 0.5*(bounds1[3]-bounds1[1]) |
3357 | + B[r] = l.getBounds() |
3358 | + iter += 1 |
3359 | + |
3360 | def intervalIntersection(A,B): |
3361 | x,y = max(min(A),min(B)),min(max(A),max(B)) |
3362 | if x>=y: return None |
3363 | @@ -415,6 +468,31 @@ |
3364 | mul = -1 |
3365 | return G, mlr[0], mlr[1], mel |
3366 | |
3367 | +def theta0(data, direction): |
3368 | + fac = (2*pi)/sum(data) |
3369 | + rads = [d*fac for d in data] |
3370 | + |
3371 | + r0 = 0 |
3372 | + hrads = [] |
3373 | + for r in rads: |
3374 | + hrads.append(r0+r*0.5) |
3375 | + r0 += r |
3376 | + |
3377 | + vstar = len(data)*1e6 |
3378 | + rstar = 0 |
3379 | + delta = pi/36.0 |
3380 | + for i in xrange(36): |
3381 | + r = i*delta |
3382 | + v = sum([abs(sin(r+a)) for a in hrads]) |
3383 | + if v < vstar: |
3384 | + if direction == 'clockwise': |
3385 | + rstar=-r |
3386 | + else: |
3387 | + rstar=r |
3388 | + vstar = v |
3389 | + return rstar*180/pi |
3390 | + |
3391 | + |
3392 | class AngleData(float): |
3393 | '''use this to carry the data along with the angle''' |
3394 | def __new__(cls,angle,data): |
3395 | @@ -424,12 +502,12 @@ |
3396 | |
3397 | class Pie(AbstractPieChart): |
3398 | _attrMap = AttrMap(BASE=AbstractPieChart, |
3399 | - data = AttrMapValue(isListOfNumbers, desc='list of numbers defining wedge sizes; need not sum to 1'), |
3400 | - labels = AttrMapValue(isListOfStringsOrNone, desc="optional list of labels to use for each data point"), |
3401 | - startAngle = AttrMapValue(isNumber, desc="angle of first slice; like the compass, 0 is due North"), |
3402 | + data = AttrMapValue(isListOfNumbers, desc='List of numbers defining wedge sizes; need not sum to 1'), |
3403 | + labels = AttrMapValue(isListOfStringsOrNone, desc="Optional list of labels to use for each data point"), |
3404 | + startAngle = AttrMapValue(isNumber, desc="Angle of first slice; 0 is due East"), |
3405 | direction = AttrMapValue(OneOf('clockwise', 'anticlockwise'), desc="'clockwise' or 'anticlockwise'"), |
3406 | - slices = AttrMapValue(None, desc="collection of wedge descriptor objects"), |
3407 | - simpleLabels = AttrMapValue(isBoolean, desc="If true(default) use String not super duper WedgeLabel",advancedUsage=1), |
3408 | + slices = AttrMapValue(None, desc="Collection of wedge descriptor objects"), |
3409 | + simpleLabels = AttrMapValue(isBoolean, desc="If true(default) use a simple String not an advanced WedgeLabel. A WedgeLabel is customisable using the properties prefixed label_ in the collection slices."), |
3410 | other_threshold = AttrMapValue(isNumber, desc='A value for doing threshholding, not used yet.',advancedUsage=1), |
3411 | checkLabelOverlap = AttrMapValue(isBoolean, desc="If true check and attempt to fix\n standard label overlaps(default off)",advancedUsage=1), |
3412 | pointerLabelMode = AttrMapValue(OneOf(None,'LeftRight','LeftAndRight'), desc='',advancedUsage=1), |
3413 | @@ -438,6 +516,8 @@ |
3414 | xradius = AttrMapValue(isNumberOrNone, desc="X direction Radius"), |
3415 | yradius = AttrMapValue(isNumberOrNone, desc="Y direction Radius"), |
3416 | wedgeRecord = AttrMapValue(None, desc="callable(wedge,*args,**kwds)",advancedUsage=1), |
3417 | + sideLabels = AttrMapValue(isBoolean, desc="If true attempt to make piechart with labels along side and pointers"), |
3418 | + sideLabelsOffset = AttrMapValue(isNumber, desc="The fraction of the pie width that the labels are situated at from the edges of the pie"), |
3419 | ) |
3420 | other_threshold=None |
3421 | |
3422 | @@ -457,6 +537,8 @@ |
3423 | self.sameRadii = False |
3424 | self.orderMode = 'fixed' |
3425 | self.xradius = self.yradius = None |
3426 | + self.sideLabels = 0 |
3427 | + self.sideLabelsOffset = 0.1 |
3428 | |
3429 | self.slices = TypedPropertyCollection(WedgeProperties) |
3430 | self.slices[0].fillColor = colors.darkcyan |
3431 | @@ -586,10 +668,14 @@ |
3432 | |
3433 | def makeAngles(self): |
3434 | wr = getattr(self,'wedgeRecord',None) |
3435 | - startAngle = self.startAngle % 360 |
3436 | + if self.sideLabels: |
3437 | + startAngle = theta0(self.data, self.direction) |
3438 | + self.slices.label_visible = 1 |
3439 | + else: |
3440 | + startAngle = self.startAngle % 360 |
3441 | whichWay = self.direction == "clockwise" and -1 or 1 |
3442 | D = [a for a in enumerate(self.normalizeData(keepData=wr))] |
3443 | - if self.orderMode=='alternate': |
3444 | + if self.orderMode=='alternate' and not self.sideLabels: |
3445 | W = [a for a in D if abs(a[1])>=1e-5] |
3446 | W.sort(_arcCF) |
3447 | T = [[],[]] |
3448 | @@ -608,7 +694,7 @@ |
3449 | a = A.append |
3450 | for i, angle in D: |
3451 | endAngle = (startAngle + (angle * whichWay)) |
3452 | - if abs(angle)>=1e-5: |
3453 | + if abs(angle)>=_ANGLELO: |
3454 | if startAngle >= endAngle: |
3455 | aa = endAngle,startAngle |
3456 | else: |
3457 | @@ -623,6 +709,15 @@ |
3458 | |
3459 | def makeWedges(self): |
3460 | angles = self.makeAngles() |
3461 | + #Checking to see whether there are too many wedges packed in too small a space |
3462 | + halfAngles = [] |
3463 | + for i,(a1,a2) in angles: |
3464 | + if a2 is None: |
3465 | + halfAngle = a1 |
3466 | + else: |
3467 | + halfAngle = 0.5*(a2+a1) |
3468 | + halfAngles.append(halfAngle) |
3469 | + sideLabels = self.sideLabels |
3470 | n = len(angles) |
3471 | labels = _fixLabels(self.labels,n) |
3472 | wr = getattr(self,'wedgeRecord',None) |
3473 | @@ -631,6 +726,8 @@ |
3474 | styleCount = len(self.slices) |
3475 | |
3476 | plMode = self.pointerLabelMode |
3477 | + if sideLabels: |
3478 | + plMode = None |
3479 | if plMode: |
3480 | checkLabelOverlap = False |
3481 | PL=self.makePointerLabels(angles,plMode) |
3482 | @@ -662,6 +759,7 @@ |
3483 | #all having the default style |
3484 | wedgeStyle = self.slices[i%styleCount] |
3485 | if not wedgeStyle.visible: continue |
3486 | + aa = abs(a2-a1) |
3487 | |
3488 | # is it a popout? |
3489 | cx, cy = centerx, centery |
3490 | @@ -672,15 +770,15 @@ |
3491 | aveAngleRadians = averageAngle/_180_pi |
3492 | cosAA = cos(aveAngleRadians) |
3493 | sinAA = sin(aveAngleRadians) |
3494 | - if popout: |
3495 | + if popout and aa<_ANGLEHI: |
3496 | # pop out the wedge |
3497 | cx = centerx + popout*cosAA |
3498 | cy = centery + popout*sinAA |
3499 | |
3500 | - if n > 1: |
3501 | + if aa>=_ANGLEHI: |
3502 | + theWedge = Ellipse(cx, cy, xradius, yradius) |
3503 | + else: |
3504 | theWedge = Wedge(cx, cy, xradius, a1, a2, yradius=yradius) |
3505 | - elif n==1: |
3506 | - theWedge = Ellipse(cx, cy, xradius, yradius) |
3507 | |
3508 | theWedge.fillColor = wedgeStyle.fillColor |
3509 | theWedge.strokeColor = wedgeStyle.strokeColor |
3510 | @@ -695,48 +793,101 @@ |
3511 | if wr: |
3512 | wr(theWedge,value=a1._data,label=text) |
3513 | if wedgeStyle.label_visible: |
3514 | - if text: |
3515 | - labelRadius = wedgeStyle.labelRadius |
3516 | - rx = xradius*labelRadius |
3517 | - ry = yradius*labelRadius |
3518 | - labelX = cx + rx*cosAA |
3519 | - labelY = cy + ry*sinAA |
3520 | - l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,wedgeStyle) |
3521 | - L_add(l) |
3522 | - if not plMode and l._simple_pointer: |
3523 | - l._aax = cx+xradius*cosAA |
3524 | - l._aay = cy+yradius*sinAA |
3525 | - if checkLabelOverlap: |
3526 | - l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, |
3527 | - 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, |
3528 | - 'bounds': l.getBounds(), |
3529 | - } |
3530 | - elif plMode and PL_data: |
3531 | - l = PL_data[i] |
3532 | - if l: |
3533 | - data = l._origdata |
3534 | - sinM = data['smid'] |
3535 | - cosM = data['cmid'] |
3536 | - lX = cx + xradius*cosM |
3537 | - lY = cy + yradius*sinM |
3538 | - lpel = wedgeStyle.label_pointer_elbowLength |
3539 | - lXi = lX + lpel*cosM |
3540 | - lYi = lY + lpel*sinM |
3541 | - L_add(PolyLine((lX,lY,lXi,lYi,l.x,l.y), |
3542 | - strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3543 | - strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3544 | - L_add(l) |
3545 | - |
3546 | + if not sideLabels: |
3547 | + if text: |
3548 | + labelRadius = wedgeStyle.labelRadius |
3549 | + rx = xradius*labelRadius |
3550 | + ry = yradius*labelRadius |
3551 | + labelX = cx + rx*cosAA |
3552 | + labelY = cy + ry*sinAA |
3553 | + l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,wedgeStyle) |
3554 | + L_add(l) |
3555 | + if not plMode and l._simple_pointer: |
3556 | + l._aax = cx+xradius*cosAA |
3557 | + l._aay = cy+yradius*sinAA |
3558 | + if checkLabelOverlap: |
3559 | + l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, |
3560 | + 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, |
3561 | + 'bounds': l.getBounds(), |
3562 | + } |
3563 | + elif plMode and PL_data: |
3564 | + l = PL_data[i] |
3565 | + if l: |
3566 | + data = l._origdata |
3567 | + sinM = data['smid'] |
3568 | + cosM = data['cmid'] |
3569 | + lX = cx + xradius*cosM |
3570 | + lY = cy + yradius*sinM |
3571 | + lpel = wedgeStyle.label_pointer_elbowLength |
3572 | + lXi = lX + lpel*cosM |
3573 | + lYi = lY + lpel*sinM |
3574 | + L_add(PolyLine((lX,lY,lXi,lYi,l.x,l.y), |
3575 | + strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3576 | + strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3577 | + L_add(l) |
3578 | + else: |
3579 | + if text: |
3580 | + slices_popout = self.slices.popout |
3581 | + m=0 |
3582 | + for n, angle in angles: |
3583 | + if self.slices[n].fillColor: |
3584 | + m += 1 |
3585 | + else: |
3586 | + r = n%m |
3587 | + self.slices[n].fillColor = self.slices[r].fillColor |
3588 | + self.slices[n].popout = self.slices[r].popout |
3589 | + for j in range(0,m-1): |
3590 | + if self.slices[j].popout > slices_popout: |
3591 | + slices_popout = self.slices[j].popout |
3592 | + labelRadius = wedgeStyle.labelRadius |
3593 | + ry = yradius*labelRadius |
3594 | + if (abs(averageAngle) < 90 ) or (averageAngle >270 and averageAngle <450) or (-450< |
3595 | + averageAngle <-270): |
3596 | + labelX = (1+self.sideLabelsOffset)*self.width + self.x + slices_popout |
3597 | + rx = 0 |
3598 | + else: |
3599 | + labelX = self.x - (self.sideLabelsOffset)*self.width - slices_popout |
3600 | + rx = 0 |
3601 | + labelY = cy + ry*sinAA |
3602 | + l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,wedgeStyle) |
3603 | + L_add(l) |
3604 | + if not plMode: |
3605 | + l._aax = cx+xradius*cosAA |
3606 | + l._aay = cy+yradius*sinAA |
3607 | + if checkLabelOverlap: |
3608 | + l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, |
3609 | + 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, |
3610 | + 'bounds': l.getBounds(), |
3611 | + } |
3612 | + x1,y1,x2,y2 = l.getBounds() |
3613 | + |
3614 | if checkLabelOverlap and L: |
3615 | - fixLabelOverlaps(L) |
3616 | + fixLabelOverlaps(L, sideLabels) |
3617 | for l in L: g_add(l) |
3618 | |
3619 | if not plMode: |
3620 | for l in L: |
3621 | - if l._simple_pointer: |
3622 | + if l._simple_pointer and not sideLabels: |
3623 | g_add(Line(l.x,l.y,l._aax,l._aay, |
3624 | strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3625 | strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3626 | + elif sideLabels: |
3627 | + x1,y1,x2,y2 = l.getBounds() |
3628 | + #add pointers |
3629 | + if l.x == (1+self.sideLabelsOffset)*self.width + self.x: |
3630 | + g_add(Line(l._aax,l._aay,0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)), |
3631 | + strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3632 | + strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3633 | + g_add(Line(0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)),l.x,l.y+(0.25*(y2-y1)), |
3634 | + strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3635 | + strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3636 | + else: |
3637 | + g_add(Line(l._aax,l._aay,0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)), |
3638 | + strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3639 | + strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3640 | + g_add(Line(0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)),l.x,l.y+(0.25*(y2-y1)), |
3641 | + strokeWidth=wedgeStyle.label_pointer_strokeWidth, |
3642 | + strokeColor=wedgeStyle.label_pointer_strokeColor)) |
3643 | |
3644 | return g |
3645 | |
3646 | @@ -899,7 +1050,7 @@ |
3647 | drawing.add(self.draw()) |
3648 | return drawing |
3649 | |
3650 | -from utils3d import _getShaded, _2rad, _360, _pi_2, _2pi, _180_pi |
3651 | +from reportlab.graphics.charts.utils3d import _getShaded, _2rad, _360, _pi_2, _2pi, _180_pi |
3652 | class Wedge3dProperties(PropHolder): |
3653 | """This holds descriptive information about the wedges in a pie chart. |
3654 | |
3655 | @@ -979,6 +1130,7 @@ |
3656 | self.lo = lo |
3657 | self.hi = hi |
3658 | self.mid = (lo+hi)*0.5 |
3659 | + self.not360 = abs(hi-lo) < _ANGLEHI |
3660 | |
3661 | def __str__(self): |
3662 | return '_SL3D(%.2f,%.2f)' % (self.lo,self.hi) |
3663 | @@ -995,7 +1147,7 @@ |
3664 | angle_3d = 180 |
3665 | |
3666 | def _popout(self,i): |
3667 | - return self.slices[i].popout or 0 |
3668 | + return self._sl3d[i].not360 and self.slices[i].popout or 0 |
3669 | |
3670 | def CX(self, i,d ): |
3671 | return self._cx+(d and self._xdepth_3d or 0)+self._popout(i)*cos(_2rad(self._sl3d[i].mid)) |
3672 | @@ -1045,8 +1197,9 @@ |
3673 | _3d_angle = self.angle_3d |
3674 | _3dva = self._3dva = _360(_3d_angle+90) |
3675 | a0 = _2rad(_3dva) |
3676 | - self._xdepth_3d = cos(a0)*self.depth_3d |
3677 | - self._ydepth_3d = sin(a0)*self.depth_3d |
3678 | + depth_3d = self.depth_3d |
3679 | + self._xdepth_3d = cos(a0)*depth_3d |
3680 | + self._ydepth_3d = sin(a0)*depth_3d |
3681 | self._cx = self.x+self.width/2.0 |
3682 | self._cy = self.y+(self.height - self._ydepth_3d)/2.0 |
3683 | radiusx = radiusy = self._cx-self.x |
3684 | @@ -1098,7 +1251,8 @@ |
3685 | sl = _sl3d[i] |
3686 | lo = angle0 = sl.lo |
3687 | hi = angle1 = sl.hi |
3688 | - if abs(hi-lo)<=1e-7: continue |
3689 | + aa = abs(hi-lo) |
3690 | + if aa<_ANGLELO: continue |
3691 | fillColor = _getShaded(style.fillColor,style.fillColorShaded,style.shading) |
3692 | strokeColor = _getShaded(style.strokeColor,style.strokeColorShaded,style.shading) or fillColor |
3693 | strokeWidth = style.strokeWidth |
3694 | @@ -1106,31 +1260,39 @@ |
3695 | cy0 = CY(i,0) |
3696 | cx1 = CX(i,1) |
3697 | cy1 = CY(i,1) |
3698 | - #background shaded pie bottom |
3699 | - g.add(Wedge(cx1,cy1,radiusx, lo, hi,yradius=radiusy, |
3700 | - strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor, |
3701 | - strokeLineJoin=1)) |
3702 | - #connect to top |
3703 | - if lo < a0 < hi: angle0 = a0 |
3704 | - if lo < a1 < hi: angle1 = a1 |
3705 | - p = ArcPath(strokeColor=strokeColor, fillColor=fillColor,strokeWidth=strokeWidth,strokeLineJoin=1) |
3706 | - p.addArc(cx1,cy1,radiusx,angle0,angle1,yradius=radiusy,moveTo=1) |
3707 | - p.lineTo(OX(i,angle1,0),OY(i,angle1,0)) |
3708 | - p.addArc(cx0,cy0,radiusx,angle0,angle1,yradius=radiusy,reverse=1) |
3709 | - p.closePath() |
3710 | - if angle0<=_3dva and angle1>=_3dva: |
3711 | - rd = 0 |
3712 | - else: |
3713 | - rd = min(rad_dist(angle0),rad_dist(angle1)) |
3714 | - S.append((rd,p)) |
3715 | - _fillSide(S,i,lo,strokeColor,strokeWidth,fillColor) |
3716 | - _fillSide(S,i,hi,strokeColor,strokeWidth,fillColor) |
3717 | + if depth_3d: |
3718 | + #background shaded pie bottom |
3719 | + g.add(Wedge(cx1,cy1,radiusx, lo, hi,yradius=radiusy, |
3720 | + strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor, |
3721 | + strokeLineJoin=1)) |
3722 | + #connect to top |
3723 | + if lo < a0 < hi: angle0 = a0 |
3724 | + if lo < a1 < hi: angle1 = a1 |
3725 | + p = ArcPath(strokeColor=strokeColor, fillColor=fillColor,strokeWidth=strokeWidth,strokeLineJoin=1) |
3726 | + p.addArc(cx1,cy1,radiusx,angle0,angle1,yradius=radiusy,moveTo=1) |
3727 | + p.lineTo(OX(i,angle1,0),OY(i,angle1,0)) |
3728 | + p.addArc(cx0,cy0,radiusx,angle0,angle1,yradius=radiusy,reverse=1) |
3729 | + p.closePath() |
3730 | + if angle0<=_3dva and angle1>=_3dva: |
3731 | + rd = 0 |
3732 | + else: |
3733 | + rd = min(rad_dist(angle0),rad_dist(angle1)) |
3734 | + S.append((rd,p)) |
3735 | + _fillSide(S,i,lo,strokeColor,strokeWidth,fillColor) |
3736 | + _fillSide(S,i,hi,strokeColor,strokeWidth,fillColor) |
3737 | |
3738 | #bright shaded top |
3739 | fillColor = style.fillColor |
3740 | strokeColor = style.strokeColor or fillColor |
3741 | T.append(Wedge(cx0,cy0,radiusx,lo,hi,yradius=radiusy, |
3742 | strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor,strokeLineJoin=1)) |
3743 | + if aa>=_ANGLEHI: |
3744 | + theWedge = Ellipse(cx0, cy0, radiusx, radiusy, |
3745 | + strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor,strokeLineJoin=1) |
3746 | + else: |
3747 | + theWedge = Wedge(cx0,cy0,radiusx,lo,hi,yradius=radiusy, |
3748 | + strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor,strokeLineJoin=1) |
3749 | + T.append(theWedge) |
3750 | |
3751 | text = labels[i] |
3752 | if style.label_visible and text: |
3753 | @@ -1152,7 +1314,7 @@ |
3754 | |
3755 | S.sort(lambda a,b: -cmp(a[0],b[0])) |
3756 | if checkLabelOverlap and L: |
3757 | - fixLabelOverlaps(L) |
3758 | + fixLabelOverlaps(L,sideLabels) |
3759 | for x in ([s[1] for s in S]+T+L): |
3760 | g.add(x) |
3761 | return g |
3762 | @@ -1329,3 +1491,175 @@ |
3763 | d.add(pc) |
3764 | |
3765 | return d |
3766 | + |
3767 | +def sample5(): |
3768 | + "Make a pie with side labels." |
3769 | + |
3770 | + d = Drawing(400, 200) |
3771 | + |
3772 | + pc = Pie() |
3773 | + pc.x = 125 |
3774 | + pc.y = 25 |
3775 | + |
3776 | + pc.data = [7, 1, 1, 1, 1, 2] |
3777 | + pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6'] |
3778 | + pc.sideLabels = 1 |
3779 | + |
3780 | + pc.width = 150 |
3781 | + pc.height = 150 |
3782 | + pc.slices.strokeWidth=1#0.5 |
3783 | + pc.slices[0].fillColor = colors.steelblue |
3784 | + pc.slices[1].fillColor = colors.thistle |
3785 | + pc.slices[2].fillColor = colors.cornflower |
3786 | + pc.slices[3].fillColor = colors.lightsteelblue |
3787 | + pc.slices[4].fillColor = colors.aquamarine |
3788 | + pc.slices[5].fillColor = colors.cadetblue |
3789 | + |
3790 | + d.add(pc) |
3791 | + |
3792 | + return d |
3793 | + |
3794 | +def sample6(): |
3795 | + |
3796 | + "Illustrates the pie moving to leave space for the left labels" |
3797 | + |
3798 | + d = Drawing(400, 200) |
3799 | + |
3800 | + pc = Pie() |
3801 | + "The x value of the pie chart is 0" |
3802 | + pc.x = 0 |
3803 | + pc.y = 25 |
3804 | + |
3805 | + pc.data = [74, 1, 1, 1, 1, 22] |
3806 | + pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6'] |
3807 | + pc.sideLabels = 1 |
3808 | + |
3809 | + pc.width = 150 |
3810 | + pc.height = 150 |
3811 | + pc.slices.strokeWidth=1#0.5 |
3812 | + pc.slices[0].fillColor = colors.steelblue |
3813 | + pc.slices[1].fillColor = colors.thistle |
3814 | + pc.slices[2].fillColor = colors.cornflower |
3815 | + pc.slices[3].fillColor = colors.lightsteelblue |
3816 | + pc.slices[4].fillColor = colors.aquamarine |
3817 | + pc.slices[5].fillColor = colors.cadetblue |
3818 | + |
3819 | + l = Line(0,0,0,200) |
3820 | + |
3821 | + d.add(pc) |
3822 | + d.add(l) |
3823 | + |
3824 | + return d |
3825 | + |
3826 | +def sample7(): |
3827 | + |
3828 | + "Case with overlapping pointers" |
3829 | + |
3830 | + d = Drawing(400, 200) |
3831 | + |
3832 | + pc = Pie() |
3833 | + pc.y = 50 |
3834 | + pc.x = 150 |
3835 | + pc.width = 100 |
3836 | + pc.height = 100 |
3837 | + |
3838 | + pc.data = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] |
3839 | + pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6', 'example7', |
3840 | + 'example8', 'example9', 'example10', 'example11', 'example12', 'example13', 'example14', |
3841 | + 'example15', 'example16', 'example17', 'example18', 'example19', 'example20', 'example21', |
3842 | + 'example22', 'example23', 'example24', 'example25', 'example26', 'example27', 'example28'] |
3843 | + pc.sideLabels = 1 |
3844 | + pc.checkLabelOverlap = 1 |
3845 | + pc.simpleLabels = 0 |
3846 | + |
3847 | + |
3848 | + pc.slices.strokeWidth=1#0.5 |
3849 | + pc.slices[0].fillColor = colors.steelblue |
3850 | + pc.slices[1].fillColor = colors.thistle |
3851 | + pc.slices[2].fillColor = colors.cornflower |
3852 | + pc.slices[3].fillColor = colors.lightsteelblue |
3853 | + pc.slices[4].fillColor = colors.aquamarine |
3854 | + pc.slices[5].fillColor = colors.cadetblue |
3855 | + |
3856 | + d.add(pc) |
3857 | + |
3858 | + return d |
3859 | + |
3860 | +def sample8(): |
3861 | + |
3862 | + "Case with overlapping labels" |
3863 | + "Labels overlap if they do not belong to adjacent pie slices due to nature of checkLabelOverlap" |
3864 | + |
3865 | + d = Drawing(400, 200) |
3866 | + |
3867 | + pc = Pie() |
3868 | + pc.y = 50 |
3869 | + pc.x = 150 |
3870 | + pc.width = 100 |
3871 | + pc.height = 100 |
3872 | + |
3873 | + pc.data = [1, 1, 1, 1, 1, 30, 50, 1, 1, 1, 1, 1, 1, 40,20,10] |
3874 | + pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6', 'example7', |
3875 | + 'example8', 'example9', 'example10', 'example11', 'example12', 'example13', 'example14', |
3876 | + 'example15', 'example16'] |
3877 | + pc.sideLabels = 1 |
3878 | + pc.checkLabelOverlap = 1 |
3879 | + |
3880 | + pc.slices.strokeWidth=1#0.5 |
3881 | + pc.slices[0].fillColor = colors.steelblue |
3882 | + pc.slices[1].fillColor = colors.thistle |
3883 | + pc.slices[2].fillColor = colors.cornflower |
3884 | + pc.slices[3].fillColor = colors.lightsteelblue |
3885 | + pc.slices[4].fillColor = colors.aquamarine |
3886 | + pc.slices[5].fillColor = colors.cadetblue |
3887 | + |
3888 | + d.add(pc) |
3889 | + |
3890 | + return d |
3891 | + |
3892 | +def sample9(): |
3893 | + |
3894 | + "Case with overlapping labels" |
3895 | + "Labels overlap if they do not belong to adjacent pies due to nature of checkLabelOverlap" |
3896 | + |
3897 | + d = Drawing(400, 200) |
3898 | + |
3899 | + pc = Pie() |
3900 | + pc.x = 125 |
3901 | + pc.y = 50 |
3902 | + |
3903 | + pc.data = [41, 20, 40, 15, 20, 30, 50, 15, 25, 35, 25, 20, 30, 40, 20, 30] |
3904 | + pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6', 'example7', |
3905 | + 'example8', 'example9', 'example10', 'example11', 'example12', 'example13', 'example14', |
3906 | + 'example15', 'example16'] |
3907 | + pc.sideLabels = 1 |
3908 | + pc.checkLabelOverlap = 1 |
3909 | + |
3910 | + pc.width = 100 |
3911 | + pc.height = 100 |
3912 | + pc.slices.strokeWidth=1#0.5 |
3913 | + pc.slices[0].fillColor = colors.steelblue |
3914 | + pc.slices[1].fillColor = colors.thistle |
3915 | + pc.slices[2].fillColor = colors.cornflower |
3916 | + pc.slices[3].fillColor = colors.lightsteelblue |
3917 | + pc.slices[4].fillColor = colors.aquamarine |
3918 | + pc.slices[5].fillColor = colors.cadetblue |
3919 | + |
3920 | + d.add(pc) |
3921 | + |
3922 | + return d |
3923 | + |
3924 | + |
3925 | + |
3926 | +if __name__=='__main__': |
3927 | + """Normally nobody will execute this |
3928 | + |
3929 | + It's helpful for reportlab developers to put a 'main' block in to execute |
3930 | + the most recently edited feature. |
3931 | + """ |
3932 | + drawing = sample7() |
3933 | + from reportlab.graphics import renderPDF |
3934 | + renderPDF.drawToFile(drawing, 'side_labelled_pie.pdf', 'Side Labelled Pie') |
3935 | + |
3936 | + |
3937 | + |
3938 | |
3939 | === modified file 'src/reportlab/graphics/charts/textlabels.py' |
3940 | --- src/reportlab/graphics/charts/textlabels.py 2010-12-06 12:45:44 +0000 |
3941 | +++ src/reportlab/graphics/charts/textlabels.py 2013-04-14 00:48:45 +0000 |
3942 | @@ -1,7 +1,7 @@ |
3943 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
3944 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
3945 | #see license.txt for license details |
3946 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/textlabels.py |
3947 | -__version__=''' $Id: textlabels.py 3702 2010-04-14 17:13:41Z rgbecker $ ''' |
3948 | +__version__=''' $Id: textlabels.py 3959 2012-09-27 14:39:39Z robin $ ''' |
3949 | import string |
3950 | |
3951 | from reportlab.lib import colors |
3952 | |
3953 | === modified file 'src/reportlab/graphics/charts/utils.py' |
3954 | --- src/reportlab/graphics/charts/utils.py 2010-12-06 12:45:44 +0000 |
3955 | +++ src/reportlab/graphics/charts/utils.py 2013-04-14 00:48:45 +0000 |
3956 | @@ -1,13 +1,17 @@ |
3957 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
3958 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
3959 | #see license.txt for license details |
3960 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/charts/utils.py |
3961 | |
3962 | -__version__=''' $Id: utils.py 3746 2010-07-21 10:32:55Z rgbecker $ ''' |
3963 | +__version__=''' $Id: utils.py 3959 2012-09-27 14:39:39Z robin $ ''' |
3964 | __doc__="Utilities used here and there." |
3965 | from time import mktime, gmtime, strftime |
3966 | +from math import log10, pi, floor, sin, cos, sqrt, hypot |
3967 | +import weakref |
3968 | +from reportlab.graphics.shapes import transformPoint, transformPoints, inverse, Ellipse, Group, String, Path |
3969 | +from reportlab.lib.utils import flatten |
3970 | +from reportlab.pdfbase.pdfmetrics import stringWidth |
3971 | |
3972 | ### Dinu's stuff used in some line plots (likely to vansih). |
3973 | - |
3974 | def mkTimeTuple(timeString): |
3975 | "Convert a 'dd/mm/yyyy' formatted string to a tuple for use in the time module." |
3976 | |
3977 | @@ -17,23 +21,17 @@ |
3978 | |
3979 | return tuple(list) |
3980 | |
3981 | - |
3982 | def str2seconds(timeString): |
3983 | "Convert a number of seconds since the epoch into a date string." |
3984 | |
3985 | return mktime(mkTimeTuple(timeString)) |
3986 | |
3987 | - |
3988 | def seconds2str(seconds): |
3989 | "Convert a date string into the number of seconds since the epoch." |
3990 | |
3991 | return strftime('%Y-%m-%d', gmtime(seconds)) |
3992 | |
3993 | - |
3994 | ### Aaron's rounding function for making nice values on axes. |
3995 | - |
3996 | -from math import log10 |
3997 | - |
3998 | def nextRoundNumber(x): |
3999 | """Return the first 'nice round number' greater than or equal to x |
4000 | |
4001 | @@ -72,15 +70,8 @@ |
4002 | else: |
4003 | return base * 10.0 |
4004 | |
4005 | - |
4006 | -### Robin's stuff from rgb_ticks. |
4007 | - |
4008 | -from math import log10, floor |
4009 | - |
4010 | _intervals=(.1, .2, .25, .5) |
4011 | _j_max=len(_intervals)-1 |
4012 | - |
4013 | - |
4014 | def find_interval(lo,hi,I=5): |
4015 | 'determine tick parameters for range [lo, hi] using I intervals' |
4016 | |
4017 | @@ -128,7 +119,6 @@ |
4018 | b = b*10 |
4019 | return n, x, ss, lo - n + x - hi |
4020 | |
4021 | - |
4022 | def find_good_grid(lower,upper,n=(4,5,6,7,8,9), grid=None): |
4023 | if grid: |
4024 | t = divmod(lower,grid)[0] * grid |
4025 | @@ -149,7 +139,6 @@ |
4026 | w=z[3] |
4027 | return t, hi, grid |
4028 | |
4029 | - |
4030 | def ticks(lower, upper, n=(4,5,6,7,8,9), split=1, percent=0, grid=None, labelVOffset=0): |
4031 | ''' |
4032 | return tick positions and labels for range lower<=x<=upper |
4033 | @@ -223,9 +212,6 @@ |
4034 | def pairMaverage(data,n=6): |
4035 | return [(x[0],s) for x,s in zip(data, maverage([x[1] for x in data],n))] |
4036 | |
4037 | -import weakref |
4038 | -from reportlab.graphics.shapes import transformPoint, transformPoints, inverse, Ellipse |
4039 | -from reportlab.lib.utils import flatten |
4040 | class DrawTimeCollector(object): |
4041 | ''' |
4042 | generic mechanism for collecting information about nodes at the time they are about to be drawn |
4043 | @@ -311,3 +297,66 @@ |
4044 | pprint.pprint(self._info,f) |
4045 | finally: |
4046 | f.close() |
4047 | + |
4048 | +def xyDist( (x0,y0),(x1,y1) ): |
4049 | + '''return distance between two points''' |
4050 | + return hypot((x1-x0),(y1-y0)) |
4051 | + |
4052 | +def lineSegmentIntersect( |
4053 | + (x00,y00),(x01,y01), |
4054 | + (x10,y10),(x11,y11) |
4055 | + ): |
4056 | + p = x00,y00 |
4057 | + r = x01-x00,y01-y00 |
4058 | + |
4059 | + |
4060 | + q = x10,y10 |
4061 | + s = x11-x10,y11-y10 |
4062 | + |
4063 | + rs = float(r[0]*s[1]-r[1]*s[0]) |
4064 | + qp = q[0]-p[0],q[1]-p[1] |
4065 | + |
4066 | + qpr = qp[0]*r[1]-qp[1]*r[0] |
4067 | + qps = qp[0]*s[1]-qp[1]*s[0] |
4068 | + |
4069 | + if abs(rs)<1e-8: |
4070 | + if abs(qpr)<1e-8: return 'collinear' |
4071 | + return None |
4072 | + |
4073 | + t = qps/rs |
4074 | + u = qpr/rs |
4075 | + |
4076 | + if 0<=t<=1 and 0<=u<=1: |
4077 | + return p[0]+t*r[0], p[1]+t*r[1] |
4078 | + |
4079 | +def makeCircularString(x, y, radius, angle, text, fontName, fontSize, inside=0, G=None,textAnchor='start'): |
4080 | + '''make a group with circular text in it''' |
4081 | + if not G: G = Group() |
4082 | + |
4083 | + angle %= 360 |
4084 | + pi180 = pi/180 |
4085 | + phi = angle*pi180 |
4086 | + width = stringWidth(text, fontName, fontSize) |
4087 | + sig = inside and -1 or 1 |
4088 | + hsig = sig*0.5 |
4089 | + sig90 = sig*90 |
4090 | + |
4091 | + if textAnchor!='start': |
4092 | + if textAnchor=='middle': |
4093 | + phi += sig*(0.5*width)/radius |
4094 | + elif textAnchor=='end': |
4095 | + phi += sig*float(width)/radius |
4096 | + elif textAnchor=='numeric': |
4097 | + phi += sig*float(numericXShift(textAnchor,text,width,fontName,fontSize,None))/radius |
4098 | + |
4099 | + for letter in text: |
4100 | + width = stringWidth(letter, fontName, fontSize) |
4101 | + beta = float(width)/radius |
4102 | + h = Group() |
4103 | + h.add(String(0, 0, letter, fontName=fontName,fontSize=fontSize,textAnchor="start")) |
4104 | + h.translate(x+cos(phi)*radius,y+sin(phi)*radius) #translate to radius and angle |
4105 | + h.rotate((phi-hsig*beta)/pi180-sig90) # rotate as needed |
4106 | + G.add(h) #add to main group |
4107 | + phi -= sig*beta #increment |
4108 | + |
4109 | + return G |
4110 | |
4111 | === modified file 'src/reportlab/graphics/renderPDF.py' |
4112 | --- src/reportlab/graphics/renderPDF.py 2010-12-06 12:45:44 +0000 |
4113 | +++ src/reportlab/graphics/renderPDF.py 2013-04-14 00:48:45 +0000 |
4114 | @@ -1,9 +1,9 @@ |
4115 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4116 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4117 | #see license.txt for license details |
4118 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/renderPDF.py |
4119 | # renderPDF - draws Drawings onto a canvas |
4120 | |
4121 | -__version__=''' $Id: renderPDF.py 3751 2010-07-30 09:28:28Z rgbecker $ ''' |
4122 | +__version__=''' $Id: renderPDF.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4123 | __doc__="""Render Drawing objects within others PDFs or standalone |
4124 | |
4125 | Usage:: |
4126 | @@ -78,10 +78,11 @@ |
4127 | ) |
4128 | |
4129 | def drawImage(self, image): |
4130 | + path = image.path |
4131 | # currently not implemented in other renderers |
4132 | - if image.path and os.path.exists(image.path): |
4133 | + if path and (hasattr(path,'mode') or os.path.exists(image.path)): |
4134 | self._canvas.drawInlineImage( |
4135 | - image.path, |
4136 | + path, |
4137 | image.x, image.y, |
4138 | image.width, image.height |
4139 | ) |
4140 | @@ -217,7 +218,12 @@ |
4141 | # self._canvas.setDash(array=value) |
4142 | elif key == 'strokeDashArray': |
4143 | if value: |
4144 | - self._canvas.setDash(value) |
4145 | + if isinstance(value,(list,tuple)) and len(value)==2 and isinstance(value[1],(tuple,list)): |
4146 | + phase = value[0] |
4147 | + value = value[1] |
4148 | + else: |
4149 | + phase = 0 |
4150 | + self._canvas.setDash(value,phase) |
4151 | else: |
4152 | self._canvas.setDash() |
4153 | elif key == 'fillColor': |
4154 | |
4155 | === modified file 'src/reportlab/graphics/renderPM.py' |
4156 | --- src/reportlab/graphics/renderPM.py 2010-12-06 12:45:44 +0000 |
4157 | +++ src/reportlab/graphics/renderPM.py 2013-04-14 00:48:45 +0000 |
4158 | @@ -1,7 +1,7 @@ |
4159 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4160 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4161 | #see license.txt for license details |
4162 | #history www.reportlab.co.uk/rl-cgi/viewcvs.cgi/rlextra/graphics/Csrc/renderPM/renderP.py |
4163 | -__version__=''' $Id: renderPM.py 3704 2010-04-15 13:41:32Z rgbecker $ ''' |
4164 | +__version__=''' $Id: renderPM.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4165 | __doc__="""Render drawing objects in common bitmap formats |
4166 | |
4167 | Usage:: |
4168 | @@ -78,7 +78,13 @@ |
4169 | self._canvas.lineCap = s['strokeLineCap'] |
4170 | self._canvas.lineJoin = s['strokeLineJoin'] |
4171 | da = s['strokeDashArray'] |
4172 | - da = da and (0,da) or None |
4173 | + if not da: |
4174 | + da = None |
4175 | + else: |
4176 | + if not isinstance(da,(list,tuple)): |
4177 | + da = da, |
4178 | + if len(da)!=2 or not isinstance(da[1],(list,tuple)): |
4179 | + da = 0, da #assume phase of 0 |
4180 | self._canvas.dashArray = da |
4181 | alpha = s['fillOpacity'] |
4182 | if alpha is not None: |
4183 | @@ -117,19 +123,22 @@ |
4184 | self._canvas.line(line.x1,line.y1,line.x2,line.y2) |
4185 | |
4186 | def drawImage(self, image): |
4187 | - if image.path and os.path.exists(image.path): |
4188 | - if type(image.path) is type(''): |
4189 | - im = _getImage().open(image.path).convert('RGB') |
4190 | - else: |
4191 | - im = image.path.convert('RGB') |
4192 | - srcW, srcH = im.size |
4193 | - dstW, dstH = image.width, image.height |
4194 | - if dstW is None: dstW = srcW |
4195 | - if dstH is None: dstH = srcH |
4196 | - self._canvas._aapixbuf( |
4197 | - image.x, image.y, dstW, dstH, |
4198 | - im.tostring(), srcW, srcH, 3, |
4199 | - ) |
4200 | + path = image.path |
4201 | + if isinstance(path,basestring): |
4202 | + if not (path and os.path.isfile(path)): return |
4203 | + im = _getImage().open(path).convert('RGB') |
4204 | + elif hasattr(path,'convert'): |
4205 | + im = path.convert('RGB') |
4206 | + else: |
4207 | + return |
4208 | + srcW, srcH = im.size |
4209 | + dstW, dstH = image.width, image.height |
4210 | + if dstW is None: dstW = srcW |
4211 | + if dstH is None: dstH = srcH |
4212 | + self._canvas._aapixbuf( |
4213 | + image.x, image.y, dstW, dstH, |
4214 | + im.tostring(), srcW, srcH, 3, |
4215 | + ) |
4216 | |
4217 | def drawCircle(self, circle): |
4218 | c = self._canvas |
4219 | @@ -658,7 +667,7 @@ |
4220 | |
4221 | save = drawToFile |
4222 | |
4223 | -def test(): |
4224 | +def test(verbose=True): |
4225 | def ext(x): |
4226 | if x=='tiff': x='tif' |
4227 | return x |
4228 | @@ -719,7 +728,7 @@ |
4229 | html.append('<a href="%s">python source</a><br>\n' % filename) |
4230 | elif k=='svg': |
4231 | html.append('<a href="%s">SVG</a><br>\n' % filename) |
4232 | - print 'wrote',fullpath |
4233 | + if verbose: print 'wrote',fullpath |
4234 | except AttributeError: |
4235 | print 'Problem drawing %s file'%k |
4236 | raise |
4237 | @@ -731,7 +740,7 @@ |
4238 | if sys.platform=='mac': |
4239 | from reportlab.lib.utils import markfilename |
4240 | markfilename(htmlFileName,ext='HTML') |
4241 | - print 'wrote %s' % htmlFileName |
4242 | + if verbose: print 'wrote %s' % htmlFileName |
4243 | |
4244 | if __name__=='__main__': |
4245 | test() |
4246 | |
4247 | === modified file 'src/reportlab/graphics/renderPS.py' |
4248 | --- src/reportlab/graphics/renderPS.py 2010-12-06 12:45:44 +0000 |
4249 | +++ src/reportlab/graphics/renderPS.py 2013-04-14 00:48:45 +0000 |
4250 | @@ -1,7 +1,7 @@ |
4251 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4252 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4253 | #see license.txt for license details |
4254 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/renderPS.py |
4255 | -__version__=''' $Id: renderPS.py 3695 2010-04-06 16:16:27Z rgbecker $ ''' |
4256 | +__version__=''' $Id: renderPS.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4257 | __doc__="""Render drawing objects in Postscript""" |
4258 | |
4259 | import string, types |
4260 | @@ -186,9 +186,9 @@ |
4261 | """Two notations. pass two numbers, or an array and phase""" |
4262 | # copied and modified from reportlab.canvas |
4263 | psoperation = "setdash" |
4264 | - if type(array) == types.IntType or type(array) == types.FloatType: |
4265 | + if isinstance(array,(float,int)): |
4266 | self.code_append('[%s %s] 0 %s' % (array, phase, psoperation)) |
4267 | - elif type(array) == types.ListType or type(array) == types.TupleType: |
4268 | + elif isinstance(array,(tuple,list)): |
4269 | assert phase >= 0, "phase is a length in user space" |
4270 | textarray = string.join(map(str, array)) |
4271 | self.code_append('[%s] %s %s' % (textarray, phase, psoperation)) |
4272 | @@ -833,7 +833,12 @@ |
4273 | self._canvas.setLineJoin(value) |
4274 | elif key == 'strokeDashArray': |
4275 | if value: |
4276 | - self._canvas.setDash(value) |
4277 | + if isinstance(value,(list,tuple)) and len(value)==2 and isinstance(value[1],(tuple,list)): |
4278 | + phase = value[0] |
4279 | + value = value[1] |
4280 | + else: |
4281 | + phase = 0 |
4282 | + self._canvas.setDash(value,phase) |
4283 | else: |
4284 | self._canvas.setDash() |
4285 | ## elif key == 'stroke_opacity': |
4286 | |
4287 | === modified file 'src/reportlab/graphics/renderSVG.py' |
4288 | --- src/reportlab/graphics/renderSVG.py 2010-12-06 12:45:44 +0000 |
4289 | +++ src/reportlab/graphics/renderSVG.py 2013-04-14 00:48:45 +0000 |
4290 | @@ -95,8 +95,9 @@ |
4291 | |
4292 | ### classes ### |
4293 | class SVGCanvas: |
4294 | - def __init__(self, size=(300,300)): |
4295 | - self.verbose = 0 |
4296 | + def __init__(self, size=(300,300), encoding='utf-8', verbose=0): |
4297 | + self.verbose = verbose |
4298 | + self.encoding = encoding |
4299 | self.width, self.height = self.size = size |
4300 | # self.height = size[1] |
4301 | self.code = [] |
4302 | @@ -126,11 +127,16 @@ |
4303 | self.svg = self.doc.documentElement |
4304 | self.svg.setAttribute("width", str(size[0])) |
4305 | self.svg.setAttribute("height", str(self.height)) |
4306 | + self.svg.setAttribute("preserveAspectRatio", "xMinYMin meet") |
4307 | + self.svg.setAttribute("viewBox", "0 0 %d %d" % (self.width, self.height)) |
4308 | |
4309 | #these suggested by Tim Roberts, as updated by peter@maubp.freeserve.co.uk |
4310 | self.svg.setAttribute("xmlns", "http://www.w3.org/2000/svg") |
4311 | self.svg.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink") |
4312 | self.svg.setAttribute("version", "1.0") |
4313 | + |
4314 | + |
4315 | + |
4316 | #self.svg.setAttribute("baseProfile", "full") #disliked in V 1.0 |
4317 | title = self.doc.createElement('title') |
4318 | text = self.doc.createTextNode('...') |
4319 | @@ -163,12 +169,12 @@ |
4320 | self.currGroup = self.groupTree |
4321 | |
4322 | def save(self, fn=None): |
4323 | - if isinstance(fn,str): |
4324 | + if type(fn) in types.StringTypes: |
4325 | f = open(fn, 'w') |
4326 | else: |
4327 | f = fn |
4328 | |
4329 | - f.write(self.doc.toprettyxml(indent=" ")) |
4330 | + f.write(self.doc.toprettyxml(indent=" ",encoding=self.encoding)) |
4331 | |
4332 | if f is not fn: |
4333 | f.close() |
4334 | @@ -253,9 +259,9 @@ |
4335 | def setDash(self, array=[], phase=0): |
4336 | """Two notations. Pass two numbers, or an array and phase.""" |
4337 | |
4338 | - if type(array) in (types.IntType, types.FloatType): |
4339 | + if isinstance(array,(float,int)): |
4340 | self.style['stroke-dasharray'] = ', '.join(map(str, ([array, phase]))) |
4341 | - elif type(array) in (types.ListType, types.TupleType) and len(array) > 0: |
4342 | + elif isinstance(array,(tuple,list)) and len(array) > 0: |
4343 | assert phase >= 0, "phase is a length in user space" |
4344 | self.style['stroke-dasharray'] = ', '.join(map(str, (array+[phase]))) |
4345 | |
4346 | @@ -754,7 +760,12 @@ |
4347 | self._canvas.setLineJoin(value) |
4348 | elif key == 'strokeDashArray': |
4349 | if value: |
4350 | - self._canvas.setDash(value) |
4351 | + if isinstance(value,(list,tuple)) and len(value)==2 and isinstance(value[1],(tuple,list)): |
4352 | + phase = value[0] |
4353 | + value = value[1] |
4354 | + else: |
4355 | + phase = 0 |
4356 | + self._canvas.setDash(value,phase) |
4357 | else: |
4358 | self._canvas.setDash() |
4359 | elif key == 'fillColor': |
4360 | |
4361 | === modified file 'src/reportlab/graphics/renderbase.py' |
4362 | --- src/reportlab/graphics/renderbase.py 2010-12-06 12:45:44 +0000 |
4363 | +++ src/reportlab/graphics/renderbase.py 2013-04-14 00:48:45 +0000 |
4364 | @@ -1,4 +1,4 @@ |
4365 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4366 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4367 | #see license.txt for license details |
4368 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/renderbase.py |
4369 | |
4370 | |
4371 | === modified file 'src/reportlab/graphics/shapes.py' |
4372 | --- src/reportlab/graphics/shapes.py 2010-12-06 12:45:44 +0000 |
4373 | +++ src/reportlab/graphics/shapes.py 2013-04-14 00:48:45 +0000 |
4374 | @@ -1,12 +1,12 @@ |
4375 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4376 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4377 | #see license.txt for license details |
4378 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/shapes.py |
4379 | |
4380 | -__version__=''' $Id: shapes.py 3751 2010-07-30 09:28:28Z rgbecker $ ''' |
4381 | +__version__=''' $Id: shapes.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4382 | __doc__='''Core of the graphics library - defines Drawing and Shapes''' |
4383 | |
4384 | import string, os, sys |
4385 | -from math import pi, cos, sin, tan |
4386 | +from math import pi, cos, sin, tan, sqrt |
4387 | from types import FloatType, IntType, ListType, TupleType, StringType, InstanceType |
4388 | from pprint import pprint |
4389 | |
4390 | @@ -210,6 +210,59 @@ |
4391 | yMax = y2 |
4392 | return (xMin, yMin, xMax, yMax) |
4393 | |
4394 | +def _getBezierExtrema(y0,y1,y2,y3): |
4395 | + ''' |
4396 | + this is used to find if a curveTo path operator has extrema in its range |
4397 | + The curveTo operator is defined by the points y0, y1, y2, y3 |
4398 | + |
4399 | + B(t):=(1-t)^3*y0+3*(1-t)^2*t*y1+3*(1-t)*t^2*y2+t^3*y3 |
4400 | + :=t^3*(y3-3*y2+3*y1-y0)+t^2*(3*y2-6*y1+3*y0)+t*(3*y1-3*y0)+y0 |
4401 | + and is a cubic bezier curve. |
4402 | + |
4403 | + The differential is a quadratic |
4404 | + t^2*(3*y3-9*y2+9*y1-3*y0)+t*(6*y2-12*y1+6*y0)+3*y1-3*y0 |
4405 | + |
4406 | + The extrema must be at real roots, r, of the above which lie in 0<=r<=1 |
4407 | + |
4408 | + The quadratic coefficients are |
4409 | + a=3*y3-9*y2+9*y1-3*y0 b=6*y2-12*y1+6*y0 c=3*y1-3*y0 |
4410 | + or |
4411 | + a=y3-3*y2+3*y1-y0 b=2*y2-4*y1+2*y0 c=y1-y0 (remove common factor of 3) |
4412 | + or |
4413 | + a=y3-3*(y2-y1)-y0 b=2*(y2-2*y1+y0) c=y1-y0 |
4414 | + |
4415 | + The returned value is [y0,x1,x2,y3] where if found x1, x2 are any extremals that were found; |
4416 | + there can be 0, 1 or 2 extremals |
4417 | + ''' |
4418 | + a=y3-3*(y2-y1)-y0 |
4419 | + b=2*(y2-2*y1+y0) |
4420 | + c=y1-y0 |
4421 | + Y = [y0] #the set of points |
4422 | + |
4423 | + #standard method to find roots of quadratic |
4424 | + d = b*b - 4*a*c |
4425 | + if d>=0: |
4426 | + d = sqrt(d) |
4427 | + if b<0: d = -d |
4428 | + q = -0.5*(b+d) |
4429 | + R = [] |
4430 | + try: |
4431 | + R.append(q/a) |
4432 | + except: |
4433 | + pass |
4434 | + try: |
4435 | + R.append(c/q) |
4436 | + except: |
4437 | + pass |
4438 | + b *= 1.5 |
4439 | + c *= 3 |
4440 | + for t in R: |
4441 | + if 0<=t<=1: |
4442 | + #real root in range evaluate spline there and add to X |
4443 | + Y.append(t*(t*(t*a+b)+c)+y0) |
4444 | + Y.append(y3) |
4445 | + return Y |
4446 | + |
4447 | def getPathBounds(points): |
4448 | n = len(points) |
4449 | f = lambda i,p = points: p[i] |
4450 | @@ -918,7 +971,7 @@ |
4451 | if op == _CLOSEPATH: |
4452 | hadClosePath = hadClosePath + 1 |
4453 | if op == _MOVETO: |
4454 | - hadMoveTo = hadMoveTo + 1 |
4455 | + hadMoveTo += 1 |
4456 | return hadMoveTo == hadClosePath |
4457 | |
4458 | class Path(SolidShape): |
4459 | @@ -962,7 +1015,32 @@ |
4460 | self.operators.append(_CLOSEPATH) |
4461 | |
4462 | def getBounds(self): |
4463 | - return getPathBounds(self.points) |
4464 | + points = self.points |
4465 | + try: #in case this complex algorithm is not yet ready :) |
4466 | + X = [] |
4467 | + aX = X.append |
4468 | + eX = X.extend |
4469 | + Y=[] |
4470 | + aY = Y.append |
4471 | + eY = Y.extend |
4472 | + i = 0 |
4473 | + for op in self.operators: |
4474 | + nArgs = _PATH_OP_ARG_COUNT[op] |
4475 | + j = i + nArgs |
4476 | + if nArgs==2: |
4477 | + #either moveTo or lineT0 |
4478 | + aX(points[i]) |
4479 | + aY(points[i+1]) |
4480 | + elif nArgs==6: |
4481 | + #curveTo |
4482 | + x1,x2,x3 = points[i:j:2] |
4483 | + eX(_getBezierExtrema(X[-1],x1,x2,x3)) |
4484 | + y1,y2,y3 = points[i+1:j:2] |
4485 | + eY(_getBezierExtrema(Y[-1],y1,y2,y3)) |
4486 | + i = j |
4487 | + return min(X),min(Y),max(X),max(Y) |
4488 | + except: |
4489 | + return getPathBounds(points) |
4490 | |
4491 | EmptyClipPath=Path() #special path |
4492 | |
4493 | |
4494 | === modified file 'src/reportlab/graphics/testdrawings.py' |
4495 | --- src/reportlab/graphics/testdrawings.py 2009-02-22 14:19:44 +0000 |
4496 | +++ src/reportlab/graphics/testdrawings.py 2013-04-14 00:48:45 +0000 |
4497 | @@ -1,5 +1,5 @@ |
4498 | #!/bin/env python |
4499 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4500 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4501 | #see license.txt for license details |
4502 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/testdrawings.py |
4503 | __version__=''' $Id $ ''' |
4504 | |
4505 | === modified file 'src/reportlab/graphics/testshapes.py' |
4506 | --- src/reportlab/graphics/testshapes.py 2010-12-06 12:45:44 +0000 |
4507 | +++ src/reportlab/graphics/testshapes.py 2013-04-14 00:48:45 +0000 |
4508 | @@ -1,5 +1,5 @@ |
4509 | #!/bin/env python |
4510 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4511 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4512 | #see license.txt for license details |
4513 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/testshapes.py |
4514 | |
4515 | @@ -60,7 +60,11 @@ |
4516 | F.append(name) |
4517 | except: |
4518 | pass |
4519 | -_setup() |
4520 | + return F |
4521 | + |
4522 | +for f in _setup(): |
4523 | + if f not in _FONTS: |
4524 | + _FONTS.append(f) |
4525 | |
4526 | ######################################################### |
4527 | # |
4528 | @@ -439,8 +443,8 @@ |
4529 | String(10, y, text, fontName=fontName, fontSize = fontSize))) |
4530 | y -= 5 |
4531 | return maxx, h-y+gap, D |
4532 | - maxx, maxy, D = drawit(F) |
4533 | - if maxx>400 or maxy>200: _,_,D = drawit(F,maxx,maxy) |
4534 | + maxx, maxy, D = drawit(_FONTS) |
4535 | + if maxx>400 or maxy>200: _,_,D = drawit(_FONTS,maxx,maxy) |
4536 | return D |
4537 | |
4538 | ##def getDrawing14(): |
4539 | |
4540 | === modified file 'src/reportlab/graphics/widgetbase.py' |
4541 | --- src/reportlab/graphics/widgetbase.py 2010-12-06 12:45:44 +0000 |
4542 | +++ src/reportlab/graphics/widgetbase.py 2013-04-14 00:48:45 +0000 |
4543 | @@ -1,7 +1,7 @@ |
4544 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4545 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4546 | #see license.txt for license details |
4547 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/widgetbase.py |
4548 | -__version__=''' $Id: widgetbase.py 3742 2010-07-06 16:19:30Z rgbecker $ ''' |
4549 | +__version__=''' $Id: widgetbase.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4550 | __doc__='''Base class for user-defined graphical widgets''' |
4551 | |
4552 | import string |
4553 | |
4554 | === modified file 'src/reportlab/graphics/widgets/__init__.py' |
4555 | --- src/reportlab/graphics/widgets/__init__.py 2009-02-22 14:19:44 +0000 |
4556 | +++ src/reportlab/graphics/widgets/__init__.py 2013-04-14 00:48:45 +0000 |
4557 | @@ -1,5 +1,5 @@ |
4558 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4559 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4560 | #see license.txt for license details |
4561 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/widgets/__init__.py |
4562 | -__version__=''' $Id: __init__.py 3345 2008-12-12 17:55:22Z damian $ ''' |
4563 | +__version__=''' $Id: __init__.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4564 | __doc__='''Some non-chart widgets''' |
4565 | |
4566 | === modified file 'src/reportlab/graphics/widgets/grids.py' |
4567 | --- src/reportlab/graphics/widgets/grids.py 2010-12-06 12:45:44 +0000 |
4568 | +++ src/reportlab/graphics/widgets/grids.py 2013-04-14 00:48:45 +0000 |
4569 | @@ -1,7 +1,7 @@ |
4570 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4571 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4572 | #see license.txt for license details |
4573 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/widgets/grids.py |
4574 | -__version__=''' $Id: grids.py 3660 2010-02-08 18:17:33Z damian $ ''' |
4575 | +__version__=''' $Id: grids.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4576 | |
4577 | from reportlab.lib import colors |
4578 | from reportlab.lib.validators import isNumber, isColorOrNone, isBoolean, isListOfNumbers, OneOf, isListOfColors, isNumberOrNone |
4579 | @@ -424,7 +424,13 @@ |
4580 | |
4581 | def centroid(P): |
4582 | '''compute average point of a set of points''' |
4583 | - return reduce(lambda x,y, fn=float(len(P)): (x[0]+y[0]/fn,x[1]+y[1]/fn),P,(0,0)) |
4584 | + cx = 0 |
4585 | + cy = 0 |
4586 | + for x,y in P: |
4587 | + cx+=x |
4588 | + cy+=y |
4589 | + n = float(len(P)) |
4590 | + return cx/n, cy/n |
4591 | |
4592 | def rotatedEnclosingRect(P, angle, rect): |
4593 | ''' |
4594 | @@ -485,10 +491,17 @@ |
4595 | path.isClipPath = 1 |
4596 | g = Group() |
4597 | g.add(path) |
4598 | - rect = ShadedRect(strokeWidth=0,strokeColor=None) |
4599 | + angle = self.angle |
4600 | + orientation = 'vertical' |
4601 | + if angle==180: |
4602 | + angle = 0 |
4603 | + elif angle in (90,270): |
4604 | + orientation ='horizontal' |
4605 | + angle = 0 |
4606 | + rect = ShadedRect(strokeWidth=0,strokeColor=None,orientation=orientation) |
4607 | for k in 'fillColorStart', 'fillColorEnd', 'numShades', 'cylinderMode': |
4608 | setattr(rect,k,getattr(self,k)) |
4609 | - g.add(rotatedEnclosingRect(P, self.angle, rect)) |
4610 | + g.add(rotatedEnclosingRect(P, angle, rect)) |
4611 | g.add(EmptyClipPath) |
4612 | path = path.copy() |
4613 | path.isClipPath = 0 |
4614 | |
4615 | === modified file 'src/reportlab/graphics/widgets/markers.py' |
4616 | --- src/reportlab/graphics/widgets/markers.py 2010-12-06 12:45:44 +0000 |
4617 | +++ src/reportlab/graphics/widgets/markers.py 2013-04-14 00:48:45 +0000 |
4618 | @@ -1,8 +1,8 @@ |
4619 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4620 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4621 | #see license.txt for license details |
4622 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/widgets/markers.py |
4623 | |
4624 | -__version__=''' $Id: markers.py 3660 2010-02-08 18:17:33Z damian $ ''' |
4625 | +__version__=''' $Id: markers.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4626 | __doc__="""This modules defines a collection of markers used in charts. |
4627 | """ |
4628 | |
4629 | |
4630 | === modified file 'src/reportlab/graphics/widgets/signsandsymbols.py' |
4631 | --- src/reportlab/graphics/widgets/signsandsymbols.py 2010-02-16 23:32:55 +0000 |
4632 | +++ src/reportlab/graphics/widgets/signsandsymbols.py 2013-04-14 00:48:45 +0000 |
4633 | @@ -1,11 +1,11 @@ |
4634 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4635 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4636 | #see license.txt for license details |
4637 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/widgets/signsandsymbols.py |
4638 | # signsandsymbols.py |
4639 | # A collection of new widgets |
4640 | # author: John Precedo (johnp@reportlab.com) |
4641 | |
4642 | -__version__=''' $Id: signsandsymbols.py 3632 2010-01-14 10:25:06Z rgbecker $ ''' |
4643 | +__version__=''' $Id: signsandsymbols.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4644 | __doc__="""This file is a collection of widgets to produce some common signs and symbols. |
4645 | |
4646 | Widgets include: |
4647 | |
4648 | === modified file 'src/reportlab/graphics/widgets/table.py' |
4649 | --- src/reportlab/graphics/widgets/table.py 2010-02-16 23:32:55 +0000 |
4650 | +++ src/reportlab/graphics/widgets/table.py 2013-04-14 00:48:45 +0000 |
4651 | @@ -1,8 +1,8 @@ |
4652 | #!/usr/bin/env python |
4653 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4654 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4655 | #see license.txt for license details |
4656 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/widgets/grids.py |
4657 | -__version__=''' $Id: table.py 3559 2009-09-22 11:27:25Z meitham $ ''' |
4658 | +__version__=''' $Id: table.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4659 | |
4660 | from reportlab.graphics.widgetbase import Widget |
4661 | from reportlab.graphics.charts.textlabels import Label |
4662 | |
4663 | === modified file 'src/reportlab/lib/PyFontify.py' |
4664 | --- src/reportlab/lib/PyFontify.py 2010-12-06 12:45:44 +0000 |
4665 | +++ src/reportlab/lib/PyFontify.py 2013-04-14 00:48:45 +0000 |
4666 | @@ -1,6 +1,6 @@ |
4667 | -#Copyright ReportLab Europe Ltd. 2000-2008 |
4668 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4669 | #see license.txt for license details |
4670 | -__version__=''' $Id: PyFontify.py 3660 2010-02-08 18:17:33Z damian $ ''' |
4671 | +__version__=''' $Id: PyFontify.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4672 | __doc__=""" |
4673 | Module to analyze Python source code; for syntax coloring tools. |
4674 | |
4675 | |
4676 | === modified file 'src/reportlab/lib/__init__.py' |
4677 | --- src/reportlab/lib/__init__.py 2010-12-06 12:45:44 +0000 |
4678 | +++ src/reportlab/lib/__init__.py 2013-04-14 00:48:45 +0000 |
4679 | @@ -1,7 +1,7 @@ |
4680 | #!/bin/env python |
4681 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4682 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4683 | #see license.txt for license details |
4684 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/__init__.py |
4685 | -__version__=''' $Id: __init__.py 3660 2010-02-08 18:17:33Z damian $ ''' |
4686 | +__version__=''' $Id: __init__.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4687 | import os |
4688 | RL_DEBUG = 'RL_DEBUG' in os.environ |
4689 | |
4690 | === modified file 'src/reportlab/lib/abag.py' |
4691 | --- src/reportlab/lib/abag.py 2010-02-16 23:32:55 +0000 |
4692 | +++ src/reportlab/lib/abag.py 2013-04-14 00:48:45 +0000 |
4693 | @@ -1,7 +1,7 @@ |
4694 | -#Copyright ReportLab Europe Ltd. 2000-2010 |
4695 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4696 | #see license.txt for license details |
4697 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/abag.py |
4698 | -__version__=''' $Id: abag.py 3623 2009-12-17 16:18:34Z andy $ ''' |
4699 | +__version__=''' $Id: abag.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4700 | __doc__='''Data structure to hold a collection of attributes, used by styles.''' |
4701 | class ABag: |
4702 | """ |
4703 | |
4704 | === modified file 'src/reportlab/lib/arciv.py' |
4705 | --- src/reportlab/lib/arciv.py 2009-02-22 14:19:44 +0000 |
4706 | +++ src/reportlab/lib/arciv.py 2013-04-14 00:48:45 +0000 |
4707 | @@ -1,9 +1,9 @@ |
4708 | -#copyright ReportLab Europe Limited. 2000-2006 |
4709 | +#copyright ReportLab Europe Limited. 2000-2012 |
4710 | #see license.txt for license details |
4711 | ''' |
4712 | Arciv Stream ciphering |
4713 | ''' |
4714 | -__version__=''' $Id: arciv.py 3386 2009-01-22 14:21:27Z rgbecker $ ''' |
4715 | +__version__=''' $Id: arciv.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4716 | from types import StringType |
4717 | class ArcIV: |
4718 | ''' |
4719 | |
4720 | === modified file 'src/reportlab/lib/attrmap.py' |
4721 | --- src/reportlab/lib/attrmap.py 2010-12-06 12:45:44 +0000 |
4722 | +++ src/reportlab/lib/attrmap.py 2013-04-14 00:48:45 +0000 |
4723 | @@ -1,7 +1,7 @@ |
4724 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4725 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4726 | #see license.txt for license details |
4727 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/attrmap.py |
4728 | -__version__=''' $Id: attrmap.py 3660 2010-02-08 18:17:33Z damian $ ''' |
4729 | +__version__=''' $Id: attrmap.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4730 | __doc__='''Framework for objects whose assignments are checked. Used by graphics. |
4731 | |
4732 | We developed reportlab/graphics prior to Python 2 and metaclasses. For the |
4733 | |
4734 | === modified file 'src/reportlab/lib/boxstuff.py' |
4735 | --- src/reportlab/lib/boxstuff.py 2009-02-22 14:19:44 +0000 |
4736 | +++ src/reportlab/lib/boxstuff.py 2013-04-14 00:48:45 +0000 |
4737 | @@ -1,6 +1,6 @@ |
4738 | -#Copyright ReportLab Europe Ltd. 2000-2006 |
4739 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4740 | #see license.txt for license details |
4741 | -__version__=''' $Id: boxstuff.py 3408 2009-01-28 12:25:33Z rptlab $ ''' |
4742 | +__version__=''' $Id: boxstuff.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4743 | __doc__='''Utility functions to position and resize boxes within boxes''' |
4744 | |
4745 | def aspectRatioFix(preserve,anchor,x,y,width,height,imWidth,imHeight): |
4746 | |
4747 | === modified file 'src/reportlab/lib/codecharts.py' |
4748 | --- src/reportlab/lib/codecharts.py 2009-02-22 14:19:44 +0000 |
4749 | +++ src/reportlab/lib/codecharts.py 2013-04-14 00:48:45 +0000 |
4750 | @@ -1,4 +1,4 @@ |
4751 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4752 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4753 | #see license.txt for license details |
4754 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/codecharts.py |
4755 | #$Header $ |
4756 | |
4757 | === modified file 'src/reportlab/lib/colors.py' |
4758 | --- src/reportlab/lib/colors.py 2010-12-06 12:45:44 +0000 |
4759 | +++ src/reportlab/lib/colors.py 2013-04-14 00:48:45 +0000 |
4760 | @@ -1,7 +1,7 @@ |
4761 | -#Copyright ReportLab Europe Ltd. 2000-2010 |
4762 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4763 | #see license.txt for license details |
4764 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/colors.py |
4765 | -__version__=''' $Id: colors.py 3780 2010-09-17 13:40:59Z rgbecker $ ''' |
4766 | +__version__=''' $Id: colors.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4767 | __doc__='''Defines standard colour-handling classes and colour names. |
4768 | |
4769 | We define standard classes to hold colours in two models: RGB and CMYK. |
4770 | @@ -12,8 +12,34 @@ |
4771 | - pre-built colours used in ReportLab's branding |
4772 | |
4773 | - various conversion and construction functions |
4774 | + |
4775 | +These tests are here because doctest cannot find them otherwise. |
4776 | +>>> toColor('rgb(128,0,0)')==toColor('rgb(50%,0%,0%)') |
4777 | +True |
4778 | +>>> toColor('rgb(50%,0%,0%)')!=Color(0.5,0,0,1) |
4779 | +True |
4780 | +>>> toColor('hsl(0,100%,50%)')==toColor('rgb(255,0,0)') |
4781 | +True |
4782 | +>>> toColor('hsl(-120,100%,50%)')==toColor('rgb(0,0,255)') |
4783 | +True |
4784 | +>>> toColor('hsl(120,100%,50%)')==toColor('rgb(0,255,0)') |
4785 | +True |
4786 | +>>> toColor('rgba( 255,0,0,0.5)')==Color(1,0,0,0.5) |
4787 | +True |
4788 | +>>> toColor('cmyk(1,0,0,0 )')==CMYKColor(1,0,0,0) |
4789 | +True |
4790 | +>>> toColor('pcmyk( 100 , 0 , 0 , 0 )')==PCMYKColor(100,0,0,0) |
4791 | +True |
4792 | +>>> toColor('cmyka(1,0,0,0,0.5)')==CMYKColor(1,0,0,0,alpha=0.5) |
4793 | +True |
4794 | +>>> toColor('pcmyka(100,0,0,0,0.5)')==PCMYKColor(100,0,0,0,alpha=0.5) |
4795 | +True |
4796 | +>>> toColor('pcmyka(100,0,0,0)') |
4797 | +Traceback (most recent call last): |
4798 | + .... |
4799 | +ValueError: css color 'pcmyka(100,0,0,0)' has wrong number of components |
4800 | ''' |
4801 | -import math |
4802 | +import math, re |
4803 | from reportlab.lib.utils import fp_str |
4804 | |
4805 | class Color: |
4806 | @@ -70,6 +96,14 @@ |
4807 | def hexvala(self): |
4808 | return '0x%02x%02x%02x%02x' % self.bitmap_rgba() |
4809 | |
4810 | + def int_rgb(self): |
4811 | + v = self.bitmap_rgb() |
4812 | + return v[0]<<16|v[1]<<8|v[2] |
4813 | + |
4814 | + def int_rgba(self): |
4815 | + v = self.bitmap_rgba() |
4816 | + return int((v[0]<<24|v[1]<<16|v[2]<<8|v[3])&0xffffff) |
4817 | + |
4818 | _cKwds='red green blue alpha'.split() |
4819 | def cKwds(self): |
4820 | for k in self._cKwds: |
4821 | @@ -706,6 +740,8 @@ |
4822 | m1 = l*2-m2 |
4823 | return hue2rgb(m1, m2, h+1./3),hue2rgb(m1, m2, h),hue2rgb(m1, m2, h-1./3) |
4824 | |
4825 | +import re |
4826 | +_re_css = re.compile(r'^\s*(pcmyk|cmyk|rgb|hsl)(a|)\s*\(\s*([^)]*)\)\s*$') |
4827 | class cssParse: |
4828 | def pcVal(self,v): |
4829 | v = v.strip() |
4830 | @@ -746,32 +782,16 @@ |
4831 | except: |
4832 | raise ValueError('bad %s argument value %r in css color %r' % (n,v,self.s)) |
4833 | |
4834 | + _n_c = dict(pcmyk=(4,100,True,False),cmyk=(4,1,True,False),hsl=(3,1,False,True),rgb=(3,1,False,False)) |
4835 | + |
4836 | def __call__(self,s): |
4837 | - s = s.strip() |
4838 | - hsl = s.startswith('hsl') |
4839 | - rgb = s.startswith('rgb') |
4840 | - cmyk = s.startswith('cmyk') |
4841 | - c = 1 |
4842 | - if hsl: n = 3 |
4843 | - if rgb: n = 3 |
4844 | - if cmyk: |
4845 | - n = 4 |
4846 | - else: |
4847 | - cmyk = s.startswith('pcmyk') |
4848 | - if cmyk: |
4849 | - n = 5 |
4850 | - c = 100 |
4851 | - if not (rgb or hsl or cmyk): return None |
4852 | + n = _re_css.match(s) |
4853 | + if not n: return |
4854 | self.s = s |
4855 | - n = s[n:] |
4856 | - ha = n.startswith('a') |
4857 | - n = n[(ha and 1 or 0):].strip() |
4858 | - if not n.startswith('(') or not n.endswith(')'): |
4859 | - raise ValueError('improperly formatted css style color %r' % s) |
4860 | - n = n[1:-1].split(',') #strip parens and split on comma |
4861 | - a = len(n) |
4862 | - b = cmyk and 4 or 3 |
4863 | - if ha and a!=(b+1) or not ha and a!=b: |
4864 | + b,c,cmyk,hsl = self._n_c[n.group(1)] |
4865 | + ha = n.group(2) |
4866 | + n = n.group(3).split(',') #strip parens and split on comma |
4867 | + if len(n)!=(b+(ha and 1 or 0)): |
4868 | raise ValueError('css color %r has wrong number of components' % s) |
4869 | if ha: |
4870 | n,a = n[:b],self.alphaVal(n[b],c) |
4871 | @@ -805,26 +825,6 @@ |
4872 | |
4873 | def __call__(self,arg,default=None): |
4874 | '''try to map an arbitrary arg to a color instance |
4875 | - >>> toColor('rgb(128,0,0)')==toColor('rgb(50%,0%,0%)') |
4876 | - True |
4877 | - >>> toColor('rgb(50%,0%,0%)')!=Color(0.5,0,0,1) |
4878 | - True |
4879 | - >>> toColor('hsl(0,100%,50%)')==toColor('rgb(255,0,0)') |
4880 | - True |
4881 | - >>> toColor('hsl(-120,100%,50%)')==toColor('rgb(0,0,255)') |
4882 | - True |
4883 | - >>> toColor('hsl(120,100%,50%)')==toColor('rgb(0,255,0)') |
4884 | - True |
4885 | - >>> toColor('rgba(255,0,0,0.5)')==Color(1,0,0,0.5) |
4886 | - True |
4887 | - >>> toColor('cmyk(1,0,0,0)')==CMYKColor(1,0,0,0) |
4888 | - True |
4889 | - >>> toColor('pcmyk(100,0,0,0)')==PCMYKColor(100,0,0,0) |
4890 | - True |
4891 | - >>> toColor('cmyka(1,0,0,0,0.5)')==CMYKColor(1,0,0,0,alpha=0.5) |
4892 | - True |
4893 | - >>> toColor('pcmyka(100,0,0,0,0.5)')==PCMYKColor(100,0,0,0,alpha=0.5) |
4894 | - True |
4895 | ''' |
4896 | if isinstance(arg,Color): return arg |
4897 | if isinstance(arg,(tuple,list)): |
4898 | @@ -914,7 +914,6 @@ |
4899 | else: b = black |
4900 | return linearlyInterpolatedColor(b, c, 0, 1, f) |
4901 | |
4902 | - |
4903 | def fade(aSpotColor, percentages): |
4904 | """Waters down spot colors and returns a list of new ones |
4905 | |
4906 | |
4907 | === modified file 'src/reportlab/lib/corp.py' |
4908 | --- src/reportlab/lib/corp.py 2010-12-06 12:45:44 +0000 |
4909 | +++ src/reportlab/lib/corp.py 2013-04-14 00:48:45 +0000 |
4910 | @@ -1,7 +1,7 @@ |
4911 | #!/bin/env python |
4912 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4913 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4914 | #see license.txt for license details |
4915 | -__version__=''' $Id: corp.py 3786 2010-09-29 09:51:54Z rgbecker $ ''' |
4916 | +__version__=''' $Id: corp.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4917 | __doc__="""Generate ReportLab logo in a variety of sizes and formats. |
4918 | |
4919 | |
4920 | |
4921 | === modified file 'src/reportlab/lib/enums.py' |
4922 | --- src/reportlab/lib/enums.py 2009-02-22 14:19:44 +0000 |
4923 | +++ src/reportlab/lib/enums.py 2013-04-14 00:48:45 +0000 |
4924 | @@ -1,7 +1,7 @@ |
4925 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4926 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4927 | #see license.txt for license details |
4928 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/enums.py |
4929 | -__version__=''' $Id: enums.py 3342 2008-12-12 15:55:34Z andy $ ''' |
4930 | +__version__=''' $Id: enums.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4931 | __doc__=""" |
4932 | Container for constants. Hardly used! |
4933 | """ |
4934 | |
4935 | === modified file 'src/reportlab/lib/extformat.py' |
4936 | --- src/reportlab/lib/extformat.py 2010-12-06 12:45:44 +0000 |
4937 | +++ src/reportlab/lib/extformat.py 2013-04-14 00:48:45 +0000 |
4938 | @@ -1,6 +1,6 @@ |
4939 | -#Copyright ReportLab Europe Ltd. 2000-2010 |
4940 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4941 | #see license.txt for license details |
4942 | -__version__='''$Id: extformat.py 3665 2010-02-09 15:55:45Z rgbecker $''' |
4943 | +__version__='''$Id: extformat.py 3959 2012-09-27 14:39:39Z robin $''' |
4944 | __doc__='''Apparently not used anywhere, purpose unknown!''' |
4945 | from tokenize import tokenprog |
4946 | import sys |
4947 | |
4948 | === modified file 'src/reportlab/lib/fontfinder.py' |
4949 | --- src/reportlab/lib/fontfinder.py 2010-12-06 12:45:44 +0000 |
4950 | +++ src/reportlab/lib/fontfinder.py 2013-04-14 00:48:45 +0000 |
4951 | @@ -1,6 +1,6 @@ |
4952 | -#Copyright ReportLab Europe Ltd. 2000-2007 |
4953 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4954 | #see license.txt for license details |
4955 | -__version__=''' $Id: fontfinder.py 3660 2010-02-08 18:17:33Z damian $ ''' |
4956 | +__version__=''' $Id: fontfinder.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4957 | |
4958 | #modification of users/robin/ttflist.py. |
4959 | __doc__="""This provides some general-purpose tools for finding fonts. |
4960 | |
4961 | === modified file 'src/reportlab/lib/fonts.py' |
4962 | --- src/reportlab/lib/fonts.py 2010-12-06 12:45:44 +0000 |
4963 | +++ src/reportlab/lib/fonts.py 2013-04-14 00:48:45 +0000 |
4964 | @@ -1,8 +1,8 @@ |
4965 | #!/bin/env python |
4966 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4967 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4968 | #see license.txt for license details |
4969 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/fonts.py |
4970 | -__version__=''' $Id: fonts.py 3702 2010-04-14 17:13:41Z rgbecker $ ''' |
4971 | +__version__=''' $Id: fonts.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4972 | __doc__='''Utilities to associate bold and italic versions of fonts into families |
4973 | |
4974 | Bold, italic and plain fonts are usually implemented in separate disk files; |
4975 | |
4976 | === modified file 'src/reportlab/lib/formatters.py' |
4977 | --- src/reportlab/lib/formatters.py 2008-10-19 23:16:31 +0000 |
4978 | +++ src/reportlab/lib/formatters.py 2013-04-14 00:48:45 +0000 |
4979 | @@ -1,9 +1,9 @@ |
4980 | #!/bin/env python |
4981 | -#Copyright ReportLab Europe Ltd. 2000-2004 |
4982 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4983 | #see license.txt for license details |
4984 | #history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/formatters.py |
4985 | __all__=('Formatter','DecimalFormatter') |
4986 | -__version__=''' $Id: formatters.py 3155 2007-10-05 10:55:52Z rgbecker $ ''' |
4987 | +__version__=''' $Id: formatters.py 3959 2012-09-27 14:39:39Z robin $ ''' |
4988 | __doc__=""" |
4989 | These help format numbers and dates in a user friendly way. |
4990 | Used by the graphics framework. |
4991 | |
4992 | === modified file 'src/reportlab/lib/geomutils.py' |
4993 | --- src/reportlab/lib/geomutils.py 2009-02-22 14:19:44 +0000 |
4994 | +++ src/reportlab/lib/geomutils.py 2013-04-14 00:48:45 +0000 |
4995 | @@ -1,6 +1,6 @@ |
4996 | -#Copyright ReportLab Europe Ltd. 2000-2006 |
4997 | +#Copyright ReportLab Europe Ltd. 2000-2012 |
4998 | #see license.txt for license details |
4999 | -__version__=''' $Id: geomutils.py 3355 2009-01-08 14:58:44Z jonas $ ''' |
5000 | +__version__=''' $Id: geomutils.py 3959 2012-09-27 14:39:39Z robin $ ''' |
The diff has been truncated for viewing.