reportlab-3.5.34/0000775000175000017500000000000013607302651014377 5ustar rptlabrptlab00000000000000reportlab-3.5.34/LICENSE.txt0000664000175000017500000000325313544671343016234 0ustar rptlabrptlab00000000000000##################################################################################### # # Copyright (c) 2000-2018, ReportLab Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # * Neither the name of the company nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE OFFICERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ##################################################################################### reportlab-3.5.34/INSTALL.txt0000664000175000017500000000006513544671343016256 0ustar rptlabrptlab00000000000000Please see README.txt for installation instructions. reportlab-3.5.34/demos/0000775000175000017500000000000013607302651015506 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/rlzope/0000775000175000017500000000000013607302651017021 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/rlzope/readme.txt0000664000175000017500000000475213544671343021036 0ustar rptlabrptlab00000000000000# rlzope : an external Zope method to show people how to use # the ReportLab toolkit from within Zope. # # this method searches an image named 'logo' in the # ZODB then prints it at the top of a simple PDF # document made with ReportLab # # the resulting PDF document is returned to the # user's web browser and, if possible, it is # simultaneously saved into the ZODB. # # this method illustrates how to use both the platypus # and canvas frameworks. # # License : The ReportLab Toolkit's license (similar to BSD) # # Author : Jerome Alet - alet@librelogiciel.com # Installation instructions : =========================== 0 - If not installed then install Zope. 1 - Install reportlab in the Zope/lib/python/Shared directory by unpacking the tarball and putting a reportlabs.pth file in site-packages for the Zope used with Python. The path value in the reportlabs.pth file must be relative. For a typical Zope installation, the path is "../../python/Shared". Remember to restart Zope so the new path is instantiated. 2 - Install PIL in the Zope/lib/python/Shared directory. You need to ensure that the _imaging.so or .pyd is also installed appropriately. It should be compatible with the python running the zope site. 3 - Copy rlzope.py to your Zope installation's "Extensions" subdirectory, e.g. /var/lib/zope/Extensions/ under Debian GNU/Linux. 4 - From within Zope's management interface, add an External Method with these parameters : Id : rlzope Title : rlzope Module Name : rlzope Function Name : rlzope 5 - From within Zope's management interface, add an image called "logo" in the same Folder than rlzope, or somewhere above in the Folder hierarchy. For example you can use ReportLab's logo which you can find in reportlab/docs/images/replogo.gif 6 - Point your web browser to rlzope, e.g. on my laptop under Debian GNU/Linux : http://localhost:9673/rlzope This will send a simple PDF document named 'dummy.pdf' to your web browser, and if possible save it as a File object in the Zope Object DataBase, with this name. Note, however, that if an object with the same name already exists then it won't be replaced for security reasons. You can optionally add a parameter called 'name' with a filename as the value, to specify another filename, e.g. : logo http://localhost:9673/rlzope?name=sample.pdf 7 - Adapt it to your own needs. 8 - Enjoy ! Send comments or bug reports at : alet@librelogiciel.com reportlab-3.5.34/demos/rlzope/rlzope.py0000664000175000017500000001522613544671343020723 0ustar rptlabrptlab00000000000000# # Using the ReportLab toolkit from within Zope # # WARNING : The MyPDFDoc class deals with ReportLab's platypus framework, # while the MyPageTemplate class directly deals with ReportLab's # canvas, this way you know how to do with both... # # License : the ReportLab Toolkit's one # see : http://www.reportlab.com # # Author : Jerome Alet - alet@librelogiciel.com # # try : from Shared.reportlab.platypus.paragraph import Paragraph from Shared.reportlab.platypus.doctemplate import * from Shared.reportlab.lib.units import inch from Shared.reportlab.lib import styles from Shared.reportlab.lib.utils import ImageReader, getBytesIO except ImportError : from reportlab.platypus.paragraph import Paragraph from reportlab.platypus.doctemplate import * from reportlab.lib.units import inch from reportlab.lib import styles from reportlab.lib.utils import ImageReader, getBytesIO class MyPDFDoc : class MyPageTemplate(PageTemplate) : """Our own page template.""" def __init__(self, parent) : """Initialise our page template.""" # # we must save a pointer to our parent somewhere self.parent = parent # Our doc is made of a single frame content = Frame(0.75 * inch, 0.5 * inch, parent.document.pagesize[0] - 1.25 * inch, parent.document.pagesize[1] - (1.5 * inch)) PageTemplate.__init__(self, "MyTemplate", [content]) # get all the images we need now, in case we've got # several pages this will save some CPU self.logo = self.getImageFromZODB("logo") def getImageFromZODB(self, name) : """Retrieves an Image from the ZODB, converts it to PIL, and makes it 0.75 inch high. """ try : # try to get it from ZODB logo = getattr(self.parent.context, name) except AttributeError : # not found ! return None # Convert it to PIL image = ImageReader(getBytesIO(str(logo.data))) (width, height) = image.getSize() # scale it to be 0.75 inch high multi = ((height + 0.0) / (0.75 * inch)) width = int(width / multi) height = int(height / multi) return ((width, height), image) def beforeDrawPage(self, canvas, doc) : """Draws a logo and an contribution message on each page.""" canvas.saveState() if self.logo is not None : # draws the logo if it exists ((width, height), image) = self.logo canvas.drawImage(image, inch, doc.pagesize[1] - inch, width, height) canvas.setFont('Times-Roman', 10) canvas.drawCentredString(inch + (doc.pagesize[0] - (1.5 * inch)) / 2, 0.25 * inch, "Contributed by Jerome Alet - alet@librelogiciel.com") canvas.restoreState() def __init__(self, context, filename) : # save some datas self.context = context self.built = 0 self.objects = [] # we will build an in-memory document # instead of creating an on-disk file. self.report = getBytesIO() # initialise a PDF document using ReportLab's platypus self.document = BaseDocTemplate(self.report) # add our page template # (we could add more than one, but I prefer to keep it simple) self.document.addPageTemplates(self.MyPageTemplate(self)) # get the default style sheets self.StyleSheet = styles.getSampleStyleSheet() # then build a simple doc with ReportLab's platypus sometext = "A sample script to show how to use ReportLab from within Zope" url = self.escapexml(context.absolute_url()) urlfilename = self.escapexml(context.absolute_url() + '/%s' % filename) self.append(Paragraph("Using ReportLab from within Zope", self.StyleSheet["Heading3"])) self.append(Spacer(0, 10)) self.append(Paragraph("You launched it from : %s" % url, self.StyleSheet['Normal'])) self.append(Spacer(0, 40)) self.append(Paragraph("If possible, this report will be automatically saved as : %s" % urlfilename, self.StyleSheet['Normal'])) # generation du document PDF self.document.build(self.objects) self.built = 1 def __str__(self) : """Returns the PDF document as a string of text, or None if it's not ready yet.""" if self.built : return self.report.getvalue() else : return None def append(self, object) : """Appends an object to our platypus "story" (using ReportLab's terminology).""" self.objects.append(object) def escapexml(self, s) : """Escape some xml entities.""" s = s.strip() s = s.replace("&", "&") s = s.replace("<", "<") return s.replace(">", ">") def rlzope(self) : """A sample external method to show people how to use ReportLab from within Zope.""" try: # # which file/object name to use ? # append ?name=xxxxx to rlzope's url to # choose another name filename = self.REQUEST.get("name", "dummy.pdf") if filename[-4:] != '.pdf' : filename = filename + '.pdf' # tell the browser we send some PDF document # with the requested filename # get the document's content itself as a string of text content = str(MyPDFDoc(self, filename)) # we will return it to the browser, but before that we also want to # save it into the ZODB into the current folder try : self.manage_addFile(id = filename, file = content, title = "A sample PDF document produced with ReportLab", precondition = '', content_type = "application/pdf") except : # it seems an object with this name already exists in the ZODB: # it's more secure to not replace it, since we could possibly # destroy an important PDF document of this name. pass self.REQUEST.RESPONSE.setHeader('Content-Type', 'application/pdf') self.REQUEST.RESPONSE.setHeader('Content-Disposition', 'attachment; filename=%s' % filename) except: import traceback, sys, cgi content = sys.stdout = sys.stderr = getBytesIO() self.REQUEST.RESPONSE.setHeader('Content-Type', 'text/html') traceback.print_exc() sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ content = '
%s
' % cgi.escape(content.getvalue()) # then we also return the PDF content to the browser return content reportlab-3.5.34/demos/gadflypaper/0000775000175000017500000000000013607302651020004 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/gadflypaper/00readme.txt0000664000175000017500000000015113544671343022146 0ustar rptlabrptlab00000000000000This is Aaron Watters' first script; it renders his paper for IPC8 into PDF. A fascinating read, as well.reportlab-3.5.34/demos/gadflypaper/gfe.py0000664000175000017500000007733313544671343021143 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __doc__='' __version__='3.3.0' #REPORTLAB_TEST_SCRIPT import sys from reportlab.platypus import * from reportlab.lib.styles import getSampleStyleSheet from reportlab.rl_config import defaultPageSize PAGE_HEIGHT=defaultPageSize[1] styles = getSampleStyleSheet() Title = "Integrating Diverse Data Sources with Gadfly 2" Author = "Aaron Watters" URL = "http://www.chordate.com/" email = "arw@ifu.net" Abstract = """This paper describes the primative methods underlying the implementation of SQL query evaluation in Gadfly 2, a database management system implemented in Python [Van Rossum]. The major design goals behind the architecture described here are to simplify the implementation and to permit flexible and efficient extensions to the gadfly engine. Using this architecture and its interfaces programmers can add functionality to the engine such as alternative disk based indexed table implementations, dynamic interfaces to remote data bases or or other data sources, and user defined computations.""" from reportlab.lib.units import inch pageinfo = "%s / %s / %s" % (Author, email, Title) def myFirstPage(canvas, doc): canvas.saveState() #canvas.setStrokeColorRGB(1,0,0) #canvas.setLineWidth(5) #canvas.line(66,72,66,PAGE_HEIGHT-72) canvas.setFont('Times-Bold',16) canvas.drawString(108, PAGE_HEIGHT-108, Title) canvas.setFont('Times-Roman',9) canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo) canvas.restoreState() def myLaterPages(canvas, doc): #canvas.drawImage("snkanim.gif", 36, 36) canvas.saveState() #canvas.setStrokeColorRGB(1,0,0) #canvas.setLineWidth(5) #canvas.line(66,72,66,PAGE_HEIGHT-72) canvas.setFont('Times-Roman',9) canvas.drawString(inch, 0.75 * inch, "Page %d %s" % (doc.page, pageinfo)) canvas.restoreState() def go(): Elements.insert(0,Spacer(0,inch)) doc = SimpleDocTemplate('gfe.pdf') doc.build(Elements,onFirstPage=myFirstPage, onLaterPages=myLaterPages) Elements = [] HeaderStyle = styles["Heading1"] # XXXX def header(txt, style=HeaderStyle, klass=Paragraph, sep=0.3): s = Spacer(0.2*inch, sep*inch) Elements.append(s) para = klass(txt, style) Elements.append(para) ParaStyle = styles["Normal"] def p(txt): return header(txt, style=ParaStyle, sep=0.1) #pre = p # XXX PreStyle = styles["Code"] def pre(txt): s = Spacer(0.1*inch, 0.1*inch) Elements.append(s) p = Preformatted(txt, PreStyle) Elements.append(p) #header(Title, sep=0.1. style=ParaStyle) header(Author, sep=0.1, style=ParaStyle) header(URL, sep=0.1, style=ParaStyle) header(email, sep=0.1, style=ParaStyle) header("ABSTRACT") p(Abstract) header("Backgrounder") p("""\ The term "database" usually refers to a persistent collection of data. Data is persistent if it continues to exist whether or not it is associated with a running process on the computer, or even if the computer is shut down and restarted at some future time. Database management systems provide support for constructing databases, maintaining databases, and extracting information from databases.""") p("""\ Relational databases manipulate and store persistent table structures called relations, such as the following three tables""") pre("""\ -- drinkers who frequent bars (this is a comment) select * from frequents DRINKER | PERWEEK | BAR ============================ adam | 1 | lolas woody | 5 | cheers sam | 5 | cheers norm | 3 | cheers wilt | 2 | joes norm | 1 | joes lola | 6 | lolas norm | 2 | lolas woody | 1 | lolas pierre | 0 | frankies ) """) pre("""\ -- drinkers who like beers select * from likes DRINKER | PERDAY | BEER =============================== adam | 2 | bud wilt | 1 | rollingrock sam | 2 | bud norm | 3 | rollingrock norm | 2 | bud nan | 1 | sierranevada woody | 2 | pabst lola | 5 | mickies """) pre("""\ -- beers served from bars select * from serves BAR | QUANTITY | BEER ================================= cheers | 500 | bud cheers | 255 | samadams joes | 217 | bud joes | 13 | samadams joes | 2222 | mickies lolas | 1515 | mickies lolas | 333 | pabst winkos | 432 | rollingrock frankies | 5 | snafu """) p(""" The relational model for database structures makes the simplifying assumption that all data in a database can be represented in simple table structures such as these. Although this assumption seems extreme it provides a good foundation for defining solid and well defined database management systems and some of the most successful software companies in the world, such as Oracle, Sybase, IBM, and Microsoft, have marketed database management systems based on the relational model quite successfully. """) p(""" SQL stands for Structured Query Language. The SQL language defines industry standard mechanisms for creating, querying, and modified relational tables. Several years ago SQL was one of many Relational Database Management System (RDBMS) query languages in use, and many would argue not the best on. Now, largely due to standardization efforts and the backing of IBM, SQL is THE standard way to talk to database systems. """) p(""" There are many advantages SQL offers over other database query languages and alternative paradigms at this time (please see [O'Neill] or [Korth and Silberschatz] for more extensive discussions and comparisons between the SQL/relational approach and others.) """) p(""" The chief advantage over all contenders at this time is that SQL and the relational model are now widely used as interfaces and back end data stores to many different products with different performance characteristics, user interfaces, and other qualities: Oracle, Sybase, Ingres, SQL Server, Access, Outlook, Excel, IBM DB2, Paradox, MySQL, MSQL, POSTgres, and many others. For this reason a program designed to use an SQL database as its data storage mechanism can easily be ported from one SQL data manager to another, possibly on different platforms. In fact the same program can seamlessly use several backends and/or import/export data between different data base platforms with trivial ease. No other paradigm offers such flexibility at the moment. """) p(""" Another advantage which is not as immediately obvious is that the relational model and the SQL query language are easily understood by semi-technical and non-technical professionals, such as business people and accountants. Human resources managers who would be terrified by an object model diagram or a snippet of code that resembles a conventional programming language will frequently feel quite at ease with a relational model which resembles the sort of tabular data they deal with on paper in reports and forms on a daily basis. With a little training the same HR managers may be able to translate the request "Who are the drinkers who like bud and frequent cheers?" into the SQL query """) pre(""" select drinker from frequents where bar='cheers' and drinker in ( select drinker from likes where beer='bud') """) p(""" (or at least they have some hope of understanding the query once it is written by a technical person or generated by a GUI interface tool). Thus the use of SQL and the relational model enables communication between different communities which must understand and interact with stored information. In contrast many other approaches cannot be understood easily by people without extensive programming experience. """) p(""" Furthermore the declarative nature of SQL lends itself to automatic query optimization, and engines such as Gadfly can automatically translate a user query into an optimized query plan which takes advantage of available indices and other data characteristics. In contrast more navigational techniques require the application program itself to optimize the accesses to the database and explicitly make use of indices. """) # HACK Elements.append(PageBreak()) p(""" While it must be admitted that there are application domains such as computer aided engineering design where the relational model is unnatural, it is also important to recognize that for many application domains (such as scheduling, accounting, inventory, finance, personal information management, electronic mail) the relational model is a very natural fit and the SQL query language make most accesses to the underlying data (even sophisticated ones) straightforward. """) p("""For an example of a moderately sophisticated query using the tables given above, the following query lists the drinkers who frequent lolas bar and like at least two beers not served by lolas """) if 0: go() sys.exit(1) pre(""" select f.drinker from frequents f, likes l where f.drinker=l.drinker and f.bar='lolas' and l.beer not in (select beer from serves where bar='lolas') group by f.drinker having count(distinct beer)>=2 """) p(""" yielding the result """) pre(""" DRINKER ======= norm """) p(""" Experience shows that queries of this sort are actually quite common in many applications, and are often much more difficult to formulate using some navigational database organizations, such as some "object oriented" database paradigms. """) p(""" Certainly, SQL does not provide all you need to interact with databases -- in order to do "real work" with SQL you need to use SQL and at least one other language (such as C, Pascal, C++, Perl, Python, TCL, Visual Basic or others) to do work (such as readable formatting a report from raw data) that SQL was not designed to do. """) header("Why Gadfly 1?") p("""Gadfly 1.0 is an SQL based relational database implementation implemented entirely in the Python programming language, with optional fast data structure accellerators implemented in the C programming language. Gadfly is relatively small, highly portable, very easy to use (especially for programmers with previous experience with SQL databases such as MS Access or Oracle), and reasonably fast (especially when the kjbuckets C accellerators are used). For moderate sized problems Gadfly offers a fairly complete set of features such as transaction semantics, failure recovery, and a TCP/IP based client/server mode (Please see [Gadfly] for detailed discussion).""") header("Why Gadfly 2?") p("""Gadfly 1.0 also has significant limitations. An active Gadfly 1.0 database keeps all data in (virtual) memory, and hence a Gadfly 1.0 database is limited in size to available virtual memory. Important features such as date/time/interval operations, regular expression matching and other standard SQL features are not implemented in Gadfly 1.0. The optimizer and the query evaluator perform optimizations using properties of the equality predicate but do not optimize using properties of inequalities such as BETWEEN or less-than. It is possible to add "extension views" to a Gadfly 1.0 database, but the mechanism is somewhat clumsy and indices over extension views are not well supported. The features of Gadfly 2.0 discussed here attempt to address these deficiencies by providing a uniform extension model that permits addition of alternate table, function, and predicate implementations.""") p("""Other deficiencies, such as missing constructs like "ALTER TABLE" and the lack of outer joins and NULL values are not addressed here, although they may be addressed in Gadfly 2.0 or a later release. This paper also does not intend to explain the complete operations of the internals; it is intended to provide at least enough information to understand the basic mechanisms for extending gadfly.""") p("""Some concepts and definitions provided next help with the description of the gadfly interfaces. [Note: due to the terseness of this format the ensuing is not a highly formal presentation, but attempts to approach precision where precision is important.]""") header("The semilattice of substitutions") p("""Underlying the gadfly implementation are the basic concepts associated with substitutions. A substitution is a mapping of attribute names to values (implemented in gadfly using kjbuckets.kjDict objects). Here an attribute refers to some sort of "descriptive variable", such as NAME and a value is an assignment for that variable, like "Dave Ascher". In Gadfly a table is implemented as a sequence of substitutions, and substitutions are used in many other ways as well. """) p(""" For example consider the substitutions""") pre(""" A = [DRINKER=>'sam'] B = [DRINKER=>'sam', BAR=>'cheers'] C = [DRINKER=>'woody', BEER=>'bud'] D = [DRINKER=>'sam', BEER=>'mickies'] E = [DRINKER=>'sam', BAR=>'cheers', BEER=>'mickies'] F = [DRINKER=>'sam', BEER=>'mickies'] G = [BEER=>'bud', BAR=>'lolas'] H = [] # the empty substitution I = [BAR=>'cheers', CAPACITY=>300]""") p("""A trivial but important observation is that since substitutions are mappings, no attribute can assume more than one value in a substitution. In the operations described below whenever an operator "tries" to assign more than one value to an attribute the operator yields an "overdefined" or "inconsistent" result.""") header("Information Semi-order:") p("""Substitution B is said to be more informative than A because B agrees with all assignments in A (in addition to providing more information as well). Similarly we say that E is more informative than A, B, D, F. and H but E is not more informative than the others since, for example G disagrees with E on the value assigned to the BEER attribute and I provides additional CAPACITY information not provided in E.""") header("Joins and Inconsistency:") p("""A join of two substitutions X and Y is the least informative substitution Z such that Z is more informative (or equally informative) than both X and Y. For example B is the join of B with A, E is the join of B with D and""") pre(""" E join I = [DRINKER=>'sam', BAR=>'cheers', BEER=>'mickies', CAPACITY=>300]""") p("""For any two substitutions either (1) they disagree on the value assigned to some attribute and have no join or (2) they agree on all common attributes (if there are any) and their join is the union of all (name, value) assignments in both substitutions. Written in terms of kjbucket.kjDict operations two kjDicts X and Y have a join Z = (X+Y) if and only if Z.Clean() is not None. Two substitutions that have no join are said to be inconsistent. For example I and G are inconsistent since they disagree on the value assigned to the BAR attribute and therefore have no join. The algebra of substitutions with joins technically defines an abstract algebraic structure called a semilattice.""") header("Name space remapping") p("""Another primitive operation over substitutions is the remap operation S2 = S.remap(R) where S is a substitution and R is a graph of attribute names and S2 is a substitution. This operation is defined to produce the substitution S2 such that""") pre(""" Name=>Value in S2 if and only if Name1=>Value in S and Name<=Name1 in R """) p("""or if there is no such substitution S2 the remap value is said to be overdefined.""") p("""For example the remap operation may be used to eliminate attributes from a substitution. For example""") pre(""" E.remap([DRINKER<=DRINKER, BAR<=BAR]) = [DRINKER=>'sam', BAR=>'cheers'] """) p("""Illustrating that remapping using the [DRINKER<=DRINKER, BAR<=BAR] graph eliminates all attributes except DRINKER and BAR, such as BEER. More generally remap can be used in this way to implement the classical relational projection operation. (See [Korth and Silberschatz] for a detailed discussion of the projection operator and other relational algebra operators such as selection, rename, difference and joins.)""") p("""The remap operation can also be used to implement "selection on attribute equality". For example if we are interested in the employee names of employees who are their own bosses we can use the remapping graph""") pre(""" R1 = [NAME<=NAME, NAME<=BOSS] """) p("""and reject substitutions where remapping using R1 is overdefined. For example""") pre(""" S1 = [NAME=>'joe', BOSS=>'joe'] S1.remap(R1) = [NAME=>'joe'] S2 = [NAME=>'fred', BOSS=>'joe'] S2.remap(R1) is overdefined. """) p("""The last remap is overdefined because the NAME attribute cannot assume both the values 'fred' and 'joe' in a substitution.""") p("""Furthermore, of course, the remap operation can be used to "rename attributes" or "copy attribute values" in substitutions. Note below that the missing attribute CAPACITY in B is effectively ignored in the remapping operation.""") pre(""" B.remap([D<=DRINKER, B<=BAR, B2<=BAR, C<=CAPACITY]) = [D=>'sam', B=>'cheers', B2=>'cheers'] """) p("""More interestingly, a single remap operation can be used to perform a combination of renaming, projection, value copying, and attribute equality selection as one operation. In kjbuckets the remapper graph is implemented using a kjbuckets.kjGraph and the remap operation is an intrinsic method of kjbuckets.kjDict objects.""") header("Generalized Table Joins and the Evaluator Mainloop""") p("""Strictly speaking the Gadfly 2.0 query evaluator only uses the join and remap operations as its "basic assembly language" -- all other computations, including inequality comparisons and arithmetic, are implemented externally to the evaluator as "generalized table joins." """) p("""A table is a sequence of substitutions (which in keeping with SQL semantics may contain redundant entries). The join between two tables T1 and T2 is the sequence of all possible defined joins between pairs of elements from the two tables. Procedurally we might compute the join as""") pre(""" T1JoinT2 = empty for t1 in T1: for t2 in T2: if t1 join t2 is defined: add t1 join t2 to T1joinT2""") p("""In general circumstances this intuitive implementation is a very inefficient way to compute the join, and Gadfly almost always uses other methods, particularly since, as described below, a "generalized table" can have an "infinite" number of entries.""") p("""For an example of a table join consider the EMPLOYEES table containing""") pre(""" [NAME=>'john', JOB=>'executive'] [NAME=>'sue', JOB=>'programmer'] [NAME=>'eric', JOB=>'peon'] [NAME=>'bill', JOB=>'peon'] """) p("""and the ACTIVITIES table containing""") pre(""" [JOB=>'peon', DOES=>'windows'] [JOB=>'peon', DOES=>'floors'] [JOB=>'programmer', DOES=>'coding'] [JOB=>'secretary', DOES=>'phone']""") p("""then the join between EMPLOYEES and ACTIVITIES must containining""") pre(""" [NAME=>'sue', JOB=>'programmer', DOES=>'coding'] [NAME=>'eric', JOB=>'peon', DOES=>'windows'] [NAME=>'bill', JOB=>'peon', DOES=>'windows'] [NAME=>'eric', JOB=>'peon', DOES=>'floors'] [NAME=>'bill', JOB=>'peon', DOES=>'floors']""") p("""A compiled gadfly subquery ultimately appears to the evaluator as a sequence of generalized tables that must be joined (in combination with certain remapping operations that are beyond the scope of this discussion). The Gadfly mainloop proceeds following the very loose pseudocode:""") pre(""" Subs = [ [] ] # the unary sequence containing "true" While some table hasn't been chosen yet: Choose an unchosen table with the least cost join estimate. Subs = Subs joined with the chosen table return Subs""") p("""[Note that it is a property of the join operation that the order in which the joins are carried out will not affect the result, so the greedy strategy of evaluating the "cheapest join next" will not effect the result. Also note that the treatment of logical OR and NOT as well as EXIST, IN, UNION, and aggregation and so forth are not discussed here, even though they do fit into this approach.]""") p("""The actual implementation is a bit more complex than this, but the above outline may provide some useful intuition. The "cost estimation" step and the implementation of the join operation itself are left up to the generalized table object implementation. A table implementation has the ability to give an "infinite" cost estimate, which essentially means "don't join me in yet under any circumstances." """) header("Implementing Functions") p("""As mentioned above operations such as arithmetic are implemented using generalized tables. For example the arithmetic Add operation is implemented in Gadfly internally as an "infinite generalized table" containing all possible substitutions""") pre(""" ARG0=>a, ARG1=>b, RESULT=>a+b] """) p("""Where a and b are all possible values which can be summed. Clearly, it is not possible to enumerate this table, but given a sequence of substitutions with defined values for ARG0 and ARG1 such as""") pre(""" [ARG0=>1, ARG1=-4] [ARG0=>2.6, ARG1=50] [ARG0=>99, ARG1=1] """) p("""it is possible to implement a "join operation" against this sequence that performs the same augmentation as a join with the infinite table defined above:""") pre(""" [ARG0=>1, ARG1=-4, RESULT=-3] [ARG0=>2.6, ARG1=50, RESULT=52.6] [ARG0=>99, ARG1=1, RESULT=100] """) p("""Furthermore by giving an "infinite estimate" for all attempts to evaluate the join where ARG0 and ARG1 are not available the generalized table implementation for the addition operation can refuse to compute an "infinite join." """) p("""More generally all functions f(a,b,c,d) are represented in gadfly as generalized tables containing all possible relevant entries""") pre(""" [ARG0=>a, ARG1=>b, ARG2=>c, ARG3=>d, RESULT=>f(a,b,c,d)]""") p("""and the join estimation function refuses all attempts to perform a join unless all the arguments are provided by the input substitution sequence.""") header("Implementing Predicates") p("""Similarly to functions, predicates such as less-than and BETWEEN and LIKE are implemented using the generalized table mechanism. For example the "x BETWEEN y AND z" predicate is implemented as a generalized table "containing" all possible""") pre(""" [ARG0=>a, ARG1=>b, ARG2=>c]""") p("""where b<a<c. Furthermore joins with this table are not permitted unless all three arguments are available in the sequence of input substitutions.""") header("Some Gadfly extension interfaces") p("""A gadfly database engine may be extended with user defined functions, predicates, and alternative table and index implementations. This section snapshots several Gadfly 2.0 interfaces, currently under development and likely to change before the package is released.""") p("""The basic interface for adding functions and predicates (logical tests) to a gadfly engine are relatively straightforward. For example to add the ability to match a regular expression within a gadfly query use the following implementation.""") pre(""" from re import match def addrematch(gadflyinstance): gadflyinstance.add_predicate("rematch", match) """) p(""" Then upon connecting to the database execute """) pre(""" g = gadfly(...) ... addrematch(g) """) p(""" In this case the "semijoin operation" associated with the new predicate "rematch" is automatically generated, and after the add_predicate binding operation the gadfly instance supports queries such as""") pre(""" select drinker, beer from likes where rematch('b*', beer) and drinker not in (select drinker from frequents where rematch('c*', bar)) """) p(""" By embedding the "rematch" operation within the query the SQL engine can do "more work" for the programmer and reduce or eliminate the need to process the query result externally to the engine. """) p(""" In a similar manner functions may be added to a gadfly instance,""") pre(""" def modulo(x,y): return x % y def addmodulo(gadflyinstance): gadflyinstance.add_function("modulo", modulo) ... g = gadfly(...) ... addmodulo(g) """) p(""" Then after the binding the modulo function can be used whereever an SQL expression can occur. """) p(""" Adding alternative table implementations to a Gadfly instance is more interesting and more difficult. An "extension table" implementation must conform to the following interface:""") pre(""" # get the kjbuckets.kjSet set of attribute names for this table names = table.attributes() # estimate the difficulty of evaluating a join given known attributes # return None for "impossible" or n>=0 otherwise with larger values # indicating greater difficulty or expense estimate = table.estimate(known_attributes) # return the join of the rows of the table with # the list of kjbuckets.kjDict mappings as a list of mappings. resultmappings = table.join(listofmappings) """) p(""" In this case add the table to a gadfly instance using""") pre(""" gadflyinstance.add_table("table_name", table) """) p(""" For example to add a table which automatically queries filenames in the filesystems of the host computer a gadfly instance could be augmented with a GLOB table implemented using the standard library function glob.glob as follows:""") pre(""" import kjbuckets class GlobTable: def __init__(self): pass def attributes(self): return kjbuckets.kjSet("PATTERN", "NAME") def estimate(self, known_attributes): if known_attributes.member("PATTERN"): return 66 # join not too difficult else: return None # join is impossible (must have PATTERN) def join(self, listofmappings): from glob import glob result = [] for m in listofmappings: pattern = m["PATTERN"] for name in glob(pattern): newmapping = kjbuckets.kjDict(m) newmapping["NAME"] = name if newmapping.Clean(): result.append(newmapping) return result ... gadfly_instance.add_table("GLOB", GlobTable()) """) p(""" Then one could formulate queries such as "list the files in directories associated with packages installed by guido" """) pre(""" select g.name as filename from packages p, glob g where p.installer = 'guido' and g.pattern=p.root_directory """) p(""" Note that conceptually the GLOB table is an infinite table including all filenames on the current computer in the "NAME" column, paired with a potentially infinite number of patterns. """) p(""" More interesting examples would allow queries to remotely access data served by an HTTP server, or from any other resource. """) p(""" Furthermore an extension table can be augmented with update methods """) pre(""" table.insert_rows(listofmappings) table.update_rows(oldlist, newlist) table.delete_rows(oldlist) """) p(""" Note: at present the implementation does not enforce recovery or transaction semantics for updates to extension tables, although this may change in the final release. """) p(""" The table implementation is free to provide its own implementations of indices which take advantage of data provided by the join argument. """) header("Efficiency Notes") p("""The following thought experiment attempts to explain why the Gadfly implementation is surprisingly fast considering that it is almost entirely implemented in Python (an interpreted programming language which is not especially fast when compared to alternatives). Although Gadfly is quite complex, at an abstract level the process of query evaluation boils down to a series of embedded loops. Consider the following nested loops:""") pre(""" iterate 1000: f(...) # fixed cost of outer loop iterate 10: g(...) # fixed cost of middle loop iterate 10: # the real work (string parse, matrix mul, query eval...) h(...)""") p("""In my experience many computations follow this pattern where f, g, are complex, dynamic, special purpose and h is simple, general purpose, static. Some example computations that follow this pattern include: file massaging (perl), matrix manipulation (python, tcl), database/cgi page generation, and vector graphics/imaging.""") p("""Suppose implementing f, g, h in python is easy but result in execution times10 times slower than a much harder implementation in C, choosing arbitrary and debatable numbers assume each function call consumes 1 tick in C, 5 ticks in java, 10 ticks in python for a straightforward implementation of each function f, g, and h. Under these conditions we get the following cost analysis, eliminating some uninteresting combinations, of implementing the function f, g, and h in combinations of Python, C and java:""") pre(""" COST | FLANG | GLANG | HLANG ================================== 111000 | C | C | C 115000 | java | C | C 120000 | python | C | C 155000 | java | java | C 210000 | python | python | C 555000 | java | java | java 560000 | python | java | java 610000 | python | python | java 1110000 | python | python | python """) p("""Note that moving only the innermost loop to C (python/python/C) speeds up the calculation by half an order of magnitude compared to the python-only implementation and brings the speed to within a factor of 2 of an implementation done entirely in C.""") p("""Although this artificial and contrived thought experiment is far from conclusive, we may be tempted to draw the conclusion that generally programmers should focus first on obtaining a working implementation (because as John Ousterhout is reported to have said "the biggest performance improvement is the transition from non-working to working") using the methodology that is most likely to obtain a working solution the quickest (Python). Only then if the performance is inadequate should the programmer focus on optimizing the inner most loops, perhaps moving them to a very efficient implementation (C). Optimizing the outer loops will buy little improvement, and should be done later, if ever.""") p("""This was precisely the strategy behind the gadfly implementations, where most of the inner loops are implemented in the kjbuckets C extension module and the higher level logic is all in Python. This also explains why gadfly appears to be "slower" for simple queries over small data sets, but seems to be relatively "faster" for more complex queries over larger data sets, since larger queries and data sets take better advantage of the optimized inner loops.""") header("A Gadfly variant for OLAP?") p("""In private correspondence Andy Robinson points out that the basic logical design underlying Gadfly could be adapted to provide Online Analytical Processing (OLAP) and other forms of data warehousing and data mining. Since SQL is not particularly well suited for the kinds of requests common in these domains the higher level interfaces would require modification, but the underlying logic of substitutions and name mappings seems to be appropriate.""") header("Conclusion") p("""The revamped query engine design in Gadfly 2 supports a flexible and general extension methodology that permits programmers to extend the gadfly engine to include additional computations and access to remote data sources. Among other possibilities this will permit the gadfly engine to make use of disk based indexed tables and to dynamically retrieve information from remote data sources (such as an Excel spreadsheet or an Oracle database). These features will make gadfly a very useful tool for data manipulation and integration.""") header("References") p("""[Van Rossum] Van Rossum, Python Reference Manual, Tutorial, and Library Manuals, please look to http://www.python.org for the latest versions, downloads and links to printed versions.""") p("""[O'Neill] O'Neill, P., Data Base Principles, Programming, Performance, Morgan Kaufmann Publishers, San Francisco, 1994.""") p("""[Korth and Silberschatz] Korth, H. and Silberschatz, A. and Sudarshan, S. Data Base System Concepts, McGraw-Hill Series in Computer Science, Boston, 1997""") p("""[Gadfly]Gadfly: SQL Relational Database in Python, http://www.chordate.com/kwParsing/gadfly.html""") go() reportlab-3.5.34/demos/stdfonts/0000775000175000017500000000000013607302651017352 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/stdfonts/00readme.txt0000664000175000017500000000034513544671343021521 0ustar rptlabrptlab00000000000000This lists out the standard 14 fonts in a very plain and simple fashion. Notably, the output is huge - it makes two separate text objects for each glyph. Smarter programming would make tighter PDF, but more lines of Python! reportlab-3.5.34/demos/stdfonts/stdfonts.py0000664000175000017500000000451513544671343021604 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __doc__=""" This generates tables showing the 14 standard fonts in both WinAnsi and MacRoman encodings, and their character codes. Supply an argument of 'hex' or 'oct' to get code charts in those encodings; octal is what you need for \\n escape sequences in Python literals. usage: standardfonts.py [dec|hex|oct] """ __version__='3.3.0' import sys from reportlab.pdfbase import pdfmetrics from reportlab.pdfgen import canvas import string label_formats = {'dec':('%d=', 'Decimal'), 'oct':('%o=','Octal'), 'hex':('0x%x=', 'Hexadecimal')} def run(mode): label_formatter, caption = label_formats[mode] for enc in ['MacRoman', 'WinAnsi']: canv = canvas.Canvas( 'StandardFonts_%s.pdf' % enc, ) canv.setPageCompression(0) for faceName in pdfmetrics.standardFonts: if faceName in ['Symbol', 'ZapfDingbats']: encLabel = faceName+'Encoding' else: encLabel = enc + 'Encoding' fontName = faceName + '-' + encLabel pdfmetrics.registerFont(pdfmetrics.Font(fontName, faceName, encLabel) ) canv.setFont('Times-Bold', 18) canv.drawString(80, 744, fontName) canv.setFont('Times-BoldItalic', 12) canv.drawRightString(515, 744, 'Labels in ' + caption) #for dingbats, we need to use another font for the numbers. #do two parallel text objects. for byt in range(32, 256): col, row = divmod(byt - 32, 32) x = 72 + (66*col) y = 720 - (18*row) canv.setFont('Helvetica', 14) canv.drawString(x, y, label_formatter % byt) canv.setFont(fontName, 14) canv.drawString(x+44, y, chr(byt).decode(encLabel,'ignore').encode('utf8')) canv.showPage() canv.save() if __name__ == '__main__': if len(sys.argv)==2: mode = string.lower(sys.argv[1]) if mode not in ['dec','oct','hex']: print(__doc__) elif len(sys.argv) == 1: mode = 'dec' run(mode) else: print(__doc__) reportlab-3.5.34/demos/odyssey/0000775000175000017500000000000013607302651017205 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/odyssey/00readme.txt0000664000175000017500000000407413544671343021357 0ustar rptlabrptlab00000000000000This contains a number of benchmarks and demos based on Homer's Odyssey (which is widely available in plain, line-oriented text format). The version used here was obtained from Project Gutenberg. The URL is as follows: http://www.gutenberg.org/etext/1727 Our distribution ships with just the first chapter in odyssey.txt. For a more meaningful speed test, download the full copy from http://www.reportlab.com/ftp/odyssey.full.zip and unzip to extract odyssey.full.txt (608kb). Benchmark speed depends quite critically on the presence of our accelerator module, _rl_accel, which is a C (or Java) extension. Serious users ought to compile or download this! The times quoted are from one machine (Andy Robinson's home PC, approx 1.2Ghz 128Mb Ram, Win2k in Sep 2003) in order to give a rough idea of what features cost what performance. The tests are as follows: (1) odyssey.py (produces odyssey.pdf) This demo takes a large volume of text and prints it in the simplest way possible. It is a demo of the basic technique of looping down a page manually and breaking at the bottom. On my 1.2 Ghz machine this takes 1.91 seconds (124 pages per second) (2) fodyssey.py (produces fodyssey.pdf) This is a 'flowing document' we parse the file and throw away line breaks to make proper paragraphs. The Platypus framework renders these. This necessitates measuring the width of every word in every paragraph for wrapping purposes. This takes 3.27 seconds on the same machine. Paragraph wrapping basically doubles the work. The text is more compact with about 50% more words per page. Very roughly, we can wrap 40 pages of ten-point text per second and save to PDF. (3) dodyssey.py (produced dodyssey.pdf) This is a slightly fancier version which uses different page templates (one column for first page in a chapter, two column for body poages). The additional layout logic adds about 15%, going up to 3.8 seconds. This is probably a realistic benchmark for a simple long text document with a single pass. Documents doing cross-references and a table of contents might need twice as long. reportlab-3.5.34/demos/odyssey/odyssey.txt0000664000175000017500000002530613544671343021462 0ustar rptlabrptlab00000000000000The Odyssey By Homer rendered into English prose by Samuel Butler Book I THE GODS IN COUNCIL--MIVERVA'S VISIT TO ITHACA--THE CHALLENGE FROM TELEMACHUS TO THE SUITORS. ITellme, O Muse, of that ingenious hero who travelled far and a b c &| & | A' A ' wide after he had sacked the famous town of Troy. Many cities did he visit, and many were the nations with whose manners and customs he was acquainted; moreover he suffered much by sea while trying to save his own life and bring his men safely home; but do what he might he could not save his men, for they perished through their own sheer folly in eating the cattle of the Sun-god Hyperion; so the god prevented them from ever reaching home. Tell me, too, about all these things, oh daughter of Jove, from whatsoever source you may know them. So now all who escaped death in battle or by shipwreck had got safely home except Ulysses, and he, though he was longing to return to his wife and country, was detained by the goddess Calypso, who had got him into a large cave and wanted to marry him. But as years went by, there came a time when the gods settled that he should go back to Ithaca; even then, however, when he was among his own people, his troubles were not yet over; nevertheless all the gods had now begun to pity him except Neptune, who still persecuted him without ceasing and would not let him get home. Now Neptune had gone off to the Ethiopians, who are at the world's end, and lie in two halves, the one looking West and the other East.1 He had gone there to accept a hecatomb of sheep and oxen, and was enjoying himself at his festival; but the other gods met in the house of Olympian Jove, and the sire of gods and men spoke first. At that moment he was thinking of Aegisthus, who had been killed by Agamemnon's son Orestes; so he said to the other gods: "See now, how men lay blame upon us gods for what is after all nothing but their own folly. Look at Aegisthus; he must needs make love to Agamemnon's wife unrighteously and then kill Agamemnon, though he knew it would be the death of him; for I sent Mercury to warn him not to do either of these things, inasmuch as Orestes would be sure to take his revenge when he grew up and wanted to return home. Mercury told him this in all good will but he would not listen, and now he has paid for everything in full." Then Minerva said, "Father, son of Saturn, King of kings, it served Aegisthus right, and so it would any one else who does as he did; but Aegisthus is neither here nor there; it is for Ulysses that my heart bleeds, when I think of his sufferings in that lonely sea-girt island, far away, poor man, from all his friends. It is an island covered with forest, in the very middle of the sea, and a goddess lives there, daughter of the magician Atlas, who looks after the bottom of the ocean, and carries the great columns that keep heaven and earth asunder. This daughter of Atlas has got hold of poor unhappy Ulysses, and keeps trying by every kind of blandishment to make him forget his home, so that he is tired of life, and thinks of nothing but how he may once more see the smoke of his own chimneys. You, sir, take no heed of this, and yet when Ulysses was before Troy did he not propitiate you with many a burnt sacrifice? Why then should you keep on being so angry with him?" And Jove said, "My child, what are you talking about? How can I forget Ulysses than whom there is no more capable man on earth, nor more liberal in his offerings to the immortal gods that live in heaven? Bear in mind, however, that Neptune is still furious with Ulysses for having blinded an eye of Polyphemus king of the Cyclopes. Polyphemus is son to Neptune by the nymph Thoosa, daughter to the sea-king Phorcys; therefore though he will not kill Ulysses outright, he torments him by preventing him from getting home. Still, let us lay our heads together and see how we can help him to return; Neptune will then be pacified, for if we are all of a mind he can hardly stand out against us." And Minerva said, "Father, son of Saturn, King of kings, if, then, the gods now mean that Ulysses should get home, we should first send Mercury to the Ogygian island to tell Calypso that we have made up our minds and that he is to return. In the meantime I will go to Ithaca, to put heart into Ulysses' son Telemachus; I will embolden him to call the Achaeans in assembly, and speak out to the suitors of his mother Penelope, who persist in eating up any number of his sheep and oxen; I will also conduct him to Sparta and to Pylos, to see if he can hear anything about the return of his dear father--for this will make people speak well of him." Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. Ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis ellipsis. "Men of Ithaca, it is all your own fault that things have turned out as they have; you would not listen to me, nor yet to Mentor, when we bade you check the folly of your sons who were doing much wrong in the wantonness of their hearts--wasting the substance and dishonouring the wife of a chieftain who they thought would not return. Now, however, let it be as I say, and do as I tell you. Do not go out against Ulysses, or you may find that you have been drawing down evil on your own heads." This was what he said, and more than half raised a loud shout, and at once left the assembly. But the rest stayed where they were, for the speech of Halitherses displeased them, and they sided with Eupeithes; they therefore hurried off for their armour, and when they had armed themselves, they met together in front of the city, and Eupeithes led them on in their folly. He thought he was going to avenge the murder of his son, whereas in truth he was never to return, but was himself to perish in his attempt. Then Minerva said to Jove, "Father, son of Saturn, king of kings, answer me this question--What do you propose to do? Will you set them fighting still further, or will you make peace between them?" And Jove answered, "My child, why should you ask me? Was it not by your own arrangement that Ulysses came home and took his revenge upon the suitors? Do whatever you like, but I will tell you what I think will be most reasonable arrangement. Now that Ulysses is revenged, let them swear to a solemn covenant, in virtue of which he shall continue to rule, while we cause the others to forgive and forget the massacre of their sons and brothers. Let them then all become friends as heretofore, and let peace and plenty reign." This was what Minerva was already eager to bring about, so down she darted from off the topmost summits of Olympus. Now when Laertes and the others had done dinner, Ulysses began by saying, "Some of you go out and see if they are not getting close up to us." So one of Dolius's sons went as he was bid. Standing on the threshold he could see them all quite near, and said to Ulysses, "Here they are, let us put on our armour at once." They put on their armour as fast as they could--that is to say Ulysses, his three men, and the six sons of Dolius. Laertes also and Dolius did the same--warriors by necessity in spite of their grey hair. When they had all put on their armour, they opened the gate and sallied forth, Ulysses leading the way. Then Jove's daughter Minerva came up to them, having assumed the form and voice of Mentor. Ulysses was glad when he saw her, and said to his son Telemachus, "Telemachus, now that you are about to fight in an engagement, which will show every man's mettle, be sure not to disgrace your ancestors, who were eminent for their strength and courage all the world over." "You say truly, my dear father," answered Telemachus, "and you shall see, if you will, that I am in no mind to disgrace your family." Laertes was delighted when he heard this. "Good heavens," he exclaimed, "what a day I am enjoying: I do indeed rejoice at it. My son and grandson are vying with one another in the matter of valour." On this Minerva came close up to him and said, "Son of Arceisius---best friend I have in the world--pray to the blue-eyed damsel, and to Jove her father; then poise your spear and hurl it." As she spoke she infused fresh vigour into him, and when he had prayed to her he poised his spear and hurled it. He hit Eupeithes' helmet, and the spear went right through it, for the helmet stayed it not, and his armour rang rattling round him as he fell heavily to the ground. Meantime Ulysses and his son fell upon the front line of the foe and smote them with their swords and spears; indeed, they would have killed every one of them, and prevented them from ever getting home again, only Minerva raised her voice aloud, and made every one pause. "Men of Ithaca," she cried, "cease this dreadful war, and settle the matter at once without further bloodshed." On this pale fear seized every one; they were so frightened that their arms dropped from their hands and fell upon the ground at the sound of the goddess' voice, and they fled back to the city for their lives. But Ulysses gave a great cry, and gathering himself together swooped down like a soaring eagle. Then the son of Saturn sent a thunderbolt of fire that fell just in front of Minerva, so she said to Ulysses, "Ulysses, noble son of Laertes, stop this warful strife, or Jove will be angry with you." Thus spoke Minerva, and Ulysses obeyed her gladly. Then Minerva assumed the form and voice of Mentor, and presently made a covenant of peace between the two contending parties. ---------------------------------------------------------------------- Copyright statement: This text is in the public domain and has been modified by ReportLab. The source of the text specifies that all references to them must be removed if the text is distributed in modified form, so we cannot mention them here. They are credited in the 00readme.txt. This modified form of the text remains in the public domain. No copyright is asserted. To really test that reportlab can produce pages quickly download the complete version of the test from ftp://ftp.reportlab.com/odyssey.full.zip and copy it to this directory as odyssey.full.txt. reportlab-3.5.34/demos/odyssey/dodyssey.py0000664000175000017500000001674113544671343021442 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __version__='3.3.0' __doc__='' #REPORTLAB_TEST_SCRIPT import sys, copy, os from reportlab.platypus import * _NEW_PARA=os.environ.get('NEW_PARA','0')[0] in ('y','Y','1') _REDCAP=int(os.environ.get('REDCAP','0')) _CALLBACK=os.environ.get('CALLBACK','0')[0] in ('y','Y','1') if _NEW_PARA: def Paragraph(s,style): from rlextra.radxml.para import Paragraph as PPPP return PPPP(s,style) from reportlab.lib.units import inch from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY import reportlab.rl_config reportlab.rl_config.invariant = 1 styles = getSampleStyleSheet() Title = "The Odyssey" Author = "Homer" def myTitlePage(canvas, doc): canvas.saveState() canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() canvas.setFont('Times-Roman',9) canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page) canvas.restoreState() def go(): def myCanvasMaker(fn,**kw): from reportlab.pdfgen.canvas import Canvas canv = Canvas(fn,**kw) # attach our callback to the canvas canv.myOnDrawCB = myOnDrawCB return canv doc = BaseDocTemplate('dodyssey.pdf',showBoundary=0) #normal frame as for SimpleFlowDocument frameT = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='normal') #Two Columns frame1 = Frame(doc.leftMargin, doc.bottomMargin, doc.width/2-6, doc.height, id='col1') frame2 = Frame(doc.leftMargin+doc.width/2+6, doc.bottomMargin, doc.width/2-6, doc.height, id='col2') doc.addPageTemplates([PageTemplate(id='First',frames=frameT, onPage=myTitlePage), PageTemplate(id='OneCol',frames=frameT, onPage=myLaterPages), PageTemplate(id='TwoCol',frames=[frame1,frame2], onPage=myLaterPages), ]) doc.build(Elements,canvasmaker=myCanvasMaker) Elements = [] ChapterStyle = copy.deepcopy(styles["Heading1"]) ChapterStyle.alignment = TA_CENTER ChapterStyle.fontsize = 14 InitialStyle = copy.deepcopy(ChapterStyle) InitialStyle.fontsize = 16 InitialStyle.leading = 20 PreStyle = styles["Code"] def newPage(): Elements.append(PageBreak()) chNum = 0 def myOnDrawCB(canv,kind,label): print('myOnDrawCB(%s)'%kind, 'Page number=', canv.getPageNumber(), 'label value=', label) def chapter(txt, style=ChapterStyle): global chNum Elements.append(NextPageTemplate('OneCol')) newPage() chNum += 1 if _NEW_PARA or not _CALLBACK: Elements.append(Paragraph(txt, style)) else: Elements.append(Paragraph(('foo '%chNum)+txt, style)) Elements.append(Spacer(0.2*inch, 0.3*inch)) if useTwoCol: Elements.append(NextPageTemplate('TwoCol')) def fTitle(txt,style=InitialStyle): Elements.append(Paragraph(txt, style)) ParaStyle = copy.deepcopy(styles["Normal"]) ParaStyle.spaceBefore = 0.1*inch if 'right' in sys.argv: ParaStyle.alignment = TA_RIGHT elif 'left' in sys.argv: ParaStyle.alignment = TA_LEFT elif 'justify' in sys.argv: ParaStyle.alignment = TA_JUSTIFY elif 'center' in sys.argv or 'centre' in sys.argv: ParaStyle.alignment = TA_CENTER else: ParaStyle.alignment = TA_JUSTIFY useTwoCol = 'notwocol' not in sys.argv def spacer(inches): Elements.append(Spacer(0.1*inch, inches*inch)) def p(txt, style=ParaStyle): if _REDCAP: fs, fe = '', '' n = len(txt) for i in range(n): if 'a'<=txt[i]<='z' or 'A'<=txt[i]<='Z': txt = (txt[:i]+(fs+txt[i]+fe))+txt[i+1:] break if _REDCAP>=2 and n>20: j = i+len(fs)+len(fe)+1+int((n-1)/2) while not ('a'<=txt[j]<='z' or 'A'<=txt[j]<='Z'): j += 1 txt = (txt[:j]+(''+txt[j]+''))+txt[j+1:] if _REDCAP==3 and n>20: n = len(txt) fs = '' for i in range(n-1,-1,-1): if 'a'<=txt[i]<='z' or 'A'<=txt[i]<='Z': txt = txt[:i]+((fs+txt[i]+fe)+txt[i+1:]) break Elements.append(Paragraph(txt, style)) firstPre = 1 def pre(txt, style=PreStyle): global firstPre if firstPre: Elements.append(NextPageTemplate('OneCol')) newPage() firstPre = 0 spacer(0.1) p = Preformatted(txt, style) Elements.append(p) def parseOdyssey(fn): from time import time E = [] t0=time() text = open(fn,'r').read() i0 = text.index('Book I') endMarker = 'covenant of peace between the two contending parties.' i1 = text.index(endMarker)+len(endMarker) PREAMBLE=list(map(str.strip,text[0:i0].split('\n'))) L=list(map(str.strip,text[i0:i1].split('\n'))) POSTAMBLE=list(map(str.strip,text[i1:].split('\n'))) def ambleText(L): while L and not L[0]: L.pop(0) while L: T=[] while L and L[0]: T.append(L.pop(0)) yield T while L and not L[0]: L.pop(0) def mainText(L): while L: B = L.pop(0) while not L[0]: L.pop(0) T=[] while L and L[0]: T.append(L.pop(0)) while not L[0]: L.pop(0) P = [] while L and not (L[0].startswith('Book ') and len(L[0].split())==2): E=[] while L and L[0]: E.append(L.pop(0)) P.append(E) if L: while not L[0]: L.pop(0) yield B,T,P t1 = time() print("open(%s,'r').read() took %.4f seconds" %(fn,t1-t0)) E.append([spacer,2]) E.append([fTitle,'%s' % Title, InitialStyle]) E.append([fTitle,'by %s' % Author, InitialStyle]) for T in ambleText(PREAMBLE): E.append([p,'\n'.join(T)]) for (B,T,P) in mainText(L): E.append([chapter,B]) E.append([p,'%s' % '\n'.join(T),ParaStyle]) for x in P: E.append([p,' '.join(x)]) firstPre = 1 for T in ambleText(POSTAMBLE): E.append([p,'\n'.join(T)]) t3 = time() print("Parsing into memory took %.4f seconds" %(t3-t1)) del L t4 = time() print("Deleting list of lines took %.4f seconds" %(t4-t3)) for i in range(len(E)): E[i][0](*E[i][1:]) t5 = time() print("Moving into platypus took %.4f seconds" %(t5-t4)) del E t6 = time() print("Deleting list of actions took %.4f seconds" %(t6-t5)) go() t7 = time() print("saving to PDF took %.4f seconds" %(t7-t6)) print("Total run took %.4f seconds"%(t7-t0)) import hashlib print('file digest: %s' % hashlib.md5(open('dodyssey.pdf','rb').read()).hexdigest()) def run(): for fn in ('odyssey.full.txt','odyssey.txt'): if os.path.isfile(fn): parseOdyssey(fn) break def doProf(profname,func,*args,**kwd): import hotshot, hotshot.stats prof = hotshot.Profile(profname) prof.runcall(func) prof.close() stats = hotshot.stats.load(profname) stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(20) if __name__=='__main__': if '--prof' in sys.argv: doProf('dodyssey.prof',run) else: run() reportlab-3.5.34/demos/odyssey/fodyssey.py0000664000175000017500000001074413544671343021441 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __version__='3.3.0' __doc__='' #REPORTLAB_TEST_SCRIPT import sys, copy, os from reportlab.platypus import * from reportlab.lib.units import inch from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY import reportlab.rl_config reportlab.rl_config.invariant = 1 styles = getSampleStyleSheet() Title = "The Odyssey" Author = "Homer" def myFirstPage(canvas, doc): canvas.saveState() canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() canvas.setFont('Times-Roman',9) canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page) canvas.restoreState() def go(): doc = SimpleDocTemplate('fodyssey.pdf',showBoundary='showboundary' in sys.argv) doc.allowSplitting = not 'nosplitting' in sys.argv doc.build(Elements,myFirstPage,myLaterPages) Elements = [] ChapterStyle = copy.copy(styles["Heading1"]) ChapterStyle.alignment = TA_CENTER ChapterStyle.fontsize = 16 InitialStyle = copy.deepcopy(ChapterStyle) InitialStyle.fontsize = 16 InitialStyle.leading = 20 PreStyle = styles["Code"] def newPage(): Elements.append(PageBreak()) def chapter(txt, style=ChapterStyle): newPage() Elements.append(Paragraph(txt, style)) Elements.append(Spacer(0.2*inch, 0.3*inch)) def fTitle(txt,style=InitialStyle): Elements.append(Paragraph(txt, style)) ParaStyle = copy.deepcopy(styles["Normal"]) ParaStyle.spaceBefore = 0.1*inch if 'right' in sys.argv: ParaStyle.alignment = TA_RIGHT elif 'left' in sys.argv: ParaStyle.alignment = TA_LEFT elif 'justify' in sys.argv: ParaStyle.alignment = TA_JUSTIFY elif 'center' in sys.argv or 'centre' in sys.argv: ParaStyle.alignment = TA_CENTER else: ParaStyle.alignment = TA_JUSTIFY def spacer(inches): Elements.append(Spacer(0.1*inch, inches*inch)) def p(txt, style=ParaStyle): Elements.append(Paragraph(txt, style)) def pre(txt, style=PreStyle): spacer(0.1) p = Preformatted(txt, style) Elements.append(p) def parseOdyssey(fn): from time import time E = [] t0=time() text = open(fn,'r').read() i0 = text.index('Book I') endMarker = 'covenant of peace between the two contending parties.' i1 = text.index(endMarker)+len(endMarker) PREAMBLE=list(map(str.strip,text[0:i0].split('\n'))) L=list(map(str.strip,text[i0:i1].split('\n'))) POSTAMBLE=list(map(str.strip,text[i1:].split('\n'))) def ambleText(L): while L and not L[0]: L.pop(0) while L: T=[] while L and L[0]: T.append(L.pop(0)) yield T while L and not L[0]: L.pop(0) def mainText(L): while L: B = L.pop(0) while not L[0]: L.pop(0) T=[] while L and L[0]: T.append(L.pop(0)) while not L[0]: L.pop(0) P = [] while L and not (L[0].startswith('Book ') and len(L[0].split())==2): E=[] while L and L[0]: E.append(L.pop(0)) P.append(E) if L: while not L[0]: L.pop(0) yield B,T,P t1 = time() print("open(%s,'r').read() took %.4f seconds" %(fn,t1-t0)) E.append([spacer,2]) E.append([fTitle,'%s' % Title, InitialStyle]) E.append([fTitle,'by %s' % Author, InitialStyle]) for T in ambleText(PREAMBLE): E.append([p,'\n'.join(T)]) for (B,T,P) in mainText(L): E.append([chapter,B]) E.append([p,'%s' % '\n'.join(T),ParaStyle]) for x in P: E.append([p,' '.join(x)]) firstPre = 1 for T in ambleText(POSTAMBLE): E.append([p,'\n'.join(T)]) t3 = time() print("Parsing into memory took %.4f seconds" %(t3-t1)) del L t4 = time() print("Deleting list of lines took %.4f seconds" %(t4-t3)) for i in range(len(E)): E[i][0](*E[i][1:]) t5 = time() print("Moving into platypus took %.4f seconds" %(t5-t4)) del E t6 = time() print("Deleting list of actions took %.4f seconds" %(t6-t5)) go() t7 = time() print("saving to PDF took %.4f seconds" %(t7-t6)) print("Total run took %.4f seconds"%(t7-t0)) for fn in ('odyssey.full.txt','odyssey.txt'): if os.path.isfile(fn): break if __name__=='__main__': parseOdyssey(fn) reportlab-3.5.34/demos/odyssey/odyssey.py0000664000175000017500000001035313544671343021267 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __version__='3.3.0' ___doc__='' #odyssey.py # #Demo/benchmark of PDFgen rendering Homer's Odyssey. #results on my humble P266 with 64MB: # Without page compression: # 239 pages in 3.76 seconds = 77 pages per second # With textOut rather than textLine, i.e. computing width # of every word as we would for wrapping: # 239 pages in 10.83 seconds = 22 pages per second # With page compression and textLine(): # 239 pages in 39.39 seconds = 6 pages per second from reportlab.pdfgen import canvas import time, os, sys #find out what platform we are on and whether accelerator is #present, in order to print this as part of benchmark info. try: import _rl_accel ACCEL = 1 except ImportError: ACCEL = 0 from reportlab.lib.units import inch, cm from reportlab.lib.pagesizes import A4 #precalculate some basics top_margin = A4[1] - inch bottom_margin = inch left_margin = inch right_margin = A4[0] - inch frame_width = right_margin - left_margin def drawPageFrame(canv): canv.line(left_margin, top_margin, right_margin, top_margin) canv.setFont('Times-Italic',12) canv.drawString(left_margin, top_margin + 2, "Homer's Odyssey") canv.line(left_margin, top_margin, right_margin, top_margin) canv.line(left_margin, bottom_margin, right_margin, bottom_margin) canv.drawCentredString(0.5*A4[0], 0.5 * inch, "Page %d" % canv.getPageNumber()) def run(verbose=1): if sys.platform[0:4] == 'java': impl = 'Jython' else: impl = 'Python' verStr = '%d.%d' % (sys.version_info[0:2]) if ACCEL: accelStr = 'with _rl_accel' else: accelStr = 'without _rl_accel' print('Benchmark of %s %s %s' % (impl, verStr, accelStr)) started = time.time() canv = canvas.Canvas('odyssey.pdf', invariant=1) canv.setPageCompression(1) drawPageFrame(canv) #do some title page stuff canv.setFont("Times-Bold", 36) canv.drawCentredString(0.5 * A4[0], 7 * inch, "Homer's Odyssey") canv.setFont("Times-Bold", 18) canv.drawCentredString(0.5 * A4[0], 5 * inch, "Translated by Samuel Burton") canv.setFont("Times-Bold", 12) tx = canv.beginText(left_margin, 3 * inch) tx.textLine("This is a demo-cum-benchmark for PDFgen. It renders the complete text of Homer's Odyssey") tx.textLine("from a text file. On my humble P266, it does 77 pages per secondwhile creating a 238 page") tx.textLine("document. If it is asked to computer text metrics, measuring the width of each word as ") tx.textLine("one would for paragraph wrapping, it still manages 22 pages per second.") tx.textLine("") tx.textLine("Andy Robinson, Robinson Analytics Ltd.") canv.drawText(tx) canv.showPage() #on with the text... drawPageFrame(canv) canv.setFont('Times-Roman', 12) tx = canv.beginText(left_margin, top_margin - 0.5*inch) for fn in ('odyssey.full.txt','odyssey.txt'): if os.path.isfile(fn): break data = open(fn,'r').readlines() for line in data: #this just does it the fast way... tx.textLine(line.rstrip()) #page breaking y = tx.getY() #get y coordinate if y < bottom_margin + 0.5*inch: canv.drawText(tx) canv.showPage() drawPageFrame(canv) canv.setFont('Times-Roman', 12) tx = canv.beginText(left_margin, top_margin - 0.5*inch) #page pg = canv.getPageNumber() if verbose and pg % 10 == 0: print('formatted page %d' % canv.getPageNumber()) if tx: canv.drawText(tx) canv.showPage() drawPageFrame(canv) if verbose: print('about to write to disk...') canv.save() finished = time.time() elapsed = finished - started pages = canv.getPageNumber()-1 speed = pages / elapsed fileSize = os.stat('odyssey.pdf')[6] / 1024 print('%d pages in %0.2f seconds = %0.2f pages per second, file size %d kb' % ( pages, elapsed, speed, fileSize)) import hashlib print('file digest: %s' % hashlib.md5(open('odyssey.pdf','rb').read()).hexdigest()) if __name__=='__main__': quiet = ('-q' in sys.argv) run(verbose = not quiet) reportlab-3.5.34/demos/colors/0000775000175000017500000000000013607302651017007 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/colors/colortest.py0000664000175000017500000000525013544671343021410 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __version__='3.3.0' import reportlab.pdfgen.canvas from reportlab.lib import colors from reportlab.lib.units import inch def run(): c = reportlab.pdfgen.canvas.Canvas('colortest.pdf') #do a test of CMYK interspersed with RGB #first do RGB values framePage(c, 'Color Demo - RGB Space and CMYK spaces interspersed' ) y = 700 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'cyan') c.setFillColorCMYK(1,0,0,0) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'red') c.setFillColorRGB(1,0,0) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'magenta') c.setFillColorCMYK(0,1,0,0) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'green') c.setFillColorRGB(0,1,0) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'yellow') c.setFillColorCMYK(0,0,1,0) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'blue') c.setFillColorRGB(0,0,1) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.setFillColorRGB(0,0,0) c.drawString(100, y, 'black') c.setFillColorCMYK(0,0,0,1) c.rect(200, y, 300, 30, fill=1) y = y - 40 c.showPage() #do all named colors framePage(c, 'Color Demo - RGB Space - page %d' % c.getPageNumber()) all_colors = list(reportlab.lib.colors.getAllNamedColors().items()) all_colors.sort() # alpha order by name c.setFont('Times-Roman', 12) c.drawString(72,730, 'This shows all the named colors in the HTML standard.') y = 700 for (name, color) in all_colors: c.setFillColor(colors.black) c.drawString(100, y, name) c.setFillColor(color) c.rect(200, y-10, 300, 30, fill=1) y = y - 40 if y < 100: c.showPage() framePage(c, 'Color Demo - RGB Space - page %d' % c.getPageNumber()) y = 700 c.save() def framePage(canvas, title): canvas.setFont('Times-BoldItalic',20) canvas.drawString(inch, 10.5 * inch, title) canvas.setFont('Times-Roman',10) canvas.drawCentredString(4.135 * inch, 0.75 * inch, 'Page %d' % canvas.getPageNumber()) #draw a border canvas.setStrokeColorRGB(1,0,0) canvas.setLineWidth(5) canvas.line(0.8 * inch, inch, 0.8 * inch, 10.75 * inch) #reset carefully afterwards canvas.setLineWidth(1) canvas.setStrokeColorRGB(0,0,0) if __name__ == '__main__': run() reportlab-3.5.34/demos/tests/0000775000175000017500000000000013607302651016650 5ustar rptlabrptlab00000000000000reportlab-3.5.34/demos/tests/testdemos.py0000664000175000017500000000101513544671343021235 0ustar rptlabrptlab00000000000000#!/bin/env python #Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __doc__='Test all demos' __version__='3.3.0' _globals=globals().copy() import os, sys from reportlab import pdfgen for p in ('pythonpoint/pythonpoint.py','stdfonts/stdfonts.py','odyssey/odyssey.py', 'gadflypaper/gfe.py'): fn = os.path.normcase(os.path.normpath(os.path.join(os.path.dirname(pdfgen.__file__),'..','demos',p))) os.chdir(os.path.dirname(fn)) exec(compile(open(fn).read(), fn, 'exec'),_globals.copy()) reportlab-3.5.34/src/0000775000175000017500000000000013607302651015166 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab.egg-info/0000775000175000017500000000000013607302651020652 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab.egg-info/SOURCES.txt0000664000175000017500000004522013607302651022541 0ustar rptlabrptlab00000000000000.appveyor.yml .travis.yml CHANGES.md INSTALL.txt LICENSE.txt MANIFEST.in README.txt VERSION.txt setup.cfg setup.py demos/colors/colortest.py demos/gadflypaper/00readme.txt demos/gadflypaper/gfe.py demos/odyssey/00readme.txt demos/odyssey/dodyssey.py demos/odyssey/fodyssey.py demos/odyssey/odyssey.py demos/odyssey/odyssey.txt demos/rlzope/readme.txt demos/rlzope/rlzope.py demos/stdfonts/00readme.txt demos/stdfonts/stdfonts.py demos/tests/testdemos.py docs/00readme.txt docs/Makefile docs/genAll.py docs/gen_epydoc docs/make.bat docs/images/Edit_Prefs.gif docs/images/Python_21.gif docs/images/Python_21_HINT.gif docs/images/fileExchange.gif docs/images/jpn.gif docs/images/jpnchars.jpg docs/images/lj8100.jpg docs/images/redsquare.png docs/images/replogo.a85 docs/images/replogo.gif docs/images/testimg.gif docs/reference/build.bat docs/reference/genreference.py docs/reference/reference.yml docs/source/conf.py docs/source/graphics.rst docs/source/index.rst docs/source/lib.rst docs/source/pdfgen.rst docs/source/platypus.rst docs/source/_static/basic.css docs/source/_static/default.css docs/source/_templates/layout.html docs/source/_templates/page.html docs/userguide/app_demos.py docs/userguide/ch1_intro.py docs/userguide/ch2_graphics.py docs/userguide/ch2a_fonts.py docs/userguide/ch3_pdffeatures.py docs/userguide/ch4_platypus_concepts.py docs/userguide/ch5_paragraphs.py docs/userguide/ch6_tables.py docs/userguide/ch7_custom.py docs/userguide/genuserguide.py docs/userguide/graph_charts.py docs/userguide/graph_concepts.py docs/userguide/graph_intro.py docs/userguide/graph_shapes.py docs/userguide/graph_widgets.py docs/userguide/testfile.txt src/reportlab/MANIFEST.in src/reportlab/__init__.py src/reportlab/license.txt src/reportlab/rl_config.py src/reportlab/rl_settings.py src/reportlab.egg-info/PKG-INFO src/reportlab.egg-info/SOURCES.txt src/reportlab.egg-info/dependency_links.txt src/reportlab.egg-info/requires.txt src/reportlab.egg-info/top_level.txt src/reportlab/fonts/00readme.txt src/reportlab/fonts/DarkGarden-changelog.txt src/reportlab/fonts/DarkGarden-copying-gpl.txt src/reportlab/fonts/DarkGarden-copying.txt src/reportlab/fonts/DarkGarden-readme.txt src/reportlab/fonts/DarkGarden.sfd src/reportlab/fonts/DarkGardenMK.afm src/reportlab/fonts/DarkGardenMK.pfb src/reportlab/fonts/Vera.ttf src/reportlab/fonts/VeraBI.ttf src/reportlab/fonts/VeraBd.ttf src/reportlab/fonts/VeraIt.ttf src/reportlab/fonts/_a______.pfb src/reportlab/fonts/_ab_____.pfb src/reportlab/fonts/_abi____.pfb src/reportlab/fonts/_ai_____.pfb src/reportlab/fonts/_eb_____.pfb src/reportlab/fonts/_ebi____.pfb src/reportlab/fonts/_ei_____.pfb src/reportlab/fonts/_er_____.pfb src/reportlab/fonts/bitstream-vera-license.txt src/reportlab/fonts/callig15.afm src/reportlab/fonts/callig15.pfb src/reportlab/fonts/cob_____.pfb src/reportlab/fonts/cobo____.pfb src/reportlab/fonts/com_____.pfb src/reportlab/fonts/coo_____.pfb src/reportlab/fonts/sy______.pfb src/reportlab/fonts/zd______.pfb src/reportlab/fonts/zx______.pfb src/reportlab/fonts/zy______.pfb src/reportlab/graphics/__init__.py src/reportlab/graphics/renderPDF.py src/reportlab/graphics/renderPM.py src/reportlab/graphics/renderPS.py src/reportlab/graphics/renderSVG.py src/reportlab/graphics/renderbase.py src/reportlab/graphics/shapes.py src/reportlab/graphics/testdrawings.py src/reportlab/graphics/testshapes.py src/reportlab/graphics/widgetbase.py src/reportlab/graphics/barcode/README src/reportlab/graphics/barcode/TODO src/reportlab/graphics/barcode/__init__.py src/reportlab/graphics/barcode/code128.py src/reportlab/graphics/barcode/code39.py src/reportlab/graphics/barcode/code93.py src/reportlab/graphics/barcode/common.py src/reportlab/graphics/barcode/eanbc.py src/reportlab/graphics/barcode/ecc200datamatrix.py src/reportlab/graphics/barcode/fourstate.py src/reportlab/graphics/barcode/lto.py src/reportlab/graphics/barcode/qr.py src/reportlab/graphics/barcode/qrencoder.py src/reportlab/graphics/barcode/test.py src/reportlab/graphics/barcode/usps.py src/reportlab/graphics/barcode/usps4s.py src/reportlab/graphics/barcode/widgets.py src/reportlab/graphics/charts/__init__.py src/reportlab/graphics/charts/areas.py src/reportlab/graphics/charts/axes.py src/reportlab/graphics/charts/barcharts.py src/reportlab/graphics/charts/dotbox.py src/reportlab/graphics/charts/doughnut.py src/reportlab/graphics/charts/legends.py src/reportlab/graphics/charts/linecharts.py src/reportlab/graphics/charts/lineplots.py src/reportlab/graphics/charts/markers.py src/reportlab/graphics/charts/piecharts.py src/reportlab/graphics/charts/slidebox.py src/reportlab/graphics/charts/spider.py src/reportlab/graphics/charts/textlabels.py src/reportlab/graphics/charts/utils.py src/reportlab/graphics/charts/utils3d.py src/reportlab/graphics/samples/__init__.py src/reportlab/graphics/samples/bubble.py src/reportlab/graphics/samples/clustered_bar.py src/reportlab/graphics/samples/clustered_column.py src/reportlab/graphics/samples/excelcolors.py src/reportlab/graphics/samples/exploded_pie.py src/reportlab/graphics/samples/filled_radar.py src/reportlab/graphics/samples/line_chart.py src/reportlab/graphics/samples/linechart_with_markers.py src/reportlab/graphics/samples/radar.py src/reportlab/graphics/samples/runall.py src/reportlab/graphics/samples/scatter.py src/reportlab/graphics/samples/scatter_lines.py src/reportlab/graphics/samples/scatter_lines_markers.py src/reportlab/graphics/samples/simple_pie.py src/reportlab/graphics/samples/stacked_bar.py src/reportlab/graphics/samples/stacked_column.py src/reportlab/graphics/widgets/__init__.py src/reportlab/graphics/widgets/eventcal.py src/reportlab/graphics/widgets/flags.py src/reportlab/graphics/widgets/grids.py src/reportlab/graphics/widgets/markers.py src/reportlab/graphics/widgets/signsandsymbols.py src/reportlab/graphics/widgets/table.py src/reportlab/lib/PyFontify.py src/reportlab/lib/__init__.py src/reportlab/lib/abag.py src/reportlab/lib/arciv.py src/reportlab/lib/attrmap.py src/reportlab/lib/boxstuff.py src/reportlab/lib/codecharts.py src/reportlab/lib/colors.py src/reportlab/lib/corp.py src/reportlab/lib/enums.py src/reportlab/lib/extformat.py src/reportlab/lib/fontfinder.py src/reportlab/lib/fonts.py src/reportlab/lib/formatters.py src/reportlab/lib/geomutils.py src/reportlab/lib/hyphen.mashed src/reportlab/lib/logger.py src/reportlab/lib/normalDate.py src/reportlab/lib/pagesizes.py src/reportlab/lib/pdfencrypt.py src/reportlab/lib/pygments2xpre.py src/reportlab/lib/randomtext.py src/reportlab/lib/rl_accel.py src/reportlab/lib/rl_safe_eval.py src/reportlab/lib/rltempfile.py src/reportlab/lib/rparsexml.py src/reportlab/lib/sequencer.py src/reportlab/lib/styles.py src/reportlab/lib/testutils.py src/reportlab/lib/textsplit.py src/reportlab/lib/units.py src/reportlab/lib/utils.py src/reportlab/lib/validators.py src/reportlab/lib/yaml.py src/reportlab/pdfbase/__init__.py src/reportlab/pdfbase/_can_cmap_data.py src/reportlab/pdfbase/_cidfontdata.py src/reportlab/pdfbase/_fontdata.py src/reportlab/pdfbase/_fontdata_enc_macexpert.py src/reportlab/pdfbase/_fontdata_enc_macroman.py src/reportlab/pdfbase/_fontdata_enc_pdfdoc.py src/reportlab/pdfbase/_fontdata_enc_standard.py src/reportlab/pdfbase/_fontdata_enc_symbol.py src/reportlab/pdfbase/_fontdata_enc_winansi.py src/reportlab/pdfbase/_fontdata_enc_zapfdingbats.py src/reportlab/pdfbase/_fontdata_widths_courier.py src/reportlab/pdfbase/_fontdata_widths_courierbold.py src/reportlab/pdfbase/_fontdata_widths_courierboldoblique.py src/reportlab/pdfbase/_fontdata_widths_courieroblique.py src/reportlab/pdfbase/_fontdata_widths_helvetica.py src/reportlab/pdfbase/_fontdata_widths_helveticabold.py src/reportlab/pdfbase/_fontdata_widths_helveticaboldoblique.py src/reportlab/pdfbase/_fontdata_widths_helveticaoblique.py src/reportlab/pdfbase/_fontdata_widths_symbol.py src/reportlab/pdfbase/_fontdata_widths_timesbold.py src/reportlab/pdfbase/_fontdata_widths_timesbolditalic.py src/reportlab/pdfbase/_fontdata_widths_timesitalic.py src/reportlab/pdfbase/_fontdata_widths_timesroman.py src/reportlab/pdfbase/_fontdata_widths_zapfdingbats.py src/reportlab/pdfbase/_glyphlist.py src/reportlab/pdfbase/acroform.py src/reportlab/pdfbase/cidfonts.py src/reportlab/pdfbase/pdfdoc.py src/reportlab/pdfbase/pdfform.py src/reportlab/pdfbase/pdfmetrics.py src/reportlab/pdfbase/pdfpattern.py src/reportlab/pdfbase/pdfutils.py src/reportlab/pdfbase/rl_codecs.py src/reportlab/pdfbase/ttfonts.py src/reportlab/pdfgen/__init__.py src/reportlab/pdfgen/canvas.py src/reportlab/pdfgen/pathobject.py src/reportlab/pdfgen/pdfgeom.py src/reportlab/pdfgen/pdfimages.py src/reportlab/pdfgen/textobject.py src/reportlab/platypus/__init__.py src/reportlab/platypus/doctemplate.py src/reportlab/platypus/figures.py src/reportlab/platypus/flowables.py src/reportlab/platypus/frames.py src/reportlab/platypus/multicol.py src/reportlab/platypus/para.py src/reportlab/platypus/paragraph.py src/reportlab/platypus/paraparser.py src/reportlab/platypus/tableofcontents.py src/reportlab/platypus/tables.py src/reportlab/platypus/xpreformatted.py src/rl_addons/README src/rl_addons/renderPM/_renderPM.c src/rl_addons/renderPM/pfm.py src/rl_addons/renderPM/test_renderPM.py src/rl_addons/renderPM/tr.py src/rl_addons/renderPM/gt1/gt1-dict.c src/rl_addons/renderPM/gt1/gt1-dict.h src/rl_addons/renderPM/gt1/gt1-misc.h src/rl_addons/renderPM/gt1/gt1-namecontext.c src/rl_addons/renderPM/gt1/gt1-namecontext.h src/rl_addons/renderPM/gt1/gt1-parset1.c src/rl_addons/renderPM/gt1/gt1-parset1.h src/rl_addons/renderPM/gt1/gt1-region.c src/rl_addons/renderPM/gt1/gt1-region.h src/rl_addons/renderPM/gt1/gt1-value.h src/rl_addons/renderPM/gt1/parseAFM.c src/rl_addons/renderPM/gt1/parseAFM.h src/rl_addons/renderPM/libart_lgpl/AUTHORS src/rl_addons/renderPM/libart_lgpl/COPYING src/rl_addons/renderPM/libart_lgpl/ChangeLog src/rl_addons/renderPM/libart_lgpl/Makefile.am src/rl_addons/renderPM/libart_lgpl/NEWS src/rl_addons/renderPM/libart_lgpl/README src/rl_addons/renderPM/libart_lgpl/README.CVS src/rl_addons/renderPM/libart_lgpl/acconfig.h src/rl_addons/renderPM/libart_lgpl/art_affine.c src/rl_addons/renderPM/libart_lgpl/art_affine.h src/rl_addons/renderPM/libart_lgpl/art_alphagamma.c src/rl_addons/renderPM/libart_lgpl/art_alphagamma.h src/rl_addons/renderPM/libart_lgpl/art_bpath.c src/rl_addons/renderPM/libart_lgpl/art_bpath.h src/rl_addons/renderPM/libart_lgpl/art_config.h src/rl_addons/renderPM/libart_lgpl/art_filterlevel.h src/rl_addons/renderPM/libart_lgpl/art_gray_svp.c src/rl_addons/renderPM/libart_lgpl/art_gray_svp.h src/rl_addons/renderPM/libart_lgpl/art_misc.c src/rl_addons/renderPM/libart_lgpl/art_misc.h src/rl_addons/renderPM/libart_lgpl/art_pathcode.h src/rl_addons/renderPM/libart_lgpl/art_pixbuf.c src/rl_addons/renderPM/libart_lgpl/art_pixbuf.h src/rl_addons/renderPM/libart_lgpl/art_point.h src/rl_addons/renderPM/libart_lgpl/art_rect.c src/rl_addons/renderPM/libart_lgpl/art_rect.h src/rl_addons/renderPM/libart_lgpl/art_rect_svp.c src/rl_addons/renderPM/libart_lgpl/art_rect_svp.h src/rl_addons/renderPM/libart_lgpl/art_rect_uta.c src/rl_addons/renderPM/libart_lgpl/art_rect_uta.h src/rl_addons/renderPM/libart_lgpl/art_render.c src/rl_addons/renderPM/libart_lgpl/art_render.h src/rl_addons/renderPM/libart_lgpl/art_render_gradient.c src/rl_addons/renderPM/libart_lgpl/art_render_gradient.h src/rl_addons/renderPM/libart_lgpl/art_render_mask.c src/rl_addons/renderPM/libart_lgpl/art_render_mask.h src/rl_addons/renderPM/libart_lgpl/art_render_svp.c src/rl_addons/renderPM/libart_lgpl/art_render_svp.h src/rl_addons/renderPM/libart_lgpl/art_rgb.c src/rl_addons/renderPM/libart_lgpl/art_rgb.h src/rl_addons/renderPM/libart_lgpl/art_rgb_a_affine.c src/rl_addons/renderPM/libart_lgpl/art_rgb_a_affine.h src/rl_addons/renderPM/libart_lgpl/art_rgb_affine.c src/rl_addons/renderPM/libart_lgpl/art_rgb_affine.h src/rl_addons/renderPM/libart_lgpl/art_rgb_affine_private.c src/rl_addons/renderPM/libart_lgpl/art_rgb_affine_private.h src/rl_addons/renderPM/libart_lgpl/art_rgb_bitmap_affine.c src/rl_addons/renderPM/libart_lgpl/art_rgb_bitmap_affine.h src/rl_addons/renderPM/libart_lgpl/art_rgb_pixbuf_affine.c src/rl_addons/renderPM/libart_lgpl/art_rgb_pixbuf_affine.h src/rl_addons/renderPM/libart_lgpl/art_rgb_rgba_affine.c src/rl_addons/renderPM/libart_lgpl/art_rgb_rgba_affine.h src/rl_addons/renderPM/libart_lgpl/art_rgb_svp.c src/rl_addons/renderPM/libart_lgpl/art_rgb_svp.h src/rl_addons/renderPM/libart_lgpl/art_rgba.c src/rl_addons/renderPM/libart_lgpl/art_rgba.h src/rl_addons/renderPM/libart_lgpl/art_svp.c src/rl_addons/renderPM/libart_lgpl/art_svp.h src/rl_addons/renderPM/libart_lgpl/art_svp_intersect.c src/rl_addons/renderPM/libart_lgpl/art_svp_intersect.h src/rl_addons/renderPM/libart_lgpl/art_svp_ops.c src/rl_addons/renderPM/libart_lgpl/art_svp_ops.h src/rl_addons/renderPM/libart_lgpl/art_svp_point.c src/rl_addons/renderPM/libart_lgpl/art_svp_point.h src/rl_addons/renderPM/libart_lgpl/art_svp_render_aa.c src/rl_addons/renderPM/libart_lgpl/art_svp_render_aa.h src/rl_addons/renderPM/libart_lgpl/art_svp_vpath.c src/rl_addons/renderPM/libart_lgpl/art_svp_vpath.h src/rl_addons/renderPM/libart_lgpl/art_svp_vpath_stroke.c src/rl_addons/renderPM/libart_lgpl/art_svp_vpath_stroke.h src/rl_addons/renderPM/libart_lgpl/art_svp_wind.c src/rl_addons/renderPM/libart_lgpl/art_svp_wind.h src/rl_addons/renderPM/libart_lgpl/art_uta.c src/rl_addons/renderPM/libart_lgpl/art_uta.h src/rl_addons/renderPM/libart_lgpl/art_uta_ops.c src/rl_addons/renderPM/libart_lgpl/art_uta_ops.h src/rl_addons/renderPM/libart_lgpl/art_uta_rect.c src/rl_addons/renderPM/libart_lgpl/art_uta_rect.h src/rl_addons/renderPM/libart_lgpl/art_uta_svp.c src/rl_addons/renderPM/libart_lgpl/art_uta_svp.h src/rl_addons/renderPM/libart_lgpl/art_uta_vpath.c src/rl_addons/renderPM/libart_lgpl/art_uta_vpath.h src/rl_addons/renderPM/libart_lgpl/art_vpath.c src/rl_addons/renderPM/libart_lgpl/art_vpath.h src/rl_addons/renderPM/libart_lgpl/art_vpath_bpath.c src/rl_addons/renderPM/libart_lgpl/art_vpath_bpath.h src/rl_addons/renderPM/libart_lgpl/art_vpath_dash.c src/rl_addons/renderPM/libart_lgpl/art_vpath_dash.h src/rl_addons/renderPM/libart_lgpl/art_vpath_svp.c src/rl_addons/renderPM/libart_lgpl/art_vpath_svp.h src/rl_addons/renderPM/libart_lgpl/autogen.sh src/rl_addons/renderPM/libart_lgpl/config.h src/rl_addons/renderPM/libart_lgpl/configure.in src/rl_addons/renderPM/libart_lgpl/gen_art_config.c src/rl_addons/renderPM/libart_lgpl/libart-2.0.pc.in src/rl_addons/renderPM/libart_lgpl/libart-config.in src/rl_addons/renderPM/libart_lgpl/libart-features.c src/rl_addons/renderPM/libart_lgpl/libart-features.h.in src/rl_addons/renderPM/libart_lgpl/libart.h src/rl_addons/renderPM/libart_lgpl/libart.m4 src/rl_addons/renderPM/libart_lgpl/libartConf.sh.in src/rl_addons/renderPM/libart_lgpl/test_gradient.c src/rl_addons/renderPM/libart_lgpl/testart.c src/rl_addons/renderPM/libart_lgpl/testuta.c src/rl_addons/rl_accel/README.extensions src/rl_addons/rl_accel/_rl_accel.c src/rl_addons/rl_accel/_rl_accel.java src/rl_addons/rl_accel/hnjalloc.c src/rl_addons/rl_accel/hnjalloc.h src/rl_addons/rl_accel/hyphen.c src/rl_addons/rl_accel/hyphen.h src/rl_addons/rl_accel/hyphen.mashed src/rl_addons/rl_accel/pyHnjmodule.c src/rl_addons/rl_accel/tests/getrc.py src/rl_addons/rl_accel/tests/t0.py src/rl_addons/rl_accel/tests/t1.py src/rl_addons/rl_accel/tests/t2.py src/rl_addons/rl_accel/tests/t3.py src/rl_addons/rl_accel/tests/t4.py src/rl_addons/rl_accel/tests/t5.py tests/00readme.txt tests/__init__.py tests/alpha_test.png tests/gray-alpha.png tests/pythonpowered-gs.gif tests/pythonpowered.gif tests/rltw-icon-tr.png tests/runAll.py tests/solid_red_alpha.png tests/tall_red.png tests/test-cross.tiff tests/test-indexed.png tests/test-rgba.png tests/test_charts_textlabels.py tests/test_crypto_algorithms.py tests/test_docs_build.py tests/test_docstrings.py tests/test_extra.py tests/test_geomutils.py tests/test_graphics_barcode.py tests/test_graphics_charts.py tests/test_graphics_images.py tests/test_graphics_layout.py tests/test_graphics_render.py tests/test_graphics_speed.py tests/test_hello.py tests/test_images.py tests/test_invariant.py tests/test_issues.py tests/test_lib_colors.py tests/test_lib_normaldate.py tests/test_lib_pdfencrypt.py tests/test_lib_rl_safe_eval.py tests/test_lib_sequencer.py tests/test_lib_utils.py tests/test_lib_validators.py tests/test_multibyte_chs.py tests/test_multibyte_cht.py tests/test_multibyte_jpn.py tests/test_multibyte_kor.py tests/test_paragraphs.py tests/test_pdfbase_encodings.py tests/test_pdfbase_fontembed.py tests/test_pdfbase_pdfdoc.py tests/test_pdfbase_pdfform.py tests/test_pdfbase_pdfmetrics.py tests/test_pdfbase_pdfutils.py tests/test_pdfbase_postscript.py tests/test_pdfbase_ttfonts.py tests/test_pdfgen_callback.py tests/test_pdfgen_general.py tests/test_pdfgen_links.py tests/test_pdfgen_overprint.py tests/test_pdfgen_pagemodes.py tests/test_platypus_accum.py tests/test_platypus_breaking.py tests/test_platypus_cjk_wrap.py tests/test_platypus_general.py tests/test_platypus_images.py tests/test_platypus_indents.py tests/test_platypus_index.py tests/test_platypus_leftright.py tests/test_platypus_lists.py tests/test_platypus_paragraphs.py tests/test_platypus_paraparser.py tests/test_platypus_pleaseturnover.py tests/test_platypus_preformatted.py tests/test_platypus_programming.py tests/test_platypus_tables.py tests/test_platypus_toc.py tests/test_platypus_wrapping.py tests/test_platypus_xref.py tests/test_pyfiles.py tests/test_renderPS.py tests/test_renderSVG.py tests/test_rl_accel.py tests/test_source_chars.py tests/test_table_layout.py tests/test_tools_pythonpoint.py tests/test_utils.py tests/test_widgetbase_tpc.py tests/test_widgets_grids.py tests/unimportable.py tools/README tools/__init__.py tools/docco/README tools/docco/__init__.py tools/docco/codegrab.py tools/docco/docpy.py tools/docco/examples.py tools/docco/graphdocpy.py tools/docco/rl_doc_utils.py tools/docco/rltemplate.py tools/docco/stylesheet.py tools/docco/t_parse.py tools/docco/yaml.py tools/docco/yaml2pdf.py tools/pythonpoint/README tools/pythonpoint/__init__.py tools/pythonpoint/customshapes.py tools/pythonpoint/pythonpoint.dtd tools/pythonpoint/pythonpoint.py tools/pythonpoint/stdparser.py tools/pythonpoint/demos/examples.py tools/pythonpoint/demos/figures.xml tools/pythonpoint/demos/htu.xml tools/pythonpoint/demos/leftlogo.a85 tools/pythonpoint/demos/leftlogo.gif tools/pythonpoint/demos/lj8100.jpg tools/pythonpoint/demos/monterey.xml tools/pythonpoint/demos/outline.gif tools/pythonpoint/demos/pplogo.gif tools/pythonpoint/demos/python.gif tools/pythonpoint/demos/pythonpoint.xml tools/pythonpoint/demos/slidebox.py tools/pythonpoint/demos/spectrum.png tools/pythonpoint/demos/vertpython.gif tools/pythonpoint/styles/__init__.py tools/pythonpoint/styles/horrible.py tools/pythonpoint/styles/htu.py tools/pythonpoint/styles/modern.py tools/pythonpoint/styles/projection.py tools/pythonpoint/styles/standard.py tools/utils/add_bleed.py tools/utils/dumpttf.pyreportlab-3.5.34/src/reportlab.egg-info/dependency_links.txt0000664000175000017500000000000113607302651024720 0ustar rptlabrptlab00000000000000 reportlab-3.5.34/src/reportlab.egg-info/requires.txt0000664000175000017500000000001613607302651023247 0ustar rptlabrptlab00000000000000pillow>=4.0.0 reportlab-3.5.34/src/reportlab.egg-info/top_level.txt0000664000175000017500000000001213607302651023375 0ustar rptlabrptlab00000000000000reportlab reportlab-3.5.34/src/reportlab.egg-info/PKG-INFO0000664000175000017500000000200713607302651021746 0ustar rptlabrptlab00000000000000Metadata-Version: 1.1 Name: reportlab Version: 3.5.34 Summary: The Reportlab Toolkit Home-page: http://www.reportlab.com/ Author: Andy Robinson, Robin Becker, the ReportLab team and the community Author-email: reportlab-users@lists2.reportlab.com License: BSD license (see license.txt for details), Copyright (c) 2000-2018, ReportLab Inc. Description: The ReportLab Toolkit. An Open Source Python library for generating PDFs and graphics. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Topic :: Printing Classifier: Topic :: Text Processing :: Markup Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 reportlab-3.5.34/src/reportlab/0000775000175000017500000000000013607302651017160 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/fonts/0000775000175000017500000000000013607302651020311 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/fonts/zd______.pfb0000664000175000017500000014067113607302650022521 0ustar rptlabrptlab00000000000000€K%!PS-AdobeFont-1.0: ZapfDingbats 002.000 %%CreationDate: Thu May 1 15:14:10 1997 %%VMusage: 45775 55535 %% ITC Zapf Dingbats is a registered trademark of International Typeface %% Corporation. 11 dict begin /FontInfo 10 dict dup begin /version (002.000) readonly def /Notice (Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.) readonly def /FullName (ITC Zapf Dingbats) readonly def /FamilyName (ITC Zapf Dingbats) readonly def /Weight (Medium) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /ZapfDingbats def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 32 /space put dup 33 /a1 put dup 34 /a2 put dup 35 /a202 put dup 36 /a3 put dup 37 /a4 put dup 38 /a5 put dup 39 /a119 put dup 40 /a118 put dup 41 /a117 put dup 42 /a11 put dup 43 /a12 put dup 44 /a13 put dup 45 /a14 put dup 46 /a15 put dup 47 /a16 put dup 48 /a105 put dup 49 /a17 put dup 50 /a18 put dup 51 /a19 put dup 52 /a20 put dup 53 /a21 put dup 54 /a22 put dup 55 /a23 put dup 56 /a24 put dup 57 /a25 put dup 58 /a26 put dup 59 /a27 put dup 60 /a28 put dup 61 /a6 put dup 62 /a7 put dup 63 /a8 put dup 64 /a9 put dup 65 /a10 put dup 66 /a29 put dup 67 /a30 put dup 68 /a31 put dup 69 /a32 put dup 70 /a33 put dup 71 /a34 put dup 72 /a35 put dup 73 /a36 put dup 74 /a37 put dup 75 /a38 put dup 76 /a39 put dup 77 /a40 put dup 78 /a41 put dup 79 /a42 put dup 80 /a43 put dup 81 /a44 put dup 82 /a45 put dup 83 /a46 put dup 84 /a47 put dup 85 /a48 put dup 86 /a49 put dup 87 /a50 put dup 88 /a51 put dup 89 /a52 put dup 90 /a53 put dup 91 /a54 put dup 92 /a55 put dup 93 /a56 put dup 94 /a57 put dup 95 /a58 put dup 96 /a59 put dup 97 /a60 put dup 98 /a61 put dup 99 /a62 put dup 100 /a63 put dup 101 /a64 put dup 102 /a65 put dup 103 /a66 put dup 104 /a67 put dup 105 /a68 put dup 106 /a69 put dup 107 /a70 put dup 108 /a71 put dup 109 /a72 put dup 110 /a73 put dup 111 /a74 put dup 112 /a203 put dup 113 /a75 put dup 114 /a204 put dup 115 /a76 put dup 116 /a77 put dup 117 /a78 put dup 118 /a79 put dup 119 /a81 put dup 120 /a82 put dup 121 /a83 put dup 122 /a84 put dup 123 /a97 put dup 124 /a98 put dup 125 /a99 put dup 126 /a100 put dup 128 /a89 put dup 129 /a90 put dup 130 /a93 put dup 131 /a94 put dup 132 /a91 put dup 133 /a92 put dup 134 /a205 put dup 135 /a85 put dup 136 /a206 put dup 137 /a86 put dup 138 /a87 put dup 139 /a88 put dup 140 /a95 put dup 141 /a96 put dup 161 /a101 put dup 162 /a102 put dup 163 /a103 put dup 164 /a104 put dup 165 /a106 put dup 166 /a107 put dup 167 /a108 put dup 168 /a112 put dup 169 /a111 put dup 170 /a110 put dup 171 /a109 put dup 172 /a120 put dup 173 /a121 put dup 174 /a122 put dup 175 /a123 put dup 176 /a124 put dup 177 /a125 put dup 178 /a126 put dup 179 /a127 put dup 180 /a128 put dup 181 /a129 put dup 182 /a130 put dup 183 /a131 put dup 184 /a132 put dup 185 /a133 put dup 186 /a134 put dup 187 /a135 put dup 188 /a136 put dup 189 /a137 put dup 190 /a138 put dup 191 /a139 put dup 192 /a140 put dup 193 /a141 put dup 194 /a142 put dup 195 /a143 put dup 196 /a144 put dup 197 /a145 put dup 198 /a146 put dup 199 /a147 put dup 200 /a148 put dup 201 /a149 put dup 202 /a150 put dup 203 /a151 put dup 204 /a152 put dup 205 /a153 put dup 206 /a154 put dup 207 /a155 put dup 208 /a156 put dup 209 /a157 put dup 210 /a158 put dup 211 /a159 put dup 212 /a160 put dup 213 /a161 put dup 214 /a163 put dup 215 /a164 put dup 216 /a196 put dup 217 /a165 put dup 218 /a192 put dup 219 /a166 put dup 220 /a167 put dup 221 /a168 put dup 222 /a169 put dup 223 /a170 put dup 224 /a171 put dup 225 /a172 put dup 226 /a173 put dup 227 /a162 put dup 228 /a174 put dup 229 /a175 put dup 230 /a176 put dup 231 /a177 put dup 232 /a178 put dup 233 /a179 put dup 234 /a193 put dup 235 /a180 put dup 236 /a199 put dup 237 /a181 put dup 238 /a200 put dup 239 /a182 put dup 241 /a201 put dup 242 /a183 put dup 243 /a184 put dup 244 /a197 put dup 245 /a185 put dup 246 /a194 put dup 247 /a198 put dup 248 /a186 put dup 249 /a195 put dup 250 /a187 put dup 251 /a188 put dup 252 /a189 put dup 253 /a190 put dup 254 /a191 put readonly def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 43082 def /FontBBox{-1 -143 981 820}readonly def currentdict end currentfile eexec €F®F^#ÿ‚Íß¡Ý}ŠþX(ÍxWhãç#ök{ņºí4X^Ár” è–ZúÆ{—ÁK«Vö_-IÆ<Ñ åBçJPË,*¯•NC=Þ BŽGª¼øÀs§M"û^¦ˆ5ó'Th\.°èD/±D[ÊW¯ªÑ8õ‰Cw¬Ë÷<ÿ3eã†u˜àÁ*;é0°þC•ò…"3"è£çKìê1Tõ°Îî£5Iü:—>þ${•¹ŽŸœÃ I|¨n_«ø4{•¯L\rÉ·9ª·š§’Í.µÈÀý‹h1¾e¹v%A6±ª3n˯ñŽ‹œß¯½d•6o¹e/ÖhÞ“„µ/²#4Ax rS£@Šë¢P”HxŸKñ×Ã%$ ÛiPWÐ8»-ûô´ V׿ÐÊs›ÌQã²›-péYÓ§âÆ%w %2Á« EÎäö­º—†sþŽ2É÷Ïh:¶øüZNµKF1HÓ¡×ògáµK³M]%3/hi¼7ndÀZ{|[gņ¨¨,cåîr€¢”ëVlfÒ³#k(Ï'xÜDRunq,¹Îȱ!ÛæÇˆŽ‡H†”LªAV#¥ç$t#îZцM¾EÛi%ûáXÿüS³†Ù¸œ}ý„ L¾dé.žr¬8æÒÒß`ݪ(ƒT.HJÌÿ¡K…à ‚:~Ly(ðÝ@è¶F>¤›ùØÏ?Qã´¸eñ9r ®ö¢Ê]Ž7u%¶ò»ÝNüòý C¢qþk2Œ²×^8ÕqKAEÞF2(É›c9ˆ®<χ¤-2p’Ý|£Æ‰Ë¸ÿïØ"TÐù\‘˨ö± Y4ÉÞÕɤŠÃä5³QÛT /¥ž¸¨Èa@ WœC±¡1™øSFn’Láëåc3l³–õy*‰%‘u`@ª¬rËÝC‚^Ú3‰ -Š<úB"oŽ2F&Ó…‰+ìì.ÒŽ’ÆéëV¨ÖòÃy2§”¼‹YÆã‹†žç¥7Vf«" C«_™FakôæØH{ØÖ(·™¢Â‡®–Ø‚{Ž™´°¦J¾.%Ñ ƒ¿ìOî©Í«ºýä|Æ•ZTLžì¯¢Ô8üN;š˜L¡CûÂì Õ‘'çLžíξæÞ´®³²QP4D†S>Rt±DM`€ÙOs8ø´Sñ)'¹æÚJÁõñ#˜¿¤Ë„,q™„¸â‚J´G*ulh®ü¥Às9ƒ (àYܰ« ñ“K*ÉÍÐPšÉšÒMÄA'ö° d¿%¤‰8#4ÿƹvJþçsG(ø´}rInL¸Å°\Ü d“ª¾ÈÓ¨Sß{]^è ½HQ+9šÖe•ù é_ÞV`, ž©NP4 [ýƒ )Ûå2°7²f´ÔIñ% ñºaª¿Ãuîv™²Šz1³6à FNêRºÃs~™z%>-áz õ6ŠþjÇ‘¡—7ÁŸfÐõ]kØJ\ÕÀ•sÓ"=ðn˜ü•òJ &¶5¡7³Ìƒ+õ/‰ñ¿Ú8IÎáf‘hú«W|4#ù*¦yà0j·gÙoÄT! µs޾S u Õ½öí­wkJ•þi4mœðŽ úÃ=ü‡_é§÷àÈ$Í$$bñÇÙ<®÷Qψò{°Ò (ÞãÙo°­à2(,0Štã'=²i»@ÞÐñÅ ú×"*_\«á×nŠu(Ò²˜¸£à–ÑÑÙ虿yAý„Ø5³6ÛRP˰RHŒ½lÇ""yÂôÕíÂoN%hÇ ¢åç'äw(c‘\ŸåëN¥çhc‘TyÞ^èFVêbÏbÝŸu‡ù|‚IkI+ø~àBô¼yä¤Åb/vAOtS«ˆ‚žÒ=ð?ɇ:Й ÚN¼*¢¢À8úöÕ½æÎ@^ÊÀ(bº=®_ÀeªüB5ìûÞÞJ…ëšäÈz¾²‰c .ÔÚcTv¬Ykú°pàHB¨Ó0{BiN5ç Vhk å¸Vˆí4”eƒýº®6Æ]æö‚ºi¾éÉV¤zÀ{b!ÝŠ ràTN—cÜ”ÔA7ÄiFÖ¹—ØgŸ7[œøÞVÏB9ìlwH[ƒ»xÄÍI]XÕ<†àÛ|Ljx@Ž". ¸Êõn¾$ÍY-ë¯>ÙÉ%3[÷ ü]ÔŒ0ªøºQ5Þ´ºì‡eìqÿ)iHâ© t´ž™uZj×£   ¿ÿðffS> •™y¸“ÿK,[êš§ˆw£QS<ÙU;fYw£Ÿ»pΪÂéõakÐI`Èö•lðivžÈ%ß`ÂÙ[RˆMNSz„ÞÍ þä,m¨„ܘR]ííy¾íŽ˜‹ÑLyî¼­CŠ"õyù¾ØíªÅèÁ‘Ø<­ÖØ#+ÿ|ÊwÍKYÒ…/þ%“ö¤ ¦ä}3™ÝЫúÈ—ÁPh8QU½Ö $Ob^DÇâc-9‚hF»dŒ„ê2wѲ¶Q³ÄÕ>îéiæŸLvÙ`¦µ5MÁvÔ1_4*=3]öõ'Rù"¿ìs@•{ü ó‹!šÍY-îrÇQ´­¯iÙŽ[ÚâÊúê% ¾·ì©Uoï(zß–F¬ L¦SÄJìßI£JÁ:&®“¸F«×Ó°BFAs…*K ~So$៫ͪGñÃÇÕ0k4²ð$Ž_Ü2 ÎhýéØYFüë)NIô¹œ˜ÈÕýk há‚W•õ.ÚÖuØ¥ÝÌÅ ö¾ÐuNGSAË#€ÃIMc Ø;tÁœÐ±!?šEV¤m'¸?ͧbðC—”,8ò‡¯viE2STÎ'˯ˆPÉJCnv ¹µZ¾E6Z¤1hØLl †"öÒ4µgá—'Ü~£Ô¼ l8 ïá9ä†Íöj¹A%¦$i»»ÑN^h“{ùyMÈJF3B€®[^Aí¿éj¬ ËË2$íTöéhÃôé˜i¥Ðþ€Ñüï·("»Ýõp¶ŸW¾Ž/rqeQX##~µG÷z[8xß­Í$Û í±×ó YÜ€VàÌîFy~9aWÍŽ™Õ4d)6\ÍÉÜ߃\8ÐÿÝGÓ%gñ7‹Š&ì—‹JÕÜCìä¾\¹K±Ÿ1R¦È{?öÝq9ð™(DÿžýÙZœ¹Iwº$Òº+@”ÖŠ‹öNlú?s kˆ*Í >”Ãñ6©‹ œ\EPÝïaóÜ çqͪ–9(˜¯§ë •Oq'»˜ÜÝí†ÙÕÞ*áÀ;÷ú°q¨ Cîm7vFòÁO½¹ÝÊ +B1=oú"¶¥ˆ~TÑ)ŠC$Ð ·ÌøEŸŽY·õQ9Gǃc^yüß•<0¶&Ç÷iÑÍ^T@ê‘ôª[Œp5Ý ì­ Þ¾†ªñ›-(µø\ã¡'™ÖLÿEGX‡"ëqøyé9^¤1oÏ×iÈA2Æ$Ù©SŽBz³É²èÿC\‚[?ðåÚIj[–Ý|““F„Ûñk®÷ÙýrjÂ/èªÖ7Ù_@‡ñ©»]÷™BP>!“øÊI¥4° òlØ7:MŸÉÞóý}ÒVÉÏ1 aѽÄÄBÌž¹wìC8½ÙÙ^%ÒÊäö¨Ç¿ûLdнºhœímšW… CQ¹ xNIªHô%ªÀ†j ªÈ8Î IOx(Åà´@è—¨ ”Â+•no»÷[L;ší¹w>Ô>ý²E¹-c€l¢eE°—¸C{Ÿ XšSâ%ƒÁ\×þËØGÆéö«’#’׬“rÚƒŠ*ô´U R¢ØØó‚9œ. ‹4 wrhtçÜÅžš:iðcNŒÎUÏ<Æšõ„÷îVgP7ø°ƒ8“k¯ïÝ¿h=Ã&Zô£Úñ¥C¥ëݼßöF7•¥](t%‘s€[[Ôþ6M쨔Sn*¦¿ýùWêätnÖ«r”¯ÜÃ#ŸSÅ<KŽÊ&BžàÞ¤3öʰ—¸(yšóÙ^9&[ÁÞ|Žº2¶y½''ƒ[q"!-7¢÷ч´•dþϦ°œD­:$À9•„ŸÈ/þß˸29rÉ—ûW6É·ðwx @™V'F¾k_0f?"µ†&¥»lÛH—”ˆÜ¸ÿu* \à3”ëY¡kUw(_[Ô.ý©8íÿü¶ý=-áó³F§³ßQËc‹˜¾·ÀÜB¯›ÃUíY da«Û‚w?ÅÃâHÙûÀß‘³G6ç·•SЄ £õRÀ°æáÜWz½¨+„¤º7]vÎï ­¯ß”9N6Ó¸‹wñ)i#dUÂ"[Çx@_:íf[aY”E¸O…e üÔ>ѳKš®ÿÔ® ±ÃØ—ë/ÚÆÍ5û}Ö"M†OÞ‰9Äsÿ×Ðp"õc„Œ7J@s~Ï›bË7_³v}P•;÷'¶¾_>Z™–¥¦ÎI#£[£{ô>^$¸v à?˜¤wÔ.ÉMúüˆJ%W(ºX-/YÀ>£íå¿@%EÉ]„úŸÔ¿Š»bI2Ü ÿ ; Î’ªS*ŸðÁhG›ky46’ÃuY,i!Éa•Æ”`ó=À½@æbæ´ ÅT¾³áûö¬%ä1EðW5ÊÚÓ–8"»©éNSŽÚñ†„†è‰òüš Ÿ#hç Qo‘7@1«\ÂàºaìmZM ­jm1€1a'èå=Ø‚⢇պ蠮Ço—,)Ä©¡^ iWCŸÕ@^|8ßÑ{âõЖý‘„8”eó^Úø®è°'üo¹8uÄiÂsWÛöÜVÐŽu[wïÃÒ$ú’:tE¤&íå=òîµÅ¯Vk\‚ŒTZJ û·“}'ërЬ“6ýý£CûÝþØú)ëÀÓÍxüÖ13~dSlИ>+ÓÄ® 3 ?ý‘ÐÓýÔ©\%Ë0•h„M³Ë¬©Y˜–q•­‚Z3^sÛî­",Áí©¼Õ®âõW¾ª¢Û™#ŽAR1íÜ ÷T¿ŠkWm¨³­m^Ñ5ËûÕovn ³´[ð.eK¿¹>½O¼­Õ«Gà¼ÿ¥þ9<ÁÜslÈUàV”o'L VË–=¢Ý&–Žú¼¨ƒžŒ'Hº€T~ùéCœpJ¤1iFÝ›—uCDk}yý+Lsa wÈ^ÒP¬´7¦}[©øo 9ìWr&ï÷iÿu˾ÎåewÇÀ ¡KÚÑo_õ7KýŠÐƒñƒ¹K’ I¸å?=çºüšº@‡¾1NÇÝd®R¡û©‡¸å+ ¯Ì”؉YlâäÐKo÷ø^Ò—EÙ‡<öL5F³rŠY f¡õd&¤ XdHI¥k%®ï6ˆÏƒ‹ñKÉÇð‹|ªÀ¨fŠœsWÓJ›$1•un+ó-˜$DñÿL¡DóA®µ}/† k»ºPU“ÏÚÈÕ}H¦áêÜPõC¶èqßK©+Ç~ 相Ÿ7ÒæÌx¶¹jàd&HîК Æ•ñ{ZxXû5Ð9Ç›ß0Jý;‘ÆSâ§±¦VIþ÷ÞÆzu‡eCCûôJ®ŠþϽ“¸µiSÆž=Ä×% Øô)8É[UÞ¤w›üÖû7‰f= •=GCo…•‘çz‹&PPg-ʺŽÚþ²”½w¼cv·‚ËAÅè =™& áû@„þ–áYNõ­YÝ]võExf± qëlwêã’ÞÙ;dkÌ ³¥];U+Ü›¶$æ‹?æqÉ›õÝC, ,zCiB1±ÏD²iÚÉb.­I˱Óõ¬j•~)b”Ϫıˣv×aæß<ÿŽgàϹD°„ÆX5¤±uÓ¹úpBÝN‚ó±õ¢Ý£Ô¼oR møAñGËîü±¿³Æ‰f¶™úIp ðt L‰Se×wtïJàï¯cœ!E¤FùÂþ’*‰¸ÎØ-+¡’ÏëC½Î5‚NTÇl‡Ø Cèü¡ÜǨ#»YW¬¹b6öš Z SIAËÍökr4œd7&V Q¸9DyQíL‹ ɺ —Ç¢ßJð3›A¢1^g*_ê&x?<ƒeä ÆNqXÛdÖ,¼ƒ«gO‹ý2 -ÕL¹+¹s`aÚß µ% Æu¯ÁNª€E¡tX¼\K!»[Á¬ëxgÇ7‰¬  ±±á@«ùGUÿ”ô­ðyÍÁæ 9Ûƒ&¼'çÚ¬fòÑ(xÏ‹VeQ¦óݼN!d½¸ëhK£úÇfÈx~Æêl:‡®Âœs g}½™‰ü5ýoeû» 6ª@ÑÈÖÝ%On© ›Ú â¼g"_x7ûÖЦ¾Ë|r5%ýæHÚ终]}U‰SÌšÿÖù¡9"Ã;rÜnÍKæÜÛ[tO2—ítª‘úú|Žëz%_«nÖž¢æª·ùPæöÝý1Ѝ(U4¥A0®•¹"Ié·ð>Ð=g§Ç1ê àÉÊ’£°ç$G1ä%¨¯k ;q°Ë…)™|Š %šæ³.Xúð¿þšb ¯Df²;¸kÀÏñPgê±sX…°<ÎÔêÄ“8Ï©qÞûß×Ùï‰(P Qí#ˆälÎãò¬Džm2-Rì3Ï|?ºÖmF†¬B‹wWLc²P®@`£ªâᥕ"°sâèžgü$½”ò1ïˆÞ˜|¢UZ7¯\ž,Œ“¤Êì\º¬0!ª‰‹ošÁŸ ÁÓ¶â­¾RÛ¶:õë¥Í¡º É™à™XÆwS;w™U}#îK—¶>ä^伨n¾ZWø^!*&V]¶AμQdÆY…žŸpõqsMï÷$A ÖÐ;@[ð{WSqÑÌ]ÕZýíÒ¬µ¨_PÀP’T·Í×Þ,v˜˜ù„a¥ÆRß5ÛÁ»Rµ†ú§Ãþ‘·4Ç¡Š‹Ž_A4wZ1ýUU:ë¿CÞ5øu¹ë[£ÁÛ—³1’’|½Rå6ÚÅ=œ%æÌ3¸®ÚAFá̼8tµú·r”Ÿ0¸áô´Áp¶xJx¾›•äÚ£9“tM± @ÖŸÙ£WN)dvü ‹æ¨„S¨º0¥zd[b¬ŽŒ ±[8»íl'¢b_-rsos£1æZb ZÍvÄÕùê5vБՒx^{”ýª6³–£sÉÇâ8O;RÎñu¿J¤æÍ¹ÒñÚû“P¹!OèIiâ’*Ñy)ôå\®˜Ëû ¦-Và[Ú? ÁC§mX&T)M'§!ÅÉÃw_õ•‹qÒ褋´C™þ§|ŒHq F£ô¯!9Jûº¼Ýe=qE'ÕÃü}릱¹–a[¨_SÚ Õú· T‡Ø_ÜÒnÑûÏUº‘!jôè>ˆMm‡Fo@0!`bGå ùh§¡¦9¿“—àu¼\ßrr¤ùú¡5]iì žÞMÎ@6`Ó•} òبV2‚,;½p؆3š`…?Y8òJJÖL\b®rŠ®Æñ^” ` ÃJ&GXhçaÛ…®™âÉÛTÛ3§rñK]J4ÔäÎöâÄZUÕ`=ÒÓ³ö¸‡ÒÀgkŒ»³•½'£þ‹¯uÕñ0Äf|81ÙÁЉ8<Ÿ'“˜ÓœUïÄDƒ&#– ž ~z¥o¸å_b 92¥…½®z_ß}ßÆÆ³1wˆ?è¢àRºTÇ¥¸3 $/ÂÊ)úUòdþyÚd*apE¹t7tšT‰91×<^ÑíX̘ƳDwÀ>š§§¹¤“e`Îv½ï.¸Þ~$ªýêilû½ž¾xÎi¿*ºØ,X…‚/̾џ…˜­Ou|9ms¯½B¹OóQ?gÒ$É+ ¢!‘å]uy. ÛDê§´ãiaÀáY2i½Ls×  K€Ípo¿(ÝG¹ÃÚѯŸ%€€F9`´aû ¿WhÐX.ÁI¢©è¤¿ 5PáÐöfâ)ÝúŸsЉñ±ÃÔD#õ40* SDt¾ì™ÑÇEŽ,Æ'ä´®v³U shJrX s¤‡Ô^aÐ’1&L‰xãí°qY½:Ñþtƒõ®—WxÐÊÕ'XßDé`ArôŒðÄØ M‡ª’­´MxÏxÇÇžBò%'êàz@ªöQžôZ7Gr°!IÀ…Xw>’¯i2+c Â:z÷Ù±ßYÍv‡)§¤ÆR6,É{§˜‘éZIú%ǵg{¸(P®ž»ÓU?¿\Sšô×iäVîàæFzx¢/ø,X›F"w{1Az:ÜÚå³6ÉŠÖ61;fûŸwásˆ”ç˜Lyä¹h©ó¶ÉÁ1†k»¤kMVí¢Áï¢úíåÝQˆV}$¤Ì¦ÏöýF¤ RóÚÂ^—€û¾Ôø‹ÓmØœ,m”¥ÐZçͱŒñÊ ç×[G#10Øi ÊÏj¥ál¤&dDŇD;·aü\ˆkó•8ºygú™e¤è‚äNNIL¬ÿ’f0IǾñ™–Ty²ódbíÑ V¿8hKÍÅûîíÞ›§Õ—îQVÝva7ʼnŠô5@nãA™VÊí¹Ÿ6ú(´¹•ÑA«uR9Þv 0܃b ÁÝŸóÌèGHd8ˆ¬Bı¿Ãé?@ ÞÞ+^ZEä:œQê?¥QÈ(Ö1‰ÑX¡Iù2Óe+¬ãÙ °e„°§„° ½lˆs`ŒÎî¤î¤øÏÙ$ÏØÏnekçc*>g08|^|ÆEÌmö>°Ê.ÅÚt<5\zÂqÚ×ýHž•íg¨'$â¤È‡²r‡ëœ˜3S\Ï s­ÙägºA²pŽTÄíƒ! äa‡_µ@²ñù_ñ$O\¸q¦3›ŠsãÈV¤‘ î†uQoô~P|¥™ NæcÃ0 ÚLb*±¬ám$q¬nãåá0Þ©kóXQ?vh߯¹2ëÞS¿pÝà™<* ƒêÈ# †Óx0Fõ…K{Ø!ÈàæÔ’Kµ®`>¾‡N,Õz"ˆòf—zQ÷à†v [ê ýØÂD¹§Yv®ÏtPÐé "1ÏUÕžOŠš›¿Í ª)"ʉ9kõ©ú4ªAêa6Ö=Óâö§Ø0ma¼ ¡×†}ƒ³ÚNÚróOo1ö‘Žª™âUú"5a*‹‹mš´ûÈ„ÕV ­ñ0&¢ÿnê^­Ø†sã𨑳AÐJšk±tϹV5þ!–þnž'O':ñÙ ‰¼ëõ;¥Ö×¹fKž&Ú­«»59ó8 ýPP¾/'¿m+8Dz~—õ},!½_ìFÄ/¦è¬B¢F>à¹öm’%BG0uÛÚZƒžЈîŽîäÛL~ÛI5Õ#Ëé(ï‚J¸-{´Þ«)$^v¢#î³øªÈ”æ¢`U”ûÙÛ'™­i0²ša®»ÁgAÄ1ÞUê'ͤî$:K¨ SD¼öô…¥µåÒ›ƒR$W(¤#“Ÿs´ ™z`à?^Mè Ïm[ýî–H•èB þb¶ž¯^¦†!LÏÞõN¢x[®«—\UæO[PIظS«ß_w?3„¤”¶,cåAkcÐFÞpìÁ„þdç¼sõË^¿šo æ'Ϙ&yD@Û¤7X•S& 8+`¥³º––ÛÔ uÚÎΦÁ"xï‰X_ʃ7]¼e\`Ê*è CÏ$§#>€U¥Al* §_iu;MJyú†¢h¥wÖ¾Ë Ï Ñ»éÑ­^í”q„¿)‚Ø„j!Ð1?Á‡4¼ÀàüšÐ¿d Å´2>¬™Ùtõ5ßáži„#´ðö=.5—¼&¦~þR¬¸¡h[ ¬FÖ¸Ýðoª®BÐöLÓxœµBÐB];ñtNI_k°¦i}kÂd„pg­Ž’Xì ¼ µ‚Y[P>@$ÿD6Á(¦[±1”‡jZËOöÇ 9` ؖÑ\ºp¿#ä¿Ó%ú(Õ ›mz´f¢U-À5ôîTÂ}`Í\Y*†°e—j‡úkÆ]ÜòêØ<µ)pä÷|«©ÈI£F𿕤]ì«F^b¬Zú,ã‹’L{u?n‚4ƒ¨Ìmá>8x¿#ËúZKõSñ¨€5f³6ûS9ÓN5ƒ¯jÇåM“ÐÑ&úSðïQC“Ê‘J‚ýt’Þ)õéæ傇Ö$-œ¢MíEj¶ÉIKЛå¶Ï’S嘰“-z—o•$~<5LðkÑW€9d&ËQå.ŒŠÃ„ª>¸i0îÄôr«b–¦;¶Z?æ$ù‡«´’ô—jnïô<ÛDóu3(ßäÅõ39×ÄŸ&¯nk`< ™ª‡àݬ0ú´N¨RÇN:|w>.h^ˆ|lª V¾[·"E"±ø\É:.4Jýx[¬ÞÝ“U=_ÌxSˆÙ:«Zv§]ÜʈҼ}è‹ÜÚ´`ì8ÌÙȧÇ3’}D mx/X“ãK;üÞ·þ2¤÷ „±¢ž]³ˆcåö¥~æ%@½ -(!©.-˜†…ó ›œÂBlëî óg”n¡+z³¬~µkâyáü –ߨ̿ÄãÐn$UÞî¶Åp¾Äy5*ùH:¯„BÐe²÷;ªïÌu$^b-GqOÊ¥å£F¥ÙB™/$Àì'ÓÙ×nZ 5³§Ä1D?ŒhlS¸ÀE’zŸKH)N¦*$€&oöœ-ú1T²à¾\î3›Ð¡³uùË=`—¤!@ÎbÃgËÞY’¢/å­,">¸V¢¸2føKþoäfíéØýJªvEÐ.±‰U1uhVí7CS鑲4»>îS}j†º=< zQƒ4`–¹3~ $]ºË#6hÞ…‹Ì*¨WÆÿ[¾Šš$]óå¸'Pk SÁç—cûx ×üézÎ9°Îs÷¿uǪñˆÄ”Fy‚Bô™×ÔkUW^hÐÊÓ­ÛŠ†¨¯ ”åÑ“ƒ²ÏÅØ¢ä÷Hù–ùqS>*ÂÕšÆWR{›úênmuŒžŸàÐõrÑßBÈ ±(†²Óò!.ž-ª: n=œä”×7E{ Nr-#w¥ l ôTö-ñúSû^™ÁJ§ˆ·YÃWÑ)g¦)éjUE æï!*9,ÍpèŸdã¸ÄWýÙC~ X/ÅXE¶î6œBÌ{½Z唘¹wð•2‹qW¼m‹X™Øð&‘JR»²Â¬_Ãô8åg 0X_û€¢oÁƒìØãDØGV‡ÖdÙI²Á¿"üûÖôæ8’ÎôTSôðE€“AEæ]éϯÞÞ .¤¨¡½ªö$ë„9ÂÍ&#ïB,tƒ¯7~öHàØü‰ˆ#]Ü`òNë²À5ê›ëú¡.¬áJ˜÷dxa±GBQ4C¢y-|,΢֛^uðúY†ÙÈb4ùÞ¿ÂÒÿÿ&Þ®”Íüêˆä÷Œ÷Å•‡--Óܸ!îìÜ­”Ž@¸µî5ª³¬„ÏlÈREÇ r\ÑNæ¬Ež»8#f;ž³~G Ee7u´®AÑA`ú~Ì@îhåšÇ²8„Z%8¸ —¯èxúpÛδx¤ôbRç)ÅoíFŽ3Õ÷¾dŽ ±!c‚Cò¹þ½kú©¤¥x¬ïýžp-É„\¦¬êT‚Çôªd¹kT¶Î“ìûêÁ²Ú@Üìô³ JÊ;¾{×>ñþOäAw R)úÁy­§³x]“‰!Fèè «µìî´ù‹@rvÁº/~.o°xÀª¿ .B𻼓%á’»§)áyƒ5pÿ”o碖eî!úœ«Ÿ‰ä~Sã¤ØL&¦yÝë:yUì¸ÎBb¡¢ñç—;ÍQDUHAöhGéúãÍ®1Àà[ÖÈN gë¨ÞÝ—XŠž†ö"Ï“äò2Àû]ƒë Ì[ckÖcبná×oT–²¦º2ŸOhÒ׋¾+Î%6‡J+ÂQ@½Í6€8c[‡¤€52kDŸõøF‚ôt+æüÿ cPÔjb/}ï”'–ƒð¶þŠƒÈ™á_z:üRgi.¸XXÇìË™*ˆ¢†bÿù@žH5ÔÔ.»ž8âCܯÄyé[á ²H(ȶ[„Ì9_çrPY èÛORÊ”J”`4“ÂAÝ­ÛYO ³yÙ¢½£8œìE÷ÿ& ik@ YõÓ¹m ­Òº¥‹¯©UC~2õ/XãñØF®Ÿý»mäA~Olý:¤+ðÚoͲ Í |8"¥{Æ5È@våÃŒe#s C‰ˆGݬMy²^ÑMzÏEeæP¸àjã"eZr?s,ΑU—œ¢êh™ä¨ã2@$zå¯×;!W‹ …bέ¥é´°?ø3nƒoî"F·z Ò"ÞÇÿC¤ŸqvçóÍc®])-#ÿr ‘S€1­UTJްÁo]ë4W? Yùæˆ^­ëon>fW_Le»j¦8ˆ8ñšõ,ˆÙèÊåPG™¿>C§Y0W³ƒNplyñ–ÖN£N½¬DÇÈûÞ¶ˆô/Q.à’àSú‘+ÿÕuê»ï>d}xð¯/´,G§];$L°¬r ¯ñìM0ÓO®r[‚<Ék,ˆÌ;h®ˆ¨x­é©q&õ cÈg"‰f; ÃMHôÿÎð||¸áÁµ ès&¬™ö«+:Z,cäûX€¯²+yS·X7QZÎB˜¶)z?ÌûÎý†-ØŸÓ8ùZÚ¾f‡%)ǽÀWCZÊ-íÔÙaKD“€BíD[Ænγ¦´fpâGï.a.‘aaÅø´EUÑRùÆ5H¬èýFuƒØ²Ôˆüã 6¯áÜ:a©ÓOìØj¦ÀÄÑžñÊt¡ÆÁ7³;»¸Ü ©_‡E)PAÑ™o“¤ÝWYꃩ!ø²=yþqZJ<¶·g_£}kaО×Èg²ßêz8 PóÅ{35úŒ³(ùÖ‡ öÖ|íU鼋£Ç([7Œò±c^6p„Y›RÕë?Ó§¡QF¹à ¨{Æí5ʾ Ðø©£Ãñuš^Ñ›eºšk*²6u„ÕÛyŸÀ"‡`»™ÝΡ醰°{›) /€ÂhI#£´™M0KƯ[à¬Þ—˜tÃûÜ ¡öû}˜_íÆYµvTOÎy͇\øÜ"ÃNïÓm¯ ú›¥T½³y“¾ÝǸáâPòÊYå•‹_ð~4º¥Dv˜Ýç© ¶f©Ç|iRë¹My§b©@K  ñãËC]Ĩ½ˆ‚¨B'»*­òÙ” ZKº]-Œ>þÔeöL6ìy+¯™¢CµÞ &ð/%@ǵ¯+ʾ3¿kH|æMútLú§¶ž)P¹÷÷‘j·£ÞãE§>œ;÷;^‡»€Êy&¹‹–EEV kY(û®=Ìâ쎦‚¿xØZ¼.ok¨Ë*Ñ¿[ùù°ú†  Y­{]>Nc’K3HmurãQ†dBFý#¿ß=ŒÁ0OZºzDªôkòNÁ†íšÀ¢[Qžì¦e· ‘Ë7§ÌÜ^–rZQjÚùFÙ\¿aŒ‘ÓrË ´Šº#"?sdÞ¨Ì&/~ÅaÔE“‹L‘Üw+ Õܦbh#ÙúÍýÅ•aÖÂCW3•í€Å¯àN™mM¤C”Yyq(/„JwŒÎO»¬ù1µvŽ1{;LyƒÆ¸¸ïÑÞ9D„a~h¯Ú+8l/’Z,žSÞT#àTP§ÿ&RÛª6©ã.»Á”ƒE6dùègª*ÓÍ Tuu;þ¶iì茂ÓЪVe‘2âiì¦Löûä[°í+†Á«ŽJú;â9Õ.3I€_Ð Ýšh]nBú®¿f! @(¹x49A„ÞˆV|´×þÂèQ)¡Ð-Èç`qzÛ0®/­îr–ÏfQðÄ„0"¯ë5©a„„vÄUxX¥/ÖÚ½ Âs>>„"áÓÚriÕäÓüîÌG.9`õk…)’k—çGì!îú³þ¢à~:e‰÷†í¢br06ÖîyeBJW0vÐegû1|µ´•<ÿÅFñÏ¢æ¼ñd^,`h5F.©¦ ¢fäòJØO©Eæ­µröu]'0ߣ´`š…Ьˆˆ›‘ëGÝÔø§Þ3 ¬ÖÉq}aS®¡¨µ`òÚ½ål‘ÆqœjåÖ0Âf’Ý3MC†Éÿè¯Ý"ëíç<ÔB´¿ýâP>B:QIRýø/þåI€i(Ó7ŽÐ@Â[âEÍ·ÒüUhå¿z’ìçùÃ)öªIÁ‚Ÿ»†&Ì©ðó)>—2ʓѾ„– qH¼„&­¥8¥– 7š‰;™S’Åk2¤6T$oð 0ÎtÛ×öa¡ˆ³6’ò1^Lf{v(&ji8\Ì<FË7 R‘A¥Ñ?“&ç ,±I@Ž›¼°p7!˜gá¹kÕéù p·&/ ~‘ÏpélŠy}¾oÛdvXîS"]N)Ù®ˆ Øc//b1NŒ×*ÈEMê2}>–n …'¢¶HÀ¡Xú1^üZ;bÄ·€áòOóv<ãç~3ñ3Z "£9€É›Çš§Œ".kè?Ç„ …ÜmHГ‰Áޥ很‡ã¿ Á³QF…–4â6…îÝ)é„©‘ƒŽ™û¸Ûn<ëŽá°ÉÁ:¡¬k¦c°Â®ž6Õ’’ÚEÚjf@|=Ä\j®+Ÿb«]ßÓƒÖÍ,žÂcâQ¤eê=Õ»ì|qªí t1F2­Yäx_ª?Lè8ŸÜ‰;üU‘O<~”zÖUÀ\[ÏY½™×[¡#’> ^½5_²Pî:c¨å/¯>KÉVkÅò) 6ì_‹E-ÿ 'åðY;q„ŠØÝ¥Ì¸i ¹iõ WÆä¨’ò¦'Ä×V!¥áµ£ÔèNµ˜ÞD‚8¥)k½¦ùîºõÚEþ›VóÇôžâgíÂiÂgþ’ŒÊŒ‡¥°¦5æ>)K—²ŽCüÚƒ¼«-ŒãSà7:ÆCršÊ®„à^ÛDà/oص…!®øÑzj’„àÈAjþÖW†$ Ý0ˆcAhF°7Î 6W SN}ù{ˆ`i0žÈ¶Æç/Ëø]ÂC×7F®ä7[•ñ¨ïävª}?Ó6žú ·Í£©+zñj‡¬Á©£AóžÏJëûåI°n½‡ ƒ@£§MTuw¯‚Î;±x иÝt¬qïhHƒXcµH¶Èóy­ü†Ì}Ts\"[ôÓáöä…(ò• þ.þx"Ú!ćéØÒw§OjÃ\Ÿ®ßM4T -ÔLi‹’JI+åV:H*B骫ïzP6ZSºs4Ê®-í0@åꡱ©üØÑ[aoµ²\ù£V³¸îu-;..¤mZ63ýѨøë¶ ÔÐܶlXHí&z¦ Ä“T hBì=Á9ûäVàªêæÍL°l©UÞðK6¨™šB$£åÞ=Š/ȬnõÕ<\ï^òñÍrîe}ô 8‰Pmæuõ¼“ ‘mˆíçTj’Øj"a­µŒà Ïf£^þ7oµæ)ÍVœ{P¤­þ*О³1¸…åŠYÌ$À\5õ¶êo.lƒû£H!¡sünº†§à…W”ü<.ÃçÓØ¿=ä 2°õPÌ4]!/U’²ÿu: ¨²áv”©›Cw¼‘:Ý«º­)¯8ãbQo©|×/â“??@W£ªýCt‰¹6lÜcVR‹|cÊœb"pC‘E•A)aLüµƒ¯”qêkY7æSùH2<*ÝUz(q¨‹˜ »R-»Öç}ßɨOüFbzm.ѾŽá¥/%w»§¦ § q5 ס ™,/½~¥-T ü"@I±º9ÒD¡æ©¦;¦EÐí¨”8×U9]ÖCŒÏVP™áËž¸ B‹ÅÇ:›æ£Cs²/G(ii±=VAñ5ÜW[d´ “Š_¬qn‰×'Fˆ2©qÕÚ‘ZÓ)FV Y’^ ·dKß¡?9YñšÝÂÁP‡l%S7a£`®‚æžpÚÕ)‡åÝD˜œ²àЧŠèÍï“PJûeVßrƒu×Rdl#ŽÓç¹56 kU*žÜ``I‰{Þ4­ÈSróà=¡Ã›b3ŽãàDa0ãlÛZº²}†ƒ˜&–z¢,?¸•Xä¦=!VK‡Žô ü4<Œß.±<‰\1ìˆMsé~ðl¶òXéH,Í!Ü[»\M±‹–¯F}•q.#ƒàMÞ­Iª1B“ú‘XiåâÓU§íZ­›é³£cû‘í jîA€ç]‚-8 Sžì¦[î>ƒþŽC—©C³­Ô1àxl5jñ B/°Û £EuÎÍm@жpÄàã+z×Ûô¡e/šSSç[^—qüS¢›2:ƒÐ`áH]bu¡ÈùÓdq èòH˜ôlRl›% ÞÅF¤íÖóÜŸ—½¯†6z·ÇŒHeá Œ†16Õ4$S_/å?âðàGAäñÔ^Á¿© ÌÔÀiÀˆS°åC÷Ÿg~ñ+ŽRB𮘺ÂF„ât/7еC MÆ\¸_4¾Ü)ÊŸˆgk6Ψc¡lHpbSrüv'íÉ~.îÁ"igD «l‘`M‰&«ÞÅ‘ršóø‹ÅÇÀYg »†­:ñËt:ùŽžV8´YÑÌ÷ç®ÐîÐÖ_„©ƒD–ÕÈ¢4âŸfè)£ÊÐLG_N·*¼?z obß„§i&° Ž‚)‚̂몯dâ})ÖyîÕꚘ·‚È^çÙDþª F­†Ú2G³¡¦¾5Qº%æ­‹…Û±ßÇy%ÉÖž>ˆ|¹Ûœ_]Ñza‹¡#Éoy­XÙû–Ú Bé»]¼‡“Y&(ç›c\h#/ü+½ùQibªâWiPçy"Y9‰NÉ]Á.pz…†“Í·ã°‡t,™!ÔTŒ7‡Äo€ø°÷ÔXB#ŒC}‰û}˜íTÒ_>ƒºæ»V«¬b¾5åÏxXRÔV³l(í—J®>"ŒØ~>éÊwÜT¥"ëö¸3d†â!Á}êXšìʈ·/0^¢=Ž¢TÒ‰C?Å)d, ù`Óp"f‹Ùv¹hZ¤ž¤ÛTL° F½<€ÛÎŽ—3ÊgÉ'ÿ­ …©'êSáù û~Ø~ Ø‹Ÿ#;En'kŠr´m;¡(ücêºøËòp0ækˆ%ä+æ±6m_zVˆŒ†=†NkƒF޼¶ih@RŽVˆdÄE_¡:‰C‡z¡P~’IЬ¥¸¢Dø`ì˜öòZ¾W@üÂôˆúYÒHä:©’”¢Ï_ÄÞbWs²˜Y¦ëѤašU nRÄQƒŒßJ:öºñJ‰mõ½zµžÞM»§}šwÑÿV‘“×Aç( ]=—µJ¿Ð*û‰|%­é†¶+˜a ”! “%S™J[Å-Ü-é¯ìÓùÖÓÀºÜÏm·lÅlãÏ!ê ¸óÓýqÔ2Ýp1ýÕ+âgž|×VC#i‡^(ÝŒµAìjefþ_C†ßé5óA¹µÄõOV®¤„”Œd,Aù¡ ̉«I 8€åDJôJ­f¯q.¼Èô¹¸r:GTfg»ˆ ²·kŒÎ¥A[ˆ‹ÔËŽDZqI‚\y9šXÜS«9i.Ÿø\vhžrå}ñÊ Ó÷Ý#4A XŠ")*&ï’÷'k QÛÁ&©ÝÄËÌÈ‚(}°<ÈÏ­å&håÁoß¶e¼tÉw‰‚lÍó?1Ÿ0ÊEòd%¥ä…Tx¡iñV&&åù˜²I^Ry0&m¿;^OR„µàû©>¶*òF<*R‰3϶‰˜Ž}ÿ‹™0æIA ¤ Í‚-gæ7:ÐÑö Æ9eÝ´A§ h'%²Í×,Èz>ZÂ9ù…R ¨Ka½Ün" ·v¶‰¿.ã«LnÛ3†ú¼Ûû²Ž¥$Ø•œþ¦Á—|€×ƪ¨×«LŽV¸“N,BÑWZRI‰·ëHÕJ¦€¤/ªM~žž6Ú´Oauai&Z⸆!O®³ÿ„¼ÏçN·iú¸áWyF'ì$àwH³ç´v€…‹{yWï2§;(rQ¸[#¦È5¿þ)ÁÌÅÐÜ“æþ». š>¸=ð6ÕanvÿÕaXvÊÁã'O¥Å O˜Y^!-çü˜œÞnDj¬¨«L¬FÄ2Ú²1ÃШ…η5î¼®˜§Ý–¯ha=ͦüBa¤¾2%Ú¶y­MÈꊷÂtåC†ù`üé©«ßÀ°ú;Ž.^ˆ`~v´Ž…“Ô(ªªFjSæd¡PÚb©=mNXÐü‹ *1[p(燬¢œá¹ÌžÈT5£øgÅ&÷º,ñØÇ©`>ró^A´­ ÓŽ}ºÛÚÿAI2)oœëçoAª‰Ÿ¶6–uÞ gáK·ðyº„ƒò ž:>.‚0{qg´Â¥(µ'S¢(S¸. Ë!/Úe·¿ãa²vW}ÛwÚÀ™{ÍÌ3Ê‚rѧ ˆ+ØÇß‚àÙU SÖºiäg\">)ÓÁwáOåú±ÛXµé‘2+ï í¢‹ ÷›†Èí׋ð!‚—³çúP¶ú«,…Jþ#ñU‰ÏµaánÉã9¦¾.MŸ¡ºÝ{NÝ[4Hª¼}Êå½BüÄÐÙGmðJYÿ²•TýZ®[¾W°Ä‡Ê†Çß¶µ øËâÙ6 Q$¶¹·óó"L.1=.AJ%uíÔ;’ ¤ƒB±¬zcædƃ]šîëÔ)>Âê¼ô¨âä$úbõ7߈BÈnÕÙ*:ÿFn!¢0çE<=ÅçsÃ|ɵ¢ »€¤K¼$/ÿ.8ìÚr0¥CE¹4öZõÓí¸Q5ÕXÀÖeÁ$]˜“ ,J¶£ö 34.xÂ4»x­Èº%‰NGúçál›¯§ÆVæ¥)í6ñ%ZåÁФÊ]u.…’m/}Ê™Aˆ§M ¬+mŒµíd«1Ô¹vµ}ˆµ¢ç,} ß&j̪t× Éec»Ìp¤IÃuFå,ÏúüWk~ T²N;E–y ,§„OûúJP1¯,l>@ɱï¨HƒÄHªv„}Ó:n‹ á¹Fؼˆ^^´Ä­½ÍÕ§óMŸ‡ 埴Nò…FÀe¹+XêGž\ îF°ðj:¦n@X¡Yå¡ãXƒ‡ÂYG <\o±³T7ðË9%:+`ñL˜yo^~ v“¼,ä8̶3 IÂå¿*yòÖÀšº‘ì«=6xîeþiÜhã±D°uH¶€Dñ²[oõ|t/¸˜t©:ðÖÜÉÙ×\$ª\[ ]B€/PãL`ƒC„¹æ4µ&ÃϸÜ'‚\aî²h/èkWÊ51…V"“P¬"'‚,Ò/”ä UÕ (¼M Ⱥúç“ÝìHû^žYD20ø%ô”¶ yP3©jpËeúL}†¨–LI ‡Á­N ú½þ÷3AJ¤Q½è½08òÄÕ•¬Ví½$"[0¡-2¦cÍÇêmå‹'›‰Iuü/UrˆPŽC–•šTvO’="WI¬ ésá(ª‘§Æ–A¸_sãätÜ«xã‘ð¡Iý‚ vvÏ’Š'“¦éñ>bÄ«Y féG†Ní{Q”^eFdmœ‘PW³’‹g[O­~C¯4Pòß¹©‹ÈñÞoÒ¹´ `÷Ò”\ ÷Ù=:M+ÈU¿>0r…5ÑÞ´ùóÐ7™éZU„[JÔ/®Áp*9_½nÔ1'I©÷Þ¦=ú–ÛÅâó;®˜7æ©€š‡ÙIö3Ù½ø‰¿Kí‹XuÎÁÿ{;ÞÜŠïD:—áEï½^ 6î×ÔôÛøü cõß¶’ÑŸ{Ï_úÝutrÇFR<Ø!ÈBN‰Ä ·ÑÿÌ^v˦«‚];ÔSKƒkJg)±›¡‰ZÖ¬•þ=¢bÊs•o01÷0¼˜ÆL°FKnOG+a‰¿Y¥®‰ 0så _ê(¬9¢Ìz§Þ­E²€R¾à7l(l-ø“¿›@Oé5TœáG4ŠÛÚ‹ÿ™-k¦“U2õðVÁÀ Ô6‹‘âf¸ ®`>`úÜËð‡Ë®ë£íØä_@cÓ}è¢.ðÐŒˆ*&úжVdþ„ Ù© ü¿Ã»²_àlfÊv §ñëâ(GOsFn*ÍþûÐ;6Ưs¥×ˆ»þºæAQœÃll«¥ZBD¦'É¢ìúTy¦N“•ím¶ãhï ¥òøìúš¾Ë¯‚ˆ_y‘Ò¯7¸.Ù‹ ¥Í޹K–åóÖ_Ìup:{мßÇ^Û웋&С3OîÆú*†•ÉOºœOï@Àì  ˆ|Y–ñÉ /q¼`fpfÀ!‡U¦I"VxpX4@Ë Z'ŽJ€µÒ^ìšøÅÄålа”ŠÉ¤Ã¨ÒP„Úž€òoxµMZ+¥×÷‘Ù%د>Õ/Æ%¸#ý»wÙ­Ò‡©Dÿ ªCåcß:ãÿ£Ý 0”»÷6©/ kæÚW3¤¾í }Š·™ãº{%Dì ¼Ù“K½.ðu?¢R:Ë*]ôm(¼I>°'T;¯â”½dÙÌÔbE_mý’G.g}ÒD¦ÙÞA®Õ×°&¢ûë¥ÿ³´±¦iIÆm2D…3Üû«Œh‘´§×? °|ˆ¦Éù”>€¨fÉD°‚b7eŠÁwT0‘Þý¨ž4R>çÎÍ`†x3 DÄÞ[än%K“”Z¦ð|ÜÍή‡„W¡ÓÞÜЉg¤…áXn…Ál¡ß9cÕe·ÓQÿºõ$ñG}Â|hk£¼êì¡"d1•*L–¼ÌÌàÛ¸,[}FºïئPíaZ£|Ÿcu~4 ?8¢ÅJžX &¨nm"ÆÙÜŒ‰Û©ïðXà &1!µt >—[‰çÎÕ”]Q„eE±½Òžr»!øá|Q_OÜBâìŒ÷›ÊeiN°”'‘W”˜ ®n{XYê÷Ä‹œÚ­ä›gûÃ1o™sr¡©í›§’Gÿy«ásB/2(Ä*ïSZÀ wX]¢å¥Îp—+ãàýÿï±ì\P¾üÉÝ"BÈ%æÉÞdBé½öÑã—·“Ց‚Šë®äAhJFíS¬®$qV@ºñvä6HZÿÀyÞW5^‰õ“.Ã×{#$X˜<¼ܹË€\vÉèœ Öm¥»Q> Ôö­šC”óèp.‡»pùp ù%/ŠÔa%6,Ôx©wª$¾u‰=xü›†çAJ…ÃÆÞãä'ž»¦‡"r a#wJn‚4dTûË뢕h¶pR§®JËQß»´z¼^HÏ­ähÁhz™î ŒÔ_À³ {÷ùü;TCd ?¬Iƒá)¿El•Î㇀ÐD1Ô¼ò™N;úÄÑê˜Ïíÿ4Þm}¢ z3`¾ÍðŸ³u¾³€·R|´ýR‹¿"Ògƒtí´iØÜE AWŒT@+lvWÈ¿÷ Þ9òW’q _sìT<ÑJ—qóŽ¿Vñ> 6¶ñ×…".Kð!°wx á2ãßðŠ€†¾îÞÓQ•?sæ¹ ®éÞ×dj‹‘Â:\è,¿uÞ Ð¤¸±3׸ž£ n0ùØè¤‚cfÇ—U*Øh¬ChtÒtkS¼k²ýwöô|¿y </οu+n(#rAŸjÏ‘‡rLÏêMÔ•ÝÖ ï~÷L‹†p¡ôÒ«¼«àp<ˆŠò+Í$ÖÊõçR¡"`-«Hçã ìÉ;tÚ&vhÍib|'^ùÚ¹³«¿¼8Çç0‚9Ñêi ÑÍðÓŸƒÕ2RX­þ»ƒ eiøC“ï;7;›Ø¶ä´¨ERšõ~(,µOùb}—vuÞg"·C9÷®+ºÉGÒQd]™=mKZÉ<öÐBaíÏR«‹œ¨¶S’ëõ^¢™Œ/“: æâB<Å$,”}ýí¹œjí ò]á‹{…Vj(Ú)go °ãÅÇ ¸Wñs&¡Nïl†)6jy{ “6×gØÂ0ÎÅN:PZ™};ÕDi=sô͇ÑÞ®§#åðG"ù:Ã:+¯od|4uô‹s×#bì¬ò€¹tžÄ“EÓ>Ü æ?”Ô½É4µ]K±Îî®ÒY|ê´IS|×sš…tÇ» æVTSªIR5Q£”º3˜\¹‹¥·—X‚®zI.]UöÐ×_6ýõagÌ+~:ðç]4Î;Ö ?-µ8úç'H§dËzÍî™·fÂ4€‡]×uàí0ÃÌJVîéá·Ä¡ÒŽjŸ–®]óÿ°è8›0n}:{˜»?QqêYh*Ų&š¾+—аsïÊ*¿âă̩Œ¯€±D#C hƒ¬ÌA-|2–8iøçYa=‹å3+Ežê `¥ñ®[ûÒ‰ ]ètÎÍ4¬dƒaÓaò]3"þJ¾øïÛzDU{7W áAx ±3åƒ (âƒ2£\¾{R&wZ~Ñœž¼À2Z–Œù8 X‚$öa‚)ЉɆàÝ«”GwzâcÆ¢ñ¹"kQÀ¤WDÇÞªƒ4Å!Öö^t·g›4H«±N1ôu²òCyX^dzTÃðL¬m_ÎB÷IÒMÛ—‡¢&uMpÄv°Q¾NDŸ$ÜSywðÞÇQR íýú ¤‰'YMæÆ½‰i÷)ᯪ8ÝÄZ”‰ÜŒ_ºÅJܵ½lâ‘h0:áA×]û©kía¤ÐêÀˆ¦€n ²2¿ÅÈî|Œ-ÀWé/<:KÒýýår¢<ø‰1Sè>H­"Ð[À|·jßÙ;Í<Õ„±@Uæä‚ÕÜ›€OV¢¶M)]ÇÌãÕ&°pqw‹ÞL÷çBUê‚äM:ÀE¼¢¶·>;z)Àß~îì8 ˜­b) ñ2ë8ÇPd¶«€Ÿ¥xC½é™ÿ-kE½TI{|‡¹7|‰Š¥¶àÜ>{I§`Y`cèÛè“nðuÂ9UûéîŒw(Ë—Q¯Qv¿úÚƒ¼nü쥠ܶ 1Øð¨™Q†Ý!—N£mBóï*ã`(»+‘«•¹l¶â­(^¸* Ý&ãÙ‡NZôI†F±áÈâ‚oßë\9=·ûi§pïPUùøâåƒì$\#ýWKª><Àávu ã Ιy¸YéÂyJüÅŒ†õòï•3ÌynÞVF¬¯¸=·ÊøÄ €Šk:–—/¾ý³ÁÌíâ—ÌÝÄ ZL¡Í*j¹›!‘%Œ=ÒJ>éL)J§9gï£Òóÿ¿ÉûòV£Y‘0”ƒ4úÌZz«­)ðyˆ`ç—a9tò¯í§ët€J–¥žõ/úÓ-í9–Aº»íœýzƒ!+}ìcâ E*ì0 ¨ñu°¾Þ›TMv²l’+zü*tX'ÍxôkgÓ‹­\,D3"¹V‹Rüè™Å þe•ÚÔ¡÷ÅÙÂÎgÅîÎM Ýbâ£ë%Þ’†˜7G{L£T BõË¡*‚R~E¢q V™®ÊeœxŸut %` ””Îù Ì›©!áî»{Ò¿ ñu§fþ«Ï5‹"禸øÞq¶ù?÷=ŠUy›5}Sw]5Yô'Øù ãmd~+#°Šþ(:3Ãæ¾gç/©í„áeTÿ”å4kÞaéX½›=£¯,ú”XÝŽÈÂÞ©È$uq{“ÚÒÏ/ìMc[#"[p–„Ñplô>ŠX ¸ÔÆÞì12iFgÒe¾82ž¸g ˜Ì ÂCI©º§Í,CÕ[—»ìÈu“h,ªÄ—q€÷â&LŸÒ5”Ú¢ŒBB¾{Þ_“uà„Áô‘qn©¬Æƒ×‚<ا¨35½[g§ØLKm(}ü¼½Lª*Zh™0 ìï] ÑF›B&&é2ÑÑ>² d©qè¤ÄœSêrî[wkÆ.‡! ŽzS¶ðØ„ÝI¾O§±ì«‹Ì¾¼¤^XÙôÞ#SåŽ÷¶g$¹«Êº7iCí'†õƒe°i‚•Ù¯Ôè&_ÈHÜÔ;õ›„n ¥$'*%ÔÒ’,ŽsW&OÉt&vÞÀÞúÖ2¯d§ëF½R/ô;*ô`X*͆AbXÒÎ[Ã!Ò^g?/Á-Ú rŽRÅv‡äþ ÑÈîÔ±€ø°D3ÀÑ!™(rÉ[qÛ1Å£±¹Íïd3¡ŸkPë‡ÃþØÉK v*qß'®o9Ð ïTPœðc€óÝl)q1TXèw+;8ðï¢HÈŽ?¹T;{^ìþz¬bêcÙÞ*Ç’tö÷çËVôüÿŽØÄŽ2‡3$mñyõÜIËaaíDädŠVœåÐî}…µsïà/³¡÷ çFžSKï-'AÅM:c^Œ¼H mhW´ @ñÒ¨ô=„I§.ÑÈÇ…Gè:ÂdJ€7ßIO9GH<…‹ÊÊb5•¯Þ&؇~‰Ÿ9"èÙ¦˜R@}rOôð\I)˜ëGþÚà}#ÚÖS!õ¥Á(BPc$á„Sä­uy–kýH ‡j‘}6S‚Ô×{‚,S“1sgßIÂí ø,žÍÊ>BbN²©O žŸÐ xB÷§[ÎWè×Ùc¯Ðùk¸•2ák5[{e+5kz=×Ûxºé½‹¨Ô·×m ¾’Ñ:Ã|µÛ_ÿSãÃ"W8HÓKú:¤g’oO¯d‹2’7@·ëÀ¥^É(ðöŒ8etͦé\ƒÃÙHDìZÿ–Æ\‹ÂyÙaDØòͽN×ÝÝÉâ‰>#†H Å©…+ûò,e³çèù†·m¤ƒô‹w¹P5 bÜZ¦`äÇ‘n¤3fÌÝkG â„tï® Þ¢°³ƒ?-Ò*]§±²)§™mHN½w›Ë$åÙÕ¸b°Ø”zuº¦²o λbCgfÖ<­5¥ê{|Ð=¤D©S¯a¿ÛþB9wmÅçÎ9­aéá3b RkK!®güñ¾ŒDÓ_é²±OsOZò«ÿ•§øÝcÒ‘Ì!2—(‹ppWGf5\¼&sÔà€é[oG\.f¼u>éPÅt¸‰;Ã8õwùå[`pc bʉ‡óðJíRj üªG+'4g9þÃSXë}±·ˆ¥÷^Yæ±âêtÚ@™`¼Ü£›EÙF^”VKÑ_š©BZ0î©="OÃÉo¯¡/öÏý†ªÑÃN 0Üx¸ÏNJçÞom¯`¥ò,×w„¨& iQàY°-Ž˜mÑkÐû¾Ê¾¡Ÿqö=Lܰì³Þ9ýú•§µkZë¢Øq¼””€«µ‚ÄÝ3Ø.⼺ïçMÞ8Úû<÷­,Èç ƒ Fþ á§äî˜F``"GÄãçÔ„ãÏ{ù \o,Ѝdç"ðzÈÚëóÛÞB_6¯¾Ãnês×MY : vKÓëiM+²²äõ½ÝÌ{÷ås —ãæRúE¡Ü¯k†ºúšBÐ Û †8.(V†ßÃ7œ¡ê³Ì3ÕYçkcr¼åNóúËŠ•¼›] …%¥vù¿ Xè÷äúêƒ*-îäBvç †->ø+êþ”D$~ÚB—|Õ[ªü’ÿ~¯Ò{²½ÏÏvul_)eÕ¥b¹JØið,ðøÑ†=_ù{XdtJÑŸÏ0@¡¤'4'½‚òcU‘Û™‰ál0:9Vp§;´MÀ[!Î#ý݊ךÛçðëj>¦¾¸¶©ÿV`MPq> ±»¸ÑhtIê(ð4__1¢á~°$kf³rÀ6Ù,h½ö»×\Æ`4ÉYìdbíºî}âþ)ZcjnÇ ,ýžvªg}‰.èU ã°‹å÷ùaèÉÏ_ÃFÁ¯ªI%*†çf5uïpä µÖ¥ÈÉgóó¤V“þšï äqp+öMTº&ó{Û‰…$$â‘r G26¥8pž?V7Ùn;–þ{Ñuã•  øT„í$ ~àŸ/ËZàš—57Úq‚Ar2Xˆˆ#’ŸLü?¦æm… ºØ³–ÁG 0lE”Èâ/h ˜ØƒægX±yéÚ.ƒèõ–U²`Ÿñ‘©S20w÷f2hõhÛ¤³ÐGÇýг©£Bá°íSs£ÇýüWû%TÔJÁˆPËÆóÛÓEüú, 6 OžÖ¦š+Ÿü9GÿGÌ(µÆ2ð€)Èâ‰ùw¾VþÃøYBDàŽËt$ÓyJ¯jBàP¿ °³·Ôà˜ë8ÊÞ›o–c~ˆwÁ÷»ÖaAY¸m=5»j­Û4ÅÝöå±ß½Xlq×®e#›€vÕ +”’eËK¹ÜÝ¢©/=QÏÈObFºA¯~3ñ¨ÚnÜ¢M-1ÿÚ¡cÜÑð³Ð€Ù»=ÀbȬ¨É¤‚Rl¾’ŠOT³Ëj²"”Õf•…æ:¨m‘Ÿ$wÿ×x_­iÓѼ ¯;È´ÖS¢P"õÉ[ßuëƒ70´p¿û{eî[ŒÆ¨* ƒÕƒ¨ ªð%÷Û¢¡ùW±BÁ|’8«Å¡EÒRëý¼ÛJñY¨M2耾Ï>\x4¾l´` 6ìKMxòÚÏ…SaŠS§@p¸epž]`±z1Šîz_žƒ›²ï›ï„ñžr˜›¦¥å€*Õ{(Xxˆï­*a™‹³ìpbüøØ’¼J΄¦»€tžÕ³·òž_ÌÃS§×âøzø ;œ¡êj´;–iÞOïh¥þhÏm͹㽢ã«é9·"̤ä’;[¤ZGäY)óPÀ¾ÿøöåLÒ”º¯¾¿gÔ±úUQ?y•†¤Ðµ~­ý¤¬jý¼8ÉÜ£ d¶Ùõi›;|‰+úŽC”UY¥©‰žæ,yQøõTÈdP n‘¢ôz<3‚`1þªŒT,/§<Ê€›0;‘šÆz"UܤG¹ý?迱á ¥Ê=¥ÔŸlpæÔ(ˆÿL•© 5N -,Q›p̼ÏsQåî8Õ3öÉír®w ¤ž¾o8Ë<ß'•rrw²[Fͤ[l®sÏn=ýJïXävÚ5«T[C¿„9_=šNF×Ýv`u¨u9žf~p¯Üóû*#¶ìßìèÿ‹Ô \Îù~sÜFÈnžÃ­ù?蜉N¡\ýqufOò«ä7ó©L979åĨE­–Rqé~ÕU²cÕ©§f‚ÃýëàÐ×s¶¥H4œ§üëÁr¾ AM;¥?¯.yÒEÊÑYmæ‚bŠ¿iAN,Á³2)Æç˜‰Ìá”<"¾(ÑB(>“XO$ σÿ»ƒËOuÈä~mJê ɇöa‹wäµ s¢³ÒëÀXÿ8 £´`±r·¼q>Ål`JZâ= bZZoqn²öpBdp©ºk— [Ú×oGQ¾|µ VSà“-³MçÈ£o²ƒ—” -·â°†iëY§ç¤}¯Jqµ%¶áJ ¦œÂóQÔæÒöu³ÝvåjïÕ(+µCÍÈTâ›Pseš¹,ĺ}Žà­©;•1ssÏ "Áa>q¡ö5þ 8‹ü€'ú¹nîæ‘ŒèÌ4EAA9`ªÞ¤ˆÑõ7vø¨]Ú”Aã¦2z ZÁ¯¿ÝqIk¾edÒ•q)£Ùw髳øWϱƒz°O&<&‰°hqÛ)æÂ¼±¥IEѬ4Ήʻ‹°9%˜P{ŸÀ>ü(-´ýØdh³’F/+/ÀÙÅ *¾ÌJƒ %ÅÆÌ‚W ¨”æüè.ÕÖ6iHlV€Cf˜k68À däL“€êD2 y]cÛóˆºÿlšÅÀ]Ø }­ómÙGtK±ºñŒ–C‡Ù¶r¤Ô5o°»«Õ\Ì.ÞWÏy{(]‡*á\²%(PÓˆ¹tªöÞeÌíX¦~:+ø,ÓݯÁ‹QQ¡DykÓXx'³/ÔÞ#'/ –!±øm$àø€QšWŸ¡Ð:—Ã/ƒÆã/b¾£þ†ŽÉ9ªÜ¥„üjDšãè{kÛ+X+,³MnÈ´2v&A…Å ©…÷)ïUu\“£E/ZG¾xϸ½öZ(¯ŸÈ±þPI%ºÏœ(—?·Nå?:Ь¬m:‘~~@×Ú…õž[±r`@,z¸%ʃ׭8©wsŠ;&¡99Êvèv‰5,m\U¢øÊ ¼Êwª•¹ð“„¥MÿÆŽ™ÖD ËÊ¢Y¤l†ÁLÁU/ø2ìÁÕâ%Ú%o3λØûä”Jø'~¾ôðì˜ìy\ß=dYì± ˆº"ø!Úm1O´4YI«7œ‘n-‚t5´ÜÁ*%ÂÞ¨»š§W…~íÐ×o€ MŽâü–Š¡ßõ‹æýÍ»l+õ¢?7cÞãÌå"Òl`ÎX€ó oh댤ýaXªªÊ-™rpã ¥T–p¤æ(¤ßLLOÈÌ[‚¯³¢£^Ȥ2Z¯ÙØJ—J[høC²ósI^4©ü^~EÑè£,T Ý’ë*“ø\>˜ì7Ím~ØbLE²2ùô.# ZŸ£; ]å?öâTKÁ…O½® ý–òhq P»˜©˜«£ENi·Ë»ßþd„•×–9R˜bEYjðL“L¡ó3šuó­óæŸRCÉ)çO( ·A#¤{êìæl‘[¦Ïÿo¸‹‰éÿbÝ^ÙÉKG=€—Sý5ìÏØá.×Nµ”x‘^À÷FçBépþAV˜Ç´H~.ú°ábøCwÔÏE¸Ð~/þ&xέ"ßWýŶwåyˆZ&·©–YZVkZá«0½Çl=ÐÑ5oÕÈG0pI÷ä Ç,ñàÂNJÎǹ0ï?wÑ%úz´Á,ÏÜÙ„ç±Q²1w)e"4LWüeyï”?4ÅuøŒ9¹]*†3õ)¿;‘BWl:hÖëÇq"ÄŠ‚‡B²® ËõªbŽÏž³™’ÿ[QÕ¢`ÝÛÕl‰7"»¶yz¦1-óDÜÅ0ûî” ä:G7Aõ¡\yÈvø% D}¾ ·ºEQŽ\ª‰â‘øß3Ö¯Í<¿:síТ¬¨M2¦®#*Ëð£D²µf­ù¨]‚“åÑÿ¤ÛψX,*PÕº%‰ ‰-ý Üf?wuy‚¢½Çåã8ùxJlô¢_±-{T?à4f‚~›R[3k;nÇÍmâ~nMbwÕ r20žbo%›Ò$1”‚9Ãö`Ü_#„K ¢“Y7*þ®5‚v ‡ÌV)Ñv(ö:SldöGqÔ eiç¦}1¤#Dúžwž¾ºöZ>Ý¿´¸Và7Üÿ»ZyÑæ²å’\|Á’áßùmFKKÙÝÏÂIÑiÅT>L©ÇJ²×*[ϼÕ=ÆÐßhB}˜©§5. ]QÑ"ýÁ¹[GnxCöõ˜¨É ³5Î*%f¦r¹OúYï€Mjˆñ÷ù|Ãm€[Ã|öÉcS N¼ñB€ e ~}ë îEÚVpÞ%Ž øƒÚ KÖ!J†Ç¡R4É_“±Šåw9×ÐÐʤ½úLæ-÷÷`‰ã)²]òž2ûRägæYÛSÊú jFצÆd!^›&ç̘T³ 5ªœ—RÎ"„d[† ÄŒåšk¼€Ø1P-A@ŒØ`tÛÒòø®^×XŒ7#Wí Å-XÕpŽáišÕÙ^³Ä¨ÃI8â½æTÿ W/·È­½­ÓðKhIÚ&~3Û ^§\ñÖƒ£ó7"t¿«˜«9o wÇ# ‹¶HýçP¥‰,i–®IT¼ªÈëk'¾µXèBä†kÿwÑï ºJó~ºü8'1–=4ÇŸA4–QÑWzêj12W½˜@¥ÑÑÕ²ÈGg>ÔnÏ}3µT™U4ô†³ej<ÀÕ%l¶Õ1àdçô²q )'¸lT_–ü£HÆK”Sîæ[øÜò“VÒ=ÌWY]^œxçÀll 1ë¸7U'åÕ¿®ˆ¤qó7¬ æ­¡¨£¸’~A6ÚÍŽÃm$e"Tô¦eû_¿¥C3ÒêjvïqÛ£\§ôc›0cß·úõË3Ÿü9GÿFÎÿ ÄóŽÎ‰MsB4EÖ÷1'ìµ6wnRó³L§Á2ÂÚ¬€hþJAAÁŽä%YÀoBGJU@‚‚#—›Ü@¿úâз—‘ÖÅJD²a?ý4$'UÆu½ÊH²‘ž/WÎd |öKÝçô1A™-Õ¹“‹”%k1D‘Q¾”¥Ç,cܼF ·ÙKýXýÝ>.Ò…|ÿ3’~UŽÛ.zusºÚ¸À¨Í‰Ú¦ÉÊ'÷PÓ¶tm!¬“Vgø¯7Ú;ׯá m'ö³¢Í§»ÚÞô˜'Ñäcب¨0ßp(%w^º-¡ LN‘¶â»“gÞ™y ¤W ÕÜ„£ø9D³¸Í,2òs¿ ÔøÔX…ÕïC”ùKÑ4ÐêB䘃xg IpD ÞÔBç›ærüUpˆ–'>Z7¼è:QMa">N¬Ó}zߺ`ëâ«ß@k¾;o“V¨—ˆè´¦7­ÐŹx¸lXkÕïC¤¿ =Qª›ùK#ÉbM:ò‘=ôãÚh¦£AàÓÌ ·…ççÃÀºï Tu±#OÇóa ÔqhšSqDá³híWÃØ±a~ê ²%3op¯O5„ä}ªê"\’sÐcA!¾/}oYÿ¨ „V“Êj¯‚Kžµ 0’2G=ÄÇ ª:>ïW öøæ—£øâeb…s$'í‚M] æ‘î–jG鉯Q:â>Z#÷ÅễëÀQAÔxéb“?«F–  ÷{`r}{‰Âf¿Ó 0+üL¸1B“îµI¡O‡S±m-xÓ–o(ƒLͬÁÒtíVÛŠoún‹! ÔÓ2úpg ¯ÈN›ò ée+œÍdˆcpßü¾JO¬1‡A[=çr36‚Wð–)užo0íRßq¾“qVü¡b6¿ºlž¸™‚Ÿ_ž†yIú·p°•Ú¾ÃÃ(ªRß" qÕŠ¦–hCÀæ·È£åãkÊËšX)|«p2.©dkÒ0£øÁQ³ÈT–¢ÉŠlþí®…—êtH¿±•Ý?ºƒ¹Oê•ýb…¾=DReÑK‹tfï¿Ï@wïÆÅKˆDݸˆ]ÿd˜ÈhþS—áQ3Ŷ-ᇴ1mÌ/¼}‰{þóÈ}¶Ñ,NYW ÀÙýî4‰ÃI³…ÖGúcD¥ãͽK‘ß[„ÝÔ|fr·íþˆˆ¯:½ì³?WŸ·É«Å^^¿ÿö4Ò^ô޵†¨Š= wƒ‰Þ¡g¯æ.m~É'Š˜`ɹA-¾Xב †C0 ïšÙOwrr.ÕÖK´ÁÏŠft §XYR[[9C[iÀ<“*5È[–Ç22 @¦˜ëŒ…2çÖêä‹wì Æ…!Ž¥Ç]bMJ1ØÕw³ª)½sq+[Ô~‰¯×9" –æfrøèϓ鰊tÍÈxòú?ÄÅÿ·£&åoR‰ö f–kHK`˜Ð‡3¿<íX± å×^®-Ö £\?c¸|ë«Á'eF¸ íÔ ™ý½¥15gc††à:„)HpKFµÉˆú2ÿ-GQ3ÌØ9ŸvPaa d,²5B¢X§Žw¢Ž%LRNéÁ©ßÒެ/0ÆOÕ92JbÕ»}Ã,dz +ö¹ô0USèK•zïÿ |!;øÇ,ϤQæè~ì˜1À†þÒ<Õæ"ïÀ‰âÀ\‹¤î QPšd@Y¥os^ WŒÑUòØØŸ)ø§Õ€ÔçÄ ÿÌ]©Àß'Â&#ùi‰µ_4Y…Ô’åiÛ- OFfp8djãP±$#HÙ_ÎNï.¦§>Åvùn™X—JP–º–¢ýtàÙD~'=÷v=DáÃÏ]= mÄã ÛèT,Y섃Ž„±dæ?ØnÃãc° üátZ_ <þ€kÖH—P'·Ô6C¾¥Z–Öè¨æÄ¥Ö=уÁ] Z"¯pI£ÑÍ|ú•W]´ì¢)÷äûWÖA2 \{ä?ñH⠞瀴ã)ø­{.N¿|¦"j“£÷Pá½F¿Û’,E¤þÂFîZ«üS–¿ÙÈ·LÛøÑvü(ó `ÿáÀÚ‰£nªÑ'“ˆ¤ï*Ó!Änΰӫ—ÔÜŒÄ?±â,v›ì£là"0ìÄÿÆ—Nèº-×` æúPúÎÚoˆ&mÆÏS®Š FòâQ×cIýÊœ¢žH¬ÕtÈ—<íêW ŒªÐXÉ-zMú~”Œ úp€„ËA7`꣇B¯5µïà€½oO}E¯P„¡xòS:Ð¥VäH,)„;ø-t ›lí”¶ÿçS‘8`å°RµŠ9À×vT¼Ýdš;“±Ĺ@t iÒ`ÅO™å6+†ñ4T[Ô« ¢nRõÞRˆ–­Kt†Gî³àcv‘·Z~at^ÊØ#ýa7:—óN^‡qóÛ©Ô+ÆÖÃ饥G0èHp:ºÔÿÂffP«ÜØÂk–i¿7œ\`ûLkœ#Ûxo­ ÐÊìN°šžËíRñ>8/pH‡}ð¼¿ßîPË‚W{¨ 4 D@Èòý¾ã´p؇ìÿ´êºT©ê±ŠÝæ-›vC2néíµíom!UKÈ‚f³ž»qts:ÐÀ³ŽO¥KYü] ‚Õ:„§Hè»Àni;>Î-ÝeéL4×x¼Q®oZ¦ë'ÀÁE'¹2y”‘R".&2¤daÝrÙ‘ ìJŠ3¥аKdVlFÆUÖI»ÌìRͬ2W¼‰E´õ¢ØNåNñ³š¦–*Œ2 Ö¦àÜè]em$Üà?– 9\ìÆ ñ"|jP3:KCi‚ÇËÌ3Eƒ¯çýB[ÖSñ9ððÀ¾tϯî:X3K—"˜êyÏÃWÏx«<•A6ž’PüS%ÈÂÀsu†ˆ[{ÖÌ¡½ê­šÃÊ<Œ¢B¼Œ2í@C¦Õ§9H•T­·¢ê7ÁÀ:8ÃåVL·é‚á¥a•ÕY$ô>%ÄUÂ*ΑýèÀ2¬0IX ­>ÕXú•jëHŒ•}~‹ØPˆzÚIúÙ8HçµçOÁ§£Èw%J…ýèÉBÚ,‡"Ú/7ANVàwŸý+±ßPxè )$[õØP>.Öªvãq©k~ÕKÅòmfÄzÍH2ƒ›]Ùüí §éâphŠw¢ÇâxâËò}®A@ÖRµPzd-#(ª‘&A~³ûB 0H0x GĦ†Ú¶/¾9Œé1ÛU ˜kóq,Ú˜ÒÍ– ×amö(ãUû$ó…¦h´¨Ö¡ý™9Æy\Dr¶?Çþ$ `Ÿƒºcœûþ2Ru³vŽ]“v 1wX³ç^ó-å™å¯6‰]1Zdï¥Ê&Ùð=6 Â%4¦í8¡C ô.OÛŸÍûážA±Á›˜ÒKãxÓ®f­ô$þšä Uv%‡ÒñÅÌ0¤L‹Ùþ7+ µµ ŸÈу¬žÄ^­FEI£JwÚR¶€Á——`îÁwÃb6Q€0íú¼K{ ÆT8ß¡ÕMbp°;U¿&¦³ÉGŠî:8¥ZÌÞpïMé£ýQ×_zmEF`-°B¨Š~$9JB¥T—QÜØ;}ÀÒ 7R'²ºßAýÝæ¨ZÖy…Z°¢å¦ òÃÌÕ`TpÕ4€ÏÍ‘ @ëÑs{g*— LåVøü's›U êû«š gÙ¶¢“o‹9  ìºF¯d}®@Âd6 XNßà¯a€©ó<2ºÈõ :G•v™Fé$µý } >“²¥Þ9²xäD ʧ%\­É>.ï"e§naÕCóeqc…8@kúíÒíKÑÆÁ¤E·­mˆ¢þœMÏQ]2@1:“Lúª†íÁ»_ïrœ9µ ]1EÇ$rn)ñ¦‘AIeÛ €é‚jç`'Áîø ©)N¯êCPÖ.ty”Eñò ëÄœ¼€:áÓaŽ'³çÂ@w¬±´â{ ‘‚áÎb©3Wñ®l­¢ä±¯¿£¡YÑ€&£Ì1ã:Ä,œ`WEƒˆŒ§¿Ì±„Ñl­X`ý! !çÁ4Hf÷KÄÜÆf h³Ãº"htJÛÍ \‰öƒ;juè©g[VÒ`€O- §×Ü"ü_¸5€ÃjaúÑžDç¢P´ÙxÕ/{m2§e?ßÛöéXü–‰‰óÂÍ^?ö^UŽh>~UyÛ©ÝÎÔ+±4 ÷\W.›ø iÄó}‚h—+ÓŽ‘qÏBs.hVì脪O,-5ãzuŒ›&4WùÞ{ ~Ìäɱ+ÃÏ;݉+ÍòF†:ü„ìI“‚gåÓŠ“à‰lí,l<µ²eôC¨¿dÆóRì±.ý±¯­79Ú¸¹Çoùtm#SÝZk%ix¡˜wgGûQ2_¦×Ü5Å@ëqbæsÜÇ#Æ«dÉšÄßzZÆù-lºÓ+…É)ü#¯ëžÚŽ’—7C¤ÀXûfõ ‰;õÞ 55ÂŽ¶ùçj×fU’ªn×7|yJeœ™ùبë/ÔSì@+ °<ÍCËðÃÚøæ²T)]ÓšÜV¿ñé4ŠÐÇ¿7>ÀÕ55HyIJ¾#ÊÁ6º´»öhÒŒnŸÔBè‘ÆÓF˜É1ï°zuʹÈÙ„C嵃}I]¼ÀýD«QØ @M °€Ì9^9Ó4%» „ñM6g%WK^úA÷éÐ3‘íú8˜en0óžÖ;SøÀ­»ÅßgŸZ1ºì0Nbg~ïü(g4Ža*ÓôËJ…£ýcЇjqD²ö$4¸ïpV¦ÌËÌîÈÑC_YGR ê²ôÆ\KL¡še´?НG”ÊÊ3w´Å£¦9O–zis,ÒÚ}‰-j)Ò×Dde©E•u_á‹ÕÖ›ÙUFߎ4²EÞ«9÷EÝÒÞW•ô¹“J=a¡4øŠiÙøÅÙ߀ý¹ÔYÝ>äÇàãÞÞj"-¸Š ÓŽy¸~“¯Sþ&ä/msF»Ÿ^‡A¡êË$”skM ̬Ҽ*h¾§ºÎ·:_Þ ÁÄýßé5$J°'â*'ü¥%¾+d¿jmÄàÊã½»)ªyk3öbñ²o½2­!bÏ©éŒ.…†C•LÃçÁùöR.‚åhšŽÕj{ås?Ë}¦ ¦»ÿ~‰æmÆŸRþ@rVI/9ñòŠ úFýgA æuñŒ{}%ÀÏ0SCѹæ|=S-’¤šH0$Ѯ߱p«Òš6*¿Ì_ZØìĨ²(ŸZ“{ñ&~šcNêh p@ï³íäz«H*»n0e þo|Ô7-?•p¾^ïêS´èš=&MzÖf$ ÕÜ þ›aw! QSûºU=! ï ž7<²YB„I)ÊX¢×;Ö5gI•³´Þ›òào¹ öqã WýA¤2°þpJ áË÷Ï–‘ì7‰ëÚý™Ï‡Ê|NBà Ö€a^n˜²³ ÄLÅF[ÚÖŸ™F™ÚàêÛƒÅû‡š7¤RôPäïŽôÓ¶¯ ®L„ Xv/æÓó¬mÄX #Ž?´`/pHÜûδ«²ôEéÝé6ÃÒ¿_PiYa »YuWD¦¼BÚf{à,OÈb@L¥þhÇøð¡ á Ãò¤jD+¿Öj½5AU÷ g1@¯ÐVÔ×»é_:ë»e&=ñ(&£,¨YØ;zº$±ZÍÜæŒ¸ó‡jÂmÎ g‘ÍÑO.S ÍzƒšdŒ­$ ¥ô^JwkVGmÀAôÍø|Tœ^{G€wÍþغ#þáz0Mù/¹Í‹¨Ã„çržÊΩΗœõŽ 4-6М”Qòâ‹*{D;›–šë/HbåO×ûM—2rƒ ÜËÀKÉî¯0pVJ+ü¤p„{p:{Ü j¹6ºÍi$@‰˜7£åù$L\UÖ±  $…vÎefôŒG0È"¸Š†¯{ø5ãÞp;iìJÎô ]etø¿AÖ²3Ôâų{PCìRœÑ| °#HA.{ËÓf÷<Ô÷Kà‹6™} xeg` DX’VxšOÎô®W,é°’ßPÇFŽ S™ÕÎÀPÅM ·ÝéysâH(èS{ãò8Û!0ç„AÖ…M–ýŒw¶ÃOôڅQU{È ã |J7¤¬wÏ=À,(*–œNæýö´š‚3—Èœ½”?&ÒŽCâj„ýÊ[ü,—'ìÙiX t00£+0|îð”ïÂÀ±D+‡ººŸ„DïXVœÂüvßLßÎê×±å¡dAYÚܽ·„«£—BE­Àí¿*“¯~S$júâ¿“½©4Uc‘Aƒ¬¯†¡51®9HГÏ '%Dôh–Hd‚=öÅNŠЯhê£-N’óÉöM9“ÅÛëÿ?loÛ,Á§Eå‡ü]Î3˜„<©õCC ú!Å$ Lžì·/–™ µ‘£:’mJ]Ž x‹¿Ÿó¯Pþ¦Š@¼Ë2[‘@†È5Ü—ÀÃ9Ý«)p§>˜e—½uJ]Ã!;u^¥`Ì{v &íBàI 36C²Å›° Í¿ˆtˆk Þ/9ÌÈrhR”K:fÐ…Ãf7òÀ€¼X$<‡¼0BQ5ÝáíL?MóÕ"Uõ|Œ™kŒü ‘jó˘;œ–ÚÁº…Ÿ›q–e~ iœK»,† œ]x·£—øUVš›—úäl(†-€»7@ª”ìH”À† H rÊí´`ì¢@Ó‹uÔÃç»åÄÀÆÿý˯Eš(.ñù']¯» §>|Äà¤CcS3H¦Iö§ |@>%ô~BÞnÌËý7å¦àñÖ³1Ö£÷CQêm¹ëºÁæ´Z-´FøeýA%¯8˜ÃP•ÆxÁ°¦‘ÆðQƒ‹Gä€D\Q½Q´ž`Á¤­p5’ÜEr{㈀­&þò~»²‡­-Æ‚š¶ßšüÝeT¦O÷Ptžj£U9áòÊd‘ÐÉHóBÏósG¢LH8Ï*„Enäûai ÷­þ5Ú½â€Ð)¥Áõ¥bTwF K*EhòÛ¿'®6oÉ;!Óú.ŠG2$¿†–|ú|hµ4®jn+ð(Ž#N[T2™(¬ÇòèsB”ï•믷K `Ÿ-Ú33µéc»üh0!&`w¸Ž?AfŒ`ïq” ‹M,¦ÕQSáÐmo6EÞ¡ièºâ¨Ë!0ezÔï'ì¶"\XÜ7oùŒeC<*IÏúÛ—Íœ«Ò%@Y‘€½Å%¤Ô¦ºb³nç*8o™8½ÂBJ’<È?÷'ÙDNú’‚,ÕÔ=ò¦·Ê¾˜{ªÂÉn/çC“AÐ}Å ‰bû½ö˜]M„ä׿‰‘€žd·xE%7 ¥ÍGQ–OøÁVú¢znö3‚ÈY9áÌj4ð0<7ÉàÉ‚ Šþ*ÏŽ(¡³*‰A¼]°‡Ä§SÆÂK{6U‚Ú2À+­œ,}/ ,ýfc a(ïÀ’(‡ÀN;‚è¼·dž–Ex-ëw¨Ý’^ ´ôxRÔÌR#¶† ‚C¥ƒp‘ÿ7c=:FÛ±¢ëðØNT(ýÎYYJãy®t ö*F)ãÀºNñ@5Ùöq¢å(bŒºXqÐÝÃé¯¤Ôæžîâcr]InHÒÍ)»ò_¢‰þl;X.]ãòâßNå@f!~we ½ 'Go”³Ú†Þ[ÖÏ„AÑÛuéþox='¹Ä1Vôy¶pÐÖíôD™[èE2 {Ì£'±ÑÅù‘K€®VÕÚ „„Ðùoq®Oýò0ö=}0mFïwÛ,óZ傲üÚö\D½÷Fˆð-¤¥´©Cù$‡ì7}e šµœü0ó‡eCC‘ ڊוÔk±Ô#¨‘4j¦ì­4Äßlpiú9Í˹'%À¸( Ó4Ëúѧérà/”Œ’IÚûO¬îõ­‰â`¤°iQ~‰Ì;Kûö??RÝÂn9y—(ô’|<Ò~Uù"8y]啨.Ï¥SK‚Ö7”Y’' =Ùî¿’O›¸’R[&>ÀÝÓ>„ /x¤Ò{—K³çµßDšÀpj£Ýwd!D›XØ"¹(ä\I¤ÿZ–í$si›µU1[“cøÚ§Œg%ñð;¾Üþáæ.áЙãß-æ›ß²³§RqÍÑàÝ“q8Ÿ'Ø­BóP—½˜œ|Ôò¿an¶#ÿ69ô†¹ZÙà¡¿ZcäI”ª yEu _MLr#Ƈ±¼dÔ’ž¬<™Õß3@Å…Æà¹k!V°f`†?K‘ Ó#M¯üÛÃzPûü~@„=/Q¡³:ã°wB£Ô’nΔ÷0ñ®Gªóùî©›Ûk;ýŸ.Z­M²Î@¨Puq…ŒP9 3ˆos¬‹ Lö>~~ëàH4ôºÆ%öæ”y>ßšó¸CJ:÷Ö³zn[^Ç}œ vÚ›Oú…@Zß?­Íû-­ä1®Îõô´)JwYq!,ß^«$ÛÀßžš"1(ë È`A]±H¥»d½çI–p¨‰±{S§O´žXô?ËÌ1jLwÅurŽ<8›vBø0U®{Ù0Áæ[› <¥³Z[uoP»µX…ö6ªuáÌæk0Ȳå:bö—Þ" «úÁWL<_Ü ¢ÈÌ'Róµ†ÝKppÆüöÞ.7å%¤%ËÖ;ͼv¸®ÁñÓk?ËþºÇŒ­EòœÖ¹º’óƒ¡Ý†¿ð™|ð‰¡!-£(d&³œŸôi]ïgTÌ–Qšw¥fÑõKGïúñ°îÚ@¯Æ¸k±\톞G åÙ 3wPÄ*KX¬ÜÑe³Ä~ƒ«¯Ù¥br§dÀ{v×ZG|@¥QUÕ€¿ÿ¹ºp½·ßT)?|šƒ.Y  ãÿ$5ŠlïÁ0íÛ0k˜¶ø¨‘W€†Y™YP,Q8ü#ôí« 2®(ïïÓÞùS»^ǽtyÌ>+Ūì¼Ý\v†möHŸ L”Dº/ɲ—zY†/4¯Ü4¾­Û`Lõß”¾äàïí‹}¸ˆ?Àé©:£¨õ|¸‰‘Ø×D+œ´Z5ÇpÔØ› ˜î”Ü›$©ò6•1ÓGÊôøKÛï]A"³OªnÚsÐï ‹¿éd«¢³ÆJ„ðm³Kê­³g ÷oŒÑœÂ@XDgoü¸§É,ci„jöAþ—órO9ÜÜ$ÑDæ…ù58ßw>DtWÆŽñ{Õ¸>™LÅáf!KaœÂÛedm+¤ÂŸ¦ëW]"é;.¢/%@:ú›0Ý [“rù4ݸgUû€¢DæèvT±ƒ,,¤(0+ŠCÛt½%QˆYô#Íãωóö˜‰¾ˆv¸þž”„…±âµvamAˆ“…Õ®å#¸6ûðl‹€Ê8,À8ýŠSŸ;“†¼¦TÙºÌ-ØK~m1v6Î¥i«²ÿYQ es-;¯±êÅtbÀ¶nlX;ðäA.…~âGQ,ë²äU?aë)ÂÆqÞ]d|´û»TJAG±Htf_£‹rŽ^ôÌ;2ívŒ°ðáVƒ‘%QõÐ+v)Vðþ0tL/ Œ(×!à¢lÀÌl8Çý•aoe 繇ç wíO2šà%£ô'dƘñ]Pt—sm‹šK„œ/Ao:¢(g¡:1doE;nšÃR£½F*1éy|—Ï7zHB ±¬)2=†Ýû_˜(•¡V”Í„ 9ÉD•}Jvv(ß?ä¿WŪÝÙJû†»lvR6–úyëAIÐÖu‘jñƒ¦èr®PwÈœÞî-×f$ÅWØ@…·â.bË$xžÉýYÓ1â‡Ë/ã>_™*T5›ÐŠÚ‘57Vf‹hÃlCK\ÁNo£ªy’mã~zG×AgfÂѺ/òŽÊêòTÖ5äÆRuSã5䔌…M€I %mæò½ìF~¬ˆeÍúÝ€m@ôþ&÷ ë±Ì£F½¯.7£ FNŸä†î ÂÃ÷^±»Œ„þ·Ì*M}¤ ßœtó}×6uOÓ¾|OŒqN~j98¡“¹œÄÕ2 úŽ3J‚šq=ç7f£ùD+- ¼¹œo³õH²ÚI³U£AÈŽ£ñ¨³ÃÒ†Bm}5›nBÙ¡ Âið8ª/N6„¡•ýyÛ R¨u‹oy –1µ»û¹®ÜaÿmAÖØ¿ÎIQæˆ ÝÄ,Qñ‚Þ9ÿ,ýÿ—r¥0†ô²-*[•áŸïj,¡ ’§4d³?‚}ÊÉSHæÈô”Q“hÔÏå±Å:äò8)lC„Õ3°(ìÖ‹a/¯ïc±ËÄn¶€ý$ï¸ßØÁš¹à[=û]  ݦF4ßÉI,J/¿Ûˆ¯>ð#¿Õ¾XÅö£Ý ƒ˜§­XR­o„ D—âн¢5ø„ ƒ‰$¡9Fu…Htâü?ƒÈÒ«8öÃu®v08 À­!_9§ÍØvQÖ¸ºà¢*,Ƭ™°O¯ó+1í£å çâ½ çˆ) ›uREòí«Æéa €(!w•— ¡Vpî)"¿L™®ÐËZœp{ŠCG)3¡6ñ»3òo5·pwú^ÅR’„»Ùl¿St©Ä2‡L!"™f—t?ω˜\_Íâ3½Æ%Ï5’9X#HMžÑ¶ °ŒlZ‡Çoc¿9ç%È.ÃßS2lW½êé H1×–i õÓ3‚PO˜e ᆓxUÒÙÝdÎK…S°ÌÊq`ö£"lÄÙÂp½ÔŰÓ@LUK”‹”_§/{8Ò®S:›Þ55@`ÇŸQ$q( o²d¸áYÜ•ÉNÑNß„&šé ïJç¼:å¬A!ó¸jwjúô›ƒt¶Ä°©’u4ÂäVWÞI¸Ÿ\¼m%ÚÙ3WMš)Á‚0%’Ö5 û[f!ePñù ŸJžoúk嬜Ç@«¦, üJ©¶Y$QùV£æ”7$|ŠœCš üÉé$»{à¥C@w¦'Þ©Mâ +ÿ¿LaØ < Ktg<Û²S­Ž%p5DN±xûÉŠ‚©ü,Þx³B[¦µçÍJUùuí…ouét ëº<•ˆ!»ì“(Ôvï•MqÀkÂ/ÑjÒAeS¥z @m£Ñåþ)î,¡ÚjbÖ2Ì;MDƒ4-|`†?KJ#ê§&µËO¤;†G+[Y6†éoZè9qRy× ‡Òsîï~§*L¶™úü 6†,då4UŸE}?ŽaÝ£9ïBfp¿«6íãÏòùVn#ÙpÚŒ‹ÚUñ‰s«U>€häk9Xê] ÷H¡¢å¥+çW@ó^õ\x js{œ*¶ë~‰‹öÍŒÚÂÕ‘¤„#Ô5}P£w¢Ûγ·ƒyûàQ³HhJ–,¥©¶°Â%Àœë4p½˜qúm‹aš;Àn ι™4¤ž¾;thã±—ø“1gjó[åᜈv í–iŽˆXc&9Ê ]H¿ºR%O…U_Õ—›[€šbÿ¯ƒ‚okP¿³ä÷"Ù™È.$óBnAÚ IDª8 õ´òçüi6M–pf33ð&G1­’Y5#››ýÐ= ?A[øe”`¸Óâ n¼èâq´mõ°u‚ú>0d%Mi£ÐÞíÚ;Xˆ€R.îå½Ôb'ÜâgB äÒ¾D/ÍÜd­e1ÚÊ+mXÀÓ¦È/8ÛÄ’Ùä½~—ëÕ¯~‚­Å Ë €nö-[ÕßõW!™"|7ÉLhøÿ”R(LßÕÚ¬¦æpî]èõ¡VSÃE¾ã<Ÿ™mÕ¬‘U—Ôãt‹Ô÷’žªÁDûf™’ƒAæ¥ Õþàã;¤*<®†/lnEJ¾Ì÷_%%ƒÃwo‡´žn$R |’&ö†´è¥šó&îõ #òæ³l “y`X軎C˜W°EröʺÈÁKz¡5éL_/é@kË'!¾Ãš;.;âžX¼¢‹¯0Ù¢-+ÿ…·ã9?†¸{¼p­c4"yÑtlmý̦e­Ù/É),ÜÙ‡˜YZ¿zR µ¼'‡ Ã-M¶+w-CÏxýÂaÇ> âÙdé&$~ø‚ÝÊ8z-ûó»Ö±­Ý| I‹ëÄ7Ÿ$2›§¨,ž-©$¯à½Òµð:3!¼8 Eó XÛ<7ŠÜ¢§ö9¡aÅq/ ÂÇSvɱùŸözœ»?‡Ñmø3HZ!2UÎF*Õ¦)ÏÃå]s7b”û“?„ÔÀö©ìÿÈð¼·kõ×Ùà£ÔÏ·óÖ€”¬Å-UÎ(¡È|*ãÜ¿È8Õ¹ ÅÚŽ‚j6Ž•½M $Á ŸûN„mƒ•Wn¤Êp~EXYL7Hfl ÏUÈÝ4¦“ì+º¡í\W«X4ùBÅ€‚ û\ì_³½”ü6¸EªÞ($Œ¦Cì‘x6¿’.»â%”‚ébB6‘y!냈Ê÷±hô|ýAF'_qr¿W|%ÛP¹led!b¸n ¨e ¡#Žd…¯ p”ž¯rÍ1öZ ç“ ãÀ¶:c)]Zëž^”!‚««°Ï6$piŸjÙ¹PÈæ:Tû JÇkG ,mu:ówg¯€â›$."vH`t#ŒÞ+óS±à2±ÃÁ—깇#-8-“ìÕ*[É5gÑÇXë”/ªîvŒ%c†bŽÑM, dŸU)^<…Œ‡¾Ó$5gÇcú+4ð[ÈcÆ®ºü ë2°5ñT †Ýù>A™W}âÿÙùx¸M‚H–é¸ü/ˆ+¼5Pþ€@¯é6€‘¾ºàËЩì&ÎiŽ^ ºûYê7¤; ¹Ü'n>„+«ª»Uá)vä)Õ4cçÿ)Bu[wè½¼º¡w“+ušEOZ&«ëËóŸžuåqõ±¤‰ühð‚#~¯IÑzcB¥0žI"ÝË Qç ™ZÆ3üš#/bÿ¦錆üþætR‡ç‡ rŽ£³J¸Î¥8ä»´xºlëü°»;‹ö8FdyHgÔX‡²§,& 2|_`Ãæite£oóõâˆ×ç'n ìäúÃêø÷Ê*g¬9®˜"ït¸v´)×úò¿ ¥ôáÁ<ãCN-ÍýèØÛæë}ƬUf{d;¾¨ªÔÝkÁ•›¥Ÿp“@=ìé„gªèöމRØG¶½7 ·ñ- Ôý‡\Î7"]Ê5°…»`ç%à…s9¦0§ºõŸ«¦?Òø|Ko Eð8¤U;©· Åç£" ÌU©¿þgfž`Ê2d3¿Œ×©´FÇ­Ž—ÄKû(SÚrIpÕ×"7;És˜*Í~"ˆ:IÀÿÙ?*½m&y„p×?ûz}¸éÚêÄwÃËKþœY7ƒ¥^mj’w“î4ÍÕ ×ëûiÈ…Štå­Ÿ§vó³ Áëž…˜R®šråDÈç¾õLe;»»YKss=½áï”q¼šÒz.’„ðs•w0GPÆõiGMç’UÓÔ-÷gàe[1E³b_Œ¶ÈÏÀÑ»{ÐUËpFA7”±ø¼±Öòåk’+qW÷JHÓíŒgåû¦˜_u%£`ÅÀš†’±syâK}ùæ&é°=æjà††6׫`sé@VÁ{×öô}rœ[Á é~6´Åê½î6}ê} ²L†¦‰úï=®qaâu’„é¨HæV"³‚F5ý{ïtÌw­ÞÄETnÕµ]Wc—¸väOùÒ¥RyZ%?ÖØt…é£IV0Ðu%GÊ‚¸#]ÿŽqÓ†„È wÿòŽQ*§µ¤ Þ¬L+,GÂŽ¿Ceè æÇ9§§ªúv»¦ªì~S³˜êÂYÊÖ¬ÞüNÇéø½ùÞúxÓ”ëgyxÑÎÀr³f9غK*üå’”ɨåQ 'r²÷÷$m%)­xúóVÇgñÆ7#d~¬Aí¶šH>1XÍ[×ÎOzOfXçjáøÇ"¸à«Je&ùˆÛ—Òà™x~" tÖ,¨Üca΃ Ö9˜÷^Î@ ϵˆ"7ÞR)ß¡4« '•Õ ´¬Y5ìÃeÆ=qwíX”çÈ#7Í·¬ŒiÈàz Û~ZÐÖÛ²Òåê—™ˆÇSh x€0öÞ–uTbÍ+d½~3$¿8(õrtCÜ#÷4p×!#Ê'œ‚ÄÔ{¿ /ãÀÁ/Ð&m©yžþÞþ/ÊšU\ÝmÏÈü³6ê¢ Øµ×¯ÀÁA#lTEy2ÌÞ®l¸JžGy¦É}GÇáeÔTåé~ôr*ï<%*Ga«9¤´žØzÞª ‚€±LdÑ*é+&°£·èR5úš_×Qª;Ì_ÏÿÚȽLóÇ¥F„±‘™®Aíý«0þTý¬3}ÈÎT…c[¤¹ªŒ3Uk…Êpd´·R4ØËKpC¯¡£.œ„3Èrì{ÍZnx•Ø bS\øÐ~á†B½¸]Sj·Ê¡×Á`9Ñãit–øŸ_€“¦Wt¨—] ªî ?šã_O·j¡ëk{=(ø) è_䥦íÓ|[$ïvq5Š‚Ï`Û¬_Áp2“eXur²Àÿq¯ÕoÙs@G΄›_HùX-0`ÍÚ¢ä®áÁÃtfrð®µÅ KäRŠ1gós5fK ÔŠ!óó´ÛíŠNÕüÈ?¯4 Ù†: .[Z›h{H½½´T]ìTýÊÍ›c>Q–´Z&‰+>ÿXyð<´èÙi\¶FöóòÄè*kÇšùrmKQ40è¿{¡k›œÖIÇ’8(pæk¼(û:ž·™3á#ð·Í¬]–ÏÜá®:ž'zE#ì3w•Ld~¿q J¼ãX °ºlÚ³Ïn.>7Ô"M\¶•"J¯iì‡tK´4íÓ·t•ŒÞ $’EÙ$ÃpÞ1ñ)»4 µÔ7ïµÖåïÉ”ÉÒ’º%Dè Ù5ê ë1q]ªB§ yZ–PÆš/ÆmÙPÒpg±ÖÆp´Qâ%,'#¸_ýM;Wº¶«1zíª£áÀ8¤ÐårÒäÐã‘rƒ$óÚç´8Gè‰Z¬ï?©¶ÇWó„çØÞ,ÅOrD) WÀD½!w|‹¯•Gøõ͆V0*iÑ&Àm@ƒÔºÙ;ËÒ uŠwWÿôÕXŬº-Â!s\¨iŸ·O~ð.BN‚xÅË ¢u<Ò~U+˜ߤÖYgA”@ O©.µ¨‚ez^b‚[ºÇP~žºØ± ëеM^ê'ˆØbaPLpªÕ|³;ÏŽ“ÂîR^3­Ðø¢ù¬Õé=V&=Ô]¯Eã´±wèG4æÒå´üÿ0·­)QBg2˜¤:ñD(È'Äg!2›·é…t¢7‰¬“=Äß"SZº¿í‡ŠV*!Ï‘«`<éËíBM”œîvð9wÓìÔ!¦ï½w:Ù]ëo+År¤é&u«s•–Τ›I™+òø¾m"¸Ÿ=["*(]^y}î^‹!qÈÔ÷#½³‰—ªºÈv‹Kà ‰š_CX}7D§~Ú^±·?qxг¸Á嵺o€'Y A'™ü•QgNbš#¹öAê˜Þ27i÷°âª"W5žâŠÏµX“Øu¨Ì]´gsZ²|VE'¼ÇTm4‘ýÒ2œy6f5¸¯`¢ÆÕùÇ‚·”d™.,‹®–V‚›UºBQû¿Íúú>T—vß(z÷جâó¿"»Öàª<ȼuÅŸ€;›ÍÈl\g E'éý=fÃØß¹w—¨ÿ°°ò4 š }5òžŒë$Ÿ!ö‚˜1.)è`™*6Nj-\BzÊ;hœ C{ëÈIC2@§ „÷°^ÔýÑ4CûE¤‰ã¹™™¨‡x “‘ºé¸ž xYÁw;åõ“¹¬¡niTñ¼CBC­¥ûÄó$8ŸnbHw«ûeÓ»O –ŸÉQüPeÕØŸŸu>è¾|–\¥Íy§ÇIeRÙ$ÀÚçz¤.Æ5ßbKc~nzywÞíX޲ûçØÚ;qÚÞ÷R÷Ö^±ãƒ´4ÿpî~ëm–¾o3ˆ‹Ñ°xêŽà’íCŠÌÅüYû¯-MoÄò#ÙÇÞý«Oð2©víù”'¯ åÁãtЇ.+Uç/·²ØÿI²5äc^ù¡É0‚ÅJ0GYe!Ü‘*/âkíw©‡ƒ 'Ê÷ˆ|f„ÏV9ôÅܺ~v˜Š…'n¦ŽÆwl Mr±j¿:´šsAÐÖó"ÎâØ¥]îË‹f;Ñ›‡ªæ©2js«Š#â4™¬mÜ÷Å-r-ïf‹B 6yL¦  ì傼žú 6¦±*@µ!ûæÃ Íù¨Äê6³ràg[Z¬œ[âuåÉ1;ë¢gÐé4›¹s<ÄìÕo{Ìþ,\çýrµZÔ1Šjj+©EŸe©¡’Û±€¸‘ijMsC©pÐ)gÒ°&.i\Ïpð2¹BP;“£w©OÔjŸp”ÏÀ;@ö"ÜÃÂгÇ'Em«.öê˜Å±X×7KÏS’XœWàj¿5hŸ„;õ?ñlÃö­ñúÆ ÆêœÆÕê³IO0k[qï-³ûDR:æòÎö²A˜:#*Ò®­ô;哾X=¥È? 'ðsõÙ÷M9å«Ä}ín9—?†“Ä„ SÏ&Zz$HÒ®…¾jZI@ã÷‰(W\˜ÉÖ•Ün\ŠÃÖv­cÀ¬!ÖM¡š^À’A° ÀNY@HÚÈ.i‡ãæËf-ùðáQB‡Fœ-*ö¿Ûky?ñÄhÞÞpއ¨B0y}/ä±8Gl­ÎúiŒ”;bgÏ: Ëboý]Ìo:µt¹üúí-˜Ø÷ç‘ÁÓl‡äeÔ¯|QÓD+wf°ä/ÄSõMΪ*š°Ý®þ‚J⎈ —ÆÃ©…†I›`)ÊÒŒI°fœh”Õê3àßíˆ|ëYÒX¢æÙ›zÛÅ 4 ‡×z„IlGwëú}KëXá²ù´+ £Jv¹Å’x¬Ói8{7Ü„Æ%ˆüò âêm((“V¨ç‹¶ŽîOÃ;ý)[ÆO-j6ŒÙYßG\çhòòûüô±Ä¸‰óì?›Œ%£Z\Ç• ð³ñ¾l÷ßÛgŠ0‰5—ië­däîpáRŽÖã‚Êp»ÔaàáÜEÐÈÃÓå‚€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/00readme.txt0000664000175000017500000000047613544671343022465 0ustar rptlabrptlab00000000000000This directory is a convenient place to put fonts where Reportlab will find them. If running in a server environment, this is a good place to put Type 1 fonts needed by your application. If in a desktop environment, you might prefer to add your font directories to the T1SearchPath in reportlab/rl_config.py instead. reportlab-3.5.34/src/reportlab/fonts/DarkGarden-readme.txt0000664000175000017500000001003213544671343024312 0ustar rptlabrptlab00000000000000Dark Garden =========== GENERAL Dark Garden is a decorative outline font of unusual shape. The typeface is based on author's original hand drawings. The letterform is complex, with all characters decorated with spikes resembling thorns or flames, character spacing is very dense. Such a theme makes it a great font for titles, banners, logos etc. As of version 1.1, Dark Garden includes letters of the English alphabet, Polish and German diacritic characters and some punctuation. Unicode encoding is used. The font is equipped with hinting information to allow high quality rendering at small point sizes. Only horizontal and vertical hints are currently used, future versions might take advantage of truetype hinting instructions some day. There are also a lot of kerning pairs defined in the font - they were chosen after looking at a choice of Polish and English texts and selecting the character pairs that needed manual kerning. The font was created with PfaEdit / FontForge (http://fontforge.sourceforge.net/) - an opensource font editing tool. Pfaedit uses its own text-based file format which can then be exported to truetype, postscript, opentype and many other font formats. This makes it possible to generate font files for Dark Garden in any of the many supported formats, so it can be used on almost any platform. So far, the truetype version has been tested on X11 (Linux) and Windows, the opentype version worked on Windows but not X11. Truetype should also work on Mac OS. INSTALLATION Installation is described for the truetype version of the font (which is what most users will need). On Windows: * Extract .ttf files from the archive into a temporary directory * In the Control Panel choose Fonts * From the File menu choose Install New Font * Browse to the temporary directory you chose * "Dark Garden" should appear in the font list - click OK (this may require Administrator privileges) On Linux / UNIX (using KDE): * Extract .ttf files from the archive into a temporary directory * In the Control Center choose Font Installer in the System Administration tree * Click on "Administrator Mode" and enter root's password * Click on "Add Fonts" icon * Select the .ttf file extracted from the archive and click OK On Linux / UNIX (using commandline) unzip darkgarden-*.ttf.zip su ginstall -o root -m 644 DarkGardenMK.ttf /usr/X11R6/lib/fonts/TTF fc-cache -f COPYRIGHT AND LICENSE Copyright (C) 1999, 2000, 2004 Michal Kosmulski This font is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This font is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this font; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. The text of this license can be found in file COPYING.txt in the distribution archives. The GNU General Public License text can be found in file COPYING-GPL.txt. CONTACTING THE AUTHOR Send e-mail with questions, bug reports and patches to Michal Kosmulski, mkosmul@users.sourceforge.net The homepage of Dark Garden Font is located at http://darkgarden.sourceforge.net/. reportlab-3.5.34/src/reportlab/fonts/zy______.pfb0000664000175000017500000027424213607302650022550 0ustar rptlabrptlab00000000000000€à%!PS-AdobeFont-1.0: AdobeSerifMM 001.003 %%CreationDate: Tue Jan 12 15:56:45 1999 %%VMusage: 87626 100509 22 dict begin /FontInfo 14 dict dup begin /version (001.003) readonly def /Notice (Copyright (c) 1992, 1993, 1994, 1999 Adobe Systems Incorporated. All Rights Reserved.) readonly def /FullName (Adobe Serif MM) readonly def /FamilyName (Adobe Serif MM) readonly def /Weight (All) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def /BlendDesignPositions [ [0 0] [1 0] [0 1] [1 1] ] def /BlendDesignMap [[[110 0][790 1]][[100 0][900 1]]] def /BlendAxisTypes [/Weight /Width ] def end readonly def /FontName /AdobeSerifMM def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /DesignVector [300 600] def /NormDesignVector [0.27940 0.62500 ] def /WeightVector [0.27022 0.10478 0.45038 0.17462 ] def /$Blend {0.10 mul exch 0.45 mul add exch 0.17 mul add add } bind def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44277 def /XUID [1 44277 17709 6867 29516 11444] def /FontBBox{-156.03 -257.00 1194.19 910.23 }readonly def /Blend 3 dict dup begin /FontBBox{{-131 -236 -135 -201 }{-257 -257 -257 -257 }{582 1217 1274 1922 }{878 974 890 974 }}def /Private 14 dict def end def /shareddict where { pop currentshared { setshared } true setshared shareddict } { {} userdict } ifelse dup /makeblendedfont where {/makeblendedfont get dup type /operatortype eq { pop false} { 0 get dup type /integertype ne {pop false} {11 lt} ifelse} ifelse } {true}ifelse {/makeblendedfont { 11 pop 2 copy length exch /WeightVector get length eq { dup 0 exch {add} forall 1 sub abs .001 gt } { true } ifelse { /makeblendedfont cvx errordict /rangecheck get exec } if exch dup dup maxlength dict begin { false {/FID /UniqueID /XUID } { 3 index eq or } forall { pop pop } { def } ifelse } forall /XUID 2 copy known{ get dup length 2 index length sub dup 0 gt{ exch dup length array copy exch 2 index{65536 mul cvi 3 copy put pop 1 add}forall pop/XUID exch def }{pop pop}ifelse }{pop pop}ifelse { /Private /FontInfo } { dup load dup maxlength dict begin { false { /UniqueID /XUID } { 3 index eq or } forall { pop pop }{ def } ifelse } forall currentdict end def } forall dup /WeightVector exch def dup /$Blend exch [ exch false exch dup length 1 sub -1 1 { 1 index dup length 3 -1 roll sub get dup 0 eq { pop 1 index {/exch load 3 1 roll} if /pop load 3 1 roll } {dup 1 eq {pop} {2 index {/exch load 4 1 roll} if 3 1 roll /mul load 3 1 roll } ifelse 1 index {/add load 3 1 roll} if exch pop true exch} ifelse } for pop { /add load } if ] cvx def {2 copy length exch length ne {/makeblendedfont cvx errordict /typecheck get exec}if 0 0 1 3 index length 1 sub { dup 4 index exch get exch 3 index exch get mul add } for exch pop exch pop} {{dup type dup dup /arraytype eq exch /packedarraytype eq or { pop 1 index /ForceBold eq { 5 index 0 0 1 3 index length 1 sub { dup 4 index exch get {2 index exch get add } {pop} ifelse } for exch pop exch pop 2 index /ForceBoldThreshold get gt 3 copy} { {length 1 index length ne { pop false } { true exch { type dup /integertype eq exch /realtype eq exch or and } forall } ifelse } 2 copy 8 index exch exec {pop 5 index 5 index exec} {exch dup length array 1 index xcheck { cvx } if dup length 1 sub 0 exch 1 exch { dup 3 index exch get dup type dup /arraytype eq exch /packedarraytype eq or { dup 10 index 6 index exec { 9 index exch 9 index exec} if } if 2 index 3 1 roll put } for exch pop exch pop } ifelse 3 copy 1 index dup /StemSnapH eq exch /StemSnapV eq or { dup length 1 sub {dup 0 le { exit } if dup dup 1 sub 3 index exch get exch 3 index exch get 2 copy eq { pop 2 index 2 index 0 put 0 } if le {1 sub} {dup dup 1 sub 3 index exch get exch 3 index exch get 3 index exch 3 index 1 sub exch put 3 copy put pop 2 copy exch length 1 sub lt {1 add} if} ifelse} loop pop dup 0 get 0 le { dup 0 exch {0 gt { exit } if 1 add} forall dup 2 index length exch sub getinterval} if } if } ifelse put } {/dicttype eq {6 copy 3 1 roll get exch 2 index exec} {/makeblendedfont cvx errordict /typecheck get exec} ifelse } ifelse pop pop } forall pop pop pop pop } currentdict Blend 2 index exec currentdict end } bind put /$fbf {FontDirectory counttomark 3 add -1 roll known { cleartomark pop findfont}{ ] exch findfont exch makeblendedfont dup /Encoding currentfont /Encoding get put definefont } ifelse currentfont /ScaleMatrix get makefont setfont } bind put } { pop pop } ifelse exec /NormalizeDesignVector { exch 110 sub 680 div exch 100 sub 800 div } bind def /ConvertDesignVector { 1 index 1 2 index sub mul 3 1 roll 1 2 index sub 1 index mul 3 1 roll 1 index 1 index mul 3 1 roll pop pop 0 1 1 3 {index add} for 1 exch sub 4 1 roll } bind def /$mmff_origfindfont where { pop save { restore } { pop pop } } { {} { def } } ifelse /setshared where { pop true } { false } ifelse currentdict dup systemdict ne {end} if 0 {currentdict systemdict eq { 1 add end} {exit} ifelse } loop /findfont where pop exch {systemdict begin} repeat exch dup systemdict eq {pop}{begin}ifelse dup systemdict eq { pop { currentshared {{}} { true setshared { false setshared } } ifelse shareddict } {{} userdict } ifelse begin } { begin { currentdict scheck } { false } ifelse { currentshared {{}} { true setshared { false setshared } } ifelse } { {} } ifelse } ifelse /$mmff_origfindfont /findfont load 3 index exec /findfont { dup FontDirectory exch known { dup FontDirectory exch get /FontType get 3 ne} { dup SharedFontDirectory exch known { dup SharedFontDirectory exch get /FontType get 3 ne} { false} ifelse} ifelse {$mmff_origfindfont} { dup dup length string cvs (_) search { cvn dup dup FontDirectory exch known exch SharedFontDirectory exch known or { true} {dup length 7 add string dup 0 (%font%) putinterval dup 2 index 6 exch dup length string cvs putinterval { status } stopped { pop false } if { pop pop pop pop true} {false} ifelse} ifelse { $mmff_origfindfont begin pop [ exch { (_) search { { cvr } stopped { pop pop } { exch pop exch } ifelse } { pop exit } ifelse } loop false /FontInfo where { pop FontInfo /BlendAxisTypes 2 copy known { get length counttomark 2 sub eq exch pop } { pop pop } ifelse } if { NormalizeDesignVector ConvertDesignVector ] currentdict exch makeblendedfont 2 copy exch /FontName exch put definefont} { cleartomark $mmff_origfindfont } ifelse end } { pop pop pop $mmff_origfindfont } ifelse } { pop $mmff_origfindfont } ifelse } ifelse } bind 3 index exec /SharedFontDirectory dup where { pop pop } { 0 dict 3 index exec } ifelse end exec pop exec currentdict end currentfile eexec €š\+¥™…lÜqZë8$]}¨8)!…îÕci{ö/xΦQ³UF׌°©ƒe! Tæ±èÁÌ à‡ ž–öùÏÛÓÜˋӦ+UmÿÒ`„0ÜlVæz–Ñ ßô6BÕíÓ ÉÐ×&èŠN«K8¹ç‹÷Y²Ï£‰EŽ+…¢©•A’a² û˜³ô‹KCàF ÇRp)SMñK5^QbLG¤ZúR¼«Ï1½»óãfå#k|Lipó—±k  ÒãCR *‘ø‚4bÍå1êK²ÙÿÓ06ÈÍ3.‡È;8|`ç"eÈÛ^HÔ¢jz¾w]aÛ×½èãÉñ%…ó¿!<Æ3Ž^]Â× sSB>¶ìCUUi~äG ü™]BXÜfú¬:¾g"m&¢nK£^ÙŽÀ*q÷*§%íõY¶sãš|ꪎ¢mýå–/Ͳ‘Í•8ö¿ÿÖ5>Aè/îZª‡þ:_mûM>5Ibܵ§&7§:¤¨’9Î"âI瀠þ‘Ùì2]á©•k‘òŸz–â eÄì#™`èÿøïsðò~kWÄÒˆøNåÿʲΆZUIH¯?‚¢Ü8öo ¢Ü·*‡CP!O*×?í\j!Pƒ6š!XËþgúVz[òniÅF¶.}ŸûÄSiŽdÚÄøìó m›TwïUDCUl¦rëŽí_¿~kaB:a‡wGå'eôt¬¦##s‚“{»~Ê7ÉVä|=CétšîY€xWÑe›GùÀ9 d·´A¦—ÿþN¤^?C¶1tÔ lT4²~ÂBãÙŒ<ËkÛܨ C50*œZ¥ ¼­û T¼¯²Ìo® $ì ù³¦ ;? £Oº::³V`É€L…µÎ(_ßóâ_xÌ!añ\;ÿ¹×T!…̲ÖP~‡ÇÁ¬3O¹ý…@j!ï¦/Ö,‰³`Œ O·\Î-WÚ1ñJV<…'Ñ•ó„™}p¾ØÞ´Ä›ÞxÕÁ–Õ‡˜cE%¾Qf¥VÖòoÚ›/áv~Ù¸šâº¡tG°@WLŒ÷`â?7*:Àþã"èb9¶]Y‡ˆ‚‹B¹oÝËOB‚´O戥i@ª‚Á³L^{Ãnþ¿Š/e[©j`ÁQ/}‚pNwºì_ør-öФ^eÆrRk—'è=ÈH±ûaòû¾R|ÍQp˜%,Ψ¾kÿ柆»‘fŽþœØ¦µ§sßrx¤ZDuÛ»LiÀÝóñã ëä¡t°×7ÈìldàýV†j³+#7À˜!© ëgýßßÞC·Ë`L {‡O¨DåöSä7Ó˜~Ùdç÷®õ²ÏQ»›è{òüÀÎeIäç:ªAyEk‰ö¶L¼Ý~Æõïy*~hxN Ÿ…»?p­4÷Ž·Õ“ –Ê~mÊXÈMžÏV-YééÕ—ÝM@yÿzB“¨§PLÂß óõ‡5ªyLZÔävé Ò_¸¹ëÁü¬3¸:“þòGÞQôw¬@±ógýÌiª c@ƒ2äÙIšùS•€sÃ@hÉ;Ûþ4ö˜m¬f ^«w,²ý5ÔW_ùCq†9 !ïãœð†/æ&›óÂ*RG >†…F1Èúæª Ù•å‹? æ**ι(µE]nÚû>©Àñ´&ýÕôÊ¥‚rç*oËéÞ_s=,‡ ߃¢ZÂqæÊüÇdX±9ºFEpe/,>‚õ|@7_—,þüñëÊ ²Ô¤bÎ"7bß.n(`•"@øÀÝÍ¢¿¹È¬xæÞtÇv¨Œûzà `jÈwƒÈ“ü¤…Fãfg>€Üã+½š›G{¸ÂJiV”E²W{•×%Xk kÛ1x#gëýcëÓt©£šmî¦e—vêE(xÛ%`s‹ý}&m„@ªvML3Xˆƒ’VœxÉæi&kí ÊF¤6«ó‰[g1iš¿24‘k„믳Hjú„éX¢¹o¡øÕ”.>ã»B‹ õ¯ÏÂïéÏ©êÿÓÔGo6«°¿|¹©ö+ÖÍâ¡"Ëþ G"0)•F”†ö§j¨x/bz‚×Ýäc2˜^6Òh´ˆì¤Ñ¡ê•—¢xL?"ØÁ?Úrç^j‘Å×M0¹í"ƒƒ9±h=pð\%5ܨGªp‚±)s=|ç5$]¶ÈQ.6'‹é fª63€Q)Ì™½Æ AY+Ölƒ%†>2'«Û¬e–‡³B]Vò‰êcÏyUÒÃ8ñ‘ëX0¿ƒ”1¦ xVTݪg3ššös4–_žB‘9}ù¸—õEæ¯Ü%a‡7d¨5ò§Áíx“Yà}iM ’ßøsõH_-gÊ'Ÿ²}|N<Æ™ÒájŨyÞ)M\s/”IAªÙOG}šèb‚î,Ù Úâ‹_¦…üù¨‡)€Ÿ{_ &Ís¼ª¬",ÔØº–è2¤ôÁÆ­CµêhÈÈèú@?Å‘r x¡ ‚Ù‰*>ŠÀ&ýƒNK÷É’ƒí%¡¶åO1²ã‰1£LaÒúô¥l_ו,D8õ£Ãc Ý¿ÂLê›üá¶÷TÉ­÷ÐÍÛ-ûŒ›zva÷)&õfBûcù Õë÷åsgŠWðM?×Ñ7|r<ãNKi¡zóŒÒQ ÿ1IC#æ**HkfŽ>wÃ+~óÑ"¨+øþE#\R"ºhÜ ©"m»àT>•,p¦ÿ„Ýšúq¡ ïÚGÔ>l|ÁöÓè†;!afHýž~™»4/vÚv4%Ë®ëy¤ÏÏöŠuî Xoÿ´Ü³ç(DÍ9‡§z=œ¹uü Ø¥ šqM¼°nRÔí{Ô.­8e¼,ü<Í|»ïàaÓaz\‰²øGdØ8Œú<ɱ7ÖTn`¦(D×ã‡GSJö©´dêrŸj‡ ?´ôšíìΔ€ÔÆ¡ÿL4­±0Çè[JÇÛ˜·ùy‚.­Ã]±Mí¾‹j=. DÍsÇê¸4iYgã9ÎϽª.ÜÔ©q˜cå!H £Ã¸$úYxËÕpZg $¼—™£:Œ ñø©,MFÃ%¿Bx”§Ÿ ùæÝ QØ{Ã\;ï®ÿºáiIh¦w„©ÖŸãò+ä\-oýªº yB$Nôx Ø\9º×™ÿsq1épÏæ¿n¿ÝM«kÝOpö8€ŠMi ^oF.žæ.¾Ò¦‚ ×wQªIDš4ô¯lzÅý(‹_µýã*ðg_ÓÄÓ˜!ú6Äu•íÜ)Ñàqªr2Ô®·à¿/-DšE‹LíqÉÞê—xà¼Gù‡?RÑ ¨ª-"¦¸=}ˆHZöÉ1x»ºÆ­JÒÔÚùºµ%{§4mce—:,ãU·Ô@^¡dN:W¡û ûZ&€ÓØÚ‡3üÂLES^¹ 3—ƒmä1/Ão¼Òž=Z ÿ8Öé¢ ßðöÉY®*}½Û·wwb™çˆ¨îäïeÙªO'h˜‹‘]¼p¡À©"\'«ùZÕü¢1šN£ê ÃÄÌ“VâøÝŽ™Î¶'Ž3Õzè¸c|‹¯v=ji”Ä‘úo)¹œ#‹µŸÆò§™îuÑCjç¼lâgί];§ v²ŒzEƒë V¾5Ç<º–¯äJäö7ÛXŸå¿Ï 5ý_MÊ¿ÑhvÙÊ¿{ dhX•™¹p¯Ì»{À½µÛYµ!EÿCiòvGk˜Q6ÇDô/IÞoM®ufÀC;è¾a³üaýª5¾ Ç.±5f͘~óGi}¬€ã•dÙÇ)9‹±ƒŠBµÌQP¶=UôÚ$e}|ÏØ•­QkS÷÷òXa×ÁaÍ[ùý_[1ËuäÆj½h@B')×Fì”÷Rð0l¥Ð·/€iì?øIÛ)P·¿M&{M¹‚ç/_ œ[—…§³¦})Úˆl NÙVjÁ„3%tí¿..l:–Yìwj ó9´Ap«Ÿ{ Ša”ì£rZ’Œ ‚•X±~„TÝÒã“6ù‚Ω¢Â\ÔÛ4AG TM«ÿÑ»GÜ/ˆ=ÊŸŸ¦ÜŠ'­ªw5 5€ËWÎþO¨9óµŠðÄ-âE ¥æÍ©½ã(Õ´ÜÿRîõ÷Ô‹B­Dý™(·]7)-Ë|(ß½”wŒ Åì¥YÛ¤9ùëž”ª ð˜®?Â’Œ,¸Áœ6ZÜ9C$9=K¬È‘ºæ"(­Hf…ÏŠ€¶Q£+ +Àœ÷«÷ðH% ¨I`½D‚¼mHÕñke¿ãR&èõ•i1°ÎžcãÁ&°]s=OkjùèAÙ}w™ð¨ÕñiœOΕ‡Â^|~¯Ò „ïˆ}…Æ2œ³B!àÃ÷xõLƒ*\¥¨¿bœðv° >¼¦¤§¬î½* PU"“…¢_lÕ9Jž}éèŸh6+Äk0 >6Œö·÷¿¡!Å8C]Õ)»lS¿}àqÏ·ñÒûe:¥ºêŒ'Ië}÷æëψË2b»AÍõ‚ ¶{¿…¹ {=FhVBϨ*‚üæÍMOŶöRŠŽšù#œPo-ˆ°Ém—;âQ!ÖÑ´ût.ñú… ©yø>wfnÍHÍS”í‹N[u+id¸p‹—YPrrI%ì!|æë€B¸–±žKkªòû¹#TõÙ.rcvîAá1Ëù˜N ݬÒÚNUå›Ó2H˜ÐG¯ vz"!‘Ê Ü ‚Ú¢áåäü>1¦ÏÌ}PEðv^.l‚‹†”`Ü,Ô5 l(ÚÐj[ígïÛ`¦Ù¾À¹œHøs'\´W41g"&gÝÚdÛƒÚ²8€NU,÷-+¾ùGÒÇ«´ÄéKZ‚NÛEÜ^ ßê&ï+=ÞÓè:÷ì3ï4_ ¼Æª`Æt%¨Ÿ©{Uý¾jø”Ñ®õŽ’èE•W—¢ø>êÕqHD׆ڹW“3#Ýį[ŠòÑ{Z±:DSHeþN’?•BõElR=Ji²;“£A8=ó[ašÉü“š¿ 2»óaFGqŠõC%“õD¼z|Á}]†‘áß+Ù–ºJ,7ºÊ|8r¡Ä´š§õê¼û`FÁVœf+tt€Ñ?s½e ŽSµ¡¿GXã±*÷ÊÚ½³æ']*×–6ÛE禋ÜD¯ |1¨žëUbÌÌÛ™}ўܗõHóNwÏ8<}áfª<¹ÿÔ•fåêîÝ–”˜¥D,-±,H´ŒVönÅfD-ñ°áÜ\jÎ'oû&ðe(ª›ƒrá º¸šÍÍùR¸'VMgFpÊ{“æRä½õ¿,ÞËçÊJ M•Ñ(¢’:‘²÷x§¶ƒã$Gš>¡òðÔ#jb׈mÁåLÝŠ{ ­Úñ¬«8öHµ?‹¥‡\ݽ†­ ,* .‡B7Ù”nµJšº¹²‚ ŽÕ+òm£þ ÂÜÁ`Ô0­‹1©1̧§æ(ëoÐKnH™Ák㎛ÕðFüÒ0qf¡lHüÝ%²tIlïh‘å ë3Íy0Ôq»ÂÑlO0,"aY»þ£=‹’Ù âk˜Q?Û2(¼d’‹kõôàVŸÖ6äÝ5ƒµ ö\ÑäæùìÍéÒwnÕv[Â3œ*J†5‚ߣD,V£6D{ûj´„ÕÍ3ý«Ûë¢óæ]}¿'çq³¿Äå'nÝù ¼:3q¹ƒ|%ÙžAÃa®ÒmTÊü§uäu Ì˜l ZÚ½œiyÚh¢yhÅ¡dj’©A6he†fþȲWc=©|E¼Fãü[µÊ}bœ  7© R˜|¼õnñfŒ¼Ã”—H2\»ZãŒzGŸZ ÑIoˆ\¿¿ñ›¯œûЬ^by¿ Ó©Ö`Ã7} %8ë»mŒä.ÃvÂ9ùÜb5chÀÅVRùIœ˜Î»F%ãA¼ß/Zº¥¼Y,`®$™”,¬Šâø„ý_C;«„~í.«ræ•9ýyj²˜|–4Õ†X>nwÙ”ÉÒ:÷ŸPwæaæzA‰düÍÝNÌ»Ðÿϰëk¨¹fA¥tF,0Kb X/Rq(O‰ÙZȪ—±úùh[¦mÅ€Ê%Î0€ž€…çkd½Î`Ö®æWÍPL¤”û† %¾Wr>¬éímÉ@N_ŽŒ›Ä4Ä1é-ñ€rf íÖR~쮵¾ÆNZÐ…viÛqqäŠ,‚èÍK*J¦=*õ£´ì[9ûÍ ñ‰T¥ÅmC*Ù:™¢ÊÖñîkÅ)År/^K?aŠŒ³§êaÌ“ä$vE™ÇÜÆ<[Ɇ‰f|ö¼c= œVÎÿcÊ\e8MÉÈtÈÁ»}_dYäÆï@W°‚® K/k?zJ“C5-”y-H®zÓWbʦˆàùƒÁ©Qü2Øa’!skçÞÌK#N&€“Ÿ•˜9x `ðv?êPÈËÎÀ=?w§j#¬º1™E,Z~usUÌ8"ú«ñÎvû*œ¢JÙèêޱì³XDÇÅ3ÆŽàŽ$H0$1åa©À|Nsi>²¢¯âäH:ãÆõºlã^^:Ú>/¸×x‚N€bkãP&HŽ4~±IuÄ:\D³tæ7jT,«C-¦Ò„½µ7+¸³ J„ŒžŠû±ŽõsM×Ò,°=éÏŽÃþÜ80ðFø0s3šÓäRË9¹ó’<8ÜÎÔÙ—Š® ¤ïpÁ #Ĩ'&"uC:Ëté ˆRx¿QfAï_Hˆ.Ûé¨E‡#†£3Ëm5 Ìê£Nå[Ìb­>úé©üzW·šzó×3,©ãN „&oPÝîóÁŠcK¥»#…‹îòÙ>u^1ÕØ£d´›©é˜"ÂY.†QàZª;[­‰V)Ø»yÛ¢f²»Û&ö\Ï>Ì‹DœF~jÌÌ7 +›6m‘̓mB;Óöà%ªVD€&aöYºNœ$ÀþÈsV’0þ—´Î0R•;ÂÎ>¨7iá½Ú¬qc>IæÑ ÓÊ9§€eeøA9Èäú*¡ØÑ=ëÎÆ(Îæ1Ú¥/…õWÈÌqïÌö“a»W£mŒ„ÞŽê©»s `¹B‚Ç:•úC|¤†0º–Ì’qåœiÖúã% öÿ!Ã/ä§²ë@j@gå,´bÉã…!÷¤0ÜâêßÓ SOéE?4ÄJ(n›J?­Š]õ×¥@[jú^± èÔö­g¢ÿ›/Ü»u{I¸_=¤MáÙD–U6!¥f#?êÁN*U†'†è/G¨|þMXÔâÅ_öÂ’CEŒVtÏQߓ׃ºUŽTd‘5E¥ñrUM>'Ñidù«:S´lÆ ˆ8ø±–½O¥^Þ…U›|ê×òÆNyÆÀ?ˆ!{æe©-áûizØù¼œ¾®h«È•-Ì¥)â±ÏÆÁü¢ttœì­°”&†Ïÿ"šýìÙâ:°¡š§q܉ñ‹oàü8KÄ>K¤<´sw©ž¹nó— 8Ô~{ÃÖ½ÊãŽÅ—7 DÑ£©S¼è´t€gî‹9€a¸DT¡Èò£Ni÷¨[ù'ùYªÒñ=°Í-ˆ`FÛ¯¬òÚøðòׯËêëþI挬Þü¯™rÛ^-fQø ®'4i«lžA¦±Ì G}M¨y"FèÈmÒ5ÛåsÀ ;U>¼.;+h ùoK¤ûª#T„úW3—"ß Krï¼5¾RZaÿí"Òi‰ÓÓHpAEÊ Šƒ°fcŸ_P¿¯N0Äð]áŠ$P f¨·C^ù§Çfïõ­ŽÜE᱃ì c ÑU<‰ÿ¢Ï*$·Tó bÁÂu«óüïDYþ è´‚«Ü¼ØNk9 Â¥Ür SïLÁ&4Ã0,kƒ€aÿn |ëïc`ÏåJCÊ"äX§aH§+‹¨ø—¥Ó@Æ6ë®5Œ[ë$à º}˜$?n—ìÀÅ–ÈyølfþpÎ:Þm ’p?Ưî†]gá cª,‡¢l¼ÚXÆ‹/ìQn×q 㸼è/€EÎ(¬øš!„ ˜ù©8Dà*1JÝyã ¡Ë"7—ްÁŽûežt†#JMÏMXXÖ÷Är×y ˜(-ígïÛ`¦ÝòbEˬò–—õEͲNCÁÔ2Ûî|Oh}·w5ädO{Lœ='PðôÁm —N@`t1è‘›ŸZYøã¯ð÷2U ¦`K\:¿X!¬태®>”I´Í(iŠ+7YžŽ(¸xDeÏg¿Â y˜»Ûrÿ‘Æ.™/Þ‚ïçD¯¸R»ßTù±c–´r1t{·¾&¡q<æ³ý¾º÷­í|ÃA½ÏtOÇ$ÊøÁ$¸C˜nbC®…‡ØÛx \««b×j8Çõ|GΨñSâSßÕUX­ü„A/`Î’%ãÉÄ‚Év|Í¿¶!Ž&¦AÄî'€2ekY* Ö_f¸Éø,+îÚzÆéÑŸ^çðYÒ¨Ù‹bwp¥jÆ|£*i…Píû&FK/uL¼Xi¢¡r¡´Ô?©ó³úx u ‡ˆÉi—cïÁX‡²€æÑ‚h& °•2CþS2vÓŸIêºeõÚ›ÿ-ß–8(yiA&l^ þ=0[ítã­œ@]Ñf¦Ž¿3¤˜s™P€†'®­¾!żµ'ü”Ýn[AõÕ"›§,yGWÆ8µXþ3é›…&¨‹”Í«B –XttÌA°ÿß °¨±ÿ‹ØG––2 j²}+âGÂu}QaØJª—Ꮉ°ÇïCw¯­p¥h÷¢Ãâa„Ö_ÿ)¶ïÉ?«,?$­vi«Õ›ý¦]6Η°vs«,‰Õz*Câ+c)Ÿô½ž±ø0#LJê9Åï?ÓùE?˜ÿڕ߆8y4^‰þ¤f´"Ä£ªkmf£;…ZBA¯OÌ?Jæñ'0q絺rˆwî\¿àXg…†Y¼øõéžÕJ ¬_.«ÆiÒĆu–˜,B÷SÓñ¥P˨Å@²ç=k¨PÀ¸ô#°—&à˜½aWÃq¡xTÌ$Þgô#Ó•–µ¹Ø1Ö˜²3@d"É –Í!C ÖÞÁ NØ «õüöÆPYç*<6Y¢AØÈÇ;xñô©†¿ÌZOäkÍ4\M ú­êU…¿®Ðw›cl‹õ¶šßgµûF.7ÐE"\ ¬‡øâT £àÖsb3žÐ`áB'l» oc¢^­1ÎÊs&ØLb*±hO&Ó·ðJXe3ªgRî:v¨E¦Ê•:PÎB€õ”«¨d ý•!Í=a麅K‹:"½•r{Qw9wXûúˆ6 +·lÙÿ¸±þ8¸×À%;¯QÂéø‚¸“ˆìÔú¾õ {ž¬«…±Ì‹Ø¯+ðßš6ög±ÄÃH)`“:ÝΈ…W@î‹mwÐ,|F%nÃà2áºu3µMyYBDkØ~pó•Õ¡åØD- [é3Øýl6ô‘‡ßû¨‡E…ÜâíÖ:¶08ýÌgx‘‹MaõÒGZÐ6²ÈšóºÚQþålËÇxNʵöhqõ»ØÖ°úDÅXÒyÐßÝ'‚T8i¥ÚóU4j<´$/'=Ùî0êG¾”væíS¤-\¬€ê…Ý)ê‹ÐF­?˜ „žf™)kÞ>„Ç'[wNöÐѨŠ<˜û d³ÅÉ*|(á¯!½¥ÄþA¸^ñƒö)ª|厣û½©uw§6 ^ºëxN"ÛÆà$o´Nw؃ƒ/sON @žcâe™SíÙ½ûK€ÂYÒF)³7C¢"2$ØhóK´é;9[9#)®w«¾D.n=Ô=rá>K?Ðt1”VvîÄ3I|¥³ I4ÜÀ=¸Ø%ŒŽU=½þùÛÞ´d^Ì_Lã–êô‘Ï‘ÊÊæ_mCüD&Sâ–Ä‚gW¹wã3õHYÖèØé¤g²¸þB±ËäÂ/ëÜgFî#±*ÎY‡LŠÔaÍo‘ƒ ŸÅÉ"ìqÓßá+ZFiîùÕ¶˜q‹Ç+ùðAÝæ(@1…7{5¯Þ‚¯JöÁeˆ5àE ñ?ÍÕiÁNáÈ" C²Of‰¸6ž"í­XäÌ.…fD„eI“i¦¬(TF(›E9s5߀k%@ÐV°å56­x$p—ÇéZ³A$Œ^ÃÌ/Á¹ ÐTå'“Uýùt)éýæTA/ÀŸå%½¤¿ëým3óÙNëõ9«ÞðRŒØŸ*kl¶†ìöÀ0©,+ØÝµ#HJ®_jÐíÚ²Qflµõ_½¶¾Rˆ%“Õ* KÃÈý1VÀ^Ê#2µo¬`éÉ8ÐV¿oŽ£\†¼ÐÃ/ÇÞÐËl™_V¤ÒÎ`M©Žèsާ€x‘žÚã–\@Y™¥S ˜1¶ç=l`š¥*‹Hó?ú'¢*$.:î½ñS^UÀÉX2{Èæ4WxqQMçý?àÿmKN*ÎÌ.xå³ZE!.ªaê'ý+¾0â¹’À$|͇¬yèFÀJJv†[½š+Ј%X5úåœOŽ®p‡Òr®îÚÉ…+#w·VTbÊZÆÜý³®ÚÒÊ;â/‰i“©ü˜('²{ŸD^V¹îºþÑ–c©œ¦~i£•ËdHHn¶QÞ† &Ù¹Zj=r].ÎÕ`9ÈË_QãhèÃrÄR¶¸üJÙÒõ°™¼¢E-]¾ä)–‘éUy Ÿkm]­¾·<=] ¨_U;iê¦ ¬ò›òáÀŽTêòÒ¥¨×·©Óò$oÑoîþÎáŽ;·ê‡Ú»?ræžçúÈp ÆcÍ›Ü2µ“yË›ü`¥,¡jF—XL°"ÙáØ @¥pà`ªêZøV ªGù;Ë*¾­U¶¥A¢C/ÃŒe@J“Æâ‚ œÃ#¶Á\EÎ^­ }°PnºMa8E·B…Ñ2€çý¹n÷à—­?½”Z¢EL)?Т*Dn¨DL5—|š›sê¿È#w/b• IÀjÛòð‹YëBiiÀb£m©ÍǶÃF×ð NpÁã…[Ÿõ3ÐÕzwÅÆ1ÓÅhY(ZjÒ}ÃÎ1 el‰§½ì·béø–%ò '×ôä,åŽêDÒ¶ ò¾cö–Dyh×ÙöÀT&~9Œ]ßm†ËW8ÓKË®€Dh-FÚ¨æFòg­¬ÉÇ6”#j 5ØaÃEœDÕ #ô1køkÍqJ‰g:ç¤@IÖ›š¼Îëä¦Õ-uôóM²{ù‰MÛ —\Þ®æðùµ±³»õçør,Ÿ¡jò¢ãîó-(%í¾»à\^š¥€V4Éÿëç€^+²œZÅ8Ùw‚<A5v%"ôîV¯ëi€€Éêÿz4† É ~FÜy/Œ™‘¿¿Ãd%‘¤W¿ËWÎþOšãÖ²™|‚Óýò»ÎØ]vdAazÐW7ÒU—ÿ~Ö”û`JËv%…ï0fTÜ–‚Œô3ù'býÓžíT¨zyù‚p«ÌAæòû>öØs£7¸„œÔÏ=‘î˨gˆÊ„wý[ ¸Ng­ËFѰü©*Qi¿q þ&»ý÷¬I)ù{L~Ç·£~p1¼÷Œ d›Œû™½‰„Ôýè¼_÷–;Ï®?Rêgã­ó6Ršòærä ç_RC€;™ŠÝäÁ]嚊KÏ8;!•™sd骾wm’޳Ý™ð9ª"|̦2CA…43B¤<3Ì»†SyîÜzR(/.ð‘Uûî(ºEX:Ãô…¦¹ -ÌT/µu™û4Ãc¨·p0î˜O›,Öùñ#¥ÿ:÷ eo¾K³Ì‹U^Ÿ'ˆŒ˜8x½KЧL¢3âÂ]o ;¶IäÎämI2!ÅŒVI[‹Ç(Éi ¥‰f‰Ã­$Aþ S§^DacYÐê×oqÂÇM÷ŠÍŸÅ»~‹Da Qs ½Ly¹® ¾7wqýš[Á‹G4©Ó}fÌ Áéú߀¡nÃØ”jõþI4ƒŸ_šæü(ïàè©‹Yó¿Þ›”M^2Æ3cêè oăä_Ý›b_Œ–¨ï‚——VœQÁÅœša™ Òm¬¼|R¿¶v{ÊÌî ¯"#jä9ÊÞ˜NÊ ] ƒåöDüÚvY:nQÞ!³E”÷+Þ™ÛuSrûZ*;çi¥÷Q¢0)šÆÝaËÓ)€|Û—‚Äjp/ÍüÃmúœƒÏs0"åºkJ€?[‰·yõ îÆ‘H÷´àGµ"­[;(îpMo4µýÓ#cfÀoL%¿e|H¿¼)†®_œ@¥ÍS²P·øÈÜ¥ûK&~_ŸCôeFÅøÈ x?›`s\= Pv Ÿæbò9‡K˜•£ü2ËÊ7ÇV@šO†Ò³çº¢÷hw.˜¿ 츄æäð±TÆÎunÐF"5'”¨U«½t=9Ñw/Vºáï]4,¬M2àR@%ØÒ!Æ+Åøò‰-hÒ«²%Ž¡PpûôÇ䣻•»Î!±¹ª@¶3r¬gýU–JÙyÖ¬÷_uúRÀÂ\$†MR\Ïâ~NWŸ_É%"µ¾áÛA\-üt€®š†škMÉw£ñ¡a€Oöû$›”^¯¸ Sù" y¢ t$›ÙÌ{?R¿ñ/ÁÄíÍúÝúóÕ’[0äJƒüÓ7XgG“¶ ³ƒÎ¥P,ÇQþ‰¸¢N»sE¤ŒÙMç”´sgÔ›¿2 Á:wûîÙ[ÑÊÙ (heµfÑ«¡É­˜›²#xð)–ÈZC|æK]4.¡)K½Ð&ÊÅ)ôOTÆ`ê)ww«UŸÅD}‘$ƒÍ4ˆQ€)œt#ÕŽßS#xK/³*€£ø6¿›zA3…c8 ˆñÅF$³4ó±þ?=eYæ±â}¤r× …f«1Ÿ0ÌšLëhqôÊC¦h ={Ðì”,O‹†^]j—~Jº“;õÖHíY…»Â[ £O'²PÐÚ ûÔÇc·Q%¿­¤ erš4pD|™6}gw•=+¼ùì'7Øø¯Âd«Ðq&$@p¢”ÕCª}iJ¡h¯ wÅÇéC]ó-¼YOh «9˜önÄ“·/Z†ê€µ¢8-lMÍQ…ÍþïÀ*X&È~ŽÍM€­Qd*Tr]S èì½M}´A :ñ³¢SLôè2°­Fn‘RÙ„= D+CÚDl ³S:¬§"ó~P¥¶Ç£|P·°J`Ð&ZAi×pvX¹Dä³Ä*$ \Ç`Üå ?SÇLö1s ØXÕÒ"øÝ@ùðìÖ´¤Ä»"‰;Êñ„Kp:ßârWÑ3Ÿ±ÈS¹xqûø?$Uù<_Þ$ßèxË>+ À>¹"¬ƒ¼¸ÁåZ RKX=6?­nê;îÙ}hŽäñ’)'LPaà#Ð&V<"&ϯà²AÓÅI.Û³‚ w§¿O£¿oa®ÃO5Eïé0ÀKŒìC@î¹)w䬿Ê{"žÙ1ÍmÜ/‰YãÛ]fÇzŒ1:*ÔcÌ|aS»ç4 ŒÚ¸âÁ ì«NÏ ÒçÇ"2dz(ôk“mÒÁ²»ó9T~ A.RëQ°¹`²øák^LôMSÛ¦c²sŸ*ŸždHÙã47ÑÄ¥‹Ù]‚†ô¯NdzʆOAð?ÀñËnQ›NUDŽyº´ÊûâìÛ”œÔs4ç˜ÁK Л޻@ý¢sÏ`AÛþKƒŒrè¸s,þ£2÷[pžsú—êyb¯WÀTdÿÃíBJ(Ç=;’SzLVÃ|ïºòÏJÿÄöBǧú†çÖ„ÚÍžËK«Ðº‚V1Y6º6H4c“›Ü®w€»–U}Kã¹ êî/­ˆz5 N|'÷ãœÿ× ¶5-ýzƒÊñÖy÷³hc|qE£ /Sù¦Œ² t÷Êöœl<ªB¿'5ºÄ¥/É¥³]©Ê]Þ7–‹p`(ùW´ÔæU ”ѹ·¸‹Ýû§&”v¶_Œüf„½)±NÒ×)rÐ`ˆæúq‹£@†+¯Ô¥W ¯¡Í·N{o ,F3G»A/ü¶†6B‚ÄVÕº‰„ÆwBwøDº“ÀŸ|®êsã®$•(pÉ™6ïGÁu®b™¾o(Áõ~('×ÊÊMüÍnô3ä°7Ø d²æ…‚Ñ)èóÍÒÇ$ì"åA²xñ™ÒÞïpÖrðï^û´[¥ÝkëØ$JŒµntGU$”V¯­»€ ÁéGžm¨p9¯tøÅÖ‡ƒuªçQöÄPmBù`)'LZ?Ð[Ïqþk˜·b÷žhBçfÀb¹z`¢’¸•’~mäe¼Ó‰yÒF¯šÌt ¶j”¢9ŒE”•L³c€‡m?äÓ?ÉAhvóSM{—R$ؤ-B¦NE.ë­kW—ÜlF¦ ¨ìŬ™þ£Úß9ÞÖ½SÌÌbÊZúw°3ò'd8[éÿd8¿/ÜtMíE·Eî†{g eûd…_£“øóí†jGp[%ô1³0Ù7æ”KóôORŠK2#Â#ŠôRIêfo}>È ö¢ 'Þò¸P^ªLaKÓz›Fy±-Íß9`õîp±õ#JÖ/e ¥CH÷¾×Æ{*Kº¶ „,³kÃ컢sgü箥^('R^OFþt}úsXðm;}Z¢\5:ÊÝÅ8R'7ŽÐ³CaœÔkèV~IS;ÌöQûÙ4òo ì¬ãåU5¬cy 81J´RdF§„qñ0„ðò†YZ3*D‘êøøfãÓ<QoH“Øá¡ DŒÌ6Ã}ÔëâÞGF–‰?•Єë½ÌÂGëtùë.Žãîa"óš ¯HÿVêC!>ΦËr³W¡iU&ÀáHº˜íT‹Y27ähñÖ¥fÅH¶Ÿç}…¯ú§SŃAv/ ˆ¾a-޲'´ û’ÊfJÃó:ƒ§(l· #‡ì#?_DÒ¸ñàgÁoß?Ó–¿¾§dAáö4ct©¨> p^¶Äjw¢m£ßê9S8ZázÈGíÜn$„O)p!(p–D[`t–‚%«ìðËñ¬ ¨ÆºÖÌõµˆºE€ñÙëwGër÷Ô‘ÿóÕzy@Š}™î sc[¨À‚lØÚعß'|mI%Œò! fä²+Ïß|ë!åÒƒ@ÁÓá¦__?FÞx#ß¡;$&xŽwUÝÎhÔt2ê .ø»{óEzß=0•ßø¬áx‚xжÊÛ˜M ±‡ŽÌ1—Ö­qW—³ÿv[ï Öº:³y'?ó3'Wpºê“%÷4C~ž$ hu­ò¾¶3š¹Q õÒ§¿óÅ=t¨t}ò +2Á‹ÉCKçJ¼`Ž\~ â ÷bI™Åü$Ü07HµËr£~!_3Üßô$r=È®OTÖL^õ+¤œP2žð =y’÷Xw7IñÁ­µ’ÚSäÂg·& 'ÛÚ37OèÊEøE¿`!_Þ¤ÓË­ôïâéM‡g¶Å>_ƒí4˜‹s4>#ÕKó#½¦*kùH§Jyl…›ô>Íò/ÊóAÈÿsž?Q¨—“Y¥`QG燤õ‚@ !ûQ˜ù¶2>àæGº5rG´y8”¨’´ ØœG@žG‹Yóúl—_ ó#E}C¦Q}ü²þø¨\r×ýÙfÕ úEäìÑÉÕ+G%%ÜŸå i!%3Ži¡ÃÝ¿?ye.à¥ë+½7–ÁÒ ôÂtZ%6r‡ š•roßD¸µåøùêa˜óö? ˆÂ8&¼à§Þ.E q´åJÔ2¶"Ô2M3‘Tÿ‚D}—L@£üb–ÃXó`u£˜ÏÝçó€÷(Lìì—õ¤eÍxì;<à!ÚÄžP‚i&ÿÜ –®Ë§¬J$ãæ´ã$ìŒôæÄ*DB{QXÍëT{ßj¿¦K½ùz¡ˆo$ü§–² ïŽ(ß‚ f«;ls;'À4üíC ®‹fJÌaµ:5Pé[›sÈ׫ϙçÚåÞít]÷îk¿ßžO, _A›A¿2„ÜÀöŒmép¨ΈS æèL&y8x¢·ëcQ–žèlÏ?$JÏ!9!÷²©“ßÎ!aÃ=ηΉ•Diþ¥”ÙU8:ÓêŽmeNõ>—!WûQAÀ.Oê6è1Ôåw ñw†¸ª‰‘§@…Ò¦e¯÷w«ÙNÀéWsœ@rz&§6o):«ìàö¶îd²yò½³ÇÐlih…µ)TüÉ&)©ÿpAòIÅ:åPÚ"àLÂG,zîLÀ)…<œ¬ˆí‰Q¦ÅŠáÅÕ’^¶©ÓqcCXxDÏ0 I™d—¥Ë½©<ˆ.õ|9¡äŒâ´x Ç·‚Gnhºª)2å7²†o±”»ü“K³ñ!*fÉÍÖ=ˆ†P–áæCKÕ 85Z~ÚX‚¬»Á«þßtGãìØõPšËïa–ƾùþ1ÿÏ9"vÅ¢¶fâr-né3Â/VûUÆÐuyB‡H§´¼øþ‡ŠÚ½þîÇ 3lJšÓdAãO&“)‹ºr"œŽ¦%ï.GcRÅHÊSReûyâ]]•(BôÓ18M·Qµ´Ø3¥aU&ÃJ ¶ã¼[òro ¢þ¹,ò‘Â'åÉÙ îDæ³vå|é+¿À,DÃqh…h•Ëøùµ53Z†*|¹ZlL° LÕ—i…èKAÌZjFad€{ ë¹Ù¯ñ…N¸\:sš¬­N7’ܧ`§( ¥Õ'<¦|=:(ø¸þŽû†-Oƒ=Ù5ôÚÉ=á™ßܬ©Ø6ÌXÎüúÅ„ý‚s\ £vÐPÇ ^’9ôPùG5 6«[ð$Ã…“RÆa9Ñ9 >×£`Vh PÎs“àAw³í6÷r ýÁ}ܓ͞ÿׄ~¦O*.Érç%,£æ߬n«\³oü€k üÎÙ7"‡×00O{E3/ùo­(á§;|¬ ºtkHÚ[àöÙuœ( àpkûïÓÿM!2¶rtæŠ/Å匶×MŒ<}ÏZV³¿ð¼f6ýM7F€ R¢U°ÇÖ÷±ÑFʳ¿rG?1¸X^ô’¶[ÀN¦ÙQ=µ¤¡x I…Ã(†»{·«Ü™ãØÓ…&ö‚9XJt0+.éé·”•YÎn±Z\¶ÝÐòå'|Ð(ÄÜ¿é ÷+Ï/r# ‡<Þ¸—Å×ãve$ÓÃV”ÏÃ4Eñ,á@éº YÃãþ#¢;«ñ)„ø5±j›ÛÎ7zÍ·ZÓè •h†É¼Ë&zééëžÃé©üßü25íxnÎéDæ¾?æø<Ljj"¥!,òÊ!æ¢øƒ"·}ó'' °$5p+Dθ2¬pu# ÞO É¢„<»aNÛÑ’¬txüQ?=zv`ûf âÈÞoRXºŠ^°%/è¢ßÆ­…rö¬¨ùüR°p±ª±)&îÒ™vI—wEŽç%=~4y°ß8Yhû¹Ò€vJÿÓ× [Ø•h&Oà—Ò³"Fñl `{„‰bõgmf¤¡y¯¡f§SÒ– ͺ=ïšKÒààp€àîfçá¢Áª Øöeä6¼îzo%–³TT ù€à7iHl» –|z¥Ne™µÐh‡5½ø¸ ùTòñe#ߨŽQwG`\J¦zÚ6tªÆMB»+Ó‰ŠBн?–äº×Ó.h¶„Û†±…Sú){0\m§hv«TÊ—ú³Âíx6Œ‘· ¡†ó}ð—> ½sl@]EÔ+È%C}Q- ÖÜim¢MN_FMY2‰{ï­ŒúOÎuL:ŒÉ-â•B!ù&¿uÕ‹¥çÀ‡I]Búë On×=/aZþÚ  hlq<¦d·¢ÇO†Â@ºÆžó.¨LÓWÔ8»ˆÆU:­nKÆÊ7=ÜÅgZëåÂß3¾œ‰u+'dàÀ}‘³öjSj“<«qÑ =K ±>{“˜Š»_²Qªp¿ÌsŸ Hd¸|„Y~€|£fzû°èÜj‹‰Ã¯S1~Y‚¢§Ñø:áeª¿Ë\NzÖË<s7è;Dÿ¯â6Q|Ä0D•u–COý]åù:b$.'ß&y2¢€½2ÌkÊu Ì¿n€¹â­*žLñšXxu¤-o‡uö0}ß~HÐ.˜“¤áÏO †f¿HJzK±SôÜbðÝÇ ÌKÚ³™|ÆîíÞ4naUsØìlˆP|¦lö¾Â]2$ð dÖ"’Í^!ǸÞŸ>E…¼cyÄDÀ•OÝlAt®Lû[„=ùä¸iùßäâ¾±Åü»ª·‚Å‘¶N{d–ÏJíµ'ÝXªµ¦R•úƒ.팹jœêx¨×) ¢qº™oÞÍ V'¨¥ÆVøô«(Ä$&7øæ-ˆÆº\m1ÞzÕ«¦^m*~ÿ¿®\ƒÍ+áx‰ÖjˆPÕân¢†-È?¡aY÷ °^z-l@ò«e,þ¾’®™ÄÊF“¶BóüÙìš9¿Fs*#<øÔ®½™™éÎm Ÿ€Ðƒt¢ÿºßÕ#u{ß‘NV˜§E‡˜í°€F'ß‹Íém”_檚R,¤”äƒ —Ÿü ް¶RÁª—€iÈsù\K;4A¡^Œîâ^ŸÉ›r–µ‰~Å•áóÚꈬ(ìhè©pdµ{y–vªHÓeç"ÃXENá"+÷5c¸ß$åmÝèüý-QÙR½c¬j>« Þ.ZÓ³$CHi* xÀ—bž<ÒJ÷ý2¬€\ÛìáÂX!0èÕzÎ×&ëÜUÔüîþZY0 ÔƒAÞŸÛ!Ç6'»»Q!³;¤õ.Ùë[ØRœ“?öòãÓZÆÝÎt#Ï}—2€¥¼¿µVý(4 þÆ[›oš Rzsu_ôj»0Ü:1!M·×ïð©JÝê¥÷*ëTJòF*>â–k™$uuH~ŠCJz»çÂ2þ_·éè;Þ´ði+û–Ÿ·nëx&ÏDT×û >>"j-ÛšEåM¿aX;ƒOƒžuÓêæ^ÙCåpD«rht{8~!b´z¼8ô<Óûd*Vùf¶¯¼÷â,Ù¯Gô¹bzp •p‡¿\®É2õUíKž‡Ű¾=V®%,:*ã\Ù*{ 7Ô5|x¨‰ÿsäÔsCóx¤Ð>«Î•/Èží}j¤hcÐT'Óóè(•ù%¤?å}zTK¤E˜§¹}Žiîò4ãÊg0ζzg*fw¥ýS¤ßýºä,Âl¯¢S/Ólÿaz„mîP®tI{$ohëáGPH=õ0Ü;G†¾4Žq$m/®š;õ‹æ¥)>½@ÖžÖ†º6f«„µÔöÏ©þŒ…zf’œ<”U½‚»æ¯[(rn‘7Oöt‹RÒùœo%ð,ô…³éÁ"‰§ fƒˆU 9+ˆ„æ#hgVÆ*¨Y` ~TD>Y{"UhBdòÎ>f÷„Ü£€KÎÌÛï¦$aî'•rÞ'ʺ'o«~ާà)á™…c™ û˜GšìWí¨å‘–£—Ý~RÝo¼/A°PSYkÄ+Ú~tê` îÌ&ë fø'NJª× O\js òçs{ý¡m`Q„më9®¨´Nuíþ_¦Þ;×èÏ=Ÿ,¼¦ca¬º9Ô¤Zë>$(ŒobG”9//ˆ9UKƒ«.p÷ÏßßÉïõ»\¼èVŸÒBÉÅ*ðÅk3ˆB.Fä×—ˆ§ùN ¨Ôä³4„ðÖ}+ÊÀKæ>™’ã£ä‡“Õ­;²ýž[¤:¯¸„|†2TsZ"b¦¬xv3MkY ™&’T—E&T ]º€–Vè$cÖ@ƒKÎL˜:5ÌÕÜGÇHþ±7çÛv±$˜"¿´\Þ»ÈøGÑqÔe¶òN†€ Š½õíûµLNÖôIî[ dM¯bg,‚FtMoÉ ßgN“sTÛj‰OA® nMrû¨éfÀK½ýÂD?öfãÌ~†„)ž°›{û Næ¡ËQÕuAëjÚðÓ« œEÿ!˜ËcÜ7€Ö²®J>ùú•%‹o4'¨Àî!ȉ1¡¾Ã;†iåîlç|YPæ…Yè%OïSjGr ünÖÝÔýžðl"Û‘7i¬^Ÿy1'xØ}õ®OÌÁì¾T¢kþZZO³Ç W+Sk«ÉQsG7ÉØÛˆ´i¢c¤LŸ„@Q+òßnÃ_:ß¶f“8M±,÷…A6ÅÙà¯_¢5wQEŽîòòõÔw¿jÛ® ¿Þ‰PuõieôV`š}üÞ 6Zé·XÁ-#Y#R„ ¦0¬éÞŸø‚g¼ý¯à€ù °™KlXbr£u€ÿ§YmŒóCx¦/2vTâ’ÇR öãÎI9´æi0ù«ÐCKÒrÕÃ]7vÿïK]Ïàù Öw›+‘¨Ëí è"Çû(¡¨Ç¸5©éÚ­L}ôßáSeõØhz)G­až}î´…Øóômä•õA©L×a»&Úñ?}·=˜b. o^iòxL½§‡ÞøÎˆdxUfÔ‹'êÌ­œÀU„“ðtÅ"’V¥¥Yì8F^ý Ù6.¥>¢wÔà'K”cÒO†¨©C¦ØÄ+·'Ѿ–”:š¢Û¶B!\|>TT<øX ­†^O£òâÍ£úsõS8@²`ýRn‰RV$£sŒâl¨¯«Èíy˜´xm°[24>ì,£©àÄô‹›$zH4Ò!Ò®¾ÖO‘¥Q/eª–þéÎô¬‚+Ôú<^N„‡ät¹÷E|êß—MîíÛx€q+å ©iŠK¢%œ]L A÷¦KX}˜û‰Ñ`Üp´`-ëÝÅÀ ’€-Æ–¼=ßÀJ„`|R÷ÞÜž|¼í)~õeÐMÕÃ("'>7Œ2íL6©dy^· á¶Ø€"(DªFb9Ò£ ‚‰ë(öó}Fþ^ÐÎJîeUBz´*3U§¯¾P…ú¬ÆœË¼-ïìèy}rg¬ªÝ°ó}» >Û^0üš5­mÍnÔAH¤Åðh¯ToîŒHN:ç7IS1ôîû¦ç¢^^þ-¶º-Êë³)Žqú__*'Õ啼‰ÔĿЛû}5‡À=û¶øUÒr± ÷å¡–Ïü*E]¯>üþ˜ðø»°zjÕÚb¾øiÃr—ñ+£¨Ñ­õsõÑ¡ÅùÏWì¿^V/<À5IÂí’s\­›ê-G'¥Ø]QŸíÕöǬ¥¨æú÷êͽ»(¹“˜?.!´¡U~㟷P"ƒ"ß¾ÔÂäpˆ&gï—K¨^†·ÞzÿZDiXŒ±€’äÅžRí˜:~ŠÛvŠ3x¹Äq²5¡Œ{˜Ê-Zâ×¼^kŸÛY·æ|ëÿ‡`h7*ó°Hnþ•²¶lŶ_„9Õ¨²¡x® ™éyv°ø˜ûz`Ô ‹jØòdýÐ;•óÜ6 ÕÑÕ^ô ½O‰ê°”_;J)w{µhvãpŠœ¡ÜuQ½Ÿƒ C6Ï_lÕ öFÐ'Ò‡V›¿ÀzvÓ‚})_‡.«½ã/ϱk÷¤IÕò4»QKj><£öW|î[4vÏéÎlF!ãϬɮÅã¦$*\Ÿm(C*Úrÿ9áy¼÷°í‚’þ8yÿ‰ÆJrVL϶y.3LDd ñâ^A xÃ=ò?gÿK|#A­¡ûžì¾g©C—sIڛɮ®Pk–Á6RTÜ5¢ìE@mêÎ/Ô¤œk³ØÐðö0ÈóU'¦×Ãi3IVULÒþ;€Èg±˜¯{™îØÊUQ²/³ï·i•&IŒÕFòh>ÄSÜ·¸9F×?Nò~µˆu·‰TÑŽâ>‘çšš~®–HAl™ð‹—!ј'¤I§¢³tDÔW8M %ö&ñ§9§[d¦Ãçã)ìÕ’}|Œ$ŒÁØ~Ý„VEhÊ—¾–ýËp€?ׂ2ÆÚ¸ÑL)» ñ1óP¿QÎW-™*Cn”û8 ÷µ-½1 t9­ ðJ€(½ÎR)8¸ÞˆÒ×J=ãj’-Õ·‚„#$ˆ%;¿Ñ}ã8¶J„ØI#Lª„d´€s‘^¨@ÅÖaåÆ]Ù•g¦xJ¸ª l%û‰}I£ÓSϹÔ5Ë› ¢Ê§uÍ€ªóŒºW?ƒ¬VÏH˜GM"–fôc#b~aO4ãÙlM¯ýBÇP™ãù#¸lü½Àãž¾mÑc).²e`-1gY¸u¢ªå1x½¨fº½q }!­ÓÒ}Kœ,§”4cq–G¾\s¼Kq•×9è:©*‰S®ž¡iѨ+’I§ð/ê³{’}€ü‰ƒRèPS ݼ ulþ¹€Årî¯xb-Ó2>¡6Cܖ팑'@Nܵ[æåm/•—ä@uS<‚X YÎm¡È,Q5eDï.Ÿñ¶‡xíä|€] 5‡Ëì†-þ¥˜N¯)ï +­²ó™2BzôÕŠàZ}_]`E~7ÒQÜp1­J/¡¥]S0S¦8À|ãK­ÅM?6þ•iQô¦-Áçe°‹NCÞ&ÖœFdžƒ$I¸Ô†Õ£¤#oÈÉöXEŽ7p«¨íC^÷°ñ2Yü„ 7UèÍ÷açòô¹Ôˆ\#´îæyHVPã*`ß[ũЀ®Œ¦Qø1Ý@‚3¦KÅrov À!QD…1¸£E¾/ ¼¬–,ÖÐ}$õœÏ0l@]rq=6÷Yš±¹°Sô}[i ÿP>ªpÖ²žüC̉ŸÐÁ È·ha˜.¿Ý3G/ üYXX‘¥dbÕ8̵È{.[@Ò°1ñC’}ªŸ<ï|Ê#Ó#{ò ×7$ì÷HÛ,‚‚j¸d ³‘CRÅW¢Ì¸&õ_ÇO•a[x—Þ¾)T=E+æÔ)ÚODBURaçÿk'åÅb®¢œ;׊Å7# ªœ7rø:}1L_ÄW}n>Xt„>‚pÔ%s×ûm΂L)R,Â^|:E‘ ¼çsñÎR³6;Ýqà,‰½>‰eEÓi©• ‘<ÆrMãúwÞ_áŨá3rÂŽ'›®Œîë0½ ëäŽF°Ãñ¤9#§+±“Jh6ó¼PU¶—î(}_rZÐÙBÝu‹]ƒ´}YLeP²›‹òmV1QV4lUÆrûnâç}¯Ö«GwŸû™±p·íˆ[SÙ+B‘#@#Æc}Uù=Éx‡FkÌL‚O˜e]ô7ooã˜~l½&„õòØ4ÄŽ¹j€6p3¶^%£ÃØ5Q ã+i(Žpx—¾Ùä‡ìòÄÝí+ÄælPíw}Çã9úô?…ŽvûóÔ¼:¯{o&L”kþ9Xšr úˆŠz¯m:J×6_-Oú.k­uW‚ÙÏ!#²ö{US¾ëwÙнûÜøP¬¦“½°ÝçØ”ÝÍnEÙ%Œ9ˆð}æšÈ(žÜ±O@ ä4E˜Å¾ÂUGU{T×& Í÷4r;Obæ÷D\Sý¼c‡q€ü+À³¬4¸}ÈÆ¶çýëæ 9Å×Oýº»¿Cm‰ ïmÔ™šŒmºã¡ñôÈ@ôP«l‚ÚË-€N¸@”út!<Äq»ÂõzÕÒÑcÐÞË?àã5]ÿC’\¨'‹MZ_Õ¶ØËÈ'JECoÙšcЏTÝ’”vˆŽìÓv#¨@p¢98Apy—SÀtuŽÿïD€t“ÙÑB­¿„¡Eܶ˜¶l˜W¸lò¼×çÉÔYÉ”aÜtS8¤™ =îÉXîXö‰ ½}ŽºþrÍ€’zGÕ ]η!*´?gvl° ¡Ü‘3MíoÓV{c—¢!»)Ï6 âåRDÒ¢/l !]O”µ%>¤( ÷vÔ;…÷ÂÕð_> „à‰)ƒ]àh„ØSÂY©ÜC˜i_2uÚÎõíËzâðhD?.|.šzY褆ûÜt¤õ¢‹›ºÖãÀå¡edwg:_¾¥_b +DWP®ŽÛ†‚@tµCÔ^aS´É>”Ÿ¡,îHåçA|³]Ñ‘€»v¬³fûd‘Pò#%Ë Ñtr$óu¶c­á»Ã5§ºÉU¤:µK:$í³U<Ëê5ƒò¹RjPÇ2è"šÜEYvñªÌŸµcó¤]—àM,Vßìþ®´#´¯JÖ—I@Ogl/ÊÅ-c àý¯÷ãéI¡N¶ –Ü¥ L»ç#.9m´Ãº'‹rz÷±ó³Û¸cÚ±ÊG.rít4Û"õœ—LPYÿ«ñmáá­&š‰û©âŒÚïGqâ¦Å¨91èo½õNÀ/ÄKj> œµóWƒ'̘a5êiÙ«½#ɸg éÏñiû¸2ÈG~u>ß=Ǥ»õ™æe€-FfÃjà `Ùëì“Ú?Níò/¯ö<âÞéËøÏ¿ªÖٱͿ>§qh®©Üw'NöÊÿJ ÿ×ÜGܵ´Pßü§O¿Œ‰˜U¤ã›¯2CNzj¥Iò#û² ÚØôç,¬ØLçdôq©°„ÐfØMYçÁ7!š&»‹CÇ—KóX´%‰WË)áä.zpûêíпwÞ@Þ¤W½žßs^–[òd™ºžz®KÊUzËþ@¾ÐÓ~ÿdÒÅY¨Ôb˜¦qìOƒñ”¶…œ¨\úR:ÓÐ &x>“ùš±åÚšøŠ>R7Æ™?.âùeiT\R–éÅÊÏ#Xo]ãö%8²~$fC½ÌH‡¸€h…-Å6<Ǽ”i;Ns­ n‹Ù“ Åæpëœ1¶(m3€–Ü)6»BÂNõ¥ W§Gò†âÆ÷+c1aÕnº®{Qz1M\—-5+ÁÛDYžÈ\D™»á¹IW»4ÆúO{t¾âmÊ·ÙNvˆëÄ©#ž[êxsÖÐÿšöµžHêŠ ¬ ¨:ó}R4OðEÜ,7‡LT¹‡²”œMÔÀr"Ëqg  lÞà¥_þ'Oí("|Z’ióBvëÅ~È`wrr£Æ(Š+¿ps–$‚:ô_· ¢a9'zV+jNt•dÕ™ùÍÆÎL•€­Xvù«²áØkÀÊfä5#‰Åœ9zĵV ¶%]³YÙ¶Šo~$Ë’ŸÀ"Ç¥Ù»þBï©FK»¦–X‘‹Q“ºyÖ*˜/€éúx$çe®œ­MØÓNV×ùÿÝ\ á¿™«ŠCß±šaø^Û½ìkݽ7¡uuoGJQäT…8÷»˜aæÙ§ãÎ'è@Š–î(<'·â¼¾lhÓ˜wçüG ¶rÈÒ¾.É ‹pïx?{“;H›€WK{€ÿ ¶XX´Ñ9ÿªoº£RÛÙ}š×F'Û´Æá`*T›¯}„NÚP¯)Ý~No´í†;cCG¬¾Áø{Ë·ò›=0ÒIÕ ð1MÒm @µÔé´w"žÿÄ( X¡ÂÞÀêË|¥7É0JÍRv¤—á³,Þ—L_ýÑÀ#íg¬2SÕñ“ùþÙ¯}qSJ$È×%ö:oýŸ§ØË½ø‡;+ïû€<´ØÆûuûÕ¨ÚÁ¾@q\ÔfXøÜ} …ðná!ÓÑMouž–ú¾Ó‡“¹'ÈI,2`†åÓ²ñ’ç ""l£JøøÙµ\]QÀJûË᪽ÑÎNÖqž¬"á8v÷X'`m‹¤Îf餬'ÓœÀŠH›5l§É¯c,°L­ÞdšmG Ö:0'@©áOx+瀘ÔÜðÚ fêmM„ëþ¨ ÕA½Ì]Q,‰ [Ϩ ;ŠQ ß8¤ßƒjy‚å3àvF²èžÔßà‚=˜Öç±1Ÿ'ÿð½ e³Qi±Êt­lŒ…;10² \éfÖBãE»†8‘œ±Êƒë<MÓ§]‘ÈïÀ¿ª°ÐA¬¿×ùüdÞAÛ!³³”îë‘,=$…ìqyÿ­ i(‚1‚ðÀnÖcd)p°Õ|¨hb0d¶fÜ`…’ ¯Ý겑íµºzbášðuÁ°t„“²ðùEÇО MÄRÜÛ.c¤èlÀE§4®4¾Xaì ììñ‡ÖÒOUú‹XÖ#~RÆÆ»Ÿ’åÁ#ݲ€ÒöA£cÅ„ÙímGàþ~ùsU”ˆõ¢ô¨íS/B60èÀ=V f yOºšýAi € k_ sy|d 0 {Œ¤ì¹Žzÿ/s WÄK³Ù+åq}K’Îøº§Çaû5+sVê…x~Ž8F]ó)—1Çõn€jéC5nÐö[)¿$ßfÝT“¤Eã+Âäiv t»dÄǦC\Žå<ÅF„K¶×cÂÐF~XMæÔ£Vûä‰ßºÇÏ,ìh²œÅ=ü±Opuû*øLœƒÔXðÜ?C¬“´»¯Ä²íÈÂ…_ÿ'Á­)R¥‚ý ÜW7xÛëJCvJÔŽÀµ¸ÛW—Rþó¦Ôy¨w ImŠX'ìÙµÖ„:mª¤S…­©ÚÆ÷ªÑ&<›'-K¢¤fÓê›»¥4rã•ò¤¿¯ßºÑ}ï´¬>qh)AC—•AG(Mæƒ|‰ßª› .Á£?'ȱôª0PC>-»žÆƒ;îeÓ«1÷^Öçm|Ó'»±Ú™øÄ{ °X‘åËû%PT°k»W“詇‘–Ö½;Ø30~7[w›æ¿FŠF ^("3{˜™9Œ©«¥cVñRKg¾¦ ÿ)XË %NþV Ê œ0!@7Q= • {4ØV $dœ‘V8UÓŒÀaØõ•À™%°m‰ üÝÚ˜"Üå¸ö`(xW…¢ŽgÀ}òp}‘ÃëìÙd Kï{ZÝëý³ [8¬/Iƒ"ð‰ ›í]²{"ˆàTŠWáC`«h…é/•R+«,ýµyºkSX Sø¨‚”–aš˜ösÓ¢P+,J®ú§SŃAv+ÁÜ7ÞôŽx?$ðh ݰLÁ–†¦SNOÆ;|ߥ­¸ZÃÍs’/èf€7i©œÅ‰ÇüçðËÔžéžCWd1&üì<öú÷AŠÅ•}UÂ@üñ¸eIè'àAH'SùDB6ÝÇL8õ£XA•2™‡ÁBŽ»á¹GŠpâ…º¸‘;bqX…°<»i¯ ¿E©å ÷1@<³€…T¦ OPÒAôëóÅò“*È#ÈËSYÈY±€¾OWyx„$óýBÞŽ5ºÁÈS‰i ïš,‚&Nªlì€V¤<–-úD‘ñp¡éöæðrO¡ sLø¯šq §Ú@¼Éy‡=ÉEá´Ò ÌA0á;þû÷©(„A€x:+êæ:‡¬Pš|øG„ˆ´¤·y°a® hq-ë@T”–ªv¼=ן€ÚayàçQ†§èÇ#~_’W‚(BFä›tg9üÜ0ó­ÁC€S6†à|ˆZˈ&pâs“¹BèÊkDºe‚oúìÝ}³“ñb€ €ŸU®ùØ™K…BB¡‘ ;lj.Þ÷íØô¸kËžÌ2ùNü9o7¯Ô 7œ pŸû'¸…\ÍPo v¤íZ«ø©£ >ãJ ñkŽV5´(×wÝŠVL°“¶¼=BRêCëõÞV³fAú9¡Jõá~˸€f“Ïð¡¥µTa¨ßôw2ªü~d ±Àý»Šþ‹²çæ…¨iwb‹°‡\/ŸhSq(~‚Ó*` §Y+€ñnñågªÆÿ$OD.ÓgÄ{d¶yh)îO† näoÞxúœh±C‡)àŸêL9שóÌì *|w©’7‹;bs­q®Ò”¾¶a$ª›ÚMlo0íɶãÒ§ôæâ"w/lê{rƒ“ÃLÛ¦»/µ2êMƒÇ¯PÜm¥™ìX>m“ý1 ?ÈNÇÐY1I Ð/8™>‘%êäTÝ£ÖóÉÑ ®ûy5½ÉH;õù479ͦ¦¿W·iH*Êü÷à÷èþ#j1™H>*¡ã ãmÁÞ&טgé N‚”+¸«Rê¯[˜‘Ø» Ð|òÆq­+òCø(o-V¡×þ¼Ï “ø3„èÄÑ婽Ӳ%w¸_±W¥qaæ¥\ërî=”–÷w\Ôv­o,ªóÐÊ„ húìý¾ðÙô3ãï/òÇJ›âìýñ&dSá¿¿÷E9P4ÓRÓÝÁ¬§§–o6}ÈsÑ`k§‡~‡…Kéäöõ7Ù•ø2œôªViîñ41Ý?…r-S;ïàö‰1SlúÎí%¦0ÁÕ3š¸@lIJq€ _¦Þí\óB`JµÄP_¿&Ê«l ?¡¢#ÁK õßBrF'üU¾ƒª¡(^ŸðÇìqHn©Ò)›ñÇûxZ5nnÒ¸ÈI _Œ{÷u:'/ jôÛ•*Ø»¬K l¹¬ ÌÙ WŒf€X.: ¾šPQ1yL´Ó€Ø˜e"¹\Óáö¾óŠÚõ¿€sØ :G “¼Ísèct$ƒ ŒéH0ܸƒ3®½¿¼Ã¨€»Ró Ç¨{Çý† °*чñÁSݹ[Ìmx,fŸ¤ÃmÏ|œSüø¾e–³` ¤{åÚ¦µüŽODŸœÃî£Ä€AºŒ‘“šC¯g` §Ž˜6©¤?B4]wׄº8ÝuERˆgÅGkðgjR±)?ñsFNâ*ÞF[kèJFx'uþ³àFÏ,6ôKçq2D«Íï?¾åXŽÐ}Œ¡‡U ‰mݨj-+WSæ—nŸ¬R%¹ÇÝÎÁ³ÁR¹[ ÷ ÈN>ãOߨí>l´ì@ f$‹MƒR+RÏ¡«_¢Ñ¾« òtͬ †µ–^öIm÷öîÚÒWãˆ_McÉ!pT n¦`iâžûtªXž0èò ©ý«áqŽIŠœft§mÚïž3 8Û!ršLzOâ•ÍVTû+ðÈ¥=/,cŠñÊ!¯¹;á*õàwÇåVm3ž][„¢h½§ã¬EE|.#Î|=W^RÊÑf5Åã@¿³Êq@P«³ît ñ4Á¾ÑQÓ: >]WÛÓAKçM‡°N †F†ÕÅ0ðF=½ºþ{êz€c›o•"®€`{yæ8B{Ý¥ƒE³ˆ Ϧd¢¦øo½;°#îÅs¼ (Ò"kSla;MWF-…G¢ÑAc>Ê“ ”Ñkr©`+˜ÄZ ‰üHLøúvB‰³£V¦WÏéëõþ`Ð=«µJ³ÛÔ¢,Ý€äãš-¥¢ÍT ƒÁò)Ñ‘@È‘H{×~hª¿…ÉŒÏ*—æÖ—açdÿ§.û¾€Ìø[×4L‘'S¾<Ö‹áúåô6+H6cSZm…ãl%‘îÞå}Lâ˜Xí<ÚzÓ1•qé0{ Na-]E}M3Šöö¦¸Š!€ç02þ0/iLRòÍ!Ywñ¬ÊÓÈÍíf:72H€¤¯g¥½Ù»‚4ì¥0jÅí°Cá0*RÔgÏÅ YáŸäø £œºá求e-œò…"ñ àÌîiíÙŒéNí‚„ÿbµY¥¥¶¨k  7³K¥^ÜáZFûž?¼ A]ÎÇ(¥ž) ˆÖôoL'ßXÛÀ‡6Ú“lš Æ^X¢‹ÉHº…Â?+´†÷ægòZ¾øé .aOÚ¦ø:h…G×o#ä…Š·m»žøè.šŒ}`xp;_ÞÄo[XöiŠßZHuÁ¬8¹ü•ˆõîWè2£Ù|}M 7žj /¢_«Ç'ÀÙ‡:vqlQ¯TØôg7! á…ëbƺ傧<“‹«„RÆ™—˜ïã[ÌZÛÚoÒrÌ"¼êy`-ö0+ò²Ä C~­l“?õ1‘ Åtí¸’Mÿü•^²¿¨É$–Éfô SÐIWîágÒü¤…y¶Š4¸v:É÷h”ÎÐØ™Y8¬°ë×þ×ʺûÉ,}!\Ë2ç;ñ…y$–ja N¶`ê­j†h~4ÀÖªvK)ñpD.ÓÀ* w?J‘þ”ÊûS·Ï!—ÔTgr-#Ú`EÛª£`üEž²–šèux—¬= æ¬üëç—Öm+Õé(]à]:ô’Úêµ’Ö×Hæ¢Gâ 6rÕk {CCZ}u-Åuà}yQKnʤ8èÔ·9Ý Ü”{?ÅI»î,PÛAÞ)‚â†A(›wÊùxm{îÿž)kß.Ð(<+›—€RJ J½éú ù”ãÛWûõú´…#L­ D n抦É4íJGŒT†ˆê|wÈJf<^W9:îò þ¸Å$r—Þ;jGœ[øbˆ_¿M3÷DÁRDí*Чºƒð†'!,ÓTäCÀø…ñ‚‰Ôʰ„p^ÎPÞj[õ®×ð¨ZlEMP Ez0Wç¡SP»os¿^Q”Wñl ÒÓN2ü³‚p(ãÜõèG¡Rç±ÌI·JhB*)QܪŠGD&ç&%ž¼•£ „ç£g(gæIZsQª·Až’ü.qgûïuòÀÂ>cí/a¾.Pɱ©ZÓœÒÆJÒá“’BÊ"Swu0ÌDooÒÓ’}õÀîáx Ü Ï=“»œ×µ$q?æJHÓ¸¸«s+›ë²#bëÿ²Ò: ÍI53_}“žÅ«k|õYktúòC}©CЫ$,Fdƒ+a{Àƪë"K^A;96q*ið7|0„„†„Î@Fâ1fJ·˜" D,øg1¡ÂH¦ok 帤<¨çgÈfdøªzQšÛ<[õ'Á,ûÞ%ð+vœlaa4H¤±næ\,ç^ i“E…í¡£ *Ú‘õ5íþŽG{¯†g?–_Ü”]>±"+î]VsíîÍDݺAIJ¦¥Ï“†:䳈´ÞNÅ1áA¶ú¥öÂ<2ìŸpùÿˆ{³…ˆ?ª°fd€"Œ^˜ÿíƒ`ÛÇŽqãŽþ_ÄL=øÄ×QhÏ…ÿX1 )šXëÕIÎE©ÌÑ=þqÿ¤`U9¤nmêqÿRû)ÁuÕ9 CîÆ<„L±ÕV»ýùëG|òMÃ?Ñx,¶njŒÛ$èCÉ×°#ÒõmÓ‰®ÍÙ®¡«käÑÐÁ‡Ôߘ&ూÝrûÒÎ$kÇQØ4(Û€ú10‡Ã€U GÄ'úb®ŒŠyå“Íp¢ÒE]^ÝV‹áv’;˜ 7g]cÖÙ·‚8Ms¹:ɲ/ëå»Ä½PO·´ & YãÆMÚ“—zõC¨ÓˆÞŽªÏ“ìPã“hð=€Ÿk¹M¢Ï—{¯{Kóz}K÷2†sO÷5·Úx¬êp0ÐÔõú»Ò>äwí/ñ7>ŽPZ?,‹ªˆ CýzŸ]<²^:¼“uhïƒéð7Å ñƒ”Z„4F°/²·(ž, ¬Ïñ¸{±Ýôü Z®ë…„OºIµó. "˜=†ý²+þ+å-êÙ¬Á o…EJU%ÆÒ;Õ*yX…áÜ!ÖV».öÙÚÒb.3h3Xvº‹f{c{^z„ºÚôšç\- $rΉ·â/w 6©eÊk€¦€ômôuñúXxú …J9P®*k eKÓ[GœG—§ŠùÕ¾Tþî”ð‹—¾t‡‘ƒ€èÍ2 %¼ Á–dÜÁ%½>êiƒ¦ï:x±µJC†O9GHÁ*E+fß¹?K°í0])ŸvQ¯-ùh†uµìe¤u¯NT‡ü{ê¬Uç·M¼ óx/ÞÐ5gÉ}5"gòL6ú¢å#´‡; vÚº§Øê ë#u[píô¶'ˆùž¬ˆ§zóeçÁÈàDù¤§pRCÑn{J¦âðGhÌ ÕÒ:”B\·G?»6¢ñµ=Ó%jð—Ÿ™7µümIT)w^-/âÒ4V¬=L‡˜ÎÈ$ÿszÙÆí[l8^ªkTâ ë°³à‹Y21Ù›%ãòQf4-¸6?ØÃ„Dšt7cýËW^qA„ïv,›ç{I»M-ò`e6Ô`Yóþe/x>‡^"Ów#jqôõÓ¯†¾EÌ‚KÁ»øÙ4éDÜ£‡bVïíº·üj}GŽW¶)ïZ•Ž&•alFí?ŒNëZp¬¹ÖGu™­bÛ‰èÜE4[|ö¦Ç`Çÿw-•ÔlÛÕX†ãˆ¹nÕ_ýÙáDhï]…@j\š¨ik¬«:½“«³&ŸÖsc #³)ðFS³­«Þ%µwÙ±s m¿> *9»öÀ¾…Ô)¬í„ÃgÈïZëÙåi‡]îq"}>-wX©Jd~Õ1È]|Âô?û½4ÂTŸŽ&Õô4˜[B:çÜšT€b¦N…[Æ%_ÓzÎ×&ëÜy£¨JS÷Û-ô¸¼uÚqŸ²†«ÐsèŽB5ÈÍè¹§6Ìc=3ƒÅ¾z ×RkÉØ}#ª‘R*Ñëâñ!ÖZý` 8uÞÖPÅA9Ñ>ÛÁKK‹@öÞ#N~4!Â>MáÑþH²r"*ZGEÕö›ÜàFF£–ÍBè17ëû6êµFGüÖ NôMMÁlû}7Ñ\Ä*,e,Q UºýŸF”¡v0Ô~cNg@cÖbR? ML¯iÿÛ¢ð7DZèŠ{¥“PéÐJŒ•à@zÐ<Ç@dï,‚´ÖEù"sý1÷ÝZ9ÌDqÖ570M~[ëອâh‹<²TÓ>mMö¿¾ÀU-Åâ/+„XãHÚ¸¡†}Ó»úefܤÞW‘[›ÑDÞ¤:g@cíRÌÞõóp´Ýîñ&WŠ’ÍÇrÛÌ€ª¡Î¡L- sG•˜šƒéªIä«"?É䎆§ì^ÿÊ瘃ý3“põ_$ƒ©6>]sOÂ' š®Ftø ÊbmÜ¥t MÁ6v;®ÃY‰yä[UOagìÈÆ„10ÒaEëùkfr]!ø®±G¹žN= >¤D˜¾›èÞËŸ‰*YZð-á¯Üõ¦·ü•§ƒîL6 c,íd Sk]¦c8Ñ.6362šàÙIaœ[˜.¶±GVf;à…ÙwÅ,ù` þ–š4;Æ]#²I<¡(ÿÔg«È"+ÉG 2Bԕ㎜hæ0œ{iðs{¶ð®2È’–ŽÕø¸Õ˜±>×P/iËóÌ^m…Ï!vCŒ)„¨M@b¬#ëÞ÷Iz!®"_l†®Œîêæ™1úª+z­!bDùIŽAñJÊÓˆÜ!hx˜òyÍUym÷…Ï«^îÆïrX¤›¸¡—É™·-,•Ì¡içí¦kKÉœ´‡ 'Gíe°;rÉ‘ßÈÎVº3BT¼ÈÔÌ»yg–ÓÛ2 E ­ljÀâã­R.ª@ÌC«çt6-(€Èv_÷SÍ ›'ÛÜxC)ŽF£W\R®¦räâpáYL¬Lƒ˜²Â\=›$+‹ÞŒàMŽ&2¨RÕHFÜV÷·”Cÿ\$œ vòeÆ­ªÖÅ<уjŒ%z¯BqˆÜ†јÜìÊ‹ÅM©«Û¤Ý Ü»xax±”TŠêQðOm¯Õ]z¯Û&ìáU£?:¿Íà«GÜÐÂY—xèC†òü‹m¸]Îd¢0S_ßìG”3üH™ºëËŬ”Ky‘\Í €V¦µ4ñŒt<ÆOz‹Ÿ†™»(y6_Ý´'ñ ­¯Ñë1Íú¸ì&î´g8àæa§øbÙ+ý#p¶œ×ÛrÙKïð{pGzP7yá2!€Ü¿DȽïÎпВȯ™——ü¥w† 8´9‹u)B¤â;Å“JÙý2÷Ix¹qkø,`ë󭈨VŽ<Îzì‹Ùp0Ô±!^'uì–t šàU`mÎÕpô¯EÉ€$t{߃ñ<2ØåÐ3]¢¨xùôƒ\ýîo:’bÜùˆ47þ‘™ŒÑkážz¶£‡+ÂÁeCBçM)Y7LµUðqhg”HkÀ¢ó\Ó¨êk»RåàŠ“†Å"ú’°bWͽÙÑDÙõ`í!àAs¦/LL½ÁÌ]ÁêÖ|g?˜Q6 ò¿ƒú¢M…1“$÷h?QÎ9,`™é?ì *TLÌß b ú‚NØÕݾÂS¼*AÅê» ý<·ì¦-ךeº€j3öo)ó?ËQÜ PODÊÃü-’FhÐÙ8ú"NQñ餪~<`*êö󀀩ü‡Óƒö„áÀ(>{Ü&gsåHî@·ó/sFÎ:¥ôìÙkœ^„Õ^ÚÏ…{›„wu'õã"}óð<ûNÎøª`I¢žh¶àû£ÇÔÂq‚sa VUHh–N„´A•GåúÉ_šZ°{pœu ̹¬¿Š×Á/4¨Eˆ(ùRÚξ]6 ŠÂVå<À¤Jfÿ±ã@çÄÙþ*[ÁEU”©øíÉHF™®+ ž:½.‹Ôªè¹ iTiß­ÍðÇöçÑ[Éú‚„Éê.²À$‡PI.’…5ŠRuµß-|(qBi´«Ü¥Åš>i¼áö…P^\^ýw¾’Qºï³§@åòÑN'äžåêk=ÿ ’zº¿¨ x™Õtr†šYVŽú`'z¿âÖN šÑ;^öA&åÜ£_ á{¹j0 ~ØÐf¶Dq.µ—ÒL_à84$°äè>¥ÐCa  CÏPiýƳÔ}g鎑:u€KÜÌý!“' ¡oð@’Ÿ¡½ˆ|u×­6ÓÉ%A ?v6 •P»ôh;$¡ÐüÄß3Ï-ØéO7Åd¹‰ =ó¶´ †A‹ëì™ô“4¡ÆÆÓèÉM#j¯VM¬ÜPû҂Q°uz³¤~8Pnƒ9ÓÛfÙ/Å2­®p%Ų¾_m/+¯(ÆwóßoW^ËüTÍûuñCO¬ÖK`O¯¬ÂxœË, >¡"š"Ö˜„vS·‰ë£!=Qˆ3S´]aÄâ~©/ÝwÂë‹”zhõÐDe ÅòÑ„@[²†S¯bÅÁÐSÅc›™1\T_àB¡Åaß´ú½]RDÏGãű7©êMßÀ^TG):G[`üƒ:–œ:f”¡eTr™ŸÇF ‡·=µúmÊÞâõi¨%ý•h© ßðE–¸Ž ƒ±Ÿ‘‡ Í5싟a@Ïj&,íŠÖ8f±7(SBx*©#…:CÄÜ#È¿¤>~i’A[Úx÷³¾Qoôе0þàEI•r[x 84ºšÒK eE¯Ñ ‚09³Ð*.¯‡Ð&šÝÄþ_ü.ÎÐÜÇ&J;¸-]ójõìÏ£x­d D><¸u/B@è¨àúÜ',¥ã’ðhümDÝTðKM¡Zþ ž˜v· vt/‘ÚÏGOs1Oý¡™Ë9«SóQ±»&ô:ÔSÄ3„3IY® 1bÅäˆÈ¡„¼âbý׸ùëMTWÍ8¨ þLŠMôùå9üÖÎ¥c±c#ÈÇ|÷œút 9æIÜu?þôˆïãhCƇÖ!'Ï úFrA(§ñÐe^…e©™ Jq.‘]¶næ ´Pôx“ÞCP²³„OD\LΫ2÷$Z5<8IÊÛ©l>¢Õp§ƒ²©Úä4©ÿ­½ðäë•@—×QÝœ ̦XÌVFA‰+î¯gA8,ÛPcé¦^ˆD% EÛC™_—¿2ÎØš,§Ç™âƒêÛ„«ÃòÛ͋ᰘï+øÐ”üɽÂ@öº€¿˜Í¡+™Òº 0I»{‹Î›8åu+ê†óa)\)ø1,¨Ì\Ám „0aŽÊfZ$ßÜ~b?‡°ø=«âÄTžê[™dÎ9‡ÏÙ[0¢^´À$`ªï~î4ú¾û9ܧc3. ‡ŸA ‘I<†GQ,¸o|“ù…ÎwèH{Xç!‘ƒ‰?egÊS¯ñÉùV²¿K½`¤D·¨L B-´íݪ=Ë*¨ªjIV/ø¤)eÆ`Y\Ü~‰Ï ¬ípÚjf‚ǽ›*¬.ÑžuQäiæ0ÒžF1·ÆdÈa^•-íµef~..Ž ó²rÛ9Lƒ-wdë-™ðþ‚µß ÷ý6a×v ž&ºBkèp"ÙKÒŒÀ‰efÇÓÑæ¾Õ¼ýê-ÄÆ86Ÿ¬ “ŠˆGX‚@ꬴÖ),è¦îgÿÁ(Sà.2ôr›jÂI+µÂã!`žràÒ ÊüS3ý¢%¨¸®ìÊÍ#Å<~iŒXÈBrT£j™.Ì™—æ»mH_N–¯½å¡¤Oá#¥ò\…ãR‰¹™¤7?¿Æ7Ëê3 Ò ++½¥'½6ñ¦ìêEàÞ:âÛð6Ågê{Üâ?pÿïž”lz»VòµJ¥¡plú×XuÍ Yh¦(BE~/’…uL¿éòØ!›Üô~9­þLRžœ¦ˆ‹Ú¦>t<¹2{99¹¶Áö^jX6¿ÎúðQ­&$È=Á¬#ašøƒ+…ƒ9eÊh~É·:æ^6UÂDâœôúœø ½L@òïS5É®6­SÔy†¢ û‹ƒª-'³ÏÒ‘œdæÂ/nJ*¿lk܉OðoÎH`»Œ£&ënž€¾cÇr¾epÙ³S‚±Hîe¾Æe—>¢ödžc­åê6Oé&¯|SíÁiXí™Ê8†ªv~å‚‘¤&»ÑÛœwÿ·§¾B¾§Át…›]±AB©ý¡YâüwF·`k¿äéÑi¿iïþ¯(V¦¤I¥ÝEâߘÉî1ŠûœÑ¡­™Ó/{å hpî±Ý··\íùQku5_›D~¯¸Cª*?{.膋2¾S˜AâN¥­xå-Ä)ÔÏÑ)`æÜ”e:4>ó)8XÅb2 ÿ#•xïËHØ—Ë´x„ëñºæFŽE¤Ô,ÁÉÏãð¥sJ¯ã2å>þÍF'øŒ`ŽÃn"cS‰™>|¯šQq×A{kæ¨@y‰Ì®Ùaî î#õ ¶ÂŒÑ]˜ ‹R\®Ñ4¦^¸6±¡0+}ããÓ½myL‹€¿§Ø5‹ýN?m† 3PÐÙ1ŠWh«½‹+¦Ûñã‰WŽT@kç=µ}gÛÇß8â|›ÑÖ„EU5½r}¿ÆÌæf¶É7ç\¥àƒìYµó¦.2¨ëéûxSl'm™X˜.”?Éy{UÐÿ>‘ —_GÓ…!z_PÇlbñA]<~+‹‚§4È*.­g.’Œ¢uW§kE#UyÌû=OÙ”8 DzçaFH¢†Pã/Yž\³@ÛP”;XçaQ(w¼Þº-éâŸýñÜ)¼&–rf+ƒõ—{BA¹v6D@ÞwºÜÜ3ˆ¿òX½GÇùâ™ÅŠüÓ³%˜›¶üwN‚6ö×·%玿Mc ×$Ð8l$Ý ¹½{Ž‚%ËÉ2ÙµÝ?guG ì×åÿ2Á˜tzx%ûÏ!õ§DŒšÊ%ï“wo»“"M "}Ó˜Ö¨Ä-\Ò49ê°…,?* J: ®|‡©_°<¹•B%=à6¯?~4’AŠoÒ¿Òo˜8:'¿ó™éNC©Á¢õöî‘V÷ ÷‘: N$õ|òÎÅq,K¥œ½ðåmö4=kE{F¿ÐØ»ÏKz/ƒA+ä}fæütR&KÜ[E·åÆì8 ³0’î¥á ôïvº~èuö•ßѾ$&{zŸsøçWÆüÖA"±N—¼âÔÔWÌuÞãå3µK ˆ¬ éÓsð„ŠGeøÜ´„b1Ç.wÍÄ^¹GŒ£ÌT‘`ù´§Î<Ÿg©v=æœEZb¿Ü¶ü …ƒ”íÇ…Þ÷Õfp– ßÁ³ëýšÙSì³êhK=ÃÝix…Ý—µÚžI$óÄcG ÷ŒYxkEnéÑ‘0 …òºlØz>¡úæ$ÈŽ;ˆ…akûùS|üd3øØ¤ÆŒ0ÂÚ”K*›Â6£˜ü”Šë¶ô¿×‡}}øFw …ÍœiIç2i·ÿò8FzÆ»t’©+Îô°âz6òñ k"ä;”&zƒ<Ý’ÎÓ¤›Í`²"Y"XªÃ¼ØÜåaüVcG„µ5°ûÕ³ÛA€´ š_¸ã@8§î„•6Ÿ©ì$M&žËè¹þµeg#ÇУâÞæÿX¥@~“­5‚+˜"@bÅÆ:p“N·ó û7€oa¥B®þó@"'{Z=2CƒŽm"g ìio[Z|.e:gh}ÓP¤¦Þ úïï«°þ‘dçòáPœ4ЫF‹âØ…÷ Þv¹©³œöÇz1v5j£_Û5À«áðˆÚ«³UümnfDÊ©uݸãy¦ôºh€’=\ϧÄsu—ÛéœÓ6 ÛðÄW•€#c›Ÿ'züg¹êàx¾¢ÕÐf;Àü|„‹9λŠý»VöÌ¥“÷9Fà »ùP|Kø¬A ÈÝ~7ø\b£Ð&}þð&MêJXP¶GD‰J<>fõ)tÀ«¥#tBôë⟌VŠÛ”Šq^=h8W.og¶ þÓÑP§m– fT;à0ên<ŒÌ’ ÇÎMW‡7­!Åî j¼êòºcN¡à›<¨Ë0ØJ9nhæc9N1d6VLÔ\KAUð\¿äxO¡¸i å½ð\Ìd®I¥ïÊ_BÈCT^ž²ð%É8h9¶•~›4Ë/0–âôOÛ1zuLÜ ¾òkð'”©ábÈ>(«¡bŸŒNŠrUM“kÿ·I{‚E!ЮqfÔºíÁá÷Dç^ôPûNJá8of•‹ ‹~·Æ…ì3R–ç±Ò¥Kbò¢—ÄØáEWÚšÈyþš‹Ü,u#šî¬S´²l ÕÂëÎâa‘ôMDkÚÏhb2ÐЮiµéjý„½rŸÑd†‡Fx:âšÄjøq}_|÷CØ+¦,?¬6Úð>f¦Í®úì."æsäö¶¢ê4–·÷ñ¼Vbî›…Æ+Õ–óg¶™ûùÖ øÁE P4o:憎½q“~‘_ÔËúóŒS'‡A‰~m!*C϶ ùÅŠBuzÖ½dƒî/³½ 7Òõ¤òÏôceeûÅÿ5E½2ý‰«üä¾Á£dær¤®œ_ï Yÿ,Z«>'¦j ÎŒÃ?—Ó=AºÜwÐÒ šáED.àßI$7¨nì)ì`ÜO§Ž7´ñQN )ÂÑ@øûMýKÙ±Z4ô‹F°äM`7.á!% î#Þq¢àaþˆ¯à²¿,ïˆ:á~ =L5転=‹#Í£›}î D*tïUØkè…3KŒQª¦ÉU„¡nâÙóCcF‡–N~Öÿlb|˜ˆØ5tf ìîwɰ"Åí0øÉÓÇ Í›rbÿ@’þ`Ê¾š ² ºÑ¾]›€Ì·¦3Ígð¨/%iö$ž…ûòÂÿòÒ´A§¼Ú†­ëª6v‹úЧ½ä¡KhТßB¨˜ vëv'4"l®ï’#]ýwLÝĽ[ÿÏŽWŠÉŸ?ºœÈ¿Â9ÝGÝ–,t¯‹Ý±ŽVIq›~s?iÊèè'`—Ý6cå‚ É™+ð!?Eq?øT@ À̇t¥èøý¾ÑóÕz,AÕ[çBŸ…í§¶41¬$—O…ÚvkE(Vù‘s½u‰2Ù©Û½VzÄ{ZaÈ)8*ã_=| αÊÑ"àç–§MJˆ–Mïºy•Í«£cí_geN {e¶ëò4ѧ®"‡t²±*XÊrãÅû60áo=B%`h'VßDý—æÂÑÕj«@ùÇâ0lßvèW¼tP°FN@ÆAq@l&Ë4J"œùwèóéáš %|Ûªb^üZz~/÷¸³Z´Ob$AaÄ…. ãñ:xÖ”š?O­ó6è$©š©Âà3™Gƒh9è"çábÃÍž< cÒôo©bnÜ‚ þ‡G*B’ª ¶UñšJ~zǶIb'ãû×±dNâÐ~„>±¢ùžtÂ,píz Ù>HÈæÌ¼Ë¢‘«En_¶\†Ü[â¸af÷›‘cìû|bƒà°(tv²Xn÷½2lóËRšÜ_¨5ÓŠåøG¿õäÀ'­Ñ¿åsèñƒ®.™5ËÁéfU0Ž€åpcTO‹×NÑtš§»”ïR~Í%þš+#._NeIi¼±HŒš ¼¦ ßO¾ Ø–²NbøzË]­-.à’ò?S2`¤Zžo±spF ý’±ÄJ›ë|SD^˜·á;åYðT·AŒ9(£Øï—‰d­B™"ˆÕÛSiî¨F¬»:¢=ÒrUñ%t§Ó´½ Ý«»ëÔ ãʳVùh½›ÙÒÊb5Jݱ±âÓåɵÛ0Ø*Îg¯ø\ëÇt™{ºJüµ‹^¯Ýq¨±ž,†„ ¥Ä)jp¦äEÿZZÝZd‡ÀV(¸åqù|˯Á¨ÏÅZó|÷½.ÀâË94o#ѯò?À„j e*žænâÉÐí‡ÚYÅhè/ðþU»éæ·,RÊxyeó(×Â[m:pYAÊÆ+{Û|ÅU?#gÖ…{Cªë 2³É;»ã^Aä::¶é,S!DDoxL7P¡Ê÷ºÛÌʾ;Ÿ¢:f yÝ2“2MÉÜÕEp_w¹¦ãaÔË ncå/η·qD-KPFzà6>{ 1 ¥Ž¢ÖdóG M4Z'®›¥¦Ô:},üN€wgìáúv!AŠd)«ñ1[¢Q^'£$ ƒ÷_çÛ.ïPÄÿªG4?,Zl$,ÏɰzXLÕ¹«¤#3?!õ„ð-$zHZ˜%§v3Ê7`„}!ö1ÿÀ–sÆÏ¸M-"é5ÛÈúfFqÅgjù ”vhUoIÕ§V/èE)'+. ÛÒÆ›yµs/JqfÂ`'Q, çä¢á‘V6›7¡hËF±MÎf;‚jˆÔ6bæõo{Š ­¯)¨ò§k}Óšˆóbý×7È1Kâ7DUpæ—YïŽTUŒÿT}ùÕc 3ù·–@ùæVÈãLC×ÚüÃÝð›hLGø«=Ø‘*àXåñ€‚ß|j¢^´!¥CjN飃1ðRçq’šTƒo´´ÜJÄeû¶¨*✽?¤]r ƒ™î¿òÐa‰¨Æé¦¸rÀMÊèpŒÂ„ÿièD"/$ÿ¤Áx R)9íÊ÷KÎ>¨Û´ˆRÔÖ¹|Wѧ\ûªz{÷«í]wjÍÞ2%⟮ÐÓ¹ó.©G~ÍãCö½ò¼~3ö±cÌÆ\r˜©.ËêkcæàuÄDømœ~²¾pn±8x_²àâãvåG "õgéV]pX÷äëF+GŸ}”Š5éEÙ€ÃzÛ5o¡,ŠÐy·‹ÿZÄФäÑ¥³¼w®÷/Áy†IZavåyº½JK5©kšt_¥pÌÅG9dD^7ÇøÎV †57»g“ƒ×Æî…‚€ÿýì±dcæMÏV#€oA†®zâ k/ħ°/œä,ï%'ÙÀO·¿±æ™ºÜ,]å"`è)AxûE0áz¤mhZë ´ØBÔO›\@ÿrX²½1gŸ3ˆEV]“ä9°Nùcÿu[ØíîºD¤ìê†1£Pœ™!ï~XÀ—†TT×EB·õ¢-I{ƒy€¾ú›ë“•5È]È¿ ¡¼åa@äôÑA‹¸ÇQh>ÒCs‚P–Љo—÷%’ŽïŒ¤õ ö2jbg€‘[4ŸW:±Ê¤†X°K—:8 =´™ŒmX0üc¨‹¥ô0°›9tÊ• Q.Ž2ttOìè ðº-ä+e´³ôÖpÆxø=b3‹(-$gUjjBHÍìØ’T$sA¥K_L­Rᜓ•XAø™T¹Ì%•K+$~´³¦ôk„–IÖ‘¬ÁëïDßÇÎw•üy‡»ýOi~á"­¬ëƒÿŲÊV·–E¢¼›.¹cý òòlËÅk4Œ ;–Fvhºé•y+è²—üÿ'×›'?ÏzG¤ºæ}uQÕ8I]c˜Áô”iÄóãPb1šTOA/l>J›†*sdº1E~¹áß½Ÿ @v ýoÚ}ü¦ÚŽÿ£Ó29·œr¡/Ť¡Ë0Ša f³'ïÇo h²¼ˆ=âÊÈ¿œÑÑVÉi¨ø&•fç-¤o'´CàÀçý¬f.Á=¢¨æ^“mÌ¢òCÑy…ùÝa°úPþNH0#èÑ_ 쀃1TJì»`Z¦²:žŽõWö{ˆõKÙlÕðÂl¶¡s¤þBi®k~.˜¤å8àœmÈSrå· ÞhÛ–‚Àá]K`tZ·ÔAø tþåè96Ò SSÊâp=ÄË­ìpÏ彉TB?Eë‚C×`€,~õ¶H g7Ädy6ÙЊ}ðÎ6ˆ´’­xq…÷Z†õóêãÚÂO¯aþ¿c¾Ígæ ðƒÞ¾b6瑇ÜÉôdñÒéÛÝ C¬3yÈŠ[¢üy¸@ VŸ0…—LOYÞXoÊYjîN÷f¦Èm3Õˆ yO;tEÓÃIKm#i§Á¤‡,1'¿-°®…kGÔeÙÚ%VJ´“±/0®²‚b 'S„µþø¿;÷§i‚™ˆ8 \4“Í’Ï74W\ Ó·TuOV sM”7‰o…Æ-âAã©ÎOXÑü— O{þB©LÆBˆO•#×À ¡m<Ž‚FÜU¥ë ×ºyþ5ZóS™jUÛO%T˜x ;YùKMVQޝVrêPžü–<€ØƒuÛ–™­ˆl…DÓ•SR¢®ÇT.*‰h$<Õ¿>Ø(¨YcàzÈyØ AØV}aMh™îÇõ°Êd»hGbžP·$ûœ CÀ¶‡(N𮣂ÅÜŽ×$³jûP̶ÍÓËý(tð×c¾‹ ùóp¶ðŽNÍ—Ê7¦FÑëú";к:8yêkÛüéüd½U¢gÇ ‘pˆÑÈ<½Ü¨–O’ÑjÊצÁÙA¨ø8‹ÏF(Kw%¥+N,ÿ¢òó e~ÔbPIYÖ¦•­¯Ü_!ñÒ({?|ÚK Ò”ˆ hï¢:ïÍORõ‘päwL$¢yŠ''¼Æ£_™³Öð¹˜QvÉ2QYy-W0p¯dE­(œ|ÓdUãRR&‹géáPéµð ;»°M›„“f ÉÇ*/܉¹“C2üï¬Û° !º8t3úªL=غÀ?±ê¢UÁàÈ ´¯9W‘€¬ïTzÄóÒßhN[/ •°Ì–sO,j±KdÑ> @‰Çš3uøu¸ñ¢8\ Ž_ùmû1psäëôÿ©£`­è§o®¢Ô„ý¾ªÜÿuùÂGÀ¹‰\lúŠwcXâ_QÇþ€ôõGqÚιï°VÔ´Oœ ‡ÕJ€k¡3Mª4½ ‰Áö,µ*”Hô»À¹â^Yu é|%éßt^ãäÃäZfXg¿K"’ûžwßö©ãSâ]kåDÚvײ•!Ì3$pD(+öïHž+÷ó§yVVËõMSîIÊðÉô#n(5„Mi‹î5Ð[}½úe¸I2„Š4=ÏÔ(§™zÊJlN_…škÅXs²Þ.6+s¾–°Åz›q걉>s]‹‹øÝWêE¦ Ë£²%•¶{›?yšH”'“¥”'®2³­6-ן?F#ŧÁñlÇ×Ò9äTm™k÷]Ûtà÷[Òn¡¬úÕù/óMÜé þÄá1ºPmkÊ35ÞÉÂO%ýH¿ÀÍe‰åý³u¢ÿÒKöfâ­‡Æt¡7  d€X«è6ÂŽ¼Ãõ­Ûÿ9 pÊz˜/´Åî„•/>Þw›ý'OƒHG‹ ߢRá‚Å&§ü³ˆ1¨Ï)ÊÍ’ÉUÜŠNIõ™|š±Æî=ôDòÏ ‰—O4j‘Áçag¤ÃóÚ fäæãÐŒö®þNï36qUÐê=šÖ» ßz)ð 6‰TÈçhaukoÕp‰Lí•Tœ5éQŠVË?GÓ5Bõ© 1¦$ôÓ÷å™X…Sõr†Äpp­âC.¥š°ºË«Õßäô·Å ì%Ž\l±gÄ%`/6 ¨}­ò,læš”Ú׈ ¸’áºfÉf<7pìù%žÉ\m´þzþ¼Ú¸þÓ”e3æÈ\-ñ–a`ôi®@#’›?¦·JÔõ.íÃLt_B‚O^1UÈŽkŒÌOÌ’\ 8-GÅáÃl…äËÄyær}d´·¤ñ_>?‡¶ÿ6eÓ [Ow2g2ÇkA+p¬9rž.² ¤›m“Î…Uo ðCHËS”¥(¬ò#ZØøð1 ¨4å´ÈÓªD “N‰F¶‡Ö.ƒêô„º²˜¸“=q_ÁxÝöÄî¸eÍR8îÛì1jé[A`•Í_lM0§óTgDu[Ù‹<æ'ìW´Å÷3âÀO/^|èç0¿·ú0«´»\ðÕxy}Z3½í­›iä¡Ö4{+„ò}•g¿3#²Ötþý™_6÷ØQˆ%Îf›û«á¼¸B®QD»1¦|sª;QÀnܼ.lÚ¡ŸFÕA>éf+åÑ̂ΔïC¡«eraúˆÍÜ5@ò…%1àÈèž- ‰ù•BU(Â)õ/QÂAà×îÂtOoöU° w;8êŠì ûêÅ-7ƒ¼£úŒ^/h#€a£Åe—ƒj¼ñ¯€ÎT” )JS¯-d„4$ F=¹ŸF¿Œ‡RéP‘¡’ªý©Å¼†.,1'rK•F:rkĈ¡Gýð²?[ƒ7Ɔ•H(ÏlŽ(âàÈ:7w]ĦØ<ë‚4…i\¿éÉÃjó’x‰î?ö&Rd?$AËÕy–ŸpÞ*®È–Þ®\k×­º¥{?¥•šg ,–¶@I™`\‡›¾Š&ó³ ÞÁ$B®Z`¤E/B¾’ÄàÖ cñÂx•c–µjbö‰Ý„Ôzó‚êKöBy? MÀù'›ö" á­ˆ]+ÔX'µõçq¤oš‘®ÌwYYBU7|sæ´°‹ öƒyR¦V›ŒYɸoñ̙ҽlÒÍÇ<æøÓƒL·ž¿:@|žM û8@Î"ã¡Q3AÕî¶ÓQûg&ëi²N0þ£|ßz_âÞDþÿø²QÆÃeäX¢ó馇ÓÊ S´Ï1x˜ëB¦¥@;b–áO6~¢×êöê£1³vž7p¸v´ލ›ûâüT¬E£Ï‘ÏínôP‹8ìí ú­ºô­ñ<¤'y‰R6ÚÕ-æ:a­Pù9XÀ=çô؉PEkŒðËÕΡœtX!&¢‚ò|ôÓˆ5ˆ`<ÀiÚqó#ahËÆï{xÅ9O‚ñž Ý % Ì?õ2~[6Ü †§Jî7õHL™èËÎÔ= ;GT·Kî§rY»«ºWöüS%¯ AYh€ñ•è¤;k ­&¸Np‘À@9[ðx¦ÿz5é HHÅ«Sø"ú[Êãþ±àA?Í’‡Æ /À¼>ÞÕ9Uå7¼Oíaã9¯4H9ž`ÛÌ—Kå$ýJ5¼$ë®côÊÂ7*ì`¡?³w°¨j¨9&ç·§ÿ”û†f˜éA„4&à§ÉÐî#lÝã“=5ìW‘úœéÝ"4ŸŠ_ë”ï—.i}Áåå&DýU覈4n á‹í8Ôì ™âB–몼ޒ'°t¨À¦HòÆ>Ë"1k•¿Ó¡”›ýÀEÈšxzí×Nš³ Xõá)Gí%=%–ÞîN^K!S& Ú +·"îª!O|¸.t0÷é׎ü±"qó çš_\©Íð²£`íãZ°£eð’þ{m ÏÊH”Î[èšwe¥+ Îü5“¦Žiñ÷,•cFîptò5â0;CsÊ]qD§ùÇž<\+|YR A +.Ä)Ðé ‰ éjï\5dy½ Òò9x}R4aõ€ô½Ða¬º›xC‹®uÉw÷ë;Ô>c8¯¨A-½ –{cµøJNŽJ<@A2O§ªOâ^dº¦Øfçò1ݤ]Öíg˜ƒ¬žäv9ðÁ‰Ñ‡—ü,BÐÉ9!öÁ¦PIÛ—ÎÀzßWÍ|mIáá3Æ'±9’.'ž*Cà6%'¸ß¦T¾ƒí"ý"¶èu&‰²S¶r¯¥Ÿëää úwDÂGpý‘;EÉ^ôA¹*WÁüJ) ã‰ë&{óÃÕ=|Ò2ŒQÞrr ~˜`/š(öÀIxЃÇ·˜> ‰m†% ßA'\‚…)†þ™pÑ=÷f\É—ÉÚ1aá»ì2<Øy·ÌríC¥'¨{]T›NÜNh¢Ò$—ðõ8QÌŸ~Ø&þØšn;/Š`i Œ8ØCò Wc¶)˜ánÐlÕQ¸éÉÞÁ—E³Î¶¯Ÿ?‘ûÒC¤ç|ÒQŠv§d¥>À(‡O×Ú*‡Å… ®Ô°hBG\þ6ÜwüÓ,~hd+f}N0™Ý ¤yÌ‹;ý?BHÔò ârûã±µÅÃÆ^4¿ñ VdCîRÎÜთE0} 93¦h[•µÿÙÒŸšŠ”EŸ¤Bu™ Ö!#,´ÀS¦5:õ—" ±ôŒãj\×ÒFó®³|xMhO®ŸäÉï5—‘þ,‡6üFÛ€ï!ï&ŠE6)®áqZO\2VG#ÅØ Š÷ÑéÍYe‚A×þIðïoPù[€€Wþ˜Ë”œ0²m!ç¶ðÝiN ðéê¨$¡ÿåHñèçâc|w§ê•()jNßÔée`öê³D榅ûCpq¨óÿíU¤F8ÿÜ d¢Ê *x;©,-w€bÉfn„ÉŠ©2”ŠÿëÉE‚ô+|Ø¢ë“SúœäýpëàI»ö޾±§(m»,\X›uJmŒh&½{3A HJòj=ÖWÍgÁEl,l;Q)ŸÏ202 ?X\6£6áEJh¢[³ñba3-¥X}]³´ƒxÄ"OyÖ ¹pr)n³à}¯¢0's$ư ö ÑŸ‚úN,õ5(8Ì®hÔ~ ΪJã&™Œ5T—Ü`£®ö¨tZ®ÆšQ¢’(S‹^¾¯Cp’ÝH0c޽¿‰eæÅà¨FFd![ìžnãY! M bËX¿«âVœ*">åRVçÜ3tÔ·Âd÷Û¯0 xmEîõéÐã~3Õì¨v³Bå!’Q׃O®m÷ïÉ­ÊÔ™zE``k°Ï­#Ð_áÚ×€Á7ŠB“·¯eÜ ¬",¢ôÕÛh×lùåè¬o*I·'ÁngxZ‹µà^1DeGQöÚÃŒô%q!l­±ŽEK£3,r~©i„›>lq©Šß÷–é²Î÷Nygþ½2ÝIռŒÈpÿÌå„|‹«GÑBajº¯\X²‘òk˜rHaà‚¼âS+…7¾€Z8œð2`¼4v †i_Z¥µbªMîgn.¶Y_b×$Úf˜—‹ùÓ4É®Ø ã¡ög¡jWyŽ*ºäi N‰‘] ”ZÙ«ßJÇÌé3!«WU6oÃ(/›úÈ$­Ì)=ò?iп'XCáþ§C{)>§xÏ+ïø_䎳R}á|4]G¤j°8w¿Ç;RùuÛLÞLA³§óaS b3ä@|IM¤ kË>6”€©½®ÒÆÈ•™¥’G·gÞê›Çùƒém^ƒž`s òXüÏò ›ÓÖÂQ.ä·ýxŠàø¼–˜§,vË zÈ›K¾ÝgΪîöò6ÍÜK¾]á~kì>‰4è‘ysjYŒÛj¤g’UMÜx³ôZ4U©¶eˆH}c=íÀoD½fÐöqô‚œË¨@æ\m ¡zKA^°ÿ·^ÿ”ÀŒ}½·›è~ú2­2#+÷åv/%sˆeŒƒ˜m¯ÅgpìÍܼe/‹ }¢Ê¡Èæ*…f`ÒÒÔqžÁ”‡þÿÑl3Ù€}Ο٩²?ÄJ$_™ûŽ#ÉòË7îëyáÖo6ËQÂJñƒˆØI€VY‡d‚¢‰rÌÊö¦\r‰`™Š¸ÚÙÁYÌ?/Ž…|aCèmއ *)gRÞ7ñþHee»ßš´g>r®˜k°.¬ŸÄÕâe†{x…‘NµñþßÁ¬˜ såA{¬]Ô•§ðf·=| ìV{ÂìÏÛf‰Æô÷§ÖŸ]j{óV”¦›}Ó$hàùfÊ‘ëVùb´Šé\anïdfw M£h`Im[xóΠÊÔ o šƒÿGPܲ‰/Rœwòç¸a0 ï ~lC8­›»|O¸òMmK+ R¿Ÿ$½ªEwBjZ±ZiB+é2";Zuæž™•K¤¬G¤¿±¸l®;Jžö/Jr†}ÆpÌ­&&ˆ£˜+V¼‡6bóW³çÏõ0ÒÝàäb³ñ4j ”p£Ø¹òYaOºÆÿ–Û'á§ÕbW„ŽE¶+H2pþcrνPÌS~¥Å¢4„‡Q¾öçNÔv‹qóiZohƧr0ÅašåúµØj]ž¬&`ø"ŽUWO^ŒŸÝaäziÙ•¡@g²ˆa†–iAú¹°$É }5GÁžèù’Ñ–kð -¸‰Ž$2ÜÇ=ŒeÉèÖÜîø#çe-56@;õ⑳¨Íó„ÌœÅòZkOÂÌëJÄæ!WV¶õÚ“žÁw4 _!Û«(í½ù¯)¹½Õ´’tT>(É„{f<$Ê–tGR3Ãö‹˜ÿ[ƒêð0³gM;¹sržC ÔØÏiÁX¹Ôö´©±òát#»”ôZpÙœ'*þœí©7aCrçÁT¶~»‰G\$—YÒTC ½"Iú”µ>$Ê[ü,³‰ÿß•óÿ}±~0FÖ r®~ëqŽFî2ê%’}=;ÑFªæ„óOŸ³+›¹•X3–‰ÝfüdðÚL§$`µCã(†lcaG&4.Ÿ.yrê×’7ÿh–¹.“O8=-øámµQL¥1cÆ‘*ÿÈég¾ÕœÆöþzÏ{•L)g)NÛ/á‚þíe´ *Kgü,˜Æ £ý/œ—Kbx-i&¦£æ{bº+þ¯Zxœë]l:¶œ)K†€áÝ4w€ý=»øñÍR¢-Ñ9´µÔßÊÎzûÇù‰Dª¡Þ¢÷¹XN•`]^U„)Z‹îϾa t‡ö•Ö‹Ùôª7óª“C2ÓK¯ú„ÜŠHLÇqâÃLG4‚@ILiW£HDeqMÎU„’T<¼b‘×ÒXcm?DÊHÇú¡cö©ø…gs·ñ_´Ñ‡½LSŸ¬j>—…\€¤³2)hÇc$™x¢üPî˜âï¿g*§_A¶³–±ø Xjïl¦2pCXöâÊGp_Ô¡Ô¯<»G->*^ÆC`S+Êøn¬‘Â!Ü"¨dò¼Øƒ„¬qWÐÍ8m¨oÆ--=ýYѱüvbjAJOJ {{ˆD˜ˆ¦$ÃBR@v~¼z[~[—œ}—;Þd5zTíÏiIy•$¡ÀÀ Òxl[£š“¹Ô@líÚÈ:DM x/ùhŸŠäÓΉì?" óã¢òTøþêr6ò^ÿ|úØDÁ"ÕdM×üm¥få¥Èžï ŸIÂÃýÎu+äÁ=Ÿ€óõ2üFai=KàÅC•ç ùœW)f+•ž˜±lÈàq‡©ùØ#•ú…°0ö ÖÒ2â?HÒÿ;‡&ñÕYÌÞýI¶]®6u Rˆ¡l)óþæöû[?ÑWÁnt|@·(² þ/)Ķ ÂÆ&ç¹Vs\\xnÐJêØ?t´./Ê.]6½RXEó5í°þh©Ì¥1<ò¡Á‘ÃQÕM囜0|.Phï5£Ê"‡"ٻфޥK\BÿÇVpþ6€jb22Ê6Ìéf6¯ìZ=šd÷Þ“xÐ>‡Ž¸4ãÌ€iUfŒBÜ+š1w–cárM5‘ã {àO)û¤c²«j_7nDž騟0ðƆÂr2HM`ikî îøõ…e›éóÿío*el\“"Cô¦B£ÀÂBóÅšáF«!°dMO$‡ûü1ŽƒÉsa:EÈFKC€¡S²iP2Hy'e·ßÿ~ÉÀ‡A"èš¿ñ-'æávÞe"„ È£Û2 VG–_q‚“©S·e ú#b™OA—Âm}î¡Ï²½&œaÈÆwÍee÷Óéè™VðávP'YDnü:8_&9ñ"ñIðÍ×1ü>S.$ɸ;$dÙÝ{o>no=’#•ââå÷‹7 Ù—^QMuLñt“.èè×.%P+ìùN¿÷)«¾ÈêG½°‚âóÔÍ16ÁÄ»„Å•>äZÅâdð~E Ò=XÞ¦*–‡¸©çð^®0¥öeÛù}† „Äs(zãR ½î]u(ÞNgH ´U ¾ì¨‹Ðgï( ävÚ”Ò@>ç×þq%™Ø7@Ži0œ—`Ò݃ ŠTú¬R¶ðŒ.Oêa{Nè'O††ÂZˆ·Ühx`3ärÉ?þI”öS/ξú]Šøs5WQ¦Ù(ŠÿÝÇ;…ðq,“ï¥>Ä¡•I¢¢ ‘‡®=Èew`ýbòÜHRNæå=ņðZs'ì“ÀÓG‚§ÃÿXÁƒvT[ôŠGX·gù @9¤]y ‚>à7Ø>+x:ØCÈ_2&&hf¯„'‘=ßFÓ‹g£À»‹Iç¸[ÕÞAŒ´ž‡6°€Gyª6Š`Ÿ +¿f²þöw¿e’Ê…\ر ®Ÿ¾|Óz*?f“Q®¿ËºŸ‰‡Ô›^äº;Š‚K†6Ÿðʪr•RG„¿>=ä”A•rn)˜ˆ=ïó±rã$¯xWàl}” Z³)%ë-ve\Pð^JÐ(nË›O4='Ò ÆÁ¿î ò¯[É¢ " !MçÒÃx€Ç‹o¼Ÿi~(•éÝ)1®Ø™1@ÂÃ#YÍ›SÑFI“¦]:÷¼3n©~ŽÑÞ+Ù™{ô+öWƒ0̯Ä%n°ß»UÊêyšvœ#*ºYâÖO¬tÿDÉá¬t¿Ù ðuÕ¬dœ ´É9Ù ^e8¢2ÝýD't ¤¢¼ é[(€óT|T vDhß°oÔÕxàܾµ€Iîž@, AÛ¥äŸÓ¹„ô`ñr*‘ÐÔí…Ä9‹à®´¹â†/õݼêo:#ßË´Jü%¹Ü]qH=g ®m¨O ÈìåÊÉ;äœFŒÃ#æp‚è0*fðÊö¯ß†Ï`fÆKd9"Ë©L=æx®‡ëü¬tQn/<*r¥¸Ýü?yF±šŸž{ƒÿðÙ&‰‰ÔG)}ªQÛéå– ¡NÛÌV´7¿ )Ôê >ž“)…šp0D¢¤ü›‰ ®RÓ龜2¯:´ºÕbÙ3ʈYÊÐb`Öº&h±ÃÑÁ(ePµæ¾Š^¤þÄ: 2Éc ÅJ ÝZ8Øè®@BBÍ6ÂÇ[™:}C@æJ Ï ¢¤Ú²›6jñú5.á®!6Cä&ìCΣXs¹Z  3¯µ-æ¬àò÷žy\Jw”fMj¯kOœƒI;Üáå¹7ýRM=K$Ú˜¹Aa{šìZ'Àøœ,“ŽHù†žx–’ËÙÙWÌúb‘–)÷sŽ©›µf¸!ÊQåS¶]ñYb.ÍlÞ¢ùp"Úßyyë}m Ò#‡æ&²i#õÌŠ/ ˆ ÉÚŸa}®`tŸÍM&ç¹h<óe?ëCª$då•z÷›ý¨b;ºi…cAtà;˜ÃJsËùèã_®îòÜô•&K°E—­#æõ¶uÖ>èµMS ü=7’¢‰¶áPZ’±&­)‰…^_dGΆøp¨¶³:@QdCæ0ÆNÂxй'¼ i‰9s]=ôëRÆëHu(l™†Ûv7¶úßèb^=|\žÕæócÞuö/†ßh{2$›Ú)ž¿ü‡nèöÃMªnp³ûª¼31¤ãÃ$Á;àO‰ˆ)h&רôæV%û.K/§‰´¡Vy!>‰%,|òÿkÅW¬þ¶W4ºP&º†ªÇ1^¢\kN fÝ`síÒW>x~ø§2†Þ£ýˆž ’3!ÊҴć²&_8Oqë•fœ5:¬=[‚þp±fÀ›£¤¹°¤v{¤7Öîž4<äì-ÌAê.aÓãd^Ëp”¬âˆk¬Y¬×N«ou?¡9Ûá/üýƒ†cZ‚ƒm3$ÿÆáĘÞÀ—th$±…(¡«üÒ[q9Ï?Ÿ-޲È2ê×goêµU]žøOòiùruN[± `.'â² °y.D hÂéõϸÌðdS‡÷-6Ð=tÞºv±3â)i“©2¿í=àK¨¼ÅX'z…µÍñ›¢qQ¯<"9Ž75uQfµ½”‹’_KÔákP£úQ§PcsÚúwƒq,³³Iï$ßsæ¶ŽÑ-mõ+¤w!Ìß]ú ¢Ü/õP¤aúXÞ‘À"KÈ}kûøKqÍèÚÆ¡ ;t_¦–ÃÂPj.HLK]LC Tî# ›×Áá‹Z)†ƒ¨/ Í|G»21ßê-ÃЃ:$€VÚÈŠ<7[®âZfš3¸˜p®f9\6Ì{IÏ™ÙÈÇäÉS˜ÔœU:ÑçûÅL’˜“wûü*V6h%q#vJ}mëû beýÿ£sö'ðÈà XU¤‡ò5üaƒ¯º~Fíú~ÅvËÔ8> ÜŸæt.™*mPö¯/5è!o^›^–³WaâèDÍó¿û’œ¬eAÊ4GäêG¸(ÿàà ž|—þ»4ºà…à%fóÊ1aå:Õ¶B ÉÈз(EùíÇ\@¼ßÂz2Œ­…´+4BÿxB#ƒ,yu2,Cù­•ô(7§dÊz‘å‡,0uj¹ëà¢ã¢"Œiºj3-µW  !è˲\‹‰O¼^ù ºŠ¨²Ï£DXÜTJþàEŽ8¦m².¼OYÎq† x…ðST¤’*.œI«|éÇ'}„Š1ZXùá>áPé™dö´5ü¯»ðw„˜¨`XU›K¬X?­PÐDžg:“£‹ïDÙKBW@ˆQ¸ÔMû#kñ"n¾ƒÅz2ŒÛ¡üT3'ÅÚX…ñÎßw}®ÀDC«'O«YD‡½í™sø¥r¾å~Í¹Ž¨¦)Èž¹ø € z Â5òã—®ë©ë§+šÔ~M%_°ïИÔ,‡›ƒ½™”ÿÜÛd¥\¦†p¥ÏŸˆ X³I,þà7„b›‘~ðr£?‘yååÙiÁxR$R<¬¢J] 4M|Û§ «Ä¦àz®4 5iä9rF :päŽ-S~zYñK@Ê¡–<´Úüw©OL)™–RÈ-X·üTæmÎæªzO²¶>¿Ž eÝÐÐ`HÏBϨÞl¢,^à(à´"ÞP°æD²Ö~åÀ1Š´¦Õa$m'Çq{ß®K>€IF÷Dàc ¼û÷‡Î¾ž ²2H€¾èL:\ÒRµÓC¨w|0Øì·q¦é@§Èx ¥¤ó$l²è[¢‰Ã'2¸îÓþh›°z²þ…Á'Éç² I*|q—îñ\Zùõ¯„%ËhuÌ]éò_?Àu»ú¹"Kʺ5dÆ™fLZª'ÏÛÖƒó¹Ï=aÈ…zÑ'½‡²wøÄsª‹ Òtm;7É€ ÒÜÖËf²t²‘¡HÞ Æ»9õ‡XBÍ8|•H0ç«·÷½"— ÓW›Êœ.»£ Iº2ÙgÆæÂÀœ7‚ Ê‘5·®±sœ1÷0ç¡-¦“ta~î×[ &aö­g8„ë:PÖØËhsª¢Ÿôû'ÛoÃ^y¶ ÿàäçub¸éÜTÌÑ ÞÝná›v~ú©‚SÚ-rº“xNßr; ýÁ™Mèg¬ïU¨„8¾Z<ŸÁ>oP÷(YЗ”Nñ^­`aUÖv.ê.z⨎”ib»(•~a©j`Ñrë쬠0Gë4{=Õ=œ"˜õ›ðI÷g'#<Þ%¾P2¿gwQÄ™áÝ„íí_¨Q¡´[M6ÆPc8swËL_»·wwÙÓyÏk’>C0ŸÇ\*ñk=§µºÖm£l®t2C";j_³ [¨›Xª¼Õœ‡s›ü^G”ªVq{²ÞauòH0±cÝùñNÌë¬Ñçîà<óóüy(ù£xÚ©^H|)o‡M ›p ìžP;<›k ±P7Ï`ÉànŠnÙÉû-Q¨>ÿ?®ýÊ'ÈÏ+lÓªcqƒpãïO*\;ˆaýµ@‰N(7ÛùuÔzR–™ðŒ×CÖs‚P7|±.… bkWKU>¢yfc’Ô&q'ÆG^(F)Ÿgè qPßâ‡yT}|sè LÎëçCàoo•¾ïª'<5šhWäŠØpçYm€š¹®¤PŽÕ’¯,Áö-]¢¯ç( Ù¬…kyt Êh”ÆÖɱv1gKÕƒÇ/²*4ŸÀò…Çí¯Y–µ¬ ®ÉoµãRY¸d‹!ŒßKFP… ·}¿Ûù7›ÿû®IÁ$ÈĶm…Íû Ô(ç²_)¼Õc/û™ÍÕwƒ ”mWïÑrrciHjÓÑ«“Åp_“ŠÕ{a”SA9xk`TE“÷þí½ƒL°)땤±ÛÐú¾}N¨žÄ§ÜQµÖy–¡RIU“Mt¥>ÂJQ5N÷o  ]ƒÁE‡\ …µlÞ¯Œk@4érˆè·Ðn©Ûɯú¾À¥ôb^òð Øòøi/nÆ+\cv:©àœÉ€ƒ,óø$èhû)æ ’M„‚Úåû—¿6ˆò ˆ(Ï^þí5Í7ŽÁ!MòÞ©ï«'á ÍøtRiÇ%7¨̤>·áÛŠ.®’&ëןԀPaÉåmlvhò”” ˆ^äò?ÀÐÊïùô&LA¹öòÝÉæ;®˜ÀOVñªf–lPJ˜+|7B>þðÙ;1m»U"uW‘5g"eEÙcÙo‚CÒÿßnðxYUÜàycHôÛg%O\°^•Þ6Fî_Å+Ø+Í.›¨Õ-¹A$nÂrÏž›Ò2„2ÌØ`´fžˆ/j›M>ü¼¨v³`A¹YMcŸ+@Ë? Ï*wå)©·½ÝKß9ÕÅM¯{u±JCºÊ«¸ËP$~CûË"sK‘}ɨ;Ì])jÇ ¶êZ뀰­fvÚfRcÓe8LÐo¦©Ç÷UZF QÿžMú*á!ÏYÚõàMˆu­¶å·YÏe2SÎS¿•÷Nƒ£]…äçï2eå>oS- ƒÀ.¿‹VÞ¾°A'ÊÓJ× Ûõ2Eú³Wºcà±(°48Þ§v§¯ !w©$„Y~²Q;"6øCvôøÓx‰ãWªs|£w‚/¨ÐM¤ãÀ6ÆåQ\ó7îdîTôbh8šgÉ“G2ãhçnj= ª•àL)Âõ‘õXþXàp™a*ËO^1Ý<ÜîÑqóem×,Š\~NcÚÜγØ,ó+Ò!Gü€ÝvWÓ|ú¨e´z'[%Óœ°ŠöàH[~±,³Ö âáÇȃßϤ±eðWÿ×ÛëåU7dÀé|×Á šÓE Wº@WÔŸÂyÛ“!EMaüVVÿ±M–Äå±ñÿ¶¥s@Œ®3¸½¶od5DÎKüÒÕÆ«áš}Ñ$¼©²@ý ¢»†´êØO+ûZþÕ9…ƒ„djålÑûM ¤…Ã-ˆHj驨ÓÛJa¾R ËPšIK¼}móµw¸‰§ò«»á™3  Ž+ºÀ"*–T¿nþ•µŠVÚìwF±‚è^nYÛ³ 5Daõô«3 š_Q\ªáèH»‘¹Š‰²ŠÑú†šþ‹à:&f”_qÇL„ Ý1¼kͰ\Õ+jÈkV>›j2Hí wh‘HÈyðL|ÚÒõ¼íþë°ºÕ6j¿”9½È_;˜H$ì£Âón™ç”,Lú4däz¢ ˆ‚Ú3Í NjÛiSzÅ({¸úÕT>×ý$ÀDóT5Ú 6Ö§Šéeðº7“)?Š¥~¼¾¬ ÁRµÀ+sÇÀ©Δr“Öe…¯ÄϹép8A ² P«íº|†¯6šòK©ß”óÔN¯½ Æ#€5Ø5©‚âüúÎS¤Ž ¦Q ¥Ü•5¸Â-ê ñ¼àÉZ9mEBþ²ìœö׎¹«ù«ÿ¡¶¶ys܌Ӫ™ÑpwÙPÈé.¾öÅ”kþ-‹Šx5ØÅª¡ÚÍÞ3-U5)RÅ 5©yU̬1$L·]¿Ï‰ôñ›W:˜ãd…§¤ )‰im‚'è‡Ô()µê+²~¸ÓþÊÌXÊÜY #S·ÈC¼Ê„ÿôTR?è“Ô¤JùžYîn™ë{Óþ¿‰ ÿf‹ñ¨Ÿañ¼×c²4ùP+¯Í¸ØlÄeŸß*ÆI—åU~¯Ë– š("êÍOÆtÌÙû¦—H·RƒÈe[§L â²ÃÉ‹–O·ê,ØëZõ«jjɵVñmÇù¥†^R5›t• —¬Ú y£È+¯=(šºæn LÓgN“ššÄµÄãÊb]—Ôc…ƒE~(¤Ý°Úï ÉÞ`mÀ Ò¡2L•DoQtϘªç6{íK†ÜH+ú A¾ÇÆ‹ÉA»Š~žÄ¦¥ Çþn…ˆæ¥_NKOoøü†®Éæv᥼ö[æž9s—Àd°Øù™éÇßÛYŠYØ8<»Ef«–2zu¸¬ºõ¨\Ï….š‡¤ñë"‡à> >¬ëÇžuøµ=²ÌbÐsâ€h§ð]Жù¼žiTz¥´ö÷é¦{½`V]˜™ž)È<ÓgI¤*š5X-—èˆ'µIN‰‹M ¼ªÊ”ÆWÏDøç£‡`×Y8à•ᆣøœB@ž®/|¶±ˆˆ žU$£cU?>⇶Ó×’ òa£>ŽÃO²ìIJu;§Ønú6´J:÷"6V.1JÓˆöé«~Ž¿ke¯#®ÚÄý8afÓ;]µÍ”ZÀ”t-vŒvÈ2 !ÑèÄ[ÇhÔc–®‹ÄöŠë}Xl/%ßÉ@2JVw† ¢¸òÇ/ÕN|}û鯖¦±[ÀÎçæ[HÏZð’ºüðüó£üØ$¤¤DaÀ E›ÀA›w ðÅ\{¯èÿyÔ-áý’ÐÃ÷uøWø `‚úœÊãǤ*ùã½Uy>·,¢"-E"8Ìlí4Ç¢n‡ªó„—É=¶&NvGÌ\íì•Û ÐÕ,ѯJ8¹WXA´ïªMq9\eå~ì…ïÉ8Žø”FïJ÷c?|_ÌyD¢—†ðƇdî,Ü9Hq1FL1Äâ¦,;®±BÎÛ{Kù‹:Ûû…¬„½C]…N tž÷j_°ƒþ†ô熉ÐÛiuØåÙ…×8 ½1èå£SlãYJß«°žÉs—2fáš8÷?>›>}7ÑËHûeöå¬òü‚4°¾’Y!:ÊÅWÞýÃÈ^׭Й}ù<J—r£D ÐõÇuð:—Û·ò$ãæÁe;w^QyaEK8±`(‚q3ã;„–̸$ #òC™}XNC¶²ò¹IÐ<žüÑ–ÖÄ~ !æ^"TJ2©Y<ÇÏ8Fv绣®ø .YÏþó³ÙC3eûäU0;Ú†x’’`-Äcª¾ÌlðX‘E»äVË¢ Ž}i˜N_µÆ™É­ ô7¦Ô;]öŒ‚ÉóµÔÈÊm]î¢QÜÇæëâeì•J„5Ĥ$3Gh>!Ì2—[J±ÔiÀÜjoš>7ŒßfèÔâ‚uÉÀs¤> Tò)¾Ö»kzÚšçCÇ;ÆË›L_b³#Ü‘½ÞtMæÌÝ¡‘¿Íµq™è%µùvâ´Ï ÿC阧ú`{öá£j<õg0]O!ͬ.Úd±Ò‰:d™Xá„‘70}¤Lh˜=<­G®›ß}Y¿tÅÐWÚ2!‘A©ù¼OIàäv7‡\{ºFš—îÂù·Ï$‡LpK¥ä¯O?ú?È@áy2J"…cÌ$XÖÊÂN“ »™ÿq4ÖÆgü¢T£Tà~xÎ[« zÕ¼äv¾mš|FT¸oP寙:¶Ô¬éGúéFA:6÷ŸÔiJ³˜¾“!Q»Á]©i÷œŠ'¶qŒC^1Ç9c–¾T8 ͦ4}Á°]Õɾx=ml“×Ç U¿°CÕG þÅ"UØÖtZúGè‚)¶«\\Õeì)v»ðYëž^z¿Ãå¼eêÒŸÒŽpd0•$OÃëìrD½µĘƒHPêÿvÀ•j›Xä/¼ÝsÚ®£4…Ø©5àŸÝ(—`59U£õöEÛl35ßÂaÈûBk ø|_QQN²÷>j2‰Ôçó—ôÌšùLãCšî`]ì]äÒ”= û´V!ؤ â…¡Ž=—…Î$ìþB7»a­ýŠiwâW6®ä\gÝ(ŸÏ•A²¡N TçÌŽ‹ºHsïv  { %]@‰. ëŽ?åVwíÒ6I.ßnnPª£Ÿiç zr_Ñ æ=^atè½ã–¤ýò´©Ä[‘èH$N˜¦æœþ-¶ü„±¹ÂdJ¡o²ÆíÙ¬T†;Ð+û^Béç/u—½µ¨VY~زëmAÞTC# y:™9%!?cM¡×¹qŒ×ËpÒ¾L£ ò̽[[Q‰ „1Å4™tû¨/#“Æò­ˆŽm̲}Q.·Œ”(Á¡2é49Bp©äàî±æ-jsK¦Ê©•ÿ혓…Î>r¸æµe¡Cþ …]º]쾑Ã]-££'Ò~! k±1›¸Ê÷ò½ÙþK)¹‘XI¡ƒ¶Ø*ñ6 q½C¹[éDxÉo«Fp+=·yV”¿²˜`T­ÿêNÊ3ï³ÂIfÿÈ1^ä·þŠ„ò>ij\ëÇ+ªLÎù}êùV{ëR+ª„‚æjKâk¢VNzyz <̨rÓ l<éµbì_f2‘HÆÀ3Ì·ð.ÓÀé­·Šø›‚J°-[?‰n’Â$0ÙçJñAVhìú¢bÏ) Uü¾¡¬ûÔÈ7à9‹é>Ú? ¤—q-Ù¿n öõA½çöŠsŽæ¼z÷Ù¼"ž/é¬iîÑ+%lÞ–nÏ÷lŠ V'ìÐX©\ÜrC³-³ÇúCžrYªS6…-{„elÈE“E`œMK ¯àõR lqæ+ÖÅw¾$±:û=Yî{eïBåÑ£€ˆ[!´kÏÛwž\Íù=§q2Þ¯ša Ù?›8ô²_·6·žÓFú«×nôâi±•ãd™ò¶&pŽ)ÏÜ„ RkjýÛÇ—éÄaŸ•³¸òIÃk´€O% ¸ÙYÎíªàú´±·µöø¨«†€*¼;rÉHZð±2”ï©‹Íù´£Ë"»/ë%7ýüÖ0£ º›7ñ²îçÖ÷Ê€eSƶ·»®ÊXè#H±‘rÔùz®F ¦Zª2Fùz™8#ÿÔi…ŽA6˜>œô°‚K=wó ©¶ŠþžvpáÉ|´š™€2”y»À S_~•]WÑ ò9“‚ y<½ÎJƒÉøq  ÄXàŒ°”ðþZ°&#•þ’"’#]ƒ]3Ü/Z°mÍüƒlŽ×å/ÓògdB¾Ê«w‚7mç‘øèi5·Öp÷,Öb+€Õ¤¦ÛëIÈ6c‰Ë£†öt>`Ôv1_eT v*iFë9Ö„Y¯7ÍS‡ò2t*y¢S×BmÛŸ‰®¢â§)?͆ÎÊüHÕöð{ÚY3'ö4Gnf•Ÿœ=?on"žü}°ð¶ù2Wq˜„™í+f8~HF(ƒ> Cþ¢ùõ¾E¦õàMu$2á¼uôjôV ´ÙOÏAâÓæ10.»©À{1¿7žTzYBÄs€'D¹wQóé‹n#žép±¥=\C¦TT‹<;uygÏkÖ$ùà¼Ëꕱ·’B*tŠ_:QvÁÐÞ7¹¦µÄ_)&%β¯¿6û²œ_ºí³÷{§Ð|Jѳ•¥yáh¹$”¤£Fm± ´Ô¯·ž(gföY[]¹C·!Œæµs[Ž8`Ûo­Q+gLÞ?¶‰ááh~{œïÏ“$Rx¥'­ú„.‹røMËD [¿‹E(oK¬dèm,N{Í`øBðÓ |$B27xöMÂo1ð«wÚª?>µf?gnj´à_A>Qo<¤ h¹„4Å^ûDsöÁƘ™ú†•„§)ø’¼²ê½àø A&T±a¶æÃóÛïŸG‘Ü8¤õž-ìŒN ‚}/]æÈŸ¹@‡Å¤±|1^¿%ž„ƒ*^DôÈÄ73¶‹Š—è@ýï1ó4´êSp²kby?¨2àù3T€°ŠÁ£ûÏ€&‘ªÓ‰Îˆב ”פ@)ŠlÑp%Nô!eýËÇ}'Ub§cZ(Ý›íÒ<â}Êwô®zÆ];3õŒ·}PSÞ2ýIû©œ‹ziš¸P›wõe—zü¿pp¥[C)øg¥D~ÚôÃFçGù•鎎D£¦À7/r43(E1ム†ßcÍ+¡.ƒrÀOäBâ¹›H[˜cL¢ðYW-Î&ÌzجTïËÃÈkÖ‰²Á0*Îä·gK!!vŒ´©£Ì=àNqÚe࣪n=©ñâsaW5Zà‰Ä-í6|Ú$l½ÐV××/Ï-¸=ÁB! ’Ic%3ýzÂ;sÎU".$¡FïÿÁØÔ=މ»Zm/J¾‡-rZu¢À ¯ õÑÚ‡rˆÅ¯D€Û¦y_÷kWò’0Ó®¢†è\D|ì—ŽµVzŠW:Ëç~æ¬îº,D‡gLÐîoH¸*@¸{‹9ŠæYÚý_Ÿcßúò"N`»ãc#îíY´å4<¥p?\B³sí%Ö"ÑnÞ<âÃÒÒPƒØM$ˬõŠÓ3T,šˆ¥ž0ÏÊRÝêÃ%µ~S ïųÐ.צ®¡»ÜfÍ[WŽ(Æ„þ~̼pùÝZ2œ¾„'œœWA0ý¸Jõ7iÞL¡ÃŒh·þ²à½åP-yÅJÐé%eŽ]Ž0Ò[ÕTeDagö+›µiGÐûGœ+Ôݰÿ—µ³ã’)7av‹çž›Êf¶~‹d»á·(|\¯Tt„û¦‹—Ê´M²§|o³gHi`!ë¹7ßGڳ좩¯žQ5jh¾þjÜph*(.ß!“ÚbN Ôí|%Çw´°Jœ¤o‘E#ÏøµçkÛ¨Qlm’Ôzl *ÙÁ¦nø%0¥Öÿ>üW[GÕP¾N¹07ßi¦ÙóÿݹÇûö°9õf÷ØÕ¬ î8:£–ä–m™³/ø'þz²+%‡¸Æ)Åzl;ˆÚçrì%»)A%u_Ñ0â+Â[Ä,Žw ¢5™q‡ å.¡ø‡Ô ÚàÖ*•6Iüޣ߮8ßêêtÊ0!N9¨¥f€E1?Û‘±6ùM7ØØIQaeÿ8^ãð g¸SÒÒÌßQC•ü@$ÿ^}Êxn`ªýJã­Ä ßcÏli“Gä-›ª9²5–PT~ˆÓ¤ÖššŽ—'Ïó_uîU"ªùD,Iràø |H:Ó´åZ£Or/„ÇÄ“óqlªÊР%h’œàÞ¸ò°¨˜ºSwuœm€,~ÂŽÙ>5É_Ñ&I–Ôª Ú3ÄûÂŽíñ#‹6c¥-/ ²‚¶Ñ“&æÊñ úu#Wî•¡;•OÌHÝìˆæ ÄX ÞºÙ7¡æwì8\J¥F-áû4Hýì?k¯óÓ˜×L²¤J¥[ÃCÙdŸTÐ0"ÿ9ƒ˜ý@{x=È0‚ðÞM†“,£¶s¼$…–!ßjDTÒ™*w@h¸’:îã—kÒ…Zñn‰”ï‚/R¬Çâj7iel³ýës ÕDZ+[Ã$Èjl¾†€Õ­íü,¦EN,e3B\h-(îl‘ÒŠŸÞ_oߎl€5±‡îVäÍÂ÷ ä•«âoîrùœìÙ¼:ÃÎ@ëkIœ+õr+ÍÉþ—÷;¯Ž’`D$¡.ùR)𢓾ˆåD=iØNÏå[Î<”ü}û4èÇr»®• ÿÚJ¶OÊ|²~:鮯:Éy”é (ø$÷·ýx`Œš öG2·GªBH0/Är£jcBŽVs@,|ö±;ÑÒ#Q~ƒ+ApÞ~Ÿû¾ Ý«:cf_ýý¤‘òÊÓÝ|µ Cÿ˜ç±Yæº+ÉkËó£€3 ¥'šÃYòÚxµ~% Y]ˆ«žæÈí«ÎØ_5'ÄŒmêöi®è]EY›I`‡¸p[(Ú}GÂ#˦%Z™å¼2–‰~¹å° õÔ0ã^l~zŽè($)غü#Áz•ó¨:Òfq ~fãx]üÑX‚O‘ÚÅKtôw„‚öÅž™LÏÿI/¨±O5Š| ©ýʃŽY.þÖŽ7Uåz >ñ—|N²è2ⶤÁú“Šü¨Ã¶¬J*ë’Ií_L¹\:(Üiø›xi(ǬWÓÖ‘^B»A\)¸Á&Ö3ôÛÒ†¼pí–ð´Kds§ðå๴Ê)Y?\èKUVËDlÀŠò™`¬p‰­ úy¬ z¼cÒÁüÂõ+†•j49œÒILý׸ ðÞ>qI¤ËY•؇­;?¶?ùËèŠ%f)6Õ8´óÑÈ xðŠ·³™ƒ³yÜl€ G°|)cYšwTÉ•¨¢­)#n§CXkV—m†™%¬§…É2o³·Øµ¢ÆL•8.—ÿÙUŸygß1h‘.ÚºÙ†ÔM˜©°Í|ÕðT,|oð¸ßµðtY+IÝî6{º«(Bú×ë«ÊFâ/µ×ÏEˆûœ;œz{¶q´’a\}ÍÍÕôr©AáÄY6DDR ¼g7fÛ!­–Dï£Q§©\èŸxÄn%ò¡¹Â¢ÎàúOá8FZú„NJ|å¿x!(¤äãÃ/ÕKYg€â‚Þw¢r8á²}‹s ©%ÜÔDË7h#8?Dñ÷ë8ô™>—ÃŒ½‹Îé ð—õ•/îÚ¶›­Ëdèxp¼ü¨¿÷uG 8°ïÅr.„¢…K7¦šdÛâÒ%†né$ÅÕe£©mü ²†ä1ð;yÃíeŸ”(¾=¿™½ÌÙß!LŸ±¿"qÜÆÿf"(Њl&Áþëidý¹ìŠÏ-È¡6Ì7ƒœÔPé&Ùn<`AÑYT©€-~•ñ•ä^ŽÆ&Rgª’0OÏß±'5Á‚¥‰*Xõ¦K߯.Kù¥ Ü¢Âí³u?aˆw±(P“ÒÈïXý|G‹/(h¥$h3Ú©?ÃWÓÖB6p»LHÃŽXí+$™­¤²fïtäÔ.×cœ‘þ,Í÷Ú.Ëà“|D7EKXãæõÝŒ¢X¹,>X¢4ñ^øª›×>ÁéÒÌ+#ü S'”Εg‡ G}F³¹–&ô6 è…ˆü«×Ù!4Þ€øF>^êc/Ñ6J·ç›ÜêFQ¬h}>‰;@$Ø:)d³Öÿ¿¾C| MÈn€GBËÝâÒ9Dq>g^fôýG’Üë#?¨rWGZ• 9,¦ïý×_7´KZØEIDÌðÿìÉVi´v`€r7ö£ÎWnç|ì‘ÈLè!n<ƒÀ3³è“+Ç8ˆšûo*Éòöâ–%ÙImP‰ x¸{Ù±…å q~^ßà§|î•°ÉI\wº`2µ îš ƒö$C¹ 8¦ìÙ`Çe!ßÇ‹£GÙ!ôä(3˜þ}äéá×í>€<ç£^Ž1G„Œc€êÊy= Ñ&‡ÁšîŸŸ<ÖeË}À)‚ ”î¢.þN¥Í‰3„»­eªMgzXŒ@Œoݿ䶸p@Lg¶µ¥  ¨Ó÷|Bƒ…ªïqwm)m¹{ß_G`³0øÃs­ü¯1rŸÚPõ7=îÁS‡A8Œ!ùÜÄiÈhG²M@ÛØXW£cÔ¢'G™~Q–W²$£krûhyMÃj %êèêyù+1 rja4õ‘ßñp¾°ð}¡£¯³áûÃôtÍ”£²2 øÑ>º5gáç'$yŒ¥2Õ˜o™cÜ…¾ÁšM¶“Ø7µëÝÙˆ¾`ŽÀXocÖ*séÒfÏ7 `”Oï¦f”ëȺ¬ô7Qr›vPDlÕ2Ö:‡Œ_ f£R=˜E¹gDÆ¿Öëž? Í^Ü@e³“Öíøùu¶Ç kvÏÆÄ_R¿å\uÈ!z÷Çxþ¦B힬î^uãE!¥û1Ó‚î•Ó@AOµ„ˆZèü¯¹¯/¾¯7PŒp_¿¶¢‹ÿ s²SzùY÷‰ƒS;ÚÞ9@Ûaq||ï 걪ˆ7µ®ãí—zýÏ$PË-3FI[{òîs [@'üfŽô]ÈK¬GîRɶàÚM—´þNòëéÒ&E_ÝÍ.gveü?èuZq  ]Ê`_ÃÆ!N ò‚'â¯ꉱE;±ßD„\Ç1¥æÅŸt'r0á¼i`¥>º38—8V ú…'ü!CíÚ†BÉðßÚë©&þÜBw”zúûùåomaÃìV5à9‰\:NµâÄ¥;d[Lñw§(=ê_¡Ô3t›êÈÀ§}Æž;b+ï߬¥¥—µQ½ =œ×ô ƒT‚rÓ>VÉ%œ¢Âm!ºRK•VEŠÛ RVS_SÔP&ˆÄ+‚矾@^2qþ­”Ô@#àÍB‡Ä?*cøGÈë (œÇÂejñb'ˆ_Ý@O2 ©<œPTLE«ãá ‚î½g2·šs@¶'ýüg~ñò ¤Òâ“Ú\'ú ‘u¥0&éàžSÜóÒ’†pøe¶ì,ãÛЩ 10‘šà(ôï Ê7S´ºJ›çÚõÈ«ª'Í:ö0'yîÜéb0ùÎwÇ=tZ}ïlNc˜øXÑ=HþEOȾ†’”“8Öu9·ÏW©®]9NùêÿHø(‘\;N’ŠŽu_ñ=Ýîå+ïb%ÿQ&.Žþâ±ó¿Ê†ç¬úŽ,‹?ÊAY‘Jk@ÁH*抌'Ýæoß5ƒË:S=1ªc=b„R£½A°£,¸ó‚O Ï zEµ+*K:Û\•E){’œÄ @S3‘ÖÁÐËûŒƒ“¿Äl2crŠZ¹¬9$áÍkòL¡E¥b®¦Æ^•Si §}&3m¾wE¬&›ðY–B%¸‚ñ#o›¸¶ø.GÄ¢’Q îý˜S¶ÈøjB¯XUÃYïÛ˜1¶àY;AË5=Kþj–Do}M9ãWàlÝíÇ~>8z'^ ÃÕ@VDÄ ~»Æ’Þ}FZ¸Ú3 ‘\:Û•ÈE²Rï%0:kÚAE[ ƒ”˜1Yb]á#L÷¾yCjEß½F¥'À5Äá½W*ã¶5ómië# …Æjàš­§QËvÞ J5nG ¬Ìý1PÛÍcl CÁž˜Œ\îg%@O³*öî‘Ò¿ $ùI)ÍÙ§íåÿKKÕ4ŒZEì äT¿æMG†9r«8¸À·ÚJòŸ>ø=iW ôBÖ9 ©2ÛRËûÜ6p=XGÅ®A|â—Oã1eáå„D!ëbx*Øý×K‹¼ô2c·uÀ¨þx;§r;'ôldËÐBÄ×›K,Y êî_’MÜìydÖ;x_L©d®=“­¾ZŒ¾é!ÆSås¬U2CI<[`ÒPóÇX)¹Ìµ3¿T^hŸ„ŒÞcðüqñN8O,Ó,jSªÙáI˜¶‘Þ ¥ÀZƒR2]-艶K. |%…VuC6šÊCFéh­dËkçoËzѽó8¦Mæ½N<„³IÈÙ;5«-Æ ˜Ší·rM›ÚͱoŽ¥IkjÄøÜ'È6w\µ>ýÒâ!Ñx–²¾ÚbÚ¤dLó,ì~=ï7÷4©ƒËùRÔÉ0pÀÃåQbñŸ;¨ …d-¹NjÀð]³3šdògÛv'ʲW¬ˆ"3ý«Qëñ±AÅ9Úf]ÁLýYLXâÕÊêQ0„dFô !©‡¿%k†¨Ãt÷¶•°Ÿ•‡‹öê:Š˜pC´üiFp•<Ø"!«"cúÊEôŠÙÊýš-טåøÜêm ‚–‰Ûþ*ÃAÝzPúÚý)–•¥.<öI\•$úbEB¿ Ø:«‰$"ÿ… ÝRâQLg ™÷tú䙿¬« ¬&l•Ðù׎¾‚ŽôÅXxF#mY’^h™—d†²AÀJwa·v—YÆ ‚/ð 0ɽE‘'Ž~£ ˆýZ4/Ñø0:TLrxt9 Šh öèÉÍ˧P­¸ï¯ovëέ٩#¼É!#ÕÞº·ÀFø|e‘¦â®6J×(„âd³{¢³o+¿Ó gÈÙê-³Þž{2¬ Nq„$zåÆpy?†ø W–ÉF?!²ïᕜÕJŸBc‚i€Âz ™È÷&"ºÎ(ŽríAÔŠbº²×øñÒ<ó¶çÒû?dïï:™“ŸÇžStݘúü——“‚á(M%9ÎÇ®µ´é‘.5¯t*7il¨f/T?ø€ŽJ ¨6Å\²:ãs’]©¹¬½5Hý=m!È#óê#†¿ƒ$þ9ª^â0›ôüF`í²# ‹¨¼6„¶Ù}Úù!Æ+Þï.ši啳ˆ-•—E|ñD<\H"Р³/ä›{ó£a61UGêvéħ]}Ì÷M§oyo=ò^ÛA‚ï¥9àã€(ÚI:äÄú}Д­Á2Iá)2Åš7ô,fÍ2’ÎH—„6II˜ŠãLŠZvÛ’s3(×[_E]­m¹j÷©ã²(jì“`q‚‰-fÐqnÀrÚSôzúÙ ‡é×ùX9²¼èMÍ®fYΕf3xjø!˜£o$|VoÍ(¬d=»Uû‡¢Ï2ÖÈÌâænzOzÇ’¢.¾¥S¿ í ö»@U+à—«vÝò`{Ðwi³s´ª‘3nÑá{20Öîà¦æ—æÃ8|³ãœOÐ{OŠj4„J~™Kܘá\qyFç û³ü­Ú)~Ýç¾/h3"ìe0ÞÒ®L:¤³HÓRànQD§”·ñÞ¹†ň+~00Ô·Y!×þIŸ/”3×xc‹üL‡bki¨zM+=f”|(=su `Çì7tIˆN?•&¸kµËÛYýˆo޳ Á*Šmßm$–D¾Ò ÓñUs2§»\û»©NÛAÉÚC„eµÂÐßÜí÷—¯QŒÚiDV Š–˜ïrç3A?ÕªõOüo µñ¶váÑÞ»ž’h÷ë=BVç U`ùÂá‚oû`צèWb7#vNÒøï&ª§Þ†‹‰Õ ,˜@‚[¥—J>;M‘ð¨MsUÞ ƒkµÑU¢ð¿+V»‡°:J%aìÀPÉOÍ!§æPzÚg¶táyü(úÔBÖ@ ÇN¯m’ä€÷C1õ ‚;9CË 7 €±iv|¦ß~¡¥ÙõT©D‚hÇëžtË ü†ŒÈï1„´ì£µ ÉSV½žG¾Bˆ‹!±Îñg©+/7ƒ£b²ÖÜ¥lÀcÄ6WGòüʰä°í¥~útüæ»Û*,»ãùè´„ù“1¬Ðv·oÇØMsÅ_+“M¢Ò5ê Á“m ©ýt÷gWãÇú`Å2œç£*1À¯T}fñG4²-\Œ_±n:ª,hÁ6Úá€d2>c̱+ÊÜ|‘CŽ»Ëéµq…å-HÿŽZÕJ®é¦ÍL± Š4~ª!›Dm«P2j9™p Gn[±ê"·¦v‹I¼<>†J#iXÀåLºœ”Š0ÕÌÖ¼ÎèvBKC@Ðf% Ÿóô ´Œ§ X T ¨´›˜G°G.lì[8žâqÄÕ?6YØtïãÒÂUµ±PÖCÓb2ÇE‰<ȈºÑîT£(ÊÏM/€8´Yþ)€¨äPPæJ <†3!ë ;G]`QÆ€ 0‘  %8 Ìõé$¯ÏuxLH5(*àŠús~Nn*¡¼ ÿ#O«=ój昣²ã§SÄ‹”BTî¡Ã[¥Ny/¡ s¡M¸*© ö^âHPü-†Øð LI„AÕ¬ú(äfÅk¶0î±±S¼.ùrƒlŽïÑí7T3´£‰ »/¢›ò§ÍøF[q»6Á  ø1ÊõPb®oÐÈgª.n”­áÐË¥øØzÔâ,Æs¦S4™I­.áX_Q‰çþiÇPùñUá½½-NAö[=;é QF $¯ÊÁô›Lmüoÿ€ ØL]\Š«ëyÏf0Ÿ@å{¸ˆòƒ9ot˜Ìg¨”2TÅÊòM@αP·ã0\ñ/sb&œ`1|*Ñy°X2ê¾:àŒþyÚ÷,™¼3Þ÷¯a­,÷ªß÷kØÓÞ(£Âµiš C ÀÝ‚&¶ø…Ú%“‘â9Cã°æn2™‚9ÍŒU‚ŠéR£‚K…t 0LItæœåÈ{k:€Cßµ`Áj ÌhbHêi;¥¨Î«cD}ج–Éžž"›™¡!V=,¬¾OA1‚1,ׂãG–ÞúžPó‘ÉÓö}4V¦é‰Ð$dÊ/›]â¦ïÑÜKš({…8cÿ¹oìæáß\VZ@ «‘ªQÍp$%*àÒçs‹q‰J“·8"@´ÎÌsº÷pÚÜ’C j*A2 GÂô¨°("OÄÔ-´Þµ€8“‚½° ϱ…Î-á‰;ÅÉ+T9ŸŽÏ{ëNÊŠ¨œiì;NÎ8Îf‘—aÈhé,Lâ7Ì“(Dú§eG˜pÛ’ž¡yÂ`F­1©l¶ÈŽº!»ÇRÒZ1󯇜J·éÏçñëÙ ¢‹>X“3ëÓP¾yµ8Uj¶}Áf—lŽÿªô ‡’û[F´suÆ­ídѼéÀ3.Ã6·•â‹jw´U )Cº–H;bÔ\Édù¶OþÐLÝ0jê³r5µC6³ì|\GŠ!â@u¸¼ '{ë«U¶öj»RׄTgÍq‘ìœÃÉ©Îj~ú¤ˆ‘î]eâ óÁú­÷#¡½|2µ¤xo…\€ñmä ¥1¼öÉÇ´8Öœö šjëYÐtÁ8ÿÄ:¿|GQ Äé㣠×Vì›1 Ñ?xüpÒÈÑœœøÃf1Ègòå'>vLÛ¸*/¸ÅðŸX´N(`Ý Y?€™lzd¬ïÃÕ &|kiŠ1wk„ÆÄRýå¦ï8KC\s[íòH cD ¢NÛ©° (À PȬ^Ut/p”ö‰Á¸Mr0š£Â4¤s×î º€L©Sq¥P+sé!™™,t&³ñÌV•ŽNÞºÙŒ/Q¸Wº¦ªàÎÈŽ|LÜ©…•€KðÄ7óJo;ƯÎ|åo º¨è”p¼‚ôJeòà&”»­ÎÆ¡°¾Bz§‘N=O“Tµ«ÒµWå jÜj’òOĨ6d!ös…À4èx‰&Ϭ/µƒ8НîÆÉÇý9k‰ sœ;˜‚LÔ½ÞÒÑ+75Ò¤jé;Tô`áy¾Ü ÍGUX°4Ø5ݾŽÙÇœ{“^#`~ R3Å[†2½ÿ!¬Œ°9TÐ9àù¨tâ…2 v­¸½ê¢¿¯°4Тà-t9œ¨ð岪Xâ#Þ¾tÁ'†¼¹ÕG›ÖB¾`Ûû³å„ «¿Â)A#•Do6‹¬ý4ñM¶ö¨^Æ9’êQÍ,È»²ý°Éàܘ»Ó<*IÔ>1n©XÊ›ÂÆÚ'Á¾ÿt‹^°X±B}ßÜŸ…ÿ;!¥Ö@žÔËà8¶MbèPèêú§uxŽT¦ðãyº×#È†àÆ¸=›0¾ÚíÜÚž|Á’_|Æg™£ ÏÕçà’¬¡ßþÒMOªí±Ê¼ÔížñNx6ø©Ç»]Õ&ÉšêþËí¾žzñ¥Ähr‘¨¥¼ù'…ÒÉsç8‹F;ù%i<ÛâOø«€¹©>²-+áªÐv‡‰¬2Ö³Ôœ€ ¤T>¤æSP†Z`²¶Ü#ô¸úÚµ/ä®B±lq†èÖ:$ÉOr€mxåáñè¨R·EeÒ(de¢>„G‘{Ä9³#f¶áìÂý2æâ#y*ûÛ!,ºŽ˜ùÓ,NŒseÃOw Qr y¾*Q…C`CßoÆÿo<‹Uïüe»-}œ5Fñd^j÷ù[=¤ñJnw¹2à¾}"AÐ Êõ=›"­·Îê9®©ê:à<ÉôH£‡£á­ 1£À¸÷0–ì§?¿qï¾|‰ÿ–2;XWG²úþ/– ðö–U3fKÕìx0£ÅcØÿ±Å(B)sB\ŽäŸ‹£›tyð°=…µºö!‹ý¸‡V ¿LRªPë+¤Ï`),ò÷ÔÐǵ„dløN!ƒ6d˜7SIxžâiãÐàQ‰<~ =ô”V‡ÛÌ ©DApÝlãà»~ ASôd q/IÊ]A5ÑTÁJ–\?GÜfõ°‡x¡ThÉ>tîáµïÔéÇY¦nh6L°·ftÄ•b¬A¿¹´ºö•Kki%ù_/˜ÑV¼t¬‹6ñ§†C&îšë7Qd=pZUKÊïëg_(Dr Γz œ¿ ™4‘gùpÅÞÐôiÄ" ʤbïBkúŸML6¬-‚²~)>¦ÎàÍa£ ód8Ó ö‚ƒºâØòÝÁ‚HTGÍþÂñ.¨D‚þ€tŽV´ ™ »¯3¹küÓ‹’Mcb…P¡âg/^zî#f«ÿ­Â]§l6®ÊÚÿ­#ìUO""Ñ"âFyÌwþ½¨E2Æ>Ûp`íFŸ£ÿlû-’Zhíûjø,Õ!°±ö}‡£( (ò.Àå¾Ê>>ö>CÈRíÔìvbµ¡t6NÎ+§–kŒ"¦ß9•O ºó%¿Ï4#J2æY˜A;c§fç\«×žc³zUn"3„`PɯH†oœ»ïŒ¥uÁtAxÉ”5aªæ Mkƒpš"¥ çÍÊ‚$Š >*Þ$ no/³KÍÌÏ^æT¤BÍG¶²±zÝDGç*lyðAóŽ“5ôuAâŠ@¯"Q#ù$4U‚nPAœsoú*Äd+Cò—f•‹où™ú³'+HüÊSæ*pâQ­²ì²lšÉbÞ­É^qJ>ÐÕþ mrž;’É¿r¹E,‚úûÂf _”wÚ4ö"íy°Œ(è¡í7Q‡º¿åºjø&݇°âŸ<µ“‚ ÃêD ï{€šWÎo», \á‚wSØ/8Ž{YØ£x: Þrš-kZ£°)Iq(=ÎØŒå—®Õ‡B™.’‰Éi†?ÓŽ!LK”I…0chÓ믔q¨©®òqC¬³C#êS#›F/Öåñ"Òï6â"BÐßtú”ނצ#ó¿}¶^lVÖ4M‡³Cù‘BU††XîOÔô/¡éºó¹ëÆ*[Ÿ¶ÿå'SˆœH‡æI¢Ò¹%Òì¢ ¢ýI” ‹Ë—fz´’z»Òòè<ï˜Ã¤¶|EÛ¯¹n>Q tñ!U5ÿü!ÇMlØ8âOŠÈ[†-’8Ó-i¿}£µl­L­ŠfEìÌØ0·¦ÏŠç±7€g‡0'úÒ¦W<÷÷ê Ã8£ßÿ¤ÅúV“€EÈ)¤jê)ý¯®kJu0œ!,“S2˜¤c•2Ñ5¹rwù†øq™ï/Ê~fW-ê™oGÞûÎÜ…‹ÊâZn® R0VÝx–Sm¿oÆΞHGψÎÙ_‡:ËÔÅ $ÙË»–ApY{jíÙÑÒqk_î³ávÀÓ¸“ð¶KrÊ% ]ž‚^³)öÌðŸÕŒ¾4ø8´ÌÈ VP5MbJLŠ(3öÜD³h_ïzÌæª{ºýy¦ éÈô¯Ê[£jåÎp[_K›½Ñ[øÞ G†a9,[yHß4©&±+ï¡X3ŸðK¯;yÁA'>~+õîÎY’13-Ukøjך›°ƒióMBBw'žÛ€íÊA¯×°Ä-W¤¶ •Úa¹T'S§­=S>.ÔG%óÑ•%øÐQ´n’ǵ"‘²¿ÿ=3UlÙ{ÞR*XÄÜ?ÏgY×ó¼/ÕíÔ“ñ8Ê+#µÚ¶–x/¶ÈDÑòµ³Ò0ô¢RSñnó ËP X¡oë‰g9V©6}ücßòM”ÙPls°µšM¨ƒ?ÏP.&‚Ä -×¹7èç1ÏáæŒ"Nù\ …G’Ò%a󼚾¡Q[jÛ…ì|‚kŒ7Š ¡Ò L¨Æ)ãYFKêïåݳ²Õ#»{_ï̬|4±ž–Ø!ÉxwË!|…îX ãßYjõã•f*Æn¡ŽiÑŒí¿ËþÄ)ðrÙ¾x„¼O^™¢=¸@ì†-WUàêÜu]k&´¾Të{¸”-žî#b˜ÙÈ…\(ÎËh‚û„:=“ˆRóÍ>t ²»!jŸ)è@µäùa%–ºdÇY„¾ÃmÛk4Î0â“‚}Ý|ÃÓ/Øó –./¦àØ"/¨ÇÆ3kÍ¥!\Y„+J˜LØ=.3‹ÝÄ‹ò÷‚³þ˜8¥…ßÏ1âõ»Ì¶ÍÄ>~·Ã‚ôÿK™Ï%ŠG¬¯Fï‚oÚðL˜f’Ìà;„µ“¤á®á%‘þbºÒ&¤¬v”:ó5Ú\)¾É¢x‚ ÚlìEÓÇÏÂVéY2‘pᗥشèRB;^:ôKq+ieOök†¼T«ˆ(KÄ­– Ý`Η+(‡æ%Ö\ÜÅ{؃ Ý[÷Ø–j©?À}Œ NÙ¦/0i9àê@ÀQ™ðUU[¾DÖØæws®LNóZŠpGIð3Ñ N“ Ѹ™Þ$CqãA\ó3T[0EG×A.B¢¬¬=‡}žyMo&‰ºµN^U%½Oˆc³ ùo܆„é®ñßÞfü5㨴KˆŠ]ݳXØ¿£/ýú˜2ÖÁ7OkíÅD@Hrô°â êµ¾Y7T•û¶#‰)á+f7‘ઊ(j’ÖÁžNÿºÈD,Œ”cÑ÷Ÿ»ÆéNþ$s|a -š¸´n™p÷” !ëÒ4zšªßµ+i=)8pU­muûæ¡ÎØX®|Aš@H„KËÍ{üF,/¼a#R”ÿ‹“¤ì *=®ÿ×H§xMò¾9 b,eÄÎQ6‰:ôÃì’ÑpѸ´DÉ‚*u#S`ó·”Ì•µL=‚ìüQžaRÜ—ÒÛipßòº]}e2°þj7nÎÉñeª»ÄâŠ[¹cã×7²…¥†Œ;anbt„>°©'5ˆ?z…a„°$çÛM¼ºÕF+1Ä´Ü&©1™s¢Å±0´dûÝtvc‚€Ùê`þTÖHOäbó‚Y²f'?U§¹¾^EâÜÿ¸*åºþwR½ÿÀe”=KñÒ/ÜRžú±Á4¯„ÄóÇ õÄOÏ:¬äYcû'ìÕEõÌqÕ¦^g \Ç¥Jc·g5 ö¹Þ jËô”šôkægñ«Û¿ØJòëiM,}šVÄ׃ž„‰ÌòîΟˆ›¾£üœŸsY¬·%:~ƒkf‰&ý?l…ß/ã%Éäd›Ë‹Õ·Qð ÇØô?ã-$À®aƒ Öüõ>ˆ0«*LË[QÀöX+¤õæ‹¿èšÃî¥U°-Büuå9e£]H8 «Èûîÿ°Ø“oS놅eççfˆÜ°„?ö†¥´:¦ômß±~ æõì ”3ÌXš°Uߥ$ì ÃxVVaúúNk'¦Îb w9<TK…Ú®¸{j5D$>zÔµRͪذ‹ ࣴÖWÔ:»s+“‘Ü[Ñ™xpRø_î¸íh0 ˆ‹0Ú²Š¯€’ÓëŠö ûCè!ö‘gu})Ô•'äÓ±‹rÆ|3èa1Àª×­­Ds|˜îÌE:„D=.Ž^Åóû02{9X`Ïbp^Šæ%¿Àã¦ÓÃ?VŒ“·œ+^4-9‡1Ä`'ô~5߆ï»8X}z0 o™Ž‹LÃÔ)Ö‰Œ/J J±ª»4Ÿ‰[M,².Ëåû¨×—y²ž m• ¸ƒÅ£Ppìì_š:”öøq]êæ·Ýwtž‡1rUOCs1"̃ݳ$Æ ñÑÏõÛÙ¬T+«&ùÔ ªyÍL*–h.ž[T/ª£S Þ]’¤šm© g&š'ùÇ¥:<ÃàÀ‚…wKgÁN>\ƒiÈ$èŠ[½ýcàC‰=-]äq¯žt‚?€&%‡§{¯Óê‹È׌¡—Ê…Îa[ÛÍlÍO§ÃÞë´V)…“Qf÷y¨y—_ óÓ’Àcõâø¨ %£ãv·Û²=wùóéÀ^îðÍÆo³†vâ‰>¸Þ¹1³J…Ò-$PÍ¡\~?RÍ·¯ê^¿=²_W—¯j”BhA)ÌXz‚ýHUÃn.P/éè£âsÎãaaóéû|‹FI&Ͼ&qˆJOði{7T¨8 rYGÏÓ·—x.·.`§TZ19Œ…’NÈ¡xj„rÖ3ÂN+0•sMŒÛ÷¬¬  xŒSb‰iWKÏÒP-É5aB¹êãp‰T-ùx܈ìzp07Jéz4’1æ56˜ŸÇ»HD›™6ù;ŽÝôVÁ>Ït~óöÎ>ê‹&·ë륔­áéÚ—/Þ›ŸÖXO‚„8å…Í”iÎjpmª7`Q©MÅ>ÜÚ¿pL¨Cô"܉,>yæ­P×#!ú's„ äf*=øqn¢ò‚¾‚WêRCøBßeÁù!«ì©EבîNq2d’“/Y‡íº8ÉæL…ìX7ëi>¢3oó(ÈÖËÉo·bhKÉŠ¦Ã™iÆ(bÁÛ÷÷tYûU½ƒÝ–Úz½ÖÃû9Ò!z¥¿ÅEV´°8ÿ]ðȳЯJúEãÿwnqãÓM±}…ÄzíO£êeþnÈ›ÍÌã/ Ñ€ù®rÑÇÅ¡¨½„ÙECkRÞ4 ÊÀ>N“6º9na01¯JÈÆìGh;àPœ¢á¾ Úp?Í…bå¡/z­ÄJL¤Y÷I–þ´~7Ï KNRÎ;×M¦mÁ À¼zävN?ü-¤ éûKQ«:Sî—ucÈùà€eìÔáš êê*ï ÀÙÕ`½†ZR áÈö¯ -qëê³íÅW`$ÄPBi€¼„ð±MR¾6ŽÌ!(9 ^·õ(ãT†àËú=RwºÖü¤<ó ˆ‚å¼—Ù>aJ¥×¯*³¹gnÿ–zëørÈ#ˆ{¬A.æá!ÙÒ?6®ò^slaýSåf–>û>>4Ó7@Ïkg.±Q¤lK؆ƒS°ì¡Nÿ wÍ:½– XTt“ˆý‰›T‡8î¼™ß_b}>AX\ÿÁ”D}Çᤇ† Q¬ÖÉVØÿ Bj­•ÎgyeWqõê¹Õal ZK–‰ÛïúòE fž3™@Z]jiÜŽSÚ?>W‹—è{º—vå‚zÛ¿7p[™!“éç5&Ãʼªy­y í‚©¸0¦“P`·xG×OZ¼'EœhÈX5Ú8ûOB·ýX°'¹¸}L¦y!”³ÂÃA(J “OJj=+On@Ïë·-ß½€’èÇSün¶¬<ñò{ ´˜Ä?Í(ÿS ³{]ÃÕ?o1m\¸ŠX)À,æ ÉMÛ ïö$×!‚Qü ’Md“bëþž¼ÿ5ÃfÀÏ ÁÑ?Œ\¿ÇíQK&¬åRU ­L/ì”ÄXY)®l3Ò5²ÅX<éQ x4ø6Š 3/}”Ÿ(ŽŠXÝ»áíN®¨gsAa* äÎsÌXaUÿ¬®ù¦µ½Â0QÀ§Ì\öÛ$ÓN6¼j\@6n¨”~xTãÕîc8BH3 >¶QäDÃìšÝÌ ÛrÈÐÊ5A2…¼‹½9Á×J­êvgJ@>cuƒá÷Ȫu·ªOÎÿü˜Q€ÇE´Ì O¿µnÈ¿=)£_^wÙ™÷Œ’¶óÂÄâí¶ g®mHäÅàÍ׿[ù mQ¤¢î…NR€öˆŠ;5 p%æÔ>ƒ ”÷ý|Yžâ":c ÖÚöÞ D€Bš xN†ˆÏJö¤ ÔÞ¾é(²–™¶ÕcÝñÈ\y÷Ü#T Ì]Šgæ!&~eªãÈzµ ö:uúò#ñɨ‰t¯®­ÐÒˆv ôo /E¾«X@˜è€s°™=5`±°"ãlj‘Ð ˜tÒ@w.愳¸/ù%9#Yß²~)¤)ô%ø•¿O\ÐFô.¿¸Œh¡Eïñ.’êEX‰èBk‹Ö²ßahWÐû€m¾Wü\6‘>½þZ]¹÷zc®$V3›‡®Aú^V–Xü¼x‚Gª†1x#¯Íµ¾‰‡KŠ­ÙÀÛ”5Á¯JÀ¬ÍŠ4.÷ Ž‹è·.Mˆ;_µuŸãÒ#sñH4³g¥Ø½²j"47ìDDTê Ëä\s. <õb¦ï2ëêœè¼°îv Õê/#¹˜¯s·*ݯoG1c3[ñW®;É÷#K6蓘p¸»ãÕ¿îàwŠOÉó>…v”œ­Ýˆ4gÏæ ]Y’J)½½×hƒ‚oï'ˆä¾7¢8ÑДôÔ;Ë’ïc1 ý¹<‹ÑCÎ üÕ^×]…ŽÜó)Nûq8nÊ#Ôfp£‚·!cVÖ÷DG^—Â,ZUà8E霬ÝÌç²Ûû…‹'AÄZI2ªW Ay‚]U˧7AÞ)×yJÎAï»Ùq¬‰m¤RÉúa܇XëSŒ­qVü& ºE¥ÀDw ô”jpT¨}Ûý =ÅFÅ›#Æ|[ŽÈj߯õV)áIcE0©™Ì~цî̯TÉ1[³8¢¿Pr„V[|ˆ*ÊpÑ@.¹Äiùðe+?º$ ȘJ£ÙѺ¸À[ñ=,Á¿$Ï7Õ½h$Rf-ì@<öEC®~IÓpÝñ@Ÿ?èÚ*Û{Fµro2úö4êœGj$ÑzˆÐ^~ýæeAq1“¢4ÿúUðxýÆí !WùDÚá²MÃP&ðœ]Õí$ñÚwDÝBX ŸôÃÈ’d‰4¬¶'47 ~(l 6Ùö:v£ôvæ+“]L&õ“«óm(74­ äÛÄjFïwSXèMíÅŸíöŽCÆØSˆ”bø„Ù¤ÂP0úýœÆ„U 3‘@ÁÕÑx‹ã,ˆ¿ÏÉ?Œwx>Û\XêÀÿ«•oŽD0¼,?V•5 žÕî7}‚¤†ëdk¶+Ðy|ηf³,+èPBÀEJ›ú.Ø„/lö†m1ƒÎG#¾ë[ß_Ë…¸ˆ;ÀúìÑ JAyЏ"r©b¤»ENò†ð­œ¦HÞˆ‚ðY°Ȉ蹵»mp D} oÍ­#üÍ©#õðÏÕ\î¾1ìF_Z¹ùÙx &Zª~gåâh–ŸhÈá‰nO›ËÎ<ž¶—îÜQ}µ)›ºEŒî]ÓƒÃÕÉ!¬G1çB±è_¸ £;НÑä*8M ›[b+ᣥ¦CsÔ¢¦òËÅiøÜr¥Þy3˜æ¼åïÔVKëXyµ:8Íc¤Sí5q•JÖz9Á¦ú*?²Q#Æ]Haôð0²°ƒñ!Ÿ¸t ÐÏ¢í¯8#±sr5zŠü‚NÖõêší…ª[êêuÒªR“ætTB`ÎÖðK†8õØã{ tµPpÙuù8ÜÞ–éº tÝU€¾»DÄ¥!\.÷ûÿíÑÚ<@Ý >AòO¦æq¥±© ÖW*÷Jß´Púx¿[`oûô¯ùu¹úÆç[ý%Þdzom²ïß_j„ -(Tžž·þ ßá¼n¼¨¹}þŸ×Tz%Ò°íI4!]ST—`‘·´ÔG`Ä2ã ³U·g^²ûýJ[ nÍz¼îØwMe³É„KéÒtNô—ü‘ u±§¦b‹Ÿš¼™:€3ÄAfûåê\&ÿÚ@°A1«.Gžvšr¶š7è…Ìqºô÷Ö),ŠÏ#ãZòÖjwšý¦…mp,æNéÄåâOwv(廇ãÒµï:ÄÞSÖ6εìÅÚ{/E¢•cy ·2Íâ’+¥¬iA2”qCwJ³’Œ7ß1\(þ«`:D´K3‘-´eÃ.`]i'±Ä)yÚ¸í1´ž´—ÏR— u/6 Ps&k <=Òô?žÕ“[Ð6sç«Æj§æüÿ4ZOÅפ¹Ù„õ³î-P,õtº·HžÝtyë °G•móÀÍ?š]vf.<šÞ§ˆ™Šù5„êÓ»¹ìHòyÀ“öi,µæÿÅÐRªÒœ²!WâOF£5w4+ëüÛ‡.|5*Ï3«pü{z~»;”Ütœáž¸Íleyr½b‹§´GËd @ (Ô†QµÍ<„õõõøÀ*|\5Z{[«X2íÂŒI)ÝÞF;X#ç.iý1üÖ‚& Ç×1>@±c Û‹¼uã‚’Qnv·MrÔ>ùö@øO>nÀ ¨¥»ÛJ3p¥EÆzï(D×WJåŠ@éþü†ƒàÒ"KõÝeÛùñtþé 0ö}å¾9iì> u žQ_vFí:ÊlUpöñ Áã} ós1÷¬D§?Ñ]6ï"VÁ…ïµéÊB¥t5y–®†¿öáM­² ’.âz0[-Ÿ€®‚x„ŒO¶*AfÚBÖM=” âMßæ/¡U£³+¾vÐÓH$¾q¿ˆ P,|1“iœŽ%ÅìW*+°DÜRü·•³ú±…Øü¥yôwõ…ý½ à×'H¨$ŒÍ匾ÛoK"¯ÕaoÃæ¤Ð,¢gÄ«j9ŽÐ|ø„ûÐE\†²@”¡\ȶéɃ¸-jîÏpï4PëÞéOµ8þ¿y©8x¯Wçej}3+Bx F(ç™Ä<¨GûEíì$OÉ“§kL—‰ÕfЄF:oÂMŸú\ HgAMÓ^C'^zMWôe•%Ĉœ`ñ÷`øŸ‚ƪ÷$Æ]—™µÍFp2ªg TµÂ÷YJ•QÍJÅÓFYýÄB'ÝÍ ß„8ƒG„SWÊÀºèüïû#͹n1P´þ\/›}— ²SþbA»È|âñj` ~íæSšÆbÄÿ‚[ŠT¸eÊÛLÿè’–ƒÉÈÕìRÐç21‹Ï¶ÊGzP§Vy«ªá6 )áé—ÇFÌ£’\PßR:ÂV¡W ç£,pëžnTÒrCù2œò4¬#JZò,HËw2ÀaXìø–ž,xûÿC~¨Å_f†Y®àyÕ×xŸ éEóBPnDnÿûÄóOa”8tŸ|äêçÍɦTx¿ôò0)ŸÌÀãÚdÑ©èWj(cá°t#Y¹?Á!10ÒøˆTZ±d®Øw/V£ãÊõ÷H=œ‚á.L–Ju¼÷ÁãØ_qRƒ“lgæœÝ è:s©’ÅÀ©Cîë³nâ0Qß¼âdÂÄz+É/¾ß)¢juâ±ÎÇš(ºƒÞ6Í[·š‰¤È‹þvŽëà÷XtùQ\&#¸Žk!½÷»Š¿Fk¼¹'(—ésJˆ˜Ø/µ_Óª4ù'Û…)ÉÆN6‘¯ ³- m½iÄ/Ô²0ñ¶‡ ÁÖã-‘Y¾0 Îê”9tç Tü?¡¯Fò0»Ñm=jÑœ®¯i] ÑŒtÃí_‰Xõk¼7L¼úßGøÍL!õÙbÂÎW øŠmkßÕý&·ÈJÎád“¹¬¶‚gô(€¯b¹ÀϾTæyuä»]‘°DˆêØÙ„3ͦ9Å$²±#Ý€%ƒ»…à–2+ÕÚ§ÝòéâfÂû¸ñÖ›f‹ä|çjÞ ûA\eÜ$pй!à Ž{  ÍAÁ[˜Òt Rœð±2VäìÆ!‡XAœãr“àÊy«4ÑÈqéñZôH€[œ‡0x$Ào$ÊiZZh9$áÞª•³d”E¯× Á Ž_xg°emz§è„¢X9W*ðAc7Z™¹‚R¸x-),“bà?BuM<•*¦=§É{k@EŠýñ‘·Ô~»L< ˜€pôý€WÄSôä|Wu¡Í®c]úªÒ6¬þ|žó×õœ¡"‰Œ ,úD7¶µ˜œ…HÊ+ cHŽ= ϬAÚOOÍñá–NÉ%@HCE}§6×­é09¨·ˆ¼†áFw:ÛÐÁ A&0Üs7嬿 Ot¶ŽbNŸ{c¡ƒ‰X¢¾KK&o*öWŠƒB(â›»fÊß³­Å¹vÛŸµäÝhî(elQ5®qò/™ôù뺳£ùe½C„´! Ý0€gÄN`D\ú•K`uCäáwd˜C·iýøÜØ7†Ñõd‘†D¹{…nÚ‡4MÕ°FÁ,'ôм7•FÀ`|…˜Õ ‚3XFã¹Ìt¤Qù¾1ýâ;~Ö!k¿lðUûqÜ8‘ø¤eZ cihÜþ·G¼Ç˜tä³+€‡¥•Å0É [‰ÙÄwïËÑ‹d‡‚£©|ÀŸÜèãÏ–?~·ÃÖð°A¿×XVàW'€*ÉUªT{’eJù+S°ÒÃå'•TiùôuwÓòZŒÃ¼Ö—Þö@£í/m|=‹Ô†ÑOwQ'ÕV4J’ÈiMÌñÝ«õìÓ6) nÚ sÀvg›ÔS56½ÝYÑänƒÓÎÝv0¡¶}ŸÅ™ðéèÛ“þ\¿ có#˜Ù¥V5 aQRÊ/»˜TiF%YëÝzÌÇ8Ãå T£®©ž¡úî|–ØÁITþO‘†A㪴¦¤þ¢ ʹñ™~X©46UöönÏ]× Û@ËX .†Ëþ[©7\Èêî?GExCY–ÌšºÝiÃz=7Ϲ°ÒŽ×tÀÙõ…¶ˆO/cöÏôºÔúÉa–ûÓ\o vN7§¢iç‹ÔÓx¿ò]T¹CíÿÇ®—< y½›¯SÕ½‡oÊ1þ¯²Oœh•Hà…XÕœÍ-é~!åµñ]ò@º²ÃõÇk?×L²€\`ˆw Å@3ßûÊÁ{R¸“câ áÓb÷@ Öƒ­V–º’P uÐÊh5†^›M.Ã’bãõ¼}6MjWÀDë¸O™† qsÝÉÝøð˜çä˜*QräÔÍx®Ä9>FX_uKÐÖ}ÿ'»Ï•ý>ÖZÓ.¸>5÷T3Ždÿ§½¾wA Œ3=«“—ÚØ¯¬øNRëÇz^®ÉÂmꮄæèÕ¼hUÉ œÜv- þàé:±}W8]kU[¡ÕDù8V½¶øB×Õþd§+ñVèmÖgŸjJ¥ÁÏ*ŽOœ{Ë+B±€Ú£Òrnú.ðT‹«˜« šù(ò‰ð|80¨È’ ¥/ì˜ÂZ«)×1G”ÄN?³kF•ìg‘5@bµðbÄ*§ôÂSµæÃJúŠ–Ç}L¨bM¡o É!»*z%í°Yˆhö&leJ)²+ÝIϰ¸áÑ¨à™«Ý®ä 3_2v;ͬ2òMÍæmO·Z‚züëË)¹ù³\¢¶•§8CôVÅèe»®Kª·®myïï0Ð_ l4Š2¥àßÉ´7þAµ1®Q¡åçÈ¥£Ö–ß(hÞx2÷Eß·½#Oå,ȧ·gÕ™¯ß[ÆB*L2ÒË99äÊߪ{lûÍJ“ôèªÎÒÑ5³‡v¿[‰H1^|®ªRý“퀙˜ÎíÎ1WOîF?¨ä¥w¦FÑ‘ðùöò ¶+ÉEv„F•#$zf‡.wàøÑQM”­+X9qÑIÉÀ.•Û¬ò(¬ªÝŸ)‚#YÜø+¸<ÀÕqÙÅËRma—“5Þ¸Î^1ÝŠèy¤×¾µ%mrìåU$D[sÒºŽ ÷¨c|°ÊUù>ŒPãIú¼˜F*Y»¬D¿uÃî¥ÖÐóX컢›déoKíýÍ¿h÷;f*R¬ÒÓuy [K|H4‚­Â†NÜÛ`Já»Ô3éß.&L Õè!FÞE‘UÊÔ˜o_‡±„à(QôҢܢÌyúž£ñaŠ W¯e©À)î üß,GIQa§#ÛZ<ÚC*7ãàôlnÌà,ËEù ¶Ïéjåæà¤óâÔkÉL‰fÞà¾s$…p |dP šø©眄YƒUNO`ÊgR¶´"E#¦'ŠŸ4¤8¸ª4ÛÒòVj'¯WRjƒÁÛÄþÅÔ™6IÍ›cëØb»ð7ŠW=sÖ°È»¹Âbu#Û­QžšT1 ÐZS0=µVñPdõFÂq f6&;ˆW6Í*[é]”R°Ö©CT:ò•sÚª®Þ6äqÝE1å}ÞÙfA±úíY7 fš(<(gkòÔp–Kë¡‘mtè7˜” ]ú‚„BS‰Öu™ç• 0œY_uÒÅë"ï1üßüîñ=gôo þ𾘹åÔ§Œõž–Vó¯Çî©eªt€|“.8™"qÉ)mµE£9Ëçk¡ZquŽéVM,)®Ç锯$–2˜Id‹ÿ¿ªÝ³õDÂÖÏÒ|µ“NjROÝÊLUy\³ýuh{Lè„iõ‰½Ï*k1åJ#Õ±®¡¡E ™fÓæ®Â΢Åbép*Aô¡_eÅ¡>´å¹…oSj¢"ò_ÿ.­ÏØF–IÅ l8Ú›yu}zooÞþr€€âfÃ4YV²œ-Û¿¬¡Èô4ÄW\" Õq‘g,»¶¯ã`ØsX€8­gì’Àó&6jÇaúŽÂyƒ qYƒhò§Ÿ¨‹ø+H/vrºÄª9“90i]½ÍU„ôaŠô!\ côÂUÞ^¦ã±dñÛù»ô,Üw§Ìë†ît ö…ÂÁàDÌ_\J“ñ¿8‰§)ür(d#¿Œ3ºmŸ0„}¸ÓnÚÿJ¡Š ‡ñòÿEG'ÐNYs‚¥’²"ùã¡Ï@ó•{º ‡²8:~0UåúéÃÅ&ÕP={_²¥ûw¡ýhDü Ýs`ÅTá£ë_«æ?t$Œ(©g–ŠiJùˆÜ hyé v™‹«Ð–CGe„]&{€›Æ#¡…­‰$:ç}”:~†Ò©ª{~õRDto¾½ÅHÏùõš_O%ßçV`¦îz–‘ƒÅÝERu¼©3¡l—AýzùNj¹­1æ”ù¶ÒÇø¯#°ÈÖ;P? Ìázà18ýèàPƒF%ïQÕkÅRÁûÑ Šg-sý¯Ð&x×Lцl³Z•åbZ·’útÖ+-å!tê˜þxG4lÍQŠ?þ=|&³óÄÌæ±¦UßkêSL3Ò Î ¯>³LÏlI¯ðh¡¢+ê@¼‚é¿2ôrŠ”L<†¥ÓQ2Ôí7¡‡ åP`åB˜bc8RÜu < ÁÞËqD3 ëmY:ƒH¨ëB²´·|÷Ê?¬¯ ¬÷sýr¹3æ¦ ª)dŠ_Œ—(z€4×5w¿…VI>‘ l›Ôàÿg7Hv„ýÞªã'ÖTW/¸jÁê(÷=«yàR‡­:éÜ€°ÂXztér‚yfRJReÍ[v›ûúFç‘ZT_n¬%£YD\"éAI½KO°œ²hjápkóØ2Ú¿wú£ ÉÄ'yÚΆ®^Û Î<ÛÓI改ZŸ¾“ªº0¼Z•ÔkÊXCßô£3¤Ö·ºyOu÷ô|#½ï–tþ #뮦‘â‚-rhkÝþB/‘x{ }P5ýóÈ%¨M{%»hˆ]Yo©¥ñŸ0]ëYÛïÆÛ­ - ã[8¹Û¬á@‰a_È)NÍ·züß"€ªú-;]³ÔÏþ×fépð˜4éå éVùy9îæJ6âWÖN9bu±:áßcé HÇ ÏøzdQÜ+÷–èƒÖJF·QÔ.«¥!Òm;HDQc¦=HÑ)¤S™-ò¿N£åw¹tYY @³R;0Åõ[׿eÙ ³ØXý/íÜîNrdûn™Òq] rjz›ûØÅ­üz'$‰»ûžÌ:üÛ š–°è‰FÄN™Þ®r2KGa8ç Ó,"yƒì¢ÒÁNËÜÎþÀeFiúuL4³•€Õ%X”á[/YâfÖ’%•Bòvžº ˆ7¼)’\ 6’¢”˜‰¼ÙÎHÃË aÄ¥tä²?è“`~éPsiÞ®àœ76ƒü žJøJ‘MÝÓÅÖà§ZÊ ‚?&‚ÔÔË'ÈÛ+/AçBÑÆ® hP=êëˆÆu QÕ11…sÔ‡çƒL˺U㘎":ß-¼EnA¯YÕYî¹WoÕþÜÔÕ}©¸¿¸œbdÏhhËÅà*.U$×—î™ÍÁ¢ r }ÆaËÊ$LÖIn`5^ph¢ŠÖ1Ut5Ô=`ä7ÙŽ¤š&±9l?:}ä‚d¨¤oKxúË¥Zhij¦À¼×fóÍâp„hÁùEEk.¿,#á‰ìžª*°Miø˜?ÞU@Þ–?±+*9¯j$lä»]Ü]§¹9Ë—a™”8L>›!I`(T^>Ký5™éê Vm=…}òíA0™mY°(sïâà@ «‰Ç.úXù¢sBÛcíâ©U,Àü„7‘Þ_èîðÑšN äyTL¦ÚE¾¨J%»Ãõh¹ÆE[»š€ƒ$uþÍ#ñ‘gO_'ïüµÇŸÄËA±ñZµI×gc5Gþ¥ÇmÏš-²ïãµ"¦yÔtÊ@±æx¤pÓìí×7w©|bÝFbçÀö Üò¾uøöJ‘AEl¥…šÌÌ—ë9Zö(ß÷JóÍŸ'ü|á´!î‚&Kl0¤é÷¤ä£_Šeßb$w6>Ÿs¹~:(È© ´ûÊ­àņ­°]‘Jí`X*…ÍÍ‘´4~¬{¸~ý9“N¿œ$è}ëW¢W—Js":Û5'w¼X²o؇¸øëf@þiñoÕº÷ì•™y]U:†€®cb\¹™¦ËKàñ-ŠƒGîþÂS††e4Ö½¤7lÜk*vHàê&taòbOÏ¡WZK­î4ns_üÝ»cÝQ® aWø èØW†¬Ñ£#½5¦çíj¯,GÂG D\*ÖµKÑH¤.×–öaÂÐYiÉF„˜Á–ä‘fK CŠ*X ªK¾ìˆz d»;…ÛY]å×˼^lHàX•˜ûƒŠ@u¡òÏN,@´*/,@Dzˎy"¦IS[‚húÀteˆ§ž]®Cü!U³wJŸ^'Š5ÌE£ÒÈA2Ò®g —CRµ# ‘\qí"± û°JÊÎá[Ùx™sýRº@²‰Êh#ꀴ(½ý Zn퀉–ÔÑ R÷R(=m3é©ÄØó{ús“q†Gè'Ä!¯Xä“z­‡»¿ ž·Ú{þÏb¸tÆÀSNq,Ó»+pdÛ á/ñÙLÉ^ÎmPŠìFÊ ‡«™é_Å óôƒ“CŽl¯½×µˆ´ü ú\YJóßÙºÚ8'­(ùˆ¤š“ñV—·Jû*šÂî³éGž?[5Â(Û—áã#>0ýý­žÀ?CTPvÈ”’çÕÔ+ÂßkÅKä>høBzÌ ¯ pÏ¢¥ûsÉ´j4»«ZJfÁ ý6ïݦ"§`Ÿ›Ýmò "é &xŒ‚✕RðWFµVé !,©}dèärÓ¡§`Xç¹–`±i~C9HÔpÎÝþ§jL²ÄŽç‹­›8ÍY2_#‚¾@tú0?Ké“uîÉ™S(=,“pì™ öûI³|y²™ìµR’¾·D¤pZÁã ·|fØ`—RÓ¸¬ÝT3Eµ#­±m)’~\l¸#a¼ê%ÔëÜâ¿6ÛÜïTýQŸ‚^êEþyhç»ý©Ú-Ô1‹ƒ™xÒH®|¶¨¢<ë~ã}RP¼IžH‘%R^„²:¸¶ê‹µt«Åñ®·†*‚!ÜF«‡¸îsa÷Õ‹˜½qV àé…0r×ÚäöÅ R’—³*òÏÿ‡apPp/%érߎĮS8]V\”7D¥Ú •9ùô„µ*=EÊÿh>Ô#}šÊp&X©ýÆržæ¾!PÝc{¯dI—J‰€² Ø!h@wo9à­G¤Ö*°wƒFú‹Û˜uç¤w|uù) ‚ŸÐ¸ÏÔ;crÝñkà‰ƒxÒã0¨€üÄó«ØÆg ž—Àn>‡¾½†‹E`Ó=SÝ ë{}Sø>”÷oÐþ=<–PCÁˆVõÿ§¹ù™FøwÇâCQÞxu£Ú¤Á}xPÍaß+HЇ( ºBö‡ûU’‡¦Œ ý^“Ïr;àÁt,ñƱÄÞÜU\ ­±eß—»îm; Õ©xÅòÀFøœ¡Oh)[„d³€B êÈK˜Ä p3ãõ G\_À¸ä¤’ƒî#@ªfDÒ£-/ñ—[þ¯ˆ3Qý†dºb¤óõkÔí–D¸lÞeȳõíÂÄ…ƒÃm“1fÚT#‘îBÂð;]ÑÒ«,ýôŸ Sû÷`9(Üç÷´cÉóÐH¾”ß„¶Íw‹R¤«Ñ™nî0å¯0mÀ äb(V’£$»©rÌ*0DH^3`[˜˜Ê)þO0Pµ4D§|Ô+ÛßÜ«ŒNî!IºqeCSƒ ´›nܬ–Sƒ¶ÝñÊn§]óñiH¤m|û8ôîÆ*Ý6¼Úsɦõ!{—|¦fšr‡òWúéÊ'M§½ÀF&ºâJTÑ/Ç„§®¡hvj£wÜõ¼n ãkð €²»½ô±•V!tÂc+ §'„p2‡°ø]‘àáGfAzªèõŒé–òã=4­RtYú* & £øé*wÐu¶3b>\²d‘ÄMæ~v…l¤üm¹™?_ ¡Œ~ï"<)ð¦Jb¯Ñ»´V†CTAØŸEMA„®¤ˆ°NÓ,ä[ç¯fÐÈûÈáLùõÝ8fÕ¦¢<üݼ•sKª‡yåb‡rÍ[ÄÒ¹¬¾¨»„wY-î¶§þÁ@brð‡ºÍyˆÛ²±Ðû˜ ðú0!zÇâRù¶(†_pÉÊ3üÀ\ú•ð3|eé«­‰?›á°Ÿ&\¯WY|i³GÂè³"œ%W5­¥- OâXûЩÒä©ÚÌØŒIPü:„§?±:q“F•¹Y?h.Z1¡!”ÎY/sS“:€‘ß3l˜:iØ‹dfvŠºõÈy¡ŒÚVÃiœiJHé,O“},¬óø¯69[ŸPàc5j.(J%ÂÜŠ•õ\ÁÉ]NSÚÏJÜÒ‚ ;ë[«íT14ß«FæS}°ÖlãØx ·o6Üf2Àœ%·ä÷ìdHl®½¹jàçÌê¿_NRË¿Kä¼? §ø @à¼h¼ Ìò°S‹Ä‹û3 |À±”? IÜ`49B&¾Ý-–ü±Áhê™7/ ³»ª® xìºñ$¦túÊR…õëC\ÃVt¯ïxüO0 ¥°\ìLµ›€Lï¤Rõ¶hó›~ÈÝ¡K….W³Y]cJ¥ëíïK®Žî,A:õ¶©ÌwA?X`÷ƒ>Ô¿¸ÍÁëHc¬H*d÷ ¹´‡§œªrwo7#¹täjdZµlÒMÛrhg˜&göL9½:°qÈ7Wâ"Ba¯nBCjÔ(Ò;×Poê/õ•}ÿ :[–ó°nÛ©®ákò±µº¥£É‹œåÿ€É¡Eý¾Ÿ2ߣªüP¸ v §? Â{¤PxŽŒIZT]·¶õUÊ÷ƒÀ‰ež\J½Áš³µhE€l;ÖÈs· :T¬ÇðÔú•¯ßt²$p©’ø·G]ÑrˆI† !‚;oJ ‰Cò²t×Ë•HÚMCÎ]p ;R¶ÛU,¾÷÷/ «‚8ãõ’ˆÍÅb¿ÊÙ’#õ¼Ò¡.Ðü‘¼mÌ–.}7˜2Ä=îÙ¨ÒhÄmì`¬QöšÊI\*ýU +âpÚL»‡9w•×!%3©ÌÿI²@ƒ:M‘ûŠË£É|õ½‡i®LÌe>J‚¡Â-E:óóÒ¯'H¶7%·5.‚Ï|}[Ø…dêÑ>àC„ g·º˜ "H75mô¸-’+”€ÅR›Ì‡µ{¥‹2Cta²?C™‹Ì 2ÀÜɡۜt |4‚r¤½0ãú,Nù{󴚟Z÷ ñA $« ¾>ÅS\-}"º2'ÌUÅv¯“r#P‚d³ß€‡¿=á=žb:¦v;nAðW–ïÀ Þ~¢ŸæÓ&v8 ŠqUÀ>]öÕÄ®e‹Ÿh*v¦ÎnÁUphnÓ`äî|ˆ¾¸qᬭúêù%Û¶Šç´Ÿ£õ¢;g>7¹Cüì³þVö \fáâÎÚÀåÍ[cîÀ¢%C’W‡kœËo-/¬>Gú²ïÜ¢!­ëÐ"§î³ÇÈCµ¾“ì?õBÁ(È,½Oà&…~]f½Üæžr„_Ó.dvjú+¸dZÛ©uǸs!ê¼X}ãB*ÇûI4;»°¾ž”ª”=’+¨­W±¸Õƒ-®6=o몱š%óù¿c‚‚²9Á!%|6ã•]dÆ@ŠG¤õÂ¸Ç·Ë *y€…„Œ34þDÐ!(ùÂu=SzF¼Ëÿ뇌lËäöb ?½5%c*¶`í„’Í}ÍË­Æèü̸æJU¡ i¡Qª ÈÃ@2ëΰV GlF˶#ûË’«"‚øí­BtáÑt†@p=‹4-1:«ò̽®f·bÎü|¨ëí8h—•µfàÌ5fû´V&ÊH£µRbû «¦¬>*ÌàfnÇÆ(ÈßðQ S¦²ˆƒ dLæmo¿4¥3# ¢Ž¢3M(üXõí}[A¦ªŠNuB1°óòc ^Êz©.TÐôfwûà>ý|ã ¯ìAÕxÖ ôõˆC™½ïÏÓ.xÅ.KPVŸð„Æ6û¸hù†U=áWÎõ ¦)lÿÄaÒ¬dƒ4³1Â}Šœ–¡F!þ;Wõ¹ýŠàe9¤•¦RæxY>A$g<ŒB†Scqª ²®,ˆTY†Ú/“Þé€^k`˜sÿ¼ˆ@eè§$5¦‰àîß0XžL¤Å•ÚÏåøÛN4ݱÜÇUzï0bCžÅ £TîWäD°çÄèÔM%Y„‡ßyÍ­§ÔdÑœÒ+&Ç[ÖÉcB•ÃrÉ=ÔuæÛ>#eÇ&] ¢Äe¨P\‚aª‘\£ú{·ÕW°'@c­û´ˆ"éjX¯dÁ„D'S¯—Á)䘬J8V®¾˜Ôh*­¢^ö«Ú›^*]µSøîË–ÔbÿÖÆ%LI_òJf[a³*•Ìä›Ìø ®¢»Ní-ØQöˆË=(CõwŠö4d듯~ˆXM$ÝÞcpqéÎm·ü G$•—˜"#8…-|}[PÈœñTIGÔAÿÄD¬H ,Qêª7n@xîÈQwaÒh§ç’¹Ýãûæ·Š¿s¦œÆb©íåšzê/š%¹}÷ñ98³ÅxFY Ô®vo”5ÏAd$æJǦÿ¹+|Ì3RÄBp®uTvÀí°¾DÞ}lëi£¤Ä;Å„ÔÍ!@É8DýšCƒP'd¬ÓÒl$LÇÁ½1HûµàbP©Ëwu àVAg~²S¿¢PÉÐéGó¾Ä}"µM oZ…–;¡Ún¬ óý7ªŽ,ßYµåU+ðcùB­šÓ7È3=“3óë;L.ŒŠ[9Ïߦ‰u›;º´ÕµüÂß³fò`»Û+æpçµÎÕ8wJln³µTñs1óK+R~g›;hwkÖFA7%¢yü…zíÕ/“ƒEõèVÞ)*…–¿ê›ÜQ ¹&øGÚ6uÜ tä¨À›=3ã52ÈêD¾…5ëáMÇZ¬«¤Æçèxzú½;ŒÊ5Åc›Ï#Ëô£¿EU@B6'~­cCIíô×ȇc%De{Û|LŽýB5rà’Æà.À>`âîFÜ•;eøq°ÐøØ¥éVúÄÆi‰ÀÁ·!n>ÒxESÝéØ/‘C“5;]–ñÍÚÆãËÇ‘IŽkÐCöoï`!¹8æïȵš íg7©?&Î^ü#­wÈ;Ü¢CY·´Ï$žKOlƒæ'n楱>Ëm…„Ž)œÏ ƒ ìʵÞÕÇÚÔõEÑO(ˆÁèaHœ4¬ñî©tÅYE”ˆ1?í7€&Ï›€ÓR6Ln~PÉøÌZËÁõÈv6³d8Óècïá²Á7 ÁJ’ˆÐ2-eå3+bÿÎH”Ej4y%3좡`°£ÖP èȉŸ ’¾·âNZßÏ胼•Ää‡r½ øèiÉ üë˜2Á:ðÉ¥X™p-ôÞ7pŸWÛrÒóÙÅÓG¶uÎ+Y uÑnµŒÒ30‘O°R{7& ­á¤ÊÛÇjõïò3U6’nÑßœyõ@šÙjkM LQà•Ü5æ¦jêxê]ÎR<¾é”i•Õ”ÉCÝ­ñ“¡Q$=˜äªÇéÀÚãGn޳[¼nòhEsÀèóñ‚l!üØ›Œm?¢i* ÅÀû©³®ß!Ñׯ‡“¦›_E÷ôI¾xq)‚ßÌðŸïo/uӕ׸—I…‡Þ$©õqD™‰½—ÍCé1 ¶iR3Á·M¿M’“"3å’ÕÚ¦ (‘u{_Èu¤ó†Ç Ÿ˜aàG ±\ÜkùÿˆY «Ø5¶0:.£3½ÕèFn̺̳F¦á&IH_$Ò»GX¬ÐÑ>±›ÅzÙÕé\^V Ý·f/Œ&Jú–>„þ†×ʰªƒ`²ôoãÞ3P»ò‘þ™)š˜,Ñ¡ø@tÏyKÓß9h«ØÑZ-K`AÜÊXÑE!Nw‰ ujèt:Ĉ¤ú43 (8¿=lb¬&rÉWröH™mãwFeSƒ6çɈZ‘¡Œ“JÀ˜¤U²ø­ædE ÔVK3•4Üš¬S3Ñä©©úCpP~0à…€³3M_Q¡,³¡¤&–[jÑm]Ò¤Ê~*³QïÏ»î™]¦BKÎÉîhø¡í´<€W`*™p8®|°f¿Stµ¶ F aºžÛ_î/YÙåÈZ‡ï¹ßí²Àظ)ÎçñáÈ ·íZ½¿e¨4¥­+Ý;2¿çÇ(QžãÙLÉÏÀŽå_<ëÉ+Ï^‘:I ¥&2j0S '8ÈxÛ)²Y{±΄» OmV5cÌw¨oʱ ÂÓMAH¬ÓÇ•¤ùåcn­Ë± Ö¢7[•é¿W^Ú90AÂ{íH†vóLCyo” ¡ÅªTÑÄR^gŠ­—è§è„wŸusM€mÁšòý™¨ãvz¢ð‡g‰Sm UFû‚s‹ª¥@ãbsöÃzØ\Ú¥ h²¹Ê¡Æ­ð\¦÷’apb©o#«øía‹ž »Aï¤0+®^ö¿¸Jk!0ƒ“„uÌf&Ëw\ÙW*ßDIdF¾ÁHˆõ—g“,ð£Û“>¨^ú?…ÍÍ¡}(­íQ´d‘‹ï¬ ÙZ,BeÙÒ”tGÑóÈ‚T;t9ÚÄ`Èm½ÏY‰sI5Æ ë1a ‹ù&àš~;æ‰{srÚCµyD¨¾”£ExT³8NÌÒº]áQRÇOâ,@5á=ÈÚ£„ƒ’kH/ Ç4 kàë¦t-…\ÚoJf蘒ãåQead~ÍÏ^˜Ñj[D¢êËŸúÉÙs¦òaY PÅÞ7±Œ€S.8|ó«»6y¶€ í¸ÉÅ´îrŸÖ˜ƒð pÒáÃÃJç@pˆò ¤BUc2·%{ý¯˜r¥ˆ7N|£®ù‰‰7—¼S¹´þž¢ hË&Â:†ÚÙ}Û É;p@ùûÖ Kƒ'Ãæ@?³y¡¢(üjùè…já[+pÿ,SŽ& ©\—™‚kŠé K¾åAš0Úa>¡Ø4¼ãB“WâWˆMîÆ‰NK±í Ÿå&¸Ü`»ÞÂ)<ô?­óÞmªAyÀ§p féˆH>˜I n £qˆ>73Ð~þC|0«¥ˆÙÞð[°z!Ók©UÜY¯_ Iaê|ŸÕÐ/8Òâ\ý‡ sDÑÀÿª3„ßÊ\Áî)æ›÷ýø4Ñ/•ò0ø6 9‚a+Ôàütß!EŒMóW¥†£Ž½ì"fnø¯õˆõœX€täÀ3ޤG TUB7.SÛÔkºH®L¥1o"†38ªöw‡D:L®™ ¸È¬0Š·v÷΢нhZª·‰ê˜´Ö±òÿååSUk[xO)3æš.©‘¬2~ðÀ_gÔÆW"´„_Ö虣%«¤iÛ…HÂ%™JáŒâ¼ÄØ‘gqNZ˧ ö=u¸¢¹ÀpG ‚Á2x¨@áM¤ñä„*Ïí3‰KP`ñÿ¡n@cÊx Ëo¬Ñ´Ð°¢ÚA èaÓ´,·åºÒ$ßéFhΊ?²ì~iìÏYY^=û\±Õ”g‹¼C)º²$3¿1Á½¯´@ –qG.)©6;…;káÝÅ8`¹"$X•£ÙÊ5Ê?7œÕ©Cú)d†Hå0öæ!³»*°3”™Øiþ¬z'KÕê{CÊ~Œ°þ™*L]ÙÌÂÿRlU2'¸`@ä1#Žqþy>\\ÙoÔ¥–ôuîø—¤‹}#jÈܯ1€ÇeEÞ•næ¬UøëÖ~꽓 è³.mÆ?kÓ€Ç7vUõ{oµ%Õ´p© ‘nˆô›äaÈV€I–#1’ô@ŸW þCE¼øØ©kD,xý¼U<¤µ¶h­£æ™,Ÿ +Üép[7ŸéÞ_ÈPòºp©·‚ëBËLžÝD%ø{'GrÛÙÂ96áW¶Æ¨ÂÆ~QI¬ ³ú¼ar?±2 éºwh…¸¨ ¢Ü“íw½rºÅ¡·ô’Ó‹àÞé)jPç q]àP„ÁõÌc·iû¶7–åù1Mtç¨Ë®6‰§!K~ˉaùF1dÑè(;âãï§Rƒn°ëêØgGÜÜV1ñb`¤8¢Ð—²”&ÜÒ*Û=FŽî9©øŒŽpTß+Ž¡«fT¾mV6¦D>,vµmZ­Tºœx¼É ?üC"¸)¨L¥ÜÎ>øó•†(Q¾Ëßèû™ –áŒcäîD:Ži«7O‚ÄxãH¥×EŠ8fíÒVŒqë…šŸŒåB'&éæ`©Ñˆ· R3J`p\}“žÅ«kE½ü›­è"€@ˆ ù¹¤°ŒËbÕT¢žõ1áçÊ.×Ç;…cWü0#=Vv޼dâ÷)ó‘É¢cnOÜ>CÕ¿PæÂ ¬QB½ÆƒŠfÌ8R¶/!7gœ›y‡wRѧ_ ¿ÍùH:ûÐsbpÏïanc•*Ô-Í çÑ÷m2j¶<‘ì¥Å¿KÖ#Ôð¿Ñ{n˜”¥eßš„­ÜW…ï''Æ$λ‚1Ìv{=@²'/P%õ¤·÷v,ÝAI¹ÎëSíRüÑEjG£Ûü›lwżÚD¦Ú?V¯f8s IÅÚÆl±Ù5ñ»u4î—"›W>¥§ ]²O;?¤“­ÃG¢Ò$Éâ "¿Íìåxê£K2èå³”¬ú®øDªRq=ZaÄSRÒ £¢ z”ÇÅvÃ<éG#¯§Ø[8ƒ-Ç,pwt+‰ÇvÔÛ;_J”­†—j’§ ¾.µ*±þ‘÷Â+çfg)‚G’gÈä™]’/b„ôÞ-Ü“Aè‘ÓúwŸsK›4šÿ’v·‰¥F);Ïßðæ\_fíškI$rDZñ)=ÜRf˜ˆjäõEþ ?7ñ'‘7 õ¡#œôÐÑ×7)¬„Ø$…<©,?¿p<€V$CsDbÍèü4˜£¥#i[¨°›Ÿ(Þ›çñqÕz{m²äÔ$’ærÝ¿mu\³úãm¨å‚x¤QṆåSjº;·ÁÔsG[®Ý¶ žc9’ÉõŸhéȺ>_:ˆÎ5Ý…¶å€Òã4BàÚ€I`7¼<ÈËì½ÉF™e{¥UTsJ”ÐÓ¾ŒÉJZ`Ì©+UÒÝÔ|ˆ¶°¯H@„Öú¶^â¦äéù?ùkòï"éŸj 1Ùõ¸t4éå#¼@=¨zt° h'ònß/ÇÞ“¯žwå?®+Œð8ÍÌòæÚ¶w¢4“gŒBâ<î} qà5܈hJVò$Ämô‡XÞ8¸¬éãÅ´>tL8µ3dØ» Ú:to}ÿ*PÌ#ý•ÖÏ(,ýr `,l¼¦R,;[õ5_$‡ÒkwÌi¤ •Úˆì76¨åÜ#Q=ªÃrÖ*××gæZÒW &Q”Àçw0a<5öÒáÝÓ¾¿¤¬Lü­©@‰@'—YMJÕ:ÿ«Z3ÔêS ,B¹›ƒ¹RB -ÃìsÖPzyxò»K¿QV]Bdö-ð’ÝñôêF]©]G%¹û®C’å± µ•¶ÞCŠ™’‚Ö¤~7SS!¬¯´NÖI+Ì?»ÙÞî¹y|VúTÂgÂ1¥×®åàr!kWþ °ž¥o(XÔjQê?Êçzjn—`»Í£FÑß½Üc¿µÂì‚Nòˆg‡â1ÇÝ× y•5à‡‘ìPy<_Ÿ%×eÈx_ø>ЈÉ)dtýÇL{¡N“é®jζ8[9½1‡T“p† œ R/‹»ÖA ÿ :…‡ðëÑœø6ë 76ØØãvÃb\¿)*æVŽƒíYjÉ[µÎ§VH·o'õêÝøƒZiªžé‡B8•†áo7<)KJ Cg˜Q³¦N6æ¥å]ô´FìM99Cãv¯"`m˜V(q3Šú•D’º‹»óšŠ­g¾–“u¸¶…‘œ¦3më¹$.€KÇ×òNSo{VáïìJ†&Ùh$Sä|Ò9.­EzýBG¯˜)õ°š`äýâJŸ:½sã/Ýp=ÀSv²Ù\bÒÂ2v`ºÌï1!®&Ô­s§oUðT>z\æü«#ã¼gG½A,gnµ=žà þ"ÔøYG^ƒ]²¶”úÀ@”‚ŸÏæjÄŠó³t~Œƒ¯â`»Ì/Ï M“F!DyµAdn&Å;ŒXÇ\œÓU($ Bß±Þ$•—šßbžÐ^«¡`ƒ[é½Ñ ,Ë•0YÉj¶!Ç(t\_2b¡´vp'“, Y-9)´€µ?îuÓrøÙôŽóWòw~Éj*jb°å]Pö`8ZÛÇåއ5¿ç[ƒ…Û¬X—ÁŠñGhËû ¸6i~â.ŠóU A‹àö'¬¤'O*áAÃæ=þ±fŽ‚þO{JWÍd‘Ì1NÊ «jìÌ\"ZkI5~·Cw*NŸu þv¡½RZ8k”溻¼iGp,p‚é0í-ÒÛkºhj@['¾±5©¸!³&›5Ãðw§Ú‚aRæ¥TýZè·‚0V cÐv™'òg{`}¯j@”r¸=®Ò£rk„Çs³®RóÐüØ8×x!U°5R(o;|ÝÐ)¾wù‰86jLˆ-v•/0ƒ$x¸ÛÝÙ‹Šém°áH¤n‰½às6Aƒíy*0Víq,Ü#u¤U²òÌ$5ÓËïrÒ>à0èj ˆæmÂi Sš° çh¨!4­ÏDÍÊYŠçN†e0§1€=ôáݼ|úéÚt´”Aˆ+Èý1Á$±<ì AF¡âÅ&c•¯©ñ(——öydÒø«ñä¢îe›-PĨõ,q&ÿ‡XŽû–I1•Íü=ĵí–Â}Û ó×Ò!Ëtú‚jb>¹u¥‚>¦ÕA‡u«<”̱1»Î{ÚèúÂh@Mk{Û¤QS¡· ŽQ~ ´×³-nžÙ´É77´U¢™,|Šˆñˆé³bA>l.…“¹"-B æ rÇLL½¥ø/tPDúWo´Û·‘ä6§4ĉa 2Žÿ§_Ól®'½«†+pûtxËwY±µ š7û{²±í”ì­óƵYEœ"Þ¾ÕDý\žVoà"ÐØÉšVÎ9° x4¼Èn˜Ü¼<;×ö«[a¡¦ä_ Í;«ˆSµú \¬ÒRB?^ƒÙ°Õ."Éòþ}É]ílëAÜÑÛf-^)¬å<ÛÛéG°Üž1ƒú ¯~ç+—÷Rï>]TÁ°Ì b½@N\Àݽ¯1=Xøõ葾¨ÞÖýݵÕè O~*¸× $¼Œ üTTWÙ&'D2E~ilaùg–àºA×´$€sèW‚)ØW»` Ô<RvT•Ç´±Ì‰Ê™Iz•™D€6núO1õï*ÝËŽíáíw¡uÌêàBfòwñ%¦Ý~UÒæY±ïqq÷7ѹ¿T{ˆ_B²kM¯m$‚0fôÄИÿ'gã¸H¦o(ù¢ÔõŒ#¾>Ì€íHlÀ’¦¿ymçhr´¡PuJØš0*£µ©Ã1 иÏ*}7Ä”ŽŒÈbtª—  ~ wÆR9Ûé˜ Ð9S· ³Íiygm=l· ŸÞ „š©„Ñj=ÆRã篩žJÓrÙ‡}¬¢GàE#ãí“‘ü¦ï”“I·À~—žüûZ¢5¢Óq{Û£cÕ‘¶5 õÊ|'¦7H–^ TÆ™`Í$ªø»Ð c™\ÌzYPçR±.fµ0z Áxî¼ʆ$d£Ø3™ÄÓ)M%ƒðÎo‹®S]œ!Ía L÷t,ýå R±*³(#•Ó£±zl7”c†Y»e²~#Šõý¿¸"ÖO€61ñ¡« ƒƒt³8Î9#ÊŸ[®?Á|íˆ9™¡ºÂ/û0¨_$ädÐFÞ5{lˆ‰DDÎø¬Æ­t~Ž¿]~–_õiº«d=Cß;›£J‡8'õñú}º©®?¸9‚Áã–)×—k—Á)1vA µRÃ'·)Ìðx„fÆU€ð0BÅGêS®»mnU¹¹ñ;˜“*$‡˜½&_â|£°Ø1¬2ƒž5éäÙF‰#w5d#Ó‹ã»Û°º}‰„P6bnÌovµ/—Ä^eº'ì®øó C„éƒxØ9én.bæÞ±zA-=øÁ:ù¶ëEÕ‹-³+þ¦ÇOH 7™ÂœðÎ M0vòÜR÷ïP±2 ¹JX¶”<Í›1,ØWk½þ¹€çš1wÁm5Ÿõ>þµp8u&„žå×}ÀyN½øùP·Å ÓÙhÿ;¢ö@Áèºì5ÌP¦eQö=´ÑA0M"Ô }ÓhÚp.*;%–Üò¸ëš|ùÇ–¾V ޽ôÕW)Ò‘õ@x€ûŽÃµæ8²#' ªiŒ‰/Q@a*SgêìÚ×ýy üɼu ¤©_•™P‘èŽ+ÉÓå›gžx^\‡:„ôˆ`9œt,³EÒikj;AgÄ tƒMkPg<9ªï÷-&š ô–œ\óFNv*ÆÀ¿RÞ•O¢³mN# Ï&º-™ÎWôNÑþB#ç¥ò%qq F—¾Ù],›Þyt­ÿŠ5?~9pý¿(¾Ûšµ÷ÏÑ o ÂÁÄÝrBY J,;8Ç£žÓ[Wå Àrì:¢ôd–‹:6/÷añÆ,‚E»¿íú‹`¹ˆ»y¬ŸPeë#¸›+³(è Î¿UeŠÝ&.W+œNi{Þµ2õpð?êMstè°AÇbpº˜¸·ÞûúnÜv%ptØøjd0Ž÷Š®À$¡‡0æ”{&|6n üßÙ2ìFxvm´Ú^ £¢hUå}™mÈVbMyÀ>´á ‰8¯?¡CbEœóaq[ &­ž°G†@ä6ÎäÃùÎó/3¢±vMíŽ .Â" FSæ@!Beî¢#ìlŽóóÕö|éQYU0 ÃP꿹d°_aa¿±7“k$P‹"†ÍÝ'ã.äC‡Ö¢íþ"sbo0Öl4œÛ%öo³hްv£ÚÀÜvC|ˆwEr*ðþ©‰ ·aBƲYp¬„ŒJ„”‚íò¿h üá`_ÏêÈî좛8ˆ$k@)ëgÌòÆÍ“:@Ù‹·¾Â¶Š\/ïþ‡d:b[0cò•ü¼|¦ª×ü"($žËÔ]™ýÓõ™kl”aÚ5õ)/vxý+:¦„£Qö×Ù ¢œ.ýŽ„KVU4°¢¨®ÐŠlt‡ —9hïçhy›Çv5\pÀ᪼ÖA@HçnôYMË·< £2é/F‰hºµb8§²É\_ô›¯C؇2H(§U†-þ¿å÷„Çr{áuf©ºä¡iÖ¨1K—ÄS¾§ï¶d 1zCÑOÜ¥È Œ«ä[{zÓÜK÷&Wð#ä|&àwãå!øÙ›£è°'«^'‘Ä~ëááõ¼\U³>×öÌÁ¹°Äê¬õ/Ú 6¥àks]c Q˜ÛM<‡yÓ†´1Úâð„Ø <B 5QCÊMáaæ}v=ºž‡äcgù*­ŒÅª¤‡ús0 ð„–¼Œ‡ÅîTòvK„Ab.iSÜi(İ!†sk£p:ÙÖ¬ØÊ9¯°;Þz ì{Y˜« þ6…áO¾ÒÆÊ¿c$ï¥î¤^ÊßòKüFå‚þònÇy Î5m¼ñrPï3ü=ÆTOe§àÛ‚(¶ í’J5ð[7 £B»ƒ¤Mï7päŸoø£PL"¶M?€Êgi$Hé2p&›”nöªœjˆ–Úbê÷(U ®lhOÑ0w¡Ã© Ù²ÓõºŸ‚Ιbâ²×´Jw ÂŽ®øýœB>×!4/M­4³!œGà—MÞ¨\nÍïÁ û1†‚qtçµ/f³ V(ñ[Æ¥mÈB®ìÛø)T8ø¬0¯"¹]Y¡#—Ê‚.ZGŽÎás­YÏ  y”*6RdŠ2^6[ô~ëó •E€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/_ebi____.pfb0000664000175000017500000011321713607302650022500 0ustar rptlabrptlab00000000000000€o%!PS-AdobeFont-1.0: TimesNewRomanPS-BoldItalicMT 001.002 %%CreationDate: Wed Feb 3 18:02:12 1999 %%VMusage: 34422 41358 %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype %% Corporation. All Rights Reserved. %% Times New Roman is a trademark of the Monotype Corporation, registered in the %% US Patent and Trademark Office and may be registered in certain other %% jurisdictions. 11 dict begin /FontInfo 10 dict dup begin /version (001.002) readonly def /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Times New Roman PS Bold Italic) readonly def /FamilyName (Times New Roman PS) readonly def /Weight (Bold) readonly def /isFixedPitch false def /ItalicAngle -17 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesNewRomanPS-BoldItalicMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44338 def /FontBBox{-174 -250 1045 869}readonly def currentdict end currentfile eexec €øŽð›x»$ô½XWÀo½ä Ö"Í“ŠmRÙîÇ-Ý;™¹\¬ô¡¢ïgqiôRЊRÇo†û¤©ö2·B‰vÀ²ˆªÔà§ñ~Ë!í§vÂÙ0+ØI¤?o0# ÇjÓÿ£ñÒÅèêˆä=W:Û*¢5e¦Qb]¼#ÏC.ˆÄ“g>±¾ îÆ«Ðn<¯‘‡ž“’B±5$nÅ‹6ŒÚµ8hÝW¼0²¯Ö—CyX^dTÈ‚àŒP (g(ÚOåÊ”  QQx˜Áj­Rdò°uSW™Óÿ#½ÏBѽíS÷0ãýÙ¶›ê„%58×¼+k~åz A¾±ÕªÏÑ*2š,’¬M·‹ÊÏ÷Lö}nuó×ð~úµ- vëVØBb|9‰n°3õ&ŒFHET¥/™p \ŽgHçÑ)‘ât÷G½ßÕò÷"‡ð½;+v°øÚP"p#Rèß·vy›¥DˆéªƒÛ³š˜ãkõVÀgHgÊ&^@J‘ôq˜¾ Çh"9j†7Zo³›”!‘Û‹6‹VÜ:»GìPa³àÑãÞþÌ ˆIŠÆ Þ¦@ö¥±h d6+Y£~B:w2©ÎiòHõ0×£ìñJ”ÅýÖ@&¨Àÿû(NAÚŠƒè!•ju{)kÏ✢¯¤½!ßõ b专¬73÷¯Rj¿V'—$Q2MÅg~¥˜ í$T ÂÂÙÃPz¾À3G/ãáûPE핳êgÀhÂV;IyöNòNd`ÛUWðaÃOè†X (C;x°?‰MÆÓ¤=—Úœ÷v±“šÑÏÑPla{…ÉåÕ ©‹ŸS9‚‰q¿”0¾/ ¬™¯ö€ÁK¾_m“‚l{´‰ÙùíÃirkN"<*](=Åüˆ_å[ܦ{]³Ì zðÍw ïÊÓ>ðXf\¬÷ÕÜGéfXí|=#sÀÔ,?T‰ó6ÃlzAÂý T31Á?´/ºëœÅ¬6^N˜L<ÃPr“½ÛhõƒVÐ<_G’Ö9ˆ=› ì9ƒ×ºÍçm9>¯ª~VRÊ;.J¾µˆ!®£óȘ>TS-­ Dsô˜²ulJæÁbo¯xûîù¢/Å…¸úGíö u@ƒšyày¥6*ÌDÏÊÀ™do÷{繇bdZìœP öE>Uxª0ª_]Ê y5‹$©Ê¥êlhÍWÁ°Á¢iÝŒ&}eBå:´®"âêr'þÕ`³›gFä¸x?­aw™¡#©LKþiô=Ö¶+‹Â“§ÀAÐÇÿú¼tW¡¹'ukÑ2CCóœµ%¼ Ý­-ú ëR„ž‘Ž'0ÅXE¶Ì[z·9Mçlü±eºö¨Ä<Ù§4;|pI×~â‡!_»>eIåÁ£‚ú LWñ^öJë$m<ëBþ-êiß‚;·©Xßj‹?ï6Ž1,Ø¡éeŒKÁè~Ý&nš°yUËûí¬…èGuîŸ7W£a=cÚ'pœ0—…/+vQ¼ÿ[…´5¨pÍ$²*šýh]aî¸ýÇÁAà¢È‘ÑË®Ý]o±hð[‚zö›)²ÓÆóŒ`)9"(~l|“ÃXt×g*ä6©,ÚäÁôPÒþ~¨w¶™KV6“÷F Ìèµ{—6lf‹:‰()r¤Ù‡FÃ%¿Bx—ÌDÓ'IL@p·$‰©Êãv"rUøbÖ[ld{Iã áʪ+ˆo¦+îõ?ð¾ü€_T9äú(+/ ÿù·&”óÆv_@Ñ “¬ýõÕs¶±¹i<¼ýâ*”tO^æ.ô"£Í1øYÁužðÂVø™ñO«"£žÿžòç<úÅóýBb¥cßË<}瞣îk ª;ÁEdÈ2ô\'‚åý“Ï—ÕëÆ/+z‰FÿÔ Á+x ¸píY ^©Šzþì«(õ D¼¥M#^²{oµŸ¢p‹^ÎìÖ ¡¼%AUŽXd.%@ë­äóÿµ`9—P”íÆ¸˜ ™Z‘A.…nÐg4y"JYY P¹ëÑü¦C.Çëîí3±’ÊZ.ÉÁö Ýßý ¯„®¨Â'4Ë>¥ )DŸç6’týR'Oê,+ÆRí W‹wOSäd$»ôÖ•Ê—}¿fùßDÛšõP»þ½ÈÏ_Ù¶G&¨àÖ:w]Íj`¹¥½C‚øh› “¸†ÖÇé…«‘÷iŸà‘DEÓ)a¥'s½ó¾ýsI¥˜ÛIøåYüá)¸qí,¯}ÛŸ©£¹€ÌüÎ4êSÚöÈlèß[v%—7-w­e%l3Lz\_€ÃÛ߾;ÇÛo~Ÿé}Џ£C]•TÁ(BOè‚Iع*Û¹ý³ŒçNå‹Ú`-mÇúŽ$}ÈèëIˆ¹Í£=TMÐã„Ì3‚SÖg (È«½¨*¯¨§<7ô¼ŽCU=€’:9Ãê4¥w|m3(Mu^ž À¨ $m!‚÷Õ2@ŒkìYÆHÑ÷}‡L£n•@r‘à NR±~i‘÷ãuâÓ¸¡XÈ{jk8¬æOhF_ æ½ìÓõªØ‹Æy6šbs#ŽÆ›n¼„T¹*æé{û•%0¯Šs¯–&Ž€¦ï·ÎíL!AŠ3™eCfn.çhX”‘¡îp¯¥U¿ÿaåÂoÀDþ`Â+Tòr2™ã¾g?Õ¡²Þ¶c_{ÂÕÆæÁUžä†‹>ã=ØûAo “œ{øb‡#D;UÏ(öa®‚Û~LjÄâÖŽé#£[žbÁz5 ZWds+ßÝø@{Ä´µH ãâÖ@ÁqÖùß"LBïˆGí.}Eþ«´×W`—ŠàÕÎDÏ€ìÅ „2¾¥ù}1 ýä‹ùçbsµ¶Â@V `h̯ík2ÓÁ®DOW¹Äµ•–ÕÏf›H g‡sª„8Dœržßÿ?ѶWô©Âè|t—DÆ=¼ÙÈb+…-lµ±šð ápð0Œ¡™ ßWL‹jÆïTEYâ hñbN¬•{òW$”¦/ßJ/Éû §JîÛìøe myzt&•BÝ—¸x?CìÛÌm¨*kú°é-z30QGê ø ™é2¸÷¬ÈýWTek ç*n9·á³ÌŠ›Ìq°ÊÑåFJÓ_Ñ™xé÷ÝN^Þ5ŸJzDÆ:œ´bŠ@ÿB¤ÍA{Ϥ*ÐalŸ'.N5’à³uQÓ´RT¡ZÈ1C({i"‡§ ³]꺿}ßjJY|t¢2½$'EßeëßÝrád²™˜£úg$_˜øhËÌ {Ñ}¯–«[D€,`qMÓOµAi’f$²¼x-yÈP<­eHÐò÷‚þDÁ îȽr·n ÜÇõ!þÈAô+ؤzɧ|’òà1ÉÛ$âIÑ·+da¨öl±ƒà§—à￟ί_It½‹šÆÑ2+Û°™i°ù8I­=GRs°oüœ ÂÇq¢³ Ò5¬0m¦¥…C÷™)fB“CEõ‹Éa:Ûåk7‘¡Jô¥ŠC„ùúméÃc΃Œ^ý¦_ªY“)n •ßÂI¹ì¦|55 S@?œýå;AäW!œâöÀüìmê©AÀ¹N° ·zd€érAÉ+µ_„ <° w ï†Ó™+‹¡ÛEP#TIZ¬“ ·kÐ þD¸«þŠÒÎ ú«l¯é§÷àÈ$Í ï©NŒT˜= ±[¢oÚ :ñ ³áðK¢ÈBQ¢ëóq'çç;S­!åÙ\“k&æ ží †‡¸V’Œ$Ñ£z[ ¤[˜°êtâËÿSkÑŽ5AÛg½ÿ}~NºsæÃåÆÎ\¶ü–¢íŸÛ>õÆä×/O—ua^¹£Fꇼò¸¸¦î™‚VWºÑ+­^”lKîYžIÎ÷™˜Æ÷yÂg_‚¹‚c*ÆØ–ÿÜó¥ êDXúËÇ·;ÁS©·÷ÑbsOG¨»´—iG“ÝcyfYEQ²žJw“¿lª·/(l¤ö²€ÙÇߥ!Ù^*2Êæ[³Ö‰­¦yŒï ž‡Åìá¼]쟤Qõã:û¤­y\pq¦ äé(PEtiuéê#«ç h)¨¬¤Ô—çW¬ Q3ôT1mܯ˜êÅèúÊ ‘zbSÐ˶VƒÁIGŒZ‹lQkNa´ƒ$[[©% ܶÁã~²VdyŒøß‰UR– `¹Â²÷ú’غ'8IûP;×÷¹Ì—Â#}~F†Ig˜‚}6G—v»4”×/>4ö]ækëS”Ÿœ»·û7ƒþ:-“¥dR³žÚ~þZƒ,ÞI–Ä^0×rŠ ¶ä$¾£ŠAes…K„x¤eË þˆxw“ˆc’1Žñ&Öù.Â໾ú!4¢˜ôú®ÎÇ(^ýËFx…Äàeê¾"”Û€6ÿ®s•õ.#C´*]OÝG˼`_  ^61Ž¢ÁÂ]Ž4•bê·"ËíÊ‘›÷k¡w….>}ÓÌì>£µübk±9 $<¥†;‚O¤Ð¸«.wäײpXtú©ñ zŠŒRóð½ó6Ôxš§œûØ,:Òÿ3šô8 iQŠŒu~vƒ‘áý·`ëä$d܇ÆÏòpbrsZx(r7ü•‹9äJÀ´£YE§‡;Ñ;D‹¶bEå¾;´žncê˜ÿb!¯§WŽðÜBuzø .åœÞ>ܓи¯¾ýQïø›¿bú-:JM$¾ô|#vË:ö7ª{àämi©åF0<ÒAX*}'%1~VÇ«"å ?½x)KvÞ=›œ(_rµ CdÍqGC—AÏ ]).\)Ÿ'Ë»‡‰xÑ€”U΢àÜ=È+=‘œ€ÑÄ%Þ>g뤽òÁjÛ±nÔÈË2Ì»¶ÁÓ#cí:P2n‰EGùj/,CÙ9ÔÁb5|W§ELþ[²cùd 19 [ð~¢Ú;p¨`(|ÉÊÏéÀ¯ìZG zTqÎW¯]GéÔð2i³,vbùçô£y‡‰[ƒ,êNù‚|å辸 ž–]k§T!N}ÎçJ@±ËŒ”õ7yÇ1LÄÓ†ì7fµ~±–N²ñ~¤Ž&UNô4tÌȧf䜞Õ*j‹nXÃúys²'ApæîcÎÙúqA•éÀU ã¾ìÌN¬]oU²ÝŠ?+kÞ¨ s/¢¶ÉøI>ù³ÄäùF3ã´…ä< !òV¥ÒŒÀ4Ë·ÝøˆÎ)W4÷ó7x0ÕoÅiÈI÷ËëuãCÆ5ÁHcùj\[¹¼Ôw!‡_M¢¹ç‡ä«Èƒ é¹ÍgÙ3·{T›c"Ï/]nÌ«FìBL§öG&·2é½Î×kŒ†lªô T& T¡bCF4؎–4( ‡ÈNçÓH§.aS7òÚ÷Á£k žð‘×)€x|Πò'LÉì‚QGŠ@.è¿gY™~·Ë›Gá#+tP ÒL.’õ=µ-ià »£”Óø˜mw2F«…­Å1eA>Ü b÷à5V$ÙìIklà›ò±)YÌô›D¡Qü½2 ¿ÒÊì›Hå.H—b߯nSæï÷v`^þ} èw:¾8Ø“s 7Ué7˜ Ûú¨xœ+±{¨¯³³Ã¼` f)Þ­ÚÌñÎîcPõ+Zü×ø¤aÓC5³iÓd ƒAÇÚ›ßô”üop»dî÷®Ô9Œ¿En * PPÿ“&Ó }]èWy- ªuϲAv»×y„õvêïŒd“Û2ûna帋  ê\sƒ†Yɗ娓ìÚ Ü‘Ó¼jÿ*>”·ÅQ,ôŠ_ýPgp>?Z„ µí¯þ°å[.G¿´ö1ïÓµ/ÑÍ×uÌXY9׳üaîWUa°×=Ççz–ÅÎGªŸæ ¨G5±þú‰`IëP{,"i»..§ƒH-' ÿ¾…\rƒ¼]GGqü’%M›œÒ«D—3Dz²׌ŒD[Žï®hÔ¿>͸RŠÅ(­÷Kc/ʶåt’…h9j¹ü»ÐìCB#€Ü$P³:¸’l P‚ùÊÓ" ÃëÏ@E^€@Ò ˜ªºOKYÿ‡,}ˆD…|½ÿpuâAQ™‘B‘fÌh–àÜ–6%ÝŒ-,¶ô‰³}UªˆT­&Ép™9 ílmOÀnW¼éßICr9ÓÜ=Èß"É)ikýz8ˆ‹Ñ0ÄÚ³£îiÓGÔŠVhò å %´C zåõ¶WÅ?hÖòPû²uï¹ú¦%Tʲ¢Ük  •<j#Ô2t?‘5­À%¼ P6uØþøurMÛÕòݪ¾È»„0?Á£[žŒ‡££¨YW(­ú´,Þ}rJ,KøîE\ê,Bô„ë ¯÷“­‚+%-N.óù7)Ü`R°Q- fÖÞÇãËÂç‘dè»qÍ5ã¸r»ÉŽßi Ñ£¤Hh·†‡r@øIÄëÄB½’Z=N,).Š‘-™r|¹¾“™’x‡Mx Þv•¬½6!Ë¥UŠ5âŸÖO’:×#WÔ„’¡š=™vMKjFà—º¼…A‚„Û{C•]’¸²ÕŒSö‚¤›Ø²ý'ù1˾#Üïh! ,;Ý[#IýK9°gK-wòGĦd|Ž|œ³P1'3€Šowã\ükOLI·(;çê´ª·ç:9Þ¡ªÊõƒ “눿índÜ'½4íÝàPKEAdÎ! ‹÷Ö¢?”úve®È )¶è6ÜdIH9ÛêºøÂÒ#Fwu#¦, ÖDÁùRîÊ<sî:6L˜´õg¹}tó…Á0,ESµ£ú"Ó˜2E4S:dË4¼†/øØÞ‚2ñ +BØ¥ÑÝÊ–ûC(S~$£Í©&–H|»1p\Õ„œ¬y¾¨syòÑcb•ãXQcEêCAw®œÊòê²»"¬ž©J¬·gÎ) =9]„0¯^Ì™™!º è ö?ªàÉŒGLt›W˜·¦ &))ˆ¨ð¿#sá¦ÀvÅ’Õxá±mV Ë1SÄa+jV”H^1TM›²‰¿ºk`¼ï9ZMÕ1«{P? wÎ4á•K•óK™¢òÔ´×tñÐHNÎ6Á¶[ö ¦'5íû%X¦'Š˜-í¯·Ô&½„Åè:Ѹ÷?:œîs?’ tp‚×ÃfÙŒ™4Ô¤˜ó1² ZX%dÉ‹G=IJš‡Çqé)þHÀ IyÍÔi*×Û;_‚}Nl»#x³òœÒb«ÍáAˆx íª\Rf[ÿEµÎG Ë õÏÔC99Åôü;˜ur£(ç­I9=²Ò]ÐïP6)€P=zyoÐäì~EJÝm;×­èlœ ˆMîX¢ ÄïÅ~<€Æ,Há6¢-Ø(ÂјèbÓǘ«ÞÈÓ†(TzíÌÜ·È “ì‡ûŠI¸‹³ÄF;žm<µè0Å„¯w£zjôœ ˜ët®Á÷ü …äû©¨Á¾ÓøñXZàKÃënž ™ŠØï8»—ð¦*ùÚ¶üð6«¤Ecl‰—Ywiï&PéìUj3KŠ—3 ôÂìøÐ+‚K,ü¾ò*l¶‰ÈGÓÒäûsq“±Æ'„w¼ør¯xaë¶?¡ÛM˜8L[ð_¦PîŠm¯™’)}5­Ø rIÕSŒ¤М]¦~—܇ëqNÙIzÜÅ:ß0–r%LµK}Q&\}?ÌÔWQ¥˜½-¢æÍÃþŠ^¡…‹¿}xs)aA9wû&Ñhâ^Ï]ð0Ä[Ú2p¡!BE ×M"ÿäOT8ÑÞái<”g×­ø2 ·ŠBƒ›ø„t°,²Ac­iAbD»­(©šÌ0wVáyÙ’€,¤ <ë¹2éõluÙj2rV}þ.¬ÇfUãýùhqn}‰¹~œDi–þae—­U{©»~‹(¸Á.¢Ô`ÝÀjŠ|éqï¾3$µôè!P±òŽŽ©!# 1"B5ç­HÌ„¿í‘É{øã_Zp#¬z¶hŸV<;²™=yÀý¹öüZ¢kÒ2q:T1ÕŸ,áµz»³A蛵QÀÌyÙ¶Š˜÷f*?î'„ mÔIyFØ6J㸶"ä55˜¤Cr ìÔR¢¥Ï XÅiU0v2ÍxžO¦:Lø|É/E N€ø® 27‹ªžø#ÞzoP­’烇X[õ‡OÚ B,ÀAG5J¬Å÷üR¤#¹ùDºÏàí˜H¯•Àt1®¶ƒ„Ö·}†ˆmŠÝÑ °â›ü2·cXF¸~õ‘D™ E¿í÷j"õâP.PÄŸ“²N±P5óÍéM“¢‰±JÝA¾Ã˜XÈÁÖ–äÜ~3tT6Põš}ôþ9°“ª2-ý”zÓô¼O¯ÝìRn ñçQ°£F²ç»è{•}ü)OÒ“â}&‰ ²XXÿS5~ ]R%œUiO1ô·ÄZPüú {6Ú\ä•–6Û\ÔáŠY—eo³X*€ÿ†xà 2_Ço£¢Šš³VMdT-•Oq'C¿ó^ Õ¾FÖX>uö„ä±$L¦K×?iÇï[zr3øŠÒÙúÓøg®°¦²ü¥ÉšG LÿÙ`OTèrbã x„¨Y=#æh =@‚Ú˜»ž¥²Š”ÿ±*ö:ù´±0F–±_‡ LnêµæÊs@¦ ¢Wo¬NÜÚƒà4šYÊ…Jp„ “Ý`E?¹² O¸ÛC´õhõÄîsƒàNñº/Ÿxª¥" ~ÑçK´^¸êÆvÜ£àŸ ŸK&>  ïVÂá Æc—D/" ßÊ4‹Nç© hlG‘%áÁ¥RO5 ùþuTÓ†RáÐû‡-ê5[„ißå¢-èÀã׌ì>ҭͱœ’44cMž:I¾}f«Å¶¶2wAµæK˜ç÷!AÈàÝÖÒ;Ãç\¥npêZÎX´Ré^,%ˆ•¼ê±~amoä"HC\G?³Î¿"4‡ñÿAï/#áN¤°.:„c4ððÑó ÷§ø¼ÜÃcäô•¹·Áß²ë[IÿÕ„‚€>ÇE„Ó'»¦³yàà7YéÆt‰ [&ƒ™°ÄÊcw@¼ ×G-b¾ŒÉ‚“sø8Ñi`ß|ø nWÎÑ߈jášÑ_x¸P0IpzRáâJµ‡•¢£^N1*I;ú§3¼©1Ú);‚vŸEy-äpœ8°ò€»n?ü¤¼ÒËmhmº?çÒ¬ä`ý=Æ8;Ö!¤4Ÿ‘ýŠÂpÝ0_UyŒùÁ¯G³JúŒ!Ö¶2¯~ 5—â?w  ö%LbzC +[埙¶™¸¾[ é3áØIëÜø" g«×’.VÍ„ÕÌNÀ!SãcY޽ÓE¬4”å’ÊÁ†)J*µ+Nƒ_áÔ¶¹ßÖÈ·j¶:Pªzö‰“Å&5ëªfJŒõ[ç‰Æà‘ˆ¶ÜqÈK`Õ¦¸]Àýíá½Ü‰Fû±2{|¢¹Á=›²TâKº N±Ï!CÑcŸèIJŸÀ•[°â¢qÄm&'Ø«VR ¹Rðz{Š_ÝrBñ–z®¸ï5õŠ`6“R)¨·å k ¯„y¡tx»î}Ùï, Fõ<ÝìŸcÒL&â‹¿¹šý†iˆ¦DÄ€‰>[±IæŠJ»ýîYœZëP!æ@:Ùƒ¾¨ RBw¢íäáGD¼BJúªà|Œè=Àò¤äœKòí%¬ÞrwN…Öt“³3Už‹³„ÓR«»i¬Îa»]¬ê`j“öôoÎfà„’nÄH‹»Â¥7äƒ ßé0ì ´6Sü-ªyv*’KMàpoê6 l/5ì´‘Ùðqg…Çrÿo‘ŒR~¡¯E»{™„›Ø-iAg(vã®ß–qÓ”„n¡kýQfͱ–N²ñ~¤…ÑÄFú%ûÚ ¨L ÆŠ‹¢£ï]œ™d¾9ÿà[‰¥Äªb¢Þä/„A‹&ËWÇRj™ónSPª}9ÔÑ*²ŠQ;1€¬D`üÀ—ØÛB˜QóU§ß8¹p1ðå­3‘«Ò¯æBöó×'ù]Í>x<û@ÒtÍHñ¼ €Ì\p²Ü:ïÁOö4¤R ±˜ p¹4½„WpŽÎ«Æû¤ô;ŒK¾G¬¥`ŸÞ¤@$¼eR”…ŠðÚÀª±â/$–¯÷êq9íúÆÐ+ÿqò©¿1öÞs©ÈGv#zj¡j¸m /T–4èÕ#B™:œÉÖtK§óÚLnªÁz³ØÚùŽÑ€»îrªº¼{Ç_7ò*2èîÁÂ"n³ª•‹Ò#B9Í‚îá‰}Êfh+˜"il.€íøÓ>2üñµ0¹/{ðqOb»ÂkžÂ p¹¤ý´6çÔ—ÐDâÖ4dÛ‡ÈçôÐ-øc•ŸmÕÉ[(‡•œj¿6v¢· L" •uÏÎ܄鱽LØzäÓÊ ¨˜ð ë›AÃ(ætjw¶v]±¡nF˜«ÞÊdäå"”l &<Ò‹:œi…B­ÊA·Ká•Àg¦ü^¥À ¿ŸßáÀ^»¡õá:tEÈ—w\h$=û¶´€]ÖÓ€ÅÕ®÷ ‡"DÙÝ…¿ò½¸roJ9#l_”å­i<ëä—©I»$+w¿ŒGáÏôRJ0àâñ Ý€¡íø^а^ʆ£¾¿=ßì4Æ•Ëi?RûÞñ 㼸=´ÙÖýàèÂ?‹·M€Êìi˜Aœz€!Óæ{Œ‚¨-Ÿ£Æ¡eçG-‡K4ìÖÜùðê¶¿?«‘7µá°ýjº4PÛªN|ò€~ …Ö0…‡ª¤ßÊõ3¢t#éQq Xt&éߣRäÓØÏº¤_eïÛÅ£—L×5)ém³¾ÞMkøž8cîãYΔ–||—æÅFDiz_z!îúæÃYb¡ GÒ€­ÞÀÅïØI•l­t%ìJþY?¤@È{Žw2Ž}\— x•±ç˜Ç~Eò‚‡Pžù£ÂþSáj…X¸Äƒ­|Sà ×|` ö%ÂÈ2=.¨‚ƒyÇsBÑÁïn|2Aë# Eü1¼Ö(l)K΀¡¯c œσ ’¡B¼,!Žü^¬u‰[[䓊z&žyÑ/ß CaèÛ”ÁßÖ±¯±%[bPõúÈvf–Aß[/æM1ÙFÂ6É5jð‹óá-üßà8ÕôÏtûô½C¾t!²>{$rÉæ!µˆ|X6 ~Âà2 YÈé)l”8¿Ðƃz"O–û‰?˜eÌåHµdæM”K)íêÊj‚‡._¢Z‡J°D¿>ñÛµhµ"ÆéaŠ_bI -leubJ¿‚¯=båøvÑAžj¬ºëÚáygÖ’Í®îÇðÃòs^ÊØ#ךãÐÃëæð"?çp„–©r¥Ðh•H¹ÅœÜ)AéŸg £'ÐÁ£ÎaUWêç|¡¾æ$ïY(¹ à7ñëúƤ> Ž—îEŒyá^“’2%{ÇuÐFt¦V\Ç`ä@%‹™z²´fûq ¢£…²M(8…Ø$ÎW  F°J„’µ3÷S\<êÜ(›Ì`AC+d97uÝ\Ãkæ½j]åŽ1½QÿÏá^5–ÃUÛ"1zŒ >=èÔ‰ùë—ÿfø‰Jd©·ÎÂÌ*«z Ú^žä÷ˆa8èu|C  í×Ü?“>³kzÕó>–¼ìv’7a‡ÿ¸ïpÇÉìJ]Á®j #‡~«Op!ÄÑšJ5Û5qÎó“½ Ù•“ˆšSv·þ¯´P§­ÀœdU àCAë.N<Ö[ÿ *ý‘ô @å]F™–Óv>O¹¦½ :ŒÜùø6ÑDÔftnŸ0ËÜ:5@Å`f–zÔ>oÐhô  ibðÅK•µx2ò'.å*>‘8Dªó "Õb_ñÐÄ8Û–8x¢•¾ºßd—]pÀ#ŽŠ,üÝý†)¤]$Þ†Ñã®ÕÚdiIÿáÿëdàÑW‰"ø,bOœžŒ}8ùÞÉÁïýw7£VœYÐWÍU{ÌÑ„µ¥•ÌYèäkÕy¡¬sFœ{ˆÃ…÷µ ?ì«èpsÛpÉ¡¦ÉWèh‘áÍO3Ù;ƒ ¹µÖgþ8ðþö3v«¡Sú.e|2v0å‚­ÛžY!:q«ø75Kb½)é€ÌŸµª½¥EáÊCã–šW o›\ é•ý³O"ò¾A÷Pp¶Ôn¤F‹ràJß <Ø—çÔ öÝ!h"´_§®/¬ÿ³!êÖß³ÝçÁ#ÖT`“00Š5àYæ—4V @úùÛ˧ô¨Åî w n‚:³ûyîj[ =C *äþ3iT ëν±zz…øŽ·ÇýãÛ™:gŒ{åvÛ\Âÿ22àÍæ¯ï #ê&2¦Íc•Уë 7FSµAjšã3“5£4{Y+º‘ÌU….º‰6wP…z¿/ƒ´Él‰vCÙ• ÃtëeDÓq0Xä½:âúÏõPå_êP«Å'Or·Hù$Œú?YóUW{¯•Ö–™/3<_އO¤ïÖsC™ ÇyœHä¿«oæWGu|2ÜÎ]ÌüPøG›/|³Ü—dé*‰mi¸%ª|É ¹[â· Q •å}l[Ý€½"Ï{ö’I ˆwŒtï@ù߃F¶sjmE˜{V°Ç‹MÓë/J‚jLÜïNêô¨ö<Ë÷µót‚;ˆÕ)Tbäá…J »ÍîëOQ Â‰å)ÎEÉß‹½1äZV(=2!¨mŇŽ+®NôÖ«ö0µ©s?cª¹‰>ÍÊðH©??éA¨(SÐbƹ´¡w XßæÞÇ+X÷`¹Al³Ÿ> Ýù*뺦îiƒVÕ«f­ì‹ke*Ž ,cMo N‘±qÔz6ØZ¡ˆN¬£¹³"NÚú¹?íDX ¯Ï©ê$Lë#†}Cûàö"“©7k{mU§0$³o¨«ªG JYvëVGÐàÉsñ‚Ì?þCM‚¤”;xS¼I¹éÆdç,FÇ–¦ôM¤âì…;–^zÐ_ÍÜ“#ï‹w'Qqþ•OëÀ¹‡¤Ñö8mÇèAáÉÜztE¥k›&z§R›úƒ©8SbÂsÔ  Ÿ*D*Ÿ,Öîï!‹Æ#s¾tq©!âQú` ¾;˜ˆ&SʲÛ°L›ç­¡ °ƒß,nÓ s:O¨×ˈx*žºH(qzVZÅÚE¤': n .°¦Õ–‰¢Ã“«Ñ?ÅËÖ<Å üŽ##ê‰zò,¶d^3åÏžûXS˜ÿT'ý-ÒÖðnÛÁò '‚•­æÿv.OtšW5èÜs!!PA9zÝ„u­/ ë;ß'àÂf)¶)Œ%ÃnùQ”o;’»ÞßͧF<ý˜s9^¨š)Ø·?pn¶KÄñ*dûi`®Ïà’­ñ›|@Ëm\¨@ç=òmD~ä™ÉÝcâb#:}6¡`9øá‡>¡­½“ðÏ®€NNRfå‹›®jñ%JU9“_´[±g_I™3Á"É9gí4ø¥ˆ©&/eÒLèç`è½& Ñn)Þþ}°ùæ9ìS~¢âY`FR6}f¶Q] àq>Qªh©o2 ÞÌ;Ç-×Å^˜T°.!ÄëßÔ™×wßV•ŒÜTnÚEâ:‡°—TwR#žlwõ±-—¢{“#TyðØC|{š­ &BP«óµ€%^³ ŒW €‡>ÅBŒG®‡ G~d7£ÙðÛ—=¹!Ô`CÑV#–Mqqœ…ày·ƒ7¾‹ÆÜEñ€ !·¨ðI¨Ã£*†ÂþÌi<¹Á¸ƾ„R<1¡@\ËNÚÚMÿ3$÷ÆÎó}o{§“’·õ£•Tßwý1ÉÆj“¯óÇWʺÆ1™â¬|­Ìn&´Ô5²da’ÄH¹œæà PFÚ÷œèFl©[øl“ Ó|í Ôå¿h:á¶7ϰr±dÿ‡áÊæ÷増’‚÷«¡ãþ]Ò4×­ª´¡7*ä¡ÃÞSAÆâÚ™ Í?+ÖßLâNœtùhvDž;9ôõ<Ì-GÀ!>êÕú‹UK™¼Ws4oÕ¨ ˜ îÞ˜à«l¸æ2‹ ýFó`IêvÄÙ7ÆÞq2rÉ˱ieº8t!*.Z„/š©¬k`VËÿçkK gó‰°æ‘ï ‘…f?Ò´ð ýÙ¨þÕ/=¼Žvß@•J6˜Ô3Þ°Ï fïý©E ½f­. óeÂÈ”\ù)(åCEb¾ ¶%â'Á9H¥bÒ­ÇE$u”TŽŽ`kTYàuÊYs§ »««8ÁJ8’FÆJÏ®yk{Ö<#<×D‚é­Ó]†ŠåÇú×K­ÞûS ®Ô]z²ð~à‡ÃkÖôb±›J©þßbG3·H" CÝ®S–i+½¥[ŠÌ8ÊXdcòk±5s”ƒN¶«¸‘o _{ŸæF2èµx› /b¦äØ$Ã9ï‘=ÝùQÏÕöÃÑáMæ‡íß•JÄ¡  233ajëÖÙWÅò…™¥­íLF±A@ÊpÖõ¢ª @²œ “¼ ಖĹX Âûî…ôMzèèP)ˆN—uû -‰;”ýó§0~½°öñÑgù¦­®Eg;Ž'Bˆ”„•q–€Ì²šŸ§Â{ǬCŠ(Ýz»ý {4È÷6”¹Ü±÷>äOn@YÄtñÿ3wÄá_Wît3_n]%”‰ˆµts §öSîæzF.Ò^vÆíÂkB¼¡¾ÕR³ŠP–XƒæöunÌH[,e5@¸Á>t'0…~ŸGŽÁs*1ª(cA)Ò­«_*¿Z«KàQ” Þý½E…‘¨‹/Q“‚,]ŠöAùéÑ’§¸—žu˜y-J¥~D™Å"nƒÓ)TÞNɶ¬µª´ ãàô”pg—°vnÎ8·±dm8cûE¤›gD?‰Þ¬í K;ÞVp»ñPù¸ùûz)Qª$Êø´åVô ¸ÇÞ~ìW‰°$YÉMŸ'5`0—i¦’VU±£Èóú¾Ø8”úÀsWu–*ù…ÊBkk÷|Ø?M ŠIûC]A?÷ neÞJ©Ë=‚LƒÝ®….É„‚Á¿:„mŽn?$%q×µM®¡žc„žH]éh<4›sä;éÉ‚=¢…ÃÅEÄy:/ˆd*:HÖö¡t‚´œåk{qM_¬I?G·Ci³"0Ò¥27ŠÜºÌVc Ç•.]%‰†t€GB¾TY²kP(ÇÓÂ^ÏzBû aÕ´ÿÄÄ{ždä G11õN`¥³¤" köÞØœ»0ÂßÄ›mÆÝ¨*«öV´z¤³Ü‡bVl×M ÀÊ.L:í–Ioý8ç&C2ÂÎ{ŒšCƒ+(Ÿó2›xaP¤ÔúÑ>Ýæ˜7.§ˆq†òÈ„aX¢+í’Ú®ùr¹j¦]ÞÚó)Ðì?#p•£(‘RÆ› }ñ m’K€K͘:¿Ð ~rå6Šžm˜î]Ð ».Š´(SC„Òs¨²£2V¨–ßtÞ_š› É݉HüÈ 0÷®¾-Fļv¹zzîÀ}(ç‹hliØÍ¸ƒ—oÕãlEèñÅtDu?!ÀÅ7øpEE-£<~†!ÐM²›_PÞY’¢/å­-ÝX¶~Rbª­êeÌ>uÍ2’`¬"“HBô{B&yŽæ*Ô4eòÌ…RYgu÷=™j‘‹¥ïËœŠtr’(ù>sUžGÎáhliý‰òQPpEO‹Ûï‚Öçò*ùkºË$iÕ“á¬rr•h„óÁÏ3Ê­¤°lbËW>Øà¡ñH¾ØåZ­®gÖ&vúùŽODÉZs åG¢YøŠwT’úo{ÜEPô]iç—*Aÿ•)<ßçéˆ —î¼HûK(oHöu:´Ç†Û`©gö£[Ù3Ø£çͲ ¨ýöòßIž´ÀµÞgÙüvMÈzYzþ•‘;¯):,"{ñE 6›x=âÂℲ⿅Â} Ö ŒOI|"?ót*ëüÐÉ=è´>Pãc”ÅW¢ü 4û{Ø Ï;û³ ©ñ"Ò/RäêÏ;ËÔ2ôW¿þ¿ƒ-µÃJBa;Ë/nÍãµ¹½ü¹ÎT£¨ó~ð‡s!͢ߖ;6|_ºÉÂÉóŒ\žŸVgF 8Ù¦ôI2ÀyÕéSwÈá¦F¹™u#ß’g¸NËé<öf𠥄‰‚гø È2B¯ÅÒ1œ{(ˆ"Ëüz¼ „b¾ñYš8³ã—ÓÆÚ+¨3léÂäÞ•ÖW¥Z)Ô6Ь×Ch½«.—Ù‘†hÁÀ!sî±$õF¦\›j+­}=wåYÅ‹Q³Xö“VªU4ÊL)J£6Ðm`?Òðþ°ÕD¡Õây/³äé@cÞEܳ¹ÿ¿Óç…ô¯-þ½Ásö[¹>‹h²ÿ^LN_tU\˜4cÒ§¾/pðòÖýºTàít<`u“éÅ|DÒP;Ͷ-å’’yÊʉ 6 f0ô†êBÄ/'Ÿp ÕöŠP‘cõÈJþ~£´(=ÉÓ«BÃÓÚáUšë#»•^F^ùo?K¶boƒŒþÙ˜A¨ÙÿÃý+`€ …„£ŽWB§#ò  Õ«à©°h)/‰U[ðý‡Y-šó OuP3gùg¤ù^RŸPÆLnìWVä0ahbðŸú4mwÞU]èÕ¸ëŒ`“Ò.6–±¹—.:½Æ¹±ú”8.ù1!…Ñýi82®¥ú²pÆ>î½&ö9Œã×ä ×å5§/‡5ãZ½å%\R/K_7L,R´EX$ äWœÉä•Ú7Œƒ÷2-h†þOî¡% ã“›•_O¾¦Eq­‡X°ãâ\g[wØÄB=ø¥QEöYæ÷Š‹b>#‚ï6FѬìHLJè\ Ͼ£_b`5·Ä‰f¹Ó„Ieåaò'ƒ…‹¾†7)"vKôŽ·”Wï?ãrä^¼ kk¯ªQTVôáˆÙ~+2›€£‹ÑÆ2§@FìSprƒ„GÏøÏ i©jnrP/ö!+¼Ïn”Ú÷?67ò[åN^æ'lBõ^EèWþO£b’L˜@ð…ÞÊd"ÎTË8§'ò^ñÔƒe¶ÈU¦(¿óíÅWg¾ÑÌÂ\£ ÝnÂ~ yXtðoÄwΩ÷*{ hË\h„ð48óxNÏSЂþƗEËá¸åÒJÀ‡ácgØFÔ*áhÕu…‘êÊìïlG4æƒÓ^F—¸æü“!PN)Äá×\HÝØû(.³Çº ¬ÏØÖOØ÷›šŠÜ*¼šègëø˜ÐEÓÑcÀv˜@èÍ̢타º¡¤0ð4eµåuâo€Wô)«ÞÌꑵh£üЉZ9éâÞBƒ |Êܺ[¿úöÕîíV®RR ?Õ3½öÔkMkìÞì²¥™¥Á™vTÓù1L®†úý™M7e9¶Œ š#Å×2òü_¦ìî+¬×Fý·ÁªÙä¨qܧ,Ï+ämÒDÏd@Êz·ÑZ‹ª~x¦ÅŸFûä%¦¿Jìnàõ`ŠWgtPT³Øãï#ûñ‡®ß]þ¿¢t¼¹~µf–›/N³žŸw¾›LíÚ\òwòIËÛž¥‡íÐ&qüÚbBk“´Ex#TfE4Øùòîloh²¸Á³!˃ ùšR„ŽoßkñI¯@WÛ¬|ªyj-wÊ´?lPœâCÎú¯‡xpï]ƒHò7*I ‡ï—Ê‘™ÃÈÁ˜YºXüvv]0{Œ-y֖δ̒mrçÕ+kë¹}¼Öèè¡ÐÌY ýsqÈŸÒ? fÑ‘ 5•µ.\g=÷Œ½«W„²¯»Ä¡R¾˜ùj$ºnîO‘Q©Ûéx"±£|›õZ1ÃùXð~6˜Ý ÙZGhŠ®°Ñ @ ^¹ÇíÄr%Ö[s¤v0•½âM{u¶¹\xó¤¤B*"¯üXAœü®Mà x3”to)òÐÿ$ œV”5"ÕæÉ˸1%„Óì&c]ò`Fº†RhÊB×Ñå6¹›aï×ô™-œYÊJïÍH´¿/»UŒ€]ë,›ãä:Â'ÅPb uR^Ðûâ:ÁÖ²3tt3PY`:€5?A¹3xôpÛMª×s•í†äÆÔžÛbß!(µ˜†K!‹Y0P#`”¿5!ù6°ü߉?€“ð(ÅÜ# €PD;CW3» ‡ï3¾“efÕMù<ç±®/S¬B[ìIÃ\Ÿí³çýO[Z@ñ”\Ýþ1—æ¥+è¨ãB•e’'e ;4^Ü©yÿÜkGs¢þW¥».¯ð#vÚtË:§õŠÔhhã…ÃÆ8– 55F–À̲ñ…·LH®†}³öT˜Ô©û¿!R§°[ª­ øæÖŠé§« êrQ.Š¿1¸·òoûa¨ÉËø0ÔâÎàúó[W0RÕeá»’Gžï§ì}B7$ëàÕ›’R¾ýzó6^FÉ ØŒ‘l/*¿øûýO¼ÙJ™`†²àÙá•Báþ×Õ½5È|H® W§ F” ä]×7ACê'Ppã8µÕßõ¸=u]@V®ÈÕ‚" ü£í_D”–†FÕÀWËY¸Ç½Ïèe¾tŒôk±†ß7ÙO¡Ìæ†âª^¼y€’ö˜,‚-ÆÊýô˜]\pXWiãâÖQ¦A\ÈFëÌdô‹š{‡_ѧ—rÅ 2@·?_#_^µQë bépè{æ¹0Ð%¢Ðúo²9™tæ§ž¥¶_ÙÁÊATµ3cø®©¨·•©T2±Ü £ÿ¬8¤÷ (¨0vž »,2”Há$à:·°ý$ÔƒqkQy•ZSó ,ÛšlCÞéÂ~ñ Ï=|Jž˜ªÓƒ4m8z¯ÕñoH¶Ë4}óq|S2­pðCˆ„¤jº^–|=âz’óû@ȽI»‹Û 7±ïO..˜W0–,kòHع6jh“-ÖÏ{Œ®Rx})ŸÍ6_)éÍ›é˜Å”üêÔ§à9A5_(ÊR¸VI–Ž j§•¦3+’ëPC*Q ¥TBŸœTaKßGeZ¯ÖZ„2„u¦YËÃ(­½‹X¼îôÝMøÃŽ«ná*8`©©ò·Kùzê°ðm—Ô^Q¢™è(ïÇ<€pÆcwDkÆ•–ŽÏáËäQuÜ{VK[Ù0 Õs–™•g*6×kµmNÁù8†à¿‡…oWøAÑdüá(+Z¿ðqÔãn½ ôŽæH @eÉ„ˆßóýp:øÞ¬Q‘9ÓÌ~ú{C1‡Ðþì'ör“QÛ \®kuÃK–¦ (¹IÀ%&­¦•Y몢^ùì…aÓTZ ïÊÀäCîîr:ý[ýêòæ©Vù†sö)¶ß‚–©Ÿý×áÚº ‡Q6]»ÎJòÌñØô] —W²P:è&óÚço v xvô¤Åtü²‰ìTS¨"¼þãĺú´AûÌõqòíÓÂ9öõ Ø8Ë$Nö™DÖA‘ ‡dJ¬Àl÷ÆÉRz¹ "”÷bh¶˜ó¥›.5Ùû37o“{Ì0ÈþIŒzÌR¢Ô¨î…\?žî6‹¡O3|Sµ°œOÊØ”ù²šêÔ}ïè›ÂP92çd8HÁÜìÞ ¤mHü—|«6¿&Ÿ¾„ذ=v²ùjö<ˆ)·u®ýgrÏðfÉ® |´QM1µÐæÚÑ*Î]!Ÿ‹‘ ÎD‡.ê¼Fq4ºINúÜ^ΔÿÍä夛¸ÐY©1áÙÍâ'ÅuËDs2œÌÇ}»°sø)du‘üÀ/ sKÓkm¿2Am™ìg(O¥Ô'ý¯…·Ö¼U± FÃÈÃ9t)cE0éÚ ÚÁ¾u]¤wÊŠ½¨q«^žI¾E©1k(ËíÁ5ÿ]ñDË¿ÍCaÙ°kî®pz!%•Ãú!ç+4 hóY't4«Í6€Ô¶þAØ­)̲ÿÇdËÒ+¶ ër„üÃhÛD×Y CàBÛAˆ}:ò›ª"¦ óGˆåòœÖˆ'%æI >L´¦?Öy8!¨WË#ñŠÓî 8â68vTÍš‡l]?×9EÜønô'uX‰FbsŒ¬2óù9v™´ÉÖÐÁ¯Š«Iäí³ïì‘+ô¼-UkÍ­˜G¿™h·;8l'3u¦ùÙErœ(GªÐ3Eóñjt·tE5 [É,i6¥­/DX½çYž Vv%ubkÛ{»K§Î0Š×Ô_J XýcÚ”+à] UuÔm\6uu”Úk1lù¾¹’êiF8õÓ¦0©ãz¦Àõ¾_œef?.¡Å§ô‘e…¢¢'“…”²ˆûL´å]} ëÞ§x”-¸4}>ZpEŽ b±Enú&Ó¸?î ð0aŠ‘ðOϘÕt¡Ð=ɘ²ã9Ä ½kÁY.9·€©ÇÏš…4TUs˜EY—ó:¾±œ?àÏ£× üMŸ¶YTÏØ@ì÷›¾?¦žKƧ¡þˆÑÿPÒ pr‹7ïê%ó½ûâ“ÝÁð@÷±Ág*ý͘E^µbÐ%Ww§p •Xš¶i‹å¦¾¾¡n:Šî2VÑÎ ÓgÈÚð5]êOÊê¬ò×í•g>TkQnÏvvnæÁï÷B'¥´±iñ·Ž4âN ÄŸ|õAœDÒ{X×O\5ïx©ËŠº‡Ì!£Uá'o¥.zU¥×ÕÛ_ÞèyÄTW™è ¶bØ|ÔÑ…ÁŒrY‡gÜ(Ò¥¨=k æhþSªŽyÙhß)˜3GLÜÙŽgü,»Rà¢Æ³» ¥}Nk1 ¯q3œuAÃ;98*n»ú‰•N¥#ßÖײñjº!ÂL¢ß‡²œ-’ÙÓÖ`eD’µrûꞟ»’®Ÿ¥÷[ª!€Ê›´ S.3ÆñNl‰TݳøÐþgç<=Ì ‘Ë» ´@èý·TUþø¹ïÙù±Ábá]”€ôL!åcþ³) ©¥evR;ÄgþÍÄ%ícbÖi\D;Uªãø3|4¨F…ÿ”4÷L•…%öe&yÁ¥y:GÛ xSçj'lZ>ôOèæ*{ŠpkÖ|Ÿø¤âÔö™Šû,Ø®Tò1Ù.¡îÃ1˜ ÒUév)óÍ~Ÿ$¹Jqn³˜«ž×AR&¹ÐýÝP2÷µWxôòq×· 4r+§ˆå†óo@9ä‚3ì É?‘T²² ¾³òïÔó3åÙâ¾âV`:à-‹¥#_cdüŠOjùõð”1æ1AÑr?ª^5lc‰>‹rbey´p†œM³ñà°»¾]tðiŒy½uÁ¤Ãµóh·ªVÆÈ™‚'ÊtÈ<‡!Ì+ 1MEá²DiK#ëAs{­ù‹$Ý êï)Ý>eWYjÓ¬ îÒêÌK¶ô½Ûÿ4È® AHÒRsKöËxV v‡Æ’© ³Þé. ^ 7ɵSá~±½…ÐöµKñîÄ´µYQ*íÀNa±vß Çb_tŽ8û6½ÃÑ™“z3>Ì3«éݼ8`Ên‘šÌp½éýžhú€¨­uuÚE@h¢“xªùÏRG»©k=DßWP‹<öjb{ŸOüÄì•çÒ£6¢³#°—ÊÀäÉC£Ãsï9[ȸÍ8“mºV˜F)õÈyR€;œ"Tñ|{´¨D» õÂ÷OD&·òØv+Q-äÌÃÔ?9ü3g°)ä qþsÁ1)Mã@Yw¾ïO:QbŒ:„iv» á ª=wOGÏÙÚyÒûJ>‚¦«ÂN_%a;qÑAÏ+S¾aˆHí+G’šÿ’Ö!åQð ÌÉbWÝnšJ>w‹]ºÄÝ@«3V›ùØ™$^š¨OüöŽ;U…0IkèÑçMlhÄAôË*)ÏQY näßBZ|XÂ’p§]–„TÃMY‡?íWucë™î¦rOT3×{¥Y¶y X-©'ÍÄ1Î^tØN—Ü\ ™; ß£‡Þ{o³ëÜéwxdQZ¸;Ü5ŸNѤ^ìź sÖ³^Ô—T-tùpŸÛ„ÎÝZ™WåbøËøãp‘n vee=£È€” Çæ<³DÙSu¯6œ ³æ`âïöÝ|bl`ƒ³cÞ1M‹D|c%jÀx´å‘¼è·Gt‰rR‰Í{Ëð÷Ê`~÷þ6›‡÷ÓÒÂS j±e|Œ'«WñÜSøáÜH3>øúØÍDÈ!`‹Œ¾Uo{@ß›ìºêÇõp‡˜bÒ¸(k4@l„ƒ¢]¡Ch#U\¨Çµ«}R‘µ±ß‡–²nø‚%Õ=­š«ïg’e;¨2æ¡yy[/Ða€ÐT7aµ™üÛe…ï›jÒE¢¨Ü#ÜAàM-Fï§–¯Vw¶ž!qÅ©œvÈǾjÖJ¼$uç³ÛÅU-ÉfΫ‰Y+ˆJ[¤í:(çD`8ÌtÈ}œè»ØÏ©ù¿…ý/û[ íðo/'o$B£+žúÃö>Ê”ÛC+å'­9˜t>Ÿ…-UaÂRÚ‚gz¡ šURè ­’4W«eÊd1MÖà…Eò!EŒ·V›š<©E^à`F›’ˆ¤Y/ÛÆnøHýË„X Eª…ðÎûó\ŒÃNVÅ›¡_Qá³4¦n#= "ÛXÙfpúìô1ËgdEœ*Í;ÔUüOY;`¶…Þ{.Ý×õáíÜ,£+-YéJ7õ¼»<þõ¹BÍÃÍ1M9MÜã lç <žÙGTY°ù€(.ÑøY/¢î „t§ïrFRÏKRAÒb|/¨&z5'Å2®QJ~¶ FNþ|³}€›æ‡#2 "Rcø@)#M?.ð+·§Ý¤]uXxäá”)$óæ4&+C4 y;`tñ¿Á@õ¢ø6AƒÄAe‚ójüÕôîÕ×=p8}6±:‡Å`×Õ\î±™âB–ú_½L"_³4ð”Ähe­k$q|ùÓÄp¹‚!ƒ´´ÿ ŠtQ:5#>”¢]m¨yƒ ¾”“½¯Ï9û  Ð[V@~„‚Èî‹Ý[—ûŸy§ã¹$YŸ¥Ôvmä-p‘ÑxÞDY›ûª¦Ža~_EfÐÐaµÝÌÍn8ø‡Qr;˜éµ*Utlt}n~ÚeÅT.w¹ÒNÁ—"]µ*WÈ\|%v%+ó ³ÒÒÛ!ø´¬j‚àíok€%ü£xÞ¿'p°hZëŽ (ØÒ⺥…`Ø=+ˆ5:¡~=–ÎûGî/Nñö †z/„i®Pc*<9gò—^ïš9Ša@ÊPÿ˜Bµ¡ð·ªj^¾6/R¨+"7îÜþ´ÐC„]žtî5ö®’‚hÄ“ 1^Î =K›»3¨pó…B•Ì+V"æh+r€Îׄ+‘·U»Ö $$]É,²8©“HÙÛáå¶H{îÄIÄ•{`5+ ¥€ë†´ûoÞèôTnPafôËa;ŽÒ{›&ùˆ‰Å? â”|]m\ó#“ß“N ÏçÁfÛd4C1 šŒ§‚SL¯vmYkbw«ÝNŠ-Ÿ €c`+W¶ùéqGÁTK˜=ykM›åphسñÅH(Yªõ܆ì·ÕCÛPÛ#àü>Áýʺ!üÎàã#oâ‰aÉA¿Ñcß3øH°ŸÆj˜úÄPvÇÌ|]b5#oô1{îUûCqüƒ¾`+>Ö` …oòd™TJ¬/„ž1´ás¦˜ \óÄ }” ÒÍѶ¹I½¤¥ÀÕS˜ _“`´K÷)£öëGG­êG'µVâá…sÅi’ÝÅkèQyûð]®Œ(þ«O÷ÐÏÒ™ÏpFÿý©3²y·jO/‚˜B>l\:TÙ<‡/á´¯ i%{JTþ9FåºæQÛx§ßruÑ>)Ï¢2›Z«›‘8\ËŽ¥ Q>åHøu;†˜¿fÝf[þìÖpÊ8xô®ÇÌòG÷˜Ý+ˆ D@Íਇ͓~Ù|Éı" o—˜5>oXdÆPšT½¥D!¯˜ö*C°À ¾/lðŠ˜çj(H ¼‡ã–‰°Ž÷³(yÞŠ?(õç:¯Ñ²¤ƒ|³Øw ,ÿÈÔW­xºº‚¯ÀcÙq‚SX‡šãWzà6ö{™+àAóG’Šú9tzŸ§¢/ˆ†lE&Èq¬_jrìî&GÊ3ZÑ"øE©Û`îÂå=ü‰j9#‘Àç‚»÷ÅÓ•_ŽûMä/Tc±?@z7(®È”z³Äþ£¦•“iÍàóœm t6.ÔXˆ¸Ýÿ/¨g4ÉxËp©«¸(㜠ŠÚ¿2~q€ôT>~»y»Wf…&¥ÇæwaúäÊ\ÓãDChªÖjÕœÃïÂ+6'dI÷úÑ#3ˆ7ÆüôE“Kš´ °ô ±ÞuaÓ×!P3‡IYT΀1‹ÏžgZÔ~;ŠIZï¶ñ§UÃ+4ËÞ“úì‰k锾JIR%,¨Þ›»‚ºÑã}Á!Bñ¡î)ö½“«¢~Æþ–¡DC`þŠ »ÀIÓ ’wú«A­Üþ…d MQÄ¢óÊlÔÞ Š²­¨°Ï ¨ÔÞıèY§×8céÐȺԭ°ú™)NT|ÍI° úÿ"UVie€lõ%FAGò$ZH•Uô™u‹„mY˜wë-gD26¶ñæoÁÑ3krÚÕ´[EW©˜Ñø“Z.’Ù"§ ĵHIÙiÕdÀj©¶ÞNØåD#1Ë/—Zf¤‘—",S'¡ËœW‘Jžuš¨0Gj’}X½41ÅÅžš«‘ÖèÙ‘v¶dùã]^®ï[ÇÝc=WÖp9µ¯+Æñ Èültc²|yì<¢D3±#§Ö4ÍX¶³ 7z1¹õô5%Ptr†à_r×Ï»OK$ðb‰¹M±ð <ãŠm*à E–[eu3«lÆ'3¨¿úQìùWÀ¿~ÑkÞÑѾZðª½sî›2ÆSíî‡~oÑt¶9€qxøƒšÿ­G*áÊÈe‘mwö~Ž‹&ÑH¸3Æ|˜ü²¾cx°v:Se.óm"&”J¢ÏV#é›ÿšÒ,NuPŒÙĈ¹_U£©[IÎyñ/¥èígÑĪ¿µÈÐÇ6¿&%Rså®uvëÆ‹øU «Ë…3BK‘\ŠÓ”Ö'œÝ›Sæ’¾í,°k´òÄØß.µj lUË•KNö†¯ÔMàx†k9ÆOø$%»/£OƒHÈj;ÁOŽh¹û@M‡ÎòŽs'×uLêôÄûVÈm™/x–÷S£‹í„8j\XjwÖï]òNó/Ã…*–Ég¼ê]ÍT5ìüó¾Ãíàü•T#”%u(+ÍÛXîÌóTû{Ñåú+”j<0~‚ÐM4Œ?v™Þçe àa`±Äb3 x#Û‚®’àè©ñÓ$=Ha 5ù¤{óàJÁ7&@ WLäd¶&ˆ#{ïtŽõe‹//%©mø„“§=U:‡eÿ£õ`š#dž±íY/p<23³êé`7¯ÙN‰h°ä¼³šÛò®=-€¸ò=ð©lØY²§üÌÄúØ+ ôp4ºêªÊP³s¨²”Mè|uma%#ltwwU¯è¨ë/™nÄñä#¡ÄÞ/åÄÁhÑ9´Sµ©ù’„:'GfÑÙ¹Ÿ§bÒuH"­Ú¹d™›ÝÒ,UrQϤ°Ök·r~éuµaê…¸ð¾ViO1,tv,Zý7¾© ÝJ˜ËŽ|õo®å%·QIiT.™X!çéèkÃ’–µ¿PÂjŽOvæ:CIEX>óõ µë‡U§íGŠjF–°—dV=NpôØ‚u›¢É­H¿X öŵã…•g±èŒ—uˆéèo8Ìp“fË@ÎG¡ój ˜¨ð£Tú9sE¢@ÐÇ.;±}üLttîõ>’Îà®à¡3èo‡¿û*u-¹ ¤y—v1VÀOÔ#ŒS½ÚpȽ«O3|Õ‰ C5œAÕ„&Ð~\ÞÄì‚ežA(Fž˜qúm˜ëüU‡‹fEh/Jë$6GʺLjY5n98³c"V¹ä„!§Jô\€™ß1uýwÁÍ ?üOãë`11²$ÚÛqƒ„ºk‹5ì~ØJL'“·8@$â_º³&_¾ÚEX³t¬©ß=ˆéönî¦ë¯Œ·z½…ÕÉ—#ÒtR$ÍÙ/üÐ/ Æ®ÎÔýøuÌñGm è8ÝÉšŒÄ"_û½š+×Í縰KÞ9&"݃ƒ^¶GL¡3“ Íº…;¼ì•¢j%2q[Sú MWPϾ€1æ• ù¹yqξ0ež5Je—v0ÿš2Ü‚Ðég®utß°¨k¨Ú¬:T‡A°³äBzÎÎÈ{<žýw¸5K.X¿Åã|à|Mã)Yëö8èZäêÞãå>‚ÕNøX„­Ö:¾TTêI‡ïnÉ€Hª¯n¿ç¥6¥;x3L P©Tö¯Í$]ÔÔ£ºšO¦_ÔÚ#Ø {Ó¿$‹Ú7ƒKß;|;ý5 ëu°S„ÿöJr6Èà-øÝ‘i[‰EÇÌÛ|yÝLmXí}ŽJ£åÂ#ªñm®XI{꽊GäCŸ* ¼6{FxL|²ß«Ç¸v8ºpÆ ’dtÕsµî¸ Ô«m¯T7GçÂD›Ú4Ú¼0RÞØÔ0…]z£Ÿ¡ÌCç>¿³€‡o<ñD‰i,õº[í ¾ËõÛ¡·èPªÒãÕ1´Œ*„.ÇL*a—4Æüg‰—S'‡A‰rxļïJY ¤ÿE¶^Ë Ö-_…¿e¯V€‚$ní#-Ò8Ó‡V׌e—“5ô‘a«›,:y%lc%CŽ~áŸv©©¬˜(Z«×ËܘrŠÆ¿#þE?TŒ17ÿˆâøt¶7¶=v^èÐìÙ\Ãçè²SÝü¡|šÂ¶Ð%ù2ËQ¬*1hû2Åí¦å¶…^é°šû¿Q«Èc×RpgªåRï’ʹ&Ë@yÒ®rÔ³> —XÈyñ¾tJˆ»ÀøÝM<=9¦‡xVÃ?)ÌŠ¾‡BñîK\o%Ê„²#Ýu‰Þœq’n¢+I:2D5¶F-ŒK޼”È#ïÂôˆ]ÿèÂTý˜–`†@Ë!̽]ÕDG~2ÈiÚí?}þ8:EhÞÖ #¨»Óße\Óì”뽸˧ÛyBË•J¥S.Þ Êç—!i˜º6ß®iyIKþ]š*DÙ´u”RM(m¢Øâ3ì¢bcziA¨Ë^ŒÛ€ö<žª èÄóíÝ&«=ÊãërÀHO×ý­¯ÉJ”ÂyQâØ"ìàÿH‡{àüBßy‹W W›ÀB9}Mð€—ؽ¹¶B­@™ê“³^0A _dÆðH–?çºõ-î+þ_8’sGX塞ó|«K…ÞÓÄ9:hMIÔ àÉ #…$ùÍëñ«(²l_Õ¨ÙV´³[U 0æÇ=Ï ÝO$v ŽÆ@–Ø5ÏCA!|q™ñÅèûv½da¶¬G£Ð^Ç—T’nÚáT›Gº~†°ãÚ e 6¥+÷Úõó“Á…•PX-*s‚õX¾ÕvY;Á$pûæAàèå<•Uòî3ri+a£‘&bFÞT€!¿&4‚aèf«C~-}ÎËݧµNESBn•‘p߀i°$Z@ŽÅL=‚F±6=!cÉ—¼Wè­áÒ•·SN}õ¹f:ö)±ÿ/G³c¤âS‹ÙÇKŸÍ1ÌâÊí{k”Ç‹ø5UEß32›,\¶ðe#¤DF GžQn'á½2šq·£µÏ¶&*“,´mYÊX}mwëAkŠ ‡_%r ù%z©<:Wú“ðÕŽÙûRmjO€@©¤~öòCËš ”7qUéªL‹D«Úvªš:ij˜ÑÅE¿1¾Sçü.BÄý/g°<ïU~ŠF½×ÿãVAOÙ$åcT¢¼‡.OþÓ’;¤K6…ÃNŽúG…ÁÊå "$ØQ)\š¡T:Þ¹Ö ’³Æâu/ZüEÚ8ÉÚ}Í"§Äà€Ÿw.{Ê5FhYi}&%M“¸™!Ù¦û\‡„ àêá¦Avæd£ô³Éa=GkoÐûÚ_4¼ö­1r5V@{q8ò"|kþÿfNeD—Uª-Wæ´í<9ì+ÞRˆ*%·}Ò|÷LôA]qhK‰˜¯î&Ú¶èEâ¤6¡ò… ¥Ê"]!qƒYŒ˜B5Ú`ÞþSÞWèr²ºÞzRqšÞU.Uù4v½kàkHXs^g«Å‰gôQ‰Êße<ÖÍÚn¼ô×™15Þ;±™ê5Ø5é Òôõ¼ò9E@·mÊô˜soØ"iÅS.M8ŒêL™9½“·´íNNhÜù+?3ž?ç½"ì+2ÈT~ßJ&”êm#ç¶)oäú²*NŠ0,bÕ zÕM¯T=&µ¯Œ7ÛIø¯§ÍŸ1è@(B¹=ØÏJ¼3 MuÏa}V®ß>)8&T2Á9Çœ§ßuý%\ÌɼÎO®ñÕ>¾U’LGê.–Òc[£’6út.žb% wÈï«Ø—8´Ã:,u/aÿ…ðhDXy<õ<ð) ó¶Ë­1˜óß4–-O•2zœwpE˜|Ô+–w­£Mqú‘m ñY« Ôvº÷vÅPÙ¹ö,(Eù;t>ªâ{Ʀ\‚ pL瘘‚]0åŒ<ÂŒÃZÿKhˆP"cXù&úõIoÙÏ×Iz°×²h¦kFeõkw¥5rKˆÌ7èÌ9™¾ÔŽg䙼€:ËÔJIÑûª¡ªÓ–¹Hÿñ¾°*Òµó;×T@4³>±û -P:Ô} S›h Ñ¡z~/íŽî„ÇDúT gq_`¯ªC0¢­ &q7Sµ„åÈ)°ïS¢+/PcÓýÍŽ#ÕáW@ìÅ’ 5ÛÝ3͆vC9ýT~3%f —¥ÑÐøµfˆª"-0~rò”¶Žùµd6kÚ {(žxñ¼£•1PŇD' æÎw«êœ1íúòbš?æåërPr`v>;¦'z®7 ´Ì…š{î,^¨Êÿ+ ¾ûCW¹ Kä\,œG4Õ%¬h^Í4°/­µ­U N®.ÉŸRÖ±Ðÿe-ÒþÛWçf'öW.Ë鑺© ¦ŽÀñÊÿÙ–];™:".[>–öÕE½€ô¥ùÇv•zg¨±R©+õ³/&§ ¼1úSµDUæE†÷tq²PìŽhIþä9p’ÎÊ’‚Å>‡MŽ # L+Ó¨× `ó3g}[Q›6× ”¥s8QHLvOÅ‘é«+º9oÉ“¿‘£Ë„#sê#ƒ.æà p=ô§áLÖ%Ÿ^F×h´N{±©\\§0wŽŸù°¢Áè}K,Ã5sõŽ2íˆZˆ}¹êÙßSAŠVÉ”Y¼›ƒd]¡5*„é6¦.ó_M*LÇä~kHÑìc7 z]j‡)­=‰€ƒ…è›Ø,r RÕ½v%W`céZL¦ïP`ñgìò†^Ë×v‘ô¢²]òU’Ÿºžü¨©f{*Zæ„Âæ| Ï ÷ lfЬj[œ£³ç)s@Xv?¹x®ÝòôGn>°6ê¢ Jþ,a"òªŽNr9,zò7þ§ßx\È×^“‚³Å ù•¹ôoÝ[µ«Þõè‡ú`†œ«ZÿŽüMd2¦ï„F©bæŠëªÞÏïktNÒ!N²¾¬qä‰4O¸@þ.—¿”6½‹âÏKÿ†ÜÞ&KÒým>ü…Ó‹Ä ¢±¡43Ëe(ÐøpÌxdz’>Gý¸¼‡«ÉÅË…U'+–¸¡Ö»Æ²vn3[Ë6‰à}:w‚­8]¢èˆƒ«r¾ÁQ¥ô‹³[š°à]ç´±H§“ÑÄIcv’¨ÎWÛ½J:%múC=U— ›VßUû»=é•an¼<ð^ÆláFŒv`Fb|q,!¡Ø oâVQ» ×xè|zË'Hfå˜/Sj ¥…ÒÄíÆcé¸tEÌ'Oÿ>ý ÞFí³Xâ[vŒôM\oeO3Ù®Mqç Ï}ÖØÇ–Ÿa~ø§šðЈ…”¦¤¥ôÓ¢S9ưŸÁDg »Dgm©¦ç*xòð£QQ[¾ÉåO>ðŠ?œRóÊ:£ŠôÕþÁuY0*ÖéïÚ«Ÿ*òÜÛ‹4UÏ9úÌÔ5Mw;È0ÚEQ%@º _Ö°ï¶è'6èŸQ׿LK]ï.¼`L«áŸœsÏ^¤cz"Ô º¥aRbXùs;•Ôñ×'ÊX[’³Ü€s=“f×!~e¦9³òpæ0M&rÔå®ciljõ¹áo7œ„ô$lÁñÌ7ñ»zù>]P'ZT”%šehªP7÷°–T~÷«—‰AkÔPM…4HL·†06܋ͳ¦Á8(öw ôëW*¿=˜Œ±Ô4Ö'C"ÙY7û…à2f4þ,A±~àâ6ùîX8Ÿ‘†¼s¡ Ê aò€M %v7»Þ[% ‚d8ÿ+جàŽ0 Î6¡Õý%«ð±~FÙ îâä×Oj]êŒcÛOèž~’}ù›¢ävŸ^[j©6ªÄ‰1-ø»~Ú†«jÕÒ· ¦´0>é—Ƴ-Ì}‘kF<óŽ…S±±]@âöƒ*‹Øêñ‰•WH ÖScd.ƒRz¥ŒÊ¯7‹®s)äXl}ø»"ÓÁñ¦ ïvP…`ß‹.†-YâlMÀsrGZ¨SE®‡u+M-p[2Ð9PqqF¯ÛÓùA+°O×¶ªV)ì`F÷ïÊžÀdLÊ„ñöš¤¡Žò¿IÁ[åô†Æ.–FK"ÓÖÅg¶áHdÝøžz×›r¶¸Ll õÝÿ ýñP9ZŒò£lפØäŽþ6]å1Ó8lâèj&¼¾¥ð\íƒ{ÓQÝÚ}1z’M;ü}R×™ôL¥JÊ<º¹cšƒ’tšý¥éµ,Èù]}zÛ#Ðø’ ¤Éä=¤ÿÈÊÓ0ÑÛª f1‹ƒï"’D&œ5óë% é…¹¤»p Ëexg»_Fr:§×—¯ Þµ*¢e.mtÎ#ñ7ìlp\˜vÆxWÑR¿Åqù(¼„f³.é›JVÅOGs‡¾åW%®¨¡<@Ä;OÛÄè%¯›œB9Zi1]0÷%Ù uМ »éSoDú’ÔË\6‡ªpåÔ÷¾‡Ý…r½ADOz’ßÇÎ{q¹ê})ÿ~bq nåúè…0üÌêJ=õtÏh#TMª¹ì,/Šéž;nÅ+ÍÙ0$5479¶Ôà1îzš^ÉÁ3ëâÅTä‹´ú¼(h·›+‘öËý2¨_ Ó…îÏ==uú±sj,ÚD6¸M`¸¦ýüèåz EÃ0‰Ë~êlÛ Œà9ø3ÚO˜áS§Ê¶Ç°7}b'¾ÇÚ¥îÅZ%k$T~A~ÚŠß aÓþŸé%”^- 3œG) ö}6WñLß dg|2Ækf6UßåŠÌÄCÆ?\ÀZ…” 2èí»ñw"}_Ô^£.Äh•ýnbú­Hέ9ãÜ.Èc3[KybéL¶?„tù# ’ir‹BØ/KmÕ2£=úr¸ê¿z#Úâ›ÖÍVM±‚qÞb ﮎL·ÿ|¹ç³Ø@Ï÷:f[¾¼ÀÃ¥H‹ñäv hÔ“þcØò6¡w) éSI@+¤¢2ÛÃîÉYåþQÍÔƒ®Q^:„T6“O©Í£a¶>ÄrѵåœAðôªbZíI±ò‚@‚’qÍQàÍšõ¯ƒ¯Ç~Hؤ0 JmÙ~Üfz¯ã–üícÐE½•¦=.à_ ¦rJÀËAÚŠZ­ºÕzÙQ … Yb»ßs‚¥1åjw²ƒPjf]Cæï€‘Yr6/àœs 9‹AÉ6á“ãgÙÝ1ØçÇ3­38à(Øn¥4ÿT| ôíFÁ:7à6§„Ùã@}Ãê]#ü†tˆ`è–°~·ÈƒE«2¨õñJYì:Éø™šc'¸#U,öÅ`Q*‹¶Àlñœ,‰[…üÃëÉChf‰öbsÆ ÖŸ¨G2Åõ!¤Ÿµør­±ÃÄüo„ò€fË4¤ u?Zháø;ƒX¿I]Ón±µgâ¨zëjB\#¸ß,Aþü5ógb‰nú¿VåÚ¬‘±‰ ‰Ï†«Àwtr ‚W-óMºÃMÿÐéý©0þ o`ÇeY£˜zü<±¯IÚÍûA4¯bý,²˜Ã4‚@-[T Ìúp8HÃz8 pð©â—‡ÂoI³èI|/bÏ '”ò3ïú³‚ÈdŒ×´Òl§ÔSþ²kôïS¸g ýîçHI6íc&“bÁÉý°j"\ׇ<”Wç»ïÐ8ÎÏ)F´ï€ˆïJ×Së÷W”+üãRižÖ=ï_Ûæ©@6Óó=FØJ™7£Pq¹9ù Ò-P&3F`6ãh†Ò0^ŒÅ ‚E5ª‘ž­úf.ЊBQŸðÄòúi2¨_©·CãëÇ“·ŽåH„äpYÑt…†ÖÿÜ·êöPOL”M[¦õî ò:€›25d£oFdeuß‹€tHGB 2}Éá+2œ™%òï7F€¬¶tŠWëÕ“YtxèàäOi!²´ Ø;cÍ{<¹Éáæñž¾žŽ°ØE˜]%€ þj.Ó¦ ƒ²Ì…Xß_Ũ¦O¥4l‡9VÁN¥%z›UyçÈV'C¨¤!‰Õ¸ÊQIGXø¢9m¡5àá?cdkdTÆ0ÆÝ{ÜØÍ-›G}2¹àZüíIº˜=T‰5(°ÓSîøáŒ™‡ÇßçU!!ínïèR{teP¼¨‹ás¬ž(”ãh| "…&à:ep®1¿É zÛVR’š÷IÎÔn½(AîÖì«*-ãu]FÖu¨`®5Z(´X«ÁßeÁ׆¼ –þÓ§-¦#ëØV2÷°×™å¡!>u6}ˆkŠN1d•ŸŒ ÕUH6Ú+!3·™dÜuÍP«Žën+ü¥ë/¥¸w¥/öRåö—¹œÊ+u^Â0åöŒ”¸l””½P!R”‘Úæ£¾%A úîTñ± ÐKw|\uÍG}í®Á`ä×ò9ë÷{þ}tÂÖ‡D—ÛNbP:¥‘’ñöñsÃ>£)¿ó,þ\eŸ¯(X4cJ·©:3ÒkÉ"s=.¦“Ï.#KÀ‘Ü_ rxº ¦@‡ç¶øµ¾ë v–µbzòÔBë¶j4v h~€¦AXwøR “zX{. ë`N ˬ“çzÔ*ênfPç§v}£’B\Ëd·Cƒæè"_ER“ÏFŒtíˆ@ôv⑞ҽ"œ$[´i[}Ø?yU¡¢t”³û&Üxµ> òCÆ)S´½,ÖÆµÐŒTT¹UCg1&ùsv¶ï9QRʰ½Ñ쉋 ´(öÒ˜8õo¢Noz¸;`Üû¡UvðÆ¢r0BÇBÒby:¢‹  Å‹å/5Ï1:3ˆƒG›véL¬¿aGå€Í‚Óêé¾OJœw¯ÂxÖxe^€QF ¬J½§[ãý3ÕC6r‡8 lÁrïM3&Û:ÊœO5ö}ÛÇjÕ;‡³@ȳ‚zB¬ µ›us¬kÙ%Ï)V™fVž£ÉÉ OM®Þ7ßÕEŒÂ¸,µË d÷ŸŽ¯,m௘;øŒ QêXŸ}lj¯-¯K5\Y“w|ù™^Œ1. ÀAUÎå[1Å2dlha~RŒg¼d ó˜+…’iÅ׌—‹)â^§çýP fMÁ³«Ô?#ä08Ã’‹2šê­OCÒŽi%Î…?æ†\;ÓðµæD9Þ]-WAL H[<_â³3dÅ$'Tã¦XËá=ŒÅ‡*[ÍeHz=þ|êûÍ;águƒFnZÿ°l<œ¨axÞ)¡Ù5µå`g­’u+zmÿÛß )/¹šTƒoY¾óDñl߇¸|Lí)iÌÁA^ÚYj“âûúË &<Ÿ_Ý+ ¥ŠRRuPΗ XLÁà /~Í€ÂB¹È…CöÂê÷rC`ŒH¬6n£“vç9ÈÅ%ÿR¬y5ƦÊãiô=9_ÑZe'Y} ˆ2Ó1ƒÊ n ƒ©ƒçØoŸP'Ôÿz‰¾QÌÛ·Æcï@bè=|ùiyÿh;Ãò¥öX(C|¬TÇB®ÐÿdÙ‹GŠ ¼ËP†íÖDö¯¹’A(è?¤ÀØ_Ý ‘ŒF÷d:”ï´í²:¢ßV< ¸ø ·…Ú驲FˆÌò“VÈ(ãÐú ovG¡Ú7ø“ÔzrãOÇ £k´—鳜ÆÇ„%ùÊÒè¼5`Û#ÞR…![§¢ŸÔâ·vÞøæW6—„Ô[÷¹A¥­ š\I¹@^„X÷®ú«i}ÎÚªà©C©T.JÕ껃elh°$ì ÆÛZs-W!Ói$÷äºMjâ3A‘ÑÂcÄ(¶³œÉÇFKS„“|óGꮩí,7!»Å¯ „$©²¥\œg‰è…÷ˆãûù}õ‘`ýy#¢j¥éž_-®œ Ô¾ ÏÙ/àJì«'ƒc[{d+&)žÐ×pb`ÿÑW×]~|¼3Ë ¹®"v01ïU˜ô@rðËØ8Û£0ÐTÙ*_Œ£ç%mmà¾4›‚ÞsKOæ6LˆsØ”bTtHrˆde„¾è 0]ÿÁ ÞKŽÕâ€vÌ‹.`PC·wYò ËLCM~N5zc½›/Öƒœ×ýr¦ÉÕx÷GBw+WɃ=pÓÏ£†‹êV“Â!÷¡[É´òÓÊßÍN6‡²a®—bXäq)9qØ[€³éeøÎXé ¾Ï¾3—®ÜˆÁŒ`Û jž*u–h9Ë7 ‚àxCó NÓ·2Ö<û¢*–£×ø¯úa“f@ÌÕ—§^Èk­F¹ù ŒÏe,4Ú1f®q«¯^f¸Uì^.6ž¯Ã™hô'²30*ò¾•*Å*2Êjµ.öc ¢·Ū ØÔteòŒP¡iZîŸ$²±ÍªÓ¢OÅB¥~Ù£T‰ðná!…ê¦í“JNXÓÇÚ8qöìSP·ïrñº&™cÁºªKlÈiÑ}‹ úXuÝÌ[@»?ìÛ+zåà¿éÝ`¦l¼Äeþÿ RÉ|)½h_ËŠþææÏÑ=p"™µ³¹J&û+”½ølÕ-¡J¹Ij(ã%9ÞþÆÎæÊÍÁü:LD0Ï'ÍÁë',µØ7ˆÈˆ_|3Zzj(Q'‘–>qu‹5mŒCT ªUŠæ³ Z9cñ—¹‡£ÂP™ÑÓÃ;Òã:›t~‰à(éÙâú7ÿè¥yÆ4'åhëŸcG¿GßäYÝ ÄqHW®Œáe¡ðGIù £i>úQäå®i-¢dC@J+FÚgß›n\߃‚Êî&YQBîY/‹wò}FÄE‚Öºh5,L¤c Kø®)ì~bg¶]ý$Ó2;6'W•wjlé"ø Úãð%Ý;ó"劷i8ø3Óî7»Ë÷½Ž4Oìèã'ÐYv×gY±¯€ôü‹Žúy dB¾†@H DŇ;[íPá˜#ËçyRq›6u ññTÃæop¿”b68{YnÈ?˜mß·ôõåËàŸuujüÑo[:?\ë<”35ÐFC²0z€·s¶ÿ‰£rt9l$,(ŹänÜÆþ„o|+ƒ@6¹K¦˜”á[0X4_ºRSþ+mÌ9ÁÈóC©ëxÌÃx^°*õ,‚+â¿Lä1‘2¼½¬àCÁçsM8´" Ϥ;­@¶¾¶¼DÏ­LgT!¬³Ê³N(V”µZ§©"ãW9S±k¢ Ùø89¹èËÚR뉌9ºx}Ó{ h3C“‡ͪ”ÄÒΜ°¦}kr=•ÿ'W‚]ä'½d5&¦°ë Ï¿X››Î´B.p}Íóª ›‡7*™E*L—øKP™Ñ¬ÂV"OáŠбö-"‹oÙåûaÍúˆ£èŸ–0`OÖ=’,BäMÁv¢:¡?ãlXkÕïcg°‚ç» G,˜ûe‹’R]8ަNÿñ{—0†ã©R¡\j²iÿ>Øv´–ÝÓ³árMÃXa5Tì_ä¸/«¾QuX†ÞE"\ãkXB—8o†7‚ ÒüT´ïŒ!ÛïÔɪ–°³z„;Ô™KEK³¢Ø‹âˆßÌG;ñÇeÕ0íkr¹é.h¢CÈ!þ­IÃõóÌ¢º+#í<ÔÛCºmã2Ž‹wBˆh'“ÃËŸ~GäIº ±>Vª>¾<Š4iµ(ÔQõSKNwxž×&±ÅkܳëSuP2goW=vëbË?7眅(žreÅ–úÀߊÍôjÖ‰Œâ‘úføŒh?ÏÅ»'Ì:"¤ÐêÜôfdf@Y°Y±2ÊåW¹A€äò+à^¿^9ÙŒ?ëÅOõ ìŸ ÅÊa šNdgD=;Aøòú¸·5¤ëÊLÃP•Ç·J•#?+j÷´r®{VË™‰íÌ(8&•¤›É\fÕ¯Ä,ÝÈ4’9ÅHåp|ÛfÁZ 6§äëËÊ×ñ›aFjQòbQ¡$[gâ»ú(DDëqëéÝKûÍð§Ë=jO—C.ض²Ó¾:I¾ñ¤XÇè- »}žëhÝ¡ï#àFÏò¥´y`N?×—å­g ʾ&ä×}gxâ,T„~¢ Å”üœ•ÎÖŒ[¿Ï›à4傇 9 ^uº.M«­á“÷ï+-³lJÍKõp+eóPROø!1óâTÞ’ð3§,9ã}¤»‰ý ÒÈšõ옌œ¸i§aP(Nl¶Š£pƒ{ªô‰ïù'«|‡ö¸^6؇¦/âŒM7…U²áêærìÈnõzoW.ûô¸¼dÇèc@u˺šìƒrƒ™v-µ‰ßõu'ŒïìÄ åøÞ}Þ j+Ü<¤¦&³%†pîAÅDøÍŸ D°œÊAÄöñ‚‘¶çI+_.ÚÆy+l«Ã"·¡1ñò(l7G°ªŒ9ïéùg•óþdÍw‰Al’ú•C£™jÓlpÀ‘—Šâ2x«†ð‡ òïêyid)!@w9C¨mŠÉü×igôXC ©(™u Y¯ßZvN’‡Uˆt8ÂÌ/H )®eÍØB¡5Ab ߟ¶«@€ÇN[Õwwé 2tÊ1†Ê; ÕêÎøKI…x€\Ç(àuò§…òfÆŠñ%þýíD;rk•’Ö‚-ÛÔü@‚ÖuiEÙg®¾N«Ô*ýÕôèõ‘w•Ã&¯*å¡Á;µp§H=šÐ³å¿hðî’CÐ’Ìã‰âqÆEš»˜wFM·vhXåhþ/‰&EcofÂîçŽo«…æ.Aô0µ4‹=tËÅ>Ö‚° ·ZfÿgÁÒ„{÷T}t2Ç©ærGoR\¬øU&ÌwAT3ÐsLL­\vfÿ'z;§,-ÜM-¥G‰q‘-ddù0åÂmô˜´0+w ¸æÐ9Å¥á¥:¥ýÂSAíj¢”i}ÈÔ¬@ò cÊ/ÊÆ|T2k…àø¯‡è.„wM‹k®›Ä;íÝê¡”ôHWšØ9:s ·Ï¦ÊáKy-5¯lÌþÚu`$g¸EÈ2Öýy†Æl“gê“H{™¯K¡þ˜…ˈû?ü^vW¾Å-¤F}¿oÖkÐ Š|¦&]tÉd÷ð¸‹Õ£[Æ6„Ȧ;ÇZħPgó¬sR•T6~çȱԽc2zRÀúͦa¢§?:u×9Œï+_f1)Yê²Rð9¡jmK‹ëÐ\•„± ¥('úubnVÓ¤¤}ÍL­å5ÙŒ~÷Œ™ûKx~KíT»2E9f»è”žß7X$MçK]«5”Ém›â8Šjsœ¨«°‚Ìú”Ößiù¥E7·1˜<Õl—D‹ÕÓzs‚óÞ|´§0ñ½Ô²wÿÉ¿-@ž—Û>Kïß½%U1=—¢ó\EÒ™2¸wæ;X«×Cò+bœH åäà¦ö4hö&ßj¿@®;ǘ]NÇo’Q.ŠoÁ‹R2ª©£ú&Y÷SsJÛ¥%ºº®Ë™Çðó ™9=û8YB+ÄBcH »êá¤ýXгð8V´¾ªyáÞÉËv—ª®$Ÿ<-gmæŠáØGWq~@¥î‹éª´¿Ií5äxF„1I® ã—CûöòßIž´ ¢¼TG’ŽiÀ²„®¬P¶k¤qD”È:íhÎÁYdQVshž…XïD oçÖãzíE‰¦«^¿©X˜„ÄëüÂK¡ªÊ«’ÒvîIŒª˜ä˜ïoÔ&º×î g…?Êüå„܃Ȱ‹<,ÎÏ!p#ü/± %!NH÷³¹Ã‚Ÿ]=M€þdò (‹¨Ôä2 _JIUe#FÜêOk<Ô˜· æ« ¼òwÐù…X3Lÿ¢Ëhs+ûÕqAÝÄ{«RìÙì…°±Žª¶ öÙÞ‘¾~—Gš¿«Õ\A, f…ˆ±;¼‘„”âçï:à²ÂS\y+_h)å›ðô˜•pª°xˆYIŠÇ ÷O½öª"Cov‚‹y}x“*é9Íêw4j‰°EquÖœþ i,ލœ”†ã[‚«³íÚBê$n'8ÅÒC‡¬;’ûhÐSÕ¬VÎtÃòîœ(“ðº2i¡MŽŸ5žßØàÛ-IðÚÊÑôyobȸLÆ/rã*@“À¨ÇÌkWÊÆ^I¾ÇÅÀ’xZqA-hMtу~qœJ‡TîÈ}OÅ yVÛçs (¶A€ýQ¶è°;*ýä7‹¶Óóï|ÖLcÛ|`’ù(Ú5ôÁÍ‘3 EŽ×xÏ[õf;ä¿môIŒhD°©•­š\â3àÝ”H ñZÆæz4]ÿ—%[°¶PðS’&ê!ŸÁZwå:¤ðÛ3«'¹µaCN%SCVœ,Hɶ„5È›žt Ý8’+Kas4˜×–8BoMkå^¿Ì*|öçѬ¶òwÅ Ù.ÌË峸›&uåx•{!Ü‹¹Ý¶œÖI£ËÍ…€Õi£ó®å@ÀfZd#s3e]VƒR C®ˆÍgV3 ”k“ÃLËIÀ¼ãñ⦗ls͵OÏΡ2fE¶þL¶_ßf[€¸ÐŠõ©öVÕQã0Û5Ýb®×'HþW[qP…Ê ;D¹£xsñn¹¦6ï~¢ÖFÑûïÁÉûrôcž´gN¢qسX0š|¡d"3{mR'Þ˜Hœï%OVw¦<+ ÁO÷ÅQY%BxöT®Ö]+$‡,´(¹"妒 ‰ÃÑØE˜Y.ý…E¯'×–å„ïçÕh%Âë›åGtj}‹‰â¸‚×–£U+õ÷£rå0¹§&¨Qï*?=?#iÏ[˜ ~„'ZÔgU¤i„›ºï"¤öÔŽëø‘FvÃð$ÇAe½ÛûwpE¾8"~ÞÛQ®(h/ë³#´jÉHÆsOÓ“Þ1‚„Ði+øé Íð>9œÓ2ã T}‡ …Ôª»jÃúOs‰”Èr°'"æ\K1;)+HüfŠ:ë&ÑçQþö<{¹²ÍoféBÂÚy@¯pÛ½ÍSoþéÊfKåiy@UIo—(Š_-¢ ±7-!»#ÛÝWH…HL ûhMžZ?ýå<ë;†ÖŽ;L]’4~ à[†Æ…®ü¥Æ Öp@5@+9Š¢Í‰õÐפÜÊçÞVød+Þ&l2ÖH<Ôòö·o†~Ú­ö"Vç8›Ï»â&ºè{¾ a€Ääø›¬•‡ÖzŸè.ÑÞ•ÅšÁWâ•-ZÃUI”`;ªZžß.<FUTœ#YD8Tq´"úHe“Ÿ¹JvÎÎì·§—éòÛ=»Ì+s‰zL»Š°l­Æû2¦U&B¿T‘ñJçDžQ(ºP®Zl¦9IE5ä\¢±Úëú8ʯ6X„ti„Š…Ÿ ]!nÁ¦Íp°Wµ¤Ä­õKýÌ“nT®7àOp¿Hê†Íì\@`"â||~ÅÊÖå¸.„$^û6¾'ù$ùÿ3~¹\ëÓÜ‚Ñ|ÉçܹÇLIõ,£äp§Øæ€DX~÷wmÝÍæ@„K°‘TF)7ÚjSK†1]‚›jXkµ^pŒpK§¬žà[,`Ðò1ÆqÅÀ¤SX*úøÓ£†Ï) “Ê›ÍÙÀõ¨’s{ã‹ÈýNpŠÂÖ¹7^R9ƒnìé $2D¥"‘ºc£§ÝqjªWÚ:Ô’J`¢E‹ΰ("»Ý —QW0Óù-H‹¦—èŽPRw‹nOÜ…a& ;®RÛ%„ÿ-xRºR©¶%ìø}—ÁŠÂ*Œû/ãwÅX*ÆÂ`=Ì)Ù@)˜çåÇIÁV¹„$î9]ÍqAØÜé»êˆ³‰­rˆ84L’FCÙüÍæ\Fù™9òë=À!7äVTõŠ)›Ò„Õ‰a<(ZÊ}ÍW6Û@<’éýã>ÁL.>gùdƒ‡ÁÒû%È1 5`wàPRvE§àTÁV„)}Zóºo9Ó<ø¬"k?=:;×Ó¨Æsgÿ° uhá¦ý¢r6÷{Ûa¡ðNSú-]£ôØwÇ?C›zh¹§—  ¤‹Ñûb„ÙDp¬•}gœÇfZo :¼ã5(f´Yê ¦g'qrÚôŪTZä%²«S t M݉û <¿Æå¸aI†×!nKÅqY ß2êÙ%À¯É1u\j•[¹·JéA»wRVFÕ„ÐV\îmì~(š²PÖéœ0r¯´Á^Þ¾§‹P…ù…¤@k ûtDZø!|¢`Äå ÞàE朜@VƒÆþíÒ\à-ÊU¹l$fpÉèNXc`y!«eЃn®†u"{<@á ½|A)™/­/Ûd–&'ðtåGT£‡só/Ÿm‰¬×³Þ)pv"÷%ÕPŠ&Š@¥‰n­’Òá38›°Þ×Üø7cSwÜþ.[©|o÷Q‘‚úµmïb!ÈÆüxÃiT©-@ ô‰Içr¨ý!Þ"¢åFΪ¢øädün‚áµúîºÆ¢~–®Iw_&ñÌmÔ”±o¦¹våÍÿ¬7 —}ÑÊ„hÄ\™Í:sQe‰ý[Ë\ZPþáß\»îjqunÑDЂ÷qO×—÷Z߿פΠ*Ž%»¤oï…›øŠüþÛ@Ïã Å¯peÙ;ÉSN£ê/Ä^ ÛBr‡¶ô›÷›‚¼Ûü½¹2TÃ÷é¨Ä1Ø×»a{œŒ›x· òJıÝNÛ{F)Õ¸f˜¯ëÔO°ŠûŒîÀ}yŸBlþἙ穗ÇÁ6©¸W”4šŽ–Þ5V@Ãã…Xs£ŒrnïàÙ­Ü̉êDFïCeG&ÂÏ O…–)ÌÖô3ô+^³ðe©mÊ•)~@m—ö 4Ül.Àƒ µî2í)5jÉO/t¾õ½ ³j|"‰Xìøß8‰ ï£H²9OÖ‚®þoó·6*ŸeÍÁ«zŸš»\62ŸªŽX05ÃM:ìç°,gÞ.ý´ÆŠ±iìZ‰ß…;Sœ,`KV Xê$l„Dù8µSaÒËJµÉ—@(š”û~+FpïÀûòŠc“À¹èL·8ù>ÆÇ÷Ž$tgj>ÆCŸF\,»öö/Úöd•]0S‡ë“å„t7Kˆ&¦B’u;ýÚ ²e_×ıÕy“°c·Rèü$SY_Pû Þ´ÊXàwg¨¯¬_Üà/ûHt¨ãùîGÙcÉ÷Ë>e5¡ÈR7è>¢Ú¿ðÒþ“è*2œ`{vÔT%4M_è”åS”wT úX*P°a0JÉ/¶99Ú’û"ñ’ÒW•ªqAò‹»XêyQÉa_¾±·m­oö…Ôˆ}œìnÂ5[¡í›­VÛõ„&©–L¸L«¼0vìØ?Gã…o qœ‚$l˜zn‚ˆ5:Þâ÷Å€„™0 îKgÐñk’™-@qw«Ö{…µ«´=Õ¡ÅNÆy¦:Yµ2s2† «Üݽ)év¢By+2 ¡Õ×£˜g;¤Ê£¢vO¼/øðÀ__Ë­I‡š¾ $°g>6jmœ¿{Pl6;aˆØõâÈÏnäàk¾Í°(=½Ãôý¤§WÉí¦ob}í€Ój°#Ã…ê3™› Œ`L7/t&È„†L?Î]ás ÿ¼ç<Ï)6C¿µ‡Ù~sù=ÈpuQ©boçežóŽúŒ<.åZ_"ª?ÒÓ%Aºßgܾ+=]=(̓Üs»¯ÀG|å%sq‘¼1Š=ol߀¿Ø(š˜J+Cúæ‰GHúMÜ:@Ûùˇxç¹Wݱ&·]ÊÚ®lAÄ€r×gôÕ3¼Ãi&ä>LQ°wàøg5}æbJæ«þ|wcŽòZ‹¶…ø¨÷6ÉV»Ÿ¿1é}ñªEï÷ ÜdÃÚÁYbãObÉ(x—  iã¥#šD›hùÔTSøÇEuÙ;£-}èç<üi¥eί(®”›‚l2ôØ™ÉeÝfjJ:ˆyaÐ-" 0C‘1XÆêàþlåÖ|NJOLâ®3ÀN‘1çh8C¬(RSøòäuG¼íG =£¯aóêöCsç’$ˆR,Æ% E•L]¯ò99)$¶Ø/uá'9ÛNMa©‹réd~t¢C‡|kPDQ¶tF®óªªÅU—Q´K??/8Ç±Ôøÿkû § 6X1ªça"-¼îN*_=ÙÖ[K#Nûª÷æà¼)kíüå/Ö¤š‚¾j²‚²6!˜I¶I¦Ùì½J:ÆÝ‚š>¸:0ÉÑÔ÷õD?Ï|zLk Hc¾B'ÙmTp e5*”…ÇR+vWÑ™ÍÈ´Ô’Û{Ò4`Að’³üŽSB8ê±`ä9Ù½/(úQ7ƒ€ûtBíÖ>Ã_«8‰n5_ÐÏÎ]V&×åŠ|5–öÕ–•Òl'²Wç3|Zž¬‚xÊ"C§ J¹¥—ôW¿þ¿…†Z›EQÖ¿®RY¦¼þY­3 . ½Š‘Š1Åp •¥(¦¿ô#ñ„©3…َ呤‰G/ºh çÌFÎØŒ‹àYw†Ø}ãæ¸~TfO{–ˆÖÀN`½±S‰®5¨X¼¶¬ó6à?vé;t`G#Û‹Ìtn{ª{Ø4ó(ÓÝ¾ä– ×Ò"^7;úñpNÅ‘æoüøwý„—^Úi­3q[Mˆ‹¬ èÂÙ»\33é*{]~ÅZDËþ» 2ä’FœÊÑ}[ÌÇý®)@‡ùh‰‘ªö¾ºwû¸øg€lnM×èróp_ê @˜Öó5ÇP…é­âzWÀVn£ÀÎè´ü·¦ìT‘¬4k5ù{"K?Ñ9eñÕ¾æê_—Å-]FºoHîÓ|Z‹¬Š6ío Ç#@ð&FêLgVŒÊ´½#2f®ƒb3ùÆîyÚmÃGÒbQÅYšR kyZ$¨.lK,«áPuŽ“Xa_þÝÂØø¼2äx ’Zà·–ˆÁFyŠkÈ0ÐgÉM ”±Ë%J\Ê÷ àoå;{êêÁÍNDûP1DîܧANN7Í¢Oˆ¢Ðuâx ž‚mfn®¦õ«ËUÒ¸‹£æÄ¹^$l!#Ð÷U.\—_¸¯Æ{÷a|’)C¾vÝg Pß–Ÿ;[òÀwäÍÂ}‘ ý-0 èh•>9²yë‚?ÿ@þ/~Ñ#¬Lé³8ƒ¼fnðÇ3r‘Šç³¿vÃs£éxÓ)qy6Éž£]Rš·¥Èa/'Ò_´>¨ì=±qËë::- ªl½Žâl©WÝÕWË«àÜ–“#ÿêP˜Múæ ¹­çKîpù€ êbãÑ‚Ú[½5³}Rײ㕘6r=šÏE3ÄƬÆAË%%žó‡¯Œ/Tv„~AZ›7«é©» 5Ó}G¸& }F€jý`¯ìâž)ø¬ètÇ4=øQ“4âé.$ç ߢ[åÓaâ:¿‡è«IÊkaáŽH5ϘÐó`ƒ\á+‹Á W@/‘; Ëœ¹!8<•n÷㉓mŒcÉe,ÓÏ5nß‚fÜÜÿÑb‚+=WEè9Õ®­àz=N!6é—ÅÐ×<‚¢ÕÕÉ–-¬xK{ KÝGü ÎPLÙý—ß<š–g­>Љgñ|IaMé8ñO ¬ Q>©Ë'4ŒÇu6ržû*¥£Ú¥Cq {6Åý5*˜ÌH–µ7³îe·#5i¤Ò—S¼³¡Lx£ØTbÅõg©»«ÃècǽMg⋞´©èથºÉXà°˜íHÈ_ _M@v£~¸Yû³.5”Tz +å/hɌƈ®ûIÌB_Ùëfhõ §Ñ³dNCʶ‹†™;=VO“ì¬öÇ¿-–}§~9^MvÀJ 5ÑË@Ì‚J3VLµy¡õ˜ö> ±© ý¬µù×¾ôœ}ÞŸH露GäÇÛ€{¶ÄZYD+/\ÅÒ÷ w‘¨7r™ù©=[5ö*˜ù‡i.|M¼å¨˜0É8>óŒ5áÄÚ^mŒ‚ÊqÚ.l} èw^—î7³AÐJ΂øy:†™ôL![t MÝ~Öö3Ý{Žþ8+¤M ¯('Ŭ"u¯ÙŒmÎö‰ÖÁÐTD|#]lOÿÐÔ®sp…ƒ7 ¹~#þ4‡é¡D‰—õ®…ð3;zÎÞ<.|Å•˜Dz0W\\×`YŽF±3‹%/o´g?¿Wi‘‹¡„²rO4køpÝ{È{™Ù@0ð‰eúê¦|éÞ9Oú­KFIY\5š£¢ŸØêÃcJD½æX©h5“ èϤgÂ…s¨ÿÏÊ2 ›&’M 5”u.«“Ó®A.BIŒê‘K ò£øs¶pÕ î×}~üŠýhgI¼*rr:”‰Áí~P»2ˆ~û—r •Ê“N¿ ZV ‰Ç&˜b‡æåª‹AÏ×–isÞŸïשQ4=¤÷ÞÚ§6ìÂ7‘"X —e¦£ Tþ®è’«˜H¹ h9'D<àîj=A¯Uæ66^‡Ó³fôš¢*–”‹cï¿ôo(w¥È-°ã5‡_nŽÊe¹«ÓªF9>cN†J$gÐ?Ë£ ­ÌO2¾ :0—¸f€9²Ý¯eÙü'bc;+âWöÑâIS¿î×X_Û×s£¼ù©!gía4·.ÏlüŽV~†» M×_z1®ó•µ–ÌJÇ91/´uIQ¨qAË›iÒj²ZÐÌ-³õûâô¬b÷cÐà|h© ? ÄCœÉ <Ã_Á°\‹ü¦Hªê§Æé¾%½J°åFÍ´ýâÓãt’ Ñ‡'Ò¥Q*Ô¤@OÊvRVb¾¢ð’£äY¥|C¿égø%³7¡I´TÌ`’ƒ>6§MeB‹Á'³•œÌA냮jYò}î©#êK(®†ºŸÑ¬"dålº(xfâ7™O{<Ÿ‡È’sè|£zÒ§ä´Ÿ‡%êÿYE¼Š8ìv*˜ù‡i'”¸†;ˆ)¡/sÏ÷rÞ Q†?”†µ5[@.gVûéªè[ÝÍ7¼BçwUêÈÉ/àPÔÿO…°Y>ZÅýÌ«Ò3ýÞ,BsþAa:n!bFÅ ¿êZä×<ËW5Kµ§6xwø·™Su.qÞ–F›^ybÏÊ (§ÍÇD¬ŽÝÓúõ êCü„rq¿­Ö‘²]r^ ÀHÙ¿:dz(I(ÛË×vÚÛ¥ô¹äŠö¸È…c—M'»íÈù ᔥˆ{3¬µƒØÙ¦½fQr9­¨•ß+v”~ï½Ù][MBI3]Nyüªø`!ã1Ôo% ![Âoþ¶méÒö[ýþÇ@úÊ[çžïð™z×l‹«É45ÜGÕÙ-Ix×:^îm?¯ñì$ò麶·}´!ˆÕ/+›ÛÏy-éàÊå¦;]‡l‡G¸X íQVÝväGÖùVê¡?Š@Ïá-{ÛHÜïMU¼6ñþ8‹:°ŒlO•åvý7ˬ*€ŽâF;êÆ”Õ$+Ó}zÓŸ_íöÒMé%—%žø²üxv&{nA…ðiž‘ª½Â‹j{*YÒJ UŒJͼÅZ-”k¦F/.LjkÝ»²,qÛ5,Õ‡]üÊž¶ô Wsd{ÿpbã§±¶zµ*ÀµC‚žúÂÞgø*ðÁÝ-÷o>ÍYÊÅ7€Ç¡p¶`f±ÒBBc¶…öŒs±ŠÚ!TYïlj+2Üúÿèåýhž&A'J(›™¡o3”çFð”Ï*eIF¶{h›sȬi%3aûÀ÷åb(l‡¯¹yŠTÙÿ÷®Äòœy.E_€;…X˜‰GPO¨;“’´)cG2ñ¦œá'`æ; Xåž8yXÞ|Ç·]Hrf'§-‡ÝjYˆ™ø¤ö¦4›aµR“Ú(ÅÛZ>2„ØÊ]ÊH&Ür¥õ¬}ƒ’Vî›éÍEî¬:î¡üII¬×–Å-æ“ 1 ÑC!XÏ1Ã$±€¯Tò Bà@}éY¤kV“q¤ÌW:×}oÀzi2ÐÁPÙo³ð(ª²úÞ#Ò¶ÎQrWˆ0B×Àô7{„HýFqgÄ)ɰ-Ì0¥MnŽéRÖˆVÅôu8ÿy:8Öú4Ëy‹ Nu%蘿–íùõfJ٨贃dýaWä ù¨àïST@S³×†eôý̪:-Ëaþ6R§šÚ]°°Ó¹|¦h$ÞB9úfù¨Šé|­ý]5™HÒÜã´r.IÕ˜ž-]oÑæ£–N¿âÇ*ÅS`˾ûw¿ƒ¿^˜:ÓšV•¦N„ååê`ü@ÿpÖ·%å‚ÜUuua0­Wâð¯ò„„¾ºaÈTßRÚ樆ò÷VˆXúüŠ{ïÏjûº€‘u(xùÞ5tá•„§=:‡šÌ*vû»ÙÁÝiî³H¬i›\#c|XBÖÓ¸…*8däJûñ­mÇ(’¼@BèÔ¨<õhI´ý¥‹' ä{3Af¡“Iîã}]¹lÕ©§¢ìsžÃqcÑ–;Íj2zü¦ÓÐêJSsÀC4Á3”%—ýºÿ¢O·ì©Ê‰%­>¯WL5Õ/E € Á~5· ³>›¸}¡Ô±þY‚µæ}™€té.´,›‰£—»êf@ÌØ¸\]´Xþãéםſ,7+µß 1ø°Ùh]¶Œ¸a€ó G$â3è‚ýë=í²5îZ¯OÏ–:!ZÕsyA´õoZ Á%|ø¥äÂYdOàXðí_ð?(ãAñÃ*ª.ìsxhª”o—@ýýŽöD‡Jw“ uS.‰©.›‹ë¾+OLýÿÁ¡-ä 0ØÖ6å`æÁªl áa0;{‡ÌÚxáxI$‰úâÛßF¢-£Œ#ÚJµ² ¢¬à£=4µíKùX‡;¯º œC¥fîä"ôt1¶¦•Š4¾ð+‘¸hîíž8¦Ò zñêf» Bòsc?‡ÎÒUEÜQ6ŽÖ Ëu µãÇVÜÐ$·ÂÃÞœ§‘BÌ#±»_ÌæÉw~Aèm‹7ë"Jou(ƒ¿à†ã4”jޤ@ÍggL¬ÏÙ ±‰ sº'“nÉcG̱Û÷ŒIÈ¥Y~/Ò Ä‹ ¹k³udˆÛ<£!^•‹4ñþšê”¡§®çö—„Š,Àvu‚'ƒÉÅ€~¼°iñÐp”=Ù&ÞØŒ5Y'‰B ˜[–ž˜n’öbè†Ò¥Q=ê-ƒ›5Ù-KÜgR)[v’¦>™| ƨoÓò÷‘×µ7ãCæ(ƒ=ý>êÛßlóhþcb‡}4Ž•Âˆ*VaìÀ(çn”Nð3f,±gö=ò¥7è’"4|äW›_¿¬*q³ÏXL ËâÞ­q›‡J{Or_ÿáõ“ZÿMPi÷Öw.N‘d0öm¼Å"ªˆ¯$²ã ^2dU†$ï>‡’ÁB7 ¼m1°pmÄX؆)=G×üézÍþôjë"È8Jz¦m0xg׳ÉDþ¿%KV9rB€À„•ï1˜¯®PĦL¡,4ѱ<4cÊÃIó)FàóÍH­dÎÛe.›%jÍS¯Í9­ØVÌs²½¼îK_r„^@F U´A×â;ßå|Ö·D(¿Á7kú|ë ®ìé^˜þ±O^æÎôÎUU?j1N BÈ£´ð8ë">Ýâ=Mü!°Jþ0Ûâ!cšºkètÑoPïTŠ3ɪ«Ç¬°°á¨Ø L²‹~@'þ»›˜ÀÊïç¼ sœŸUÑK&Sà‚bòÛí¶³Ü[I«¿×£¾bYDúåK«h÷&ŒÓ½Ç2S»§yãõ`w þüó¢P[ÜDî¾0سZYAv“¥Ö!XÓ]Ä'X·el·3a€$ƒ¡VÅÔ{¡’o¼í¬Ôº$¦ˆEžZUýàõf‚ӫв”8§5·HJüðWÍO2s:œª;¢ë·x ~0í/÷µm«~X´ªÛŸ¸º+¦ŸfI×Ècª@1~ÏòÏ¢`ÚQÏÚV”añCä*íîƒß1÷-Y#uEq:;qû{Z~âÞeƒªÿñ§{á¥EžYèj©©’æ}4¨&¾-f@«æŒM ò™ã?1èn-H²P‘ ]£†/Òºu»HÞåZˆ¶öŒú‘»»·|V´>Ò•W€CÝ6uùÏ·ÿ,l¸C«â‰tÂèþÊðÊ’=¡DòÙá…ß,ž~£Z8ÚöËÚÆ}¹™®›ƒúÇ+"¾B¢ö;G /†ëU-H"”¹_:º÷ðyÕ‚ÙÐë|éYR(¥ Ÿ&F'~ó&ÂȤ4ïìÔ›S4ýûAÕØmË,©£ôŽÄŽª‚˜<¼i9{vCörN|À÷´Tkô?òZjÖ¤;ŠP,»ÖÅù³Ðž”(#Ý(à¬NQ÷ï^­¯jìhS²´Ýûî-ûXä¾vl¼ñè©Tȶ(צg[ûÕ0ÃþG½®ðuç7iûv††áŸàÕ3>X%°¹‹—S½¥±lY[Q™¡Kt[ ]´ŽCÒæZKkËi7ð~6~ïeˆ»˜ÅìéQñ‚j ³D ÷=ŽÿBÓ"Ðs`¤¯1…)Ë?«¡òÐÛæ-*¥û™Û÷Ž×ßñž<+2»ù&¾†<]ÃW¿•£xÿL–4ÂHŸ”MPpy\¿ïh"ù‘|¿g1 "Ûj‡¨\ᘯŸP y¸rðNö"xP»í@ñïú“®t#~¼5™jÞøÂÅS½Ë‡ý¿Ç‹~$=¼3§`ªs@ ?‹MMuÔÝÑ+I§}ŠwF)òŠóâž^Ë8oÃ+A‡üxšÚ“/oþ¤ûÿ pUÍ]G£ýŒßÉV+4^) €ïµ¿ç~Ò©V†e ¬Ž‰ksv9¶ëmúZÙz'™mõîȺtQj8/¿Í:‹’ê[Î|vØÉË6—rüŒ[Ša_Š>X:D`È`/ˆѬáÈ…sßõ—ááèj ›v*CÑ*Ù‘ü©Oz³{üÙØ­Õrøž}×)r/€Þ3ôBLEDž€Ï¹§ÆË<íAÐ=¬–{’‚*s^ K>…a¦õßåø|ˆè1„F-õ+=Ç<»¼çâRïy(ï¨_r¦dWˆH –ý¥²jÓ ñþ’Þ5ﯗ€¼Ë•y\ê}£j Y̺œðN«¹Ï`Ó P`ñÍ$,¿‚ê¡ i©ÿ]ó<ÅðB‘¶)DÙÅAùvsÓNù–w¿ wÙv­H ô #u×]‡™Ì:˜ÁÓÛfi#taÙŒ,”´~]Z„ƸֻIήßà¡D[+CµÛæçè¥jÃã“­úÌh"—Í'Ú¿¦OHYTÍK¸·]j*«ãã|‡dÿšPÛÇ}I€xþ”R{{¬àV×Òpv•\¹D&Ñ1‰‘ä ,|˜D_2Ntú=Õkùeå)ÒQBò,‹ yÈ“‰s~K±Ž°ZÎé×] R¡K× d‰GÇïfg®ö®#üæÿ·^âð¯©ÿþ…–máèªmƘDãʽFŸd¯”=zî€çí«F|ô娩@B2F,d|ÛÈ'«©/;E–y–ªqW}æ  G¶½[¼VScþ±‡Ùø€ÜGî¹aBsÔ4ÏÄ`O™ߢQ+ÑØ{ã\­=ý×4 €.@ƒJ–„èE••nšòmèJi'Û'ŽÎrŽt.b`c²7¡P]Ž—ùÐâ¡KT¨í”tŽ+w;@âZËB$$t%TÉÒøšÅ9Êxà§ç ¬Áª2hÓyŸô=1Z|x ÖŠClãcÿóÖÄ$`&X†8׿’["kjÇñâµûgß~¥í¦ƒ9>â·ƒBv’d”îGV+/ñzÑ"ÃáÙ?ºTNŠ@bqÒíââKìÿù¯8˜÷·6ÈËbɪ)d§ nž_ÏsG„ Äw˜@ÿä«í#ú=ÌI[C¡?‰þ¿ÄTÃЃœ£`•¯ ÄŠspç¹x÷òŸÒæx.û:x×€ö/ªÔ?gí4 ¨½–Ô/#gÅwH¼"ߤ2µHrIgO¯Oú¦ÈõÇÙûÉz°!“µAôó&ˆ¦&dŸ eZ_*Ê;÷Æž4Opk+LâäþEuœÿ„aï¶o2Ž[XRaþ–lº“°¬„ê^±ûÑ÷µÂ¡ 4€ÔVa‚dyï¶~v¸»Ü2#,½„µ„®`Þœ'ä-!:~lj‰âíŸâH–N©;«™Ž˜+’>ÞÙ6v’ˆî~ñ©#aÈÔc¥ ìvû6±åd]m¶ÙÕ‘]Ú0|Ev‹@ï>« <Ôw•…~¼mõ b£Hñµx«‚;¹Êl\=yä§'Ò»L~X÷‰ j^ñÆx¹Fx¡IHGOóïòä6Z¾Âíè€:R®";ÔJŸmàòT :%-? }1C:gº7ýõÁœ±ß¨öò÷ ä @±âd›@‰½¨-"]¨?}rb²è3Ü9šŸ|RÒ„þ«‹¬äiÍU‚ÖŸƒÁ'ËùK+¡Š_i>ŠÝÊÊéþéïÏ´4&Ь !ˆªEh²P.GÈI¬Z-Ó®z ”Òþ/Ó(>X½$Üþz¯pQ©×€®Á—…ûldƒ­n~x»m$‘‚d+GŠÚˆÑA²^‚º‘ïeý«ÝÚã~ü¾\êy‰_œ?*¬±@"íÕ¥¶·ÆÝ-•»±°:ö•\ÕÛLkòû­}©˜IHÛØ& ¦˜˜çf¡ðÎev5õU$Œ­)§ç7'{T»É¦‡˜9Áe/‡//7¹yÝ)ÊâTÒþN÷ªâN &L#`ã(Íã–×q|^E¢|¾C N5ѸUœ4¸|àðïÁÉŠRm¼Â‚1±üÓ*:Šý/uzNXgêg°‰‰Út""ÈËÛVŒ8yoŽ£¹Ç‚ìÐ(Ay‰} ñ„´†¦­`I ]GDYÙ`’~s£ ø„Ëæñß>kz¹"çC'"(iĺá)*‡¬ú56"¡牟 KSXü‹žÖpä¼õ^vá„Ò‘,š³o9wÞ`Êî<#Ÿ™CìÔÙ‰óq›  ëüÃ`Û[%J¾ 0&Ô{…Ʋ²!:ÛÈÚÓ ©ííNsg‡di½ëWÿð¦{ƒöÆ”vYàÖV?Û­ÿÅ8ü_úØs‚Ç  ¸Dy% ªŽþJÆþ3²kÓv]ÐÙ–‰ w¨*ÉU^³ˆÖ¬y Ý Z ú.ÕiÓëòv§®¹®FõaHf ýeÒ!æpÖQ˜wR­ðÜi»Ð_œC»ÿÝå)Bˆ^šý­øÜE+„Z7ëb,§¼`Ô±´³n Ücþ¤äy9ó ^MgÛ\ó\œÌÊµÃ“ÔÆŽˆÃÜÆï¥ÍÕ4Y1g®Ômž/u‡Í'.¿ZÒÛü-¼|Û‚¤Ø‚Sä}½3«¼÷#®™Kk^×PÚ¸{‡®ðÕ§oRQ¼5’"Åí/s»¦©¥Ô>ö‘%sVËè°Z5xœ¢ÜÈ‚":µâq•%‹}HÞUÄ®â©LPÕ‰dLÓOJŒ˜×i#ob4I”°[Oþ1q7ÐÝk±<2½Šm.ç‘_µ^¢·6¦ŠjšeÁRÛ0·N]vxñ±v< “_ÈžAy›v0OÓÒÚQ ý ³ÖaÛ¥ÞÏDNøC>ßGêT¢¬–ÒsB¥Ë alˆOþ'÷Îúö¸K=0•ÞÒ¢O¦’èM>¤í“âÍÑ1ú÷®ö6yÄ{©žXU 6 zâ\Žß_Éè£V6ÐŽ‚k7pD!D»‚'§i Y׎—,õ¦7þ¤“ú‘p>l’. F„üê> Œç”ü¢:D°•À¢¾ñRºWÙü=˜IçJý¾p;L|•œ¼€/A26™›t:¼<2/½¡—¨HYñÔ×îvR¥ßϪÄ0Ý?€~˜“âÆç‰/ÚZgÉ 4Or ±[aû¨eÆI€ãu¿„^•Ìñ›2–ßlkK¾FðdÎÃý` `s“¹ò“SóÊÀí†ê‚=,æQtÉÖ•¤¼%ýúºˆlb=¨sZÊêÍz‰1³X÷]ôÕWNa2{”;ºyœg™?à{±€7\ÃmsN¡:’£×¯Ái8èÔœ‘›AÇT\¥Ôiʰííè b}1é‡#_#Pÿ ›u©àP°Ss1ç öªÃÅXÿÞõѲG5ÑYvVf!«R±ZÔÖr^]ZiÕâ†} ™)ñK„xÊ…þ߯ýÀJvÿž]¥Ó¦TédcöM4ÉàÏq3ßšŒ¦h”—­ö¨n‚÷‰ÂÈÌ¿ÈÖÖnóò”h»W²6£w(‰´Ê9½pÓ¹+ƒ ô²››*ä?Ü)T-Bneœh/‰òÖUçÙLûP‹%õ}Ú`öÅÎÈøV^Á½ýæš:„ÄËñ))’ž¿W]p‚ÒBÀý¹4r÷“†Z2_<Ífìù-ù‹UƧˆ&OH¼ ¿†OJ NÉA¿ã9öéæÃ¬_Cz®«—ñäƒø‘ä^ÑHµþÌæ·);@´d*öò¯l+HÄ~pt‚%pó¥þsY×%϶˜Û §<•¥2wÒÏârÌÿÇkL›2( ÆË±â Å êÕ‚ „aaL`L~NPï„^Á@ÐÁÇ£cLYýålz9B€ðxÒŽpó¬ÝðœÕï´»QùV( ï–æ¶ýÕ²Ãéæ%h 4Ü$"únûxeꀈh2Ø;w)KŽþ d œ$ îç6ƒ…ŸU³lCS$ââÉ·ep…*{V.ûa!©,ëŸ7ý+ëÍç($ЦÁéEç—ϼ;mGušà›Û©E—H†ý…šúŠgeîQ4½©ÂÖ±<"üHA,9Szø1óÒ’Ô9XRk“@ HxâNÅ1ÇÕnY+ö-G¾•ÀÊé¾…BŽÄ—ü'ÚÐqFTÿì]qˆ³–0AaÝeì¶&í46MKa òS8£ÔbÂtk!÷tèbz¶«A§' 0Qj™:‹ÿâ·.ò<0ò:j AÅy̯ —Á•€óðZ">Roƒ¡›DwèwÆxQßY )ìv·ê„»Ç•O¯ÎçkÀ`. un2LgFmÔg!É £ˆ²Z “Áôp`ß–¿GòÅe%?/<±mfµ×ØØ(³c*jÜ$ßv§-JÅsGê^÷Þüí;îÌÄcEïÅ,k/³ kme%ޤOÖ>ùõSˆ/ È:wfd«VŸ>ÇÖ›‡0³j*æëü?ãdn(nÒ\È2QT~¼žÚ¿(ûÒGÙBòTåYK^Oñ"¯ÉØÍ«=ùEb69|Q´ï®üã³ÅÖMÍ5 &¹QÎȉÆË¹´q´1NZày}ÅP_JB¯0NìTÕHÃm<™Èïæ$³y+³µú"›Gž©8\UìPRp.Uh"S2WN±Ò+'¹ýÅu7…"E¢sÞf%Ÿwz\0ØÓ7ÁQÍ+wl¼.è“QÊ\NÂUPbϦh»uó 4§«X%¹ëÐb“4¤¸è´ÙäX¤)ÖÒn¾©ú²y! >ôdBf'»,jOû!œàJEdUuˆ và÷ž©dz lêèu>¼é(|«óv’—\sõ­? IÌ€Øa~PC} ¤  éŽC¹ÁlêG, ^K»·ÕLcN—"¶¢ðs(Χ‡«ðà PîI€^XÓÃ:\ðuòAìL‡WÜÓü}:–Û?è83AE'Ýÿ$yeÁçýI1ÀçÁ¨h„lwíåÀ‘¡:ÀmѼÛZwÁb–ÿc&? Ö‹ˆÓí;Â䎥\— ¾ZdÌÞóÍ BuÙs¾–ˆ† Klî¬}‚{Ù–<°»^›yÁFaLJHBÕÕˆg.íë0J‰âΪ“Ô+`Zê÷Ÿ›ø©ûñ‹’l²æ&w×âàtGÓUà%|"„HkX@Š7êDéÅȪ—ÿàg{ÒdyÐí¦‚ú4FÓØDâr8ZÝžÔAÁ[TëPaKòçQ£(µY—Ë=±# »íúDW›¿Ûç8 j0V¼® ˆÈ[—a?ÿÛ¿l#|%ÝŽ{=ð Êÿ½Ã‰ÍY7ë²9[§ÙÁSØ·úâ0‰[ÝF x¿!Â+2Œ®ˆŠÞzûˤwÑV2,"´"(Dà sb|õw[|¥lõŒ ‚ªÎzà΄µÄ² fLŽûƒãæsඉäÂ[oápC×È<áì™M¤Ä»Qê%Ò{OìÕå–¤=7ûo/-\î•çŠMíŒÖ ž¸7qñð—^,üO 3·$ ]‡ãIƒý~ ¹eß"‚)‹²] ^r®nË€¥‘šfòêX…ÑüÕÿx0Š«”wóë”ò:šùiןò£ÿÕz€bµK÷>ÎD*º&nÌÒuuÊ örùG.2{Z[x®’ü©X’‰)ÀD˜‰3§2¶í¥è”×-²,Ùšìv‡ý®}"9«IhûE!ãá±åß<ÕUŸÿ|¤ð§«ñù®S¬q¼¯÷£Ê×"{’Õ²<²7`HYïŒ*ØI ÊOb.¦q!Kq”à“zçuO͆Ötm)’ÙW†UÏÅt þ{<¤I៬ÄD…ŸQÿJ>yGçk”üÞž‘¿Iä$ÚÏÇóòÕ}vB4`IÔNœì<»Yv͈&—ò®i´hˆíÓdôzR‹Ð’•Gr³Y+qͶ éaî‚"L²Ro¶JÐ!a¿<0UÿÇÙ{$¡áU*^=:½§w›Mö÷j%%ŒÖ ©Yæo0¾©O¯„oÆÃ·HMOÑòãL@”Ey¤qx‰Üæ/ëúV“ã3?šúô9ɺ»ôšÏTW0ÊXÿ=¬¢—ƒC„Ç}ÓöVÚKp•¡‚õ.f¦ L m]:øg QÀµåÐÒ\Dbzµ Ä¦×Jwºs*üë×éȰ‘«i|Sã½_À ×E¸ 5!ÌÒ3ß÷þœ@ÓJ<ãëµ/,r™u-oÉU¦þ÷MÊ(¨³lù‰ÜïITn‚I%T” Ï÷^YË•µ$X̰èåã‚ÿÚl®Ýò_Ï–·³[×öܧƒaÈðͩȎ)[Îg"¥¨,ðLq,T¯‚bÐ -ÕtòlÖhÂå°ËŽÒÚ9šÈE3¬©±ì$À‚ÏÂfƲ‹Äåc©NRå#Q…"ꨓÖS>ìàÖµšÁÖi ô£G·OÍDªbôÔhFr×`,âQ¾24ILKÁyØP~t‘.䎉™©e‹—ÿÊÒéëI‘CõV¬œ Ÿôýsð„Ì:ñ1Zî"HR /QÞF:$¯Æ€šhµ Ô›2šƒy#13 Ó-ôu¸†(w•„â«…ýOÙ£WwµݺõŠºù\“-¹ÃW˜J¥ê^İòi<åm²8ÑGq•"C&»ùšKú©!ŽÊÃûë´’Óou€“ÏUûû¸~õ¯‚lˆ‚Ä™t›ëóº\Q^—Þ? ".ð?²Ò¿K)2ëËñTê"]o×úw]éÖÃK4-•sùÁçyÑšÒO²{q)ÅÛ(»Zr—'ël ¿‡s,×Ôœ{ qY1\àiJ†ÚÞæÊ¥ÌÒM538UfjNYf º" 5Œˆç1°×M8ýVî²JÞ«æ¬'‡ö×jî'‡õ>‚8®÷• âí «Ñ:Ú’gø=çE"…_ ñÅ„ìòšðÆC+Â/þÑYt-ñxGáê;àÇ';¸á!äëê åÃøßîôüã|˜í¶¬iì³¥ÜrPÞWŒ1?G³ñ П=’ù½]¨È^‚ìÌ9mU Ž5ë«â¨c7rQÒŠ~‰Ë¹Î˜‰ãÐ:¶óðýºÁÓÆù¥wYw²a-îÓN–̸‰|$)e£—@N¾n‚t"ͯ¦5»ãüª“,üÈ3kÕjÃ9PÀÕ¨Cú©Üd·{:™9‡ÁCPú«ÙH³˜z‡ rM—5²dêR.Æßhœ#.ÉÀñ-U`Þ†o ì,´–|þðeb`õNØð$^<+ÞÒ =t0(!KL§<{ S]ph9î €Ëö+°)ôŽ/ññ*Ç•®sNÃз‰’YÏÓ„Ä(ÇaÏÏÁÀ¤w™ž}5•"[üPh)¡êfú€ù‹ß9¨Z¥fD*¤Î(„*R›÷€îòâÞçQ1€JXh  ÚƒáÕr¿åŠÕµcº?Z'ìé¿mðG¿a×˱-Æ>ãH¨Ôôh'ËÜ@c'9^ÅU+Qèð8PÚ•BðÒSû»$°û™%rÞÛp £Ý3ŒÝîS"VòŸò.AêìøÎ¢ È®B Ý$Ót/ù]Â6Ø;2C´]*ìÿ‰% Ô)ß©úGÖXÍ G¿P®º9¾‘&öC_Óâ×{ˆB‘¥+™Äß+Ó#IÎzÔMˆq›Ë4Rdo[¬mÅÉnU`„„ÎÙrµA‹~¹»lxsóÑGz6K›'öþï.6*½«¸$‘I¬×º‚öïâ ù¬Òaå:»óP=‘M·‘dÍzÀÐ*ð©êñYÆîNfEÁÛy˜d|ò$;ó¼l©´d1Gúû ®âEiôaXWHé†Q1vOŒouïg˜ñŠÔéÕì&ÜÜZx‰£N:,—“6¹N-»g¸`è^ ! ì—‚ Zõ>ÆÈFöX-Ÿ ùžà[«öLÍ4q£ cëÌ|Üw ôm‘äÕ·µœˆÚ‹ÊY‡y9Ê–v>èsËaíÑgÕÑ>¶\LúÈK¥lcE^Bôt–}þëÆ:™oÔèIÝ–’­J(çTöwM7ú¾ÈT)Óߪ¸7pq8&`Vמ;å«j G¢Û Ë{)Ž)iòèôÁNåƒM|öÿäeϸ÷Ç9äRk½š¯ÆÇö… •ªñ¡œžÇŠý29¥ú¾i[5¶1Å ¬ÌŒA$Í"ßÎ\݃§ÁõφFýî胃+rP|r,2e]ê¢nOM¯£ø$«ÌðcïvZd€•oˆåŠºoÈv§duc;U€æK‘†ÖÇáæ½PÂÛ¤ÈG)4ï1Ufj¥Ó‚bºhAt K|£a’žÈsJøcþ°ºYØC%Cè\[&IÀ$îï?0.¬Öd‹ƒÜS!PXË‚*|¹ €ãýÎsækR›ñ}NZ†Õ. iä1ø0Q´&_Eð»iÝòV @Ž ŠÙÎÿÓ*œÍ÷¹@-‚sžD%ŒŽé¼÷áÒ3i'nX¯»‚Ùë…­ÖHü+rdô¥‘„”æáKF½­04d´6sdÕu\·ËL_2»³;qw¾8ø%Óp“k=)šFì+·š>Ý ¥%¥àðˆ= ‡Ù~Žkb ¼âfý—‹Íë‹× °™|ñ@&j~PV!yÒç åZ’;|ûWV4å}w]èlz¥l÷«¨™Ðçzrâ]Ø Ø­ÌçÁQ.ÚSÇ`Ï6¢Ï¢–ä<ÿð¦Þ¡ˆ¶XßÖœ)Xµ´ùáˆÔ4ù/}¶ì%CWµ{¥¤»M…)~ŒM¼Ü€Ú±rBÁÁß± òÉmRJŽ™c‹ÓŽ«aG„ùNñ¤ìûØ .É«=¯õsŽýyµ¹©=*ÀèyüЀTàõ9êö9Š8Úb»ôëºU²DÇùe¯_?d9EZrP‘Í ³ÁlžÝé&›XiUå¨fÉ¥0YŠ¥IWÚÆ…IÿwÏhQs$0ßå­®j‰mYRÏ7SE›“Í0é¼v°íÊbL=…1;ŽôÌvë¸.šCÙ[Ë÷2Z‚ðz¤ðV3@ÛøÎj|£‰uQ½Ì?°šÅ‚31@MN@À‹©Þ§€%ªh0D×#æœ×J¬Ø†’¨€öéÒ  wÅ,Ÿ–†#“·2ó4ˆ¢·á8Am2 ¿k#öеåqvøŽß´9Ä£ßG†®ˆâgKò n†JËÑÍZ’nM…ù]«H _½’h=÷BËæ…w®àý„g?±í@"ÆÜ1Õj"ÑPë{½C7÷âc`@yý~ ²Ü¡RW^µXk¾§·_ë±+\9®í…y (CÍàV/n½½ß! 8­ØÚî1RúO’ì ¬CÇñ Á‰©+ì-&º©Ê•Î[• òÜïðIUé½Þȃi•޳{@Œüx*öû³àd4ó~.Òr»7¨é+U:{Ù>ªõ—@M‡Ô] 1Â4ûÐ×#ýøéÕTaÊí݃·)ÉòҪ´à¾{ k!K ál†î^u:Mß)ìúSK´:|øý0—Ëΰ•Ž6q(åv€ªÝ© ^TobË2Ìécÿâótê;÷íšZÿ¤Þ3Ÿ`ãáª}U6ðÓøÜãg¾KP¯GûrfÊ7ïfLÃ<;;ÒÜdDw°Â(ë5±¨ÕnáÚ Û8ÇWžp÷XÊÁë©u13|þhçÂ’ì¯]ï—´‡2©¬}RÆ÷k£kˆŽçmmµ Mc…QãÓâhÃÿ8ág}磊鈥të{Y…ùÎ!ì!&uß±šŸÞÙpÈ7ü'üZZ{ ׉“>^I¿‰b+ ’Éñ3‡*Æ2Ï›îåpõ1Li¼¨Ï6¼á)Ãý¿M¦"t ãÑ@Ñ žúЇú‰Ùò»Øà{¦“^‹4œ¥ñÇ´=Ni1„r˜^ãchdÝæöO¦vL¢ƒK‡?|LTvÅž&)­Wµ9´‰N.žÏ–ÿ~HûMŸœ§>±Šre.äºò—5ó³Žc ¬é­2,î5 Þ´f©vúÖ;V–hx$¿c³òõ|mE¶öÔ÷öã—÷že\Y‘ÜJeZÀ×ÚÄïøç•ꉔ S½Ïý7Tÿ±?IOÔúØ?›Ûä53¿š.–“¤~æÝˆí¼‘Êò]=†¤Òd° 82ÃrûNEØ&WWµW<ùÙˆåÕ±dÄM.çÎæ³”Çêpœcêy><¼}]þkZö³,ñ 0:µ±Ù°Y4B~ü\µú–Œ5Þʨ&&cvyÛ8eú¢ p L½SÚЋ ò çŸžëÄß^wït¿P³A³ ½#“2©Åª®iéÍUˆxÒ!ø˜„ $n¬Ê‡Ž5é)ž&ŠxÝ…ù7JIŹmÓ™h¨6ëç 3ˆÓ”1ÎgË]Ž2ÆrίOüª”i2þ&·Ô`M6\rÕµÙ” KeœÙ ·‘À0&bÑ ÿL6؇oÓJÿÙ÷iojÉzMS_ÏÕ}N<:ÃDØtC…±ž ˜“ÞŸàT ¥Ýȼqì5ÎéÞé:õÒ—ŽŽŸŒ["Õµ%rAÝ/}wFkvFKüÔYgïSÏ:ÒÛÊÎPÆ]"¤Y¾ôápI‡YlþÞ—gu ºCÝÿµ^ÀµÔºØKØà+»!(¢—]ï zX#v i}R*SV}GÅÃDZÊx”*¨plMQ°]ˆŽ ÃÒ\/ÁS,¹Â†óÖÀÏÈ ½[k;ýß¶*PB´ø×LÅE„_nÊJÊù÷ÂÚ|H'û#Ý6-Ù ¿ü³³Žçã¾ÞîÄ_Ç™x ø•ÿpnæ­}Ò}ÊM%îW+='\²l¸“‡9L½âòg8€!DiaF}ÜÆoóoõ¬8üúPmn|ê±³ÉÕW_Ê'ômûÎL>fÍá6׎Ùy¯í]•kË%ókÅLÑȽôm%üoÌJåÜ¥“àb*1Ë9 6Éá5úÿ…D/Ùð.Oæ*ØRfºˆ>aG=¾Á6ÆÒ\ýP’iñqúKSJ x°.\ÍD»åw(ûE±±Þá¾»èÔ7Ó4€oÂÊÅßÄ+}ÉMÌ”èBgéLm¬JqÞ:l+€ažNf+ÏEj°ˆüëC-š\øx…sŠ.¼ÆDÌGFNkæ§ã5; 0h4»:Ü€¢ôI¿ÍƒIœ´_ƒõŠë:Ȭ9ц"¹M˜'ÿå´€yÕ#‡€÷üÌ—igÖyð[XëuÃ7¬k3ùœþ;ð”KXU%Ž&ë[WeùÓ»Àýw¡ÕÓ[5kS$óušz\F)Œ¥Êá™u¬U ÃwûÖ„ÇZ‹?Z£äÉcफÍöAI‰–êȘÎýÉ@-' Ëõݪ…lÀÆÑEÛÎd_Y«p¼«7d˜db,ŒèËYmè9äðÊ"þKqB€yEípï/ÎjU A }æ­J‹éÀäãàô˜k '›ä›ðm/Û3:¾¤Œx.°Ì» gšyœ|g †:ÈáµBqT?š¡g®þ‘4…"æ1î¤!váAg¨s2$øæfÊ—#˜ÅѸŽc!2©‘7‰¿t! ÑcF‡ÐDmg€Z¬Pãm®“5˜Ž ý¡m*Æiià"iÄ(ª²K©§ßvÿèW¡—e¶&„åðˆl±å]lgû'ðÿòÈöMÅð†£r ¥Ž6ƒ˜V3Œ›QP¯ÿ¢G“Ù³dwðf±ë¹übyÇ„…úëùãëN™ŠR5*ÙJJEЪü+¨&l¤fh)c+ÃÌ…¬ÈDÔI|Ù«$rI±ò£ky¬*nxBd—©RÅÚ<Ó>üøu™˜;û¸ó/ãÔÙD`q^'ð­r`´šË`vІ¸ Cv$'ƒ¡³AQ´9å¨CñóØÝÝÓÎXØÙr2qD(®môöå§ãÝËü¨TA &ŸpG}œjg¢î_û:p(ûÀé[>§%áY^´ýßç4t>Låüµ”~»$›îúbš™’ônßYV¸‘ìg9ýão<ë:ŒŸ@ðg(ere¾Â[#”´Øµ–+‘Ô{[™óƒt_Ü"¸™®°}4®ù>r,ªŸŠm6A¥›ÔʕɎ"t–À9PŒ¸m5–®pg8üDðú+Õ>^Ó_Z!’‘F‹7™Ñ×ÒÎGÛ)—‹4½…fWÆ }ø 8\s3¯d™ÅÃ.7HŽJKúH^zWsÍx>1ËZG¯ðc=@Ì‚þÌ€´³]ú±k†…kø´„ý§Ž©b°mfY¤¥/<>G?'9£²8°»´|¾óëxrÏz>ÎÛÙøÂ&vz<­’Qd’4«VãàÜe{ØèP£;FÀÆØ1¨Uùxñï„<TJHÒ!ÜÓ£·€Rs> ß½³Ù sÇçLèQé´«ÜûîÞn·€¹åÛãü¨‚ð¼OV ÀA¹ñ+²ÏËèÀ×y܃ŸŒ Î¶Ž'óuƒ#-%cðT¸ÜÝszH÷ É0ÞŠèx7ë<,Õ[+ÍÑC߇4³)'Z&ÿºý¬Ð‹µØê\.5þËcÄÐÕ’JA;ªØ¦Ù ‰Æø3 šœ9ˆŒ¼*}ªÂèœ6Yq…á×ë ) BV‹j>°w,n15az*œLþ!pÄæjV­‡!À@€]Êt”Ìæµ0dKëg|º(ûbÞLZxL¥ý@$c!ĈD!™&²F»èoûd-%æJáR¼»ƒMðÖtQ8Êe»çË»024PÛÀ´Cˆ)—™ÂR“?ÞÃtþ“E~”"M¸§ÄX½™²z2ÇO0%ûÖ ñÝ×¶ Ue9TX–ŠCofûBwj´Ëù?bq Ö¡—n3*à ã»kx›+“IyÊoü&8·k&Zd#n/¸Êî|\‡sªÜæ‰mÝ›™ÁÛ¥u͵ÞßfëŒÕc¬â i¸Œ'wt/xâY€B {$““)Oy%f½nz¥9XŽ*œ4¹àˆT© ‘ñ;·”Š…YR(%´ð.é?ü %µÎ¸)FÿÙRù+ïö+d±mûnŽúî¦ûø®vo;gôWÌOíKI+”·†²”º¸Š<–Mu‚~x[ß õ—HXÚ¼ŒPBÄ=›¿pyꢸTLÇF2(1D"‚ØuX~¬SÖzܲÚ÷y8¶ÉÛÛÇñ—/ÁgB*Äîáx öô´¦Ï®‘93Óõµ¡ØÕ(g†'3›ï<ØŸý 0….sgLÒg¼Äx'°N64yH)¤…ÐQrn"y›2ûÒc…^iâZ¤ê™.›T}G>Y$Ô;CìÅF¸„O7ENïm\oK`*5A|#Nɹ«Ÿ&3 ½9ªö–ÄGtö]¼d× ­¿à, ùeÚŸWëÈímœ¸ƒÒÞü‚NŽy™ê.’ŒR0R¯ d©—fL*Ì™4ª\•Oº†(cá>.h-®ŽlRf[Æ77•¹v ;#“dü`b©Ùôb²åÚÿ:£h9{Ä–ãúkB»ÁÃveÛíCîkÿWB[‡ûì°ºÜÒœ ÷³á•”ó²ÑÙýŠ­*ƒ>SŠ&;k~‡õ4äÜzÐÙ,¤l™¼lÃFl ¦°O,‚`žˆò6ÑÐ3%1&ÈCõ~-PÏVxãÀ;ûÔÄrÜÖßÜ$ÙxÁh©ƒ¯%ö´¡­×/½á0Å@Qz-õÎ.·š"\Kh3„,¹F|žÕ‘ϯÍý®‘¸9 ì†@ŠúЃRâYËè˜ö.æf@d}~ò±_‰QÔˆÙWf ø]1>zœIp¿»ÄÕ/Ì¿£›"ÇÅ Ñ]û‡CÃݽþé7œåóúÁ¯=ÁºÔÁ$»‡­CÉ.3‘(¹\Bºi*Še…aV.MÏÅà«f©cAÐ×SÙã/í!ÛðRýzgrs[»Ëh1µf o ‘Ôc¡ò¦á¤"Ô›WŠØšd¡ÄGô!G[Ä'|ÙlµçZ3p-Ú|âÙ•­ËKøÅ©ŸwTÖ&ER4êy.ÃE£DÇè·Û…$0kÖº ø]VeÅALsOë'䉋+"lë| Ä_¹{éÈÚªV“€XœBPš~eté0² iõÏì—Üu:é<^ö˜£/K#©ú Öv…½šU>°F0©›A£Ä ñv·ï“=ŽAÈ [vrÀ¢¿Îï7u²üu?B“ØtÓµŠÓßTüðL0c0j10@_<犮²,%'6ŽÎk ‘.¾â†à•·ñéÞÿ¯)÷©KÈwâß§5kJV%˜ÍêëSx<íŸà$ÿ£pÏZE¢=í¤¤¥aÖmF¼M %e£BÍß;˜hg|xð·ðù“~¸Ž’]Ý4~6þøËu1ld@’Sz÷Â-rÅXÍ”Å+Z†6èô }è™5VJ:ª*ç%Iµ§b.zò§%(.{ôÚyÊ•9=_ùHŠAܤ*t/=fxf,õÿñ¤$ÆÊÕ–ûZ-Îpº5òKæÏ<.K#ñufKÂÔ"žZðÁìØ#FÊ ^èøëj|ðNõðS6•M¡#6Â,o‹Ç3ËT€ ˺ªáÎ8K2EñAô8œ=ó¥‰"îdWL_u×Ov±!t|·äÀ®÷…Ò‚4¥‹Á½i99jñöKþU™(WÅß«_ä–Õýdc#BHޢ߉‘¥@‘Î{Œ_Y[²ÌR®ƒ»”ØbúÔc»—VÀ>¥·Òõ1<®€i7;ïw¢NŸ•ćý~pa²„s”ÑïZþ‚•ïì™Ï0ÿšõ=»ˆ@ÊÀ–ªHºi ³=§„Ìì êJ¥¨Ìvå‚´„Äë¡Z¸dIÑÆ3 |Dë­v¦.p¢¤±#Òó Ü9#'æBÒ¼CrîRYþn”±Fg" a]U»L¯¼õ†ç&4Á|‡ƒ2$xX]6éò['ÑmIb¦ôúQMÑ÷Oo¼Ö{ )裉æÔîeª¼ƒ…ˆßRÆÀåªdïõ“¸Á(EÀÉ›'ð´‰E>ŸAÔX:©®“!Äf(áŽE£ŸRòä¾Sô˜s^Ö†ÒÞ±›²ÀX¤»/³€yÏï9õ ̉H­–ÉÜ…DÞ-„ªà–üÆ5Ò–*±“æ© º™ó–‹?’] ì9I.0Ö Lw:BÙÍã³¼Æcá‘8à‡€”U˜ —½pž‡ª&Íñ É-`Ï2,bÓÄ:þ‹7E'=o­˜q$-'üI¸p^Ì”pqIÅÚ¹mEõ+gZ‰‹Ö)¢¯=– ;þÆ?R¥cÀôŸÆf'[Ð Œ¥ñ-j–!4ÐÙåȘ-›÷‹àL†p#-Jë{ŒÕ6Ùâî#—·%çä6ë‰Ô=MAF•Êéân‚/6‡G©HÚbÿ«‚~µéª`ö³MÑnN}Ô* É+¾ÿÝ’Hgøef’=ÁG, ‹%>arÆÆóU|ô–5Þ AsB£‰ûpõVÜæ£½ÌÌdrþäØ>:…Á'™Ä§#£“m•N*•gtf•2ŽÆ&TJ«ýËÊhÝH¶àèBìNj¬^"ŸK•ܨ!ˆ½SäCÜ J#´ ±>ˆ;gêA†õ¼¸ŒòŸûºYFÛìŸG¦iÀNö—ówR>™®•«~dù“3ë~'‚Û0@á&þ^˜¯A¸)hN/;Ì\Ë9¥·ƒD–ºýþ èøººű¹|3A¼±X“†¡qY‹4á7±WOQðœ[÷…Û“MF\M”\FRÍÃmYV{Ð~‰¹‹:gîËz¶•XÙ¢ò†»z±½ÞQ¿½~üÖ~Î8!лTºqwsžîh ±Œ¡u´8å‚ Kÿ¦ô+ z„< 7ì:JKôíŽBKJVÆþb‡†  ˆ¤v5ês»€ÌgÃ2,Æ|Uq!¹þ•àïOT³2Žó"9à›;¡Ér”1ÜQË ]Ô¸3ؘ¤Húœñ,/sçýˆqw”1ðÿ¶L5zúûZâ£R÷Ìx&8FÑ87ñXóŠÐË«íFýGÅqŸÿ%-MÜPþ¦¥Øªa¡¡ÂÚˆŽkÒ/¾ÆãT=éZÒ ¢plT0ŧ3wPyÍŽµPq,r† q‰(N"Ê”o¾¢RJâk8/wª.aCJº©Ý~ÔB´0æ6®Iº8.ªjKÌp?k–â“9üÉZþ/H ÐùgÃqt³þ!:öfªa[Útw#ÌÉ fuóñ°=^ .äjéË'œ§†f>, Û@uõ©1ñËäöɪðóÜméôÓµ5¦E%±h…O7÷íÉOÇ‚¼“;õØ>˜í’ÞEó)ƒŠì/ú­âwf'gÎz·Œ2¤ŒNñÆ¿¾Ý3ˆ4)8“ÁqöFjkÅÀ&JB©xXh™‘gwJMø ö'VKÃã:t•«;‹*É)B ê0-âöÛ¡ uîÁí*tvÚµŒh¿¨üWb&iêzËKø­¼"‰À†ô5SüV)ñFê§ U)X ûóå„BBä׳°lqÎ<½ ¯ÏXÃڹ㞽‡ë¶àÛ ¶ø©j  ðåkEñF:à ¶yê.Ú(,3’ “û$N±×:@[äUpq¡¢TÔ'…Ük‹ÿ7Ac5nÞ9Äï c)Œí&^¸7%iÚ.2^TGÑ ”¬Á¯P‰ÏÉ_úÆÏz«VNÕ5ñ¦²äjlØ1¡‚z‰¶¶6›£'h;H„El­®sÃâq€™ClhAˆh38ç°ìõÊaàíÚ.•U_‰ *eÔ)1*ô/¢TÝs)Ü™à9³>u“RÛ€Ëܘiª«Ÿç}t9pr*"á0ÁôX[©­kaœ`a*ÿe‘^_¸ƒº-3­Ú½ád“; [®³ª4ú+ñ^:7ޝî]†§x´æÆèÒ] %RÆQ=K9мnÂ=ÙÑ$R3+¾RFˆ×¢ˆ–¤™rg’Ä“Åãõõ-ä^3Š]Õ¥øTcc4èA¸4F ƒ ^ìÒßÒ‰èá[Ѳ"&p¾$™¨æ!'c9çhU¹ CRSˆOLÆÏB^ËnAÞ)—]`=~Y"»ì8LÝ“}$|Ù¦öLj¹¤ZÓÙ?+÷유h~0- ÅWfâ!Kx~ùMÙ[EÏÅ¿¨2€íÏ&òÉ3êRßð¢Ë|{¡êDN ‰ ë%MMþIÚe#¨6Ëé ÿzöËŠNÕíÝyn*.ùF+Hùçä“3 Óã^{ ÕbØ,Ñç.Çç‚i(Ö ŽÚµÜë±oIÂ|°­Ýi†.ûRãÜФ—ûÒ‡? LH#k–\v C-^'\ŒcFÒà|¼î§e¿àÅM½æÓC¼û·­³!c"Œô=œ¦î\»íú0ÁÚ…þ»ñ–r=¯“æ’? ç܆”EÇó'¢ˆ)ˆëôwb‘–uY%þ)Ÿ8â¶Š"¶'v¢BL«Þy‡m[;¾’ȉV:Ùê=÷JKkKű+x€…4x¥¶T¹qÿȰº/hiîRŒÿ±¹„°6¦£y>B—4EB%%=ÒQ»q¥¾Sb Ï?øg{a˜üVCÖ#‚ ô_1D•›Ûëp¿ZÅ‚°Ò‰ ªïc``+J­÷{š’ †ÌÕyÃ&#£²s6 ÓèÙIÀ›sÄlòZÔF$‰ˆÁw'¡x3óêÃߪü§ÆK\Ôv*‡Íì¬M'‡Þ½‰|ËF~¬Ypƒ9ᜱ–=%Njj·r("µ4*.yà0ôZ£‰ Çâ©Z¼ÓçÚ¢ôÍÅÃ$aHZË“e]ùèå8ÁOê³%kÕÕO·g3»ì‡Bh¿Øú¬ž°¤lÈ@97ß])B&»¢—g–&*‚ó5D Ò†‡Áf·ƒ˜0^sÐQ·RŒ7…¼ «,3FHCÌ{ÏÓN­ï§D¿úÜ~ª$k­Eam“@¨¼r¢§YÈf—Ná<Ö÷p -èÅ”MÝô‚ÒOÖwÜ‹"ÊL°þB= 18)8¤ yÁ?ΰžc‰fž¦bh¢ÔÃ{_­D IMŸ ßž\>¥”>gbtæž°Ú¤mç"I»kšùnñ{PžJqµ1®EØ–ÑI7Ö ‘›÷ŒXøæ_¤ÅºFƃl}XÜÌë~›@ãc†d‚ºëz¹tejõÖÌ—Îm–COI:j#,3›G~]¿+ð;çzCdnéXÄ K~Ö÷ªö%‹=mÌy±¥*܉»v‰9ùêWÍâË¥èYù`ÏŒçÚ+0öqؽb5ˆåÍ;™"Æoˆ™é×´ŠÄê«–½“Ñc™ÝÈßÌ[¤ðÕvâ6¤0jOÖ”ª¶È·ÝÐo ƒýô=HÔCW, ½÷õÉ™ˆ™?døJ kå¡.DsOßÞžY¿ïìA˹wõÓž5ðg€ˆõc•-UXu{+Õþ[Öü°•Üß|KÃõ¹‹-yõñÙgÃj›†[á5n‘㯠,­—»Å/öáÜæfFžr†AÿQÆ,›àOñs0ôÀ•r7læ–ôˆ¥uÛÝâ©¥î㉶T喇ý[[&|¤‚Ø‚G°ë& €,‡©Îô4²ÐAø@I—Þ1EÛç"&M£iõ³ëƒ}ùø¿ (:Y ¤î§‚ÄîP—ôCiÃîîAµyß>®„—Ϥ·ëw/~Ú YÍ>ÍUŒø¨×¾1€ˆ®µ`Ug~7…Š®íd²Q§ÉeIØ0ûYÈÁ&Œ H±êŠÐõ)\([øBgÌ]¤„¸â¯ÖvJîQøvŠ Ñ#’?>‘¤oQ0°oR Ó÷Ôƒxˆ%x |IM„r²$>,¨0ú‘•{ð]ë‰c¡)‘­HÛ_õʦj¨éùí‰_—4Ïœüˆ-ÈZŸó–?gÔ‰d +˜‘3ÇË0}\þÈón5Èr’A =0Õ­±3âòœ^=ÀHKˆê@ ¤aa5ÿ¥ñ‚NŠW©†µ> Y³È™ƒsâg9hÊ™øFïõ‰€l·¾qÁÛxò”D`Š ˆkŠYߎ"q _‹–ïaj#”’à†‡­V´1KˆMú¶LξSQì5V¸ã¢Ìïqm€~#½t×ZÖ«Þy3U3"¾ ué‚Ñžžò“ÏÄGBVA° ÿùB×>åoNy¡‚8Ô˜Áír2k¹`R¸„Õœ..ƒ)e#ö¥¾7¨MOÔØ/'Ý}?ÀK¬tßÏÕŽïõ܇I õ˜…Ov€§ÈGÇt%0ÛÖ'‚–ЦÓä÷ºÜ£`ãTí|?IÎÎäl‚Úg‘S”Q«P£=IÚ“ƒ•ò“‡´Ùð@s8ç[Dùõ`×€¨ÄŒêùÔ|õ’ÄG¥gýf4Ç9.Ï1 4¯-{1Ý9˜Ÿý‘n]Ð-ߤvàÎÙœx_ Цä<Òm´íz6ëéî/•éOB¶uá™Ã²æåùYö¬Ð HÞ&Ž2e5Î;5k(ØáÁdJ{dŸ¨1†©Ý•£ÉBž¾œiBÀ#‡!íÌ7jn¨8 °ïŸúб:tpN)§Ùó<¼VÌG´Ùû–«¡0 ð›fb[âþ°ì·œ¸4¦¬yEɇ½š3Zo^ÆçvKîÛõ ÊÉŽ‡Sœ‹€)±ûXüK°ƒ}úŸb·>ß= ܧÓë! …yu[Û§jæk܈"‘_Èe¼ŒDÅÉÿ>ñîvßÂaõ‚Æñ +Í´Ò,<ŠzAä±·jVW°©äi½™}:€ŠóE]xþí{q+_Žx ¢-áê­ ìcÐ’ÔLØ"v ÿýà|Jt>ìDC õÓÑøö’5¡£òô‘í¦Ç+xÿ:Òʃ¿™*Ÿ¹'ë>SF¤…`¹Â…½2»Ò» $4½O|'Û–ùh|Œ~¦ˆ‹ËW7ÎM f7ðsióNÕ!MVZ~¾¦mÔƒ1F‘ÆKÕ;$™÷‰ƒ¿.Õsõt|ÈýÍ\K8Ë ì¢˜PvÙ’ ®K¹¨Q‹2›Ãõ$Â-‰`€€gu“Ò>åâxl{øXþhŒÒrÔ+ è¸ë¨ùg%ðÁr[Þà»'ÂÉÛÓ=GGtNË’‹’y똽Ñ¥iCZî²™iñÀ1°½TWà =§ÊyèPq¤ÙˆZ@’Áb.cã *Þuð/Z×&û£¾Þ^FàhªßUÓO;Ú~ûmžI~>ýSm‚ëkŒU”9ju¯,/ž‡fà »ØvÀ’拸ˆÉuúššò%WQL½‘®ÊœÁf‰Lüës9üÓO~%!H[–לB2 ²OoF*Ç䚘ã¦ncè§7ĺG†îož¯U–UúA›Å„ˆ;©ÿ;Ò†fK‰ßŸ¯¥Uã~UEÚX,™6+Ì9ð7 ª®o[Ól…nyÐþ’ǘ1M XˆH•èJ¡$Úʈ_» yUÎÄilìÓ“¤£¦ª´¯o{^®c,70eY;fbåÝ“ƒo˜(ݾ¶Gšêf}x»Ft¯–¥WG÷Ïå¹¹Q‘$!S’+XÚ÷hÍ”‰Ì`—8‚A CÒÂ}{;+#£é09ÛoLU°WÿÑ<©ðÑÝFMȼÿ³æzÐ?Õ5lz–%@£|¥~RÓò²yô¥=(g €inÕ;¹ÝÙy…c¬ˆ´zñöx5‰ßYd.1°GA=[EÌÌ[L8KS€¹M¸²jV6“r¡!Ò„¨íÖ¤¦/Jl—ÙF0e%9>%˫~y窋ôID\;Üvÿ{¿)B \IÖYˆƒ6ÛT °¾—°UhD§bÏŸ!NߤrÛF3çÿOÝÜžÐ<°Ìššðp{kÔ ëBë|ví.(fV=Z™…sBdÈu´¾ÿ4fí¶ÒÉXr³O"fÆNÜÀ36ÀÁ‡ %íº†õ±éH1º®þuÆrkÞ9ÏWUOq$ Ê[xìò&¥÷i0.µçQ¨ä¡f@òŒŒxÕq2ét¨hޱP†˜ý³i §F"G ù´\¶I²=Év¶2a»Ë¢¦yø´fiúâÓžáØx‚aö“¼¢%´âlùº×tnçÕ@å*JÚˆXñÛ7>qR¸©­†Çï·àê»ÇÎW~~V%1ß/§¾¦ WÁùüCò*E(«ÑqD1]ù€Y*HŽuñ7“º/ÆòºJ(STåN!ª!Û†Vì÷ü\S³¡Wéði¬h|êš5±ß^ÖG.~Lg­‚ƒ/á¬O]âé«ÅØÑp@©Š,œSZeOú=¼]”8”þcæ ê§‹”L¯&pÅ<‚ h}è¥K™óqÑ‹F±ÄãH¾­fÎ#p~øj4Á%ÝçTµdªçœÔSlÚzų®È,õÒÔËïè@J@Çb·ó‹%}Úk„M¢s\aÑ´ÞÍÏâ$7‘Ü0ÖWóù®YäX¾z– @–úT'Üv5Bχù”ÐÆ|ºú&¶ý'úýÔïÆñ×i0±!Äây‘FP¾ÜL¾ÐHø¨w HÒÞZÜÀ¸}%êZ”ìÈì¢0z² ÙЉG¿‹[âד²¶>Ã]³Œ>_@xäÕЏú6Ï#žV¹ZFe_¤<î¾:Çb4JUNcX¹CËfzK-äù÷ñ/ePvÏwìW–ÐGõM&Û~X9#*T‰‡fúˆ‹7‹.`ºÕa? ©Ð|eÁ74õÆx²Â6´ïl¬Ôâ´Û«Ö]÷„P®æ17Þr­T¾Oñðe€ižNÓžàÒu+½ßþ–WT º»¼ŠÀ¤Ï?$Rù,ç*%pOyJl“/£„›x,* ùæä°Í0S¡‘¬yÉ× òA˳QTӮЍ¬r½P2¿ƒE…×ß)Åü‚@ÎÀÞÒ NIrg¼W­Îˆ IÎ-GÐÒ*+·t†SòG> y—ˆ J:4ÃDNÑ#‚×òÚ–]PáE©Äy*ŸÍíèÿÉÞ,çƒèÙ`ÛüÀRß"êôûÞ×Óö=J{Š' ¸äî‘ErP¼‚³Û©)ðš•¿“yŠ—ZµÑJ$·yÛ¡7ƒ±Ej„»cm†ß cáÅký€ÈZ’ó{?Šî}L°ì:È‹‰£KÂ)8§¥e‘äø‰IÞ|¢ÓY¨·e¹Èð).P6'5¸ÕG85æS½{/â,*õÚêÑ>•´ËrQë´[$5E†S“bQ"àtNºTί-p9ûµnkŠ£Ú‘}nŠgsØka‡N0ÿ¼aòޏCE•aަÔú”òÎz€ÿŽÜ_ºETùBûÒ@;•JŒ×je½}9nvØ:ÒϤ€A£8Aý;œûãÆœw¸ï%˜©i4ÓìtS¢ç(°OfqÛT”½ôÃdçØÓV¬­-×â簾zvT+aJÀ÷‘·S¢±¢ÇUåK33ºr¹2¶»„;ËÑOäߛ랳:S“þZ ³ÜÁ%xO òËî£ù%w»®!Uàüò¾•¢J+ P•ȑ•¸*ù×óHP´²p™ €b‹z÷Ïñ•wÌ~\­,âÚN ă ‰ !Y'52fÒ¸)¾zæ7‹¥­ùÒÖ‰©šCתk‚h<[Ë´)÷MIc¸(ɽ†e˜P\ÌRî.f™uý|n'¼¯˜i=‡Ñ¶Yê0|«Fnxh®d(€g6™­Û±™ÕÐ†äŒ ˆÿǧŞN¤_h˜ðuØH KªLÇÑTâÒ9¸Px;—Òtåc¯@×z=И¾MñÀ nâÈY Œ®0my›²Ö‹3P+̈ }¢†ý9OX™_¤aèïXâ;é±)¸;.Œn¹äV²t¤Qœ´ŽÑ¼÷7×ûUâÂÆ =1ÌÎp<õ—¼F¡EZ’¾ 9¶³$@·ïá÷„ö¿gF« Ï> ÷&|K\\jØìA¤ŸqïœLm!b(Ѐ_Ñ–^^ "üS)öóóÛì5´|w¸ã‡iýk•—9Zr¿a4ˆwd‚¹ßÃWw¹öˆj©¬W;Mç¾zÎcõŠÝd ¨,œ¾Ù'è€,Š“ðÖÞߨ›á 9iaƒ,Ixú{x4J°2Óÿrä„P,&ýnY"1„ ìÃòïÌÔ‹€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/DarkGardenMK.pfb0000664000175000017500000023372013544671343023252 0ustar rptlabrptlab00000000000000€%!PS-AdobeFont-1.0: DarkGardenMK 1.1 %%Title: DarkGardenMK %Version: 1.1 %%CreationDate: Wed Sep 10 17:07:49 2008 %%Creator: jonas,,, %Copyright: Copyright (C) 1999, 2000, 2004 Michal Kosmulski %Copyright: %Copyright: %Copyright: This font is free software; you can redistribute it and/or %Copyright: modify %Copyright: it under the terms of the GNU General Public License as %Copyright: published by %Copyright: the Free Software Foundation; either version 2 of the %Copyright: License, or %Copyright: (at your option) any later version. %Copyright: %Copyright: This font is distributed in the hope that it will be %Copyright: useful, %Copyright: but WITHOUT ANY WARRANTY; without even the implied warranty %Copyright: of %Copyright: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See %Copyright: the %Copyright: GNU General Public License for more details. %Copyright: %Copyright: You should have received a copy of the GNU General Public %Copyright: License %Copyright: along with this font; if not, write to the Free Software %Copyright: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %Copyright: %Copyright: As a special exception, if you create a document which uses %Copyright: this font, and embed this font or unaltered portions of %Copyright: this font into %Copyright: the document, this font does not by itself cause the %Copyright: resulting %Copyright: document to be covered by the GNU General Public License. %Copyright: This %Copyright: exception does not however invalidate any other reasons why %Copyright: the %Copyright: document might be covered by the GNU General Public %Copyright: License. If you %Copyright: modify this font, you may extend this exception to your %Copyright: version of the %Copyright: font, but you are not obligated to do so. If you do not %Copyright: wish to do so, %Copyright: delete this exception statement from your version. % Generated by FontForge 20071110 (http://fontforge.sf.net/) %%EndComments FontDirectory/DarkGardenMK known{/DarkGardenMK findfont dup/UniqueID known{dup /UniqueID get 4242151 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.000488281 0 0 0.000488281 0 0 ]readonly def /FontName /DarkGardenMK def /FontBBox {-23 -677 1915 2296 }readonly def /UniqueID 4242151 def /PaintType 0 def /FontInfo 10 dict dup begin /version (1.1) readonly def /Notice (Copyright \050C\051 1999, 2000, 2004 Michal Kosmulski \012\012\012This font is free software; you can redistribute it and/or modify\012it under the terms of the GNU General Public License as published by\012the Free Software Foundation; either version 2 of the License, or\012\050at your option\051 any later version.\012\012This font is distributed in the hope that it will be useful,\012but WITHOUT ANY WARRANTY; without even the implied warranty of\012MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\012GNU General Public License for more details.\012\012You should have received a copy of the GNU General Public License\012along with this font; if not, write to the Free Software\012Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\012\012As a special exception, if you create a document which uses\012this font, and embed this font or unaltered portions of this font into\012the document, this font does not by itself cause the resulting\012document to be covered by the GNU General Public License. This\012exception does not however invalidate any other reasons why the\012document might be covered by the GNU General Public License. If you\012modify this font, you may extend this exception to your version of the\012font, but you are not obligated to do so. If you do not wish to do so,\012delete this exception statement from your version.\012) readonly def % Copyright (C) 1999, 2000, 2004 Michal Kosmulski % % % This font is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This font is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this font; if not, write to the Free Software % Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. % % As a special exception, if you create a document which uses % this font, and embed this font or unaltered portions of this font into % the document, this font does not by itself cause the resulting % document to be covered by the GNU General Public License. This % exception does not however invalidate any other reasons why the % document might be covered by the GNU General Public License. If you % modify this font, you may extend this exception to your version of the % font, but you are not obligated to do so. If you do not wish to do so, % delete this exception statement from your version. /FullName (Dark Garden) readonly def /FamilyName (Dark Garden) readonly def /Weight (Medium) readonly def /FSType 0 def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -420 def /UnderlineThickness 80 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 1/glyph1 put dup 2/glyph2 put dup 32/space put dup 44/comma put dup 45/hyphen put dup 46/period put dup 58/colon put dup 59/semicolon put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 196/Adieresis put dup 211/Oacute put dup 214/Odieresis put dup 220/Udieresis put dup 223/germandbls put dup 228/adieresis put dup 243/oacute put dup 246/odieresis put dup 252/udieresis put readonly def currentdict end currentfile eexec €t?„ócl¨ZŸþûP´»'0*Zcù2ˆN¿QS­607ÑÆÍ)Jö£VÛ‘¬…Ë\J„i—u Ÿžf h°hTêŒsòÞ/»Ï…ÑZ¹8^R«¤ @€è qÆkðòé/ÝÆ±ˆùëk† P2æ«ËãCÆ×•!{Ys—.™©BQ¬ó¸ýL­¤°B­z[†$‰ò¼ Ë,ñsÿhé¨ñ‡Õà6þO!Bÿª|ªÝëžZSO£ù Ûoþ$÷¬n{ЧLòž»¥hòÊÆsG¹dô/û÷W…– ÉþY«îNZ Sâ$ àv â–Dœ|øÓ!Tâáò/Pf«¨÷#ý"vž¡¥…"®¤“jŸMöíàh¹Æ_ Úd'Õoù†r±Ôâb2›7orùÝbJ§Ý‚‡0F" š' <ðJw~,&V0¥¸ˆô+€ås=31c=‰|¨ëÆÛ!¬­Î|„ÿ^›ep*^ïêkÉ:€j÷AÑØ`ê~~»»~…Ü—&nÎø*Ð+së²1‚íÜ´§¾¨cG¡'ÀeCVOâ §cÿr ­z¢ f¯ôǨd~ÊHc-#.[óϤ‹ìo“+Î,8ÓçDI·ƒ©\Y#¦©§;ìÚ­^qšG%š³ÊžMm—ßZrÙNQøIú@.8‹"ÞOö«ÈÊfÂ[Drګ߇þfÔÂÁf>ç.ªÜd–£à!•|èJ5:\ßßiê3¬ÿ]‘0fšØ:ÝàŒŠÛ´|å~Æú‹˜)žãpÀw•Ú!#à¹gdÊ>j:Ü’C þus7¡Ôc}Ý'Ù%Û¿b‰4r”è»e¼SÖ w?¼ëÿ65™ÝÁ00ÛqF•‚g&!™×ôÍõâîGnÙ.=Þ%Þè µûamèúÖzÄ-ÙbÆÛðe+?ü˜ ÌÂà°[wì?{×8±R t1¦iUø»Æ«üT7FµB´;zŠôŠo±\£ÊicWƒËwa㸶v²[µŒÞ×y}`Ðg|¡öoB&–¯/—óî²ÑsÓóº­QPL/¸Nžy¢.¢Ër?1Œ2ÓW Ï »€Â[Dî>›x"2 އwtjñMr˜gÊ7ÙV |êGÛ¾_20Óª[’L]Éw¸€åðA™`;FýU3ëE6HM¢“ª¦¤µ½A=LqÐ sõÈŒÑwÂUÛnGã…®pÈ9nŸÆÞPì—J– †á)0cHQÊbëä;×Oh©à5‚@t/õÚmü“ B™wÒÍ(ÚQ‚ä`s”îªú }o káÞJ?_¡—÷˜6 `"—K(oÿõ©§U ?ÙãÁË=zÑá Œ÷ç`{Fó“T©žN¿¾kDÓ}GøJÕG¶û¨A1Œcjм>iM@b y VpÚÜèèú Z‡Fuݧyœ”B„œGÿ¬PHçDuYoŬžö•­ýµ¹=7Ó'¾ÚÂAq(ÉžÖ>p©=6‹@1¦yõm¿Âµ¢Ñx;2Ý‚“*T+‡@ý¯µ6­Û%–s‡jŒ Æe‹´á¡ý òΦÖ)e^H~ê·dº†!»0B—¯î{”-k;ßè^°´›W.Ö̃" ÌàÒ¡ô%rsÑD¸=¬¡”l”y)úü¤2VX;†Ž¦°gbÖ´b\‚“s}³wø'éøq¤‹¯W•O$­¢¿úHÏS¸‰jk¬{ýsX<¸ÚLP·["cà,p“.؇µsÌRC‘žqK!7¸#?>Aƒ§èéÜ›¾fÕsñùä¼EŸ‹ûRÔq©½aA±Iß“I¾3">LœÚ§ Þ¤ ¡gx¹{Šc,Ñÿè¸P{‡>`Œi^²zöÌÂ’0¯gÐKðüÄW-;#9á*9,HÓÞÄ„…9v¹Æ€Ó–9ÅÝCb½íut™0ÃÕ¦ôÝ}›†#à*؜Ԁ܉Ü>…ODqnŸMÜèÒi*oÖ;ÂgÆLX#hݺêòÛYB¿¡öß>—6º:3&ˆ•ïÓÎ÷&"Í¢X#¤Î|”÷: ˺1Ì–E‡ê>‚8¼kZ bHÛÅZa‰€ðmÚX!£ü»”ù(‚ôrÁ½ñ‘b'Ù‘°$²önFzìæzxC cU®x‚ÓŸÁ‹ÿå{Í.Žrõí3]‘Zó‘ÀËvï&g0è|ëd¶ë•«©jùöA߯òU"nÒ±ŸLF†• =k=÷äÿ :n-Od—óýj,2©3…¯Šq[Ojöëâ”W{¿Òn; ò>žt5,øyì‹q½WQº©†4ö]‚¸` T ±”Ðô³4¬~Ëg–¼!áÙ{цõ…snÝ8€šéJ ÆâŽPF .T·(ð³¸ïž`izµ”ÉÄUbKó…O æÄœ;áÄÍÂñâ™+ zDÆ@¼AKxýJÀ¡kÎ-ûŠ^ÁâAš/¨Yç"è`V’ŸÑIàl죭"à«*Ðkϲ:M­´Öcù¡òêÞK…°~TZ?Gcé 9.Èâ9§2t¡j\íSz>Ï:ß»~ŸŠL‰Æ²æôw0ùär6E%{#Á ËÐ¸ÓÆ`t‹`ÎíK™uHË)09ÑS{"ço;ÛìõJÔ›#VŒ˜&2ÄkDæ%!;÷]hÓYªÍ«öJßûÉîˆ6À\!† ]£žYº3}…¾2Hºs|Œ #n“E#$i ™É³Š/’4QG(±QèNšö6d?õ¥&ÀúnS$ô…U7€ »%÷Ãg9ˆËSò1]Ì+Ut ¬ÆDƒImd§òt‹;1$©L¹7È÷d:Yrú=ÍéÿÓ,É=¥%­NTʹ¾DÛP4À]‰Ì6;† ±@‚m‡UÒµa®ÝÉx˜.îµþwÍšÃ;³ß=Om mËïÊ ¦Â1ŒÝç½÷ëwT&¶Fc”¼ÊÅâ è¹µ»ˆ_ tNÙŠ¢Ýœ …Ïø(ð¢göpÊøt;q’òXçüð³å<•¡‹Ë-4( n—Ú  ± ü~!'fÒ@ÏêSÔ³ˆôý½ªÆ§v}É~`ÇÑÛ}¸DtFs“x/8ëe¨OC`<«UT@欙9j /aý«³1Ͻm?­°2½OÙ’™1©P ²Då¥ËM¼þMÀ!¾Æ‡ž9âl΀zñvÑØ¾¥Ø;ýŽ[%Us#³eêóÄèÈ œÐn…æþÖÒ‚•äEσ_ºqG"'¯brYØéMB©©Å—`ÆÐ㶆WLTxrC±‚,ÝIFls;Ö€i+êyö€xòœ0ý÷¿)>eÀ…æ@¾•ˆÔ%—?W^Ï©ÃIªÍHQÀ]šlhð?’ïÆÈk$´è0¦&Xù)§“ÅiXãcß8óyì]Á9œ1ôE=4)ML/ÃÇ WèÌd¶dÒ=K‰’¬"+¼žü0i!«fªØì)<7žj‡$Ö0 6à¶$ÓU Óµþy‡u@Þ‰jC—q>×ÏCŠiúÍ%eM+`#õVÌæáw ”s¦N˜KÊ&gë £NfæÛNÛÁFÏYÎ}i®˜¢ðH"”&#GÜUâj[þ’¤I·‹- =Oßøú5}¥ê~Y@æø³rf“SE»gñÃÝHþLdõpø*å~Å0ì˲Ñê¸ïxäB³%a/e CzQò’t/…„£B6Ct‹;òìÀ1°ä+ñŽ îïK ZìâHÎåe‰"Y?~ΰS«FDúDÛ?ò‡^uGK|²Rî™f÷3_Åo=K%¿RõB|/]fêV î«á>9ÈlëÇ; ]ܽ–xy›ÇÁ‡ê¨<„XI¬mXœÌæÌVciϹ ­l’ª¤ˆyØ=ï†Ïÿ[}LÁß߃%úõx…Åa «j9À vÄ|ˆV2¦¬*‹ 'Ñp–ÎfÅ ¥÷Ÿ6Éß§ÖwUpM·dݱ–ºd˜’¸óœNoVBó?H/3_¿jµ Éo;@§„¿lvWà‚1.§ëÿÁì(r«4{çk¢¬»Õ÷¦ÍL$B¥º¹ŒÏ×êrùñüDÙ—2Jîê¹™EÕ±hzirD¿q˜A L¯_e¡=Ðí‹ ¹Ø)ã’@Þ„|¥œ¤I˜Å@”Ô͆Ês]ª…ûüý·åj7 Ò%¾ªåRÌ´h[“Á7À_Æïзm|&uÜuK‚òrÃó»äR³r•¬˜;ñÿnÙ½á–ÿ³Ä¼ßûzp1Ôòsb;R“ÛtÎÿoJâ‰i.•é~ìæ´Yyþû­'àåäTne ŸÏóÌŠQ‚¸y>·k†ç~53EëXæ4ÐŒQOد<:×f ªœ«`íyìÀ%Dš)\¾»L¯˜Gã/hòãÛ™–$¹<œ»R·dœGt¾ëC6#…^¢Y#°ªÑsÍô´îݪÌÂætB~W„öÖ@5ÄhÊÖÅ…ÙöËüÐ5 <•ÏMÅ1GŽMsex›HfÖ V]°j ´[S»Ø/±7|…õµÔ4¯°„¿2&ÇFQZ îhðWËvAI|s3©†°©²ùw|*¾.š ‚qÆ)èM]Oã•äæ­÷ˆ¹‹Í-B4‘UÍ…g0ähæîún,•ÁßçS(ei;žÇ/¶Í/Õ½—Ùû`¸#†zÄ ?п˜úɹÄbmJsMÚé%6™”*ß)~Ì 4GÒLúÌÈ;4`hm€¤ ÑÀùI¼n¸? Àêàƒï7º ʘñMi8É{ðMË]ù|CO¡‚… ˜så7ÓÖ:Sò”Z#ùêh€ Çø‹Y Î8â| ’aC4ü9þôƒê’Ô{<t³}Î]¨-Ë›7æ:ø“½CðÕ fyR¤a7­5躃÷Nÿe{Ès¯ ß=h(P5ýþ‘$¶yKßx¿¤Ò'°{ ñrÐëˆi]Ö§¼nì p¨ ¿$ZTf³Ù’¼kщ¨f_7¹ÃîL`Y@žÈ “ÏÆœR‹ñ,ýŸ{;f@f¿Š!üždš÷}ýöL@n˃ËIý‹+÷¤€—öÝ7y8ˆ(£(“ÓþJöBÓ(Ù³äôýÎB ðP FÆd9G3:-š8-pi»WG ¢ñùµU}Ë cA ÿ¨³ …ƒÃ+~û.WÜ0† þñ÷™} àpН¶Ãu Ì*É^¼và2ÜÌ‹;’/1·»¨»¸ s|¿`˜%`ŠæÙñê¸2£@Y:&OðTêÿtù5X›{åÜÔï:áÈÙ"é qM4cËU},¾J×–ýÃ!ÞYy9ì³JIs™j¤é…Zi—L&!*ø¶Òûˆ E]R—Æ, áß™[¶ê{–ô…”ìòýyaÍýƒc]ÊÇšîÞt¬m !…SsÜØï5†1½ycM¯<É ¼&°lä“€¤}⪀;¬ÉÆU7üàKÄÊDE®†nC7*¯2ΦÂnyaï¸c²½õƒ]‡ã„ ¦Ðôªcžö©9žÙ0gݨwt ÖKÅInêlÝzÃ<•+íÂgÌÅûž_¦`ïª †¥ôvÌ›—’i<ˆ×ì6ñO°DÛÃ[+Í}3·¿[ë¬7gÔ1Ô+¼ÿ´üR}^âNãþ°Y´ ú"§çAþv®aËFJÿ¾?n_«µ;EÈ&$ŽÈs]ú\¿·YZ å^0˜ºUî_k<æ…Ë´F.Ì&Ñqír»¬YîÐêÜ´b`žƒœ@Áǽ2(wõ2#4Ï–Ù[^{9jB¹¯ÇS8tT=;¾]~Uõxiä0 ú½÷o+lá´ÓVoÞ©¾¦<›§—C¨W=>,SHݰš:ÎÙ„J Tt`ã/÷5Ý=º~YÃ'«Ê¸%çÛí•@ Þî‡é CEÁP×8¸Œ]ØHʦ=ºóÒ0—¤"D‡ f´}Ó $‹œç‚S‚å÷5äųá‹YÔ¦BôfjÈøÕ mñÓ;,¾ÇàWÀ¯Âë(üú>@þœá&ÏÈ} #äèÀ™%ñ‰ÚôÈMpè-eŽ?Óû˜êu^v^8¬)WOøX®|R9êuAWQ%Ãúé¬è'ìË¢ xr*~7ÊIõ÷ ²-äuö¦æâØç…"ù «ä;´¡Äß[츘×>‡ý¨WºaÃÒžhW™ `óQË>'´óbý²O$¹dH ˜Šø…³:-ûÖr¦Õç—ݪìi+…Ê¢6»u®?öÑÍ#Á~¬-:º æYu!­¬³s¸`ä“3]`&]9~™–™i:+Só2‹|°ÙÝ´±ã—ŽÏë %aSNVoÿ#1ä½FmÉ\ôŽB[e¾jÆÐ§_”ƒUfRx:ùâ†+€×#»‚¹tîu¡§ 2±'iõaYš«luB¶ @(óµBÓ ¶s®`L¸˜Þ‰¥7êK–i È™àwèåX¾ä)_ƳK k¾ÜÔ·l[¢_*.–y|ƒ,Åã×Q‚ƒ¡&Õ7Ö»“&o`¹J";9Ô ·F”ÎÍ£•~¹ËæwÐqøÑšl©”Û¬šºžÔR`ØmîÕÈ“@(6A#y,D¿DA?œNØ©:.ÈO¯Šœûê¡Á)üHüFxCÚÀj7UË[ØñWÎ| dJ#㮈¯ÙŽk1–Ç€€Â@ËÅ_»“¾Û &¶WôcE|wêXЩ‰˜°(šÕ~F:ZZ½VXo% ©XüæÔP¸Ú¯â˜aáŸ*¸¯a$»ƒ4'ø­½¯¿¨¸ß•E¾­æP~惛(9žŽ,M)þNPÏ?QÌ;š¥8ÌMzðpt«oNFÚе‹V$ÿ'ÃÅ©´þÄ^ŠCB_&:”žTÐ?E,c÷ðçõíݺ™ÑËð‘r5‡:KRŸ›â9#(“$ìüÍ>¸>-¨Ð_(ƒ e|MüîEo‚L¹“FÕétö¿º¤Üag¾¡ ¸Á% [ŒÅ#ö•ƒÑܼºÌþ„EüÚ’ÍÐÿñ0¼RÆ|ª´à’gÆ»c)ì-qɯ6™J6DÕÆîá'DSGK'+F¯YOx¦‘%dþm‹eÑàî×5 <Ìêà-²…d5.¨y ¶øOMl'¶ʆætb†Eû ÑÚ%µÂÈøƒ³?º¿ qßHhV)²u¼€J‡skfGLP«Cë%úKà =X%¤ y$EYˆ²tœ±q¯#-ÕÀÝÕ܆­JìOêç|îDf°Å&KOÎéäÍkƒýc|lU7/Á©Ó̽nã!,p¯uàµÖ75™o6yYër§¯ÃŒELˆÿ¼õ˜O¢Õs:‘fAÓdzQÍv]8ÒC8ôÈûŒQŸ›£Ó‘Q,³Ÿ;ŠXèbþ,´óžÉø¯siÉ@8y .nW)«¢ê‘öØ$©(åÒBªxG…ù7¸ˆVÝ’¦‘®…üv`\÷’87#*Åbs²M¾xÇ1 àQJ‡ñl“K`»E™'¿l¶%¦®»­uD© ¡êáÄEàÍOž÷:4ž¯`©‚3á³ %È^ð*a'!Úlåt}±G&#ì.zÇ&–­ ¹_+ ¸!=Ç0F$SÈ à'G˜©uÁïíc6;çú6z€NÒô/Ïüø'EîÈÞgäQÈ·?@;w©(Ì J}ïåEp¨†=Èmã)Wßæw!(!hy]}c<úÜÃU.Ü(Úp­ œ6 H@1n¹$éžè ,álÅ#c} %{1ôÍV¥”&†t¥ô´`@cü‚ÜÇ#RëCûÃZ±ô‚•q³òÖ¥EI:ñQ%çlíGJz}ÊÐI ™iÐQW¦Ž9®»H„ô"À"f~ÆÞÅÁfiÌMw”Ú5ýûPX•>ƒåÙ¤~.”p3Ç€R¹@ÿFaž=@ È®âj(Š7+:vX>òîþJ›Cx„ù'Õ Ü×¼ùd6‚=Eܪ¬„X_•‡Ú1‡U„嵯†i>ŸS³jˆaZ:˜ –Ñ›µÞ’ˆ5H`ÀüÛmn|ns?ðÚÿB„1Qùî6—;·|´À¢èñùû;‹š:ðo¸°Z¹š»ÁƒešShÈÆá¾pÕº2‚Û‚ˆ‡`Ÿ®œ žù˜lÀ˜›QÛÇ Ox‹¹(k|ü'<{KÒ‚æouù«ÚØõäÊØIª¿Û™2}÷…DïÂAê|F:¤"é´²÷|OÌvEL‚mBȳÁR‰Š޵ó››RN¤Š>¨¢‚«uûˆ^S=fY‡o!”2­¤mZ-©¹º…†M¶‚o~ˆ#KGWÞ|€¶d Oã5Ü-Œ]•²¼‹ôgÌ`CtÏrhÏ­zµN£´Hä‘ÒV)û Ë «lö÷II+¸]- º³GéfX#½Åè±™Ìg­àÚ´#z’÷r'Ý1:a-Ó3v‘¬S Xù6M ¸˜õa=6¼—^ÊG/Ï_‘Áäõ¹)aiâ·—}˜0ÓL ëFÑXn–Äš`—ΙIž°äÈ0§æSåÁTF ñÞ Ì.7…Uh£až(»ÿ)^ïÓc ÃïOMåO«î^*-Äq+ùfÆ*v³K‰²kú'ª QfÖ‹!†m Iµ& õÍ}PEzgº„ñ—íÌÚÜÔ¥Ý!;»¿ÁUéÔKÕfPUÔÙ—CúŸ®ôD•DIAFØžÓê}1r. Œ?ï ¨Û´}Ñ•ªèéY'·ð˜ãá°}’™‹æm¹½Ð ¸Z¬ì04ŸŽÙòýIíu"gˆä—b£ »×ƒ¥ˆ%™ä-x­ Ň_›Eö«CQò—´ôï7CýU×]ßàâÎê˜)¶T³Txô²X÷©Îî4 yðž'ªøÑJ†˦jÛ¤>šž1º.멹-»GJÀ_YeVÇh èŒ½Ý¦5´×ÊÔ×ÑhÎdíð:²ì „%&e.QAØL4±×ïüw4û7”¹©ÞRöO73B9Ò‚X*¶+7vŒ:%€idOßÓFç «§¾îÕx-oG4œ€g•Ù¸µÍc Ü`…»ceÔ D O²Íø>ãÊ´^P}œßüCµò§¿`±Ý îb™¦Ëø¥ƒ‘¡ càÖ< ‡”mgi½×µ4|ª—åf ÊN×vŠ`ˆTó¾Ñ÷ºÓ¢wã¹JàÏÔ-=Y[½4HÆdº¦qëß)Á'éâp«VÆä‘Æç€H~¯ËNë¿$ê!T¬“•*àeÞÊÖšóë:.]æÖ?"Y¯ÉÊõ0æŸäp¼Y)ŸÉzañ*wŒs®:"ô¯«kDÄN;z³Ðm/ˆyÄE ­êÜdSg)}õ×;?K`¥­Vh´±ƒ47 gR0Ù}5…•¾»É˜‘&DÕ×Èó/u#FÛ@!7ýâÈ4Jý«m ÒFMµÆTkgÜa,lÄ“;^vàˆþö’¹žXü~?d{Šk,Så”,«£>R“ATw{µEÓÅ÷ èRØ3žõöœÄð¡C=B´x”ª‘ç/þCUó MÛX*›\_(™„ÅŒHMY™à!ã­ M` ‘u¹©ÿ_d>ÿÓl,¡CËÛØJ‹WæÎ¼ï¼ìÆ [Á (v„²æ Êv¤ñ ‰Ó3K,Fë¥&[ÿ°CpÁU(U®ˆ£øa9.7\ØYY« µ z3™Ê8|º•P¦{+¶bü<9þp” ìðÿV{ôxçi 5'Ï/ƒ2]k a rº¸6 ½V§ŽåÁ{Œ²¯ú.P„„›LÔʨáA:#Mö ‡À/Çñ äšk<4ÈZ7°ä±SËšõ,ð&ü—1¸Ø÷ߥ¨|z .hÊ‹î2b J>ò½„á«ÑÅàÆQ%B¸=Ú`JRÍÿ’Äö“gŒ¸ÃT¥íF¹góo ®Qs¾ -bèõá_dD-ºðLJ䠊—KÊKÝÃw Ëò‰ÞÅPèõ ®Yâ)ö³‚‡F“ØVÄÐnÍͼÜm•'îÈŒ#±¨g†g³íý"¤Ax‰Zæ Ì­\O¿XLý·€’0ÙÝK0ïàòüP9¥ã\Dâ¬Á#L<`…cû‚½µ''ô£nªæM²ýI×7nÜYŠ6‚”cMl_·_N©Š´¨¿‰²’ –Tc(•ÝEYÑŠmc_B€ô/7`V7^`|àk´z­¨Ûš}´Û„ÙRí…;Î}ã! 6\é=‹ù°Äø W­ñuqu? ¥8ÏiádURâ3#ÉW!ð~øÒJq*å²u%•}ÍãÈ‹ØUÒCê«eþ˺wN!L,G#8°'6…ÆaÞ‡RA£½‘£*) °€ØÛVnÙ«{W(´Ñ ?öð¦AøR&Ý)æÕrJ¾?ø'ë³Ws3˜Á·ÒÛ½Œ‹.Í-Åš¼ ך¹úø-.øÛo^†ü‹dž;û[©{ГÚs\’œôqäðFÁZ¿ü91Oÿ©Â( †]. OEäp¦"vvŧÞÐ~!*à#dùö"¾éô¤7]a ©…u8Z`“Žï<¼tÑ€b3 4îŒ$|Kur|ìv¿ok2I5–&h­n¦¡(9ç7Ôìú5àO…y)t÷ü8e!n7ðÅ[ázþvŠ}FMkçÒkaG€´Ê¢‡‡ˆß‚Ç—ãêÜ]„Ñ€~W<'È ÔWâ; ÕØ20o, © r8¥#œ§iœí[]Ä‘Ê2$K?¿ÑEnÌlæqW~É‹t $ x$;"tFþOÿ6%VùÉä²½d†ª:Z3вØ¶P%Õ7‰DçºQ"ªI—>6 K,¦½„xÙË3„=Buy¹²m5K>Þ‹DÎMº¯ gå Ùdö ´!d„)oÞù;Ô– Ô^d]¡àm7Owé4ÏË:¸‡iAÕâ#à칋µŒµð™1φAÐTêá*‡˜v~]N©ÅàÝ]£©¢š©–ïÑi4 B™Ñ’-EÜ%¤ £ÂçCË|Ë©—4°Å}QddÑ¡ÚôÓÆ¢ëü;qpJFÐˉ7;°æËÇ÷^sjˆ2 ä<™=K%“É…J ³\êK!K¹Z«ž:K£!,¯Ÿ‰i÷Óc\éÔ€·½‘8ëÞWkÖÞQ­ž'ùð÷Y…»çØjó÷'#±bë4w?L¸5±iäï©^àñ%l_ òçk§ÂÌBÖ–®«þX&]>F;¦ — Ødxr‰KÅRÈÂ{@Ó{ß5†=Úá(yCµT‚ 9LU›cŸc ãºdMhšÊ?†Ý˜Gm±eÏÅ>3k²Q]šZ¤Žªê¿î.ÃYoÀí¥/âý–°%€1Ô‚ÓÙ˜¯reqŒ\Sø^Â¥¨]ßÛè­fW°(kFmÎÙ!Výw lÔtsrÁ0*ʰiY/þìdy'ÁܸR¢pE%vGPÓ ƒ,™ }ß Rô¸Fðé5y¸Úyý  ¢¨œÃq¼¥Pއ蘥Ö!¯ S#˜·‡2Þsýn.ørZïqs f™Â%)þ=ÿÇ?=j9J¦n]㈷u°;5‡B“Õt)R&äv%©&jä¡Ç>jN¶òjOñ Ý]z¶„c;ª5N°¼ÜzôM=# á«$#mç•ÔÉŸÄE/¦†‚“e‡‡²a¡:·×D¢4o'S[W"=zxgjï#žšti°íí¬AuWÀ¬.SõÀ’‰ˆd ¾è9.óE…!v³ÅÁk½'Ê“šÌ;ÿfP¿•PñÛBAn%øž±I—-ÃU€™@={½>(è/ŠqK¹|Æ©(´%™ Šœ`ìëû`ÜôdÒC‘QðÛT¾n÷‰mÃ(®ô*cà9­Ü¼ð.Y>#. ÞÔÏãP€.’-¾ŠMBcï&e·N^ê^XPï6¤Þ­]ãs²ž¸Ë­GB“Çc¼Å`È1–5ò@u0%tµôª ÎY!ÂÒû=úç s›éhDˆ¸Î‹æFßHìÆÕ Ó?„9û4…lãî¿HÁïkI2³Š ØÀê¼HyÁcnqekãƒòT©  v=™ò•ÞYøôz’KSÀÏYêòÊÇoŽþ«7u¹7!ûÔ½Zˆ Ÿ¤uKI4¼12›j^~8(Y‘p Á[õÅÉ á~©·ÿÑÝY͘9nÔï­Ï, ‹´ïOÍë| :œPerË3Ô5ak¬Çcð"?‰™ëá¸<Åi¾òQ¢f”ªASÛ@ P±Ö[½oè6ž¥Uº®Œ¢•WxeW“ÎМ¬o#¢àþÓð\&Ôþ¬È<[À¾£©o)yåt RøÄZøîÆ€®((!÷"p羌 óšÆGÛ„‹?ìõø­%·òÁDlu} ñ@*]L•|&TäuŠ*=cøI,û0'Uõ÷¶6NðDxV”äM¢Ó^Ó'ÇÑÍÒ”•3uŒ ü ”͘¥£Qœ¸Y[\ ŠRtý·!…ÁÑSküOSî©‘ $¿øÄa7©âh–þs­yܵ¯®—ÆEȇ­±€v>4Ü"xâ…Jv/pÀžÿ’=]¬-VEcÕåÿ õ¯kæFäêãg†ê"£ÈuÇÙ÷¨¹úˆ6‹8Ó ¬ýo‡ë¡Ø#Á"0íDjÌá ªC<¶| ybZ‚‰rø-%¥ ¹Ë@éY(v¬òÕ¶#²—vLZ¡XÉj¨ ¯dõ¨2Ó!vægTòPæöñɵfÎc‘ .‘äÇMy·)ÿe@UhÁ WÙÂVÊÚ›X¨PÎy”ùìèaqÎUä%F(Ùôj Ãá77ßɲ4ä2ä3–ѹˆ§tãfð²!ùŸŒÀ‹ ¡Y|O¯¡ÌbÎï^®ˆ*Óø±4<ª¤øøð&³û”E¤õã¶Í6Y¢txŽ•Ø‰fÓÄþèˆü.)È5ÞSüp{Cšd,hr<”R§)ºFgvwëuüEMy1%EÈ&…uØ«”Y7UDãÇß©¤<1˜ÔKYÜæýÝ £•uÓRk8'&‰È×÷+"r}ØŽ›ŒÂæ ÿŸ4o:UEC´†¾_~äp™qJ½ÏÁ=’ñ×êÔ`!ÄêÆ]+)¦­H™¬e>Œs4ÔŸÓq¥ƒÐB l˜³bÀ<ˆ*x ñäS”)Á µ/pR_«Žöv>o¾tʸH¿ecÿä¸0A\ NtÜ«¸“Ô@ÒíªXi€Þ 'âp ì";’ÇÆ)ë‡Jþ8è,4v~ü’Sd’ZVë>(}ëÜEl¡7d÷BÊ;ÊM¶hœ½°([ _¬rkÿ~äÍ[™Œ[ÖÃ|ö‚”³¹‰¡)çÔ-#ðâM†ÊPí ž Â&cø«£vßGõßv.MÞVjsEuQqÒ¢EïV&VÍêQuèÊÛeµ$(uÅøsžç4±Ä.ïîÃx  d7^ÏqˆÑ]£¶ïfEâ¬Ì_Qo§ÊÉøÇ©4-âe=%à‰2ä[öl=Ñý”E©*í5œé|Š)\½|µËd_µöšíÁ@ªàY0xõ“¬Å1Ôå³\¶«¹´Re³fTh‚þÜ7ÆsêÇÜ@û;äØì_T^©z#æÏáÏ‚ÖoyOc$˜@ÇPíÓv+ „]D•£Íñ* *>œ B*ëcMUÖ´¸í£û¹&X†ÞØêÜw5ý*ٜ͈­æ©ÃáÆâÊíz¹HÉK3Ȉ„ËW ¢“U5û2×|òO~nýè;15¡%3ú ¯Û‰æ-EÇÓHwð ‡|‡)ÖM{¿ /îˆ]X(™0 ãÑî±&R yÅ_² ‡ö‡V£m´¹¥oÓFKdhÃ+» šä¦ûkŸ%ÄfâMr%ŸÔ™™¹e¡D2ÿ+Zj[¹´ãnbÚq{çÁÿ¯ Ã<8f»_ e¡]ˆ("W:B&ò¹ÿn§ÜOD‡kØ”¿Ê}z¥ÂF:ƒ«2fƒÈ„ﺿóhð‡”_í,Š‚( C7÷O|/Žzå·Ýµš_’ÄÒŠE ²Ô;šfÏÀœ›³~ÃØ0SÌ4tç u`‹Ë„¯˜¡»}„IG¶A’ÉPÎd²Àìý£q¶Þ}^øvÙ#¹5ïÿ\Ÿ05/O"¢¦Žá1¼£”Øe wý|TŠâÅ„¥ H<‰9®?pðøëÛ|ÇÐŽAŠR~?4C¤º ¸_™‚%d°‰©-ï¾*£mê¶@C=œüHgœCwL <¿_‘uœ µîoß%}&˜“ñÏ^Æ{¹[—RB‡SXÕ}9ˆLòîN ÓÙ^ÐÞ:ɇ˜6Þ$Ò¢N7Ô;+‰ep9œ¿fÊ - ûö‰wÇöšø^ ‡‡/Þi‘zßm8‘e˜ìJ@AR§Ÿ`õS$”ׂËTì”Ì=4üŸÈb_¢øqD˜¼4žåÇ,ç¹Ûë¡Þ~Ý4*E~¯(Ky<•‚¥>Þvõw#@ážûÒV$rÊ[©M¼¦ù\¶ˆŒ3Ë¡…àÇ}žèppû(–ÊÜÁçÚTYØ+*ð‡Í=u6 ®újÄ ,b ì€æ°nþË~ÎÉ[]·–ƒÉ]¿†1Lä«j€F¸ÅÙ­¨¸’šŒ–¬ÎDؽ¹‚BÏhuñ‰ql㮥p˜Â€'|¿Pí ¿êÛÕ ‰˜À{Šn°÷®c;dÀ¿RJ-W°3Ð.¹ó—Ñ»§ï"½€gc«¸º!@ j“mø¾x¡ È/'6¤YÒ5/è “VÜ=%¬àdŲ7½ ÝÀËtu ΖY­:îå:[ØÖÃÁŸ„ç”}¡Uœc¥­¯¤ÍÉ;™Í¨B±S°7ëôðžö™+ÒçðMíkÌ‹/#Ž©×r î|÷p=¹±MC¸Í:œ„»Ü¡f'i¶HBnw Ô äIh8é“©º«ýå°—¤W̲óÓÿ¸ªÚ«–h¹³T?šŠKÑ“,Á¶bÈ üi— ¿E˜ö½XïkþY­\bXôHüx/“ùã*b9Ã/ý¸ÅD’°s‰B2('t¬ê¿V'jƒp.%ÒÇÕ}G ½ß1ãÙÔVßÜÒ§¥ ³÷ (†Âµ¶Œo¾<:CJä”\L¹exD×щ]å!§zèðD‰CΓ&ìcáí³¬üAL^ÞÜUƳú¤ª±ÄtGÓV)[ú¥«ÁJ¶"¥ÅD/ïÊ!kB<8ç ¯ˆý.ñTö¤2ÁÑÒtÜEؼëKš9åÈZ^HNåÁ¶O©Af³¼»í/PÂâf{…ÜÔ4°\ôh¥Ež<T©ªye²W§×ö@€>JÅ¿î,A!yô39ÑÁýGÅ)•%èÛº|äÇëÀlÉpå Q΂ŸÊÄ?­‘y(ªÕ/ë+ä¨ó›ñÃßvƒm†ü›6¢Îƒƒ€ÔBb¤^êqV?’©+8FÈ~ü¢9?c çnB I ¡ìÁf™Õ†¡ù·g ýàœt ŽZm˜ã]ëì1RîÇ#"¦7m ÉOCúD <óÚO­r˜?øAùæÕý±„(/ô¸H®¾U0»g`;^n<X•9ðÑÇÛj &`cjÎ’NtÛªè:# ÃY¹³®f&à¾ñ-SÇÇ64´}yÄ^ãέ–ã„ †@†Ìþ>ÛK€8"Cý5B G“ðçRº p#û›¯ y2%S ±ŸTê1)gpb_ãsšH)¶Ñõ体‰׫Hß±¹"KÏÚ ‡gy™ß*úŒ`dŽ!ÎóÞh`.ÅÈó>BËùýî^¸O¹}¯å|d"E¶T7Ç$*AW¡ŸJ4Š«]Ò%O~©»®á'ñj‰ÌpB~ ÃKL€.}<¦[{8pG¿W¥óúªß6+Ö,Flë{ 7ßf*¯njf`˜ˆsðB&È¿L,à-69Ý»Òn³âXÇ}û¤^0Ìu2¡–Ÿ€`ïziL¹[“»(W*¢‰ž»Q'¾IÅnœ¹ä)“ûiõ3›ßlq}²‹Sá+¾Wî°!ý‘©'4?=Ÿ]0òÎ*+‰›6·;{‰ /,Mšq»¸ÆÃýÞ­5³x1£ƒíÙ¦ªå‹tLšë³·D{ÉÖõ3›À©-Z~'Þ?ÜîfŽmü°MqŒýaR}dj‹àÒ‰°¹@Í„Œ¡Ê6Á&£hX×`y™étì¡á2Ô—r4Á½ìLèï²Ï[ÿɬcóó+Ï Õ*ߦûý͹ÕÀàDO|#R6õêÈßó¶/Ï[ÎI~ÅŒÜWÞíeÁeÝïrÂX^ÒÃì­É‚!­5ÝêG×£_¼Ð#buÐáí¹Õ=ÜJ€À´!î¬ |ŒÄ"C©ððHœr¦—0] MžI°N¸ô¥/‡(áC’íõô0BJäì5†Òƒ40m´Ë“gÛLáe¼êi³â«³ZÂ{T"A£Ðâ•ukZRóË-‡ëOe”ÛñTºÙtC§Œ¢WZœø$(v>úY•ÍRç_ƒ&æPMh›˜ñA+áL4Ç ƒP˜ÓRÿßë\7{¤ü†8zŠ=æ¤Ìkh;p eÆ51„œ!ž»ŒïÑj¢eÔbx—±«æw™å0†;“WýA¼3'½ïBÀÉ\¸ÒŸ–{$ànp3òC2¼†GH³ûæO¿ŸR8oèiæú;Žàà D]"¨œ÷’Æ7dÐÍ0ý—Úù 8KÉ5\üúo;_¨ì¶e°¼Hß>vìn»”Î>Í„Qœ×Êíúûx&¤u÷M¢)×X³âæÁ„àdsÞ sÏ8¶ßÌW+¢”ød`T†¥j”SÞ™B·^ÛNÕGX¤ÒŒZþ戭sŽëDOJ^”Ã)¬4¦y¦uè_¾˜nÚè»|=rÔÙÜ­½€Ç-øÖfdI*¤C[ DøTk%)Kryø»Š7Zòp!òØWì®>œÓ œ3;­:ð­ÿ‡(ü³l¹‰Ùu‡ÞÂ;õ\çÊWÄKiÈÚæß]lxðÓ:v;&ƒp)oèY§"áÜÌZ6æ»™¾¢ G÷‰Vs«çîªJCÀàY:–‚AŒèfP„nû åª@У7IG€þN§:•KÒ^ª’x©Ù%|Ü2}tJ(Rá !ÝÝ,OGòÉÆIš>ŠåÐ4x߃p*k .܃¯ƒÎ(&±6®Ñ˜Žêð;”–ÁÛA%×hL¨ÇÅü0×Ù&¤¼éì—èüˆHœfwÌVÉÐf® J’—™íwRŒÊ/½öÁ¥aÕ˜Yøäb0êö^”Æ1åwžKRPþbk4ò“wH?l9Þ;Hámd|†BçUëÇ™Yi„ M“Àê­Gîq~²x¬vÀ*U€$Á_35¬tÙiúÕQêw¥ÂUÓMBâ#Û› ý³ªá,#œhVûûVH>=¿‡¨D~\C’¨¸;7+ïK2ïZ`•±V! $àĹ2¨°5ï³ûâ köø¯thôD”·¤ yÑË©”Ma.J‹õSÂ>¨„ôQ…„M@COªÛǶlÎ'Ñ ¯Oè°Ü>Iož>Ò*t~¶cØ<Ý0ç)>Àú/%»ºdj»Er)slÄârû¾cÍ™]¤Þ·\½¯6£¢¥Ï¦ý¤ }Q¯c³ó¾¼N¾¢¨÷‡QÓh' ú„F~3Bõ´Ô CŸqF,¡=™´ô4™Pã>M}È(á¡ZŸw“ÜàH!PÿÁ§—NÌrŸ»{#ØÐ–Ö¹+=z”ïAÍ £’¬ä° {>LQ0q’Å@)†/qU° ZÁŠ¥Ž|á’ë„~b?“4“3c6ÐáÑßí\ö ¸$]±ÇË Îï(7ªe·Š7=L8Ä&Ëùw)2ïÊw+4¶´È÷\ÞÝ"²Fé¹F{ѱx{–O7(bÓÙ>̨ô§~áÃøEõ‹/–Äc7Zya ñÎ ½ú½šCnpyzFe|ÃÅ£§­/!¶•7ñTÉ’=Èæz@´2]¦ùCë ZV ü^¯cx+@NyŠã…&JÇΩg‰=Xº³xBcç‚Ì"¹+ŒQ6%:èl<¡€¾hýTdþd·€ÆùÝ8õ—¥/'·ÂÒð“ ™(}UKC"fXØdÔ­±ü„üMgþò6#ÄØÕe˜^ˆáH³f3¬’v7^Pª ŒÂN1‘ãöWîÓY«jS 㳿Éíäã62 ½•qðÜ¢¸Ô¿žó™R;e¼”'¬°PøG.qÉ3I±J^¿v˜/sf‹L±Èm ÕÔç.> CèÄÈy0ÍrÊíf£–‚O]*%ÿztô¹þªÈܬÿÅX†„ã | þ;c¡*jV2½\ç+‘a"yGD2Iû.WW¡¨ÝTãÌ}£ÜõX_Ï”Gd¶¨©ñ*u^ÓÙLtÐ#ìtñ.(Èì qí û˹èÈ +þ{,8; Ý_IÌ%ê@%£óÇKÕ(^'Òtƒ™Ã¥*{_§sí¤ÛI‚bÚµ^ìûä×~ÆÊIMó ï— Tf=6˜?°ÜÓ¨Fy\b6¯‰35 öŠ‚ oFžvþ‚¨akšb!øGjd…ê2Äe‘±À¹—¥L—©ÓS×ú•fÌ»¤üLú;«Vš€e±_WBh¶†55ç×9FáaÝšV-n¿Ä¨çÔ¨¡é^HÂOr•-!D£ˆcÉ’;¿Á6¯í€Zo²Àƒ°½°Ÿ:Ú…£±¢n\;„`Ÿbg~ŠjTâ÷~5ûïù©¾¯%/o)Ud¥2{pi`uÇ,'éÙ”­QŒFOŸo/yž`+\ϱf¹û}B*ºǬv=Ä zy:ûÎie¼¤CBñ†ŒsÁÀ½:À8`CËë>í·´zI«2q8»žxòÐ[ƒ fÔ¾æ÷³ºXÜãÜBW£¦öàX©2™÷ Ì’çIñ Î5ùÛƒyüðI.M”}#–‹§ˆŸËA Nx:Ãåã5¸ë-–÷ß# ÏIìÆÌª@éeÌûiVv¥*e0ÎÜZkŒÜCR³Á.k„ì®!>N)„ è°ÓÈ4€ãoÔlÚWâ}qUOá$Õñ¦Õ÷Œl%ê÷ä¾£z׃Œ½deïr7Z3 8|0157PeÍ¥—‘Õ%Û±†“!üÝœ‰!§y–ÆÒM‚«ðlËU5—S‘`3NñCO©!Š)ŽƒÌD0ðQVÊ~¬[cýÐAÕbÙ ‚ûS2ñ]nÛb}Ã'Ø8Á‚U ¼Œ4ëó«Á`MwÈ)¥¨´Ö‹“‡!öë]ºNÏ?ãAbáM‚\’È^^Ip¡‹4‘ÙÇ'ØraëêîQ§Úšf÷äE´Ù~ø°²ã8™%O5ÚË ðÆµ°l^<áYz µþ¨¡ããg3â'ZxöÕ³¨_õ7.ãS—Ç7§r0I YPÓQ}CSí Iú+9þ¹ñ†Ô i ‡ýÖÊ¡ü„:z6å@ñŽ5háÖ¹!ÿ/\–v„À­}†„þ¼°ØÓWQù’¢j"aŒØakÀÑh´ æÃ$¼ý^ÕÂ1-T+ú•ñpepjq!×¹‹«’àU¬Gd_–]@<ÍÞ2žÁGde­ÿ0Lz>×ø [4r1õgÁŽëÓJ)8Ô4ûs# ‡˜66gìî#9‰_4 Z¾rf£ãN\Ì6Yÿ£>(j¢Q~ßÎù…uŠÔ•WûîÝAh˜ïÙ–zKªbìÍÿ‹ÃAvG^X#žüNõ§áŒ6l!º!~uúý—â¤8;¶dK6ÍÞbÈi[Þ²Ñ Ã~]‘|x=R°SKNzb\^N"ì(w—.©ÙÈPÉ| ÛÒ™¢õÿ2÷$åÏÏ8of+Í€€´vkT – ´›Í Q}fe OÖ‘*Jyl AZ©Ñä(ci5Ë)ª½z+µ|,jm`u;á3BÓŠX #eVÒLJ¢d‚I 9Úªrg5iƒ€õµKÅ"Dª6…Zn‰†æ\BþŒ”£FÂEí Q6D(å)Ú¨KQïaGñÆ[×óg\†/ß&¤«²£þÇá׳ŽË°¬,¼!ÙÆ¡Æ0ãwÚ ‘õ?U  „ãðB˰ƌ»æK?'ç"ˆŠ†¯NJø½™FŒº*2©6G"Ú0ǹ“̈́߹¬-.-šO5ÁOmÚØmÀ–ú_¤€É_öÇÅèhNa¼»ÞÃŪ*Ì%)‘ǯÆv‰+ܱñOj? ¶´Ef·ovGj„c’¿è–!ô;sÝ÷ã5¯ß¦Rí×yùÀ &þÀüúXnœ¶aOUßG"§fáø­>#ìØåUá‹"æÐ(z¥F³êÈ ^ÈÒ|§emšÑÙýÍ}›â b¢áõãZ"SáQ„_ðgĉ.³ìŠHý›# ºPÎÌÿ'wUÞ5ªEèÀÊeüâ:z#<]QĉßßE\W½ Y@yd7½ëe[$›\ ¶Ú¢ 'Kdy)ÃÙ¢l.?1F´q,5îîÓX™!„ü:âóWÚŸ> ºð€ô–@ß •âe ô‚rptAÇ,‚Y Òaº„ûQÊnE™Ÿ‰‚b9ñ^N«ü’àÑ&Ô.Aâ@·õ¿Ò œÀXûÒ w9`£ÇîúTÊÅKœÎ?UéÆôépu 춪¬¦½ãÌ,¯±ý`IÜ ŒGØ”={Zv·kzø§öy¡Ûªríuò*êœJ™x5÷ºC:u3¬ Çõ•Á´¢Ö5WMV¥t°-¦jø?‰E·ln$ΗHçäFŠ*œÜì|ɹ_ÀÁƒa¨Ð=6E—K燩søŸelw蜀Už¢2±iB¥”«çâ®ÕsœÌ“ÀÑ_¤°‘ëxŸ8Ô½PbÏ<èaOÐÙÛ¡dÖt[š~Ç}±²HsÜÉŠmÉзfØŸ_ñp ‘¢wI¾-þ—dé莉“Ê=‚[”º¾Ìc̓—)¥I¦Üñذw¢XÚÍLµâ㲩CŒŸ®;þ†³yÂ0#‡Ó˜¡7iýtç5í%u‘äIÍGÞƒŽ)Ó `p×Õêæjãdt´Ò[r Å[QÇ5™¡íàµR­’“ Ž9Ÿ  DÓÛa´˜»x_1¸ ¶"Ñ'ÌKíö~iú]/beÉÀ¤žÞUc"á™YöyWo¼Ê|ì}]‚½#_ûs}úD39²pfŽ3©`9¯£AB¯W}ÄZϘ:ß Þo,·n¼¸¼”t‡:Ë ƒ_Íæ=ÙǨ¬›^]è8\ŠVa¾ÙÝj`—Õš¤Ã¥¯–1ñ¥8ê¢U^œZ}z[c4c°·ZHZzD¿\$VÂüʱ‡n4ßSßâ?âˆn[…Mìî`¶úØXm¬Ý¾z¼¼¶Ù¦;ãÜx¼!4õ_s‹à[eöP¯«·ûUå––ô‚º·pÓ°³7#ñ~ž™PÚÑ¡F¥n”ì~ƒ„|° èb²‡‚\–fWmV0Èv’åÄûD)sÛ^ ó£@„@F B\£bÆžYéD-†óqñÁïí$å:­8| þ¹Ó Ùœ‘`Ü9]¾Yæþª [{üÞ>–õLG´Ë¸ ý;¼¶%*g€ê¡kf9˜-]D㜔‹–ž,cVúMB{~ñ§íÜcÀº³‹P’™…R’0­€KeÉÇ딬+E&–þý…ø´ñ=æ s¹ã=. ŒðÄê8;6ÀÂÏ4ü—©Ýh ‹­ÈïÜ“q™Ej‘Ü)¼Š]z¾”®QÚi­"ÆÚÊ~úâÜœÅò×…@£\òã&5½„èåéÊ”‡õŽ›R¾ w‹Yb¥'ĶE…àÑ §×^Ï ·h6ô×Åüã=F‘5\ÀoŽâIÿÄ#yÉZjÎ|2®iþü‡s:å$2¤0@ÁEl÷¹²UÕ@BÿÌ'ÍõÒœ±­¨Î“ZìÝçœ[¾(¼ÿ4Œ»†LÍ™*Õ†ßFX|d[{} eÑß­Yü¢÷³²:rð ßИΕ=¥ÙÐ{–ÿa ”NU)rµF¢ÊCWåó.b‘æêUÚrðÃsêvDXœ¨«Y–Õz۶ݾf5xuÑíG¯-û]¬¸7#f÷¬9A"_WUî¦ý±²•a 2m‚X¿jp ×\-+¡ÑZ¹i¢Á5 p 'ð=«”W!XåÇ2ê.ë$d?²!­÷iê˜Êñ #Z(>‘ÁÍá ßø W‘rT#øsÔÕa¯›Y8™Ï_. u,wKüØ×c`®‡é![-áñ嵎9‚–Æ"°á·¹Æ†³ðœ? ùf)1Ø:þ;.•ðÇ4…üTSž!ô'ÇJ'F×ïCô=7Ÿ53WÕU”ÚÆp^¶:àdùÓ«=Èê´L¸°Q+¯Ò·Æ†øÛÕDuöƒ>}å¿u1ñƒNž‡2<ŠÒTñ™B[£+¸O‹ð¸ÃƒwMÖz/ŸÜO…ØcÜ_v¹ßyŽ,cUó Y&ø…ZuUÑ^Ô¢&îu¹ LN'Zx5¥½øs֑͋†þðLë…%QòsUfÍHÜ•Åâc5¿@fìZ‘ÏÓ½Œ6S¢ºú5÷ø¡:¤5 ­ô$3±ò£ŽÅvèGåæ ¬Ý•‡™³~é{™Ú ›1¿KÔt_¿¿|öÖ¾Lsc†‚³-à3ŒÄj å¥ô4@cdýMæBìèÂöa$‘ËÆD/1}÷=‹)N¢ÄH xŽÞ"Ï©pë“Ú>¬ª@VO|°txt­aG3^àŽMãþpYŒ,мӉ—ü\gAnàà ‹Ù²îÞVJ&¨¸ß?Üð»?Æ>¦epQ¸÷=ób­eQœ2â+Ô>‘Í}f £8Ââ¥aª…kigjçjÙàL´©‰ÅêO&g)|OyžâúñËFëf¢Þ“'1#¨O|ÉZeèLJ\EÀ}¦Q3kCò2n¥ÐITø inz’/ÝmÝbáj»·2pU\q~«J[Û¼–ÕçÃãÖMtÌ׸dœDIæÔ­*x^Ü“´oeÓ¦òÌ)|¯®á=É÷÷ZÑô‡Ó.¤ì±š­¹ëý”!N  r×,x%½ '«±!ù1J>k2—‘>„±ðî†ûZÒø2¼3hœù`‚-0 ¦ý·š^C@9kŽè—×Bçh‰YÕ=_^ô“ˆRözbCqqt²Þ1Q¤—žczGõH6à'”9šÀóõ¼\Þ¦ô.Gl}û-Æ\±Å:áW)Žùh>´?ƒkˆ&EHÊ'êyŸ)¾¥±?Aª*>%žÛµöxÄ’Ф|b7Dú‡YîGnEé Î…¾è§A¶;^a«jËöGx©O«dø°_&ù–.y°Šµ¸I”x60=`ê³½¯št¥h|Oh—Kê­&…–ìtÃ<Ö.x»ïIhüœ"Ÿ,žÖíq¸4t‡èÉäØôŒcöžj-rb§O†BwÈOžBžA\±‚Mµtäb¾tò˜fÙ`}òKý1¨¬Bº«)ŽåÔOxö¼Š‰9ÕP ×Tè'•fßOÇöÎb‘1úwÌòž1Ų×)A…¹ˆdWÐ'nÛõÅa¸I£ˆ+ÇÄð©½Ò¢±y_²mîœÞ¥îËÌÖŸÝ®’RYÅ•t$>Ym®½ÜAÆV÷C§¶cWsݦV=€ÜàìÁ¢zÅ¢z§C6æòøÛ…Ž~;C]ñ°”÷DmçB$qå3kØ#}4å% ©­t§§Þƒ¹ÒAtE íí§³N&LcvJ#òx²€.Þï˶õmØÍq r¯`”?€ðL " z$îÇúÞ*Xf„ÝIü8@v' tMs+¤WOÚÂÙx|Èë­Ùú}ÒØ·Ž u~b.Ú‰ŒÒ•ŠYöãŽôªàmjÒ•¿ßè#ÓNW‘‰ˆ›&Ð)­'ºsçþÒ)ï*šÁ·lbzÀ«–ñè—ØÍ^¼ñ²FË« pº42Åb"c—M邇¬Q• ®; :Ý”{ä‡äöezÉhuVŠÊȬši¦iÈ5ô¢â(jõà E½ÃPÍUj—uµÄ|ûæVxÊ—Åê¸ì]…Šçæz{öÜG>úåf·ÞDþp[ÜóÊL( ˆ}:æI1äd¡EY¥oÍY*H&÷@NÎá‰Ü’ÕïËç(Õ)µT¨Î sA¿Ê÷cÞɲjÍwÝ£p‰îùÇÕ€(TÁtœ@.ÀᘚùøyHðÃ%Ù˜2"3ˆ©£Ñ¡¬ŠÑÔÔòß3¶ؽó/whÞÚùь׈H”‰åÃOx!Í!}9ih jΈ}Â(fs"@P@Ïç$E)K´ØßÌÍ>¹–ož Z› f47Hê”ÜíPùFé¤àïY_\cUPI\¡8%é·bøù|KgÓ=¼…˜Qy–B-—6E À0\ &F0…ÍA¢úèmiæŸÞ7¿í{7ØR”k80 …²uO5#“ÑÛ=@H³ ¢À.¼«hJ¡Šà JzêŒ&ë°Þ~\JÒåž® lVþ¦{PÔÔ¥¿*7qˆéêMdµ}“ÉôJjºn©~B¹às h·þˆaâX„B=˜*ˆuyÛ›<\-gáÑËyŒâìfЈ/wUö]¡ ™Ô!.íSëØk%oFªž#Yë‹¥M{›¥èÅyiIÀw UJË1†ÉCݨוÁnüÒG7ÿÙµ[ñVá(IZ¸8ð”ÛÇRÍv6ŸÔü´“d»Û&iÔλ,8¿ÐÚðFN˜ž?±Ó3Í]%õ’¥¹Lsë·úˆƒÞ•Åðg¶ÝáÅ0K Øé~BTè ‹76ÕSŽ~§îeî€È­»_¯ÂÝŒò"ÿOžNlÑÝSû¾>&~ȥNJ9¦Ø®)†Z³˜›Ï“¦Xf·}«šZ ©•èÊ¿1[ËP4GÓ²–&ÈXŒ€¯RÈš's=z2ºŠ*Á&Æõ †{€KŠ‚RpOØxÞƺתIZÁùeEâ—#‹Ç/LV»¸_P,’z'ÜÊUC'„’„:³|t[rz§ÀÍ„¿å>1ÔEf}ÐAíå=íÒ„Œ)þÜMÁ5“’;ᣠ-ÓÒ»%o–Þkš „7>䡨º‹tý…q»*&¡Ý@Ѹ`Å4>º&Î××ÓJi0Xƒ"á·µWÄ ]ºóDcwîŠýÜÔªõ ×Áùi@(œáxÑ|îÿ4~Ú´Òí3?è,Œ¡Îû™wN("¹¤ö_ýûˆ³UE®›÷‚ïn›Ÿì;¼áyœ+Is,Ú)O6€ÿý‡84ÝJú<®¯G$+  ’o(Ç®lMc㬣Ôê‹\Dì¹`Ô.jèÑ0çS5çSïÝÊàIíï6yÒñÑÅ«½ Ïô •Zšv*HA§b_3³·de) ¶¹šNn±A¾žÐh†9ài<õn_*W£cô¬+\‹j2ºº¤šZ±¤p©á:Õÿº#0Ì¡ÅP XÍ Gƒ­˜ñ +l}×hº&°ìýrõ®J¶ÇÑÓþ(XIQùØ_É’'…Œ„ã%B^æ4­Ð˜ŸbYŽÝþEBòÙ&$Ç “¸ïÏϼD×KõbGž˜–†Fòi ÂKÇ”Ï@Í>ôVˆ´À¤KAi–PKöì祓S¤õˈ‹)„½ïOä|=€ÅL¢™ô3ØÌM{QGoÁ½Û¸@ÈŸ@îŽï÷ßk!/)l‚ ®`|VÞ)Œì ÖÉx@}Xy‰ct¹Ÿ<‘³Q]{Y4¤#-\ç•b±Û¦àFLM»Ìm/P'Û¤&5P Ë-mœmp7¿ú·8Yòèê­4`vp=ud?ê\Ý}ÆJHÝ÷Î!O:¾:U_¸Ø6¶çÐ/q~—Z‹%rETRޏC3éòøÂIÀeÃIíŸæ±é ’fÃ,Ó/Éâ“]cx&ëeœêˆ¾w$KZ&Æ.£ÕÉ‘3–k7^C&°+ü™Ö˜é*Ý\Å%4ŒsBžÜ*Þ)F4· Xà@cü7ìw¿º*l·ü³êvX™z»—Dò\—'½ÄÂËzçÎ"®2Þ¤4$Yî©mD¶®f­›7èi§ýøJÉ„ Ïᆞ5cÍ%”«æ¦°óÛtô·zÎ[ý4G0íì ÂbÊéúqtlšT6"ÎÈëÜv…âO³÷¹Ê\à;ÂAøBvç4×e¸3€£Ö×#|ò(£òlL3E/[Ÿ”Ñåˆè…Ë-û•ÙicBOÜ ¤hM—ÞH8<¶éÂ65ðœíêäħ°ƒõ¿~ú{ž:k:žÅÞ"á­ˆKÉ›{X4¸Ö²* À#k@&´`¿IxKÙ/né[½iŸBL¸Vü}Ý}õWAŽû‡ÚWÕ2P'™D|¥ì+þÜksûv×r·$ÿŸúèâ6®«Ÿîߎä îÁsu°+gquû8Ö¸µ—L›àKÇÝwN®gæ´8ñ@ζ9ý‚‡É>Ô{T4Hp‚«§rÜy|9¤~ž4deÖ™8¹Å~FØ< r5V›ûQŒ|Eí~d²:6e¬† ¬HÒ­ÙJ™K¤Rcø ôûâèÑ7_mH÷­`ÛÛqU´ÒwpÖj%’Q©Qp ÜÄù¤!¥è.ȧ3e‡Œq’\ª¢Ÿñ}mØzõ +¶‘«hãNÿ“NÀ3áî¬ÌÙ5gà[ÎÖ(,|‹çLsƒåX ÀiîéÅ¿¨í*Ž¡¦ÐúrTé#(å¼¾€Ïä=øiÔØJu›EUÞ¿A— (a‚üpW§R¹Þkª—äÉvœ§£è®n8íIåwýí†ðlà^UQÖ3R4%Æ’âjÓéù+¬8;}æ‘—˜ÐvY%Lºv??+ç×ù‘‚ÐáC±,]ÆÐÏ ºÕ¯zF…Ätƒĉ…òCªy©^<ôº`CY»ÌrEM6ZB6ëÈïQ=¦­.7GÒ\á®%¿·ûØü t^Dãwøœ|2Éú"kk`j€ O3ëq8Á²Šš˜‰ÍÍÌµŠ¾¾HNˆà}-Ë{á¿€´÷õìNh ßL¹ HOéG^­œ¿®˜Æµ¢.tiØŸ·Ù6¦×™ÆM˜+ê®[ä!]†j@4¯ý°µ–Æ©[½ÎÈq-JO!h7Ѹ@©!šÒðãÚZú~îŒ)3€‹‡7(15þ7°å°ÄÂLóÁ*aÏ'ÓÊJ’ðÕE® Ь¶_%–ìžñø!]Íô`èbß*QÀ"RËý¢‰ `=ü‡ó÷¤uxÄP„áâa%!xÍ 1î „¿ñ¬e$)•Ñ0šòêHee0À‰p'lÅ`˜Ûž‡|ûŸÖcñR™Ør”¹csz¶U'sÒ݈ÕM{aÂé5-Âð° ›‚åà˜VàÿiTZ"$1ëÂÁO…Ù×t é~ú³O3+¯f¼’š‰:lcƒQ–^΃ï_IøÿÈËï"ëŽT #ýù:Þ5Aû³ 4€V&²tå_¶ƒý&4ïw¯N†ã}[ í?úõA\47Ym‚ÃÅÇœ†P&áùq¦YCöV g08^3tÉñ«;+eò‡!Ù²ƒZ|c¸ÿІì–o’MO+LšÄ¸êîPÓÐ6\˧Ã*)TbÓ^‚seOŸv?œKéß}Ê¡dà7¶ŽŽ-€Ôت ê•ÐèA¼j%[)¼1±j9±Ð‹ãŸ”4…Gø=ÅŽÁžSË)Ç%l ’Ófk§F#:\Ÿ/¬m’;wB.F­d „Œë8ØxÿˆšöKžŽUÔ+³¯÷Uì(Ak" é>m²Ê‘kP+Ôû§/ö[l¥Ù»'Çn¥JdZ4º@¹¦Ä»[§R©}†Ž¹v¤`·Œï­…•÷èÙÝVxßä“|ØKc”âܯzd`ºi½ÊÞ'èê¡oܪã5´ã}àµ#€œÊ¯™›hR×bl0úž¡Ç‡Ï+x¶ä–9י囗xèÐÜrl°Ç>±2<ßzºaéž7˯3kñuaO'Z…Ù–¾Šô>ùš{÷ñîºüWýéÎ=¼ë ˜ŒÔ €†cŒÂ#êôN q ÆH)%û·îÕ©#©¦ÆRV¾‚Žéôq7]¸òñ¢ËR$¶ICŽP8IéK¢SìÄ•ð‚™y²Ï-F¨ýµ¬/}¨ãQ8«‰ >Íc ¬±þ‘Xla%o1y‚#Q’‹Q,W®:m­»±ß,‰vFL0†á* pÈ6¬k2-ÁU™׬|nŒ˜÷8›“î´„øº<Æ“‡•&#–…NnX“À“Nî‚a¾ã˜ÂŠÙÇW)½¹![ÔÎ ÓTSµž¾n 3+Î\‹é¸ q' ŸÑ8¦`F2J†ìü‚‘þ些qÚ ±gù¹h¯´ %¾RiæQ*‰3ñïÊ ›=Š…#Å“Ø:nEÈÕ’éÊé3gçÖm4ï?JÖòsÍêçójó:J1#|krfá Ö.áó1͵ìÌT;žjf¤8š,Ÿ,ìŸSaOvð´;ZÿÇq?çÙË/twø”ýíe8”ΛŸûÆj"@Å>#ÈÅ+ˆEÈ@’„6N›\gCM ‘0íÆ>¥B^íËpä·ç‰Þë"îçŽf¨DÜ»d¡îNK7Ù›˜ü@s.0ìA턹1}ÕF™À/³{­ùJS!ÁyòÚ6ÑyÝŽy{ íU0ÉÑö3Ǿ ˜=Eˆ5}—^ðûÐ= îPZ*Sª?m²~NÎîf7ôÞ~·Ûd+xv†>Žf}œŽbstDxEžù`=UY¢ò…9Ao_jö‹P¼5ô¼j%ŒÊeº©x'|8þ¡»¬Lh[œuäj)ãBp´nÛ¨²§Á¨,ìB׋£åzÈ$¿†¬ŒÄû#dÂÜÕ¿n}áËUh’ãÀUVTÇúe­_Ûà¾ujk¦G'à ô[f…¨HQÒ×ËN¦z6™6fßÈHQ{)„(èd@…Ÿï %_0à…ⲿ®ñ„ï%1HÐyO ˜ b£r¸.¤†ðB«ªÈ8ö£å¨oZ+Á”Yé¾e•ü!Q@cæø‰&Ñ“‘ÞiO-äã£TúvB«÷v6œLºLKv|ø@+”Ô–dŸÞƒ0~ys@x\t•!Ê«ôþ(g?)ÛÓeí|AFž4Ÿkp1â!ŸýwTó]hˆÃ¿þU@ÝÇ×CБm¯1„é®P+|"%¤jÙî—»Ò‰p™H‡HéÖt‚.¯­ˆÙ LG@à x:ÍaQð#ÅRÃ.s¾jÇL qËŸ™w4ŒÑŒ u¡ßü)çWÜt0Nñ¾;ÏtVÒ1TõÓ@¸ü`´hP¶½êl+  .uL‰0„å_wÑ•0@@þ÷°×=ö¿ùfÿû²nÅ´èÛµžģѦÁ‡ Õ€@éÇy-$[åâñO+-œE¢i §9˜~~úßáøkÜÑ›£ÈiBÿ{)ò(ÐÙIÐ5ÿÿÄ>·LŠBÿ—ü\ŠbÈ®·Ówë'Ëò>ož.Dx«g*G| —:¶žÀD¦xéìý |Tû·š'LS´[H¶ŠÜe~ó‘G ÒM˜6ˆJỚϨâÉ]¿"%»¢ –q{ÒæN”Íâ¿?”\Q¶`½¨“¶‚¡ùë$¥Ñ»}£„Ò€‰”Oäv å Vúèy2Õob›¿6 ïAÅÏüèLT Éâd5)í²uãƒEÝÁ‘>9cG%O¡.}ÂñW’nBgɯOþþÜPþÿ 1)]KµSˆ¹hÎŒë:<šV»þ[|Ç®†mAÛ‹Ü‘Ê µ–å>À7ú°t? ÓMϯíÈΕ¨î³è-C+w˵|½¿is"γñÁ/'‡‹®-I‹îù(Oà¢i4‰î¯|¬+±H0Œ¦:^š1h,<èY ^¯€¥^=ʰpq0åÛsœYÙìqƒ´t:ßW-¯¨EˆùÌ,p¾;NBGoÖà´ñe‡f h}˜À’OÿK¬G*×j• 1ìVÀ)ä˜Ç…”ƒ(þs²­Z¢´ûJî\µiDA£ò”8KÃ`71€1zÑbyš¿׸ ãŠaááEyÉ(Á‘Û‘ûN+ý…¿ÂZ1"ÉCEB £S'Œ{Ó¾E”í’à<ÝçE¥‚,0&`>^²‘œ¦„5JI¨rÙÏ3ÕÓr]³‡—Å'5=¬ö㘸>lTýƒh~¿Ú¯l&º .†×áï•› ¬Ô¡²º „%Ágžx¯Ãd:‚Ð ¦¢Â[Í 4N$ô•º¦=Ñ‹’G w½ú×¼ýߺÌßlÉ"fö$Àãz†‹µà`?Ÿ6Ô#!Ñòpi›ü%ÊÔ„=éÚ¨7{RÄ´›‰fÙ¾*½êࣇ¸ -ñ,2.Q¡šûsÀÏ­…ìˆ~Rëlç]Ê£n±éŒ×f\MHw!ï#5gWFòMXGîänhWz{Œ+"G”@j[üƒBw8n º¡í¶ZYP‘ÚÉÎ/ £X€c“O^³¢wÈ`nˆnK¯-èñ/˶ɓ=ŸmyQ)¹ôÅ +F-wϦ´  ùy/åð¹éE(.+aˆåçmÌN€Á1qKèu´â½iJï³rÊDŠÈ•š)*;2Ô!PhñŸ|N'1D w±"A Õogv}BÂç_pÔgæ:0O#Ö[ÑÌÉ_qìãS9ѨNa(B#sA+Ô‹x{XÆÃ³¾ÀVŒ;WŸvtŸ¯°=ÖÃh‡®š6ùƒ¡eo £È|ûQòüã…îž×dÿî°í±`pKLî_GWµß‚æÌCaÒÎ+‡Aš»¢ÚHâXÊ“e_yÞoY4;ëÌ 8yRuI¬·;’‹m‚Dét4°ïI›%göùßF3F­xl쀞ˆïï½¼¨ÞžŸèWÉàZÑÝ¢)”ä–ÊÄ]í‘EÇ% w9ð3ó%0§³T}ž]^Í8LÊÝ¿hþKñȨÔωýF/kCµ-£.¬.Š[aœÏ,K,ø›¨ÖåŽ$’‹t§OÄ—‡„Õ‡äD¶/çz¤â±<ÅñÖÌ[¶V°K‘Ì øhälÔï ñŽÅ ,tC4wTRjøÊÅueĈª²´{bf($kv½ƒÕÿ¶oJÁCÿ¹•Œðµ•o× †qÛ€’yôS#ÜäEÙ±dp>¹Îjì瓾öÌ»ÿÔw?™»mߟ½´><¦×óaí&1WßúïýFS?~‘>AÀ~{iBÔÉð³É>É‘Ølë[¼§¯’ÐQ ¸èíæ±uIäðÔ¿lã{wÒö˜fvë•Ê™Îþà¶å½]ä¥5×Lfý²$ÿxâÊa¶ GâOÚÚ¹{bnªÂkcàî-Õ®Ò‘êÏýÇb ™Fh k"¸„oÖŒ9à)ÝÛ˜Å3œ¶÷Ó,5ÚÊ.iiÒöb柕0·iFóþ„7iwõðéOýr%çk{‹ÏÐušRÑ™Àj;ÕÀr1¾Gôí€p¡dÚù‹ºÆƒˆò+P|O‚þþÍ3μÏSäBSCø7º1ÍA¿n-|úw„Å©·È "úã;e–Ùšû€ ÎHM¸(µ¹PÀ/ÑÐD7tç³q|Eè0EÊÜΣò‰äß0ÛÉ@ˆqún’e7¸‚3SÀ±s0€gJy;ìþ“öÖÀ ½ÙÐArA…Á¹À$@/¯¹O†"âòei •õŽîB~v€¬Çêï«H½]ˆ€ ˜Ê>hÒ‚¯Ú.ÓÁÒK0ãòZБH;7@lW14}xJÃPÑèÁx£ß2nRáÁ~éü‡"Ö½>JÝÆE9qöpáè9¾ÛUIƒR0¢öŠWfLvpD¼\’@-M5àÕ€]ލÌgÀ äÖuË ñÄýñ=XEM›+âjBM`UŠÓÉ`ã½B=]¦Öï ÷æ×P0.™³[r©zÅÝÚ÷Dï^«ùÄ’òŠt‹GU R¹ÅQ½­_vÝTKhÒÝös¼èÝ'7 A¼VLk¢M/—•€(’ß}´ƒøziQÝó(w ÀI«ñSad_„*M4ã иhàR¤9SÀ*!ÌŒ0.r}ía… 1>4Ïê¥íÙu§Ñ¬%WèÁt?–ÅÁNé?ÐØ ºöy­z‚èšzu&BIë5³)s•ƺæ=Ó›˜Ü;Õ×Ï1y_TÏÏ¥uešKP× C"zMâ@ïÖ° oA°Ý\9'…Í¢bቊҀ_W;8•>^™L×;#@]ã( QŸÓ•ê+%Oü4£`1h­ORžÖñ¶v0ÿY ¿ýU&¼DÛc¡9ñ1Ý.™õÑqƒ³Æ„ %œÍØOF %åÄNÓ:rm:ȉ®\•z2NÐ¥Ñs[£pfé$7•þ)D) ¤YN}š¸¿°’8¶4Œiΰä¹_ SÂZY*£Ž R}©á€Œìóú1Ìé DëêEb¿ $-uÃG“ïÑÍ2~i{vŽ•@|›M6k[­€½fNÙ><Ó«çƒöHV|çû»4è÷’6´EÖŸ%ë:T[ýgvÁ°UŠ£7gB#§#Ách!4çÛô¿œe³{Tèðßoäì ²X@)äèGeHZÆ5‚ÿ†ú.-2/µ#û/bÌ%39X{ Ù.o[:Sþð«½?gI\³Ø"•ú´¼r®/ËyîNOÿWe›Sô„Žî—ð}=g†L0úô|nÉv«x;ʹ{Ät€yøºl¹BwØá‘ûq;ƒƒÇ=8NiÈ›Î)Ìz Qð~-V·n•¶i8|ŽQG%» \½Vƒåp¬ee–t8:ù¼§c[tÊ´/‚NhY¯@WT—æ]™ÀDÑìðî$RïšœNŠÖ<½ ±]Úž¢|«¯ê:Ž~mxÅ*ÜŠñìÜÌ¢ÉoÕ{äÅÁ$‹ò\øÚ ùŠ^Á­#kug¬ a»cFßRtC4Ô¹J@ËðM;’Ô[|›·ìzØGCõÆpˆ“ÊsX|h?iŠ\™ñJMÊzâî-{IzŸóÕÚ#¹ w¼-(´¯©ò¶ }\ ‰OÅÑVØ£ -`‘}3ÍšGòc¥ F{±Åб,ÇmàÇ´—/“ ÛcÐäÖáÏ\‘!‡`}Cb‚)F)<Ï·¤?9t¤ïÉí\׈—&· LЄ¹0}óé13±ùâ&+ —%ÃW²7Ä"ê뤽=äK[Äï:ª6¦ ýPæ½eí­áxÈË&Mdæ›´l(ÙI´ƒK9 Y¹è¹gîÀ^€°œÏg•&}ç×P˜£ö*Ôžh«NÏ¢/(ÑärNê¾€o•3½õ*jNëižbË2øúyD_?å'Ûhg2F1îi½ÁJ’è¦tµäÅçQÉ·\­%£é¡Ps÷I¬ËydtDˆ¡ÙÔk_càƒÖo¦ay™9†ëþZÍ ¦ü2â~Îy3ÕHÁiQ …ÝNP[ãP=ïQRÚ{­}öYkÛÕ2‚Ð…‘8X¥j E‡ÂÝIò%§ù;ªŽ¨ížÎ†©„ºÛ^ó—[Ö¼Sæm f^“që"¶æ,§Ö Å ©0l„*Úÿ´Á¯sG}°Seà âj? +á®Ôm=pÏy!'µ¸0o5%ç¯ Ðš »ŸûàËzKyù5ÔÜ€»ÁÙ[éLäözÞK %í¢-ÔÂnà ’tP®äÏE8ÍVQ&~ß¼æ·T¯bHWñ mÂÁ|pèNÚ´mÃ5´õÔpß„IþARå³và,ækëø‹ðüàSù•Utúf*¿¿Œà6Y4®py„ªÑjÄÙ‰‚C5 {ìƒqǯ¼•Ø®òRI k‹ûzE“kv0]^ò+`9ÿOíW™UÒª'•¡ yÈ„(å$ªãµ?æÂÇÀšŸ7Þ*mnpÑm²ÓIüe0zYŽ8÷:úPË+MÉ!ª€r4Õ§ËáׯćjèÔþ§_>€AxCW1ÿqóvÞçœnä\vka³;´Q¾öÑ4–fiJ 7aÐîÏf•ª=ÊC¥a"ùÚÙ2+wÖž°â.«œ—S'ð2!W9˜ÉQliñ*ï¾)‰ø-ÄôänKÇ¿™Aj±ZVÝ5â÷ Lè{’¼ ùÓQeÑ;'¢ú&õªŸ&6ËJf¼ø\*ÎÇ Ðq˘‰u’DÖuŸù Aw~e²y ùs¯ï=ktƒ;ßðË׈éJN)ˉ†Àâ$Ëi˜9ñÚ±b‘ü•ÉòÀ@r‘¨æ½PªÀ7^È™ñ‰Ä¥ÇˆÛ6‹•#c1ƒ~Ä‚ +e7w°×C}w:¥™®­àá–ÁÓ„q!¾º±Ø‘ÎÅYÄ-†ªvØ5µ¯^{@ µL‹BQPÎ6n4ÑŒ•°^çì]«mÑ2ÊbäÞ‚ZxWC­\¡pæ¯zp˜VäGŒ¶ßêÿ)µh€íˆÝå$ÕåzPÇɈ4%~ä}èa'K½ŒÛáÅ»û ß¶ÿpŽA¬ŽúÉó×áK {ïlÀ@ÒÒ!>!/çý/Í·Œ^lw:ÿ§AøUA$,¹ì­®QÛïû)kIw[ôÙwöˆþ¡&,gšA¾@´w1Ðé ¸Ç$^—“µ;ö’èx„éè‹Ùiù‡¢ÿk6ˆa·4ãþ||“5M@ z8𮵓´¹ÈƒW ±­7à$¶Q*9EÏw4õ[eãh› HØTÞ®ø…yˆltû‡m}:Ø&·€ßsê’ã3Ó/f&"ÏSC j”ßðÛ;‘¿¡ý·vrÓ Djõ»1Ø~¶p\!¦¾o )û.BRéð_‹c¸Ên@Lº™E¼Ù}1O ̦ ÎIùÌ‹7)äöØ·¾W> ø¬fàÅ’5ê‰Î$¿5â™IùöòO§"Iyâ¨It׃âž:X'“8&ùÇxÑž˜ßRAZùŠ: Ý]ÙcõáN˜u?n¼j'É2~[Øn™ÉÞÒ<ÞSjë‘YâäªüÈè¦1ó \@oÓ± ¼ å|-Mú4µ/x æ¢)5!q¹ãuÃà’—àn=dT—IÍ ¾TŒ!<‰ï8B[ºµÐ_WÙ—ÿ³‚¥•gC!wF41R%…ÑÆ@’†JΑºHˆûqëK3᪩;¤"ë!@Â'Vhq|žIÃÿ® 8úh$J|)ÛŽºî>Žù²Ÿ'Ik°x.õé—ÜÈ¿Ÿ¼-¿@ E{ñfçëaßü–q±ý--CUÁ/ŠýR(UÒÀm¶ïéjºyŽìXQÐ1*–üÇäIòÄiBL½~ÅØÕZ¼Nžc­ˆ}¨žÔY×Ìí 9r8Ü#&G1~íŒÈ0¨: j¯ˆ(ŸÛ¿/t+Á€»ÂÌcGB¨¹>>›zQùàr<}T †pƒùf¶} à†iS y³¦ãË‚ià}Ó®-‡¿àÂâFªRJA†HÇLÇÊ÷ÐÅäˆ÷åq‘‚êÿ1»n̬Þ\;ø…¡›DYH–ÕF’«îƒ‚Pù«:i‘Þ®#§°¶åÙXñM ¡¯ØFøÆÏkî¤sÈ‹à†«½Ãní%fƒ.[[ßYå¨( ÄtDqò'%¿A)¼O|?ê[èK¿/kÝóI¤U‹†Ó¸—‰»{"ÔeQ,ÁCžv£â Šíy/œš;_ÐJOºã±ødË–v"|W¡^`Èì©¥õP07H²“íJƒþ€ ø™õ9X5˜‹—fÀ:ÆÉÐfšÜžF ¬±~Œ ?©ŽjÔ1[=x13€-^HÕï˜ÄOhvBFœœô*§G<À¢+â/0s¤¶³eW/íî#’(&Áà‘;ŸÖc²ÌjûU%˜ ùÇ £Ý«§kü.Á¡Ð>§A€ßâå˜Fioí=é"q([ÇÔb׆ôGË¸Ó }R›wg˜ eL]ò1‘œfïc­ÏWÉÄ`þ˯™÷Lä³ý%ÿØ+\»×™/Y¸‡k … ëò»°ÒÛ'päö"KÓØmEPø ®Ì‘ïÄ~Á`ÂãV­£¢¾þ5+YÆzX‘ÍLA/ ¦âû14HS+»æÒͨ,x}[Ê}j’x< 0…ÐÒeÂ+6çàµz^{ÁõÙ=‹§Z‡ßÖd²9×ûŒ°pi»ê¯¦pÒ»1YA{@ÃAÎ#„i~!6ë:ìÒ=>·öåsÚ‘‚ˆ|ª±_;txˆ› ×^ÉWBÖ¸ÕT}H‡Áe)æöô£">ÛÆ¥}¹+BjýùÀp6¬±’|›~aX¤à´Aáö®îÁù—§¢˜—9~Å ]ìC$[`GËOÛ9^}þѰ’ÕF̅ݰ$6íKþÉcC¦§Þ´Ùï@ÅpGàŠ6/*ÉŸOóòêamë{zƒ½_ñ–±Þޏƒðï_Ûy AÔé7Æîƒ °Z„G$qS”UfßãS¶œ`ôäñÍŒ!l$ˆta×~Õ:­~(Ÿ®„{£ûú2xDf\¡POÃÓ›á¬yªã·(ËEМ¡h›³nªU¸èRV ú¨E•Ý“¦°SùQõ‰¶…ÞÀPßPP0›H¬ä«,TæîóÀ‰À¿¶~~ö­öC|ü€Ö¦k­ãëE«2²ÏmÈQ=ºÛúz£rdØ Žá^¥qv|S©m¹ï²2ÿÿ_æå2ã–È«-Ø&?w‚ÇǬà -\ûdÞ£š…¬-ǵßrlbCsv¡‚I›™âÄ©Š] Ìg0ò —z{vw »˜ý~ÏtJlåÝIëTkVvKq¤òºþ}]îÎÊ* ´qá!ޙܾaÄËįšŒ7-ïÆ\1§’V.¡¥*am,y ÀaA÷ !þþQD€Ëô ˜Iœ£G¿Ù]<Ã* E¥µŠ´ûNùeDÄpr¯¹h|؉:­CÞŽyªß¡ %Χ±Ì#b¼†+/]ŠücÇðR’Þ0kOÖ†r=_ó©>•íq®Ü fkÈ3{j¢Ð.H8Y™ûÈÐÆ"+—>9ØPµé<ƒj!2(æÀ'l,ù’³å_}è± Ö›¼Y?4ÿ}è;‘¨÷*I3úxrZ¯*†ud®’à ·øUEyÔͶ OS‘|ÆÌ 0~-wËS¬o»Vò‹¿ÕŠ ‰¥"ŸAérÊrñçY6¢°ä]é(ý¦Œ T0S¬°EÇËcØP?#£§Â®x‡_Ovu Öð&³Ç$™_´Œ¤ÙÕ8P7Ð|ʦ(¾#-RR›¡†ï)D³ýžCm‡¿ßx ê\YGÿôX틽ÏàæH°Ý51è®"<<æ)¡»%S~zéÊ´B:{‹úyi”§VÅ“kÎç´3÷ðV4ýÎZI+ÿëCˆ2©B/PÿYî³×Us… ÒfœqåZdVŸàO¸a)+ÐaØy“a ®Y6÷µÃHFïr!¥ÐçY²ÙÏjÿ¤YqgHwf,èÿrðPpÁ3qz’½ù¡8m7£f"·pµK8CŒÕ%¼œYŽ à–5lôq×nŠ«ö*6=Ë{/KÉ) U=;m-š5&ªð·ö£áíqµW`‘÷À²¿Jž*PBÏ;7 ó*PŒOFÄ8 §ù ˜LeQ©Áb|vxn *²L–{ûÇ7Gq˜H°zï&e8&$1‰½H¢4_W…¹O Òi>k @V­bS¬Ô¥ËSÎd#ˆ‡D ìKñ>!ÆËÆCt(6Fˆp\ `ÀTéy¿¼iGÔ£´©²ô4üŸD·ˆî¶®ùÁ#Û]ýñxÏë@Fr?3¾\<=ÅXãZý~ø™d [Gys ªEG„¡Ž4Õ[ÿxÚ$ÒF÷Ù6᯺ å ®`EKuz3–õ¸¡,¾='™G÷«1ÚÔìs‰\õSII‡¿À³#“iì{¼}²¬;˜ñ”†£ú W'‰d¤ëD@á(ø9\äý‚]OágÁÑÑ…ÈøÉ‰­©úMD©l¸›‚ÉÉdÁ÷ë&;ê¿ó^D”¡è ãòTº›  ˜dæç¶DZ¡üÞ ®S†LMÇa¿ οÞ¾ä~‚–i±"…áÔ«+(Þ5fíD]ôTO_\çŸâ —v¦È™3Ã`Û˜ˆ]M"ùvæŽb`¢Aè c¡—LËôö‹d:IÏ Ïز ýt ÷?Ê4Í»Zîú/EßZõ“꺖æ]nÕ¯T<ÇÙœºaV›“›-'2 ${Y:µø$>‹T‡oF©íÕHͱî1fès“)ì/ÎrßK@ç̺Ñ@AÈ?"‚Pù’¯½\E”Ëþàà…JÌØ¶`6Òßâ³ÑTbû®Bsf{º¨ *«²õÓ÷“ÈŠö– Lˆ)´· v‡pô’ÜU>F}«·¤?+í$×|Šm“äß…þ‰´èGþ…+¿µñßœš Ï™a‹Po½Lå©Aj®ZÆ;¨£=,2¶pÐF§_rx2«Å›O¶÷3¨ý¬óXëár$T´ÁÕ8|‘Òv¨]nø·n´™?.cmÔך*z¿bRínkƒK}¾äºÍ:f´rž4õ.…Ž4¸üŠCþë׌€!¬½á"pæ|- |0í*¥€BGvÖHú´—Õî»C4<·Ü¬°ÏƒùŠû«ò\êOøSé,ÏÀqˆy`Ï hŸci•ý’Ú«”_%ýlÖòÄÿ‡r$s³u—WVï½Ï_+:T€Þ}]šdC½äT¯‡8Ò“éxÐYçIéü¸^ß1Dgæhâ»hø!±vב~Ÿ¥«S‡1á56 ¿:·…$M<½0æ·a€ŽR—É"ï”]:b­1"¥­–°áîIÏ/*K“ß3QËð¥T¼ÁßE³NyåeÐc«ß«ÜÅs[?Û²Pľm¢×ZY:{ç·§ë»ÈÒéü3‰_}»qÄÁÓ6vdç~è¹k§Æf¼MÆûÄß3Bðn÷8+hƒù¬Rˆ°ÉUII<)uIÖE$IYp)g›æ¤Ê‹¤LMõ!i þoÞ|†Ex­ás&Âíš2&cχðHý[“ÝIËöÄ÷¼š)ÚPYžY%Kj–÷œ¸hQÄéè7¯âNòx€Ÿ —¼AÙûÕUµQ8r£yuÐc’ÏŽ –7ExÓ§¯U½å;$ÕÕ‚…¿ÙýTz]>%V™díÿ;ÀjxŒ2/rFQ>KtÞ¥dßCQõ 1ÞÛ‹Èg Ÿ¶Û}³}ðþþzŒ_ ¬r_LÙ™ÿ¤|ð`^¨WùY9:a­qjâð\d˜‰S¡èî›TŽ“™pb-*šYŒA0jåöýr.׈ñçÎ1¾×ÕÜØã1ømá¤Q5i9=.†iâ^YŒ«à–Y÷ú}†0¹6g5…Õ^€ï ±oOܘæíѹq¿­uc Ýžw})Ëðªí*… Ab§ðþxü¶J_‘õÆéÄï±Óé~"­§èEü–׈½M'†›«×9똗ý½tZaÀÚ„—o÷ ðÙÒŽâ5±×'• 9áÉ Å!"œ»SLïô°­£G¼_-_½}f*ÐV@Âæ ˆãÃS]K¯‡]0NŠ‹Á•y¯ª×Ê+…0æœý™aWeuk>zœø}¿Ò Þ1YCÌâ¹ýyº©âo,ƒþ‘,|Ã1Fž‚ê°ÉèVÙ¹òÍ¥%æ)ýâ,©·G ¯†hà2Ö{Mï­‹s{:L‘á]}z¯(¿ð”°TÌ2cÖJY®ó¶oóQ—‚nÈßÉ[\þ…®Ï>]Ʃ˼Þ[ÑÉ«^âìÒ†P€%™g ¹` É$ÿtÇ\À¡J¼Ž‚©Jõña6Wkª‰çW³Óƒ¹bk­' nþe gŽ ^â 1S†pµÌ»YÇ4šŒvðFŒ2Ž]˜B»Y¿S«U”1Xüxã¤NyÜc˜PˆòË=tY̾›—¦`DÄ—›8xoÏ@fq¿$ôÉ¢ymë{&6ö’æ½?À¬¡ ¥K¼¥—¶ð0¹9tpµ.òí4ŒGÝÑ:U¹Öàüì¸P¥>„Ž$t3.t¢òSY[¨08´Óo?n¦¹úÎSÀ¾àøï‚Îú$^$?dûÏåßà'­–np,oUÜøª$v} æ4ј9›Šñò IÎO8«]îòk] (VÒæN|½Pèš„—Ÿò4,³dÒûèú3 ªrS–†çñs/ƒ 8ÀtɪŒú¼f\—¦zæ`×àð¼PÀZ“«ï\Ùn#)©ó>ÄÙ? ws\8[ðCúédiv°¯ÿÜÓº¡¤,[£¦Ù»²W¦ŠøÂêSu•7,늷–ÿ?½ºn’ùIú‘•¼`þÁYjÒ<ž»ØÀ2n‚ΰP¦ Ñ5±> áµV™Jžm®=qëðFÝí3IÛZŸ‹ƒZÎfNÞä.ÿ¿g/ÓCô ®þ/â¹wäÆazqf½¶DO€”9išµ~ª’ÑÅf÷ÄΘþ×ô2qår9Œk=ŒGõŽ dÒA!g ¢tTJ DµÊÕÛY°¶8åÕ|´ËÔ–®Œî¾ÜÕŒîîFš¦…p—A¹„¥wkãùÜ…ðï³Ã.Çþ}ˆ%!æ$ª3hçÖ}H¸b¸Ýð™NÆ'œ”ÎáN¢TD[}ïÊ.$YšâëlùŽ}ó%ÏÞ¾ÈO»_t­ŸO˜¾#©8›$!ÍEjC.éäÉ®rkX$­ýýç§A©'ãàvqF 7÷x¾¾8ƒt«ÐÛŠö3'm±£Y³kM [hp¿17}tjÕa‹®ñö1´ÛÕv@?p§º;õÄ2Èšypç¬?1j~Áœü,'SWXg¡žÜÖg¡8Hk™ˑϊÂíI;nt[s¦Øµ\„ BxÒî0©¿Hl>’}s²„è?<§¥6ÌãL£ÄÚ?1‹Gêgs{€„>¬'`£yÕ¸t¢®&Ô¤Ù@ùf×$?튴Y•uñæ4ìæFDƒ#´³çžÞŠ5?­VçãQˆõŸðP.Ò\¾Ògkå²ïL‘_ñìCGóûL60ú©ª}”¯U”qìÆÓÁ67$áyÛÇ×l3ÇÅU°Ë:¸Ó\Ú¦L3+Aß>;ÿØm¶¢Õh;ëÂ$%XŸêËP"ôætȉÒ)»uÞIo biHóÏ«°JW¶Õ…=[OOw>à{$Ÿoúùìóuù¿g6•­4çŠ5i{ÔHY%É]¯{’‰–RÊóÿá¨ÆÌ“~²ˆÀ.É€ F¸ïfyãHCÑB:þÚ+mÎ)Úý+µ²ÔS“2¿% ¨‘v÷Ú©—:nñ`$è/œ µîo(/4¾ˆ g†™ Ðbžô5Ãí/c ÉBýluÈ¡M·vq¦5ÕZ—®pºCäÙðlö1ÉÙþ–Tfy}£‡×½úåç=ñ 2''ðYÍF øgzñ!+Ì¥š¦ë{`¨õÍF®F·fHVêôü²hgO!ô¯ ÏÆÑƒ©Œ F%ÝœY3ÄEÜÿ–`¼/ íxóh†¢<ÛvZWuFá†Í¯åè~êg ^#ä³òïlãC¡Ä»Á Q:PÙ85w”Úoü’ŠÛÝPÆQ2 Í7òç6Il Ö,‰ÅbÌp1 MIð56°í8Û|Í«ìví^…Ɔ3âÞ?¡+ªÍštbgjºÚÄ êõgÛ©j¼iÅD·ü=…â;šSk€ÏÅ>ÜôÕ!ú*ĉ0ˆ¥ë4}E‡Å*nà+É×Wê6\¸DÚŽî‹< r@PÁÉ݇©‡AÙòA·ˆö?Û&Æ‚3!žZÈq˜åÖÄÔŽ­I£[£Ýýæ.æ²Ý@úž0|$²›ÚÀ ¼Î£$Q\Yv¼Íi€Nzd‚VÉê«|køìܺŽ,z2 Ôæ5 œ©E½ÎâÌ$ܪ.HéÐ¥5rÎèÏV'†0ÍPÐÒqéæGmD>8xyå'\Få•—2x—å­r‰TÂŒœîeelû*#†l£d¨"a"o-ÿ7YÝ>XæQSSšŸDí)ýaõká»Ï]òÂÏ"}7Þb¯†æòWOþà½ÖM!óé€ Ú§n ··ÄõY`(šu?=;þƒZ£”H™Œko‚Þû(÷³™YW@&U €P)¾E^[Ý?Ïæaáì›z5ø{üGÍElÕÅŽ#–`C‰&ÔæÍk.ÆÔ"^*añ…¶˜åØí¦ï¢À¤â¥[b²NtÚÍUCY¸%‡¸…1Tä-j M¶âÀ{eg^%E„½â½T»wS‘‡¼µ4Y+¹DûÈ­ºlL±vÝË Ñ†ƒ¸üL<êIJðÒ™õ/t+hs°ðsB_(쎵uØ«òqçFdÛ|2u5'øÁO§7¼ÝÁýþßç¼ûeÔ"þÃUW0=~ª‹]#Î)¶Ú\ͳ“†ndª™ŽÁHwéÒ˜}º¢çIÓ˜Ÿ¾6K}¤»éÆ»—mOZÕ°Ôrs’=ƒ@:,‘È_IÒ Ø×_—÷ÏÎ ÉôÙµj7Jܸb¢ØÝL®cq‹¾1i ÷½`PœÍ‡o£çgÎ6'Žìt”êŽ}2ƒU§¬QÎwË`‹ö!.D¡Š¬VÞ9V4ϘlÍ.$'[3*/,k¯û/FÏá(1RZ”­ÉˆV ÷D1_ ˜³F”>²"±“­ïÃ/â\n¦õ$¾R¬™Ž&¡ Éý–¢u 3Ú+ZT³„XlÿÔë(-ŒfýϦhZFFß9҉×9 2¬÷,¸±:@w-qÆ7ìÊ}ú#g‹:´·ïpû§ÉæQ‚åyfrˆÌÜ`TŠ•x“ðÈn §]#Š´¤xSÎÑ–Ùê+··LïùeÌfâìk˜ÛZÿ—„CG¶ied¤ÎLÛEšío—Ã#¯­5×¥–¯7çÄm“«+€™µüÆ¡Æy¨J]Ap±/z%±DÙ-ä`JPP:Vp–>O Ïßm?Þ{ÑSŸ¿_E½ˆù{ ¦·£Jº–@©<2¦ }¥òq‘ï)ŽñÒ´Ì8Œ\Õ‘ºYu?|f* }£Ê™¤âCqnP\…¢VL]IÀù¿ûÆÈ×þHßì <±Ž â@‡g…½gIu«Cžð꺂Tœ• ê?ÿT*ú­®ŸX;:b #.Õ—0HWþ$Æ«Zít_Þ 0 Mβ8•éD"õÿÛA¡7ÕΦwùà®Vƒ¼%¿É Iñtƒ³ÒÚ’RÌKù`è¾æç6Nñg£È7äñõœËœâËÐé@Õ ì9êŸKWœO° ãX ëÂÂôäÌw]Uoˤµ> ïÒÒ^#µ¾£w°‡§Ÿ8ÈÂù!Œ{Õî8á p XüohPÎÞvÅÃûÏ„3DRšKk*W\B†¶­/û_Š› EÜór0£{zÛlƒ š>ûké9¤ÏÉ?~ÌŸ?¶Ùfš,;6~ƒÖÑ=šV (N~1ŽÍÔøJ½Ó‡‡N¯Ý™¶ª>zýì&~wµ¶Qôä½€àèO$RïèŽU‹5zú´¹õé3Ûs§\¸;ôì3ö >4lô­mªÅ?Õðž•÷WDF@G½á«v¸= ³FÚf·©$¹¸[Íå2± £»…—·ƒj-ò9–áž½$jø·.D QöN—ïjÔc•ŠÅ´3}î2ˆrLm/E+%‰YQ”t…“=üdª~ºe Ý»ªèCîšøwóýêÃAXо$}/NŽ|”%ò×Ïz_¥2ý¿t'3œÌz^·¡Éˆ5±P¶Û˜l|³sL,‡óµŸ')‹Þ'ÛeH™ùlË‹3 Ü5ŒHº£¸·ç‡0áÓÒë¶¼_ pǾT’-až‘Úž¥°õÍ+–Tr%mÄ +‡@¶àÞ¨xRz6ܲ«“@cá³l]°5I»¶E‡Ðµ1¾¨–(íO¬ U¦ù,‰šc7Ô鿯²0ü˜éá´Q>?ç]œ®©@Îå=(ˆêÞy‡¢"|g¹v…É=ÞKÙÄç!¤ïÝm_‰'ÜBm¼Q¶…ðsn®RdÍ èPí.2£úÿYúä`Isv7ìÍñ›ÿÖ®ôU@m:µãt|˜Ôƒ|ƒ q›Ú‰=ž,^ºÀ Íæ‹´ÿ´ùàˆÄæßïôjÑsæ7áxÄU]ƒ; åĮ́ß[éåSB3Ç"bJM¤i7.^®h)uaûtÐJSÉf4Ma+†<aŽœŠt…F:¥í;3Já‚ñçÁ:¿.§…üN4£NjòÿÞ˜,ÜŠ]á:ÂÏÚc/RTÍÃ0XÚtÊ] ‡º5tRJo@ÓÞ‚ÊÞˆiWáUqB•lHçsurØŸºNûˆ5MˆA9ù**xs$Ÿ”¬ã#ŒU ¼›M8h D-È®"<-Ëê‰È}Wì]Usåû œMaË`LzÞµÿC¸-cO7*ùàn–Ô5-Ñ-£Þ(¶€Q®rx=L5uÁ˜4ù*F•чµJ©ÑU ÆÕ; qBØPƒI.LF‡ìÖ‹µ -FÞB¹á1Ks^ÚoœÓm¼âm8¯ -¶ÃÒtpåí4/µgè$¹ùå[“üž­“éwž±Ë Ù?æG‚`–còRÉb§’øêæ¿WÉÖI 3ŸÙø9gù|ÐÁ–´Q:°‰cŸ¥‹˜ñ¡ç&¥»YúñÛŠTÜ„m–dC~/ƒ:„TÛÆeŒßIsîjiW s¨ö"ö¢)±[¯ô¤SÁ¸Sè¥I¶ Ìgk$3—Î¥L0=+«™ÐV=6ŸåUôÏVDÙ´3Ã|Á ¤Ý£0êŸv´E¡ÔRš9ÉÃW =uo¿Q™Á}X ¦Ô'Iž­t÷¡è¶±õETšqKñÀÓ‘ø[؆˔ùV"Œêú‰ÂÂ?†WcÑËИû.u u´t=S9F¢Ž’4ßSžíŸ#¨¿.MÌÈž(tjBdÂ]]Šgª.¤Äc¯|Î@ÈkIúZÛ'Žk§<ò²ä—™#!=3óLyvÆý*XÜ€!ÈG()Qv} ê"Cô]‹tZÝÎŽÒú†æQoŠúÈÇ¢“¤e´[ˬŸêeB7ï-žk«sÃ2K„§ÂÜ`íHú±ÖkéÔÿ±fbîÜ‹^ò}y]èJÈ©2tSO§Ød±>T5n–3Í–ûïwáßÜæo®rÿ/ZÐCdiÈR*úTBÁp3¥'ű}ßcŸŠÅ¼vÇ^d¥dÊeÃäu¶þíx%‰X\oþp.T23{ÛӠÐò-FmXÐ5QÞÒžÿÇÿd=uÓpÙß"¦Cu† Ë•i*îò¿«´R»˜HïcÁ@S­)¹˜ˆ#9XÞNôñ{Á÷å@tYŒâEqžsø#ÊùÓ“o×wdMD¢‡¬PfIeþPoË1 Ô½/àÉ6»,·²Ì Þ ÝJC½‘ }ƒHŠÚîfº£v|Ð,ç(>ÔrÄ¿€–=©›êl}íÇRS]BÒËa&¾¿ÆyY턽Î+S~j—PÈ: »¢ç›.ðø«t<㢩!Äg¥‚]»„ØuvÀ…äî—­JM‚>ùE* †¡¹bÅ%Œ³ØS{v ò©ÇhùØTóqhÉ;Õ¿!'c]ƒøÝhô(‰zÔÊE*ZÊFR5ÓFtá§õØ1NÂD#+û$…jq³ Ëãcp4ÓFT‚š~’Çɛ苦jõ®Ó¨‚(‹÷™uCL€<׋iñÒÅù#ëÁܨ[J.¡ÖèMÞ§LeÛh¹_ëþÉœ°Vœ> TV‡I¨ŸÜÄ´øìFÏÝaÚýÚ¬û2ww¨¨ô&TÄÄf“´¿#n#¢-Ng'†*dxsü{㼌nÓwÝ H`ð[" $„äê„;QDÕ@”“+Úì¼ÜuL„ÿ]Û|QÏ1öÚ¾z÷Ì­¸–h.š iŒ›‹ `¹dõº–2½È©VÀ m_]áóÜ5 ÐÍ»NÍqŒRÕ ¥e(ñ/ÿ¯º)@{¦¨¨¨£òše© £R;Œ8ãü`Êß’2,_ØIÖ+eE-´9 #ÛDòt‹³¯G“AöË…~¦*ÞŠ~]FKX÷¯Œ|Í9Ưé;PNÑ¡J‰ÆO­§¬ÄŽzÂIŠ…¸˜ÄôˆµNfwZû›&,Š€vÜv ­n·ÿËøÆ)¡£,—ó^G·~ðŠzùêSèæWuª*—Eãœë µÀx•ÔÅÇ„DE2‘"sd¶¥MFýb® F÷î¹)!LŒ&,¾þ¢7Òù‚¦÷³hè «Ê{@W\˜öÃD›á*{º˜}œ%@PX3õ`ç÷õcOdsg&÷’Ìצ/Î}ä¤èLüw^{¸µ´‰ûÆ’5ÆÊ„½´U}¡¥‚âù³sÞð‹GÒøøuƒáÛuhþOdñ±uÔÔÜthoˆª‹ÿqS;à `hkùNGr ¤f&Zx¶A¹Â’é=ƒÊâU¼µ œ ,¿ÛZNø¬(¥»2Ü“ÄEà-iÌÒp2F!ª?2ú&.7á´¨Zqà_ÙÈ‘€;ì3Ó0uPôúà÷™¦}âç§ŠqXkK·8©)Oî,H^$ Åöö/+%ÛøèDœµHD+Ìaó%Ü­}vN¬²…ÎêçŽÊŸ7ái+«JµÔ]¬cI£jKÞE·£Ë$Hg–©’ €`¾^ed¨®ˆ³³ê[õp“-ú ÃôQŸ®yŸr4(Æn¢j5¯Êe”-êþÕE^8¸™pÉ$æÍÆÀÂE„^¢éçÐÊßwÆX)Ñ”¶@²…‰9¨_„ü¶÷l¥Çc'OìBæ}Τr47 :é¯5ܰ$úqKšäi’S‰ hv$΢þ"ºrÓ ÖE²’Ãxy—Í8{°g–mKŽ—vÞÒ€Ÿž‰rà–ºÞqÓñSªp”–¾“Œ” ö4ÂBDR¸×c 9ò®-£0""´5Ãîþ« s¥IÐ{ãºKŠù n0MgÝ¢Ý$m~ÀI޾¼ Õ~9¼’;<ˆÏÜm½ÔeÜ =Ù>òX¿|0vTäÍÓ·wœiÚý>¿5q»åí—#££ |‡xá¿j|`G׊Â{Øœ\OÉ’³µ"ÊP Ë* 2%ýDþàì&ŽdDQ5pæâ,½÷½ Ç 36ŽÕöXL{"D¼~ƒÇ€Í:\‡ºí“˜R) [1E(kÆ{Qyë‘D¢»îÈ©qºrØ(Ù¶@n–ð¤ó^A€—PÅ.T^$Ânao|:Ôü‚’P'¼nÎ4Ü”ª:q¡7÷uéÜ'"4ý°ˆdiÿ~{Ÿî…ü2!{j7·¾ù!3õõlnÍ/xâ*qF»ÆûP¤ÿ±Jà”4iþXjJyl¤nʤòO¥néfݶ—ˆ•ÐbÏvóI8ÏxÎz¨sk‡Î;ØŒ£[®=éÁ‡\j,Þž†ßüa4؇+œJF'Sí)Š*Póha;FÝÿ"(—7ÙUÌ v87îÕ­ötÏÌ­*¶¿2ÎÔ² ñ¶Æl0©§»;Ý–ÏxyóÌâ¯Ù26˾ð‹¸ßˆbvŸÑª€ýBaàFƒ$O|‹ˆP¾Ñ[e\b0­dØ#&µâoÑ=ÞÔàßÐA 8I ˜X@..Ç‘dŸûü.î .7Jl‚ÎÅ^ ‰±Ïã Œ'œöœ6A"·=ÕNw0ü¥t{|m´kQ+ üF£ÁÄPwAb°Ž\¨]™ô”_ºÈ¢ÇCrßü·.ÐHë8ù¸i¡å {÷§²n¹?:kPvS:MS…ðÍö–ë§ç²¢·19Qö¶kzÇßf£_JA|{™¸ 3¶J[÷p7L¸%‡ÄøÎlÂÝëÆý˜à½½%"‚›Újöc; šîmgÆ!KÊëO"q{6à)r5"­6q*ó‰èš#v<æuzó®d/U¡\”ìÀ åîîWKÖ›[Ø'?އÁࢷ;e¢ýv3˜Ç:)ò'¶ðÝw J'Ÿ¶‚å<Áô!»úÌãÞ³{ZßOÄ\ˆ¯å†H·’ÆÚÿ½Æ†=óeÇDwØtëÚÑ bÄî„Ì-S«Õô²7:·VºB4xÿN9¾B¼×7Ràûr:fD)S¢€÷OUv×¾ke{!žëÜþâûÏ-–…–7]7ý¿Þ!Ĩä΂5Ý1Ô Ñ–‡¦Ùœàu:zÿºõSžôƒ^ï1Qšû¥0¿}’™ŽA›&åÉVKÏm#:p†Á¹ñ«Ó`’÷Å™/̨£ \=TJ¹r6 ¾ Uë&Äý÷V¦¡Úž‡/ßÐj](u6¿¶.162ßgØc1¨ +Ô•°Eÿu©TxùÓÔ®!¾ÙÛʵÚôBd ÁM\SfÉ ²“È%‹{RÜGS\αW•ŒªœúRcN>)|¥4ó:å…_IÇN”^,)`ò¬oß¾óx#pJ˜ÁÔYfX§¢×lOêzh•k†]ÈU8ÙnòÁ™ÕB]O1.BFÊYNAÖç ˆÉ ¬&*ØCÌ©Õò—df3 àõŽì?PlA`d£TnøLËC½=´&I‹XýKÚ‹f‡‹ÔÎ)@mZ>aÌ£/OçW'w¤¶«ø¯ZÏ<»T%fù§¢ç ®>ÍÐ:†N¿ùâðô=ÐÙ'¶Ä:˜cG vÞ’¨[æGe='¥Ò¶LÅèùâ(îN<ߌ‰tUÙ{2—ä8º9: ÄƧì°;Y L% îE1sE„GOÉ¿×u:®Àph Q6~üàƒOh0ly1[Pð MðœUN°ÙÚÍí"šc 7A iU(Á4Cœð©Z‚ÜM´frb™RnŠÅ]Ó^ÎÕUþÁ¿¯*Ó8³ûóšò«­ òõY<¶•GAm~F+UK`oÝ„ÜöueX)ÖìæayÝP@¬,™¹ƒþê0{RR} f€‘, &,QØ_ZÅSí˜óaaL!>¸žÒú¸Û¶˜„Bõ¢LZEœý iîš›¢œØ ç)P¡w—ÜLÄ-)eŸ²BJuïEðgX Ñ«S-ta=yëmîæ(b7á,¤e,ÕÅ©$—é êw;V?Üñ‘Ù”Ó»°²¥¯œX$òº&À޽‘#R ± ¿y ·CÕ3ÞTR1‡pU–%GÃÂŒ˜ã+Ð`¿%D8ƒ4/$ýxRԺ̌PSZ®G4%ûM~¯ôïês\þÄ £œ` ‚*€p±CC˧?Ø¿¸tŠX‰bf©©ã©áAZ™È*{UE1âj.¤Á¡L¹ÿ…Fú¼pÞ]ј@ çt–àV¡OÖïðá2Ò^#€‰~£,Äz³Ïù7„¡£þFk… f ²^€öåÅ`¢´ä¿‰ Ùö†Æ2ñ;¦+×Ðd·õs›œVÛŘšÖ®kŒ»nêŠu=)|.“4DÏ] ŠÜÄ {éèÍ–SþXEÄV-‡®ðaeÞ6÷“Žñ¢>,gágéìJP¼t,ƒf+µÚÏpB+ª1•DÃ5¥¾û_O£‰ùQ@|õZIÚZÒ†—ÛÔzú—àÖ{Aj¬Ç£Ô2Ç9—›—Ø67 ƒÖüNé÷cÏçõè–(z]Ì”ÍÀ'žK¸Ø} YiS9ìyõÂïñ&Ak LÌ…ýSOý¼üoÐC³iIªLm`Z³m‰O›<-N³ ÓsC4ò]ßâ‰ë8©ÆZ§6/’=KþÂ^ÄǾ;f€l„<>—••kÞ<ãt¢øø…ɲ=£!¨ó·Õñ~ÍÝKbá®äiéõ¬i—ç4¹ 6 XôÛV‘¬5‘ØÑÕ®¦ãÑín׉c¸Ç`Ž \dv7BÍ'îFâ*rÑ8實-¬*'e±5'^Q)ú£‰\<¼;ùxPD¼ïwö㜌hÕGůSÄ­bÌõµ¼my&(hòŒ×úî%"šxÂù}¿,‰–“]ÿ‘£¡²œáûqQ õø6Õ—I`Äåë¶)KlÊû¦åÇ®F´7rúÐv}ü9ŽJl1¹c̦5"¾Lþ¤¸[òÙ0¨L¿rBÀԕ˜Jc!\}ìйlœÃ·,þ|j5Ç6'¥†zº£'ïé;¾b|h'Ü%]•ÞîS«}mX@6¯êf(6,Á˜’äž ÍnzƒÂG…rڤϒž ”’ØÅ~éD‡k jv¦rÐl W´ ¹À†Ã-–Ï6Ázn÷ °M–Ž} µÀÔ95Ç™]/„iÞ.Ûår‹Ïc÷òûˆÆ0¦uÓØ ‡ìGò5í¦}ð)yÕîíÞP©£=»)nÞ9@‘¶¬¬8þ–|¯¼7[W–„Ì7<†‹ñ‡úuEäpaiw ¥¢F£3ùÓ@ü’£@vX‚‚ ˜œÕK Þ¦'¢¯Pè=¢¤ŠÏqðâ|šO#WTqVéù"Ûì®|’ð§ËMëÚX˜jÞC}ÏΦ¤Ç|­ñǵcG2îÒ˜2Å|ÇØ8Û ì§9ã3…ú¦µ5râ,´ÃZ8ZÓˆ™LO5UDCÜr­6|÷$ñ¥[JÍB}VÍ·Á+ûÈmÊkM/wsÇ2zÐàìôH½šøöŽx|©QÐ ™•m¬$Ûà°;…d½l_ /\ÖøÒapÿÏfÊȵ'+þ ´©•3: »k™!ÑëN.½î‹[„¨:¢0׋^ZtQü}ç\`ãêNØ›uŒùäÏ„lö(†§þ%Yˆ@¥ X^)W­-;…5Ì2ž’Ì{R®È´­l„;%ì°½÷ôhib9_.$Ô`±° ú‘Zÿv%2ªN9}ÆÖw²ÚµÀzr4ÒLâ¶Z—ÜX°Øß©¢Y×xa¿ú³í81Ko}œ|ãžÙ/á’›9 wþCqtŽ;Û$¢l©¬¨ÌÚ\¡±Á+ 2Ý@Ÿ±.èSrE¿ÞÌã S¦¥ðË<‹–â]¿ ä¸tzkÅ„ÂìÙèz/5Ór¤³Û'Ò\=sÄëϾWб2 fK²}%n¼¿/pãPaZU¼§¨CÛ4¹vöR-(8ýøB$‡/Ûðãêæˆ9™àNåY£Ê­}½7û&øJÒ‹B|YJ–"”±_¨#‘vR_(6úK'´‡]:¾wMt+ÇV’k#€£ßf*›•ü¹„]V ÈêjkcU„{l‚5Ç@°ŒÎÙå¯IÑj¤ q-¢ëmwUGîôjóeWÍ4KÑóS& y-(™6ªÖ 8<“·öCuŸ†gÁ>x|ʇ®iéÑ-%¿™LBÑÆŠLGȰxÖ¼‘TÑÑš°Qµm@Ý­ õ4ÁÝhmó󶈖±€­–M½å­î\´žŠç”ùÃUÚî×jæÕéÜŸ=6ž¢Ÿò·]ðÉÛŸP:¬'ÍèWåCÖÆjÁ³“JO>«^m¨üa¨†ä»‘\‚çkh%ôžþ‰sß\÷Æ0òUß+!µHŽ—#©\&©Ð'5Aeïü¾íJs¶.ë‡jm©ÂzsöooÚ¶?ô¸Õ™(;vxÿ.Ø?/cÅ”4ç#AL ë A„_áP0oL•ض»6#ß:Þ'²U+êäÑ-R,³¢,ñB¸ÏÞ÷IJ–#ø=ô9Ÿ¬¡†(Ьýœ{KIúS¾4<’äÒMŒb 3c§fß'6z\Á°”‰Ì·ãYº'¸c_î°^=ɤÚp¾·¬ºJ$(Õ²¿ëì9þµ_A¤¨m)úWbþR͆åA˜*˜ˆ/10G×9MÒt°†ôô#<>¡ŸÈ¾çÓö]ºëÈLä!N!­ÑéS¾¨À‰iVxîc_uÏ–ÞñsÄP¯†1e ÅSšâ°/áU‡`ßt"ê‹%í-:[æ,=¸÷kF¿×·$E“N@­Ž‰ã@ê¢ÿô`Œ·EÝH¸ô“fï»Þzb{&™`šÒ z§µ*‚¬žL ÞéGð>‡Š,$úÛå­çíÁL’½YËÜ£ÄQãúøÉD†·Åö’OVÊ xOVW¦$Ót¾Ô–žÒ![Ë‹…ܳlØ=ƒ^ðѦÂè?È7Ü L–œ™ Æ (æQE²ý‘z{%·_”c©Ò5£h¤ˆ„<5‚’ nYÎ1.1?“3§ÑµÐ %'ëi31ÏÂ*6\£[¿ÎÕ0|áSþÀz‹ðrEKîù#köΰÇö÷¸xJ3á(b†- ‡5JØË"®6'.yjlLÀëqŸî‹†õ'Ôro¬áÌú:„I»“¹ðpáIŽ@ŽRí³××âT¤ai-žmú+H““ôþÙ•FéJx”`5 ÚEƒÃí§ÔF^!€®N`M­<±ðÍvüíß½{ù¹@s[¥”ï†3bƒtÕðÕv-÷x×-«.ª1‰ù=ž`g=†³ÃÓ³ÞÙJÒþÂ6ÿ6J2rBÞ„‹iGº¥>P|á5C§HTKrʼn¸ú‡Çùu% %'„ uè¼Y8Çxq0ü29*Aá÷´Œ£/D˜ÿÞ½|^[( ¹Süß Vü}«#7Lóÿ÷(á°ã.¤Bò‡êÿ ó´VÅläÇoÓc`tÐ%{ç7§àºëç2êk*}ãÏôŽéï`9¯­Ch¯ÍóMÔ¢ƒú×ù #0úaÍÂÎü-²æ@—Lž‹—Y[ô¬å]Íô ‰I1¢†‚òKÔ_¯ÜÐ qt"J-O¼ D5Ä]í½»í°;‹õ?DI·äç—Ñô¯žB‚žE˨ÿV†7šb·ÓâÊáÀ[lâÉ,á¿,£bˆƒÁ½-ŠÛ´ µºfŽrã(H¯cý ù×D6Åqcã+»¥®äÙRoX¾Î®/Àﳬ3é‰ÅçM.ôpàUT‡uªáGמ2Ý Ì¥—Ë&…iÓvöº¥1ÍN5öûO¯Ê¿Aú¼ýyJüêP”wÑ5’ÜÒs`]3$êøG,Å?û‡Ÿ³:pÞ•È^ì¸-^LÓ˜ …©<¶ö¯„bn\Á)Àà†ù šF«¨[/»êÍðV?¬GsãšµŠÞx¬ÍPÕCÙ7C Ù–•¹ºù{ÐÖF¹×*ëÚœ0pÙ#D4Û­[û™Ð€×Rnû%*æê*Ö4íô~W¹Häaeâ¾bãã , DôKƒµ¨ñ—³EË¿ÉÏϨ¯×¡B>’4ºŸÏñúwö'¢^Ãé¯õ6v@ϲ˜%¢´Çf8Ï Þ¼aišy¾7c4[ØôÈ€:¦;y5èݲª¨Q×[Ò`Luà鄨ó "ºƒÖÍêw÷«ž˜Ñfÿ‚~9èzœO²J¥:êã‘ZrÃy4Chd b`ÆÞŠˆ Q¦Þ­²sop¬)ƒ¼]pi]}Y0td5Qé$kâzj>ºN™á˜Ë´ëÚ÷†Ý­å6Æöøñ¶ÅzšËðù}^ú¨ŒÆYÙG|üÒ×Iù­ ¬/’àÿbMȇØúú’ÿŸQ…Îç|[;­Avñ‡o2D-˜8·þl<+µ9Áð´DWšhƒQd©jVQ|òƒ|FÙý¬ =ÖÛÈÔÌ.c€ªAølsxÑ) m¦Ä h.ÐÜšF“]1¥k_ãD±Éiä‘{ø_¦™ðNchv´U§óQ{WI÷”Ù?BOžiêü³çp~÷ÙDB=PÓæ(âÀ'=o¦ÐÁÜþ–M,õκ2„×ô¾ê†7#opõÚÓß3!Ëñl¸ÝöfÒRçò¡s[ž¹@¯H·8 `›_·u¿ë\{ý߀mUÿ–!¶€~g®NA gVR,á(»Œé þÙ`–ÎÌ‹4,Ȭ<Þ«X–9Ir†nç®+ÆÛ4®ºDpPâÿ1vš[Hpݽâ®>3¹ã¾éRáÖC!!LìØ½—ÎoPùX»ÔXÇ3'›CEŸêÁ¥áíz¼ÂW“U½F,IÊ]<þr…ÜáÞƒûŽ\°’(ck—GNØ)È ¼Ènƒr Ýû~èúw(gæôxþ£µ‘>( ¤Ÿtâ¼ãÏ^…zµOƒŸ\[ºRh,—IAßeOF/ s5ìloP±£‡žI¾"…E*¸s+àÁ´v;Ù…'ÀQƒt#"¾8”øñ¥…‰(j¿€®°C@‡Î‹×ÙO¥ Yñ°õ¸šzE¶åBÖ,W£·ûã“"ÖÃ`]Í÷žÐòöôBU€0"ÞÄÆ@ïG²]“¡1²‘…³Š´F±xŠèg“ØôÉáÅX ²¼ã@:ÚE¾@…¡…æBg\fs€7A½ýá`ÂÜÌf^T›?"‹\Gêåi“ž4&ü¬ž]œln×!Ãé'Ï}o™S4w‰"ÈATnŒT9]QãYFtf‹¾Z’WãyÅÏ”¦Ï‡ÓSj~³¹÷—W‡ wb1 åàÎìg]ÄŽzÿ ßôø¿2Ád/œÎÁ@^ Zé½,ÀË(¢2 zã«âF –ø[³ã„ .´ŠßœMªeß!ò·”_Uˆ3Ý ؃`T±²æåÀJ´DÕdøþ›GH÷”@p†6ÅIž¥¸Ä PÎùNä­ô{u¶eŠô _trêʇ<@¼ö;´.¦ÃúѶõb'>殤¼`¾1 ÷F.ygÓɆk–·ßhQ ›ÔgVw# šíN<_U}Î)ªî\oáÑÏe¯ ~¿XGÖ¯£7÷ý]Í1ñ¹ï‡êågC¼@“ߨ xjv—Ñ. Ù•kß/¾>aÑ=Ž áã }W¿Èx††Ú—»N <)øp‡Dþ‘Ü;ƒ*t~š·D–1Õaßl0DHœpþ šV% @°LL‚žF?ÚLJCE,u‹J$6?.º,5…~X=¥ÙßZúƒ”Bk~¿ä¹Œü­›5V+ßk5: ?`ÙŠb5~߀iLÿôí¡Èž¦©{­£Mìä,Ajõwè=» Ç2h“2Áè5Â’nè&QÆ] fwöãª&´Ï^5ßíï5s<ö&Ÿpô÷Ùµ$. «NょZPÇ:Þly2 C?¼Ãå÷E01Òµ à–_|¯¥@‘ó%|¦îvIŸýÒ¥×ìÔJI¹êØz,žG,Ù> ŠH~[†|ãf`wºi".š°£Í»ìµyÜd‡=·ÑÑ“k;:VªçùâÅC«mu‡uoåÚÂNé+â”Ò¥îˆ{)ß1ª3ß>щ3ÿ÷?²—¿* ¯Ñ‹)áä$bÜ…[ž•«Š;Õ—q-V‚¢½TÊEn¼)÷ÿ+8éó{U8K¡3h)"#ùKæ3:f¹eÆÀ&•¥/§ºÄþ“³O…ý÷ýÇÕáhRk&jÈýS&Ü÷=æŸd7çÚ¤5ÍE æ¸ût{5É"ŒoX&½“Qáx‹“Í,ÿñõ’ùœ¢7ùüwsz¬ÍîË|ÀSóóµÅnBc)A·¤æ#›Ä^[o ”è[&‰úZ‡“íAF]Vo *eÑ|¤ÈóŠ®Q–ØÖT¼EØÅLŠDв??è±whšØçåB¬ÅNû´Œ´f=`óëj¦•Ô>!íœoP5MÞ[Ôƒ\y¦yÁìíwÚË‹2E8ü VW(zLž˜áÈgøxµÉš{ÚsZ,¤ï•rRÁù “[Åh7é%fÞ­sŸrÂì’ª(¬â ÂÅôìM`ñÔþh‡øÇh!`< ?1àT‘u¾˜ÎÕ=YøÖF­þ 3…ÿŠèoºwˆÁ,* y2Àþ.6Œ»–/²ާ ç™”¥µåzcµs‚/Ôœù¶r>]’GÜû3à`Ëñwë&[xu¹G;.KF¢AÛ}º¨+>™]] ‹zXÐÀ y^ÁÒ'z¾:‡t+E VïãUªaˆZ<ÏDí/*@„èñ9ˆ9§µg1Ú†®ÏÄôa'ŸóЦÑüI‡iÏl.3ûŠæU·6ŽJ NKÅSª9¬ehÔhÐŽK€8á´ŒöÕå×…ví OS›hXsÍ`bZ ®·ÕKbOÜ„ÍçBÁÙˆ‰»^Ngý‡#þìî“¶üÃÉ4`‡Æ©ÛÁ¤«ƒ&X—ã(plXíU@‡oó4ówÂá¨;?Áó‘h{ P©6ÐR …ÄU°©¦=,4gJÑߺcAHÊž`÷ð“t¡qÇ:ÊÚø`ăo*µ9¤[¤óÏêÙ>ìÅRç@¹úTêehÈ[ßy^:ˆQ½y@H‹ž8ñƒ8+V总ñý%aO!õ„®ÿú%*æÅ›ŒèM ð²@¦6þœ rÚþÃ-7[š'="ÍM6!¿íÞ¯°L9h¼!Eà… ¢¦Bôàé–É«påð¼í]xUàÅþã뱡þ"Ç’N ãœÀ&Lʬ#INHø”ƒ‡z݃üÿç®ÔB^‘îLÑÃæ_sçjXñ;Æy´ ¸ë…üçÖ–šÃŸna ª†¡õNÁgDŠùv"µßÊ]æ7+¼¦tWNånúW½QÍüYr¶ÓÉÉIB\ñÖ¡Mpl‹7zW¸šS9òôƒ÷ûÖ(qû•n7XË ýcºrhrf¿³!R)×›ïÙ` …Â1#[ow)DúN>Yr¾ú¡7/»c~»]„AjŽO³Ñÿú:pLüјïÛ*ÃN±WëPÖÝêáýE–ͨžð¹‰‡ÙNéI×K_/}_O´ý¸Ú[úSmÐâÙ¨ïø…»®—\G”Ú6Ð5SAÌ?(@³Gfß…ˆW+ŒÚž{¬l÷9R–bÒj—¿4š¿ó)ç8w+߯)„žî Ýztؤç)#Õ:+÷ã_Ž=·ÑÑe¶ ¿39*C­‘¥¨™Gú\—´tf'T£Ùî°2J[¨MBÙn@Šï¿‡¥Ép!åqó¥}loKvc§üIµÖ7 ¿ø9ƒ…~õCÉŠ““L ±Äàt(Õ2õ,=¤j¡gGOØZÜMÛ˜ín´Äýl8¯0.ÛŒÄÁ”^m¨/œ¶D”úþ¤<Ý"%E é󬂑'ÜðÊ—ÖoÀºrøüôTXçРF%¤2t0^8b\Ð þÖÃ^ï…åWÊ Æqž…ågÆ%–x™Æ“vᇨæ±î·v·¦a«ûïfPc ~úAñˆVR5§Öôóý{˜yRKIˆYŽÏ+ßãö„‰UÛ2œ€gO“·&Ͼ9Á4„¬Öl"×ÛZà°>oƒ¸0ªÂܦ‰4ÿÌÍM«˜IÄ?rëTÙ¥ÚÊXÁc’ɰ­W€T¨ã$DØWˆ‘ð ÜÏ_µÕ±zè?‘¤…ÇçÑjUT± †OîI¶Õºˆp ¤álËeõÑÌf¡¬?xýç  µIMÀ‘¶þyûìSÖÇ%„91Ü1Í—äB€Mp •< ¸Ý€Žh**Ì,AÜåvȯCž¡‹|$†ˆ˜å©dfÙ»µ‘sóXp÷;ÓNãü Ó!k^|ÍRʹ\–µÍíìH-³Ða†Øû±¨|sq~\Ô4$[úæÔ@åš)QZZðyèƒÄ `ÊKě홷ŒAÝ¥¦°©;ÀýBáŒpŽdmª>|¤1k™›bNpµå½åƒÄÞ§ã61xþFCöqñýŽA¹ýå²–qÕâeP&eëè®æ½šÙœ5xìŸGÀ;¸?Íç6HågE,²sŠªHYH‹`{ZñèѰ/Jì\×å®\È(.åx‹‰åJóD32^­ç3·œGo4ìHp!ýwÒÚÆ*7ØÑþgA}ï™™PZL(Sœ6)´^ÅÄ–—Ãw¼!Èm9ã,Û펋,u¶0dêòkÃQ€€æ }߯[Nä‰EG¾·ÔUrñ¥‘ÉÆ­üÊÕ< ¨PIZ|0V,Ô«Õ ç^` ëy;¯*ä%õ=Bš¼'\…%&؉¥e®Ó£(p2ÈRés”y¥ü,AÉ•Ðç1k s§qR"F.à V«hbl7»¤íç_Ÿ¶qh²4PAI±Û47½…‚féïA”Ð#± ^LüyÈÊtt⼈ÌÕ%´Ý¢ªNçMí½ÿ·Óh—Ýi!އ¶ujs¿m%‘w¶$=ö|ÇeßðÙåBx¡lÚȰEh¢ÏÄz|¡ÙS¿R¡ ¨øØQÝ¿‰7ék¥ U‰^?LTY¶c(ý oÅbœþmÈ µE¼úœÌ‰¡m¥ž­ä5Ô‡[À²Ãå.²M‚q­ªC—ýO·BnQÈúÈðÓZ”Ó‚ñÂ'?ŸÒ”n{Íì=ëa•ñò Â>Uþæ7m§}n¼{–áè”:ÌÍ}ݼ‹‚ŸpöW–;þ¤—Hæ¼ô‘Ÿ«I7“K«¢Å¦ÍM2‰ßÏ\  š))º·lJñ\•ŸXÚ»mŽÍçAýjî"¯b¾X+nq8IŠ f‘<Šã6\ lIȱÞꘔn6Òµ£ öíßoaYøŒ÷=WŒÿèGW©Í#[£wÁyb *›'äövB8:÷'9w—múïT^í®X¸‰2Å9E¯vÔ9è‚ò¶­~ñôf+—-j@© PÈS²àØ(Ó§o·º_?¼íÊÌÏ † sxãåm†i|ѧZœ1®9¦ _‘š™kÓŠ‰Ï‚­í!ñï„RtçFVNAC)#ë{œX§C€CdtôfÅWJø5²–ÅrØÆre‰0n‘­°º¯'™¨ÉªZmÁ óÿ™àôÍÜìišÈöˆçà/Ð87ÒJ€xZ˜×Uιc¯ßØt¨›EcWï¦WQåc@Ø—©€™sÿLvO­0p0è:›þŠô‰Å4æ‘ÕÜMO~å­=VãtoâÛ——òŽ@š=·‘Þä»é»™yZ×öÇù!§DFô^îë W†‘#N‚Á,¤‰ÈK·N³Û'–#« v.Þb4”`³—Ûm³7ý„H¾ÒqÖ xðx¯çÇ0³ì¤eó˜Ñ]žÅ,ß{¦™'å —6-C«KhOXÇ›çŒu‡.YX‚FøxyÆÃǯCOº8sR”"ïÔdšþò |9‚äÞ³œÎõ¨àyîšMiϨÔ/­Z—27NsÌ;ðÆô¥áÚŠ «/ĵ»2ë$¨ÞaJÀEœ‰ž^iäZkêÉÁ˜áÉùÞM†ŽòÿrÜk ÑKç— çÍMÁQÉ ÚM.güç+A I¼ia€‘‘î#œ¹‚_Lý{lDø (BúÅbÈ{íKñnnóf`èñÙ@¨§Ÿ»—CpœZ}x¢HÄPÌé2"#Ò„\H¹$©çTÛÿ´œŒ õs‰Sö·­Z‡EŶ֬Ú'‘Úa2š"=¸îõ2£™Eq‘kïÌb ÚkÒ¡Ÿ|‰ð æ'ß3aÛÆÕ¢THb¢îcm³öÅŸ³¹Õ*þ0É:[°‡­QÅžœ4ahLXê~6ÃÜ#šäÊ{Ü:­´Y%S^ŀ᪕ó ÉF ¢“=¼†(Ó4ž1ÿ,¸Æ©L胑JãKƒ=r˜·y,ò½ž:ì¯àÙa­(5楷rl+E-‰~ñLj~ì+4^¼U£±[/I3¿Ë Ï1Ê;•+ª¿>°MiÉH$–§Á!óêfôƒÄÁ²æƒ“ÒQgÿ§ “ík¹~!/—jº 5€ `T…)äÕÈ*ÌÓX¯* Ôð¼ªUè@•ŠKt±Q·BjQÁ¤‘+D§yŽåþMlgáÔñ‘ û4ÓìoüD…3º"0 ç*N¾Õ”2€-àj-ÂøÚªëÅr#,ÏÍ ¥ªCQof?×¶G¥N¦EyýÑu?ªæY‹ Dj"ÕìO«RÙX À¥ÇÎW´}ÓÂÉ‚Àÿuç;•ò$gÀ¸n>v2÷àºZ&ùÍ€2Ýù5öª5:9=4Ämÿp‡A²é#”¿Z©¨LÀ1±ìÞˆ•eÉšYby[=¾ºpmzh÷zZîtdä¿lÚªŸåZ!w3äÈDF¦ã¹š?²9ÚºI] â,?[u= ƒõv¾ê`C'Ì}šmc­öf±&t?Sà`KKà™rT*ùã}ÓÓhÆü»ùéÌÑúÀ€Dk-#—%1Y{täR–¡’Ч>žÃ¹<§S ýlúí IáÆi ¾ì¼oàžfÝŠK„)• þ ñô±ýR^ƒäåL{…οí¶-ûÿÑ—{Ô¡ûL-ˆøËËb×çðͱ µ²©_Áv®ªü6ÿÊÈbO1LÐ\š!þ‰OCZ¤­ÔEB÷RÙã O©” ·ÁÀ@¡"b˰ ýÓuYÚÒ3ç¥@4 a¬ÖÞpþ3 l V¯ŠMrnU&P€Óø¡ù£Åªôtβ@_ýü° ÄØbz`õgž?“µDÁá±7}ß/o1ÞÛTŒ öã\KBêš<›ò¢ ‹Å Ú8:—Ác(MÔó(ÖHY4ß| õƒÄÅâ>ÓÝe÷7‚C€v¸ÁFo¤ïtC=~öñWk/¢êìG;@yuÔºJåL‡ HUþŠ8² ç/µ¬áá” ª üøí"Ùåß…°$ÍÊ>:@yììðŒït{%U*†Ï^Òu´“…fÍ“z[ú÷Z®Zâ m| }<è⌃•|"²ù7àL”Õ—uVqã}éB=²dB¤¤<òå“ï¦~ŽUR3­£Vän@#ÉèQOåóóhF­æÉÄêY?¸q¿å´Kk6ñŸú‘_©ˆ£Ñ·œnšã: Ï’O€ F_RÄÖa$Ž–JM<±õ/-*ßP_uä¥à/u'HU"lmT°É¥€Ââsi²|šš%~ôihÆËR4NŽï-Œ…J5úÌË©p•ùF“Šm¶OçGÌ¥÷ñ]‡´q—® JÕ—q±t3Tµüo‡³à.óã˜ìÅQÔîþŸÔ•ºdh ™FFMÞêÈîÒPÏW„9™Ay†tmŒ/—îT(_?¹ €ŽóE†b•+Ó °€Ó'“Ò×O(- Þ¹õ ³Ã~…8Øñ¼yqÓ°n‰Ÿ'l¹Î™¶MP‘'®SªðOFXá;‹ïÓ’9}2V«kºäEŒp†wêÅÁmpg"÷$”(r£=C™AX¬†Îò£…f ÌìjSGYŽ¿V£žMÛMHäð-ô0þû·òvÚñ{!ðêI¥)CôÎ )Vêa‰jna'Â2îÿÚ”­óZÜÎE ‘‚Ýø¬§u{û NEh)ë—˜©ØV$è Ð\™ "™M0<§9çRˆK‡ N*%aü~L\ؖܵ¡Âvòp aˆí‹çU•®Š˜Jð- 0êúÑqC?Í>7:ku·¢]TÂ3ÞIñ§U÷¡Î‹73³¼Þ¥G¿Õ ¼à™½œÖ”¼ÜÆ vQ8Ý*Úq:S<߬¿+§ÀúRz š‘¦,[3Œ‚‹Mû.’oGÐI×[•öÄÍ5B8T˜®ÝuЯº¯^«%oLöLKë àГñA¶fËѬ,å8†6í'¿Úæ¥køv`š"kXo¶À‘‹D·<Él·k™u¡~æÔ:; :+¾~¡µ(ÝÙ¸v´òí7Üáø’ç訰¹ÌUÒÒz[žNŠÝ#Owõ\š¦ Š*¡r—ˆ?¸V€»Ûé4MÇ?^ “yŸû‰– z’ÅûÎA –•mlR7õXy]&¤âwû’r˜eÝR>¿·î+öx&Š®‘Œ]»8pv­³¯»ª*vÓÃ4ñ/xcðŠb)ÇϨUU¦+‡¹ ŸüõΉ ¤ÚTW—|§ƒ Zv †žbý–×l¿ÐàXâ¼àçLÝq¯ lôšdÖ‘aæ˜`5éBw= êÓ€ÖsŸ©HÜW/zë»1%Èᘓï[eÑ8“@3 ï)BÕv¤äØÌ+eÝeðÙ.?fÆ©–\[ÕËt%]üÔ÷&…œo2;CePôåëÕÿ¸>õu«€‰b+Õ­‡ÉN„yÜmè»OßÞL¥Ó3¨=ÂŒbNÉ dLþïy¤oâím '剣wB ¤ôåšK1Ò@ ‡ŽûsÑMŽò‰*#3 Œþ!¿YØ(•?ÓÍ–ÞõÍ`|ñmP6ëäÇMµýÜ`ÜБcvz øŸPŸ?m+›LåÆ;S%ÛqÁ£UOõÖY)‹f·JÇ kj:ØQ£•Xk<+÷ýäéA†õü³dU6c¬˜˜@6k8ÏDj†0Šž­p”fPànà«ùÑY¯¿Å4î?,D³âÑytPÏ^œ-›9º¹gø«ý*iN«â»&ŠŸ1`}@–8Põp— NÑŸ«ÍEŒM%ýµqkÿùö¼r˜)˜¬oíõË ÚžŸSÑ¶× 6S»"LPµ[íŸÎƈM]7ó®a»†JžýÙ+þ¡¡©>3z ­cDîiØø2åJжQu]ÅáêNù§<옑ëœ[Ìc<öw‡Ç:±"­u’ Â\Xð¾)'¨ ÖpFÙ=ñ/Ú ¥삘êÞ‚æ}ë§MË}#lÉ_¼dÈ?…q„ìT8…ìÀníítûCÒÓ凭ÌlÆš½:œè=(&Npà vÙž¦ô90·YZAˆ[}Q‘MÖÀ•í–vÏŸ$·Ú>Êäº}ÌB†©“Ž´‹Âx&ezRÁN4â”lá}É.½™œ6t–kSuš±.4o:%²¾Ýqá¯ÀknÍ娱¯$£«‡= ç¢9eBÀÏdùb¿Cš„ô€üi£`~ì’²=äŽlJFüUÑd«Â¹‚xóOŠ ë³\B‚(mx'BªÓ©Òô~Ý#7œÅ›ÝC¯,¿|ýBEϹ\îúq9ã"qüM@œùaþ_³þÒoöoÞŽ»ˆÖ¿Z3’aR²_Ò,K ¤˜M1… YÚ,_Æ~!mbÌ¿t0C°•Þ~ŸƒF·pÛ4·xŒsbƒ,¼àÖïö·è\çƒ u€õÑé幌_E„w5w™nI;–5BÒ%™„‚¾¥ê†O4Ý›¦“vÒ°E"3W o %-Ú3 ˜}®´Ëã•üÆÚ$jqR‘Ž?ÕâV0±À7H$'ùê¸D[ÔDýlaJuÖ1IMI…*!3p_‹~GuŸBäÝvžÆqŸîôZ˜6þÅS±ßÿªbh?Xª;yI0Ñ<™£¤½ñe;4ŠdôíŽ~ì›4Ï”SLì¨>âÐu4œÿ+‚ÛÊÖá¤m¯éƒäÄ‘'[}tk˜r:žrªšG¡ì4Ì€Eà‚ èad ©ôˆÕØ&¦upçV]Ì-oée‚=`u¶IØ‘ÜûD]EH‘=l3“…<÷¯â˜)F­NL8‰ë9ºÚ7E Ù1ñqÜ5!MûÏ1 ž`b±7аÏ<—ÌÌ œªßtd±â™3„©¥_±ßÜVbý;j3ÐK†b êñ#ÇÖÝWÿ°KmÏö‡\¿rØì†’DBþKì|·ÀLS`X|#á£@ßZY°{sA!TíYU¾›ö(•ã’.[B ¶º[Mö€¶Ñ›®ÛŸ†íXçþÏ„„GgV•yèè,çe˜¶:ìÞ§ q­ÝöÀm¶?=…v3+ÜÙ~0G#¥ä¹M»ÚŒáy?Ø×‹V"@´y6BÓHª³ï{u ÓMˆì9úÛ’aÓ‡šýÞ4ƒ’"EB÷¨î&°°çcr»JßõÖ€D²Kþ±[g0)r$…g$ ÞXÚîÀ³¶ÿ-Q9~ ± Á?!Î4 Íò¢U Ù%3¥Å½U¯µÊ3ÄÔœ˜ôYŽšÍ=.Sƒj'5ñ냓í‚.J> Î`Òú…[­X¹{µ7Šç …{…•ÛmD–ñV‹4¼åaqè_<Îlèi•’‘·C7Ù]b7¼H‡þ+i¯Ícî/ìë놭Tæ ïã÷Ä”W3êAV˜ß…oiø»¨ 15¬|÷õé@“ðN»Æ÷UʱwÃrUq5Ñ;J¡V!ë.Û.ê«x–BÖmgY&*ŸM‰-'ËíEJ´ BÁ†NŠË7úC"íñÓÊééRT©&Íà¨_ãQ›NÌ0Eòc* ÙêË]|4èv/‡Cô#êfª½ñVÔÓí%.–_Ö<»ÞÂMâà.ÑX.Å5oÙ' |†ô–õ€}/u¸@9Óxà¸d[EŽÛôVÝžÁëé°V¸­L4Ÿ;Pˆ'©xªügŽfpñ‚Ñß‚á/Ô(ЇÀœ™Üi‹ZëûPÆŠÜ ËÙëyZ \ äìã1Ýzú?AXuzø:_’´Ÿ¥èp”´Öæ;Vfânsíj» Àù <¤×!Þò=chM­·äï4r¤ËT¸a`^£^àg~¸^¸_¯ÑYâ2â=ÑTdC!xVO¨Ž%ˆº,*}:˜·Íïj ò Lç Š´l’‹@‚O@ÄÄü?¦¶ŸòcUÇÃÅu…)a!Š¿|Öá²`üØ-ƒ•§vZÀÞA-ž‚,¶6×` 4Jqi©&½˜§¿=¨Ž… g•BgO‹âò—6 úüYKõêÐÜ22p QÏš[à*óª– ‹ÔL•Ct¼%;îò³M4ž<»I ˶ ¯ßôð&ËrJBŒäB·¨¶Žës˜ìxIüy6*©Â¦Ñ3ðãP‰‹Ü@u3´í_~=Î ÇnöÛI€e$B¸Þkáñ¸ ™sh»ÌÈ,ÎÓ$‡TB²ïÝd`õwÔß²Vg¿XcØEs‘ñ™~Íõ´k³š·T(¢jÎ!_~o´éÖïi–o]xÙLe^¦E/øæéžvÍZÊϽP¡4hu¹í3áû&þÌ@å„*°ÒÎI÷s™;/s¸ò ù41`ürM°û«À¹èP‰ÅÛÕ§{äâæíÏ»7·ds‘’Q¡á°{i5)úÛ 4œÿÏ©/ýv$7™£×õýÿƒú&÷‰‚±A¨šš–aÝX™}‰í}¤ÂµT÷kÈd•WÃŒ˜÷·‹2¸{C(¿Aù_øþôè£õøJu×|,ÃX³Ð iìõAOïö‘ùîÔUÑûé,á *iPÈóó•„PïÌJX\†ÍoadŠÎù×eñ,ó‚¯UØ[‘y¾6 –«lJÏÊ×33(/T›1ÔêÖéE§Ý2vgÔ#¼œ¹Ä³5Ö¾1û¤uvÆ—«æÌ骟7–NînЀ²u(VqøoÌôn|zÙ}#çkjB&ʲNF”3O ༀŒ¨Ù~0®UÓ¶óœ” ÒZÖmäZ&'c®­A=X¬ÓÁ”ußÏ+°'D'lI\3¸Þﺓ‹’±É´t²yÄ;G‰yŒ±¢x–·ÿÒú‹î {Éé¨lZ^UÎødÒv#R»ÙÖíÀ\ï¼4¼Þe`.‰ÝE}>k·ý èºâï0…vžHl«#DØU[+kjø@']œ¬œFj‡¬èj…h§ºB•ש´CluÚÊö4rù‰‘:l •Ün'[ç»Y“T̶ú”ÀJ-ŽK):FÌÅWC9cPžú:W|ŽÎdC««öÙ xíñGCEj h¥v¥e‰‡®•4…o/fª1ÂpÙ®Õ'Uß<63¹LiU Úçíp©‡zŸM™vŠŸC­`Ê^Ç΋𠭠„>%­¥þóÅæ9!rUªŒÿRñ7Û/V|«_TÝBxÂ"æ&éc u-ÛøÉ쨱GºìGx#—¡Ù54¬5ÊÆ ˜âóIòdÇß[Y´&#v© ÅmUºÂV ±°ƒ)‰ŒŒÚ<=Ø¢¥¤Üûønuˆ-l[ìx-Îó|-º¾y¬âÅļ]pð­Ý>OvŸ!ýÞ%]>¼˜R-’¸Q×®%ç5AÃyyƒ*›î»"ëþa;I§—NiU‚¯ä¹¤xùãFY´ È”ê\Êʬ¦èL«(tÕÄ{Øœ\)У£e'½J-ÚôÉ£ÿ˧ðÁêJ¸u°—ˆïä7“NºiÏ늑oX¾ö•òO*îKu‰’‚& Çø>HLÏ-=ñŠR P ²"p9¡œÈÎ÷Êž‚¤²pøÍ³E4(c%Šß1šŸ.;åJP„2O:Û“çš¿@mqYU¬õ>A÷VßÝElã©9 ‚éBãFw&yœ¿„ç^d2"B‰€¦DÂdX8VÔ$ÚË£ÈZyû¾ËûZq@žôÑ8ø¨g•r´o<¢5Azt“Ì“lÜ=KÈÍí…)ò±Ã½¥Ÿ·'0<íá›YGkàhÓÙRe%…®é„š—ÛÁ)²•E´ÀýÕ°uàÓ•÷M ³M_%õl<˜ê!ÓÎ+§õÖ¿ÊÉgq¨‹8—# û»·âä¼€:).•¡+ZY2O-½:“Î|5»Ö$MaÓ›ª.;9H¯Œâ{kKO"c‡¥ðsŠ¥Hü¾¹7¼ÓüLóo8´ò‹Écc×LøgÈÐFŽ y#ßDÓ)7Õtù­â‡áãv´pÅ /µ‡¿ÿZhB–ç\Л¨øÂ=Á1Ô?UÖ0÷/_!ÂH«¿ª§º%aŠSúî/®wªE‘oœm'óý’ñƒÔ á‰jHRm’…žÌ!0M9±´XíáŠÊíè–ñžM$ ×ÿâ½^nUáú0½ÜüeuMˆ ÊpúGØJIQxR~š— ·fÉtµ¬+ªµ iHD£—p:C•ü€”µæø—!pt} DÃOtëu4üL0qß içý—9òžƒäÏóz?2¹¯ùµ j@DÖÏ`aé"ªÓõ-iÁ@«ô5üVÍÅØ¤íM7>ý1~˜KYÚ-2])ß¾€“*b!¦JoS®4ÅàÓóµgg¬}n³¶´œgæØ å×.UF™pÆb…¸ùéw[ÿ½F @OfyêI…uê6ÄÉdNN•Š¡­™¯ Ö£nVÓ$pæ±î,žPðaaÂ-›‰×EÉB½çÿ“˜€‡úd7çP(/ÄížMw+p¹4'(ŽÉ¥‰“õÄf¿^‰÷éÚDF (\´ßÍ> +Z½ƒá‰?Ù‡y bRR´±"Ç>¸Ÿa ´Rárեޯm“˜ýZð,JKüÕÄB´P:²M»#8F(£fÐGìBQʼnT†W–Q¬UF_¶ßUR½½”ŽRAPa9ÇRÁÆk^cZ«ï9,æå2Ç•¶d»Hm<~@k« ÜPä\¶ÿHÌ«I!Ä7«t[ôÕ¤aãäús_ù=ÉXñ#ÕPRdÂg=#öŠðæIÚ®/ÐdÔ öÄ,‘¼LÎ uÛµ‘fÑA c µ<Ì¿x§­Å¸5â×kMµÐ"g>òûgF‹3‡IôPv Lxq“´|æ×¿›zFAOÿø{ÄÜ`‹úòÞTN¶Ùs2‰{6[Âúg… ¯v›ï!¸ã….ÊoÐûï ÝA7a¶,’Ú*h½ëǃz6ž«£Oé8{Íå¤bÀ([ì4GWâ¡™³h*ðå4²Ü‚8gû‚*?X`U.kZ•‹>T S®Å|a³=õjríæ:}•ëXÉ™ýÒð©«Jy–…ŠôQÔŸTÌR&à2ÖEH(Ü$ŸÓå2´ûc¾£ÚFäÓÊOúhÅõéb¨p÷I²ðÅa}+¶úš‰Y⎜mÃ̂׉4Úm2J1©òMCiê]€§yÖ‹ŽŒ1€æ!ÙíìýäìÿªBl^eÏ9B†Nèâ­´v6ç;Ä-n¶Åä; ðÀÂ*m »A`¨„Àº9Ì ãC²äè,Ä^a–¥ñ-œE{™ßÓL­Á6#Û"L"IãËJ Æ}»2°)¬[/Øvjœ,\“ì‘W,aE!Yl+å„Á•q•HÂUŠ”qJ]¡ºiDJ›˜"·/„‰?·dÛ¨‹ÍÐPDDÜb"þd›Œ0Ú¸0áókºÜóžû«R<Ýüõ§¸^f¯“ðN_[†CÀ`Ù¬¢ óŒuâžíïwR“ñ•“ Ï`Ã9"ÍÀ"ñ#ÃíëÕ´³¼:Úì(CܤÓ}ˆí;±Ucô%Õ¹mÐ_¹ŒÍHÝ;Xˆªù 9Xôë?¡HÒÖ2T# »C) 1Ëìü|æcµ+urŸZ%vÚïuÂNÎÌ$jŒ½ùᑵ®UÔçKMØñE–n3ßÑr²}ÒZ(9wÁ/!ui¶Š÷ç™*$ÜDÛkìL0Ê9]Åå†Ú]šø),ÍŠ/—%ð²â<¯§Ú¦IØ0ë^5 wQ™Hºn«ê]—­EúfP5!Û].ÖÂ÷7Y~!Õ9}f L[?v®Ä>Î]Ív5þ¥TV$k°_ânr2Ëkû'Ú êˆFÿî½8o±¨o‘î •„¾´ï£FWÛý ý^…Ä7J!è°ÕèÙ•£|¤¶¿~@\¯öÀBUôñ%Cƒí$HE‚´©gbÀƒaPËܯ½®Œºíz¢§ócE2 tqÀÖSåÑØ›ã¤~ˆ´1p’7°YT}5ßÊ«ç€Ç)éUô~MFÊlRmætj"œjš9ùúyˆasþÛâû £)~rÉ3ËCø/â™& 8ç•—n—¨õøAEÜlŽ´ Rs"VH5àÎ=6/þR“Ú…/;Z+ ¦ `eåç(Çg+$íkޮ՗q!e˜ö½·¬äÆ|½Ó񠆾Êh«ÎmmR£‘NÈBÙ—ôªòoi ŸÎå±t(mé²FÔµ>ýkk)å#V~7à¿;È= QÓºÌ ÖOôŸ5AÞò8€÷®Ô”=ÊAb±Ên eñœµýôµ½ƒÐÉöŠÀÝ‘£ÚmÒp÷â„ð¤qSQ$òC  ¤5­ÕÌ{r%k7(€ÑX猉]–»oE7Ê¢ý=n‹G/¿Æ‘ùØý†Œ)—ûvÂ4\I–ðWÑ–´"ûïu ™#&²As^ˆ±²x]8„Ý£MV3NáÑ ˜!ÆYäP`|çµß®aáåË÷VJ¶±J ’rB@5CnN(=ÇGdÑ%SÁœ“Ìi׿ÜÒ})üÐÖM3n¤¬jÌìª"Ãmû(äÆÕD¯ò™ å~éð#‹Ÿ%ž#pÝCYg:êü?Iÿn´ä}’âLÕüìf‹ªfyDNœ?׉uss0’´~µçRú[»€Üù —¥’lˆtŽš© D¢u#×L7fˆRI®±5Á¶Ýc—uæY޲wáµ½™gÍü›ãŠ.CE”EçÔmw`æ;7˜3:Ϻä/]Ìçx²˜ŠU‘3Õ¯;öF#øÖ«ï¡EÚjêà¥sÄ,QåDæáéqì2ä39!’>ñ91”Œ¨þ’ÿtÊe&/õµÑšˆ»`â¸â. óçz5šï‰¼r*¹0W¾£W—üü?»¾ÒšBvוV£÷4 CH+KPáÕX5Ê)¼øOVË ê®ãÔ‡KR—æÁ`]•qåƒÄ ˆÄüЈÎ2 ®žgàþõQW MŒÚ'ø¼X‹^ã»4®s ¡‹·•Z Ã)b|ý®¸1@}êü£Evõ_Ü40ª1èÅW–~˜7CÂ8fI…Y±@°)¯…iµÝ0Óãäx\á‹J®´û¸õÆTÖõbmÍP¤‚ù`”Œd&Ï&‚Gí“ê3žÝÉ"̧ãXle²•8ŽâÕºôfYÿsünyŠŽd¸_í½¢àÅk¼\îð¤ÖÒFèÎM”ãÖ*AÁÚ”Ð-”þØ,·rVø‹éMF€HÞ1¥CXy–Ë·`¹.º$S«ûNª ®¼n¶QPØÑ3,ŒË(SôR”c¦Ýéiu¬Fõžs…V±úHlÌipE=±çsâ@ð ÓÀµw*kýööÄØàE¹&ïcõT6 Ô‹œ²7¡%üý–5c™xÞõòØ©lÑ.~·7ÚÀJ­ÜøˆuvKŠ”ºs4¯%pÇ€‹|çöyëÚéèâ’þ$ ÒDÚ­ÖKm%*^´T/竌œºw0–3„Ijrüüé(Ï÷\Ý,”/çîü FôÃrªGÛãÇ‚9€h9 é:+¬xu<¯LÏ;¬\—Ë’”çý5,pßVQ§$MÅn¡¡«0¸°ï`u3&N·pOö>d,…BSÌÞÑ‘h ©ìç¾Ky²O„9uТØ3Ô¤£jeŒ¬Ò¦YÀŠHõ?aúTõX¢Hás¥~ë¯ Sã?´Ö`H\ñ„¬14ù2îbý|.¼IÇœGà¹P3“åÉ–ÔuùTY°4ñ–|9{eœ ºì-¬·ÊR€W|C›xo²&2§¯˜×g7Óˆah›èÕ‡|_Ünòàgw~þÚS±“W~3ø=‰Ê`©5tXr+C¾×+ZZŒ?ý%HCÈÏ©¸ËÆä?1_¡ƒÔ\mWÏ: øNÁ0XA5X4Ø©HT¥ÜuÚE´¼lÒÅÔR&Øç¬ Íè'æˆUpSƒkÅ{ õeºìJÅUæXʤdض «ÝŒ°ÄÇ~¹äk˜0Çx ~t4£ºGêyÜfäh¥ñÂ:’¼ðÒPJuáÕ!›!];duú凯.µhf½;­«ƒf÷{ˆÙ¢ÇM¯à(ÍŽpŒ9À~?Ymîõ6ØÄ4ƒgïûñ» …Jˆ´vòÔTÔ6Àê"‡wJH#?Q§í“Ѐž9’Á– R…»[¹<ù¹~+Æ|yâ´¥9hƬ0:IüÙÉZS4çI!þ[@üÃóæ¹›½ŸWôÛÒ‡Ôw’Èßuë%¿óq/œuÈ1ªrT¼ýêŸÉÜBdz ùH9šW ¡\’ü¯{wfJUemŃР©J÷ nþ”ÞÑw´VhðÆþ¬§ÜUÇJH®tô~A°ØuŽäUÌ´1¨µC7Vàt|ÚNBn¿?!j8áÚ m›…»²c'®$™À–ùýý¾LåüÕ€è SÑjáæ¿‰xdêIHlxSÚY»wœzW)4G jê¨g§¢]åà # aºé.Ü~bàÐÀ—Ôu´"´Ã¹Ë}\J½©.ΩãA" ê–Ö^.3?©ÙÂ/çÃ(Zã«àÎE#ÐÒ‰>¬ñaü Ô4³3¾ðÖ'64/—Fº§sHuz ª—QoR PqB“È볂ïÖº£%„Ñ vÄÂÙãÓ»‡ŽÒÑýÚ‚©“»"ßuä8úÆÇÌ•¾&’¼n\tTŒXtjOÞcÉr®`yÞ’éYfÐ!øçù5 ©ZÃë nœ%YÜÙy§.¢H•ì½â4¬anÒ·û«ñÕg/ìý°]HOAëàþaÈëw”„°9îz»¿èòœàU@3ù]¶ªGEÐ+÷ ‚]“ü¹žBFÑ=´–Çí¯‚÷~z.,žÐ?À&"WF¥ú¼Sö"@„0”a?Bû´ 0³“,¨¥0ûŒ- 훡RsÀ*˜Óì2w<»åÕWñ­<‚³«ª~gf!ÇÐÖBlÕ‰ë³_ɪü.æÞQZ\P²û²Ü¹†j$ÅÜðÈ=)™€^¹ÞcÊ͸Bíº¸AB§87µ/ö9 }¼Cx‚ÄFPi‚kɤ…paBC3RtŠºQÍ‘(ÍzÄe¡ŽÉÂØ¼Æª¿—Å­ZfØÏÿÑv™:5¡ß£$ÒãýNКþE¹¬ýôíû^m¸)ܼ}¯ƒžî—$¥CÔ<Ë)y¢¬¢%Ôà¸à¦ƒ­¢˜ÜíØ1ßdy g»´r*¼þž“€~´à¯Iœ'€zl;ÁhóÛÌn¢T";ì´þŒºûû¸GÜŸ²‡e÷‹)”9¾l=PPƒç3 o”FôNSªE²ø÷ºmëU¾f÷2v¾x2ÝÑv˜EÂS€Ús3®:©OÌð»0Á¯18\ä^3=€t¤ìGÛÇ›.ù®¤¶.§!ëkÎÿvùzÒhJ ¸nyüvüªKž”öýõ¹ñ±»Z]Ï¡¼£rÔ+æôžØ:$)Ȇ·( «·wã F7‘ìH]´œšÅdT¢Æcd÷ÓãØˆÞü[<ŒPÇ 0œ§\û,G“fÕK|T½ªtè,¨ã3é°ÕNQDØiDN éÉ(MϦlwÔ@›Š´v>îêŽ40 q´Ä0É—‡GÊiB--j_cO%—v>W·2›M˃1êú£øÙa8*^…ê$¨ÈSrСe¦Ÿ—ƒìC¢ÄÜ\Ÿ{!ÞQ÷q0P‡hä,0h`9•ƒ‚ ×¢,Ÿ9LÄÏ1™ˬóçu f•WY¡ìl¿ðù7r_ß5]ça qØ)y9øBFœÂÑ!ÉØÔ#J~ïžé›{ ûJY"¡]ç'éÅyá,ëŸÆÆe'mâsbï€le­Ê8ê'@+#Ú°bD±K‚áñ²§³.é®çbÓ{Ivo‰fœ3z¾°°Ô‡/ÏÿS#Â$"â%}7ÞY+ix®ªQNÔ/Ä“ÌË.nû¤ôþÒ…*}@ÖÎÓ­¥+èxá cÃþ] ç‹{)d@+ÒßÚ§=¼"d­ÇÈÕ. Bæ4ëú½QŽ“ž#—×´-@¦¿xdKœŠ;ß?õeºÒ5U‰ì1AóÀ—¤³º8Rm/ìá&¯Œ„›ÞƒïÌPÂRˆã†Cƒ5È4’œ‰Õ$9{N—Ï6çTäO‚wp ‰ñ€ôÒϤ b# Lü8 .ƪ½tÓ€8‚†o±8§+ƒ™¸…G•`-¾ö›ÈwèÅ/Ÿîò_Õ9[DFר¶éÞ|Ž‚ S8©|Ö@ˆÿŽj: ¢„7¿k˜™ LÄ!Ÿlsc¯ #ÃAD„‘IR98èlƒ6'2gŒVº¸C>•”’Z°´ÅyšßÅF‹à~óørñ©ÞŽmÿHKg”4$.¤¸$˜‹ÓÚšÐX…z”nT[´§¬AŸþYP÷'û©º}ë$ãæN}Ö­z‹ màÅ¿•v3«b³}ÿbÞTXHB¢>½Î¢ÂØsBeÙóhãoÒœÑoê^Çtí\d#$Êù §!& ‹} ÕÍn»f™—ÙGTŸC== ÏUÑšIéX´îÙA¹‚ ´ôxºYv%=*9„•¶L=©¡ìñ1É¢ZÖ)TôÏdwWi·ùEðªñ¼Ìsy-r3έÌâÙ…ýòö{iÔ,_NÓ4Ð ¸¦y·8xoïKÁs¨9eèT[  ðŸ}±ÉØþ ¡^¸#ꤰy) J˜¹‚Å#¨ÍÛÁ ö“¼štöÈ~"0àR<œü»Ù ïò³u±T¸1ÄÕ_R¼céD<’£›¼®æãÃþ¥àg芊Ã6·’/anáIñõ E¾ÊÛ¼“ð`~`¸Æñ1ôàì£ÇÈÍHEõ éAj­6ñßjT™Þ3R;=É•2j"KýŒ€2d`lÏëkv1Ý7_"E;–ºþ{Õaøðß#{fÂÛ¹ :½èí ÍÜüP^0_÷w]xF3ºçÉðÿçþWÜá1·¿Ñ¬³YÁwþN9‚iÍ€ÄÂlù­WîŽ)(ÐÛéˤv´œþ(¢ô—“óÉ÷pÙå¥JP4î÷ª©$g‘kgž+4®rfa°ùÎam#‡ÔøɃܰ°†v èp²kDOx7G%<ZM<Û˜XOÝŒEBœÙÆ+Ù¬¼™7Dø<1v`T CÙÏzâç€ÕÎÔk÷¬&¶£NÞ&‚ç‡h%n$oVŠ‚´jwD¸uÒ´vሽ7£wGÔàxP%cü ü¡Á1脊9RŠZœµöñú·–XÂþÞˆb«²ÉÜêŸ>ê‹ñÖ½2Üé€v²z3‰;i?­"SX+«ºÄŸð]Ž(¼ë`§N3¤„Î=¤Öì^—Y¬{OÊHħ?^g-g~ÓBe@QWaã@Òx•ÉŒÇ(ÕšÁp°î¼`ª½©:«ÃK:-jR "ѯÇ,ñ]v ™Á©ÄJŠEXäÃ6qe6h7ãëÜi»Þ§øiPÝíΊ†`ŽœA¨ÞøDe #™öÝå „åçeX#PªÒ,É4`„(»,÷R‡äÛ»˜‰Ó‰7ºËÙÿÓ¨5žf7 ÖâùÜ\)›ñ܈ǘÏà»\dÚmádÿ΂p§¬—“VßméEœ¥pÔúÞL[‡]ËQ´†Ñ †iý 9?Ú·%Jar€`?¢áro¤“|z§±“ÏÏñC0ÔìhI¼w¼£‰zÀP·Í:Š!´¥éd¥jªP‹:ï9;Q2È5_ó.Ç–•Û¥¬+Šî=1¥0¹}‹W Tœ²§s¯-‹${GäÃ|á©2VwAû‰N 0¡Q¯Pè f Ð`_ÍEd Q ¶þà"­®X_Kñ±Í@:‚Ìk±ýTA'¯ÑÍi)MÏÕXHû ë”5Sb±øÜhCN>ûªuŒb$XÕ-¬iˆ}UËTÏzl‚Ë›:º\Vöâ4Ø€ †ÞÀ«'ÕÂ'aˆÙJþŸ:#,¾§¥LŸ‡wYLÒ£ÀÒ;m å«RF«(©"³pGü–Ì·¤¶­ hn°;\(6p>q«ø(ã®–ŸUŒ¾À8è¥ø¼C*‰+ÜLHjDèŸÅø:Ÿ&^`û R¼Ùli›•ÔJÌ@£?÷(À÷}ñq’­Š|“€C~çcÊ(&_Ý5‡Í"_!iu¦‰ ’ÿ༧‚,9nÎôhEú¨åèœZ>¸dV Û&Úý0 õ9ÈÒ³7g »«­Åà ª>²O“½J,¹€Â\*?}ä}dœJP)cÖÚн»_¸”G[ËסÏÖ^‹ä-ug»õ×Á;â¿ü-ÊCø8JðVc¶r•ÿJáÿƒ¬ù»©Ürf+hù÷,ª8!i×þ!.(ò-º„}%„vwxº•†ôg*Í_¥ Ú‘wW.Åw\3±#;æ2‚®ÎÁøüßgbr]^êMÁ¹(Á¸ï¨•›èí»ëüëä§M­vË;¤c–SÖsüqŽÆ=ZrÞ/¨¬Ar±hÀ¬À¥rOÚÕX‡á=d\£qK§6…“訶èýÌx:©Pކæ™íàâXý´c{²z‚–¡ 1­©£mßw ¼x;¶;‰éý} óÓ4Åo9Á(ú{. —Úî½ã“maý= aï5SÊ|£ÃëFöÒìCe¾är7GU%.#>õª"ºTSûj™¯×û#=J>Åß[@™ÙùN¡´ÛI¯2Y2ùAQ>þqäéÄÅ–”þSõ%Uè¦L<ÂoÈÙMCTËð–Òí§D;æVüLÍcš¿`­Ùíê)£KHb²çøCê$1]£‘[·‹€HN¹a$¬^'[µ%è$çrgÝ󲇧ö¾D‰”EN!¨šP.vòþv)YÕ«YòÇQ98[è¬Ãíy˜uöŠYUü8õ™çe¶÷ú0ÜŸZÈ«ºƒw†=\*å’•ðêj³¿^ >tzvY(y@ØñLçÅÙ|§d:RèidÁùwu…'˜WñÖ¸:±Úú6 ‡MÐò¥Üìä&Í8 é#„l4¶ßyÕsF¼{É ×y¨Ý~;ÝÌ+÷G²íÚþ@y¡y«sÚe5PÇ©‚úe"÷mC7!M{ó¯Ü%*çѾÍSÑçˆÚWe¯;€ <‘ÔÛ—|ú£"4€Lõ*ð¡p#eJžo‰+*åéq³šÁ²¨¼Lp¦û}··åßfmÖé«éÜgpì¹íbäàÞP±¸/&Gž<¯ƒ²wK½iº-w‚Óüj€ b¼Èi›_d p‡2Ù¢Èúðp#±ølÊ6·:0r†6îÈMZáL Ƚ÷vx™RúЬ½.wÈseèÉIFc£†t† M] Æ(åëí}Äsäs:Åõ‚üíúFÅ(J™Ÿtñf%¯˜y)&J³¬dhÑxüŸ:Ž/Û_‚LK5øð ÙÍcüMgYú¶äÔ/'tlôЍRýu]/j*O½+çF¡l)ÂÊ4z‰ªãíæG!‘@×tȪÔL'¥Š/¦Ï9J+Æ`ʪù¥6×°øwÅþйÔ8~ñz•gi\a¶Éº ó,"B?Šñaƒ$HNË.» MªFw)JЈæ\Sü;¸¡Ûy‰ƒÆöä¿U¾öƒ¤¢Ý)]ø€cÙ‚qü1½ ´#Û td?û}Ówu§Yª{ÆüÒÿ»y>Ȥ˜÷?_ä¼Ðˆ3¹;ömž®‰X§!{v§Ï}殽¯ô(OŽƒ$j²Q2RŸj0öºcbˆ”}† 1GÌ®÷ؾ»Ý û}€~"‰’‹y4È«_w8[Ýì÷3ѫγ¶Š@˜w{å†è­‘†¢òĬl4-\%Pk3Òë¦9˜…•ø½CäÈý ²òŸk¸À˜ZFO޶¦¡¯Þ±G>³õ_¢AV‘-}ç¸ëO}!ãhú¥Ñ%ÄhuÇ“«F퉣Ì=%|ı0&\ ´Ç›gDhØ/élWÁ´ÙÞKôr-ëvXo1LnŸ‘AïeD2ŽevÍ@3p#ƒvù êÓ­‡—ªŠ¯éÂWº2f¤YñÌ *;ÔéÌyf¹d„±½²¡6ÂQ1¡ÓŽéÍOÀáÒàEÃE_Wß—M'¨a¦°mú0Ðô…’ßÓj@DAœ¼°MM‹ûµˆeE=¿¡,G__ñ!„Àƒ"ˆ·t^Æu"y¥° ƒ%d âÎ}Ê9öq´1^K1dOŒê§,³šØáXèmá-¡4ƒénD-'Çø…Ÿ3DƒlÊ6 ¼$ {±:Ç딕’íWÆæà&„¾æck_'l\F€Úã08´ÕxÁÅj¼XݯßÛå]¤ëöLI)×W½/§ ¦Í²Í¢žãð¡beppµÎ7oöŸ6a¸oPÇà gÈ* sï˜fŠãY²Z¿ «Ó/Îãm( BÍöÊ#µö(xÏ" ÜT{eÁK…“1ù¤0é–¸êÓ’ä·3{·„$çLW—°z†‹¶m¬ÈMúõµô:Ím?h€ÝôöÐsfExj4\ î0…‰ìŸeSAÏšCˆ‡D•«óäÆ3eôŽ_Jm†jê}©â$߬MátƒRÓÚ–‹MøBÆZëST¡Ž·MÒ׈¿¥ôMÌÁ[}ÝLsû‹r¬¬²èÙZJûöQÍê¼Mã lÎiprPßøSŸ¬é4’Ö‘úžK¶d'·©øt•* vÓ1ØÀÏÏ|^¡å÷O³c©­È/äÇÌ|]ó—å 0‹ä¤rÆ!¡ÊºJZžï„ÆÅK#÷2Œsf³õ£Ã‘?¢$¥>EŒ ¦>' f&1ôóN»Ü9¸8q?Kc%TžêMJô¤×ïPV/ÕÉ^,Ž ¨Xóòÿ7?õI=rGStÛC®þqH†žcÅŠÊJ™’"M¯—4"öÂÃáb´‚™¯YZº Btø!|{Ìü¶q¸k´¿Ä´÷G&ÃêËaû=9\˜oQŠ`ð&á‘ßD‘ïNUQ®*Ò½VÃ.áy=™Uaÿ×¶EMÍc6Êô $g_2~J1‰> C¶ceŸG8e7jÖóN}þ[M nO}š{†yæ—ë·)ùu^·ýÈÌæ©%øV¸Z ÛÊöÁ¡Ä0î”GŠk¤Ü@"pç0ðà™H¨«X<ÕwZqÖ§…wœZ@먩HÄϲ´¢l¿dD“§<5Æ<×FW†åµsùWN“ÞêùY£‰Ì-Ù »–&9`lfÒÓjþ½‰@|¢ Õд£<_ç„Þ÷¯">¤ò`Õ‰KGÑõ µ%³7§ u âoèõÆžY²Yµ™š#|·SØ’úÅ“1}TÎð¦`G6ÞwšºÅÉxã¾qŠr&„¼"ªë´¢‚D™õjSÒ]ÚÒØq÷PÈ8ò}UÃg!±"gŠF+?ú²×nä‚ÓÌFzži`øF³ÈÞ4Ó²Šª4ü®Ýe²ÉÞÑÕ«¡'ª¿ÕnÖOv"”:Ï3§7ÆùF6i$K¨¡åSÖ£ ½N‘—9 ðf Á6CÙ¹¨]íèó7ð¤Œ*w¼?àÍf·,â˜`IÄîoEÉ1.i1-:ÅnX¹O6ãé;I¯)ô:_‹[®žÂy $z xüëªô¿²¢ý‘ÁŽè¸8®©ïzr/æ©÷7ö¢»•VaàÛ@q×#±¢ÿoª4Äê×ÄZB¨*tã DЧ‘CY㓬—ŭ̓/ OÈ \{hÕ¡éëAê31`8ýf„ã9D.<ùQŠ€.ïŒ1JLåW”S '/Æ2“ 4¥ë ÎÃL«ª•%Wæ¸øºÌ0}õn¨Sïõ’,£˜Pμ#¯–FðÅQÛVþ-(6ÙzÍ;D@Ô¤™Wâíòotû+ѹ5’tg‡­iò\Ž ËK|Їo•ŸðWN¤5OƒÂŒõŒJN“{K®óÚâ6ÿÌaýCT_ʘ٭Û}›Êk ±ò ¶™kªú®ÃË+ ó…lÌtð"°ÁŸàÜ '¥@gá3)t)Ù ~LY%§M$¤–?³þ$eå|$ŒŽŽ”¨ä2édEkü1“¾ 4€Â˜²H0¥X-›-S<Œðoÿ#ÙÇHÜ{fIH°ñÍ–ñN Ú̽"üQ<5_·’{GE¿Ág¥„dn„íÌX!#Ò‡ .§nÂü|i¯“Ay¯õ]T‘$A2VÉhÐ’b«5ô…ic±¬s˯7Z¬Î ‰í@ØFÃSÕG[¾3¾¤Lž–ÂÛ½`¸Æ­“:g8£r‡ÏÊPÒÕ!ËjÈ:•4a¥/ÔLi®ä ’‚)õ(–±“”™àJ¸öꈢ¬Ž8þl ª™ý,Ë䃺ö{'Õ=ô'ýoqX@DóyÁN”}¶,P’F^—¿ëçÚ¨¤ó<«;ÙÁÆ•JËîŠOss å30;WË€?aß)ZêDòÛNÍâ`ÓÎÏüíÏá¨F&1E{![ûÐï!+q$¤ê­EHÆ“£±:×À£x’F_Jºkÿ•G÷¬O •ÚQñëÒ*£gU>\/xÀù+féøïcôoÖ-RtØÿÚ{K$—¡p‹,Ÿ´ŒKG+°k–:}';ènš°ÙJ ÙAPý÷v6ëJO–¡%BݹžÍ˜õÀ^ðî,@íÉz¬ü±ù,C¿¢Zväë 0Ó ü»P„×* ßXó¤ Um_z2ÈoÂq× DjÎñÑÑ\gD 'Ñn_'Â(Ý3,÷§ ÷Õeš•¸ƒõŽ §ÿA§íÏÀBëñÞZ2fÚ¦®å²"{@Š/ÕþIpþ£Ø(ùEQ¨RÛͶ|,Á–ªc »æ9úí£ÛSF9òHÜýwç_×xëófÈkOªá?!ò÷L½+Mè»V¶ÝúÍâµ 5 øhÞZš ñJOD÷ö‹K“d’% ‡Í”:÷2- øž"5»Ðòh|W (hoµq쟦Ï'oˆOæÜ×QnGerÞ•¼h¶xðÏm5#o”Ip¡¼—: ‡Ь2:_tä:¾œT¨ãQæ²(£œC¬3ù“À”S{ƒ«_ò6ÁüÛœæÓñŽ{l†¶4l+K*Ozý(F¶Ú^LdÈwªîÊÆ†B…ÏM”š,UÐ3"Žrí'þEÕKý€! 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if €reportlab-3.5.34/src/reportlab/fonts/DarkGarden-changelog.txt0000664000175000017500000000077013544671343025014 0ustar rptlabrptlab000000000000002004-05-18 Michal Kosmulski * Version 1.1 * Changed license to GNU GPL with Font Exception * Added Zacute character * Added basic hinting * Added kerning information 2000 Michal Kosmulski * Version 1.0 * Added Polish and German diacritic characters except for Zacute 1999 Michal Kosmulski * Version 0.9 * Includes only the 26 letters of the English alphabet * Distributed under a freeware license reportlab-3.5.34/src/reportlab/fonts/zx______.pfb0000664000175000017500000022346513607302650022550 0ustar rptlabrptlab00000000000000€Ô%!PS-AdobeFont-1.0: AdobeSansMM 001.002 %%CreationDate: Tue Jan 12 16:26:35 1999 %%VMusage: 67223 80106 22 dict begin /FontInfo 14 dict dup begin /version (001.002) readonly def /Notice (Copyright (c) 1993, 1994, 1999 Adobe Systems Incorporated. All Rights Reserved.) readonly def /FullName (Adobe Sans MM) readonly def /FamilyName (Adobe Sans MM) readonly def /Weight (All) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def /BlendDesignPositions [ [0 0] [1 0] [0 1] [1 1] ] def /BlendDesignMap [[[50 0][1450 1]][[50 0][1450 1]]] def /BlendAxisTypes [/Weight /Width ] def end readonly def /FontName /AdobeSansMM def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /DesignVector [470 820] def /NormDesignVector [0.29999 0.54999 ] def /WeightVector [0.31502 0.13499 0.38499 0.16499 ] def /$Blend {0.13 mul exch 0.38 mul add exch 0.16 mul add add } bind def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44278 def /XUID [1 44278 20645 8847 25231 10813] def /FontBBox{-187.92 -261.16 1151.21 862.04 }readonly def /Blend 3 dict dup begin /FontBBox{{-55 -112 -286 -275 }{-261 -261 -261 -262 }{424 1156 1389 1981 }{811 915 839 970 }}def /Private 14 dict def end def /shareddict where { pop currentshared { setshared } true setshared shareddict } { {} userdict } ifelse dup /makeblendedfont where {/makeblendedfont get dup type /operatortype eq { pop false} { 0 get dup type /integertype ne {pop false} {11 lt} ifelse} ifelse } {true}ifelse {/makeblendedfont { 11 pop 2 copy length exch /WeightVector get length eq { dup 0 exch {add} forall 1 sub abs .001 gt } { true } ifelse { /makeblendedfont cvx errordict /rangecheck get exec } if exch dup dup maxlength dict begin { false {/FID /UniqueID /XUID } { 3 index eq or } forall { pop pop } { def } ifelse } forall /XUID 2 copy known{ get dup length 2 index length sub dup 0 gt{ exch dup length array copy exch 2 index{65536 mul cvi 3 copy put pop 1 add}forall pop/XUID exch def }{pop pop}ifelse }{pop pop}ifelse { /Private /FontInfo } { dup load dup maxlength dict begin { false { /UniqueID /XUID } { 3 index eq or } forall { pop pop }{ def } ifelse } forall currentdict end def } forall dup /WeightVector exch def dup /$Blend exch [ exch false exch dup length 1 sub -1 1 { 1 index dup length 3 -1 roll sub get dup 0 eq { pop 1 index {/exch load 3 1 roll} if /pop load 3 1 roll } {dup 1 eq {pop} {2 index {/exch load 4 1 roll} if 3 1 roll /mul load 3 1 roll } ifelse 1 index {/add load 3 1 roll} if exch pop true exch} ifelse } for pop { /add load } if ] cvx def {2 copy length exch length ne {/makeblendedfont cvx errordict /typecheck get exec}if 0 0 1 3 index length 1 sub { dup 4 index exch get exch 3 index exch get mul add } for exch pop exch pop} {{dup type dup dup /arraytype eq exch /packedarraytype eq or { pop 1 index /ForceBold eq { 5 index 0 0 1 3 index length 1 sub { dup 4 index exch get {2 index exch get add } {pop} ifelse } for exch pop exch pop 2 index /ForceBoldThreshold get gt 3 copy} { {length 1 index length ne { pop false } { true exch { type dup /integertype eq exch /realtype eq exch or and } forall } ifelse } 2 copy 8 index exch exec {pop 5 index 5 index exec} {exch dup length array 1 index xcheck { cvx } if dup length 1 sub 0 exch 1 exch { dup 3 index exch get dup type dup /arraytype eq exch /packedarraytype eq or { dup 10 index 6 index exec { 9 index exch 9 index exec} if } if 2 index 3 1 roll put } for exch pop exch pop } ifelse 3 copy 1 index dup /StemSnapH eq exch /StemSnapV eq or { dup length 1 sub {dup 0 le { exit } if dup dup 1 sub 3 index exch get exch 3 index exch get 2 copy eq { pop 2 index 2 index 0 put 0 } if le {1 sub} {dup dup 1 sub 3 index exch get exch 3 index exch get 3 index exch 3 index 1 sub exch put 3 copy put pop 2 copy exch length 1 sub lt {1 add} if} ifelse} loop pop dup 0 get 0 le { dup 0 exch {0 gt { exit } if 1 add} forall dup 2 index length exch sub getinterval} if } if } ifelse put } {/dicttype eq {6 copy 3 1 roll get exch 2 index exec} {/makeblendedfont cvx errordict /typecheck get exec} ifelse } ifelse pop pop } forall pop pop pop pop } currentdict Blend 2 index exec currentdict end } bind put /$fbf {FontDirectory counttomark 3 add -1 roll known { cleartomark pop findfont}{ ] exch findfont exch makeblendedfont dup /Encoding currentfont /Encoding get put definefont } ifelse currentfont /ScaleMatrix get makefont setfont } bind put } { pop pop } ifelse exec /NormalizeDesignVector { exch 50 sub 1400 div exch 50 sub 1400 div } bind def /ConvertDesignVector { 1 index 1 2 index sub mul 3 1 roll 1 2 index sub 1 index mul 3 1 roll 1 index 1 index mul 3 1 roll pop pop 0 1 1 3 {index add} for 1 exch sub 4 1 roll } bind def /$mmff_origfindfont where { pop save { restore } { pop pop } } { {} { def } } ifelse /setshared where { pop true } { false } ifelse currentdict dup systemdict ne {end} if 0 {currentdict systemdict eq { 1 add end} {exit} ifelse } loop /findfont where pop exch {systemdict begin} repeat exch dup systemdict eq {pop}{begin}ifelse dup systemdict eq { pop { currentshared {{}} { true setshared { false setshared } } ifelse shareddict } {{} userdict } ifelse begin } { begin { currentdict scheck } { false } ifelse { currentshared {{}} { true setshared { false setshared } } ifelse } { {} } ifelse } ifelse /$mmff_origfindfont /findfont load 3 index exec /findfont { dup FontDirectory exch known { dup FontDirectory exch get /FontType get 3 ne} { dup SharedFontDirectory exch known { dup SharedFontDirectory exch get /FontType get 3 ne} { false} ifelse} ifelse {$mmff_origfindfont} { dup dup length string cvs (_) search { cvn dup dup FontDirectory exch known exch SharedFontDirectory exch known or { true} {dup length 7 add string dup 0 (%font%) putinterval dup 2 index 6 exch dup length string cvs putinterval { status } stopped { pop false } if { pop pop pop pop true} {false} ifelse} ifelse { $mmff_origfindfont begin pop [ exch { (_) search { { cvr } stopped { pop pop } { exch pop exch } ifelse } { pop exit } ifelse } loop false /FontInfo where { pop FontInfo /BlendAxisTypes 2 copy known { get length counttomark 2 sub eq exch pop } { pop pop } ifelse } if { NormalizeDesignVector ConvertDesignVector ] currentdict exch makeblendedfont 2 copy exch /FontName exch put definefont} { cleartomark $mmff_origfindfont } ifelse end } { pop pop pop $mmff_origfindfont } ifelse } { pop $mmff_origfindfont } ifelse } ifelse } bind 3 index exec /SharedFontDirectory dup where { pop pop } { 0 dict 3 index exec } ifelse end exec pop exec currentdict end currentfile eexec €9 ‰XLA½IÙOÌÕ…#I¾%yH232–¦¾¤>óYð†)Ý‘QÆ1 ¹Øs¦mr9ì¨x޲&¨U¬†Ž~Ô¶dŽ•ì32g,6O£þ[>¹+bNŠÃ6ØUP&˜Pš°»˜I «÷‡”Nqòoðjêôä”T’|‘5KPÀ ó ]ÖÚÒÒó‡U|8’¬ñ–9ñ0¹O\Ïòä-–K3š«%t–¹ßª¸GZt |Ýã>cK£ñüƒÈ'Šßv¦Y à·.Û‰øi°žl¦$<`ÚƒsM°R‹#ÄIœ‘‰}$5ûæ#2‰Êþɼœ‹^q¶üš§7úÁMmŒâ[’÷¨2JK"Ï¿îÉ@(¨2—Égö/†ºªùòµ‚*ιƒ fáJÉóõÂÈÕIšª¶®èÒ>bÂý<ò½ì²Ï’ _Æ•F)I¦b‘˜Më„}›Ò:•4„²lµU¼Ý³×ª»Q§Ý½€SÏ»,6®ê"´6ÑÏgx†}‹FV‹ã£È´epg¢¤û|Sá~±¾m`ž¨øË;xùÌÁB«„Œ/»ÖcÇwMQ YÅ1’øý€Ê’½uÒJ@ê„Z»ãÎÌwX˜ŸML[,¯²‘Bœ t0¿ó‰j½°§˜LP⬠ÔlÛo PâÒ|>ÑHE8¾´âwUùаÿí5µºK“´ÄV8†žýÂt†¾¶å™B͹ܶ ÄumÚnÓÑ*Æ`±<†;’ÝÃé<øEæ #v©+ò…;q,Íš¡³­‡åsÝuÉú{óé”.˜'žu„ôiW-— ŽFw¿í¡KaՎÆ?§´L&bì¸7•Á¡ÐÂmžd2D·oÁðÃPã~  KéÑŠ"³r´ܰìöX|¦3¼Š7á3ú®¬}Ü´DC­Œ&Œâıy>l/-áxÅ8Ö½>ÕÈXþÒJ¾oã_„}Ò g÷±1öBÎ'­xK4 £˜xíB»Ýeîl¿aÈísZzÆ£å”kÓŒÃ<:<ö› hT.G+Ôú’(5$IÇô£±™Rzé>ÜäX ÿÑË*"Ÿ‡ÑWFô>7;õzWBà4=+u{àƒý©$8‡(ÿ–¥ö…üN³Óœ/HÛù¾ˆ÷oÅñƽÊUÆ-Ü?*«ŽrêP+ñéø_Îs¼¾Óøl$V‚QvCžÔñÚÊ婹3·¤ì©ÙjæùÏ=vV@[q$SG¾'²t|ú(Z»×ž&Åc†?Ù–ËåW,ìW'NÍáˆØA}u¶Oþ–do7/8B· õ,Hðå´çš"HEE™ªÁ‚rE†þæjHÜK^°çÉT+ó'Í-e¡TQ7ïlÖ¿:ù!(»5å\H¤< ¢¯F L‚DA‰áç;)?G¹Y:„)×’AC¼†E1‡%­!á"G¬YåþJ;à öÉÛ݃…?ÿÛÌ z²GêÖŸâÆêÿ WEÆ on‹^¶ùÍ>W 2™‘€\ÍLh qÕÝš¿¬5%ïÜ—Âô|à]“ i—¬àC \&íN%kOU¢å%ÅWhІK:^ºv•Îa7)“žµ"¨ZÞ,ÐúÑ“óÅ~£fý7ØDtšîƒ·tO á+Êïùšü»Q~¤³¡Þæà€èV‘›B8—À~󿌡³ÎÛB”]Ò¨8qwoÜ[ãIÓ­!„ DŽÊ’#I§ü«ª Jö¬Œå3ñú_Õc…ª2¥J)öµÿa½|m,Ê9ó¸ÇJß™@)º²'gtò‰&A¨®ÔðÙºæžÚ¨WÚ^{تWI€3)¯Ó;9ch˜f'äë>(ªK/€Ö››Ë²J$a¨L]þ_ì«—ù«sùš„YéÖ6^‡HÚÜ·¸¢’éuÁ?ÓÓôŸo:wko'Më… Ü.ÜÐNX.Ì3ú£> =ãaóìå×yÉ£P _Ò]¹öø5QdÄ4úã®úÍ Œ/ëŸå»îå1ж ‰^¸šY²[3sž8íe·Æ:š˜†¡E‡‹ûÍÖ6#[!“2õŠû麄Bukxy'#äÊGá›d?ð«5}*GšKõÝž>A <Ó¶;zŒ¢;~¯ oýç3lU¼¬ Šuˆ.¶"·v`µf=¯}}v,™¦Æ²QEdmO\xYa`±â)±ÐÊäUx±ƒ%ÔÜåGY©oKÓ/æ "óŽF|5çÄôZ­XöŽ)˜b®l»sc÷ [ßô5±2‘m¿ —a[ÎN¿„ÿ?‡&)€' yNø¸deô®çF¶4Òïÿ”’ †&¸LY½…âÍð•Ï|¹pJyëLпóÑó¶k:â™qD®Ô€]üˆ”¸ðgÀ /^é̵kMˆ¤€O„y˜‚×» lùRMº|dmäÛ¼…»Pè½;ÕÍG5.«ñ8ù‘øØø)ú@jwJË„ÔûkØS‚?%6ëÛæ´ê-‚øÔ¨4–[Çf±‹EÐcéH”«˜¹¨$)–—¶Lâˆt´Êòsx9ºÙ2Mco«Š´Õ\à¨<ù²ð–ƹޞRÏõݫ爳°íø˜[n$m,$¼i‹ÛÉDÙd²°) ƒX;ý«Í¾ Èׄ 2H$¯bª)ùc EÀP@ö¸š èÕ™!c6Ò°·;-T{^¯N¾ ·Äò»µ:xIºÏøXi²· ¯Mt)WÎDi“‡ÛÁ< uäЋ¾ðŤ@ñh ´Ùà “Þa´Ìý¸*Ä6éT‘^·£Èç°v÷jŒ•F¡6€fñðÕóÒEC¼ÖýmÂëGk­—??Ó`¥ÆçZ¨— uj¨µÜ­üm8 DÈê(uÓÊÏÛ7€RÀ,®¹0éuX‡e3ùsƒ P7ÎÑáøŽ8ÈAS!Òýhîµ^t?ªa×"è¿ÉÏûà7³„¥ñIVð5vÔÈC¡¹H®$}^´ ëÃÿçêŠ6p`¾‚ö7ùÝñ©’ò¬w`04Rßê qªA·cšÉR¬!“¬¨Í‡w#dr²¡ë,&qxmõ'ÄéF”/ˆ{ LñÆ0_µIÚ€=: Áu¶x›îŸFé× ‘Ѷ{)RÔB‡X+¹ÌF ¢z›14_tˆÑ2™‚Ð_ÑhÀZX)]ªVÿ¥uEïÜ‘'Ì1‹y÷¹æÓ´ç-ØIªg*÷X{iÅõ™âeØ~k¾ðBZ9Þ£-j;H\N‹¡¶\:-W?xdGÑÜ©ôë¤R¦ éŸ|ú"Ù¤Õ.®´¢Öãøî ‹C,:Ù3J;+ÔøÐDn*·²—ß[ù@• rÄŽGZÛÛ-§ü¤Ì( €l[²½ß䈊|Ð’r%E‰ƒ­¾¤zZ(³æ•ÈHÖÉÌiz+9Ëm"6åȸ©Ý¼lÊDNcÖbRòy~äi=Ò½‰'eixúJSÉŸ«¸UÛ*‰¾Í íâ{.4›ÅP~×%ÚM~ê7ocM #Æôµc…xÎ1}Üc©óèaI÷ vó).‚áÒµa‰¦ê3€ø^Oìêðb¾?D¹áp“ª…¥tÆ,uÿ µ’¶sù;Š  cª¥Tj™Jm8ÿ$ÍŸþÞá³KÙ;i%ÒøÄÉ*#KÈ•Œ`iþ÷öÂT0·‡Åúº^hN–cªaÛ»þÏ1wWÜô´ïÿÎö¿upIª{…$ÍÁ]¹^}¾$W˱ˬËzýOß•;©2W@½®Œ•'Z¿  ˵ØJå”ì²R+Xó›µQ©éªÆàñ à;'¢ ô]{>¯–/­c€­\mÖ^Lj2£³¨Ž7…4\K!¯SjBwqd3VA&JNú“>dŽ zé×kLIÁ4°Ù+·¢L`ã*ZQæakùé«Ú^ ‘‡•¥ë+ZûÂVøùÒ./|¨g™™¤ƒJáD[: ”÷ sÊžEŸÓÍ2Oi(Ò?ú‘©Üª¢ñ«’W_ê›\®$`ÎÔª¥òøçóJzÍX c:;â!9¶Õz»¼˜ÖTÛºZ½(Å4Ö?=ûwæ]*µAÖ†W,‰¼p;ª~w#*b\d9ŸSæØ¿5kÂF×\\¸ÜëÓÜ‹l«Ea,Än‡^M_7ñëÔ¶å\¥_UážÄ6àDa]ÏÇìM³ôˆ Ûs”ÛX} K`®CÒ1”OŸ¯Á®‡ð~ÐRÆz̆-í$iw²'*i.•oŽØÑƒ°Ï«ü™b>Íe4˜)’Íû³tO¾€AÑÂ)Æ"›…øs5ù#J9o´‹—ôûÇk ðn´;Û¸hÒrÜ»‚VÀ,Ðá„´ÀT“-ó˜d»¨¦#¢™6ñµŠ7'Éœ$5gG…¦ñû«ëwKÜ-ð†\IÌL[d0íÀ¥Œ#/³Ë‚.ñ’tר{KiMøºª¸<{Õú<þšG!Ó`òüÏq8kV=Pª«.£¶’¡zÇõ8ë pA†eÖÒézÍ‚s~7SØÂ½u¢là®v1µä°áqô‘«W¦Ö=$oE@r9”aÇØÍQ¯= ýp®´s,’¡}‡4Ä·|slðä_¨(Š‹w¯ =xðy«:'Ñö€\ÕX±ã¸oÃöo*IÃúu-ì„©¯X“ÂÄ–Ãw°ÒN,à“‰sÉÈý°¯¯qÑf³sUvI;>“e]!áÛæoþó'|ªÔ 82ˆ”ä7¶Q ƒ{üÀÜ8Úºœ'‹|‹óg6tÑÔyJ•Ë,ööCª¾ç)g¾[ +>0½Š=­>)ɉüáâzÉGPÆ¿¯:±W ¹÷õêX`Œ,ŸEÃåqcY¨ÎþŒJ1CTÍz^DäÃŒ0mç·!…К;¼èn×7|2tÄdp›EÕ„À“¶S¼ÎxFíÈÞТ–ßž6FN?lÂ_§RóÀpC›ØxÈ„`ôDºÔ3”ÝúÖs­N¬é8UÔ,p”iJÜà„Á=Eõ")m’´6ü•ØT ‡3¬Tƒç,Œt÷|marFâÅË–1@%ÿ4íS¤mþíÑY‚Sý€úeê9—t–³ïbUˆ7–PBÎùÍ$r†9ô‰º<´‡ßye_ÿN¥ÚV7ÇR‚סþÜo?ÞÒv²»mHêòÚœ¸YÞPËß%UOK,Ùœ*ò­ ®\KH?“ƒ¯ÄR¹qÏYÚŸÎ?ùóîöÑÎxoÁkÜÚâ×dTóÃÀyO!­öY)#œxš7zSh¢vo R.lï·Ae£…– nå6îíÞYaáZæÊªOpÊÑ<øj1a,¢›àV9·áÂj¦¶e!ë$Ëw$‚’»ÌYK3WÍ ²ô 4ßyò¡B¶§› Ì{æ»üµ|_™ç>:ò«ÖDÈasÔéàço—ŠñdsòÓæ5ÉA>ÅD½1ø¤.¼Äèöƒ´WZ{f)g=vç­¦Ç7av­vòÔ“ìM*ž‰Am¯„ïü߬yF7í䙡¹v‡x~ª5‡_0¬ˆÎÛôˆÃH Tðq1u1@#a­ 7P÷ÇÛzwäüfO¦{2²Fb¤2¢Îï7u¦ËìñU[6%VãOþôÁiuÝßÈt3Åa‚CNÄ»ñ´HÑ‚ÈÚl£Ïƒ‡é¶½(u‘‰ÇÊ@¥Óu¹·‹qÞm–!×ì/K§:~äû½üòÖ„a÷¨ª"²,W áûqƒ¸ö&îÝÚåÖ|ÅQ¯‚²ú…éB¦RµKT°u¬ù“_¥7<0µæ^Â8€8"^æíÜN„ð!þ z=I<¥«… íä¼{í`‚½xŠ„&¼¿‡­zÍŒ¯Ýí’¤Ùê¡‚ÝÁ ãõ•HLˆigq\àîŸF´Een(L‚[y2±üÐ(0Éj{Á6ß6`u{óL£nYò ‡˜¼®¡ThSy Ai¤m¼øWŠJÀD’C ñÕ<àø2þÇ•Éuʑʑ„i¼LËÚrÚ½®€_²3ºhbeO“WS¶«yxîöÚ'ìŠoN—š•ÎÖíî. $2™Ä}CîªÒjÔ÷‡?Ä·ò5^óõ’# ¸rª*ú¨ ´(P z@ñõ¶¸ñ¡úô”ó`×jïÛé.bá*™p€r'Ëüì•9ú÷¿cdå¼óXq˜rG´xÖGÇ2 ú²[žWlíÉnS‰£kmíJu½½º¬•û-ã‘p¯¤K¿½ä1gaôP2JÂÕrɃÉ*"–^/¥¡¯å®Û´g!~t†’^ïT&åÁCÃ(xb4Ò§ð7üýn§qµ’Çõ¯)}Û§„o/—^o3æ©Í7€µñ‡þO©ùŒÖ±‹î2‰L¾cþOæ[øø›ˆ->'l-]Ù=Ûn.èÒ ’-¥MØ*IéS½¯\aúÿ|(mÍ Fx…A ’&…öôQ¡Fnß A‚ÌÍ‘à-ï\"‰á™µ¥q«™£Á»Z-?}Ð!å,·HQjeYàÕ<8lœ´B»7òÃRÆòòíq8ejÈZ3SQ—Ev¥”uœÙŸaïÆÜÉ;•¤Ö½±•§™Çßø´Áõý|Ö‘ ât™ÈÈÑXÓl•74=$• Ð/³,ëÓ‹“ë>£«‡ÌFÌ´Ô[–À,!QÖ\2tþªé¿Úä © Þµò?$Œ'8禴×y6Yu•Á”ô<§üÉfG>y3=r2xf–²Œz±1–MŸ76µK%G‰f"8ûÞ %Á´OË?>2 ÝCT̺ž² X¶£0¤ø³C…(BVç&Õ0jþ4“€±^£%cìê³Óç£Oï¥b¢”I¡7 õ!Üó#]VKÿêM½qRlܬí2 ÂVO}ѱ[ ÁxƒÐ!æ"ìe·#øúƒÜCOJÉ‘^  ´võÂqyãrÐÃAƒëúf BPßh &hêÌ+´p]²4nuˆ¹BÐVhõK(M2‰eÀÜH éy™j }mèúªu4Cß`ðJ\&1‹ÎM9‹Ue²'ÞbäØD2êܹ0Iþ‚mU¼õÝ=A Ml¨0c]Ë¢Œ×éC—›åyc4ˆ&'ùí¦¬À>ß¹/̉Õu4h¦I`'¢}ÿ]Î{õ =o/a»içxÆ+†øßL¡sÜÍÍFVõ¬GçMg#Í“C ²Õ™ .‚°Ü–k¨6‰é9¢j]¤†Âvj¿ébn8¸’y´>Ô:ƒí;îF«ºÖîszcÌšì?úèCr6Aÿ˜a)üiB¡(k;ÕžÐù¢OÄè‘Jpðªªè%ÛÜìögWj`A͸ɇO8º!H·jVëëA_­Ÿ®z[YSI9|'OªæˆÙË~ô´Œe­åM #dYµ[eµpÚ>ÕË8”¶/HòX„-ãö`Ç^(ATiíq=„ŠW¬ççìöÞh_`ñ2è©3›s ±¼ï²tq£i¾ÁŽ'(ô˜[¼ €£„Þ„ktõÞR÷zAnšx¿ïÉt¼ÂŽ3Y(7þ¬étä.YXvy›“f }Ž`mßô%‚ò´ÀX}¬:J?Å~ œAöC*ÕK!¹³‰ä]Ë>žˆïâ!Іˆ¤ÿ‘=?IÿÏ ŒÄªÖéXžùJ—_Š}²µ:ã¥ôîÎóø‰ÇF-Üg#ñüý³äzÙ“åf=;L˜LIµím£;ã‘Õ‘¤s…(¨Úôv  —ñ‚¹—‰78EyD‹«^m®}©òÌá JpÌ,ÇíØÞ“n:†ÜÆg»ÿ<8¨–¹‘ÁÁS4]#’’^Üá!Ï£´Vç{åô»·ÍÀbá}›µ›&ÍáǵVÅ‚"è G/"õÒ@àhÞl‡=bHý/¬¥Š<Dge±L§›~ú¼Yj&uÁÿ‰5)ÞªnHšHùeQÛ¶µ+ÉûýíÆSÊ]Po“»q²ÖÄ)§ÔífúEt³Þ!ê½Bè)f¡=•è®/ÍcÈÆ·µ²\h-»­M®‡J¢^¢ã®A/OV)ÕÑï:Ï`GM`2 ÷½Uì& *ä8µ¬Q«6ã ãšî3”€x¬W”À½wŠ=§~z¾fe&‰£×¬—$*Ejo³i@A.Ï·— ¯ FÙ™c¡a(ƒôî¦nžý<¾Þ(å8 bŒû?0ggâ†ão ‘I–äüí‡ês‡ÆÍM„XÖUJ“D$¯»Ì- ŒÛþKgq1¦÷–·NV?jÒ®-!©€ g¾FiAò•ìö›þ=3'ˆ×Œ=»x£Ç`ˆâÞÉ|aZ±žë?ú£äᬠ‚E&cwq? Ùˆ½ Ÿ¨¼ÜÃÔ˜¶ŸaV+øO‚»‚V¯îÝgŸ6ƒEÒ„ï–Ä÷8²óÍã}oþ¼‰†œw9nŸ$± èy÷EÞŒísšòBG,ÖãÚVIUªAµ†â˜þ!Žâ* ÀZoݽ=© Ñ¡õEad£4ìaÄ…ŸÓ)‡5ýK(š¸ÏwãùñNhn÷5ò<Û ÕFÀC1jc—~Jº¤1õ‰&yr_¦qþ¥° sÍéÿÕh°²²°Î˜ærÚ®U»,I*SAŠJ-7wë×Ô5 Uïé‡5âØAÜ#•@nYžpúŸ†§±+9›U–wÕ¹¨#$+•˳âÏ/™¶ží*7‘;‡RÄѰ<|ÿ]ŠÅXtjo –u¶‹~òÞ5PC‰Ì­ŽÜlÐúöË dx/UéÒ7«#2gg/ ‘ocÊq TþµžSÊ$£«¨vdõ^ï®XÈÖ½Y×OÀë¦ã¿©ÅN/½ÙP37#u­mTj£ðÅQáY©y¯—0Ÿ‚XÊÿ'WÒNÈÓÁx¸Í‹¡ßßÀS®îïF€`ùRÁ&ÒÿÆ(X Á§á÷»Óa¿öõäÉÌxd÷ÊÓ_#‘"4Ú;CT{=ãÿMÃÕ53cÉ2b:ÒQ×9óüiMåÿwOoäq!¬Û=åö˜2SÐÁTO¼9¶ëðN aìÙ^GAÛ#K,>ÓXÛ¥'ê1?/t~,µ‘†Àø™Ÿæ8ðѰ3À6.À@Àÿ…rúû6@4%³³ ’€xé\Âä$/»Ù„”¦§hÎbÑüw²' kÜ„«È÷™³ˆª¯sa¬•Ôz núæœæ:Pæ?í²BöÞXTqWKM B.¥¬ùY\¯90\¦™râ©WV²I­)(& ›lÃé¹@[¼€æ*š»:éÜ’woƒ¯öÒÆ¼lç*:h‹…W½¬kü…1˜ô'ÉšÆü¶_ºå©$+ž‡¾Þâ¸ÇÞÅýí,Q6—¥?Ë ŒÉ÷ªÉôbðA9Öñ©ÇqSx|6 /öFSóÆúø}ÅÞ€³thww»;|Óv*ƒ×Y{~QŸyùÄ2©p°W“Ëu´CA۱ߗºpý+F ™ŸbŒºÆD¨}ÑÈG‹î¨¥Æ¾¸pÓ¸ô|=j¡G/I·#Š­aüF"õˆÛ®iOÞDðÐùÜäeãÏ9¥pës>^[¤”S£¿ƒ\ ÕŸ.(æÕ¾ÒÊý™Ú^±Û;~䟄&OáŠyRLæ¥Ík$!¦ÜØ×òÿ Î鿇4‘æµ,Fîmâg>f`P‹¬÷½ov$ÊÅ h?Ô\ëp.²l‡RXÒÔ®z{~ü¹8¦>M«|ÔÛôè?#oî¨IÁÙAEÑèýP±]Gá³Â­—m=_ˆ ÀtE„‚°”RAŸAþÐcåJ5ð«$œ´{îQØ4Ãí-šË…Ò ’Xö.}¹«&/ßå°+_Ý;H]“¼^p!>/Ê.ê{FÖtd"êúYâsZákZ|é'ò©D­Åå8|B1°‡Ì /PÝ ó˜õ~C·ñ¯fÓ…XºØGïÓ‚Ñݦ©LÌű:ê¼ó‘¾œ”Qá•z"Xý6wû}¦Ø2ÙÏ!m[àä’qU¡ý·ØŸüÜ0òq±ª’Åñ5κ¸Ü¸r!¹¾Å¬ |ý™¿ÜOèqª ™ÙIÿðƒÕ€#¢è IOÛÙêNÓÍÜIbôh®ºjVYBÚ‰U)­µ ð1Ñ.Zÿ˜V†²£`fL‰$þè$—¬Éåþ\ ªñ:@qOjqbø–ô¡5^·õ™6sƒ¦äâ\èÙã0E_ô@>º"·yWŠ]ËWÂð¤y….€2Œ«Ÿ)á{ %ÔÖOn[ñÊð4lMôª­öm[Œn¾7é×wº¸„tÿ§$ž%.%k Ýpncº0عx9‚Ä'+Óto›JvU{âÎÀ €ž#ŒOšU]ê‰ÿƒÅ#¨$O#}ñ¤Š¬ ˜Ì—Û×ÿso„óO"ΛÆ%\<§a!ÆCh{3/î°’€Ê·Ý¬Œâ—.aýŸÖ/fCÝ b4z€‘´A$ÿ5ëÉu?Eš™Œ$H©,„Çð  ·ñ–¿9'tù^’<<;‰¢,<"¤-*´åž&¼•|œZЈá§X‹S^«Â¢“1;0XuÂWSš‡ ¿ÆÕ»Â@þZ(„W\q?^ÓÚ>«êC]¼©‚ï49<îÁMÉÛO- Èr"vÃËu•¶aùÐoÉ®ÈÇÒ¨ ¦Óö‰â½1 ¹Ôq}BµBô·¥4—+ŠÕè¯'ˆ¾+(Ïbvi‚¹ÙŒ•)²kÂbo«ó‘F„âûrl×ÁU—d„}!õ¦ä_ÉTàÐ;ßÓà»f¹Vxï jïHŒVúfúc¶ˆÒ®k‡ !ñ_žJjP>åë B¡”nÒøÊ´øÛ”­„Þ¤°»d!o¿_CûêõоÅÛ×¢Hç ¹á’îÙ…_Û¸kGFUÿ¤ŽKïVQ”dñ5#ŠE­¦%y?éü§¸`зµ¾.Uð2Ùà-4X:20­˜»»Q¼MV³2«³DÍý­Ä‘̱é^öjh¯‰l ^!µVF='Ý€?œ/ìO=¤öKlH!?ö3a=µh!s„öhõ£*^e€FHª"1y2`©g“ü•Ì œ[Zz¨ÞÃ8ïùÍ%t YM¶½Ü ¢]Hçáp&pdýÐU=3*àfò¬TË3U’Ñ4óoÞc ¢ç‡QÝT%½Ur1…jða®5yS–C´ï߅ʈAP,N´Í)±E)^Q¦Ëk騭•Ž˜‰‘‹ó?¹B‰â§›'‰¶°}j`&âq5†UAj1÷·o³x*Ÿã/Ïã-³4ÞÌ$ÿƈUY“ÁÜëªÔi?õ;=Ýeº×áÝô<5ç:& ZãoŠ×[ÒÂe#®8vl»½Vû£É: ³<胢L¿€”{&ð!jˆutdáCäzz=èáŸÑ— å! xÚ@uù>-<@¢3‚H„z gÀ‚D68(&"«˜:XgX´÷8³£ÌÀ!'ô²dó€„vÀÓ'NÆàOÀ]¼\\g×¶¸Ìý8¯÷ÿ^~×òwnƒw–$¶•ÀÕqí/©ÏôÝøós§Šxî®53“è•üM\‡¿ÞîÈè…+rws) ±öR<²1­ Õ#çË1ð~b,ÌtŠUÚ¯nù!?Uk>&Ú1С:38êœûL?—è%˜Xó†°‘:Zõì …ƒ‰‰üX³8q(|Rª)Ì^õ×p"•´1Œ•„a¿d•Z™ÆGí>3Ù?¤øÌÇU(ÝG0« 94}àìÄq¥ÚMïã€Ø>5æçCïœPÞx°z— ÒUu[N:,¹w? +~¿Çi±I R—pVÚUë«ËÔQnXeÐ÷°Re1çösš¾ÐŽ ˜ïà³V=lÑëeGm¹NX»Ä“£Ïr#IÛ~×7‹ŸŒž‡ !°øXY™ÔÀè²õîn¯i-¦¿kº1ËœˆXúkÅ-‚JÁ8ó¤‡ëXþ'‰È1F4bÈf¹[izbéúÊ…çΚEÊjU›ï Ï}£f«¹ÓGwÑ3ÊÆK`fðú“Þæ¯„:{/îä £Õ Øß¨Û Ô®«äºý$‹¯ÊàÿG»AN×í¥Ö—è[cU¨d²ìLé@W+,Å´UCâ¬ÝS°Å±~øvËÔß(“ö˜†•¿´}ãùºòhãaÌæGJV­]°|úŠ'§ðmôõ˜9u…㛚A›.ì½u`ô£]\xéˆ*äR*;VzwÖ³b¼Å‹8Í<qrBÄS0UËчÑQ[¦|1Ró#[ØPH}óEPê]-ʵEñp ÑºƒÏfyô³ Ø d8„qùòž¥ŒÃüù]ªõ…÷„œ÷ȦfBv!œ›IwÑÆ©a\Se£x}ó‚oŸ÷è‚.µD– ®!2’‘*„Êš¢¬º´%ÚÎÎýº Dï½â¸0vU„·¿Ùù»mMp”ÝV†´•-é&ðÊŽÁÞ3Q\)ÎiÌ—+`Y•.+¾ÀJ‚ÉC%,”kö3çO‚ H>uIMByÉͧ“Ùh…½ºí}fܱ úIŒÚRÐêÚË,ª©®ÇU˜7ŒI'¬ËŸÖ>œåí2©ˆæ—ýÚ­XÏ>œ}­y»¡þ´i„ÿrƒºAÖ¤–y «Fã9ð2ì¯Bãðãÿì”H÷FÖ©aÁÿäey=Êú¹*¡„©N~ÅÞ•²b:¤%Ø™ûÂv1ï+7R@Æ¢åõl‡­JˆtÔ-^Ë­™0P³Œœá†Ü% ]ò±–аdíhü =>×°R …!ñúz‘ ­@tø¿íè‡Ka1`»[ÈKvFÂ%4ë4ôhL%üݧÖ:·Ò?üÅÏøL©‹ˆZýáXÕiÀSt‘©;©"ç»5sC¸íÇ:ì‹ßà]í½¤l„ÔÌd«4ÿßßÍœ·7jƒ{sÜ7JZˆË0-ôœ,lô )¢ö¾‰P˜t£Ž-å ÉŽQ  ºBÑ.^mÿ¬4ÍlƒÔq¡g5?òL€ós¥Y›c ÇFDæl›÷ Á7YF¿×JŒMR>´AÒtH$¢í)ÔÄ¢ŒrÕdÏñ6¦ª* â;Ò·óEÒ”°±%\qÐ3íh”ŽÆã)µB²5;øv¿sK¹Ã¼n`ažCê³e37{܆dÉúO~œOÒa%Åš+5T|1²A'u-}yéE í³Ö0a(XÞGî•0íÌ ÓXG|a²+{pœDðÕˆhg77MÌ' …Z¡îƒ¡<)uõÛba .}§ØLTÃAÙ™«ÿ &îWXhÔçô›Ð#¿:êÙ0Í„Á¾ÿ#á|† w­"–‹æÕM2#-¥£?–<ɹsïåž/âðê&îà`Úkˆ¾x7â3 í2׋¾Gj÷ bEI¥­7>ËöXìÍFª(Œ—FØZéÇ ÜäwIY2O~Áõ«m„ ØÐqòUð`KÑãôy¼iy ïõ ·Žœ%ì†Ø*—VÈv+÷bö õÜ:ÆøÆBç¨yï#á¬3‘eõRɆÒzXd=_w1Ô?†³sU{²Êì“sØZÛ=YôûhŠ#´5ëèiÏ; ùµ4%ÔÞª<˜¾©ç–ÍÚ—îñÜ´V¿a‰v«AÕ‘)P6ö¬Lº¬ý/„€üD LŦeµ ( `%êñôì²üiʼի.4¬HBÓ¡}<霞`EƒÕ>!°Ÿ_uíÀnÊ'H'Ì=óÆ´‡V|­´¸r%•ÈRr9Øo¸þù÷³­æ2@F¤ OZA˜'Hø•³ÔòÙ Eèéå eàRfؾ‹š1=XÉe ‘EÈ…Áª’c룭誸Ìe>wfl ÅH•ŠX°Ä¶m¿šþ-óêÒ˜ïŽ6=&“G@ï&ƒ^}çx]]ÖÔ­µ3A»IBà´ÖÄ—¼½z¼]}ÐmÑ KqÒއ ñ©ù‰þïá‹åí'2<##ª3í¢pç¤:vˆNSétÑg·Öºð["+7¯…®(ÇskhæôÖšiB •%ñ'˜åfBJdfñ„¤UõJñðq$R ÎLÑŒ°âhèpÆMó÷r~Ü!µÒò»á¹»~½8|ùÖüåÙõB; ˆ@!`¡°eçZØÑkq[v¶&‰ÿõ«OÁŽm‡ËbÓ{¸MZþÞÍ-À"K°÷ÝUJ^ç/%%)ÔS³Ozö&ó@·Ö?, û㛢º”Ä”-CÒÔâ-¦Â•Wž.ñ#/à( Ƽ¶Ì¸ZÀÆÜŸ¹§…Ô½CÓ–xw{ð¬Ô]@—©z»‡ŠÄ¾RЄVª¾vŠO˜”¶¿÷©ÄkS¶È3–?=žû™+@N5s;3ŠªšQŒâflÎõí¢RðÀ-zº…þP_%ˆ2Ñ ±œ<Óå$®l¹Õ¸­ ùT,¡ÊAø^«õ¿_ £(x’BëzÃm5¦Ó“î$ö7£SÕ®T)@.6µ4ßYÙ³ž®ö0Ö?»,×¼¨ÉZúò6òDzmÙ/n÷@” †ÏñÕ‹G‰`¨Ô»7ü-WÄ F5ç\½À V¸]ö^à½eĬTfG&3ˆÑ7Æ.‘b^.¯3ªòéIÆïEKé±ç\“äÖ$AÇ) ý–쥯Ùqì.>äLÀ­^±ó9DêZßð¬˜ûR`×øËiñ$´z·¼#XJâ2ºÑÅæP„MRXëæ¾^[ôT0ï¿BD ÆLVöKÛ3Ĉ!ì{>‘/ê©Ý5äÖ|³ÆI_õ¦ëÌåHú°ÈÑÀzøÝMÎÈ–)Ûø\n½À—’tXn£}÷¿„®ÈÓwyèlÚ–¦§'ú‚Ÿk.‘È‹4‰ûoÝúE1®:~ºC¼Ü#Á@àiWÀ…%g|Ö«øBÓi|ÅáÑä²:°‡¶¦ï¸3n :ÓÓ>iÄÓˆz𙵑« ë¾;nÃÍZW/ Z-Äg6³ÐòĤĨšÜñìÛÃtµ§ P»âÔ×ñõ­®Ü\›Qä´¶[sÌ&¥­I̾0˜*Ò¯Û› 0%kTÿ¾ÖOº^Wæ[k˜YÂù5V¢ˆÕQAcqH·QÅ\QÜúC¨læH¸Ô£¬òQÀ1t7\[Vþëò©kõ¯5,ÔLÃo,GÑ(IÏOßG,HpɬFGÑÌÓœº¸ZýXÝ=ÊŠã 0(‡§N´2eA~‚p8¶ƒ!ß.^Ëd¿I‘Tuƒ÷˜á«Â)6*ÛæDþ¦÷®<ÛRß—ì­0£ïÞª–P‡v²G_ãhiºfOÁÿÓÜ÷?!§É†IJM\ ÿ—³¦Y4óqa’nÒ~Õ^‰š#ï\sÏDŸ,1‚á4~FwÓfr%8›T×sEÙa ì-m¬R[ÁP=¹FÈL ¤ £HÒò0«ÁÜпÂah]@ê"GªK_ßt-£œ8¼Ð"ÛD¿·ir„ùּу/êYkUžBÌ‘C0ü'×%WŠ7§F?¶€+É«H}ǵÇCàµaGÙ"§dKï©~^)±™gv Ú“TC"žäG÷¹%Wƒä¸GUo[ËÏk0³½ÈEJ„vôþ§-žÆÝ„}ÝÏIë½èJÔ^½ýe0Oý7¶v_ÌáQ téVþí0Üd¼c]L§r6+`p¼C»ª'x·Iª•â0˜%†é$-b>Pœï™ 2nÌ8.JT$€þx‰œäkôl{šY-ó™‰5î;Çá8j#ŸB °ÒÏ3²|§8ê øðÖó ûøÑ4xõ­½h¾ \´3ŒÔXLJº.Äíë]²´³¿ ,ØéÛDÕ6&ÚT!iD*s’W(pQNúM€Dn0=0‹=©#j<,é×&>–QÁ+]ê%GÖÝ–?ãÛ¨”P—/ŒB”¹ŸFuf”E§ÄÅ,sMA|ãw0Ð&ûQüdmJÆÿ< :F¬¨’Jw Í ŠDø°˜/ƒ†%%Ø  Åš…išôºôFü¥ãûTGL*˜LÈ“õ,dBêS2ÿ¾ºòáAt‹wÉy:K¤‹‹\ö›Å, ­ l ˜9-ê£Ë$ÛÚN…(3”ÏrP3-óáÄ_Ž +,G·`«ƒ:Tr—¯Z>œ¶GíÀ}Â|nåç§ÍNž;4¦µx*8äŽ8˜´l±Î˜0êzœˆûö¡'ªŠœ¦ƒÆºÞ½û!’C%Ã×"í0»:ßUôȧ !Òg·IÅ)·Æl’.ArŒVµÔ °óS¿Õ›ðï…«ºЙùpêåMè ëï 7ƒÇ9X7ûDΓX`¿”ö‡Ót¢ÛsÌï…dà`LJÒkG¬h¯‚u…Ön#¢ë‰5œÎŸ ÛU_ßt‹sóñX0Á!õ…Sw³³&z†²#hêÙS A<þq¹-‘i•ý`7ªDÜ@$ÆÐol|»» B¶.eï§‘—äf¹0) ù•yçùÞyŠÕ{0|Ö{‚K-:~Îc.Ž\›8|¡ÞQسþÿ%g:ÜTâj੘¸D?—øa6Ö*¸–!x4l0ÎgâçÝÅ!ñÒ”Ô@Ô7tQAL“¢Ø%ŸEÚõG‹¾U¥&:üâ,Ýæ²¶e,ͪr8¹T„ç/-K ÅP<îDŸ’!mW¶þÿcV)ûåìiùxñ!ûà8å©^2ìfc§ Å}n:|é¬/Å*Þ!bƒ|K½úpZ’/ªï±ÂeH"–?t‡;²ÌÏÒ¥+¼ÐcëÞ-Ȧ[lò“Eäu¬ó™1Q’¨·û‚ݺûÐò¹tQ†+_^RjES^Ÿ ôR[ç´½@µç/[åËHöâ´]^Ùƒ˜ÁtDéÕà¦mQ„°qwXw¬ê-£þÖq÷ÇJ5vµãT–»ç°^†üB®U¸â£óS[ó>uf‹³$ü7RÉÃ|ÓQÇ™0ñ¢d/³YPfËîÜ^”Žàfy¬Àov\í3M Ò³é2u×j²súõƒ#[ÄÅÛ싼?ÇŠËûAMz0±x™˜™d+ä’1wÄì?TÆwóiyMM/u%èÇÀ¤bb%óË×ñ11Äêê§·p ‚ÅÃjã‚€Žû9£ÅKc¿äðÝĤªói Î_²ÿ¦]wÃ:Œ¾þ fò¿ÚDß¿¼Úaï_1I—zsúƒ>_-éËÖ’ š!´îg‚CtýM‡i}7ÕÌ!< ø]ó;:/U±TûãÎ/ô²G4V4 v,ð*Px)b°ê Óu ‡o o¢îUWÊ­S?)¹îqL×[¬µ-3?JTõãvà™Ç§˜c‹6¼ ÷,‚®ÞÚÅ=‚¼:žò.Û;—ˆñ2ÖÁþt‚Hì#çÎ÷B)JM£´–% d[D°tÿÙ Ÿ !äÛó²§M°§¢ÄFÀ½¨ß#@Oîƒýyb<”ƒìÌÙv öç÷|WP9n@üOuPùo+¢”áR ÞýÞñÏ©©Žeµ‹*S£ÉÉëñ˜øõEO~ÁyÄ´Î.ßUlÃ^¸wzjœ+"L‚ ,œTŽ:=– V/ªÚIJP+Ú¸).7›XîଌõŸ,¦º Â‹ eÞh¸›FGTÊî_|ž’ÓÌ6¥£† ì;¡^£ŸÞO);¬ÌîlF?xÙØï #Å?.{NS¥âZÀ±{I-“ƒ‰éÏT jÏ]h¡•Ã%¥R-¦)»ƒŽ"ïKÀnÚrè–2/£®Øó a•—:øïôð«[û˜Ys&¨Ìèc΃s âúv]¥äw#ßâ`âø%7mK,Ú7<Äð4;8¸.kŸ>WBX7yÔ)áÕªv~ðocÑ…JJªŠ[l¢7Ýíð‰ËZœ19ØYHÝ#yºÛίi—´ÒQׇolOïˆÅÜÕMŠë±1wcÌþxC1…Ÿy“oáç$¸ä4`6öóÌAjÈæ6ãÝ8ª(¾'¹ÍÈþ6w§#Æ×s(obž<Ø+¹MÙ_·¦“=JcÜ|uPŽ‘oÞj‚Õˆ<×ñ»šÚe4ÐEi¿y8éVõ„Yÿçht+£ªü'F´"=ç +Œ%x#$‰‡Ñ2$0ñ[]3ÈÝlalXÎ1Ô™mZçÇû~§˜z eû䱯¤JÄðuŠÒ+’R1?÷êa¾=䈢3–¿×'P> öÅ¿o¹ì‹6|™çW<${u;ÅÛ×`Þo^Õ£lÏ¿qÏ6sÒZ×´&Ã>˜K‡ÚN„Me,KÚ¾„ Ò˜p'e ]Aj65»ŠÜó<òD¯¡.¦õèn~ahÌå¨^äÄ"™TÀV¡ÝÓ” 2p °×Ê”}ËhdSÉav“ªÁO£ãþá0g:¾¢K·„KËB^µGî)nÆ»y@J@¥…€JŠ³ÄøíŒ·åtö׾ݠŠà ¿ÖB-.Uû#n`G¿f‰µ&-ô4¬jñUûÝ7½cžG(…=†Ä“g9¬“ Gk j´ Š–Ç,Í—ÙgŠ1J¯”gêmž%Àè>ýtâÿVBôòM‚Ùx_k÷B _œÎeEÚïðZûRL)€Y!{¼´ø‚>0­Ó5˜Dß{ßCñmÝÌTø"D¼­ÇS&ñö$帮ϣüd= 0YIã¤Æ›‘DÞ!ï¼1—´äGƒ1<í–#*²55[ö›þ÷Êß›¼·o?6»ò0}ˆPsÌ•ñ󿣦ƒ•žC-Œ€Éà €åG@ÊÄ2„µU†w’̪{O˜ªßc×·K°åŇZ;…±,.Ñ'ÌBÖ©®ÿ¥¾ýÓS_B†p†Ù&‰ àÖr¼[UèZ¾’®î¤wà ñïQ‹HÔf¤ŒùéÑš©Õp\±Ô?©Ä÷|Ú@3¹E‘èØƒŒmN0¨¬ÏbŸe+- .]Mzq6ÓÀ³õT,kIcÆ|QG_Ü¡òá8ô!1¾ŠEDˆÒÙ=¨åV€– þLx,U˜ Ùñ0UIv®mFÍ9{ÁVæVw­ö%I%õâRVNù—W_˜ ½­eÅW.Öê‹v2è{•™P Ž5ƒÃ¢{×™qÒí[*¢…[XÌs/ìÖêÞ Ê¹¯úqp»¼?Ab÷êw5©õ×oIØ7ÂÑiÂ6kÑ ™Üäf¶é·K®ï"yé'mX ‡­<’k<;u/›v“áK”—†Mš£†5“es",¸¢øv(À&À!Vë&ÇHNNï2±€Dwœþ¿e#;Wl°¼ô t¤5úÓ üMŒÁ²ÿ‚;pzÄV¯ÄåÏf¾dB¿àÀ¹3!>»¼lƒn.V™ù¥ “«Os}->#ºŠÕîu°–AsÖlRyõ oØrIXŒäp¡¾?$ä‡Dš‘bE¨äaŸ ýÝáïT‹¡ú±8•šª b ÙSÍŸÌ~Õ~(Ù\t½éìÏœæöTÙù E€|IúÆrÕ ~[·Ýñ¡v ²ƒ¬¥žˆ·ê¨‡Õ´œ¿åQÉùÌ ³§*õ=Ô™ŸH¬óøÇi)¿V˜l“|¤4 `UÖ[‹«¨+%j¶*¼þò r‰¤Õ”!Ÿ[w Q³ÔVRWŒ—þS šºõP§®~Ñ#iP!fp›T?@†!1–Úº}õ®£¨íîi$èÄÎçrånqÁ ¾)¯­3[¬ÛÙ[ÄYª€wNÉ‚Ý,2ÁãÔÓA'Mª©dšñyþ-7‡‘ë-Á‰Î¯êꡨîWÛµŸ›í^W4‘ÄLD³ë¶©î{a§á¦ƒLÅø½Î/0C;„(ó%NŒ–¯ÜÃïZPÄË1Ђ ÍÊ𕓉œõŠÏLÆßÄ샆Pƒáøزã§Ê¡X[±‚/@ÃÆ†cDM° «ýO‰s„˜í GåO³„-dÆkŠô÷Ö¦LÜÇ ¶üÎUL!]ÆK´U.Ú>e d•ý/Oû b ÖÜíd¡Õˆ7”;+¿ube˜ëgè°ŒY(Úø;I×òK6 ÁbêsõJœEÂõå’8›¨(|}O‹ÁÈ=~«Œ$xâü¾Ô¦ß/è1c­Ÿïß,–h Ã5îgõªÕ> “@` u9~Ö$¬†éXÑ#Õ9h€-œ×þá6³ºv#pÍ«Š¬@™a3ûÛÐÁÒè(Y².þ¼·D1Â"ÄbÉ+ÇVêo/SŸ#ijár”WÓ¡â{H²ŠÅmmáFªëAë`fÕÀV‚v”CzÉg^ô™¡`aj÷ô¡þs%i¹î‰Mm¬lú0ú΋WxÂ3!¦ÏCI–¡Þ5 •1þâ?˜àìtj–B˜8Â}fçó1Ëó“«7Z#hTlÙÀÖÞ}ƒŒï>"ö°œë³˜ø'g°YVÂUM>…ø—¼BáŠ]%Øz9{xƒ“ö‡α¬WlÐ`¬î/œ± ÷šƒ{äÊÜf\ü7›–ÜÙ‘‹>â¸qÞ–_'{ÝÏíM¢z@BÏEšO|ðe¡ý§D÷|lTÕ.yÎyˆ@â4êz8wS¼¼OM…C;ªV¶Íê .6Þ-æõ5ZÓÛ­N³‘V2cöFÐXØuÕ )‘V9kziB Œ&ë&Z±³¶Ô$ëѧ³L㊋Mü?hg´šd«1× ,v«\¨™ÀK\G’ò‰ü·¶ybüPRb¬ªWŽe™ê8÷Jõk•3}Žåû#ˆA Ÿë„Òó%ïe6lî`ÅH먯.ŠÅ)•;'˜ø¢»éäš^VíB´[=Ÿ-sÍKÍŽæÞ<–ðx¸Ý,eÞ8®iÄÞqü²¯¸‡0 ¬ –²r)`ÿlù7_àñêš:€ëMÂ'j3´vµ)õ,ÐòCëk\ÕÍT>wtÒiSsÕêÚ‚g߯$m±gOŒsî`^>ü˜¾Þ'^}3³“>þFÖ*„¯æóC·¶VIñÚà*Ûtïĉ-z”H€ì§ÙwùD¹ç¬1‘;‡RÄѰú íRFÇ=ÍÜÞJfhÇw‰D—-G‡¥$^òÓé²1Ÿüæ>¦‰ºHg†?D怄 ¥ãV«eT·‡”ê0X¨L>"U\K³®Å;Û+ÎÉ㇕éÃSBž€£¶E´Mœ:äwcé¼VÑt7øšÊïê&uwZ›^ƒ)»›º Ð €ãÅ!rS ¹ °q?š‰‹eB[ à=Ás1p(>1Js}Ž8îº'iïxoˆ¥ZñN w…ƒ ñP‹¿×Ûñà  4N9E‡‹aÆš™7Ò”_]^†ÁÝr}ÈžÈÉâÁ”=бy3’DÕj7T°Öf²Œ‘¶³™Q£GU—§Ç–×ÿ°þŸPø¬÷­ò=dÝ‚»b½y¬%@գÀÒ] ¡ª‹"Á¼§i§UhÌßž'dæëYµ9ciÝ{Ze»Ó5»êÁõo‘IýRsôî@Á+±§Íe›TK¸™ @G˜YÁt7.Ð1ƒÛÂ̦yohæ«RøWhÀÚ= ×Eÿf?‚áxªjoÏ øo ˜ c  j­²L­·Vhá©Ïkß‘ÿÓª£×`‹aÌ›©úcëÿí/W(ØÂYÏ0ËèõȈÍdãàÇz £‚ª»ÿsFpfå):`ZX×q¶ð<ûÌ¡ªTíùkP¸rë#}Û²ò– xt[äúlg3WÔ~Þ ’±Ý:ÉW0J§ ’âqmË€î·f§'sÒòz§/•†6Ie„Wësᔃ8"WçÅ~LR>-F¸›=‘g Û‚¸W`ïw/¶}Ïp T2κ!©œL¤ú®ð™tóNJBà´÷Ó¤>M´Ú›úïÖŠ… Ϲëƒ~•[‹%^*~Ž¡ä§;%ª°6’™ø‚NPs×y±eÂÁcÍnÊöÉåE…¹ì Ô,¶â­bV®{ÔT˜)CêԄöåË,OB(»žUkoÖ"1¹YIë%¨ìå@“¨øßDæR)Tœ>Àªój(´«•ÛÍÆS± >ï87+ N›Gêl”ØJ¬ûc`´¿b5ÊèQðùì§\É{&¥Ð$iþ…!öÇ@^ÊÀ±ÉTÎܲÔÒßéïõÍ}ãχeópÔú3V×d± _ò©ÜWUÏ‹ÓÄV´*¦…·†!ß=íKùR’[ýêl2ëõ³HP Ê™m)´§†=)|ºlý <*ÎdúÕä rQ5mÓk„0„'Ñ¡´<8æ•|£J+TmæÕœJ‡.#©ô3C¥úä-ímÂsÔ FQâQ–ŸÈ¥_nøN>éì%.ÒVg°Ý>}ûµGf ª,©W•>Åá³ÆL ÊÈQ1!ôEnþ-,ôÀ¯’dÂ7"Žꬭ¢‹!*T°‹ÂÇ×0cí.ËtBëÎw±ýÇ}îÎø°ôé€$f‘&`ýšW’{\“èç{ [—ÀºÓ´‚݇„ø©ú‰’9Ågópÿmm”CÊÕ±ªé׿å(ÔåúÔ‰RàFQŽR…UÐ5š ¦˜KZ>IgËB˜„ù?EõÑ‚& e%±¸ˆFóJË‹a£4¼ÆäìÁÇ‚þ½ t/·†6ßSG¾½`¿É·•r¯ š¸xÊî¶™ó™‰f•Ò­ úf õ0sàÑr’gq2o\–­»('Jlìºná›'­~ru·ÂðŠÊ¸Õ‰_É ÙÏò¢&´(Hïò+—Lß:$@®“ƒ¤Ø$ɲo=†§5>FaµœBoº[4øŸ/¼–Æîj\!HÕ‘H'Ò—‹–êνð×ïí$O_‡üÐÉlr{Sàgè/g÷5”ÃLD5»D 6¡„¥/hºÝ°¶,)¨(ƒúc®·¬1EeºeÇÎ`òB>øs/¿IJ†fëÀ¨ÎäH÷œÊóô²¾hKtš¤I€ŽVKæö—wü„Ô–õ•.’å|‡¦ÊÃâ£Üð´ÐöïZ=žÎÊŽ€?AØäp>š—è'žÆPÅ2àùñ îÈH¶ÄÕÈ4 À%*…´Åsú½tÜ«ke¾¬ØÖÆ%L}º#ÚšÐð[9­ÂjýT8åøX)û[5©6wÙœ<"õ ;ZùáÁ¬„ N©”ÁפۢA󩤴óe7‹º+Çç½ 1ßg}qj¯Ä€¾7Ï]’ üBÇÜ®è’XD…°ø+†ÿ8¹ Y™¨ˆ:N37o$›Ê¬ZʳC©Àš¨¹ã[.X¡Ê¾¹"M€9GÄ¢ó§¯ õA]vû'µ¿À üJðúÞ3B˜âÓvЕæ^iÞ;…“Û+Rw“{õß·ø™µ„Ÿ" vmDÔ•vhBéBo)Iob ©x½¾Ï&Üb…Éí•Ñ×LÛNësbÊÅø±K•$™Y çÙn£<‹@›åâüù:‘Tãï·4ùM|Æu¨µ„ÏŸKo]üq!7-Œ!Žz®ôqT·_û鞎C/œ0wG¬°Y —ÏZF—›Û n&Å êdø|‡)d7ôù$‰ä:/Éê é¨+ý´„ri˜ì´÷Nˆáþ Œ®výÃV{Óœ"©`ÎÌ–i‡7ýÅã«Íý–½Š) —ðßûÙ][ÿr°Ë'¢ûîèhAÅH*S’D,¼špôà|¯îUâÙ½,—‹ñ\ÓFH” Š-ü*R¶”eÎÙ½»:¯…LŽÙ 8G\îcU0ihv}‘ "èzɆˆ'pUtšûðZW„ÓL¨RõÛöÉq.Z\çâ±nXÉ£1˽˜åñ£P§ØDß‘)…“”‘²éyá¬WÕÆ-+Òy0Ìðú«I¼ü1¿¶‹SƒÜO[xüÂe˜£þ!zÿ’öňǼ³…˜¾÷*P ûêS½l” „ªþM³¹NÕ\ÈH‘/Æt˜gc¹ëxÔ=«.oë Mà0kHl­Ðˆ‹ÒØÓ¨ùD+ìÎ+ò6‘XWS:Xƒ7×okNG‚~iÛ‰íbô]‹Ê3s Ó¡wÏ4oQm”)oE \_5ÿG•e¯ðqúŸÿÎ8˜ÎµÛ•éWÐþ|ñcNZ|Ñ÷F&2¾ö,Ar9Êýôâ±,‹×3Îz‰)¶Š¬6ŸL-:Aç1xÍHzê‰ECÊxÓëœ\š™x{h˜ñ‰$ð\Üq»à›Å3k°X’Ïe)ZðçFâZwÁÀßé ;¡­¾tªc¥¢+r;£7µ (G;kÛY´À)+]׫šÊX5¸r²,íØ¢y-ÓÆä¬Ajt¿íÊýšea8Ÿ[Ýýç¦ÁY@MPq‹ñQó1˜Þq@ñu’ÉÕËC9•ÜFd›´ÚèØ20 ä]-MÆ/®NH¤7¶¡4"’Ö¢èÿòȧGšîŒù~ÉWMæÌôÄ•ÍÀk(Œ¤^L³ûêüS“ÅRòT"©ÿ5n¥»] #ÜlH=%»3X÷)Ç95ÓÀAÿØb¬á­Ë(©qXn`=[ þÇÈaºvß'5¹l–»g=ÐMYWÜÎ<·¦ØƒG:ˆÝì>¬¶%|ŒÛ.óÏÌRNÍ/Õ¦küÔæž_ÙcvwUðíºÕºêP׿ÕñxFÛæ©âe‡·}ŸŸ°Ê'"²^àÖ¢WÌt&ÑLQ«…aâ¿{ƨ" ]Ò]ϰ3Àþ9/+ѳÆàÎB÷õ¶T/ñXf¯|uX,B7ŠÑpÚÄFúKÌ“Wpì,4ûroúøpªý{7 Uà.u€‘®‹†Ô§ŸŠä›ɘ¡FY¤¿…QI7å xÚ.ßà™¼9’8LÅìSÆÕ\qH$†ÞÖ½ª÷ˆÍˆÄ©îŠâyïj6ÔU: –pU? ª­ À9™W˜?aô¸¦-© Ie5†Ã—Òëu«hYãA„’ºuÕ¾Àejq™˜¹EE‰g?"ŽØ“fâPu.d&ï+óYšˆ*ÃAiÄ·F…<ŠDLßiÁ2éyocý°&‘nÉ:S)—·¨¯¯qq ”éªà¥‚(A'eH{Ig“•¦ÞT:LÄ®Ù2b:—oµ¯W9âÕ?k³;”¥¥O[Q $¾×é#[^Æ{™æ6rÞÍ­ÒB,uÝQ¾@©Ôñ:âJaB˜Åt‡V±HZWü±ÿïâ6˜º†<*…é—¶ü–Ž9jÎScÑ‚'ÌžLVÞ+û €Ž`@tž5ÝžZµÃã%»4xo& !XÂ5î«’²@:4ëæèUôÈèuÐÝ2Û ÜÇ…jñEEæ1ª9QÈ9ç‚€ð˜éBèÀʘ‡WX›úî€|Ìä}çXÑæå#lGÖ¥#OœM  ë4¾º“<ÆÓ+$§l9ªör¡nŠÆßnÑsB¦Àða‡OV ßwà{ØÂèf«ERfçC•J 2, Aè1N,¿¾1ò‹š¦FŠ2G`TW€Œ'~íÑYÇ’ŽÌK24ÿëµ;ôfGcY±…Ò†@·½Ûþ<\r“u®0ðó‘Á¨ K“Ý5¦´$©™L’.W#ÖЭbyžAM§ÑtsXíŸj?sÐÓjÏ6¾ý"’©vR¶{Øs¯±6>¥¨dò¾dÝFs¦Þ8x­Ý7¤­~[@ó ¦¦À/. s¡ÏpÐȧ˻²HrÔEþNU X[jQ\ŠÒûglXaÍ÷°Á“;…¹ÄÚ¥ —I÷•{ÀŽcc$á«l›2/,q¦3²/5à–h´ÄÇ'V¼Žö»fn7Ùw?¥¶‘‡“@ ™Â°QmUl¬7@kû¢d›TðÕo¥;wò¨$Íù7fÔÞÚM# »V½³Ä°ä(&]:˜•Ù»ÁÑ%ÇM9 zÛjP'^wÚ5@Ï’$š€ÆMBµIÚvZžKªØÚ¥œM¯.åIrþ É\‚î!‡f@m©Æ¬ÔåÈ£¥8Q¥~È^Â)¥ðÔNÌ€p9ug§_^_G3í"‹›7c_Àòö0½ÄÞp²@ NSK´^ÃñGž»®ÙÙöBV=]›ø§Ãc¹ê‹-àn—·Äñß´«ýŒb&ÉE’Î#잤üƒ(Š-Ʋy“ÌOqìÐ5Q¡š ÁU “þ¸èÚÝåSâÚ±›”nhl2K·±µ•h¦ó¬,Þ*43fƒŽTÖ¤lºZ©C†·Â‹Y]|ˆÂâÀñ¢/¸±ê\÷²µìËbˬáZõÕšùúméæÍmúdñÀ>2I†…•Ĩ0Jg\õ»ðØO£î%`¦_;ÈÍEí6Æ¢nœ¥±´n8¨j¹‹ï“G¬‰ËßÌQ ;%!ÎÇ!âqfö·Xkô(Ç®‰Ðë‚S;¦3ø?4ÇÅSõùç/g`ÉM‘ÐÍTB÷"uú¥¤`I·”CšÁ+ËŽË^ìyj|ß £YyšœåÇ/{ö^‹Y6_ÛÙQcEªPþÐÝí¸Kz²y.[ûRD}ÄN*w{¿]dÂ἞9ÆÚ‹Z9;FXÁéôúk3g>ù¤×ãFfúu­~|Œ¨’:W¾ÌÉé.Ð|!@"ì$w4'~؃8yï§)~ÈÛ$V•%2½VjÒ=šî¾´…`yÐÇŒé Í9ݱkÃÊèêË€t>|ØTåwµ=£D±­ÀÄ,WL•!ö r¦£‘š@cÁèm›$A—¢%èUC£d¤gþÅ(ú`yDFÝÚÁw¶õ3j±©ú¿ªóÍ ýfìÕ>ß@ñ >B¶€²ú6Ó Ä´ $˜–ÑV,ñaMÈ, އ²Î.XF¡U€iF¾Rê.»-‹ÒïMäSì߇,ûCa›`Ê(zÃT}7èo©¿åYhàt•<Ÿ¯Ë"höSp±)h–“?*U8ΓP}Ç-’KtÄ$Û¦:ðšŒib/=}¸Ò‚¢Ø§³¢É¾Ãۇȣâ-ñO¤RÓ˜Ì"Ø“»˜ûk§pu"Ë×Å‘’t-ZÀS)ÙaÀtÑ––—pçâgD%PµÀ'Ææ‚a”ÿǤ©ÒåuÄ>¬‹m!ÞqÆP%‡%z vÙì^ðd,ù2ø˜Úúen›5FEˆ÷ÖÛ7xÕë«.¹:…6)îjj_oúùëL†÷í}2uX ¢BT˜åEïóµueÑãXû2ºs·W^ÑŠI­žTaÒÿÄFò¦ÂJÔb/ÿM®S æÙÊç¹Ä ɳm=ÚËák1 T"±á5rt Páû}φ¥hÕóá2ÌMZËŸ3ŒÍŸhŸ"•Ú3ù:éüœ¦ñªþL¥ 43¿¾eï7E~ª, €hÒ$/E0úƒ,ÙU„‰ ôØà¯p™ÞÛ}û hŦ¢ZŽQ@ $ò½JÇŸ<=Ë9¬„Ò0Æx„J‹¬|Z/¢ÒšÆ²ÃÌï)Ö ®¥°þñ·Ö)°û[àr¨ØýИÊ9Ösªv:³ÛÖò2,Ò>)ž7Å—5KŽê–ƒËÓo¤ñÿlG!îÏ y©vœR¾Ï«úXeBYZ¯å§R—«ÀýªÞ£ü“x#ˆ&§èÀâSâOIæjª&&è7£ÔæÐtG…øœˆ•k Q¢Ô3^>­Ï í?o×Ë£É瞢‡3*—‘‡<¹¼Ök+~Ë|Ȇ_mW5Ä߇EÆ<úÅÅ)vi[²·Î#ðÙlféÏáÁË ækÕOD?|{f!0CåS“Ý#¨à"E­èÿÅ:(° ·bÜ’b|.æØ#‡¶ÎÝqn4Ÿgtõ”–dVåÃŽo"‹¼3úúYÄtã¸+ øMCSê1÷Ƕ@­%r„Sæö}Ëܱ%jýõû­H8»¬1uÿÝq€4jgJ´NG0oÏòÿjíëK§B"w5ê*³OÏQï»ð‡Ø:Ž°Í‹.‘8A‡îþtõñ+wéØPù¶›žÒ¨¯¯ÑFeeŸFGÚ•…|!¨ê¾Îèc”·j¼‚güº.ö–¸ˆ½°rñ/õki¦: ÿ•î.Bu-ÀâVÞÔl>ùPõ›\ÄAÔÏ£jEq1äÊ’—•ìÇTm78ù‚Š6éØ¿K‰ |!L¥ k“:ž2à­r÷`‹†Å]ÿæ¿G,g•^·_=Û,Î?‰h©Ÿeã lÊ‚¸ *ÒO+"Ïƹ¡iu*Ý,'c2˜A\ÏU‰dÊï`ºTÌžøn!¾noPgÁ×AuÙvdææªnP˜ôòëRvôg[ö/\¼ “„–tÀ«’ì•™[š÷Ðï£õ»äPßÌÈP­Å¡hG| ¶Ø,Òæ ‚óZoœ}fE7Jh'}×RÄÿ}ÖŸ5·¯Ó""¼®¥ÀóåSihªr%ux ã,Ê%ýª"®ýŽ\äï†În›~ú²1^« Q£“/@«òUôp¯-¢Â>Ž:+é”!RÓ7ÅŒ9;LïHÔuJV–Yõwm Å™"j î]þ! OvÃVª9ÿ]¡xkßé—òø UG„)\òPÿãf¥wœ¿mÒDÈœ2B«a‚¦,(Ãgý>%«Y‰þy3®°À/Êh8 ³ã=)?þCJÐÝ=û)¢-!G™í e¯ Öïyð-g‡¼_8nEóƒ ÜÁÛÚJì1J{ñ0™º•+úѶëöÍÞ€9ÍÜ çxóúämÃ3ØŽê) žTY­þ t¤7bªVÑ“ϳ/M£*ÿ8Y¹rn©dÅfŒrúñêÊ{ݯIb‚w ýèó5¢pÉ¿ñX=w<*éë÷aé[Õèeˆz ®û7½DÆ”ùå*¡ÁØ+²„+#Ù‚8•b7‚£çÆ 3ʯDÏŒ7ê.¬ÚÅd‚+ÂÛ–“Ç1’ÂϤGT8Ѭ±@!Áñv‡­´?ùìõØ–¤õÀÐ:Ë΃Dt ´ÄCŠïø³<ÿpqÔæH†Hs5ú#¨%‹K™ŠÇ]‡é‘L’º)@nßC(WŽÉÝœ8sv{jWÜ5‘&*µô6FälTbÜ’g\tÐA}!(ç÷µè[7@ÕfMâ6³‚ªè³Ý’`ùDÌOÖüð¿;y¾—ž¸P €ô{¤é—ãÕ"è!ø°Ìê+Òm¤?·æ¤Ijµô>¹¹”9²Ñó¢~—íò„Ð{Ýy'45™O”‰žÅy0‘‚€…»îÉOùÞªüøQÁ¿è¡=º¨D9A†—„BVȉaœéoò5KÄ7ÓÃMzÒŒfÎ9n)z Ä:žÄš½Cd$¼›r‘¡MøÎ]R"x@ ;šŽH¦"“£ý7C€ÑŠ3ös‹ÐFùvï¦A‚ܳ™£¼ÆÛ³Bß \:@ ŠlÔþÍ´s_˜™;•6D䥙 oHæ F¾É>À›’#¦*Þ¢Ñ.~ ¸×ªåñð·/eÇ+·ì6:‡þN- ¥pˆ½#"†ù ˆ$íþÒc¤ÃY ÕÙÒüt ¬{ׂWÿoÜãÒz†™ð‘ŒqÑ-VG•'öJ òÿnŠN‰AT:nÞü¾=$¥Ä‘Y#›½ƒ]ØÓïˆ)÷?khS2ça×F;9 O s‡¦2E­!)µ±üv}³Eèºö%‡¨#d!\ðíxÀ$x¢RGl _©›– çAŠ÷¬sÌ¡¿q¸>wë¡+[Ó(†h`qÄÛ9އ£As ªêÛ‚—SŽ}f.î™`mz°Ú… °ÝmÏÉÓÅ'¢ÆFöÖd48æÀ“miöü|b\ŒÛK•ºY½‰Íe 1RkЖ$‚ ŠÛÕË–7íâ)bC÷SB{”' aEèŮöQ½`1ÂFá}ǽZG&*7 w…WÏèwVOX˜rt?*Ìø9ìÄ™úw´îèÎÌ£tæî\ð)/8¨¸ãŸ%H#g*,Ný#ŠøZü®¦ Ûö0KåG[Ë1Œh“½+‚6 Ú@—5JŽÓv5ðÓÆj¨1й¤ÄI=º+dˆ.*1$k‘ Š»d±g–‹óçºCVà06¡ã‹Ïm?ÆÏ!°V™°Þp–4}¬([íŠ!ñrE¹Èö7uEGÛDTÞd€¬þ¹X0l$óòE Ì´ååÒÑõm"¯§iPÌ­2A¡“94<ú¿·¨¦¡Ò»áŒ*:x <(nÍÄ/ê1P3r®YG„sêÔ•ENµÏQÕùÄð£ÜúiÇ'Ôìvx¨’ûü–yÕìŹúj8b:… AzhéÝ`ò–ƒ°áXHë|{µDy³Uñ˜¬í&Ø–¶úUd¢Ù;_^z×¢½©‰ÂP»ÀÚ2Z/d ˜þWÑ3{¥&Ɉuá7ÒxµrÂ;:=Œ>{áy,\0|@íüö©À¿©Ž%³:pø>ª‘Ȥr¹òTÏF[ ÓÓâ‹æÐèw3œÝ·É<ÃÌuÜç^_"To—[ø{‚·µá?ŒþØô¢ÇʰàkY1ÂtÁ.WjB8ï( -M®ó¶8b\14pX¸|·ž4¢îTÕRšp>iu^×ÓúÖ™ðÚ³è¬V×’( ãÒ6båTJ`Ý?ç7ewÆéªˆ|‘pÒN&ΉØÐËõob*‚@ȉíÛEê$f 4MƒÅ¹Vò QY{ ×üÉ­ÿáÄ ÷·Î߯AÃÀDœkYë­Æ(Ç2¯ùÕžîaì–bCcÐS(®Ÿ2µ£çšœç¾9,IŽJÈBscI 9`ÂK8•÷'ÅóT¬µœ gv-»¢&çᛆ×(ãª{ÎF ÓÄÚª“žþUA\«/KWaÈsFkhÒêˆ#Aܲë_Žj£µŽ‰:ñ¿ç`þbàä´/†eå5“xV/࣊Íò&ôQʇã©B€eßê°ñDÄêQö$ÀRnâ(˜â•lï—œ|A£îÕÍžÿû‰øæKGr(ç›îª æ©¢øT¡“AóÅcËE{ŸRvÛ7™oÚ÷G&?q±5:-teri¶¥«4¶väþøSÂTÁc­" èKéY¢ÓéÄM ñÕ±‰@DL~egPwƒYT_=LÀ޶íxgBñÐ+û›è·Hsa•MÃ[£u$*>U ÛïÖj ÕCªe‹ŸhÕ½qpžÃÞUj—TëÌ~ÁìÂ9[· ¶ çùаí£È‡‚)ÓU,šJ—T–ŠÜ”ø@|°Y—£*;%ßeT‘; ´ÕdW­v8u¢T‚ V¾<¶Ý„‚€>Ç£ã“19žÄx?=¼xÏŠIPò?'òu×3WC®…¥kJ|¿ØãnBÈ‘ ”0Óžü÷FŸà2¢ªš«…HE©k‹¯õØ1Ós²‹S±JfÂ.È(l4#}­®ŸšÚEôøÔšÝh3¨îŸ,£ÓQ´Ä¼—˜‘4¼›I†OÇÀ}A×ÑYù“™Fíw»;Å®é m¾ ÒâéΆá ÕTb™êÖmo Þák†uüòœŒQ‹q<ËwUaJÔ1Q’¹IqõФ‡“Wžú':žÿ‡+Ù#-™G'%2&Âõ-aÚžae7¿P«ÉÚÁ—ÈúÓž·V¢@›ºqôÁaFç LþØnÄoØÒÍõ¢rÙù?½/–1€ïÔ«¿ÏyÆZg8¢*–2¨ 4½ñÙ…u깈›õ dýUz´Í½†ìi6œõvñÍýgðÍØ÷IÂk*°F6PÁV€‰}*ÿ&(.¦rh’¡·²8‘KÉìN8m)îÏÎ ÿ Bã³`ÞUoÇp‹²jeZ veb"ă¿P4µß˜!GÑGN^ïî°`è˜ú—:v9-}Kj¢âŒ£"·¬…ë×hXâ¾*S&|þx„7¼ŽZádiÉ•‘û|½Á¶)žçg†5³2ù¦ Ré šÜSÅ‹XGæåÁ,YK’ŒvNëg»n… èÍÒýÆõ²žß¼aâ©{¹Hñ?êà-ެšMžÿ5s†¼Ì%&¬äoù“ù1Åú"ƒ§ï|³£qÊ¿‰ЂMh3ï'Ë—dœL†j?³‹‡“þ´Q{…}÷Ћµ`ßyVp´õñß=Ô7vºåV’Ã$ f€1‘NÀL‘¹ÐùÑçðâšÇq›8'-—ÃúzCÁ6g¡OUa•Z€Yõ=(¹ Úåw,pJy‡¡$•‚¦I{ïÍÿ{íZ]ô´ÀæÍ“óZHÄo°e4ð$~TÁëPʃSѸ‚ËÐ[ŠsKΆX̶»Ým©þÝŠZíìc̬*ù9À=CVm!ÿÃñï¶—Wâd‡œÑT+ºI4CI¸ðržÞ°LM \>¬ v—âæ\GåÞôœ@ J2ʈftÀ?"üú*&BXRÓþåL»Ë€àWª`¼‡ã;k¢+š]W³=»N Ø嫘3F¬€Äßx/‚íÎðÄüg†Ü¤•²u{‹$ý´ëƒ´ÂÜ7îeÔ¯¥L^Xt•IÇ…0Ÿç‡¾–MVAúã à°FÆ$Al0ïjn fš •Þé§÷­Qó’Ðìñ1à¢H“Oêƒ@êq% ŒaÁ÷Ò¶Ñ¥)*È'|muø¾ÇbÒ)¹–[ˆzq¿Ýß$˜V …£¼l ¬G–ÿÅ) +áꉶ  Ç5ô¿èìq¸Có|…üÞ_ÅC€»=÷"¸`S”b–ígÉš1·xo3æþIâ­'ò?‡ ʳ£¯&ÛâdÊñÓÑÈw!L¥_î•ìf©³|®’S´²­­s˜÷$¡Ênìà]â5§¬>üÔЀ“²*_íVfjR²Pºƒ‚0žníÓ_ý3Wuhµ»CX5@ßòó·hƒ…èè‚»I)¸‘Ü" Ī»SnÙ **Ä`„>—‹'‹IÆ”!¦P-à‰{h «”¹µÞâ¦wÿv°K6¤ñúD4ßmRE« Î'ê5@/·cóâj¬2™dŠÄ}ÀÄäBûV6º¤©±ØÙœ9†mÏ…‚ö‹é‰Q…¸{âÀuQ]6ê¬)²hÃî8Ô»ØEÑ ½ÃTåç—ôZÎô÷ËèYõ*Qÿ]vý"w¤ÜiÊ‹¡ãI\ùaÒæ°Ï ítÌØ.þ=nFôM¦ñKMïdkQ­YŒ!¨r!o‹¯êò™qÜ~â­?¾Ïÿ}ô­E'" ÉZ›Ø«ûð5[MQÒpb½¦B·›¯µä…¬]P³?…‹®hZ²m‘ÉÉæ°™4•tí_qÿå8¬çm‹“ŨPz1w¿C>U'Í"Ý­âUë?Ð žþ7#WeªÕ iñòn}ndßÄ"IÐdF&~SØÐo$ÕŒ X/îÛa²sVYí~Īh]@Ëñ†Wîð"•š0Ô"ù)#=eÿz˜Â2žœ€Ý–¶^ÅV¾éî±)¾¢õ@«&\¶BxâMNrÄ&=ßô9J²†¹†µGä¤juÓΙ~ŒÊ%hˆë´SRœ YÇåAçîã[äoZJvµ[þ»Ø‘âNNÜæ‹‡pF#lóß‚ÀØ®Š}mî/ZjX~“WóG‘ö/d ŠÆ`j{ÄU4µdPú*Ó7Î^‚SNê¿ÜÛ¼œëõÆ ¯ÅNÝ£xâÄOÛ&[rME€<ã7åÒf ÍuŸÏ†ùæÀíB9ÍŠ¬G¼­v±ðÄ´"K‹¼@ BaCÏâåYæ§ýä³­w{Âa®U{_ñqÓ%5%"t­ÍdÞú¿?Hòqo÷ V¿ö:å´BFáúÛ{y„…4q¥‰·‡ŠBÒ16¾¯ßý”nÉ«¬òŠ€FAó¦‚ùà?¼=yt’][Ã5ºéÑÌZ2 RS3ԅ؈µaçÙ¨ý>Ã>¿»Ï?É÷¡ÁèŽûÐ;AÐáúõçÕ”\ËžöN$mz-º…”À,WÂí[PLø“”-uj®g/ÔLØ)Ÿ§¬žø‹ŠÇiZ8é]SÒÒ‰V¶“wøôáìÏãÔJ÷•n¯œ»ð8Ÿ“q hpƒwO”âÓm9ž/Gœ`€Îbn¿¡Íø[{áÓRm’ð˜3M¨ïüÚ?ƒŒC;³ŽëÃÜ“Ù@¬oòK×tò(ø»rùPëÈåR2¹›È¹ØU(§ÁÍ Åë§Ë{`Ƶ¬TÞÞó Ü T$w£Õ…pC&Œ?wbµV€ªkËX)¤1] e7-¤Ä–õ;2̾àJSr. 5ÿ,ûÇÖŸ±ˆ]½)‹X}¦x™qí~A¾“°] _²ý–#IvæŽQ{SoúÜPW³c›ÅØ0›æB³–¡(jP«»~µ˜‰ óLŽšsZ_wžþΑ!YR¯$T–n•¼¤Öwø‰„茱F"!Jð0+Hoß.PR"IUÔ NS‚¬·¦AW|[.ë?Q°d—œ¶¬œ:V/õkWqö '9—/™4ŸòYͱ½'cÌb½¢KW]e³E ·Té{‡=ioÃÜà¦$i©zw½Ã¶iîX¨Ïö_Àü.KzÊkÁ·7™É,p7ý}Æ&ÚB“…·2ÕR¦Ûš›”PôñÝpeÊ,Ýþ’¤Þ’x•õ·×Ù¢Éï3×¹dÖ¸À+ ;={åA¼–mçÈ<&Guû.ØPOAûfs.†Á2p”'t¢Î¬á‹W3ŒœZ¬ 8nòy‘ÔBãŃé"L{u„wÉ|¦9í2ÃNr¸mñgæ«£ÁÛÂWfÚùƒ+øJòuz$¤¢/Ts çîœp²Äõ±$ j™ýÝ~ Mï—pˆ°ÕÄ•©[G¶TÒöPí—93d.¨oóÓµ‹‚un‚±µ¾wʽÞNÄôŸ®¶vaííý:±<™íT›¡YÌY¨Q"ì s¡¬Æ/‰’`RwûcV’¯vs¸ïéq¢™ÿ:T¾ :‚ÑÃq*½ILˆ]Y‘äCY9gƒÀç]b)çD—%Á¤j‰Z—x0ŠÎKÀHçDÍ¢ì!B ©Cj}éÓÉWÏM>÷=4zÀ±O%¨yKŽEz1ÀÐ@ªpòkýlœ¸ldÛ]¼©ü\ÝæAɰ$né§]€j s–S4E¤„ºUc…lyQÓxg¬U¼­šN ¤[L¥y²©™tÜ.x=Þ)Ežƒ{Çú‘PªÓEv¢o 2u9X£h¾]„¨†æ„Õ×tÌÙb>ˆfxXoT¡]•£*Usª•h`QgÊÖ_œN;ÒQ0ûéR;±/﯒+/¶™`¯]tWe„6à†_Ü-½Q`‰è–\\ˆ@bZ}칆6®Ïr¼è¡É»ßT¨—)aò!Ú€gmõµÚðOqßZê»ÙàO}G@ ï÷‹5­šc~¹¿=—Â;ÆÏ \s;†žðÆÀðVbk×Zàá¯tÕªÓ_¦¦¥Ýpò †‘)7´ÛIL|”¯(±€Z ™(A‘Eù›´)\‹èѵ””zA}JT¡³áàðˆÏ¸WV.îV¯ix(ßGùèÙ"Ò,‹ë.M'_ŽÀ™‹·ì[®½Jõlöê;˜Y—^{ë ´ˆÕµÖ±³Íb8ýÓ½¾š# ¶÷ÈíG…=àõ’k^Úc–‘WóŸvmî5Ür1Óžx»x(uÔçy? Ñ?ÂÀï´2AÑ¥Ô-®=8£ïº½*64¶¯CRuÀ°{¦pЍ8P6®UB â¬’=MPºPl¹•‚<ÏezáüîKôÿ5¥rðž¸Ê>UK¡NÂH œÀÊ<- ×/ørÓ)à/Sn–Ï€:ìN#ãD×=&¤Î¯Ê…P鋤LŽ–R•LyV"¡½ 2&[J$Û ˜¾' q~æqt·Åðô„Ýov®¸fbÑ(PÊþ’˜ U nRòX,–ñ¢K9Œ‰Ë2">ž'2Å3tŒ 9èmë5XDœÐ¥uÌýuGÇØ›×åb5rOÐ84¹¿) ‡ŸÆŠHà \¤ÛM¶*ÄfWJI®`P[øJµ~vtŒe±“œ² 6µX tñIAKdå‹ì©?#YqЦSÏ qW[GÍÙ+kW š±+ëYʧƹ½›dôï§èPxŒ ,Œ؉ÖSX½«ªPFK4*j_Y€¨®¥bòLs§|¶/¢ë£ÍYhݘbºÝPF’îÒæ‰Œ$ÛŒÍc ÊæúM?6ò’'ñ·7éúN‰õ  å~ u‰—¯X9Fg6 ¶Òyý%ð¯iïEÏ”ÍÓo¹6»W±‰ˆWJw,ˆ‹˜{áÇÐÜ)kEs¡•Õ¾B…ì-~8°Ø(ðÙñ@q½X‘Ù½Dò¢¢…Ñß¹Þ5þ:82[vѬ¦á(Í—B¬¬ñÑ ë+cÊ×TÛf -ÆKÞãWmT¬€B9ÃJMË&ÅâZ`~‹Šæi W‡¤å#áņÅß¡“D&°®¢PaÇÁÁ³ÂÛ,ŒšÛ‰¥æÈ÷>õ¡X ,»V•ǧÕ7EÜžÌí©²úë.Ìv30‹cs‡cóAލêS·Ãç»pA Öa—ÒaOgBö(éf¯B–µuӚ͖UiýÞÑ`¢µí.a~ÕezIÏvÑô\Çzm¶6 Ã6€æêkÿ×NÕòkØ86^9jìˆÔ/$ wÛ¦ƒ ®n{ÑÈcô˜±3x!£œx€ÈR=~ýO°%¸Ý'‰x@±5ªéBŸö¢U¼SÕ Z ¶ìB©wƒŸ§Ÿ×‡k²½fb§ìCTËCœ`”Ì \e ¨ZO õã ÒùµÜÇvÅš5ßÈMá{T½¶Û«"Ïã>Îé¨áÌ7©c'qx™;ÿ`€gݶ}yŽæïõ›PØðв? 8¤B zï= ­2LEï(êR–:(Ï5f%@Kþg{Ù2„ý ´.å@zë"ÊÊxG³ìÆQ/îž3Œ N‰šÀ²~"æðâLÁÝg^j•ʳÍ|Dwã`¨:QŽé QÑ+Ù úÛÛ–³`t9ì4‘R¬§ö¶WLåkù¤[ðühS©Üä+ ÙB«ÈÈ™NálfA!«†Æi¹nņ­+c‹x:FZ±ZXÔ1Ú~$˜'ܰóHm‹Úîi'Ðã><ã|Ð …Â-µ€~уpU´7/¦8R¾©» 43Œò„yÍ àE³ú óI=—á~C!7Ïà·gt@ùf&Ã$øúä©e\(Ä/s,V /ŒˆÏ¯ZÌô`ôæ\#q¼ƒl2…Š §u¯‘PcFvÕ~{Ź¥ã;¶ýiÍ Ïø´,$ôM<˜=jÆ[ ":à¯>ñ4fK-¤Ùjx“¥^ˆQ.0Ÿï«HQ&Ü<„òàYt.²ðJ˘å{6;ùmta†}‹6yÏ5zl)y²¨zûlÐ {~ÙÊž¨ÎíþF¿3¹‡óÐLXùŽ=¥=ÕQ½ /©@™¼-~«‰%pn•Ú´¥«Ï––‡òÕPmÚts,—ggù€ìGU%³ì4›"Uº¢'ûȬˆtb¶K>×Ê—<õ¯Î›TÁÕ¾oÇÎl©[ŒJ.bH´{çäG+ÛCf±Ð™öòò"½â[øÙ¤äàW: °‹¾RM, ‘eˆ!ï\ÎhÊÈÇD¢¿•qÞ…;î‡ùÎ(G×5Ÿ_Ç&¹ûgï¬ÀþMuu<¢´˜N´g”¯úߨ„ó9—Í_À«á·äÀ„>ììƒPi'–rÇÔîâHsÌüJs/ßVÅgÉÄ¡'y¤T>qb?ä/tè²Ý;S£dϵÙhcR’‚8NÐ†Ñæ¶é»0Ø¢à9OŽór¾ Xõ4„”°Ä\yXaM  ¸<[–Ä-rñ”2ÈfÄgú³ÏõÈ÷쥻}Ô+Øê‡-¨!)˜z69úCß)»ÙðœæÙæ¯n­5À\_´ŸÙ?”ØçeÝQ»Î@¼“ ¢N¦)ÉvkU€¸ErEŽéWs®×`·WÅ+»¿¨òbL Š jS‚rÍGsXmÖä¾z+àá,ÈÛ¯ºz»äÓ ³ÛÈ(Ž]c‰öè–¯~DlÄËÅq&B¯Dg’BSD^ x-éÁg9õ Ã}Δêè|†J»ÐĽ­2; RëÃóC΢a5óÐàV²ØÄ”w!Ëã:fè'€Ñë;:(A4ŸÐ“¨õ–Ú¿ÆØ9;„yk¹šP]£æùqzuZa,»Û\YXD¦nó¿œe^,ŠÆ]’…(7ÑBqåQî)Õ5ÅÄ¡÷:Q›œWO3á¸"Š Ut- ÚfÂ8ò¬­<-\¦•j¨…mçïn)Îeö°‚lÄfài–«üÂi“i;ÿŒ•¶F2$Õ ÿé<¤Ó¤8_KÛ:µ[_» ì®ôY€ÆI­ Åß11;€2¼(@†e2’Ž]¾¾ZF“–BæÑjh˜(Ř9­¾)Ú-åÒ”b$CLÇø?Ÿtà\›y«~w&®iÕ2óì†Â¡Ÿè Öo¹©™ÌZº&#pµÿeƒö£§)* ‰7H²¼¦‹ç#h/µŽý+‚™‡Øäe‰.dX¤ÕL;Ò +W¹3í®©ØŒW(æ_OÅ" Ð8hÔÍqåô³¡5åGáÃk>ê- ¨k†ª@õOÓÖFDŠ ©žôÁ o?ÆHY-¥?zâdLmý Ò,ÓV§qtì jéˆïIXœâw¥úº% 8}$ÙD„D‡ W½U<Çê€ü05f¥Vk–ˉc,¥å*âÀÆ+iWùi"ý=Vƒ´¦™´ ¹æ ¡>OŒµ%J+Ÿ­‹ÿãS¾Á¯’a |ù›ÉþKý}™„7í<õä\ª´{ýSÖ‰e>ýøWY¿—ìl0xѵÆ0Ú‡´¾ǃþÞ2'h*€JÑ9š¥r¹5Þ§ bYËÏøFi(nËoSVÛd5ãƒQ¾—Å4†ýàöÛ¦ÆOœó`ꯣÃF´‘3§Ò‡mzF„4û™à-º DÏÙáâ• ‡ ÷ÈY•sÔ³3Žçõª`_‹ÓÁo­Ä~×úÈ›c[¼.žO†§Wê?Æ!Å ·SoSMKn0mýÅs”ÿ“>™/¯HÊwBü\õn+[¶ŸÒÕˆ2C°hÖ¤ ûvÎÕ.+u­È¤ŽØ4ó¦’pÅÞÛ8ïgù.“Œ&© z¥bÖöY¼sô÷4î"¡—ãjõF¡* •j!}[Dãåê ÜœŒhÉ×ú©zø¶*ì¥uºOV;¯)àÜb×<¶R’–¾ƒz²±aNîi-üip¹Ãª^É»†&/ ÷:–}‚> Ö$‡>QyΩø,Zuƒß„×?½Ë6¾ ÅÞ¯$g­Ñ­ù/ˆ),•ŠU×Ê9ïªøâ ‹ôzÎ\¡LˆCDõQóGV܃v¸HÎÁ/ ˜ÂÕÿjäù,ÈJÆÀ fuŽÁ¢¤ß¯YÀAE¶÷¯Í®Ø3lq€YU)^·Û"ʘ°Çê!øB^;fP'´I0›ÏÆûüìcV{ú[gQ¤3ßÀtyk90ò{¯Z–~´ãÛ`4»æÄÆÍb틪p¦\ÏÙò—ï©Î¶ö°6õÌ™S°Õ©â(PMEò‰.\jˆPtq[h ÿ@•=qäÓ¢ÜWµôDôj–4 êÕbÆ¿ù´b"…Z£Ívº×³9l"l—¬­Ï]”_V9¹ãV„U>µM~vÑY²ŽÑ>:4Pˆšª—˜8$ áJ—®‹1>Éý?c*,`ë¦ì Ù‰‘— ðégï:+¸éåu=Õ…°Hú>qÄ/Ý©D2bá¤Òm¯. ®ÓéÈü¾· Q11hžu¡Dü•‚ŒòH1½5±“5Ÿ¨t/·ª°§EÔfEÚ³¤#õ©XQk&¦·4Mp$^H­AO Ö½"Ç~3\÷Áó¼ „T m}>ëKá6h1f S».LT¨ÛÝŽZòsÜÀ1ûeÞ¡ñkë3Nûý$ÂP:鸤òò›a–HûíæG§‰vÕ@ÙÈ1 &Ì9s–ÀS`YF8;sÜôÀ7nß7Á"„úy¯§²-¿ü–§ÅÐO:¤º  SÌÊ™ŽÑE}>¹¡ÐIš¥ËÒneƇTR‡LÛà×7€O}ZÖ¶”£v‰É*“zh1çEì¿‘¢ÐÈžl…ÀžÕÌ ^µóÉŽ&”+U£±-rÎ]äù¬aÏò0Œõ>P¶7ó–Æ!ºÁ¼ø<oˆ´ÒÎUÄ^pBwªÎ¼Ù‘*Ût¬"ö𡆅 }hNÌ‚+Ò9ES‰D¨Ž—'[äX9£½úº”eÐ_æeQÛëRz44'»­ ÓÄ:нr—im‚ÿÔÖñÖ—å´©ŽË&ùWƒ¬°ù¦zìAÃ÷Û°os™Áq¢az6f}$…çê½Zš›g,­0ztœúWær:«HµÈñÅŠžL*4‚·/hìÔû°úŸH`CF\*B?O!Àv[ꙑãëhj~×à€Ô³íŽ~k¾Dä“û$¶„hîÙ©°«½× &Ŷé3Þ¹²9€k,5ap¿Êb")ÇŠ1VgˆT÷ˆ®h&δ˂¦£Ùã2‚`=|¿ãh þƒRû>И† üê „ƒÒ²¬Ÿ¬foe ~Bú’^bC­â‹³¸SE¶>å?ð–¥o௠ÞwK‡ô<,»ÿlØeTc,ÇÞ¾$ äBòÞ½SÐDߥðdœ'¨ ût{z ¨•«žÁî–…ÿµÙ§§p!è»ÄéÓ ˆcOë}‡b%šaÔXOi·6Η&:ïÜ•ã”*ÙüZ—ÌjŒG*9Ä>6öÇnr°ÚÜű íþËì¹›Z‡ZpB˜!……õ‚Ä\ë*§)Ÿ¥l.–òã?°º±ºÛ‰©kçf©€n‚.c…˜ò+ù^¿`Ú†Çßg—âbMhòþ`¥†ÒÒ}ÛÈfßxÕ¡i<²Dkõ—· ýü»†2ÊÜ|Í)é^ï€9D~Ìì´WÛt­î žð €#^ÜÒ㟱¥¡çÙ Ë{œ«ÄÃlQÒÏçÄiåËiT¹ ŽÚîZB|…v‰Ý袯íI¨µ^Æ`¬ê_ëÙÙé¼ÜÆ ºÊW|t¿€ÖfónÉAkvpÂC^asÞ©2óÒPœ}Kˆ=Ï€.NÅÅ{ªš‚n"ŽàHkç˜mW€ª-5_쎋M嚥ÞãLc/?ìŽSY«Ukðá­9à/´´éÜ‹p·óÄ…4/óçƒçÿ!ŽI¬ÑÂÜÕíܡƊݨd'¾A¬ˆç*ÔHÑ‚µQJá߯z¸6¤)‚[jn Fiy1Irÿ´,Áx5†ýikµ`ä 7µ%ÀNˆ¿œi¡Q¸ÓÜÌ\9ðFïË =ÒÆ‰ÝåßÞE”E%Ì:>J¿K0Æ`+² ã{Ž[—€1w.ö5}Æ)YQQÅ×X‰o»}1ݳHˆüPç¯}S*Ö²Fõ‡^ÊCÙŒzR ¨õ MósqCý½‹M õøÝ隟/}Å!MK›9>J÷[kIª~xqîw¯êP¹ô²ÕÙ2ëY^õ,M 9#Èœ{ê$àiÃÇ&ÀžÓˆ:´“ɇ²Óó:ÿг©7ÌÃý ÷»š8‘Ü_X2 _Ð8c),Áù+RzôÞÕ×꨼‘ð3©m"¡“ &‹4L÷(}56Q¯ÙŽ.Y: ûqY!˜ÁȇÊêí›È›ö šôUw^"Üœ’ƒa¸³“)ù±ÿÖ,ö÷ˆZ¾4€“ÁTì2Ffeó×à¹#n.ŠK«ç<çbÜšüg¤Rà ©ÜŠÉÑfÀñ„|<é¿/¯u›drrÏ£_Ø/TPÄ€jHpåLN±s.zžxÛÿ×9Dé†ýð._mâŠ1@uÀ¤• { ˆVA…ûâ[À)À¦Œ4"7.½f‡'œš2Ì[§O ÎàÑ¿þÊá†Ô§5Mróù‹…r£à0¬ùÝò|8wXŒK$'4:w*÷VHLQƒ(•€GJ2¯±EØ ìŸYf(²>E’ ÙÀQñøç³X<Ô.¡mÂùu J§s1Iâ—(êp/&`«53$€ëžùbiÅJ¤†æptÁsó’!“ÏS|P …¡,ófV¼ZT:ú…+€÷.ys€UÀõ‰§¬òV=+PZ‚„¸šîÔU›éžêøF™†¹ ʆB`JÐÙ0hÄD“q§‘•z8L;h¦ë'”0¾ˆÇEšÕʹ»FâŽÒÞ&·¾³„iwœxy¨4©'[ƒ Ûå=Úrÿ;¦¦ŽöXã‘DI5¤c:~o´ËÓiENPQùa§2žno dÒ‡|´ÞÝË ¡CÖÌbVÙêÒÄkpù£ëì±#ý©(_g3«SóK|ÀjÜô®\&~Çøä¸¤õçO×PM!6kýLŒ«œÏxÍùrè‹È¬òíÜ—dµøÊpJRɸüS1°á: í(ˆ°:üXâÌ2§2¨Eºr/(VsžÜ‹%JR!Mƒx  ž:_ÃíÒ‰´ºÀ¢6s0\±‹hׯŠ,ºÁKãš¡\xCEØh¦ÙV\2ÅìÐ1 N—ñËl#èkÆVG8óBxW6iB¼]*WݲiîüÜ*>3ÏÖ1;¿í,iÙ‚ éêÿÎbÛµ™±qR{÷ÕË<ãU£Ž;–Ø•­ YYó}±_wuCsyCfÎ5´9Ër«Õw̅׈'uø¦dåLàšº[Û$6ç ³lT˜Ü¤Ñ@†éÿsð‰ÈwiÄó2/>5ŸÓ¸þ‰ÄvÏŸý-š’mlB©óKÂi¸Ñ¡«w7?åV¡ÿ&-²+æ—Ô Ú>%ÈR˜ìefæG4QªÊä$YA’ÎþlÂгNZè–œÈSº:‘Ê÷C±ç-–g㆔@jçæ=wt@rG:…ñ æ£æ{SÅ)­Oá¥ô_YP¼×¿BÔ÷ëÞ}÷žT±Òü÷híò%yy¯½ÍÊ'3ó)¸¨üàÓl2ú—|?+•jœîé >b³û0»ù·Öáhb–íW³^åiò’?¢¿uu1cj˜<»µÉ›ÕÇRDæËÕÚsz ôPÅú„Øy3I±7îDAºš`©iù8·(c®J{äe[ü®†I@ ,©$vÐ@e8¸ŽúÆ2å4¯¯WÅ8Ñ0Ó™Ì,¥„ˆ4q~ç÷T.îáü¹f® =D¨îPJþt櫘(Ž$NÁ&mÖìä*dzEù\ÿ¤5Ú‹Ô¢9CQꂸ#‡yŸãBšRØ]8_h¶ ?ŒýxGB&ù­ú0˜<îx…ö½J2 õV$? þC¢íú´þ¯‹…~ ëåÒé¾î` ~9érQ¯ªq‘é DÑ·Áë^—þP £}]¬âê‹çî,€MCR$Ó¢ûyõ1WÿhËãibƒÏ÷QöŽ~| ¶Ìû1lšóÜ áv|j{,·¦ë’Ú¹ÞÓ¶jŒCX5–ÑRn”"^¹Ù°/‘‘£˜´[Zðàý¨`ˆ0y¡ÞБÄkº’$·xR¡³šœÃçgY ËTì×ÖDœ-©ï£o§¤Y¹=1šDh©p2Bݾ-‹5»Áµ‚b«à+-Z Ezâ¾ÅÛ«´ãIÖyìË30(ýE…] Mz_Å~û[cea6f²íà’+.£ª&@Ž;u ¸ ùCV!êêaŸõx k“ï9½©ÿºÏ5ËEȶº0!7A¥ûüZ—ÁjîX ß“MrGeÎnÚ3¬Û/¼ÎÙÝaÂVÁ{,,Þ¨MÇ}‹ ç]µ ¸Î¨ÈZ$½ÖD-ø%2Šù!Ñ÷¥ögEÓ·² ¾áJ½Ù_0 øô<<Ý¢³&˜‚µí êôSG½Ã7:˦”± ‘±…Áæù0Ä“LóQß­A;ø3{£c´EFÀZ-•àŒóáÜT¼êIWçÐD%®QZÐöFâº$­1˜/t/®Í;V!\ã¾¾«ôB6Eø}S§ò{ñ®¬Eä«,iÀvZ9%Øî.>%ÉÿÙ^×Y+3¾ù¤{óX$¼]L5îJóÏ—üÉŸ)Æ4#”ßY^{ü³ia'öøô2îúÞSq¿^6ù¿[e;–íˆFƒêÑ#¿p6dHÛg˜|!ÜEý–`ÿZõÍ)òD_.ôNHsP+óÐuVè6ÚdÄrÛŽ¯ÕÏà%ÏÃI²æq€Åï30‰˜¾Æ"t{©áÎLãØÏxâP”)NDÇ–^®ÇW²s¥¥*›u¨.€Õy´ôÿ¹×ªŸØãœž£[‹Yÿ†Zeu’él| ›E‹á­§^ŠÐÃz¦¨¼3TD¡¶‹¦ÆÑ{RˆÏÁü%ÆfDRâð!ËÙ0ÉÍDTX*~öó  ÁÕy"a´OŸ¶^AÓh¶ Ëu’ïUŠ-ÛÄé:ÑM³ã3þš)v0ósßçIS‘²Ô{oÀtŠíez^Ú×Ö%ÑREò§Ë18æ3AZ6kŒN/í˜ö‚wÒ‰¿-9 ¶²´/‡ö‹«a›?‹×-û[&(¹¦œ>]`“AÔq-!Å0º;ÉV1~©3‘Äq”’ð0+.éü ºB±³€0Ô˜q¨—=ÂÚ›½µê X‹íî‚N4¿R›<Æ ¦Þ×k lÝ ;—üñ•è˜Ç¹Ò£vþ¿îÉ [•+ã“Ù!áMÀV3vØá'ðyë% ©Â Vg€þ;ÏKr…yr0UN¬*nžØ=j._äXÐM"Œa…‹Š|É€óX‘ÿUÙaݲ G3PÒñ7pç¬ï'ÈãÍ;9Ô‘JÇ¿á[*q’žü‰ckÖøßÎ îãw­“þxa0ÓYOÌÙà²LªêéúÄÕ9Ù…u`ô ªJšÒ½B¯9NW^–î…öëa½wÜÌJPž¶= WsœÊ\Äçóµ€g ^%u® y{wNu4ªTäªÓë¸]®s¶œÂí4a…k~#²äs3CfŸSö?^dª)3¨Ë{ [– á7èØ¡T2=bC3ÀÜ\QFJïã ºœû©Cxp© µ=sÄdÇngóFOÇì¼ÖÛ-ÂÛzô@Æí=k¯Ùz Ý›CôUµOù¦¤ÍŠ=!÷0@ŠPí×nMúϘtŸÐýÀR¡ã~²½ÁÍé|¢m3iɵµ#ÿ„¬ῼyö|Ó½%*™ùPHÕØr @yºIÜ Ó³:÷–vOI.ÅõKùYÔ~·°¨ßÄ¡²2½köm Õ×çŸ4j"¤w½@:¨5ú0‡’@(rapŽÜƒWŠSdÂOõ5y‡ÈïSšõ@ ¸!µjƒîLêè 4Ž2_6,Sô—VYh¹DQ×î6ÂL^³Ö£ª^¸~ó#Ö3Ø^âÇ`óHgÒÅ—ü¼©”Ûì6 u¥³úÊMŠ!›1§:¬ï©øÄÜÀg+¸Ê_jçkº!~ú–µ´ó.ÑvócÐDÞ7ð9nŽé¹ŽKõ.%Osç"|:Ð"\%·‘Oì1(I®Îzåï«0˜mþôÌ/¬t•Ižœ5?—ýí^/~èÔÅàÒþYŸ¦3…±áb¡?ÚIk¬Ttèãœ'báCFt&øÍ>ÐÒ”ªòa1BšÿV*Ý:æx–ƒu.Áº#óC!ÓÀ;lŒ>õM­šñÒÅÒ[ÇØ`Ø2•wyjÍjöÙX†%®tw{'7ãEn¶¾HYYÂ݆l]N;„A·eøô*0T¦/—ÎiÔ€†|Ó/IjîI¾Ø­cצ?OIÛÿ`÷ãógühTc/Ÿ}i5ú¶±?¨@ý&ög/ Â‘˜¡¦zѸdbhúxœñVhû'ü’‰:aó}RÈÀÜõEœ0NÞ@¼.nÛ}uå´å¼½¶Q‘¼0ƒj#±ÛÓ £÷èQø« N¹—š¸%¦¿†¯Ò¸Q•'t¿SúþwÓq¢Ï§ªkˆtë95ºu¢•›Èq½t—ñ)8@IkË1È$—³í}‡Û×7À¹Òó£yK>2AǸU4ù¯…’ía™ð³/iHVÁ ÎZ˜ÆÕÑEÖ~•$ ~ª–®xWûÞs`Ô»)^>fM6¢LÈd[΃Êlë·@SÝ9ï¬'ë%¢A ¡*5 íö¯$D1^¶›V,MwŽò4ÎK¥++Ü¥£WÝ™r<.‚“u#ýi6òWº=ŸÅEûBšl º3¹ûû—¯³pËs‘xõÌ]5VÊYc8Dy=×;Ó1°½B˜‰,:˜`?Œ,~ì£[ýM\ÖºÌ6H΀™„¿«w–I¨Hi,K/†1™±§­.¤{Û 4óxÇÔ¸ 5CÉ%c¦Px‚s1šó:ÿΧ•Cgì•Û7óÇ ³P]>)ÒS6Ù+f0~EïÐmÖ–í•‘ç?]b¬xh<§©Ô÷vö𲦿Ôs•Ú’­» §92;Û:ÁÈÓNŽËüsOÊÌhôíl©ýGÙ›Cj9Ql;#P»iæ©rȶŒHDñ=’îæ“ÐØ]ØðyÓ;ÓYXa'J^gžå›R‘¿¸¸ú}e MüQaVfK}ücü]¾4=µ?án>¥¦ö|`2æþý±¿él€…ù ¿–քı¨ü ¦™G%¦ãzQ#ŽåÇ®0'le‹…»Ï¬Ù²[~iz°´.NMž¼˜ 8Cy×ÒˆæK•¬0…ZL`";x)(¤ ,dç¯5æúKóá#ÞwÕ묥9¹ÇçÍyy&­…"¬Ø2ÁŠˆÁŸ6x±3ÊáêRbt' <d›.茨ݛ|ø9†oMV‡7êk²‘™Uн ðAG¦@S•h©xTô‘¿x (ÑžŠøëøD®E:™üDïO}–Í ÿ}Ç^z¬®¡Y®®d^‡?Èj›5#úDÞà&Q•Óê3{é’.àL  •–ûï©h N÷kMÊÑÐÁÒè.aíŒå>WÝ g#+¦â²§Fo8&ýÜ&…ZëDqZC( ß †SŠãhîå~ÞeF¶2&×Gƒœ÷²~§l¡{x~s˜…ÕtE^L`/‡‹Ás´«ÀúÆ:8fZ’ÇÛQ÷  Y†Ïî|Ue` Ñ'«Âý_å!ñóPƒÈ¿Z†0Ö¿¬#Š«Ç?^y´™ÔQþnø70†#?К÷Årr;Ü[½  hî[ã›Ëêfÿ²ÝiàÑÁî†ÛZƒÓ}:gcç¸nKƒ–\¹êÊZÄfÚ#+nŽÊ¸#~?Æ1nèºþ+_¹½vså£ñº*&€-¬‰; b zš’>ìC/ÇÓ½Fù—ÃÙR»~³yNöyéXÕíÉJÉ}\ÞçhJì'…¹A_‰Ó*KÀñʸ®‹«vy™[$»–¸8TxTºÜ¼Õ8µ<¼RrãムQf“%P‡ºæÖÂRö ¦ÍÉHní·ÏÛ³4“ÀÇí‡ †KIqðÍÿÓ©éh&¡×F+‰¼àÄ6Mü¼£Ì€ u,åk¾‡J}(”Ò“5AFXß âÔÂ5rgIá&ùUÇÞ{'°¯±k…ï{¸NiåTày(¯S(+±0ý4+”ªÏò°ö{oÌAHXÚGÙÄùZãêÿϪDI&âš¿2]™â_! Ï1ËÚþx; µŽ1‘¿gúûî<šº†YòMû¡Ÿ!zŠUa„–K"ºìHµÐa­öi’£@–ütf E[-`¦%³Ð£~Ý—äî,òIÆbsõ›€ã ޽«ÙÁµž53hÒâòt¥âz(ÆÞ¥¨êM]!ä"Z0æв+–‚øqP~M" „™9 FŽêk£Õ¦ ™ð xHO™Xéý¤˜k|Z&: Q¨ 5b ì´j•ïÙ·°ýÏáÁ:œÔƒ'oç£5Í,z9¨Ù•¶ó2€Ý‹’æ\ê͸u]U“×bàûâ{ͰÆ,Ã5R5B„Smé°‚ ŒaÏ4~Úhý°†P¢AôT:C=&ŠV,€£>8Â’™Ù?‹ÁËeaŠf‰nãºç:¸ËaˆÂÙ³½ÝÞv¶»ÕÖKqUu#!¯–û4˜Ãô†FŠ‰Ã¥';–¦Ö’.™GÀÙY·$¯âä~N‹"îű.aÃMßÎÎÜSúv¶:)RŽ¡p¡ØÓDË‚}“Êq©¸Î}®K>+šTŒþ>Rê&y*>>Ùá*F¼Ï6¯}ˆê ‡÷¡ç¦® Ð,I÷¤®#ŽAóTM·NHI«â¿»ðÀ #^Q½·³’SÐ9NÊî$¼oQŽçÝÆVT·Á™›4iè€)„Jõçáêséå¡UžrøãmÅŠFÔ(¸¬–N?¯àv¨ë¶Í.Æ®>œÂ¤ú…Zq_Á Í`¶Û»T«¯$Íj!%§ã!º£‹ç~MpûƒÞ¾J‹|í¤‡ðÇëÿ¤á³s! VÛœâãÿ~q̶þ²I õm´ šØ‡|x ¥¸(7| Y– ¡\®¡á ¢ÆèÏܳ{t׿`™zÔÆé¡và6Q—"MJÐÂüv^ƾ+cS3£g ¹JFáq$¯»:ã°RÉù÷¡pæ¦AÞ™à kD-1›;0[4‡ S#¢æl¾3a;ý¨êT¡säéSu¬üŤôà÷y’{Ù€¦cLª,KG€œ× EKè]÷åŽLÚcèyµtÒÑÓí@¿{¢ï#š·ñ€*]I]¦SÅÛZÀÖ¡àà¼þ8EMîÉo´6O6:§0Äeª·„Å-w†Xõô‘°îë÷|טQ˜±Îë]);ÄÃcuß`#g IwüÞþ7ýc ††Ûg»VÓnzŧÀéÝL~™bj¸?…Γžv‚ý¯@™9•^´Ó¤ve‘ZÒkªæ]ãO„w”àͱ!ËBþ ß‚ŽÁøbžéH:- Ïò–ç®cál,;ÚÑ5³V ¿õ£ƒIËïíæFI¼0\¶r@:7ãéèjè^)ä”rÚ¼b©ÌH nÜÁO¡}ÉœpsÕL›¸éòz uƒã0¬w›] `²“³0ÙZð;hÓä”ÈìZ8)ÄüèíЬså|ðï"µ…‰Bô¨Múñ?çM·1ˆÙû|x!uÊ>:_©âÑË: C«Ô§KþPùXû~¦s¹<¸$¸¤ÝIç3»žq æXù´€öéœIϦh]­C÷í°ŽÁþU0j2þÄ€u½»¥AáÎy‹‰»s]Ṛõƒ…*O³L›ÛJôιÝTí(…6Í&ö Ý£@„dðz¥B¼7O̕޳0ˆÓ©?%°*-›BÛ¬¾.æBb[]ôü¡¨`X¯F¤Ë™e˜B+ûµø+¡r|b/ÆA‡ÔóQÛJœo`ô™t·%¸X×¼·ÿžì¶„ˆ.OØÄç ÿ œdPî¯zká$XÖÚÓÖ5L¿æ ÖÓÙ¯å+ž‡Ç’IÀ8ÔÍL0ÿkx÷púBÆ3²µ¹Ûnau³‹#ÓªïÓë@íÒ¨ÿV—é䓨˜‚ø!kZ)—ç·¦MïÀ¨ˆP·à_2½*ŒuÜ\óaÿ=ö›=\,kÒð´ÏE¦ÓÎX«Ä³\ ¢HÝý~« jÏ}‰ 5u¿-G/ÑJ¢®²Å†þV¦N, x·ú±We¤/œË‘'KÞ¯ÿ.J—cѱj@Õžy:šÚð¯÷áÕ«'!S$Qô½”ˆ-g‹¢¾Ñ84ïÐ>†S»ïÇ0•u ‰¤¶t:A%?É \¯ ŸAÃ;-Æi/”Å:Ìâq5è`©Dø‚ÌÊöñKÑgòDP^Å¢HM>“¤úY]ùz"áZÕ¶ÄàåZÝmÓLäÊ@ï4ŸüÍA.P6ž~Y¯ ‚åüè¾E0 4ÓÃ6‚ᨽ¡ ‡ö¿¨:—¬þÕM–q±p:‰lø#}Ž€—™"óòÃó —?I ÿrÆá t-WšÚŒ<2?ð©®ÁÞ ÷úÉWLfn²’¸ü$N¬ýõðúh' ïZO†›ZÃÀ1»ÜDO´ÊåâÈeºô><@³ jÞ% äPF§fo `³•éÒðJ›u廨7¦ v°® ÅŒ+lu-¨íš9F—0ª1‚!pjÐÝQ0„¹.jiV4 èW")’J“Åeµ,§a¢& PhhEÊCÉ·l´Ÿ]7÷é닌;7®¼D–ŸXùѵªÝ'NòÛÝ(%ÖiEo¤.k>•ðŽRÁ—F£Kê·EI1¿måÒD¼¾Ï¶u5EyÿË[zÏÓó¤CŠýü‘ÀøÜSÓ áž§ ±I›Céâ©s C¬¬7 /¦{5¿ØD”ºƒÕoöÙJLQì&Žé,ËçÇåU*Ãë_‰é6É2Û®j‡Ò7ÜØ@ˆ*t¡¿S™¾%V‰ÁE‰ó¨âl‡b/”)Û¦^À,â²,ÿ鲪[YìIB%¢íÃ$]`yÃä`‚,,Óù%iÏjñ"DÈ^è…"…¸|€¡WÛÝÊ©ìp1å _ŠñõZ "W ®x­©½Ó8Ï{²þ=3‡¸6üØ¿ˆó†27º~ ’$dV™‡dç!P¨ ‚¯>Ú yáêÄ,Ïq›ˆJ‹wî’"(¾˜1D7quÍ‹Ítne¸8_ŽVp…Ð4UjðÒm;W9Li–'Š™E+”΀!‘œ6ßÉ«ü쾊Ii†Lù ¤Ä—¢ºÜFŠ §JzJ$ØÙÚH»[áïbÝÁëÒó»x8€¢7×ù¬J05¼”`9Q¡Ä›[ÿ¦W{Yâ+Þqª®N})V]p1‹žÙÐï^é*Ìþ|¬ƒ"y¶3)ñÔ1È2vNx¥'HB°Í¬ÚæR?ˆ)Ï+ÒzûNü¶REúô¨(%]¢È£ïYzá,ÒÐ|Èç%úlã`q 3!±^ß'c¾DÔYhæ'ë×,ƒÖåŽBVöã·C-ÿ¡A U5Â/úxûòVÝ»3½Bû ±Î!*¦™­-S¯ˆ ƒôøR Þ±ÁÏ5Á²®å9ü¢>Âý;i#R{švú–»¼i¦sÄ"—a1x- ÖçïD£l¼-½T€°Nl‘Ád–›.»WP Åy™ùfÁ؇+Ý>úUvÍvD­Wƒ£³) Ð!=Åêó1=εDÛ®}¢ÕhÑ©‡ï…ϱè(^°Çš=2Z!êÉü”3†Ã ûÑÂLñùжCFÐËLsëYg¡¼2’²Aa&’{w¿ÿŸŸ`UË/ž¨Î=³B_=/oü©ü<Š× xø8‰Ã:°]šàõ{Òã’ýóûÐAÛ×ø w J\RñÌGëθ.ÕÐ{,©a`Ÿa^ä& d×°$õÅp.¸Í(¾¿˜·MÒÆøK:Ç v~ÊÍï'l;nH><ÝýÂôVïPÐJ4Ù,°jjî:ƒõÿ¿.³V˜Rª(îí‡i‘®—XÊ \¶¿|q ‘S\:ä$XÈk»Íº¾múc @§xŽÌPÊw`â:@׎¯û3,KµQkþ%ºj¯"@÷Á(è¡”9…àð›(kÔŠî©4W…&µ,,(ü2ÿr ò5+ î!p+h3±5?¾zéû7ç Q÷ Ý dŠD¦É¾é[³{)§ä¿:f|Hšh<›Œ\¯RK±œé¬b{0¯Œž@Ktž™=<%H7¸¿-¸”aÀô;*cƒ/YrBUÏug˜œ˜³t ÜqR?¹Ây¡¢Ÿ‚~Æ,e‰5 p»#$»HX—>ý}X܇CÈ™,œ$är(`íºû÷CŸ$‰iÚý›‹±Ï–°£¢×ÐáM¡­æûoåNØrZ@oiþÖë ã HG C½eÀŸOÒ¨Ëa2ÿ³)ÕÍ4J~4úl€°î<¦+7ßµ¼…A±€‡³-ûeÅI¨ŒK¿F¢Gj'I—AZÄ«‡ÙŸ2×ÚÞz-çvþ¶+†ª`iv@DP„~¡¯ œGÐU cKK×(=f×ÑîäÓ£ò¬ƒ÷‘ü_v .ás3ÄPÃçY a’\®?(‚’Iö<°Ãq›P}¬ðžpã‚>”vs¥EÃ4K%¦Â ûee’áe~?Bª"+ Øüú­Ï1z±,A‹¹v"E†ÚRí(5N'ó)ÎzëŸHÛ*ן-kèJaº•­›‚U=£!üŸÇ¸+=ØÆA*×g|±"ñ‹Pº.Ŧö2—óúøëS(½°» 4÷%rÁ=!½›³‹²¬­QÆ™‚Kc®ÊïñPÇÙ·C†.à`<71ÆÈmº'‘ZŸ¼m&è×±›ã¯Ù¤®ãçp6û©ÐžÌ›k*äQ3°«F„|§³:§óEçêg=)bÜ_ð•;‹hÅKBNjçþ Ô©UÑÇ{ÿi:°¹R*“þÙÙ^ã”’…ŒÆ¢oˆ£Ì`¢q ¶¦çqˆ¾ò'µº% %ì¦Lé~V¿ùé2ûÑlر"Q‰w ÑAH„Ä Ã1' ° ]”ÇhÞåÿì“|+6®—>öäÕ±¯.I6”ÖÆ¡WŸ€Ù¬îGíRû{„÷SóG¸ÝM(SÒät¡@ŒÔ¾kÓiŠ?^ñ'yî7W@â§…íÁ~ý\bL6ý2ñÌZ‘on DkóW íRCÜçÑ C¯íÂl(yÐwh¬™U—ºåÌBÂ52ú!©Qˆ€>1ÇBáÊ=e“âÄÕ€h €rþ]÷ßTJc}q»´Ayï}G-#ºEs〠:Ëœ ê£ÕÕS-–à>2åÇ´¼zó·÷[D/žQ¹5 Ÿ.XòHø[¶è“çê)9F8¡$.‰žn_`¯9WÓFõ“¤æCM·c£Ym&Ž.]@X¢¢/}'ËдÛÕƒ%æLú€ßHÀèßa™ÓÏIØgIx"ƒÒD¸ê~[­xd‘ÓÒr5â^“‹pzºÙNôR˜§;%K%ù#:=ÖW>¹·®¥¯S I×ëaŽ$[ð†#R,19m? ‚¡Žtj$„«çt¹e>{­i+¢«(ÙÖ œj®GÙg󎬕T‚àfBØïh…×M"ß$óàE7äý] êdKŒdeµâÑY£Hi_JÈOßÖŸz9n¡qž["èqRÝ-ñƒ[Ìv.t¹ÛRXJÿÕU#BTN¡‚Äv/­1ãL«ôŠûŽÂ?!™Á«šço_+ËŸÀͦö/ê‹‹1…a²ú_|5ù'Í)ŸVMs¥aØ{|JíâT½|FçöƒÂb渊6FÈ.›xÉXesÝ¡¦Æ„â_˜Ð=Cµƒ«æbÖbHv×ë!ùeÑŽ®ƒ±h§‹ˆ§ëF% W½HèŒy+H}±Æ=m¯ 84Õá‰AÜ!½9ƒôºº—Z¶Ò&…Z'Y¶ô6B™‹¨Û3Øñ6~\X݇úy‡¾8 L7­Ì8eih.'´¨Ø8zcz¨¤Û«^Áæèk逡БÈ܆V–„_'6; Ùö~M¢>ÌÕ"~pâtfÛ×d…vcwœí7‰"£2W6iO çV¾çGtíF¹“`Š÷è ÎpÁM™¾Äó;kàoæ~’^„)ã)ÇÔŸk5(ŒL± ,Íç{ÿípÒp憉ÿÛ›oŸ?ª9gE:0@ßî8„LˆæC¾k륵/¿É¢Bü¥?ÃÀJe#Å®Ý.äÜÎÌ2â“£óYý-[¡èì²”±ê®§ü‘ÅìÞ³A"‹}k ¡àsàÆçj&ù­=XPÇEäö° Wyïýr^ýYŇÐDÖTš/d®™çº¼èGjôPµO³~å¯N¦Ò%9z¿6…|D§2¬5 õ—\ mIxˆì(¨ùNÈž‘5ê 6µ„“ì&ÀëÁT™*ß;¸äÅxI÷(ÀDï òd@†¤f{Áa˜k×ÔMe¤±äÿ¡ÖRjwŒ-a8P°„ Ç/6Ù‘XžW€òÓìçÄ®ö`ðZó¤ãƒ„˜6âÕIVç$Ÿ÷ío6è“y€¶ LMÞóÕ««?¼ˆÊÁ™ÜÜ‚}ó1ëöœöþùKq!e¶@lCvHýta€~ì Á¦ºƒVÓ†±fö1ÊX󏨶¾Ot3YöÂ!׫޷óîèú4*ý9f«üäžÅÖŒß&´$×ö ­jüõ%og‰;=?2ua%œrl›ù§rÌÛk¢áN7ƒ@ò†®­ Ãú!•Á /4žB˜•®ÿÞ…¯yE”`u²Ç¦7êFÏólQç Å9· îÖ›8­YìIЮ¡ ,ýqWœ,’­Å˜ã=.¸0 :tÆe¾&0ƒpy’;øÙƒåâ3ècû¦vE&©ÕM[èÜɬÈî,ÚJè'#e­’ì+8»Ï ¥“ÈàšFJçjó§ë.ÍÜõÁUØ •VÉQ¬Ýг^ ÿÉ Ò‹öOÂÔ®¦ru ?¨*Öð?ʱ¾•(µÓ¹;Ûu¢¸€GáŒöÐ]s\aÓõ8ÔΜÚÓTêçì쇜(»©°tlMt^ ³ºÕÙZúèB¢iQòç¥ögÁ执šk‡$ï'D¡,¨Ü+ÔÆ—ÕV1¦7F07Gs€"4Àâ& _JãAu²'jøO®&4ÞŸr†P Ⓡ˜’6…Ùž„U÷ ¹­0¦Òa7“gýï:ECüƒBà^OÙ â ¾‚,?†¯Œ@Ç,‹àó8`qÀz—ó ÒüM9OA7¨~ð4|ù°ÛÕž9×i5"o|KU‰»j•¬#Ïùâ,¿>Ãd<‰•†g«, è'9§ðÏÊÁèŽDÌÛ[ 7pö ˆg± µ9H˜fåOÞ6ŒåtlÑ9óÇ»qnÚ<´ëøR‹}×d)G†½c²Ï`½È®¨Hª,%»Ïæ,ŠpB†"X\ûB¯PR nÑg°Ê ÑºoátA[DÏJ=är)46L ÀáèÎÔÅ«œ—ú£vÕâößT²F Õp7ÚDZ؃€’›MîÂþüËDNFœtÒè@p Û» –8¢Ø%;ÒwƒC«ç‡jUꈗÛH¢R”ÈÒ¾‚!…¹¾ÈŒÿU‹ÒÅJ‰¯À¨jG.]a-ÆrD û_ã4BÀvH|4ty§úÀ•#˜—T¦/Yª?ÊcwNïZdô|²Ex€ªáÓɯ€ôÀ¾Þøh”Ørq* Û‚R8–“@âán·¬£JŠ ÏeM®óÁo6O»­°x (@ƒúÙ>œãX‰¿áöw´Vxº´ñ•Wn Øv„CžN— j0zÐ8(‹íÜ@á†áèfðȲx8eÉ T‹¶, .¡+ä ™žÄÛå<ïh`h 2N"Ñ A"âÃ7ÖÚsS¡eÜõQf®qá”ìö?ì|8¿¡0ì6Ú?©üÃ@èN ·tÃ`Zfùæ6n±fJêTwÃÔ®møüÎlî!‡¡3 ž%ŸÎõuÛÎ*l.Ô‘Ú–àŠD$Ž&Z®ÛœˆqoâÛHÎÈQÀôªi IJa]X™ÍQ}UŠi¥4]1ält\H9ôíD‰C˜ÛM#ÉŸù¤OñRö`ÊûËp=Ü«öï/¥EªÊ¾m»8Dya{ÃÏ’s'+â‡p÷ö4% 5,ˆPÃzr¤+OKˆó³¢0fT[!;}eú«›6Ü¢·Ecí– §­ÑLÑ™ª’µh¨é½Î %‚ˆn_ÊÌc‚âx@yb¿ œÊOØð} 41Þ€ÎÜν-ËHcüX©ãhíx¥-T3{éà³ÜxŽŽO »¤båÛì¨Û:n§òCĺ¨æ?ÏqÓõ¯M}JiYA}ZÏv* Á¾»Y1ºÒ £Ä¿¼w«=¹É@‘kyƒ)Þ—¡ kýšÂXÇZâۜŠuùœu²¹óv,H¤ V"õ^؃4#/Ÿkõ)¯Ó\M=JE,Ý9F³íê Ý}àbÌŒ¢s4=‰v¥{0šFQDˆôÁ ©þ[˜LË â›õº©›X+VÚj°B¬ÑWÛÀ-õž5»zÃäTyn„z~ÙE6+Nèy¯V%èDix4´¸ä²Æ ²»§*"¨’—0spwß›ÁSrª@»IøG:À2 {oVÜçú"ÎM¢è2ƒàO9ST?þ±X׿„UjójL=v§Ö<±CLøª3`àÀ<Òhs}œètÙâ$rRÖÓGfGŒA×Üw̸Ǒ}ЏòÄ-ÿMÀµ`~çK+‘lõhò6H›­Fy®SJc]q2ËÀ]¹Wª_ dãÜhÐ)¯‚)Äì[´éSˆDÊ;Ñ÷BýDæq£¬E¨‰J°Lë7 ÿ:hƒi Q¡ ˆ€‹UabÀ_AÑý=D÷Ÿ4Að1‹õ%$’KÑQЦ3²(„¹O ùrë+g+a5É»ØÏ%Ò;Ï^–ÓXN‘a›u¾1ˆÀr‰0¤ËÌÓøÃ¹ÊßÅB&u¢7/h Ñá‰! (§6qãŽzOiÚaeÁx¬Ÿ¢‚W£h/äÜ`bÍíß·1®XGÚ\{}ÂG=„3…£FŸ†TÍ×AÜô»Ñ=Û ÖÑê}$g`ÕÏïi‹{.N|9ýH9¼GËÞ)×½w(¼?;CrN7¡¶b=àºrmèë¥þ–Ìò¹*™)'z#—’!x ÎÅ521¤Û¤‚WßM—ùŒ‘—zÝ”XèE3MÞz‚äNK ‚SAÚ½[·:òy£c6ԞǟÓê™'.‰Eû\íòд§§…D«ÂS€á”ß%”sªßO™Sn&‡ûŠnvB{7`qómšÎrÛ¹Y,¥`|ªµ1eðƒEN}£¢˜^j]Ïï ÜL¼w¾\4pPIöl÷A_J£Ñs9´%K‰.}5«¦±>o:Úg.åÔë‚ÔcËžvQ*GKpq ×ê磹DÁgÎaÛþ"â=V:\dÉ/½œ_6R¢è–³÷²RÅãú¸™©øÎÑ|rYƒ0úe@Z”ý)@ë;úØáâ6¦FÚ *¼½`ýX3æÐ)Äך‹³p4ÌϡܞmW.P‰aBϤ ~rD©½Á¿$çœZÑY³-J§}‚[v<œzÑWùòb¡7hšÂÁ‘Ñ>HïÕÌ’¤z:0{v.›œ²ykš°$DÎ$T-Ó ´“6Oá„_Kà»Q̆P‘\h ¸ÂƒÓú˜Ö0œ·C§¦N+8áâ^úXÒ¹ ÌT®Bž–—>cpbÞ. {¨#ˆM!Ì¥™qëÿ2ÑJð´º@pÒÜ7$ðL4ÅïÏÈUäÄ}â{0Ö™(2Ó˜™Ø0ÐàÖ–ö!´ð$y°ñ~ø;.Š\n3aš" ®†‚nÆãŽ¡~#÷YDGs¸0ç~7Þ|'÷Õíx€Šæ ûû⃠m±®ö¼dkà}ÜÌ¢ã/F»Ú¤žÄ/ ¤€U#Qƒe·‡È) ´5çªwø÷*–6r­š¥¹ uoÏüœ›=4Å~™”³RÅ×€¾_á°eÆp'çsªAŽåxøÕ„>ý…Õ’ÚÛ=¯,ü=éA§!Û­(ôM¡ºî ®á´Ñ®TPG°ªh]st`ò ë¶ú«§Ji/d’þP¬AŸýó–ô ÎvpÓáû_é\{n‹Hf‘o6¬°HG¿Ý‰ûs8ÂûrÏ£8˜ƒlCyªÙ†³$¾-??F†Á¹ÒjÝD #Ûö_æ›ÌS§&;¥ž›ýÂ^°qà×jÍщt¯üçó-ÊâJÑåþ—sG²«vecD(s}W šlÛÄ£ 8IJ$ŽL·„·Ù¿Nd¡¤À(Ä»èޥɄgó2:<ê®A. ‹Hk*$CÁö|Ò“¦n•ŽSö_OåÔïÍž!öììÐ1yÞ~l¶ÑɺøC8†yØ+ýâi$?ÚùW”l¬ "¡•µEÅûÇíiÂÿpÝú”‰ 4á'Ôf^4múÄC<]®'Ò!‚„v$Â"º–aCÈÏwzBä3¸|å xSÃí&ôÁ¹(7ïß7ïÞvF'Jh.:ú“²ØÓT|CˆzÀ­FÕèB<Íó¬ŠÞÌO´ y5Ìt*Ño õã^ß@|ÇâyAg¢§hŸª¯ÈŸÔ`Ùÿ˜2‚ëßgö@æÅ¸ÿÜHLE96ÂT’ûPGIU™•Ú7¾¯BÇ•b’ÆÌ¦ß1 ÞMÅ-j°u Ф’£ß~‘9Ú—'Ôó7E°-¥› ^”#þŽ{î¤&K=¡Ìo7Ý¢‚µ1ÚÍä,!×’¨Óì­sÀ;¼^‡Ò èZå°^mdFðÝW¦ãû¥"Ï™—Ä6Æä”×n/[oÏ ÜW2°“šÛS–¦®2šyaI9À‘9e“œ5Ñ ÂI W¿É42¨I±¸ºÀÐ÷®›N-Ž9ÇøJïæ¸Ê e祖 :{¯^\Á-óB:ƒmðúi|Oqˆ0‹¾Ñ:inyN„ß™;i*˜ÞdU#MVE—ç*!ÝŽ…j)À»ûeÒÙwET¶s[C šväÒÏ`èk9TGî¬Ô1ˆTvA+Ø¡L&> Hºo³íZa&à›¯s2Óžãn´â¿nûi Bx?YÑ+‡&Ê£-¬¨2²¯7ܿǎ®™V©ÂXi¸“¼—ÊííoóÏL‡ñmäð¾ý£‹Ò*¤«h}³Íß¼>™ ÍYKá.£âpÑãÉ& þið7íÒú©þdÞ‡TJçOíy7²î’EG¬ ¥¤Ë¤Ò7ç`LM7ËJwÍi*ñC‹æCyj’uŠ+¶hS{ 䉱ûŠ!w¬97DÄ’.CÁ à·gáÈݵóóPÿT}䨇~©ÈR³8 i·Ø M!§ȶ S¢hëÓ,©ê`*£Nâ\âdz'*iâ•lÅRnÁ’"ÉïÈ/žYª‡‘Á‘Ówô]l¨l¬*^oüs#*iZ(r!0˲kXK “âø˜¢ÂLÁƒ;ù†ÞMÝhr˵êÕö,­@eUÄd#¢Z*=pvBäË‚ùi­ž§!ñœîµ¿½õKg€ði·³”îÇ:åÄx~èÆ:<!p†æd± ZYžH ¯´z©m¬`Ý ÃŽ÷¤UÕ+‘º‡¾p¬¢y6ëacu…66óB$ “Xd}»Vû6¨ð Èyn¶P²þ_%K¸ ÀͤBHÎ×3øìv¬z„"ÏtÕоÇú²ú4¾¿Fxkœò– ¡·;`Bç?;g CF| š“YÏiçî_=üóöò1¼½d"âøi±§Ôõd£¸ƒ<ÌÔhÕÌÑÇ·Aç[Œµ›£€ž¢G Ôië‹ôo°¿Bä˜âÆþt™~Êÿä¶Q…÷7GÔî@ì×|8ÒቃLxÖ¦&äæ¼à¢s- î›lsƒ“ÀLž4²pvà˜òФÄãÛ´Îx\–[ØÊV¢ønœþo¢Ù!µÍ÷Áfr ï!i" Ì™kâìåo´ Xrƒ zmB9ÂøAïYŽÆåO¥çòò°~ãQá¤Õû›zØwAIþìÕ1ÄÞ}–½eÆ‹ª4ç‚ F€}˜Õ±¨5ÂŽ.‘·ËüÃÕ§—†âìÙüôÝÖpÜ/ß*ýúµ+èÞ‡ûROf°á»€4dŠÀùãÍum`Ío@þ5x †Ô‘º¨à·Aiê9÷†3µÖlšh(x­å_¿Wúq4‘¢­¸Lð¡–Íîƒ$ú|^üúFþT)Â)H$ëÇ5}A$é„…U<.ê7Í[‘±ÔcV~ÔžF |µýÅ2tGY]ãå>rsÖÎgç<º$ ,câ/*I¡ÅôIÕ.ïÛO†Ìox+œÂ—ÐyÔwòí0öò¢Ý‹ÞNÊáMDßøXùtÕ'EË\«Tlð^"y µÃ´n´›ŒtU(Èv´ú¡YŸjy«È•aöíc%V¸ eôiÔé oSRö§Hô+gtë•.Ü/¢læƒóŸŠÞÖ‹yIöÜ}¬ºœ7X¹Åm„Çè°¼Dê¯Á(­ªŠ‰ Oùk¯gÊ7#ØHr-DI»œµÜ1ÇTIøÆÞÛEÍKëN«¬ŽÅýx_céLƒÇÍM‹þPSžWã{Yr¯™q~d¡$Å{àøûØ_Ž˜î29™ R‘c'vÔ,‰êt“-ùWM+Ú­‹eÎú”Ó–¸Ü÷Ì3I `ö‡Ø i“²èU<§AìXªºn?[5p8ñYÁ’×TD@bíwÂ÷'>pF¡-¦ä3ç¯ ø–oì Ák£Ø¾äÉ¢ÚDQ –¥Ò$ðû“¯6Èõ&« zJóɹ­ éã+¥Û~%èGL=ÛÜÝUDw8F{ÄIDp+žÆ9ÉzK ïm·¾¿àÃïN pÒ ¨†9d®V®Ú…§òÞ(¾tÁwíZ Ÿš:»Y­4gXгóã0ø˜ò ap¾qù,Pž0°LÓðÉÅÕ8*Ûÿ+-=y`¤'£B÷gÅËHL¡}J€»ô‹£bnkS©Àý(-@uqxê2‡gý|ŸIß©*}§D[LΉlÈ´¶î~3 šÏ¢àáG>º ² ñI2mfÝ~}ù«è·fØŠmæ8ØC Ö–©µçµM†B¦¢0eÈWªv c‡ði|ýýÙ‰ð@!M[!7ué2­z¶âKÎßAÄkQŒž‰ð][}½\±š@•çM©$WAcÕ§­|ùq½´Ö6«©j™UQXü#›öΩÜzÒçå1™É´$‡ÊÚϧø.ef™ñç>$8…%LX3ÑdH4z 6cøBPì«Ùy¹Üß9¢_YOà"Š4i¢î'àáçH%A~‘–ÒÜ}Ê$Òh—™¸%w9­y(‰î€ä%à$Ϙ’7V"ð«ÈnJ§ÓèºGQü•“|È›©¿s͸¸ä:‹†íoJÈmÍï^úƒ½”ãÍ™hpý?ð‡ÈúýEðÉE$S!¶2£(¡ÂÂn.SX"R̲²[ÐuÌQq®Ô|à¿ú> ا_ :§4á}–¯Y¿@ßaàãänyM1¡Ðw%v\¡5>ªº8Ø÷­E9’éÇïÚFXX‡6¤Í·!œ^€“ðœ±ã?AÓ«»©Æ;2cžŠˆËޏ¤ôÈär´èüV«b(ECYËd_þø¹#Àõíp8Q/¦IÀâW;ö–P޲ӂ ö‘vŽ}XORFŠìtÅ51Ÿ@áiElÑúrÅ1ýƒRØZèmõò‘7åpžjÑ/üq1¦Ú/(²0´×[S‚O¸]5â e¯ŒCöKî#‘ÎXzì¬wh£ˆB5G»b× &ÖCRΠ[2öµ¸`WPÉejÒò躂Geý–_:ãŒN.°û¹ Y°Ê=ÉlÙ^zcð<$©2IàÖ4hOÖëzͪ’ÊÏ+Ë–“r`ή!¿[~ö3mpÃ.{R=¨Ld¯Õ "Ág9ütXÕ³ èTâ„:,ñy7^œm:jB¸gîÿíýâCš„ºó O}áL1ÆY€—[Ñ0aY‘ëÉè/¢ã3pº•úc Áígê> xFÞ«M×Ä9³9`âºò÷ƒ“—>>”jê›Ï °áMе>õÖžÃÅ›¸ä¡VJ¤²ÝºPO ·‚?êäo! Õ_ø€ðšVö˜–, -FV7\ ³=¢x¼©®›¯©„óv¤._qfEÝ3ɽ—M2ØÙèãÁÁß9^–YTÜçv­qÜ7†ø@3÷¹_™ñNaNóÞœJ¹Qá¿`GHúMÖEÖ\¾M\áØítw8^†­ñÀ$‰Üa9îH”.—¬ÛxŠ>-Ð<ä종ô9ØìKL±X%5sóªlÊøAY¥ïë«!ƒúH{„Ñ| ˆJ…¤=y­ôzû· póé•ÎÉ\ ˜»J>Ε>ÈTyýܺª¢¦% Xbj*N}„Ý*O­D–ÎÛF =ÊÀ&ùÈ—ó”R¦xÓ"¬awú‰.ûå3ˆZïCå¡Eã¦`§ËR5LÔÚÄÄ¿û\¯pB¸/UAÿÔ ò,ïG¤žq2ˆh@#МžÃó&šøv%že m\2Kñ Žn5wdú|Eéwž gübKQúÕÏb³ßÓ±µUB-Áµ¼=Dý5Ã/ùU²à! K§–ƒ­#§&~^ÆâÑcýž´íE ·`ÓENG(c^‰?¤ì ¤« á `Érr‚ïÇÜ „§ª8!J±ví2Á J¬Vÿƒ¶œÑ>T¨Kþßœ!Sa>éÉg­€’è}Á”Ñ'5FÐ’:_½l’mÇ•mrý.cÊWè–Ì– E²)—ƒŽž¼ûJމ•Û;§wŽÖÅ,TXE~†ü · ãQº³þ$á$d›g{'kGˆŸ›¹—ÀóÞ+t=×=ÍÈ—èDóÓõ©}FL/ˆ É|ý@·0o*WCC<Çè`Eóâ-»py™þùÇ–M¸^_¢à <5ßæ <š§A‰QS2ÀçÏ)B24‰_—ç»RŸs»Í™eªñuOꜜêÞ©ò±Ýüð®ÒN ÉmÑ‚³nÃ:9€ç$~¢èÚ®Q\ï)°ù¦‚g3MÒ93hôΖ ÎB6”ö ¬±àœVŸ=€÷)vÒý'lñÏàûJEÙp¹jÈÜX‡Ó|KyÔ¡`±&U·†½¨Âšùøçì™Ï[b—Á›ýq‘OtÎ Ÿ)˜P@0}‹½èœ&ÿŒcjŒ»ÃP^žE€.°´““u$žD ò26UŸ4z/8xÍxdä𞃲ÃÓT£–™ëõ-ÿœÉëB®7açgj;â­toPxF—°RЭ*òû–”Þ4€ßu~XFüQÞlhœõwñ ío·qrã63þýok¦3Æ¡ÕÝ9¼r‡B{ŒéŽU>0eHrÊ æHO“—‹ÑÈ^Ûj±rX³m'Ï&z·n±ˆM¤3©vG‰_źw\mtFkëÕo"±[òÉl[-ú•ÊšK׆'·PŠ4D]a&H˜ÊJ« ŽÕ‚LåÌâ†Þ[ }jœùü ³r!âŽ"\¹òKPòá}j†"ˆbt®fïFQ|ž¯=öð!Em¡&26 ÷™hh‚ã,W3®è/R¡ET>°a(qh÷¥i`L†M=hB˜MоtÀÚc.ø_FC–MÀS“„3EíÞËj˜V?f®Ð¥ô¤yû’`‹w€¦EW2¥lÈÉ„YëÀÖ#¼8˜ëå2<Ãëï}%ÂEuºÐ¥Œ¡Azt?/”³iÇpQLƒáôS¶úH-Ì„gú ê E‹bå,vTý=›Öø–EŠÑPÝþü’a®šìÈ'§—éò3?¿£:,‰¼½Ñ¢0¤|†¼êAÆn}în •ðýoû‹>zX  ¨»Ú#„Y-¶¡ª 3ª„ßsù•ï}BBsoêâ1²8ÙOGªìiÿ )üoô«A@µÝW`½÷™…KZˆ°êw,RXΰ‰Àóó‰e²÷$m 0šÒ›ä?CÅË/wDd×ÏH:!AOÔ£´ÖÃÁGmƒ¦Q ¼ué ÛLàUÅÔ ÔpáÇÉÍŸ'žÒ¸#À€B|=õ¡EǧTA2Õ‚ ÐÕ9º–»åü€«¸@„ó£+¦±ž§b2ÖU¤X¿ÂˆæòÀ(ÙH]£`O´>\$—¬µœòƯX&Îw4tþŸV*«,år;+70Ô>ôÄÌùïì‹ø#$èÊñ_<7qé\ŽŽhwmŤArü:èråµ² P›)ˆš¯Å¸þÍÂE™GM@Ý­›fX|ÔBB—÷>£r‘¤gw¨•R’Z« Q­ö7›Ê‚OÔ°ID_ €}’ÐÓO>"‚ÑÓ2ÚŒ´ãÒåúæÆ£wÉ]ÞLâ—©à&O”ð¸éÀUk)1¬/rŠaLµµNÆeô‡¨“è|óíâ}–öâA:Å]~ͧ_húTJ¬ aRHÞ…ý’7b­.ý[BµÆ/ä¤ô6ªÜù[O‘ÑæÄæ²cÁS…¸Æ=9ç-”`¶ÇÎs{œRÍqæ&‘ž,2Ã:ßñÃY1»X¿Jôê-&”Ë ìbªOÈn—þ+šRh@ð‹U•–ô<Z…âtcð8£%Ø–Øüi2'{K²<áOÜZ$¸+à>ª¤Ë"¨ °·5ï¦%ùñèH\ÖDž8”:½/Âså(›ÍÖ/&‹CâEÅRì¿Ì‡T2[g0&fs(©ön‚-Nãê?~T°8÷˜l¥ºúV¡¼)Œzû°±° èUÞ%×!X/ᨓܒ…Ð’ÜQó²!Û6_“ž=&©ç ûÿ|¼¹ŠBBNyQmDZÇÒ¿âmoùy[ïª@Í_í¾.¤xLu o‰¡„:ªkh(w…ÏÓëŸk3Øh|Ðk¡… [÷]WWÝßeÃTaÈ%\°uW¢L`Ü[‹*=xιËaëèTGMÒ¶ËE4€›íQµ‚}³ó‡<Þ#@“WV3uÁEî‘FE‰Ö6oKÎäʧ`Ū:( Ñn"7^‡m¤Qä×{¶ú‘Tk¥"cd‘ŠV/… #\à›Òì—æï*“¹‚̉€~¶»ÉhnõîCÁ Þ)˜€ós+j)¯Óe…¤®'¢ÔÙ4u—àN0i¢©d4@Œ8yþêæ¨Wî_Âs‡-jðøÿ1þŒ°©a__q9S±ð¼¨3ðXŠB•ßÎû7ÅÉú»¯7^¨x³ßçŽܬWkKîa!qÇ‹\¹’@åMCÕ•r_¸,¦ÁÏî~l%à²O5ñä§eщ¦Ú, ‹uJ0&‚WcIèÀ$‡×{<·‘†Åâ’ÑÖeIÛŽìWjôÙ9ó®W%Ú¬0ÕÄÈ9ÖÞ5Á–‡¥ñÅ~$üS 7D–:†)¢VeKÿ"扎@ëº&mž@¥tn3¾CD\ñ{5³p` #ô;Ù›:ÜÕ_ÖZè¾(”%ëß3««BS®¬/å"”;s—5C»‘¦Ùí²®kP+[š³¦vä’Pu²EÑáÿ5 È*Zeó›Ã3f5ûµã‹€t¢þðPÉ•FâíšÂHäº[f WƤö ÙÚ{^ØàV#ƒ¬”I;ÑÄýžJÔ f¨W­.îkñ/‚:xÍx¨“»ÎS`‚M xÄŽ¿ÀËôfÓ>aH ƒ't§Ä¾)¡`L²RÅXS©Ÿ2Ïññ:¥Jkü©ýÖûC'ˆ)dqÈœ`ù‚fð†í¥±I’0‰Ž ªÀ9Þz߬ˆ`[û’[ƒCx™$aZ7t2 Åj_K@E¿…6ë)Èxi\7J}›Wʶ۞½¸ä€¦Ç"œ*%³\üœ"†ƒ=ë¥Å?ÕsB–°Œ{ñ"ÄÃãé¢B¢$$:;éäÄQŠ ‘+"8ÂtYÃEUÙxG½©’Í)n빬–Ã-ü€ç"û!hø()\vv‘¸âa:”ád]”p@:1ÃÕ¤YOw§¼Dñ×ä0ìèþÀW¦Æ-ê g ïÂÖŒ2ñwBçî|çí§CXqEã3×£}Fçæ4æˆÿÆ{ÏϤSí"é 5C¸_Á‰#«mõŸ‰§\ywT…²HGiËÜ(©@8«€¯yˆW“½Öµƒ,£^Mtɳ.pÄ6éSGûžµé^Ý÷ákmòSJïYU`†/ÿ$ìSáÙé&Èe‡£Çtaõxq½AÈ{'™Sü§PIæ›5‹ÀîÒH/]3¿rS´7Mú./§iqØ×?ÏgtεåÇÈ‘ñ¸‰0³‘¥qËË!@c&x`2Ë-Î?€­¥ Ù­næãW^òº­ÀUM³oTûí„A£#îHV*±I¾!8Gš‹Z>Ǧóˆ½Ègm³×àÜÞ ‘r ³›'ÌÎÁ÷½+¼è`Ïíx'S·´X8ïešêgœúDŠ_8¸&¨¢®ñu[-´Ó\åï[+C=\„9é¬ Z«‘#̺Z ¡JÕÜ×äµÞ  Xü›.÷K$N²@^r£ä™’ÛÚDH¢oCÅÏ8³w¾ÒÜÍû/5J:Ý?•nZm@Ü¢ê)`€›öó¨\JÑõ¬ÿ„Àvƒ„ Iy§ÚÇ€³tl+Ôé[‚Æ$ÂX—ÝT¼=„åDþqK$RÊ„éÔ|^ÙÝñõû¼—Iþhìlz/þ5¡ïÛßb®d7L©—¼Ž»ÉeÝñ¶ °Û'©{õúþñ׆°'Hþ~*@‹œxF“EN+°î:þmÐíÕDsÓR8§ú×UعhŸ¢¢@Òö¨2\Æ#aÀ‰HÉu¿“:Ç#0¹ÄÇ=_µP }[õ-AŽÍÍ0O`¬ÄÌ.à>¹Î¿¡Ñ á²:GKšúêÚŠõëï!Æs#(âÞ—†1h˜ÛÚá¥0£(ô*›.Pe±‡mä1/ô²ެ˜«¶Éä€Ð¡·lS×ÈCüdÛ8Ì«¤úýò3”È”FQä–ÁWp°Ev>NÊèÜÃ{€aµÙ8ŒëzìØžz†ÛèeLôåo%1ièôê.]àÃ8增êîÄâ„ÈêBK½<¤ï¨Í‚6‡¦ —a±·÷òR¡¶";™¯ôR,ÿ-¢ÏvqÁ«X“¼iK‡Œ“Xóå 7-Ñ=ÛrÇ»JhË«ŒBÁãn=Àqz•\‹",|™ÜæÊdl±ÈYÐä»Üý”.¸¼¹ÕQcm'#ì†Pc"Ù<Ó„aùpr¶Î{nõS´ÍÈý5/¬UèOÍÏü„æšõ´6‘¹Üæào¼oä$œxªE%;èü.–ðm¤a ¦ûc¹Bç/Ì2ùäî@š—΂]AZµÓjyÅñ!+êS2› {:õº&µ¥ñLgxœË‹·/JY 8D«.1±7”ç×6Øý&á!¨Û ›éÝ: ƒ”é@¨9 èoEØõ·tÇJ°ŸÆm¶ŽÌ!™)GRÕÚ)—ÿC3®:ÙôU`’“KÅûÃŽuBœO†î7‡¸ƒªù™l‹¿FvŒÐKé¸[+&ªšÎÍÜÜ Ä­y@¡…ÆkL±IF/0/tÊÆòÿãÉAÉH.ü$èø‹ËŒùwô\gÉÍ<Öú!˜•;k=zaÏ—_˹Jœ¨Ò±Žo*`içZ¯?A|9Þ6ßy}/ÏÈzfÎ_½Glÿ¤œ»òL¤µ£¢øYv=\eƒ×pô,G¸Ò˜v93GG‡-;Sñ7#¸'Ñ,Œ;‹ú–’]»? VËA|‰wÞ/ÿQm_UF6ã!ÉÍ—¾Y=S^Ê;Ë1óy³ÎV0gwudæ’…õ$¿ž[ÌÃ,,OF4,²ÇÙòuçÓOI>Â|õ‡¥Œ¸Ê·¢Áw“So4°Á°| TBñö ¯¸íŸ1‘powJ^ŠS¶hfxïà7Ô>aldp g§'›bs^TæbõˆF'v˜ ¿+ük°ñ#ú‡Þu :>MDÒ“œóêFG7RÝi™G?í=‘:2%¼y§fe´Ê MõzÄ0}¼|…ÿGÝÈü‘{Pm7y"’f5ºõæ3u#"ÇŒ¿å¬ï¦ÒúžV3ßžFgBAÚm°F!!¿¥A Š{̛ը]>õ)nÒ„gœ #‰¿DœÕBà [:">Ô‰›œ>áCá]enÉŽìZ¯ÙRË$ Deñ‹‰´guHú\öºÒ|aä5iì4ûgëlƒÙ?¸páꇔ@ªÖø_ø!Ÿ%1é“0Sñk:¬C01?)NxQ}rÅ9µ¤RæP32‰‡-:×ôL²¯VÓœ›X²ˆgkVlU‡ÈÀ¤ö’“#¯N¨ &Ÿ@Ô´î°¯PÛPtÙøhìCÉZåQCˆà-ûú~ø§V.åƒq0 1CÕk6’LJU³‹ùx=E°S¸Måö9Ecœ¡¯µ£D€V×Îý|HélêÔÏ:Í`á4ÔN tÿŽ ¦Ø†šnv¹üÚbY.¬Ù (ÉË•§+æ*¶\Ì+,»z&K¦æ¡ 4þï‘Ûø§…R;¯ôÞ»æ8O¿{톻¹kX¨.ïÆNù!¾è è?Žp£C#;1g–ëH#µ¬ íU‚˜ÞƒößM)k$AöçZH(ɇÍd˜î ŽÜ€Çs(Â#M+ú¶ÐBêMÜ»÷ÂKfÉ-ˆ,’AC)Ç^õ$$ª‘£­Ñgõ³,׋¾UADådâŽíÛêŒ!G_ÅR½dSÊXRϹ#Ë€€Ù²žÝtÚòšSTÑÄ_XÈt TU\iû÷~*<0Á^Æ¿…ÈZ³ Ý;?Á|UõÂþ™„«°5ƒ AO ÅAYtO¹Sâß&¥õŠë㩳-¾ ‹¥Ú´ønø¤¯£Íîðº½/ &Ї+ÜS(È¥—P§º|çßïïKÙx¼æÜÅbfÚÜKóûFPØæâHëá Ø#Sÿk d#¢ÑèíÓ»RÏÒÿ9»âÛ N»üªføxåY›a¡]÷ê p2Ïð~ŠÛq( ¸”EjdSp‘seÄ­ñB¨i˜÷~KLÈŠèè1ŠlÏÐ/IH®!rÖ±ñÎ:ïvø9OT±UƒÞÔ~Á}’Y̬#<èQô°À[M©&e;¨¯gÔG‡ìJ;.¾×®_}×@¬FO2N¾‘12«±èCúÅ¡.fø»,t¥·ìËü ÒB+ID!{M…ºiýs‰Ò‰7Sùi}®á °ñ¯]'„ÙáåèYÙt ä€$üiÉ;“‡9óYù²œf¨<),Rò*ÉmóOÇnBìm3Ïc§!·÷AŒ§À• › júø´î¨Ðwö›Bó*m.X •~¦¶Ž7=NfE8àvRl¾-çd[ª…`tQíûPlÒ@¿=kGž"ó¥>íàsó³vIBÆ,ù•Ù8Hç­7œ‡étJáÓbì%‚ ÏCRÌ£¨°&üŸqˆt‰ üŠ)gøHdÛÔ‹ÿëgP}bŒ`Í}-6ÿþîLÑCpí ×(óI#¡ ùM “ ÕõÙÀíÁŒL¯×+gÚjï§Ñ›Ž'»² §±O¬Î%±¸iÅ9é:1ž¾\?,„Æã§«¾\"¦¤$ηE>káñÌÕRC^öËU¤åà3–|ïú-”-X^âyîú EŽ|µfX'O™XM–¡wj˜wt„¼×ƧþÒ¹mp€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/VeraBd.ttf0000664000175000017500000016253413544671343022215 0ustar rptlabrptlab00000000000000OS/2µ‰÷=Ï@VPCLT,e‰Ï˜6cmap¤Ãè ­¸Xcvt >¹-âRfpgmÆp9)Œgaspå glyf4Þh¥)„&hdmxE¼úÏÐHheadóO«“å$6hhea. Ï$hmtxyò€®±,kernÔê¹ÜlocaXùz[·Ämaxp}Îü name·YÍ¿ëpostø¡xúµ<†prep|a¢ç!\§::N:: R^0±p  ‡ t t Ÿ &   ; 0  0   C , [ `   0­ & ‡Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera Sans BoldRelease 1.10BitstreamVeraSans-BoldCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.comCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera Sans BoldRelease 1.10BitstreamVeraSans-BoldCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.comf3f¼é=¢úff¬Tì¼bf…Tfm¤fÍ3bq%¤¼ºåfHZfmöÃð99Xm=²²fuf°f9Ñœ{Ï{X3fLfL¬šJ#ššDDÍÁf?š;ËËÕÕP¬¬w Çò/X²#öö/55îç3˜ÑX š˜¼ÍååòsfÕ+ÕÃá×åj-ÕÕð¨jìáÕ!føìƒ¦ø#^Í`lj켺3B3\Õššáfy```{ìø;ÝÕj\{šÝ®º…®`bššXîššÑÍšPËË‹‹1öðL`¨Á%Á!J–Jƒ¨7{ÉÁÁÁÁ–'žì}3˜ÑXyÍ9bœœœ“¸“¸sA„€&þ%$!:$ú#"!:"þ!: ú»dþþþþþþþþþ}þ}  Œ þ À  Y Œ €  & Y @ & þþ €²—.Aúúþúú@ÿ}ÿ>þþüû,üþû,úþùøGù}øG÷úöþõþôþó»òþñþðþïîþíì íþì ì@ëê ë2ê éúè‘èþçúæúå‘åþäþãþâþáþàþßþÞúÝÜÝdÜÛ ÛdÚÙ%ÚúÙ%ØÑ%Øú×Ö×ÖÕÖÕÔÓ Ô Ó ÒÑ%ÒúÑ‘Ñ%Д Ð#ÏÎÏ&ÎÍÎÍÌ‘ÌËÊÉ»ÊþÉÈ]ɻɀÈ@ÿÇ%È]È@Ç%ÆþÅdÄÄþÃÂþÁþÀ¿:Àú¿­¿:¾½¾2½¼½¼»¼»º »º ¹‘¹þ¸þ·¶µþ´þ³þ²±°¯­¯ú®­®ú­‘­¬‘¬}«þª&©þ¨þ§þ¦þ¥ ¤þ£¢£þ¢¢@¡ ¡ú ‘ Ÿ‘Ÿúž” žþœ›»œþ›š]›»›€š%š]š@™þ˜—.˜þ—.–‘–@ÿ•” • ” “‘“K’‘’þ‘‘%ŽþþŒþ‹þŠþ‰þˆ‡%ˆþ‡%†þ…þ„2ƒ–‚þþ€ ~þ}þ|þ{úzúyþwv¦wþv¦utuútsúr}qþpo,o,númúlúkþjþiþhc h2gþf2ed eþd d@cb c b a`a–``_ ^þ]þ\\þ[Z[þZZYþXúWþV@ÿVþUþTSRQRúQQPOPúONONMLKLKJKJIJIHúGFGFEúDCDCBA%BúAA%@?@þ?>?>=< =< ;d:þ98þ7656%5455À4 44€32 33@2 10¦1þ00¦/ .-,:-ú,%,:+d*d)þ(''& %$#@+$#" "ú!!@  %¸@‘ K}Kþ%ú%dþþdÀ€  ú 2   €  @ þþþ þ @údþ  ¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX ¸(EDY!-,°%E`D-,KSX°%°%EDY!!-,ED-fþ–f¤¼&&¶‰/ÄÔì1ÔìÔì0!%!!füsüåþ–øòr)‡Õ @Œ‹ Ô<ì2991/äüì0!!!!h3þþ3hþ˜ÕýÃþ^¢ýÌþœÃªhÕ@ŽüüÜì1ô<ì20###híËíÕýÕ+ýÕ+‹)¾K@1’ ’    ÔÌ91/<ä2Ô<<ì22Ô<<ì220!3!!!!#!#!5!!5!!!`aÝaþ¶Eþ°`Ý`þø`ß`þéHFþåR`PþøF¾þþÕþî×þþ×Õýªþî þÓ#*1s@? %$ + ,#–•,–•“,“ (/($ +/ 2ÔÄüÔ<ü<ÔüÄ991/ÄìÔÄüôìõî99999990#&&''&&546773&&'6654&¢}êosëy!ïÉõã¢dÈedÈe þÍô÷¢GUNðWWPþÓ-.);?7*´©³É çã"þ*/þá(»·¸ÅBE5;Cþ±þêBBDCBÿãÃð '3c@5  % ."™( ™˜œ41+  1 +%4ÜÄìôìîöî991ä2ô<äìîöîî0KSXííY""32654&'2#"&546#3!2#"&546"32654&3GNMHHLMGºÖÖºº××ý%Ý¥ÞûºÕÕººÕÕºHNNHHMNh{rs{{sr{¨Ø½½ÛÛ½¼ÙüÓ Ù½½ÚÚ½½Ù¨|rs}}sr|{ÿã¤ð&06@Y     ,-./+0()'%0' - ‘-¡!Ÿžœ˜ '*$ 0$*$  *  1üìÄÔÔìÆî99999991/Æäöæîîî99990KSXí9í9íí9Y"²']@„   ' 0   0%/ / %&? ? @K K K/K0ZZUZ Z U(\.\0X2_2dig`i i d&€2, ' '* 9 5005@J I'I(WW\ ['ggl ]] >7!!'# 5467.54632.#"3267™577oc%þXbiè‚þùþ»¢*(þÓ[Åk^¨PMU1—ABªwCt2ßþ>F®n¶þäkþ¾mFDÛ’áj5j:£Äþê0.;6"WþÓ/wGs¢))ê°Õ@ Žüì1ôì0#°íÕýÕ+°þò @¤£ üüÄ2991üì0!&547!þ×™’“˜)€€þò÷½ÛÛÁõíþ;ÝÝþ:¤þòø @ ¤£  ÔÄ2ì991üì0654'!¤€€€€)˜“’™þòîÆÝÝÅíõþ?ÛÛþC÷)9ðF@(  ¥ œ   Ô<Ä2Ü<Ä2991ôÄ2ôÄ290%#'%%73%þ¶JLþ³ªþ²LNþ²LNªMÁ­®¸þ¨X¸®­¶Xþ¨¶ÙÛ "@§ ¦  Ô<Äü<Ä1/ô<ü<Ä0!!#!5!Ñ ýöîýö ýôìýô ì mþÝ9ƒ@ ©¨üìÔÌ1üì0!#Ñh÷ÕdƒþÏþ‹uo¼ãß·«ªÔÄ1ôì0!!otýŒßþÝÑ9ƒ·¨üì1/ì0!!Ñhþ˜ƒþ}ÿBìÕ·/Ä991ôÌ03#ÞýñÝÕùmbÿã/ð #@ ¬¬œ˜ üìüì1äôìî0&#"326! ! ®i||jj|{jþÀþÚþÙþÀ@'&@ìååþèþåèèþþm“st“þmçÕ (@®®®  ÔÄìÄüì1/ì2ôìÔì0!%!!!ðTþ£[nTûì ÅHHû5þö¢ßð–@)% ¬œ¯ÜÄüÔì9991/ì2ôìÔì990KSXí9íY"K° TX½@ÿÀ878Y@&**"""555BJFF]]!!>54&#">3 N‘ûÃ!IFuZÖz‚þz )~ÊþåáB~Di€MLH+-ìÓzÓ±‰ÿãîð(L@+¬ – ± ¬ –±¬°#œ˜)& )üäÄüìÔì9991äôäüôìþõîî90!"&'32654&##532654&#"663 º—þ¬þºsçqlÕg™£§£š¢‘ŽŠ~]¾^ràl#!Š%'Á•Þç%%)67jcfiø[]V^*) ¿Àƒ§\3Õ C@ !  ! % ®   üÔ<Äì291/äÔ<ì290KSXííY"!!3#!!òþZ¦@¬ÕÕþ”ýj˜ý®üRþéþðJžÿãÕ=@"•¬–•¬² ¯ ˜" ÜÄüìÄî1äôìæþõîþä90!!663 !"&'32654&#"Ù½ýv,Y00þµþÚù{zÛaŒ¡¡ŒS¼lÕþåç þïôòþî12/FF‰uvˆ+-ÿã#î $7@¬¬ – •¬"œ˜% %$%üìüäîÄ1äôüôìîÖî90"32654&&&#"6632! !2åeeeefeev_¨P¬ÀBš[åþÆþøþÝþÁuEgÂჃƒƒƒƒƒƒÍþì-+¿¼11þôÙðþ߉ir§ ‰îÕE@%¯ÜÌ91/ôì0KSXííY"²]@ &5F]!!!‰eýºþ‰'ý1ÕÙûº}ÿãð #/G@( '¬¬°-¬œ˜0 $*& '&!$0üäìüìôìî991äôìäîî990"32654&%&&54$! ! $54632654&#"Élttlkrrþ|ˆŠ‹ˆ˜›þÙþÞþÝþ×›òc\ZbbZ\cœvnnuunou)ª½ÆÅ¾ª)*½ÞããÞ½UY``YY_`jÿãî$7@¬ –•¬ ¬œ˜%%" $%üìÄüüä1äôìÄþõîî9073267#"54! !"&2654&#"Í\¨R¬ÀDšZåþç9$@þŠþºiÀeffeeff!++¿¼22 Úñ"þvþ˜þŽþY‚„„‚ƒƒåN`@¨³¨ü<ì21/ìôì0!!!!åiþ—iþ—`þ}þ¦þ}þÝN` %@¨©¨³  ü<ì2ÔÄ1äüìî0!#!!åiøÕdiþ—ƒþÏþ‹uþ}Ù=ÛÇ@µ´ÔÄ291ôì90 5Ûü<ÄúþÍþ´þ¶úÏìÏÙ'ÛÛ@ §¶§Ô<Ä21Ôìüì0!!!!ÙúþúþÛëÜíÙ=ÛÇ@µ´Ô<Ä91ôì9055ÙúþÅÍúþ1ìþ1úJð!H@'Œ‘• ¡‹   "Ô<ì2ÔÔì99991/ìôüôìí9990!546776654&#"6632!!Åþ—Bj@95`VQ¼fyÈ]ôN^@D*þ—iþ—ø1Rb:4\.FOCB:*(Ç¿b›Y9>K-Áþœ‡þœo  Ml@: 40LM3 ¸30 ¸0¸·7$¸·CN34L **)(I(*)4=NÔÄììÔììîþ<Æ991ôììÔììÄîÄî299999032654&#"#"&54632536654&'&$#"3267#"$'&5476$32!#?iZYjkZXiš…Y¬×Ø«Y…Ñ|Ž:;_þã¦tÔZ”¥ked“~üYk}þÙ˜¹þ¸€€†ˆ~~O´àn{KMþºþ×'{ŽzyþZGOùÈÈúPGƒýKÉd¯Iz„=;bþɵ•þûdbg^P¢agƒ}}I½¶J}|ˆ«¡bå~þñþÔ 'Õ @@     % ®   ÔÄ91/<äÔì90KSXííííííííY"K° TX½ ÿÀ @878Y@€ / V f  t Š Ÿ ¿ ¿ Ï Ï ß   %* IFGH XYVWhifg` t{zu{t ‰††‰ ™–•š ¶¹ ËÅÅËÂÍ ÙÖÖÙÕÚ /]]!!!!!Fý¦_þ})Ë)þ}ý¨™ÌþðÕú+%R¼‰Õ P@%¹¾¹ ¹   !üì2ÔìÔì99991/ìôìôì90@ ""/"P"]2654&+2654&+)! [^^[ÕâtutuâH|ˆþÜþÖýB7f“PNMQþÄýsbcaaþy$ÂØÔÕ¼Ïm™fÿã\ð;@   ®® œ˜- +üÄ2ì1äôìþÄÅ990´/_]%# !2.#"3267\jæ}þ‹þL´u}æjkÐsÎììÎsÐkR78¡ef¡87þËIDþøèçþøDI¼9Õ.@À À -. üìüì99991/ìôì0²P]32654&#! )=Šìùøíýõ–TMwiffixþ°þ°þj²üqêßÞè#ateþø§©þ÷eta¼áÕ 0@À¾ÀÀ   üì2ÔÄÄ1/ìôìôì0¶ P p ]!!!!!!¼ýrgý™¤ûÛÕþÝþêþÝþªþݼËÕ +@À¾À üì2ÔÄ1/ôìôì0¶ P p ]!!!!!¼ýrgý™þÕþÝþêþÝý‡fÿãúðK@%   ¹®® œ˜1 3/-+üìôäüÄ1ÄäôìîîÅ9990²_]%# !2.#"3267#!úþÊ¥þ‹þL¼‚•y}÷|æùðÝ@À¾   üì2Ôì21/<ô<ôì0@P ` p Ÿ ]!!!!!!¼8þýÈþÕýÇ9ú+yý‡¼=Õ7·Áüì1/ì0K°TK°T[X½ÿÀ@878Y¶@P]!!¼þÕú+ÿþf=Õ L@ À  üÄì991äüì990K°TK°T[X½ ÿÀ @878Y¶ @ P ]!!#3265¼þÑþÍN3IO@UZfi ]]!!!!¼®mþRýáþ“Õüú+üfÿãfð 2@®® œ˜ -7-+üìüì1äôìî0@ /?]"3254 ! f°Â°±Â±h˜þhþ˜þ™þg™Ùþüìëþüëìþdþ•þ–þdœjkœ¼‰Õ 1@ ® ®  - üì2Ôì99991/ôìÔì0²]! !#!32654&#¼1þÏþãþþÕpzzpÕýêëýýú¾þ_mddlfþÕfðb@ ®®œ˜  - 7-+üìüì9991Ääôìî90@,  '/V S f ` w w p  Y Y YXj i x ]]# ! !"3254þþf™gk•×Ê-þ‘þã°Â¾´±Â˜lkœþhþ‘üþ”\þ°þüìðÿëì¼Õ‡@2% ® ®     üì2ÔÄì9991/<ôìÔì9990KSXíí9Y"²]@66EEVVPee`]2654&+!! !.#ßyiiy¢þL'O}@Ñþf¶7q^?ZgfXþþöýËÕÆÖ”¾-þXspR“ÿã-ð'§@*% Ãî®%œ˜( "(ÜìÄÔìÄ99991äôìþåå9990@Tp)9999 JJJ X ]\^^ Z!joooh o n!t t t || |!– — ›šœ š!¦ ¦ ¦ ªªªª ª!(]].#"!"$'32654&/.54$!2Ë{êhŠ„Yu¤ùÒþÛþÓŽþâ |~†[ˆ•àÏ {¦þÄ78LP@À88Ôìüì1/ôì20K° TK°T[X½ÿÀ@878Y²@ ]!!!! `þþþÕþÝûN²¼ÿãÃÕ3@ À˜  9üìüì1ä2ôì90¶@pŸ]!3265!! ¼y‰ŠyþÂþºþ»þÂÕü¹ŸŸ¹üþÃþÊ6= 'Õ˜@'%ÁÔÄ91/ì290KSXííííY"K° TK°T[X½ÿÀ@878Y@, ° GGHHEJWX]]! !! ƒŒ‹ƒý×þ5Õû²Nú+=“Õ x@J 6  6 6 6   % Á    ÔÌ91/<ì2290KSXííííííííY"K° TK° T[K° T[K° T[X½ ÿÀ @878Y@Ì  % :?:?3 0 0 @ @ @ ^^a ¸± ° °         '('(%* /66220002 4 6 ?IFHE J ]]ZZUURRRZ U ] ooonhheh k n i o wwx v x ˆ…‰ ·º¶¸±¾ K]]! ! !! !=qsnþ þDþñþôþDÕûÃ=ûÃ=ú+oû‘'Õ û@E    %  Á   ÔÄÜÄ91/<ì290KSXííííííííY"K° TK°T[K°T[X½ ÿÀ @878Y@X  /& <3 _P € ¿°    ++%$%+ :55: P ejo ¹µµº ]] ! ! ! !üþoþ£þ¦þmþ’GF”úýþþúÛþáÿìßÕ @(%Á:: Ôìüì91/ì290KSXííííY"K° TK° T[K°T[X½ ÿÀ @878Y@, %%0@P`° %*5:0 O o ]]! !!¥TT¦ýÇþÕýìü ý‹u\qÕ w@%ÀÀ ÔÄÜÄ991/ìôì0KSXííY"K° TK° T[X½ ÿÀ @878Y@ %)69? FHO V_ o ]!!!5!sçüß8úë!üöÕéü7þÝéɰþò@ĤģüüÌ21üìüì0!!!!°mþçý“áú áÿBìÕ·/Ä991ôÌ03ýòݾ“ùm‹þòø@ĤÄ£ÔÌ2ì1üìüì0!5!!5!øý“þçmþòá`áϨåÕ@ ÔÌ91ôÌ290##ÕñþfþgòÕýÓ-þÓ-þþÛ´/Ä1ÔÌ0!5üþÛ¾¾^î“fN·ÆÅÔÌ1ôì0K° TK°T[X½ÿÀ@878YK° TX½ÿÀ@878Y´] #yÄþfþˆxXÿãÅ{ %@*  ÒÏŸÐ ÌËŸ#ʘ # = ;&üìÄôì229991/äôüôìæîöî9990@L/'= =!?'M M!] ]!n n!~ ~!p'Œ Œ! !­ ­!½ ½!20C@SPc`…€“¢ ²°]]"326=%!5#"&54$!354&#">3 ¢pq[QeŠiþ—H´®Ù"Ó†ŽsÆUsèt/ øLJDM‘m)‡ý¦f]ˢŸUO..ï¬ÿã^ 8@¡ С˜Ê£ÐB@ üì22ôì1/äìäôìæî0´O`]%2654&#">32#"&'!!syyss{{{J´uÏ þöÏu´Jþšf稠 ¨©ŸŸ©Õb]þ·þýþýþ·]b¢Xÿã5{7@ÌÔÌ Ô ¡¡Ê˜B ;üÄ2ì1äôìþôîõî0´_].#"3267# !25I“O–§§–T—@T­WþÑþªV/X«=þÜ20¯¯21þÛ77\ÿã8@¡Ð¡Ð˜Ê£ @B ;üìôì221/ìäôäìäî0´O`]!!5#"322654&#"¦hþ˜J²uÏþö Ït³¢syysryy¼Xùì¢c\II]üɨ  ¨¨  ¨Xÿã {C@!Ø ÌÔŸ ×ŸÊ ˜ D ;üìôìÄ91äôìäþôîî90´/?]!3267# ! 4&#" ü» œŒqí}þþÐþ¯K"=þw`h‚3f~~CDþì015:þ“f}un'`@ ¡Ÿ£³   E Ü<ìü<ÄÄ991/ä2üìî2990K° TK°T[X½ÿÀ@878Y@ €€]#"!!!#35463ÆL<2þÎþš²²ÌÖë7DNÿü `N·¯\þFy(K@&ÌÔŸ¡ Ð Ê ³#¡ÚÐ& @ B;)üìÄôì221/ääìäôäìþõî990´O*`*]%#"54325!!"&'3265"32654&¦J²uÍþô Íu²Jhþ«þ¼iÄc^´[°¤ìo|xsp||¾b\CúûA\c¦üþòþã !65š¤¤–šŸ¤•–¤¬5@  ÛÐÊ£ G üì2ôì1/<ìôäì9990´`€]!54&'.#"!!>32þ˜ H.p€þšfQ¶nÂɪýVo™“n#'­™ýÙý¨b]î¬)@ݳ£ ü<ì21/ìôì0@ P ` p € ]!!!!¬fþšfþš`û þÜÿ¼þF =@ ŸݳÚ £  ü<ì2Ä991ìäôìî990@ P`p€]!+53265!!¬fØÍ±>fLfþš`û´áíë\‡þܬy Œ@³£   üì2ÔÄ91/<ìä90@`;IIZ]X_ogvv{ˆ…‡‹Ÿ•–›¹:DGJV]g`ewpv|‡ˆ‹’—›]]!! !!¬fœ ýÝNþNþKþšü±›ýþý¢Óþ-¬·£ üì1/ì0@ P`p€]!!¬fþšù쪴{%t@)  Û Ð#ʳ  H H &üü<üìüì991/<<äô<äì29990K°TX½&ÿÀ&&@878Y@'0'P'p'€''¯']>32!>54&#"!4&#"!!>32ºD»pÁÊþ˜FNfoþ˜@Rgpþ˜hB«gt²¦hmîãýVH wk¨ŸýÚHºk©ýÙ`¤_`p¬{5@  ÛÐʳ G üì2ôì1/<äôäì9990´`€]!54&'.#"!!>32þ˜ H.p€þšfQ¶nÂɪýVo›‘n#'­™ýÙ`¤b]îXÿã'{ -@¡¡ ʘ BLB;üìüì1äôìî0¶7?G]"32654& ! Áw}}wu||u!Eþ»þßþÞþ¹G{«¡¡««¡¡«þÈþìþìþÈ88¬þV^{;@¡Ð¡Ðʘ޳B @ üì22ôì1äääôäìäî0´O`]%!!>32#"&"32654&þšfJ´uÏ þöÏu´¤s{{ssyy¢ý´ ¤b]þ·þýþýþ·]7©ŸŸ©¨  ¨\þVy ;@¡ СÐʳޘ @B;üìôì221äääôäìæî0´O`]"32654&#"325!!ºryyrsyyyJ²uÏþö Ïu²Jhþ˜w¨  ¨¨  ¨ý+c\IG\c¦ùö¬ì{C@ À ”Ê ³  üÄì21/äôäüÄ990K°TX½@ÿÀ878Y.#"!!>32ì/]/Š•þšfE³}*(/±¥ýü`¸nejÿãb{'Ü@@  6  6% ÌÔÌÔŸŸ%ʘ( SRP"M(üìÄÔìä99991äôìþõîõî90KSXí9í9Y"² ]@^ #  ,. . . . . ) 9; ; ; : : K J J J H w w ºº º º º º %  7 ?)_) ]].#"!"&'32654&/.54632sÖ_fcKa?¾þøþúoí}kátijIm?ïÀôücÚ=þð0035+. # «³´##44:90/ ¢¥²¬¤žx@¡³¡    Tü<Äü<ÄÄ991/Äìô<ì2990K°TK°T[K°T[K°T[X½ÿÀ@878Y@??PPP`` ]]!!;!"&5#33qþ>\¸þÍÔ±²²žþÂÿþ%N7ÿ±ÔÛ> ÿã`;@ ÛИ³ G üìôì291/ä2ôäì9990´`€]!3265!!5#"& hG.p€fþšQµmÂË´¬p[þí.‡w#&¬™)û ¢b]î`è@'%ßÔÄ91/ì290KSXííííY"K° TK°T[X½ÿÀ@878Y@| 0@Vf€ °°°°ÀÀÐÐàààðð  &$+)64990FFII`x‡ˆ‡ˆ––™™•š¨¶¹$]]! !!fgþGþw`üúû H` @J 4  4 4 4   % ß    ÔÌ91/<ì2290KSXííííííííY"K° TK° T[K° T[X½ ÿÀ @878Y@æ 550 G @ @ _ l  °°°°° ÀÀÑ Ð ààï    &$+)*+ $ % /554;::78 ?GIFHGH YVV[ T Y _f`b```d ` upspppt p ‡ˆ„‰ † ‹ ”› ¦©¦©¥© ¦ ª ¶¹¶¹ ÆÄÊÉÕÙ×Úåé æ ê []]!!!! !H\¼½+¼½\þÙþy½¼þy`üüýüû üþ ` „@F    % ß   ÔÄÔÄ91/<ì290KSXííííííííY"K° TK°T[K°T[K°T[X½ ÿÀ @878Y@Ú  / 3< CL R\ bl sz € ——œ Ÿ  ¯ °°°¿ ¿ ¿ ÀÀÏ Ï ÐÐß ß ààï ï ÷ð÷ÿ 2     $++$ 4;;4 0 DKKD o †€‰€ —•š™š– §°¿¿° ÀÏÏÀ ×ÐߨßÐ çàïèïà ùö:]] !! ! !Çþl{åè{þl¨þ…üùþ…=#þ´LýßýÁbþžþF`A@C %  ŸÚ³  ÔÄ91ä2ôì9990KSXííííí9íY"K° TK°T[K°T[X½ÿÀ@878Y@¤ @Pet†€” ´°°°ÀÀÔÐàà $$$5586699EEJJEEge†††ˆ ˆ—––™ ™¨ªª©©µ¼¸° ° ¿ ¹ ¹ÈË ËÉÖå9]]! !+5326?f-fþ)G½›Ïp[S `ýøû6»•ë:K\F` ž@%¡³¡ ÔÄÌ2991/ìôì0KSXííY"K° TK° T[X½ ÿÀ @878Y@DYVifyv„“ &)/ 9? J_ Žž±½ÀÏÐßãì]]!!!5!uÑý²NüNýË`úýšÿúfþ²²$^@1 %   ! Ä áÄàÄ£% $  %Ô<Ìü<Ä299999991üìôìôì99999990#"&554&##5326554633#"3²ÙÚÈlŽ==ŽlÈÚÙEUZnoYUmá°ÁÀ–ußt–ÍÁ¯áWަŽŽœ¦Wþç¶Ôì1ÔÌ0#çãøþ²²$`@2%   ÄáÄ#àÄ£%# %Ô<Ì2ü<Ì99999991üìôìôì9999999032655467&&554&##53233#"##FŒUZooZUŒFÙÚÈlŽ==ŽlÈÚÙmW¦œŽަŽWá¯ÁÍ–tßu–ÀÁ°Ù²ÛR#@ § §ÔÄ1ÔìÜìÀ990#"'&'&'&#"56632326Ûj³`k›^X¬bk²`k›^V©RôPE:=MSôPE:=Kÿÿ 'k'$u 'm!{@S!! ! !%!®â !  UU "ÔÄÔìÔî9999999991/<ÆæÖîî9990KSXííííííííY"K° TX½"ÿÀ""@878Y@À/!/!:!o! ¶ ¶º·°°°·ºº¿¿¿º¿!¿! # ///  /// "+ #EKUZ` ` ` ooo``ooo`fi `#tuyz{t …Š…Š •š° ° ° ° ¿¿¿¿°°¿¿¿·°³¼ D]] !!!.54632%32654&#"!þ}^ý¦_þ}§vt¨þwM66MN56MJ™Ì¸úHþð¸"K+u¨¨u/L{6MM66MMûŸRÿÿfþo\ð'&Ýsÿÿ¼ák'(´uÿÿ¼öm'15uÿÿfÿãfk'2Nuÿÿ¼ÿãÃk'8'uÿÿXÿãÅf'DºÿÿXÿãÅf'DCºÿÿXÿãÅf'D׺ÿÿXÿãÅ1'DŽºÿÿXÿãÅ9'DغÿÿXÿãÅ'DܺÿÿXþo5{'FݸÿÿXÿã f'HÙÿÿXÿã f'HCÙÿÿXÿã f'H×ÙÿÿXÿã 1'HŽÙÿÿ¬f'ÖÿwÿÿÿÕf'ÖCÿwÿÿÿþðf'Ö×ÿwÿÿ<²1'ÖŽÿwÿÿ¬9'QØòÿÿXÿã'f'R×ÿÿXÿã'f'RC×ÿÿXÿã'f'R××ÿÿXÿã'1'RŽ×ÿÿXÿã'9'RØ×ÿÿ ÿãf'Xòÿÿ ÿãf'XCòÿÿ ÿãf'X×òÿÿ ÿã1'XŽò5ÿ;ÃÕ *@åã ä WV W Ô<äü<ä1ä2ôìî20!!!!!5!VJ#þÝþ¶þß!ÕþƒîûÑ/î²dLþ @æçæ  XYXÔìüì1Ôìüì0"32654&'2#"&546HdcIHdeGBz0/11-0|D¿Á\dHHbcGHd¢3/0xDCy-03¿Á®þlj˜#W@. ÌÔ ÌÔ ¡ ¡!ʘ$   B$ÔüÔ<<Ä2ì22991Ääô<ìÄþôîõî9990&&##667###$4%3¾NMMNËJAY—9S’: ¢þúþö¢G“Z,“lm”*9þÜ02ýi2/þÛ þä (.ô##þá}çð@@!–• Ÿ¬œ ¬ Ô<ÄÄü<ÄÔÄ1/Ä2ì2ôìî2õî990&&#"!!!!3#5356!2ÛF”Mvquþ‹û–ãÂÂþ\µºþâ'&}ƒªïþºþö Fïªøÿ=øð3?k@8@1:4 %+èè1œ@ =!+%74:!=\.!\=[.7[(@ÜÄìÄÔÄìÔìî9999991ÄôìþÅÅ999990&&#"#"&'532654'&'&&5467&&546326654&ucž9KL¼ ÒŸquMKòÕUµfs¶9AN´$Ë oqKAåÉT´þšDC{¶AFжã''1/CO Y­}uŸ0)qI‘§í)+2(FJW³‚hš33oK¢ý…L2CbBO4Cj'‘ö`·é ]Ôì1Ôì04676632#"&'&&'535‚IIƒ245633ƒJI‚326úJ‚235624IJƒ336633ƒÿ;dÕ &@ ^^ÔìÔìÄ91Ä2ôÄÌ0!###&&54$\¾½¾ÌÞÕùfùùNÛ²¾è¬ÿãh0j@4.(" !+ŸŸ+Ÿ£˜/"!(%  a%.(a_ . 1üìÔìôìÝî99991/äþîþÕî990@ /2O2p2Ÿ2]4$! #"&'532654&/.5467.#"!¬ —1]EtkåçAŠJ8s6HX7bFXT‹‘`[efþšZÞÜàÚG NJ%94%@©u½¼ôH9/D7'1‡Ztž2UYnmû´åÍ 4Lb@8-*+'î0î!ëæ5í æ2+ëA'*,$0-+$!1g3f$cX;eX3cGMÔììüìüìî299991/ì2îþîüîÖî9990"32676654&'&&#32654&'2#'&&###2#"$'&5476$yÐWWWWWVÑy{ÎWWWWWXϲ##NOM+°®i`)Goåk&: Õ1˜mmllmmþù˜˜þùmmllmm3WWWÏzyÏWVVUWWÏyzÏWXVþÙÏ5442ŠwyVpP:ÝÕNAþœD7nmmþúš˜þûmmnnmm˜šmmnåÍ1IH@(  ïïëæ2í&æë>f,X c8e XhDJÔììüì2ìî1/ìîþîüþÅþÄ990&&#"3267#"&54632'"32676654&'&&'2#"$'&5476$+9o9q~r@s.Aƒ>ÓþþÓE€îyÐWWWWWVÑy{ÎWWWWWXÏy˜mmllmmþù˜˜þùmmllmmf×%#€rs~$#ÕêÂÃé·WWWÏzyÏWVVUWWÏyzÏWXVšnmmþúš˜þûmmnnmm˜šmmn'“RÕ v@>  %  î  ji i jiÔìäÔìÔìä91ô<<ì2Ô<<Ä9990KSXÉÉÉÉY"73#######5ww㪉L‰¬q®¬¬Õããý¾µÿþKBþM³mî¢f7·ÆÅÔÌ1ôì0K° TK°T[X½ÿÀ@878Y´]!#‡þÄfþˆÅ;;1\@ñðÔüÔì1ô<ì20K° TK° T[K°T[K°T[X½@ÿÀ878YK° TX½ÿÀ@878Y3#%3#Åëë‹ëë1öööÙÿöÛ =@!   §¶ §  Ô<Ä291Ô<ì2ü<ì2.À990!3!!!'7#5!7!Ùü•‘ëþ^®Püêü–’쨰ý¨Û1}´ëÜíþϲíÜÕ¡@7%À ®À ¾ À  /ÔÄÄÔ<ì291/<Äìôäìîî90KSXííííY"K° TK° T[X½ÿÀ@878Y@&W††³³µµ ] !!!!!!!!!{ÿyþ}‘ýsfýš¤ûÛþ“þÕýžbþÝþêþÝþªþÝ^þ¢-ÿ¶– +è@> +,   )*&®& ®œ&˜,+,* # )-#7-+,üìüìÀ999999991äôìîÀÀ99999990@p- -*'&!/-976!9)?-GYVT!Y(Y)jege!j%j($'))68)KFE I)Z^SVV T!V"[(j ejlaf c!k(x ™ ˜ ª ]]3254&/.#".5!27!"&''\4ƒS±ÂM3‚R°ÂþêJJ™gšøfÇqÉMLþhþ˜™ÿfÊqs>;ëDu1“:9þüì@q.þêdú—kœKMÇsÇcÿšþ–þdOOËqúé /B@#  $'!ó-ôó!ò0 $k*k0ÔìÔì99991üìü<ìÀ999032654&#"&&#"326#"&546326632#"&¼+vIZqgLHwþñ+tKZqfMGz©DŸa‹Æ¯ŒZ™cGž_ŒÅ¯Œ[–1CDeOMeeCCdOMeia‚~ó³¼êq„~ò´½ënÙÛ .@õ§õ  § l l Ô<ì2ü<ì21/ìÔ<ìü<ì0!!#!5!!!Ñ ýöîýö ýöúþþžìþžbìbûêîÙÛ¨ '@  § ö Ô<Ä2291/äüÌ90%!55ÛúþüúþîîîÆÑÑóPëNÙÛ¨ '@ §ö  Ô<<Ä291/äüÄ907!!55%Ùúþúþîî´ôþ²ëþ°óÑyÕ´@B  % ÷ ÷   nm n mÔ<ì2ìü<ì2ì999991/ä2Ô<ü<Ô<ì290KSXííííY"²]@, $+6:FI   0@€€°° ]]!!!5!5'!5!! !!!!Nþ9þƒþ:Æ1þk$þ±! þ°%þj1Ç þ` ÂBVÀþ3ÍýåÀVB®þT¢` :@! Û˜ ³Þ!   !üì2ÜÄì91ää2ô<ì990!3265!3267#"&'#"&'®idfgdh!'!5]-Yq#/‡YJhþT ýutqqt‹ýG8 úKSOO/0þ;ÿçR)8@'! '!ù* $$*ÔÌÜÌ9991äÌÜÌÎÎ9906654&#"#"&54632#"&54324&#"32þ;'#ÂS0@ºÒõþ»ÿ¶êï³e‹ID`IFa~¬qº9WzºC2Eqþ¾þèþ¨þGé·Ë Uór|þïÒtx)þw“Á O@  ûûú  ÔÄÜÄÄ91Äüìî990@ &#)  ) ( ) 8 ]]!! !!5 Bü’lý’¥ú–ºý_Áþ÷ý{ýNþö¬²–þw²Á@ýüúppÔìÔì1üìì20!!!!–þ¨ý”þ¨Áø¶)ù×ÿÝJD/@    ÔÌ991/<ÔÌ22990#!#!#"663J'°šþá˜î—þá˜7: Õ¼ÙDàüœdüœd>DÇœ3þ‹°,B²*#¸²ÿº @ÿþ- *(&  qr q-Üìüì991üììüìì9026732#"&54&#"#"&54632jcãìi‚RA@Ae '&>ÄkTF32°-üÓÓ…hB:Yr õ7Œ^‘¤Òâ‰YUW¦O\©KàØ=ÈÄ4>3:rWTþ@LH†t„8;##´¯uuð 9A  @œ  uu ÔìÔì991ôìôìüì02#"&546!!"32654&BÕ÷öÖÖ÷÷Æ7üÉœT[[TS[[ðÞ¾¾Üܾ¾ÞüMÈÑ~tt||tt~7îåF³ ½  @  xwx w ÔììÔììÀÀ9991/<ì2üì990!!654&#"!!&5! Ë#ýŸ~„˲±Ë„~ýŸ#~zx89xzÿ#V¥Ëééˤþ÷UþÝy¤9yþ‡þǤþêXÿã{>Ì@B8>6Ò6Ø'Ì&Ô# Ÿ6Ï-*Ì>Ë;Ÿ×Ê0*˜? - 6 & 7 3;?üÄìÔü<ÔìÄ999991ä2ô<Ääü<ôìÄæþ<ôîîî9990@N>>?@MMO@^^_@nno@@@­­½½2=0>B=@>R=P>b=`>ƒ=€>’=>¤= >²=°>]]4&#""326=>32>3 !3267#"$'#"&54$!354&#"w`g€ýápq[QeŠý^wßa–ÙGMÌz =üº›qí}ÿ~³þ÷Heß‹Ââ"Ó†ŽsÆUªf}un²LJDM‘m)JMOMOþÂþöf~~CDþì01kdkdŨŸUO..Nÿ¢)Á +¸@> )+ *& ¡&¡Ê&˜++, #* #)B#LB;,üìüìÀ999999991/äôìîÀÀ9999990@@:5 ;75!8)?-IF KGD!H)[VT!U(ikfe!e(5:)EJ)U^(i em( ]].#"32654&'.5!27!"&''XK/w}HO0u|ý;CDG"j³K“mFEþ»þßl¶M”pD«¡)A‹«¡+CýäNÈ{8,,že•PÊ~þìþÈ--›^ÿãÕ!M@*‘• Œ‹ ¡˜ "  "ÜìÔÔ<ì299991äôìþíôî9990!3267#"$54677665%!!çiAm@84`VQ½ewË\ôÿN^@D*iþ—iÛ1Q~d:3\/FPDBþÆ*(Ǿc›X:=L-Ãd‡Õ @Œ‹ Ü<ì2991/ôüì0!!!33þ˜h=¢þ^ýÃqdþœÙÛ@ §ÔÔì1ÔÄì0!#!Ùëûéý’Lÿ×Z² n@*      %  º@  ÔÄ91Äüì90KSXÉÉÉÉÉÉY"3##'%ƒ×`ý²wþÍ‘%hß²•ùºN7ý…þV7#w@I #"!   %  ¬”¬” ŸŸŸ!£Þ$Ä2äüìîî2õîõî99990KSXí9í2Y"&&#"!!#"&'53267#5!766327.T*Zd!þ´…)å¿A…D.U)Ycuò!3*ã¾B„ìþs¨îý_ÎÌþsMîüÎËÙáÛ#;C@!.9* 1§ §"§9*§1<-<Ô<Ä21ÄÔìÜìîÜîÀ9999990#"'&'&'&#"56632326#"'&'&'&#"56632326Ûj³`k›^X¬bi³an“ ›^V©gj³`k ›^X¬bk²`k›^V©#ôPE:=MSôNE;=Kþ³ôPE:=LTôPE:>K“Á ²¸ @ ú/Î91/îî90!!!Éþºþ#-3úmVüªÁú?ž‰j' 5³  »@  y yÔü<Ôì2991ô<ì299055‹þÛ%þÌþÜ$þ'òÝÝòqºsòÝÝòqºÁ‰' 5³  »@ yy Ô<üÔ<ì991ô<ì29905-5%% íþ%þÛþ!ëþ$þÜ'þºþòÝÝòþºþòÝÝ¢^ƒ #@¨   ÜüÔüÔì1/<<ì220!!!!!!öhþ˜ú¬hþ˜ªhþ˜ƒþ}ƒþ}ƒþ}ÿÿ 'k'$uÿÿ 'm'$uÿÿfÿãfm'2NufÿþÁ×P@" À¾ À À   -+ üìÔÄÄÔì299991/ì2ôì2ôìÀÀ0@ !!?!O!_!]# !3!!!!!!"# !2œiþßþâ iZhýsfýš¤û / þFþ&Úº 0²âäåä²þÝþêþÝþªþÝ…ihƒXÿã^{'3t@2" ØÌÔ Ÿ.¡(¡×Ÿ%ʘ4"1 1 +B;4üìÔüÔÄì9991ä2ô<ìäìîþôîî9990@/5?5O5O5_5o5o55F"]]4&#"!3267#"&'# !2>3 %"32654&îw`h‚Aü» œŒqí}~ÿ~¥ÖHRÕ‚þÞþ¹G"†ÎQRLJBúcw}}wu||ªf}unwf~~CDþì01QWTT88RVWQþÆ:«¡¡««¡¡«°²¹´ª/Æ1ôì0!!ü²þþ°²¹´ª/Ì1ôì0!!ø²þþÓX…Õ +º@    ÜüÌÔÌþÔÎ1ô<ì20!3!3!þ¬ãÕdþþ¬ãÕdXbþžþå`þ ¼XoÕ +º @  ÜìÔÌÜîÔÎ1ô<ì20!#!#!TäÕeúTäÕeÕþãþ `þáþ¢^ÓX‹Õ¹@ ÜüÔÌ1ôì0!3'þ¬ãÕdX`þ X9Õ¹@ ÜìÔÌ1ôì0!#åTãÕdÕþãþ `ÙVÛ® 0¼@ §¦ z{z Ô<ìü<ì1ôÄüÔìî0!!!!!!Á3þÍ3þÍþúþ‹þËXþËìþ#îuv@A%ÔÄ91ÜÌ990KSXÉÉÉÉÉÉÉÉY" úþþôþ þ üÏüÇ9%ûÛûÓ-ÿÿþF1'\Žœÿÿÿìßk'<Íuþhÿãîð+@55%˜œÔÌ1ää0KSXííY"#3¸à¦à J=ÏÅ#/@ ! ! $A !* @&00   '}|~-} |0Üìì2üìì29999991Ôìì2üìì2À999990'7&&5467'766327'#"&72654&#"²Ï™ÏÑ™Ï0l=6l9ϘÏÏšÏ.j?:l¦[€\[€~ ÏšÏ1k??l.ÍšÏÏšÏ7n6?i/ϙζ\\\]~ž‰‹'¼¶yÔì291ôì905‹þÛ%þ'òÝÝòqºÁ‰®'¼¶yÔ<ì91ôì905%%Áíþ$þÜ'þºþòÝÝ+Bu@& ¡Ý Ÿ£ ³    ETü<ìì2ô<ü<Ì991/<ä2ü<ìíî2990K°TK°T[K°T[K°T[X½ÿÀ@878Y´@€]!!#"!!!!#35463Ùiþ—JÆK:þþ—þkþ—°°ÌÖþÜ$ë7DNû `ü `N·¯'Bl@! ¡ Ÿ£ ³     ETü<ìì2ôüÌ991/<ä2üìî2990K°TK°T[K°T[K°T[X½ÿÀ@878Y´@€]!!!"!!!#3546{Çþ—þîL<þçþš²²Ìùì)7DNÿü `N·¯3ÿ;ÃÕ?@!å å ãä W VW Ô<<äü<<ä291ä2ôüÔ<ì2î20!!!!!!!5!!5!VJ#þÝ#þÝþ¶þÝ#þß!Õþƒîþ<îþƒ}îÄîÑ9‰·üì1ÔÌ0!!Ñhþ˜‰þ}“ÿLƒ¹@ ¨ÜìÔÌ1üì0!#øTæÓeƒþãþ `“ÿFƒ +º @¨  ÜìÔÌÜîÔÎ1ü<ì20!#!#øTæÓeúTäÕeƒþãþ `þáþ¢^Bÿã Vð #/3?K|@C3 2211 003%@ *™$F4 ™:0˜2$œL3IC1!  C=!'= I7' -LÜäìÔÌìäîîîöî991ä2ô<<ä2ì2îöîî20KSXííY""32654&'2#"&546"32654&'2#"&546#32#"&546"32654& ÇHNNHGLLGºÕÖ¹ºØ×øÅHNNHHMNGºÕÕººÕՇݥ޺ÖÖºº×׺GNMHHLMh{rs{{sr{¨Ø½½ÛÛ½¼Ù8|rs}}sr|¨Ù½½ÚÚ½½Ùùó ý ؽ½ÛÛ½¼Ù¨{rs{{sr{ÿÿ 'k'$uÿÿ¼ák'(´uÿÿ 'k'$uÿÿ¼ák'(´uÿÿ¼ák'(´uÿÿ¼²k',ÿduÿÿÿëÝk',ÿduÿÿ)Ÿk',ÿduÿÿ=k',ÿduÿÿfÿãfk'2Nuÿÿfÿãfk'2Nuÿÿfÿãfk'2Nuÿÿ¼ÿãÃk'8'uÿÿ¼ÿãÃk'8'uÿÿ¼ÿãÃk'8'u¬`·ß üì1/ì0@ P`p€]!!¬fþš`û ‡îyf6@ ÆÅÔÌ91ôì290K° TK°T[X½ÿÀ@878Y3#'#‡ò²ÇDzfþˆáá¤\9É@  ¼@ Å€€ ÔìÔì99991ôìüì9999990K° TK°T[X½ÿÀ@878Y@T              ( ]]'&'&#"#4632326=3#"&7/$&‹g]$I)=%$(‹g]$CT%>;ˆ”+@9ˆ”ÅX;EµÔÄ1ÔÌ0K° TK°T[X½@ÿÀ878YK°TX½ÿÀ@878Y!!Åvýм°PF i@  ÔìÔì1Ô<ÔÌ0K° TK°T[K°T[X½@ÿÀ878YK° TX½ÿÀ@878Y@]332673#"&° cSSc ®œœ®FFJJF™™w;‰1*·ñ‚Ôì1Ôì0K° TX½@ÿÀ878Y!!wþî1öãá C½ @ ƒ:ƒ Ôìüì1Ôìüì0K° TK°T[X½ÿÀ@878Y32654&#"4632#"&}M67LM67Lš§vv§§vv§þ7LM66MM6v§§vv§§þoË5@   ÔÔÌ991/ÔÌÔÌ0K° TX½ÿÀ@878Y!#"&/32654&'Z:7{0f42S!:A+->j/_[ ˜.(R<ÁîÕfE@ÅÔÌÜÜÌÌ991ô<Ì20K° TK°T[X½ÿÀ@878Y3#3#ƒÙø£-çþð®fþˆxþˆVþo@   ÔÄÌ991/ÔÌÔÌ0!33267#"&546Å2&;1'M(7^)s{6CI'1œ \V5m‡îyf6@ ÆÅÔÌ91ô<ì90K° TK°T[X½ÿÀ@878Y 373‡ÿ²ÇDzÿîxããþˆÿ¤ìÕ `@2 % À   „ü<ü<Ä.9991/äì90KSXÉÉÉÉY"!7!!'%Çþþs¤ûÛ”#Õþ`¹ÁþðþþÝ j¾ÅÿÛ ~@-   % £   T ü<ì2.À991/ì90KSXÉÉÉÉY"² ]@utƒ@ P ` ` tp p €€ ]]!7!'7Çhoðþ˜}oìþ Xš¤üÇVš£ÿÿ“ÿã-k'6Éuÿÿjÿãbf'Vàbÿÿ\qk'=Ïuÿÿ\Ff']àTþ¢ç˜@ Ô<ì21ÄÔÄÆ0##çããã˜ý öüý ö!LÕ •@¹À À  -. „ ü<ì2ÄüìÄ91/îöîÖ<î20@X!P!`!////////OOOOOOOO________ŸŸŸŸŸŸŸŸ¿¿¿¿¿¿¿¿(]]3#32654&#! )#3Pëë‰ìùøíýö•ULxhgghyþ°þ°þk®®²þ¿þüþ¶êßÞè#ateþø§©þ÷etamXÿã'(õ@Y&'('%$%(('"#" ! "! 5((5(%('&%"! ##¡ ¡˜#£)'& !#(%" BB;)üìÔì99991ìÄôìî9990KSXí9í2ÉÉÉÉY"K°TK°T[X½)@))ÿÀ878Y@6f!/*76"?*O*oooooooooo]].#"32654&! 4!2''%'!%˜7l4u‚ru| £ujþ»þßþÞþ¹-.N$¾þ‹%3¼`ox#þÅç…y”¨«¡-\”ˆþÿ”þìþÈ8ç ÛwaÊtr`ÿÿÿìßk'<ÍuÿÿþFf'\œ¼‰Õ Œ@® ® - üì22Ôì99991/äÔìÔì0K° TK° T[K°T[K°T[K°T[X½ÿÀ@878Y@,0000PPPP    °°°°]]!!3 !32654&#=þþ1þÏþãþÕpzzpþþÕþüýëêýºþ]mcen¬þV^;@¡Ð¡Ð˜ÊÞ£B @ üì22ôì1ìääôäìæî0´O`]%!!>32#"&"32654&þšfJ´uÏ þöÏu´¤s{{ssyy¢ý´¾ý¨b]þ·þýþýþ·]7©ŸŸ©¨  ¨Ù Ûø·§¦ÔÄ1ôì0!!Ùúþøì)´Û /@   Ô<Ì291Ô<Ì290 '7´þN²¨þNþN¨²þN¨²²3þNþP¨°þP¨°²¨þN²{œß 7´¾  @ š …†… ÔäÄüä1ôìÔìî29035733!ÏáåâÌý9 4 1ýZmœð]@% ¸ ² º"@œˆÜÄÔÔì9991ôìüÄî9990KSXÉ9ÉY"!!56654&#"56632œrý_9=4I;>ŽTW£Kž´GeD¨™ 5P(2>-/ºoHyVZð(W@ #  ¸"²¼"#@#œ)ˆ&ˆ )ÜÄÄÔìÔì9991ôììüÄþÅÎ9990#"&'532654&##532654&#"56632P\fÆÉQ”DB€<_hkrJTbZNP4{FA—W§±Z`nQ®$%@;@=‰/3--¦piE`dÿã¨ð ›@     %¸²¾´œ ¸@˜œ    †…†…Ä2ÔÄäüäì2ÄÆ9991/æäîÄ2öîÖîî2î2990KSXÉÉííY"333##5!5#335733!9ïïø‰‰æþyþ+ߦßùôÍàæßÍýþ¼ýù›¢¢¨þ™ ýI 4 1ýZdÿãåð'¬@   %!   ¸$²$¾& !&²"œº@ ˜œ#ˆ%…#†… (ÄÔÄÔÄÄäþäî9991/æäîîöîÖîî2þÄ99990KSXÉ9ÉííY"%!!56654&#"56632#335733!qtý];>3J<>‹UX¡JŸ³Icûªß¦ßùôÍàæßÍý¨¨š 5N'2?-0»oH|Tþ• ýI 4 1ýZhÿã¨ð 6:Á@ : 9988 77: %.1* #! ¸´#!¸$²-*¼$!#µ91œ7˜¸@$$8'" :!'"4  †'ˆ4ˆ-";Ä2ÔÄÄÔìÔìî2ÄÆ9999991/Ä2îäö<îîþÄþÅÎî299990KSXÉÉííY"33##5!53#"&'532654&##532654&#"56632#3'ø‰‰æþy‡ïïü%]fÇÉQ”DB€<_hjsJTb[OO5zGA˜V§±Z-ߦßDýù›¢¢¨7þ¼#nQ®$%@;@=‰/3--¦piE`ûq ÿÿfÿãúk'* 1uÿÿ\þFF'JÚÝÿÿ¼=k', ÿduÿÿ“þo-ð'6ÝÝÿÿjþob{'VÝbÿÿfÿã\k'&fuÿÿXÿãuf'FÓÿÿfÿã\k'&fuÿÿXÿãLf'FàÓ\ÿã¨$Kº%@" ¡Ð¡ Иʣ    @"B;%üìô<Äü<Ä1/ìäôäìäîÝ<î20²O&]!5!5!3#!5#"322654&#"¦þºFhššþ˜J²uÏþö Ït³¢syysryy¼ÍrrÍû+¢c\II]üɨ  ¨¨  ¨o¼ãß·«ªÔÄ1ôì0!!otýŒßþÝÑ9‰·üì1ÔÌ0!!Ñhþ˜‰þ}ÿÙÿãð1r@;.*÷(÷1.®®œ˜!2*("%!) 2 +) )% 2ÔÄ2Ä2üÄÄ99999999991Ä2äôüÄþÄî2Ý<î2990%# '#73&&5467#736!2&&#"!!!!3267_Ïpþúþ™KÙXbºXMepÏ_Q¸c³-Vþ­YþÕ2¯~cµTR78õà Ãö87þËNO{vÃ$$ ÃzzOOÅ;ö@ ñÔüÔì1Ô<ì203#%3#Åëë‹ëëöööömîNö8µÔÄ1ÔÄ0K° TX½ÿÀ@878Y@ //]!#3þãÄöþø¤î\ø#Ã@  »@! $ €€ $ÔìÔìÀ999991Ô<ìÔì29990K° TX½$ÿÀ$$@878Y@\             ##+]]'&'&#"#465463232653#"&8- (‹kW%J';'%'‹kW&F#<2j‚'<9j²î“ö8µÔÄ1ÔÄ0K° TX½ÿÀ@878Y@ //]#ÍÆÄþãöþø‡îyöE@ ÔÄ91Ô<Ä90K° TX½ÿÀ@878Y@/// ]!#'#f4ß²ÇDzöþø¡¡‡îyöK@ ÔÄ91ÔÄ290K° TX½ÿÀ@878Y@//// ]373fß²ÇDzßþø°îPö S@  ÔìÔì1ÔÄ2Ì0K° TX½ÿÀ@878Y@///// / ]332673#"&°`LL`¬””¬ö=<<=‡‡w‰ö*·ñ‚Ôì1Ôì0K° TX½ÿÀ@878Y!!wþîöö  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßà>: ~ÿ1BSax~’ÇÝ©À & 0 : ¬!""""+"H"e%Êûÿÿ   0AR^x}’ÆØ©À  0 9 ¬!""""+"H"`%ÊûÿÿÿãÿõÿØÿ ÿ^ÿCÿhÿüöüÛà–à…àVßjÞqÞ_Úï¿8ôüúúü (B¬£„…½–熎‹©¤ŠÙƒ“ñò—ˆÃÝðžªóôõ¢­ÉÇ®bcdËeÈÊÏÌÍÎèfÒÐѯgï‘ÕÓÔhêì‰jikmln oqprsutvwéxzy{}|¸¡~€ëíºýþÿøÖùúãä×àÚÛÜßØÞ²³¶·Ä´µÅ‚‡«˜¨š™î¼¥’”•ÍfÉɦ+ô‹‘ Bú{sè°¨¤/)´Ù mRo Ñì‘b‘ç‘¢‘‰‘\‘ž‘‘‰‘}‘j3å3´Ù´Ù´Ù¤‡1 ¼ßf¤¼w¼w¼‘f²¼ú¼úÿ3¼¼ö¼²¼ÍfݼÍf)¼Óu ¼1 Ó=+'ËÿìÍ\¨°ì¨‹´Ï^fXº¬¾Xº\mX{'º\²¬¾¬¾ÿ¼R¬¾¬Vª²¬Xº¬º\ò¬ÃjÓ² 7dH)7¨\²ì²´Ù1 1 ßfw¼²¼Íf¼fXfXfXfXfXfX¾XmXmXmXmX¾¬¾ÿÕ¾ÿþ¾<²¬XXXXX² ² ² ² 5²‘®‘}'Á¬'mÅ´Ù®Í-ªÃ´Ù´Ù´Ù‘ã®Z;¾)L–'ÿÝá3ƒžƒu'7bXN¤¦´ÙVL‘´Ù“+ž+Á¢‘1 1 Íf VfÁXBÓB¼ Ó ´Ùô7ËÿìVþhJLžLÁî+î'3 Ñ “B“ …B1 w¼1 w¼w¼ú¼úÿëú)úÍfÍfÍf¼¼¼¾¬‡¤Å°wãÁV‡#ÿ¤øÿÛÓÃjÍ\¨\ì´!XËÿì7缺¬´Ù´{mZHdHdHh‘fº\ú¼ÓÃjßf¾Xßf¾Xº\Ro Ñ‘ÿÙÅm¤²‡‡°wÿ   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóõôöøùúûüýþÿ    sfthyphenperiodcenteredEuroc6459c6460c6461c6462c6463c6466c6467c6468%%%%NqÓ]ÜÆÞ 6©ÇÞô N{òU•å?uã<_НÐóOû ¡ K Á í G € © è E a ç > ‡ Ä*Ÿ2e¡àç:\u—¹ÍÚ#pÅ|¿è$†£ZŸí<~*‰ÑZ@!âIªÀ"dqjw„‘ž«¸ÅÒßìù   - : G T a n { ˆ • ¢ ¯ ¼ É Ö ã ð!!]!È""¨"Ú##†$.$Á%!%K%‹%Î&H''n'¥'Ô((Š(Ú)6){)ž)Ø*<*Ê++p,5,Ú-8-a-}-Î.B.½.ä//\/Œ/Œ/™/¦/³00¢0¹0Ð1161U1t1¨1ü2 2292É2ì33v3Ò44-4L4~5*575D5Q5^5k5x5…5’5Ÿ5¬5¹5Æ5Ó5à5í6 676Ê6ú7H7k7³7ï8'8W8†8Ô9-9:9G9T9a9„::Ç:Ô:á;O;ž;´;í<ª>·>Ä>Ñ>Þ>ë>ø?????–?­@4@T@AA@AuA­AðB‚ 7þÓ9ÿk:ÿ¤;ÿY<þÓ»þÓêþÓ$&$&$&$&$7ÿa$8ÿÁ$9ÿu$:ÿ¤$<ÿ<$Yÿ·$\ÿ·$hÿÁ$µÿD$·ÿD$ºÿ·$»ÿ<$Är$År$ÓÿÁ$ÔÿÁ$ÕÿÁ$êÿ<$ëÿ·%9ÿ­%:ÿ%<ÿ%»ÿ%êÿ&/&6&&µK&·K&ã&&ù&'&'<ÿk'»ÿk'ÄÿÜ'ÅÿÜ'êÿk)þ·)ÿÁ)þÓ)ÿ)ÿ)$ÿ)Dÿˆ)Hÿ­)Rÿ­)Uÿ})Xÿš)\ÿ)bÿ)iÿˆ)jÿˆ)kÿˆ)lÿˆ)mÿˆ)nÿˆ)pÿ­)qÿ­)rÿ­)sÿ­)yÿ­)zÿ­){ÿ­)|ÿ­)}ÿ­)~ÿš)ÿš)€ÿš)ÿš) ÿˆ)¡ÿ­)­ÿ)®ÿ)±ÿ­)·&)ºÿ)Äþ­)Åþ­)Çÿ)Éÿ)ëÿ*7ÿÜ*<ÿÓ*»ÿÓ*êÿÓ.ÿN.&ÿ¤.2ÿ¤.8ÿÜ.HÿÜ.RÿÜ.XÿÜ.\ÿ}.dÿ¤.gÿ¤.hÿÜ.pÿÜ.qÿÜ.rÿÜ.sÿÜ.yÿÜ.zÿÜ.{ÿÜ.|ÿÜ.}ÿÜ.~ÿÜ.ÿÜ.€ÿÜ.ÿÜ.‘ÿÉ.¡ÿÜ.¯ÿ¤.°ÿš.±ÿÜ.ºÿ}.Ä&.Å&.Ðÿ¤.Ñÿ¤.Òÿ¤.ÓÿÜ.ÔÿÜ.ÕÿÜ.ëÿ}.ûÿ¤.ýÿ¤/2ÿ·/7þ­/8ÿ·/9þæ/:ÿa/<þÁ/\ÿu/gÿ·/hÿ·/‘ÿ·/¯ÿ·/°ÿ·/µþ/·þ)/ºÿu/»þÁ/Ðÿ·/Ñÿ·/Òÿ·/Óÿ·/Ôÿ·/Õÿ·/êþÁ/ëÿu2ÿÓ2&2ÿÓ2$ÿÉ29ÿÉ2;ÿ·2<ÿ·2bÿÉ2­ÿÉ2®ÿÉ2»ÿ·2ÇÿÉ2ÉÿÉ2êÿ·3þˆ3ÿÜ3þˆ3$ÿD3DÿÉ3VÿÜ3\&3bÿD3iÿÉ3jÿÉ3kÿÉ3lÿÉ3mÿÉ3nÿÉ3 ÿÉ3­ÿD3®ÿD3µ&3·93º&3Äþa3Åþa3ÇÿD3ÉÿD3äÿÜ3ë&3úÿÜ4&5&5&57ÿ¤5<ÿ5\ÿ¤5ºÿ¤5»ÿ5êÿ5ëÿ¤66ÿ¤6ãÿ¤6ùÿ¤7þÜ7þÓ7þÉ7ÿ7ÿ7$ÿa77/7Dþø7Fþð7Hþð7Rþð7Uÿ7Vþð7Xÿ7Zÿ7\ÿ 7bÿa7iþø7jþø7kþø7lþø7mþø7nþø7oþð7pþð7qþð7rþð7sþð7yþð7zþð7{þð7|þð7}þð7~ÿ7ÿ7€ÿ7ÿ7 ÿ<7¡ÿa7­ÿa7®ÿa7±ÿa7ºÿ 7Äþø7Åþø7Çÿa7Éÿa7äþð7ëÿ 7úþð7üþð7þþð8$ÿÁ8bÿÁ8­ÿÁ8®ÿÁ8ÇÿÁ8ÉÿÁ9þø9ÿk9þø9ÿ¤9ÿ¤9$ÿu92ÿÜ9Dÿ9Hÿ9LÿÜ9Rÿ9Xÿ·9bÿu9gÿÜ9iÿ9jÿ9kÿ9lÿ9mÿ9nÿ9pÿ9qÿ9rÿ9sÿ9yÿ9zÿ9{ÿ9|ÿ9}ÿ9~ÿ·9ÿ·9€ÿ·9ÿ·9‘ÿÜ9 ÿ9¡ÿ9­ÿu9®ÿu9¯ÿÜ9°ÿÜ9±ÿ9Äÿ9ÅÿD9Çÿu9Éÿu9ÐÿÜ9ÑÿÜ9ÒÿÜ:ÿY:ÿ¤:ÿY:ÿÁ:ÿÁ:$ÿ¤:Dÿ·:Hÿ·:Rÿ·:UÿÜ:bÿ¤:iÿ·:jÿ·:kÿ·:lÿ·:mÿ·:nÿ·:pÿ·:qÿ·:rÿ·:sÿ·:yÿ·:zÿ·:{ÿ·:|ÿ·:}ÿ·: ÿ·:¡ÿ·:­ÿ¤:®ÿ¤:±ÿ·:Çÿ¤:Éÿ¤;ÿY;&ÿ·;2ÿ·;HÿÉ;dÿ·;gÿ·;pÿÉ;qÿÉ;rÿÉ;sÿÉ;‘ÿ·;¯ÿ·;°ÿ·;Ä&;Å&;Ðÿ·;Ñÿ·;Òÿ·;ûÿ·;ýÿ·<þ­<þÓ<þ­<ÿN<ÿN<$ÿ<<&ÿ·<2ÿ·<DÿD<HÿD<RÿD<Xÿk<bÿ<<dÿ·<gÿ·<iÿD<jÿD<kÿD<lÿD<mÿD<nÿD<pÿD<qÿD<rÿD<sÿD<yÿD<zÿD<{ÿD<|ÿD<}ÿD<~ÿk<ÿk<€ÿk<ÿk<‘ÿÜ< ÿD<¡ÿD<­ÿ<<®ÿ<<¯ÿ·<°ÿ¤<±ÿD<Äþˆ<ÅþÓ<Çÿ<<Éÿ<<Ðÿ·<Ñÿ·<Òÿ·<ûÿ·<ýÿ·=ÿÜD\ÿÁDºÿÁDëÿÁIÿIÿÜIÿIµVI·NHÿÉNRÿÉNpÿÉNqÿÉNrÿÉNsÿÉNyÿÉNzÿÉN{ÿÉN|ÿÉN}ÿÉN¡ÿÓN±ÿÉUþÓUþÜUµ&U·VYÿYYÿYZÿ}Zÿ}\ÿa\ÿDb&b&b&b&b7ÿab8ÿÁb9ÿub:ÿ¤b<ÿ<bYÿ·b\ÿ·bhÿÁbµÿDb·ÿDbºÿ·b»ÿ<bÄrbÅrbÓÿÁbÔÿÁbÕÿÁbêÿ<bëÿ·d/d6&dµKd·Kdã&dù&gÿÓg&gÿÓg$ÿÉg9ÿÉg;ÿ·g<ÿ·gbÿÉg­ÿÉg®ÿÉg»ÿ·gÇÿÉgÉÿÉgêÿ·h$ÿÁhbÿÁh­ÿÁh®ÿÁhÇÿÁhÉÿÁi\ÿÁiºÿÁiëÿÁj\ÿÁjºÿÁjëÿÁk\ÿÁkºÿÁkëÿÁl\ÿÁlºÿÁlëÿÁm\ÿÁmºÿÁmëÿÁn\ÿÁnºÿÁnëÿÁÿÜ‘ÿÓ‘&‘ÿÓ‘$ÿÜ‘9ÿÜ‘;ÿ·‘<ÿÜ‘bÿÜ‘­ÿÜ‘®ÿÜ‘»ÿÜ‘ÇÿÜ‘ÉÿÜ‘êÿÜ­&­&­&­&­7ÿa­8ÿÁ­9ÿu­:ÿ¤­<ÿ<­Yÿ·­\ÿ·­hÿÁ­µÿD­·ÿD­ºÿ·­»ÿ<­Är­År­ÓÿÁ­ÔÿÁ­ÕÿÁ­êÿ<­ëÿ·®&®&®&®&®7ÿa®8ÿÁ®9ÿu®:ÿ¤®<ÿ<®Yÿ·®\ÿ·®hÿÁ®µÿD®·ÿD®ºÿ·®»ÿ<®Är®År®ÓÿÁ®ÔÿÁ®ÕÿÁ®êÿ<®ëÿ·¯ÿÓ¯&¯ÿÓ¯$ÿɯ9ÿɯ;ÿ·¯<ÿ·¯bÿɯ­ÿɯ®ÿɯ»ÿ·¯ÇÿɯÉÿɯêÿ·´$þø´-ÿ¤´<&´bþø´þÓ´­þø´®þø´»&´Çþø´Éþø´ê&¶$ÿ¶-ÿ¤¶9&¶<K¶bÿ¶þø¶­ÿ¶®ÿ¶»K¶Çÿ¶Éÿ¶êKºÿaºÿD»þ­»þÓ»þ­»ÿN»ÿN»$ÿ<»&ÿ·»2ÿ·»DÿD»HÿD»RÿD»Xÿk»bÿ<»dÿ·»gÿ·»iÿD»jÿD»kÿD»lÿD»mÿD»nÿD»pÿD»qÿD»rÿD»sÿD»yÿD»zÿD»{ÿD»|ÿD»}ÿD»~ÿk»ÿk»€ÿk»ÿk»‘ÿÜ» ÿD»¡ÿD»­ÿ<»®ÿ<»¯ÿ·»°ÿ¤»±ÿD»Äþˆ»ÅþÓ»Çÿ<»Éÿ<»Ðÿ·»Ñÿ·»Òÿ·»ûÿ·»ýÿ·Ä7þaÄ9þæÄ:ÿ)Ä<þšÄ»þšÄêþšÅ7þaÅ9þæÅ:ÿ)Å<þšÅ»þšÅêþšÇ&Ç&Ç&Ç&Ç7ÿaÇ8ÿÁÇ9ÿuÇ:ÿ¤Ç<ÿ<ÇYÿ·Ç\ÿ·ÇhÿÁǵÿDÇ·ÿDǺÿ·Ç»ÿ<ÇÄrÇÅrÇÓÿÁÇÔÿÁÇÕÿÁÇêÿ<Çëÿ·É&É&É&É&É7ÿaÉ8ÿÁÉ9ÿuÉ:ÿ¤É<ÿ<ÉYÿ·É\ÿ·ÉhÿÁɵÿDÉ·ÿDɺÿ·É»ÿ<ÉÄrÉÅrÉÓÿÁÉÔÿÁÉÕÿÁÉêÿ<Éëÿ·ÐÿÓÐ&ÐÿÓÐ$ÿÉÐ9ÿÉÐ;ÿ·Ð<ÿ·ÐbÿÉЭÿÉЮÿÉлÿ·ÐÇÿÉÐÉÿÉÐêÿ·ÑÿÓÑ&ÑÿÓÑ$ÿÉÑ9ÿÉÑ;ÿ·Ñ<ÿ·ÑbÿÉÑ­ÿÉÑ®ÿÉÑ»ÿ·ÑÇÿÉÑÉÿÉÑêÿ·ÒÿÓÒ&ÒÿÓÒ$ÿÉÒ9ÿÉÒ;ÿ·Ò<ÿ·ÒbÿÉÒ­ÿÉÒ®ÿÉÒ»ÿ·ÒÇÿÉÒÉÿÉÒêÿ·Ó$ÿÁÓbÿÁÓ­ÿÁÓ®ÿÁÓÇÿÁÓÉÿÁÔ$ÿÁÔbÿÁÔ­ÿÁÔ®ÿÁÔÇÿÁÔÉÿÁÕ$ÿÁÕbÿÁÕ­ÿÁÕ®ÿÁÕÇÿÁÕÉÿÁá2ÿ·á7þ­á8ÿ·á9þæá:ÿaá<þÁá\ÿuágÿ·áhÿ·á‘ÿ·á¯ÿ·á°ÿ·áµþˆá·þ­áºÿuá»þÁáÐÿ·áÑÿ·áÒÿ·áÓÿ·áÔÿ·áÕÿ·áêþÁáëÿuã6ÿ¤ããÿ¤ãùÿ¤åÿÜè&è<ÿkè»ÿkèÄÿÜèÅÿÜèêÿkêþ­êþÓêþ­êÿNêÿNê$ÿ<ê&ÿ·ê2ÿ·êDÿDêHÿDêRÿDêXÿkêbÿ<êdÿ·êgÿ·êiÿDêjÿDêkÿDêlÿDêmÿDênÿDêpÿDêqÿDêrÿDêsÿDêyÿDêzÿDê{ÿDê|ÿDê}ÿDê~ÿkêÿkê€ÿkêÿkê‘ÿÜê ÿDê¡ÿDê­ÿ<ê®ÿ<ê¯ÿ·ê°ÿ¤ê±ÿDêÄþˆêÅþÓêÇÿ<êÉÿ<êÐÿ·êÑÿ·êÒÿ·êûÿ·êýÿ·ëÿaëÿDö7ÿÜö<ÿÓö»ÿÓöêÿÓù6ÿ¤ùãÿ¤ùùÿ¤û/û6&ûµKû·Kûã&ûù&ý/ý6&ýµKý·Kýã&ýù& NE@í§mþ …þhþh V •¼GÌþBGÌSf €¯ JBits ûþšmãB³É`#cÕVeraSansBdÿÿÿÿ6ÿÿþ628B00@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               !                        !        #                     #        $                       $        %                       %        '                   '       (             !   (       ÿÿÿð_<õº¹Ìº¼–²þhþ Vmreportlab-3.5.34/src/reportlab/fonts/com_____.pfb0000664000175000017500000010343113607302650022514 0ustar rptlabrptlab00000000000000€–%!PS-AdobeFont-1.0: Courier 004.000 %%CreationDate: Wed Aug 26 16:50:01 1998 %%VMusage: 31569 38505 FontDirectory/Courier known{/Courier findfont dup /UniqueID known{dup /UniqueID get 44052 eq exch /FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontInfo 10 dict dup begin /version (004.000) readonly def /Notice (Copyright (c) 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved.) readonly def /FullName (Courier) readonly def /FamilyName (Courier) readonly def /Weight (Medium) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition -224 def /UnderlineThickness 52 def end readonly def /FontName /Courier def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44052 def /FontBBox{-6 -249 639 803}readonly def currentdict end currentfile eexec €O0P?b¾@¸9m¼ý`Ó©Dà»t-ŽšRZIà‘BCºÀwtk•…S`ïPúªH¤gµ°J»>©E[Ñ*Ü—ÜW™å¢rÈBå´sNåìЭSx—@¿‘z³‘8x/buãufŠ+Wñmm9º2ãÛá¶)6ïd§å|hÿ®@¦c›IFk×4Îëô™’"ù "‘çX‚Ö—ã´qÑBWß­GÝ]÷öéÿòò@.žo ´¡”÷(€²¡,^3)}G:f£*1% {‚ŸgDÇ«t·7Ë3뵯´¿Áî™§jSªà}~ÊpêPKK”¤Èz6šÉ8ä•ÃD½ÄtÓpزæ¡Ôë…>åw;ëâJñ°Þm`pÚŠÎ9ÈŸFNh@DN;ø Ábù€Å­h‚¤¹æ°çãÄi˜Ô4P­ )àf–‚†@µä˜R‰€NDÊ/gÿ¬d¸£ŸÓ¡* bå› éVúêVN7j°Ó²À¦pE-e6µtQ첄²ãy”ŽR€‚ÁÝ[9H¡RixksüˆÈ{=„¶æÏ.'å˜çÔsE M/á'¦Èœ Í3 ÜvXÖ9™K92ºê¡u´X¼ï±¡1Øù+oÇ•fÔ9ó¯‰tˆt¹éÄlÃÄ=¹ˆJ®__OfžCgÿM¿fÅùBM0P¨k»6ê1†¤Äz23ö:3LÞ¦@ö¡ôÌhç‰Ï b5Ý,½ì5VŠu[y¨¦\Ê:÷¿ê¡1§)PJu^ýŒÃºVôZ¬®2æ(Æ–’Uí9K‡xzoá»s!”vÍÒ଄VÉÌ­ïý×þhOr}±—ñ»ª§Cˆ;1Œ$•ÊqâÔ$ñ4ITñ[§˜êÖ†Ô¶dì², %»ÑÞêgüb!5¯2¸'6x mšuÉè©¡Ü:£“s–wQu+MÉô…àåF€Ãœ•Õ¡n>s ë^Þ¾i×–Q¨¶N²ØG{yvÐ4BcÙ+§hÔ;Çøy'»øEå$èx‹q]ÏÜ ¢Qwõá+ÌŸ(bW…%`bÔ¤ƒb®ìá×m`´1~ g-ˆ7“irW21±p·k%ë”Âì "@û¤e|ª»9E§Êïßæ¹Ï7Ê"Yt\«š£,f Ã8!ݪ.]#;|÷JѶøX?eLÑ*©£×CZ"ùÁ³+¸ÓÀ([þÃc ÕØI—}Šü,ŵé°?%o’÷ñTJ4A‚{?ÁrÕ.L¬0ÄÓÊÂ.¿¿/ u,‰ëq¨Ô ä[D—ñBÎI‚¦ài³bݹU3í//&?` ÷J°˜–êœçö5ÆÄ‘2E%Ç•úô€¶Š²·C¯]uÉ ·ÓáA,+ƼlCÆÕîü¶Õ/ ¶É‰ìÊíµ¨Ë"¬ö bŸ”Z¿ò|–é´"¶y¬ü}£ßÅfûðmm¤‹üÇÕÆ–Dˆ`;dà0Üfü0óXÒÎn“O¯bm¬ê)zn>-$Ö BX¶¸ü.D5ºa·Òý€Gƒè žÖü› ¤Çb&'QÂj~Å d@%nf ØÏ`„’œ/pÝ9¦6¿ÐÏ Ò„›—”ÞÎf}ˆ’7Ìçälù›~òÊÊrÕ¸rìÞ¯vx2Væ~òé=ô%Ë<åöÒcogZ+CÎØÝZ›Ôñš„j“?™,« Wµg7›dcÞã©@TÍvLݰK”cJ˜øÝº@Méø¾‰ÀýCêL½¿5»ò¹tГ7@.Þ>L@ý¨@ó[•žšâXzŒ¬šKL˜1 ¡ŸÇUGÀEÕn~ÿ‹Š.U]LyþpŠù;ufȼÆÄ0ñõô«=}çò⿆qή4™m?4wá‹ßÆFAq{Oœ^HÆÀOª¹_DI…W˜NÜ·˜e£ÏÝÚžâãa@W§?Iz»t·¤žGÂv§ô{¢4¶ÔÛ¼å‹öúG¬–[YïUŒ¾y=sMP, åP³ÇÍâ4‰ÛFgã®ôc˜o¡éaÊIH0I¹v™bÂä.†Nýî l€ØÞ»¹D#ì˶ñ‚"Úy.­{ú|H§ý“^©ìi 1Áüä“>(K)Ô¸Ò¯vcîžÛé \=9j¾Z.Õ&D^øÀ¯û6¥ Ï’ þg'Çç)˜åÝG3Ü|ìm±JG;Dz²·x9J»ÞF®CÜÏúîI[ÌO¹ÂkJ±b"FwŽË@“­H¢cœ1%š fE­r6»zŹvð~X•d’ÀÏtrñ@ž•_Kú˜Õµ5ë¦Sq–6q–^£³ïÚ¼›x zpÕC°!6¼‡¨ÙكݱA¬Á™`­´vßȧ¹¢Ù.¯¾ß"ö÷ ëÚÙTÒÔ\³ó S øÓ·x õ”V•DqRFˆÁóýߊ@mTä®ÿQj›ï*{¦ c¦íôÚÕk¹0›gA¼ìÉGTÚÆbï87Å¿Z9Ͱ‘ŠFrßjs% sðbLþ‚=ë]?<Ç £l0¢6+ÇäV­2à”܈‘ÄŒñзÙbérä¥Ûlå!Ž)|nï0AñUIEÛ¯Ë,©ÑßôÐËÞ`µ•ƒu[ܨ=‘Éá4ôP±ìñ| RhMÅ ‰Ë)”÷bö)ñÊöî‘}ËÈXËkrlmõ¸ýAO BJr?ë)Pyú½eùyÈov€ÁYÜ)¨_m^‚7QÿGJ×PFeÎÿ¨ëñÇž„”x£Ë¿™ Ùr †¿°ä±s%5™ËJUÉn>Ôlë4ôe¨ç=°e½œÆ‰å>’p´ÁàÉsM†?ïVôö58:ôPdŠXïé0ÈECÿDÓ/íZA€»õy³œÆ§ðö«ø9æ{a%m|ô\ð׿+ã>]P`ì×næyÿçÌ~†vûÃþFòŒîR$ì~è,ù\pjøR~lm-Ž3¿Ha»Á5Ì#9jè•$Ei‡‰¥<ßÇxZ ~–”@XëÓ‡‰u‚‡rkKˆþ| ãXèÈ?+î<ƒž°\O†siΙ*‘i wëv˜¿‚¢oH{ –Û[Šè‘hÄlŠ…ZÌzñ«>¬³ä«õ›/aQk7_v3âSú»ENªd™èDo¬l\#©v±s¤:¬q¼vÏé‚Ã}>³Ã&­uiÆGÒÐÖC•°¾ð 1VÇS2ÚõG¯û!àêU—›@.ö -F£b—ÁE¿fC¼»ÑñuDr•œ MíÒÑ-ÆÍ Ò±žOžtÝMd¾@{¶5˜œ]ýeš•)O³y×ä2Å|™˜“œPlĹüvOt8m‚m9Àh*Ü ÐÂÛ‘Q˜ûaB ÝÂ7)šÜV{JØæO%™Qö°<ƒ¾ÁZÄ\ƒ¡è'Œú¥J¾{p2 øU!$ãxvXI. «âšC,¡îÈùÁŒ†:»N2¥Äžs‚íÉÙ)§a…Ò“Îg% ›ÿp U%îûŠF#¼¾;ß–8(yiE}ëßõŸfúFæêͤìÜ*ö¸²âD‹Fä G™ÈîêV·;<žepôMIË€qXÙGú´gæÄЩՉœh“⥵ÊÒÉÑöÕv”vµò•¤#oËàä­}¡X…Êæå0ޱ{{…‘\©ÇËÑvé;tþî7µ+Q9ÞtÙûB’1ÊÕEl¯eñ¸„@¤ÑSÅ fanûi.%Ô)q+F4¾ÌWÏÝÂ;WV+ê8>n^âÐ:w…؈àÿ÷ÚqÍí¤â¾G èÉMË"Xm{Í~ü}‚t3}(7uÛÍs¢f&ÿÅiWö Ãh™?à“è½%7™§D›G´)ˆç¶HzâÁÑL QwÀ["¨û~ðeûFc ɼ&f¦g°·YtÜÙKƒÏ9®9=#ä=¾sé:É.¥*&´{Yu\Á]A=1M^ÇŠUé†Ó‚?ùx¸/>qïï»/yL¹ôíÓ&;áâË”'8“œ‘ÏPÄÍúãQi›&^¾z ×RkË´X!Ëg½Xâ…æ×¢Ó¸ßû9ÀR×ëà¿äÀ‚û `G„ÍÃPË2”æk¿$-Ø•ÛüâÖÔ,X„g£ð– í¼6Únõ¤.!ž'i¢&´{'˜‘‘ÌÇ÷U±äeÞ‚(*ÃrRKÄ›ðÙ('ø‘­Ÿã[HþµÔ¡±¼ o3pïjãܳl¹{Þ”öDSàhõJ)x„è2Ú|¾gƒ¯XðÅó5ÜIw{ÒCë3­¯/Š»  ‡Ã°¸¿‚Ôä$} 'Û¬^õ2¼äz dã¹<àÒ/ ¢Ë× $­r–³/ÉÀÃxúÖ ò¨8 Úßô”·O±åþ(çïy‰H6Èl á%L7ù5ù†©¸î³ù²½|çÎ /X ²ìÅû;ðu+”ìžôÕ°tiøqöíc+„ ÇÔiFVÇèßÁ®QS !ç«7Ãò>A ¿+§Vä¥#’aõ[JK–¦žµˆ½†l4PÿyèœPHøíè«À¢5œö ¥ Ãûr&}ܾùWžm&}·’Õ¬ÐY˜1O±å²ýþªÍ/ùÎ?º²§ ¿§êÜzµ¦Ûˆ~1¶gRø1²l†«º±¾RKï0¹é¨Ù:=7é}“Ñà\zý$,tMDr>âÛ· ªÌ¨ž«iKÀâ$ñ”aKÀÎ/Ò¿¡¦mÄRQkE“g4ßKÁ´kŽA˜µÖyn¢,”Ö}X‘™Éÿ$Zà{7_ «t5 M½á3¯ØçÐîÁHÿH„?‹!û±è#ò/YIx7Â>f‡PSDŸ½Ïd›=P‚JÓ9K¶bo± |é¾£±%½?¨b§=SC¾‚ÅL–Љ_÷¦­“m/E·tòo§i¹+/ìówòœ¹ùçzWºœ™fÝLýX“©j&”Õ¼!* @ouš(¸öu…¢(jys»Kë,†ÄÉf½Î$GâiAÈ‘/FÜSVŸ(ÓŠ~ÛTU5%¥ønöû#ãMi-®:âa›ºjOÑê¼¶ùÒT>•,p£D+Šx.Äê²)š¹èR|´æ îsݽ" É^l3¼ö EEç§uâmSôÊßU `v@ÎdZç/-‹hÅÓ ìZvá#Ï‘"©hç’óÂüµb»Ïûœè^7Ø$8 µ¨Xsþˆ¥ z::È«û˜J‚Éa_=†Ký9a˜u7¶=ƒ íø¢Œ¯Z¢ ®_ÿ°¬±ó4t%L‚åÜ-Ø*1Ÿ LY×[+‹àc5¬åE×øÞcÁ‚¦”¯4«¥h‹l…a˜·U]«ø L$•7á lV»/¢Kÿ9Ô÷Ù€ÇÞ5 øš4¤k•ù;é`?²$ŠgHÎÔÞB½‰2m%@&”¡¾`xÚmHi™%ié®ÛØ–\äÌÔœ®hŸo)CÌ„ÖÕñõ*h» ’6-´Ç_‹qÿêŸÅÅb9ðÀëœA,ÅŠº'*t8îZ-ÐóÒ]œÅ°ú"Tè—§ÂZ\“«®N勤 ¾p狚¢Ã©f’©\­rvÆŸ>qå§šŸ¥3åˆek Eù “ß}ás~o,&Å+~ §. ܳ@ÁÄûŸ|éÁ®úh<35 µ÷·ç$y9H>,Ø¡&¯ÌTÊø')Ùž‹Fv¡§žÖJ³Ä$ LžôˆJºN”ÄUe4bvô&ôùzÊ\©¸—;Í·v$ä•z‰Ü½ÿ¥§ ~hƒ[ƒÕV}m=Т°bIÑié>ÂQ£óÛëo”ÄÉëhÇ®¶Lá&˜¹ïŠt[›Ü&4b'G|fˆ«²F]Z¦o_Ÿ8‹Kß·¢]1»d´LžrÙ3(ùd” ªš³ (W =AV”T1“" ³ôÍo6d« Ý—T¬<%¾»›8«…-3V5å‰kÃg*v¦l3 øä~mÜyj›>‰ Ñõdk]Êyc€ËĬˆã…ÆNÚj¶g 缈¦·üU²*•ù`Êu<~™ÆñÂ/%‚srmõd$Ô)#ô*yÉ`GyD0Ê!#^„Äjö{a‡ñÚÍýhM¿]-ÏöŒ áCør¾™æ`'g?@à/§ëŸÄ’ëÁ;œ–ÚfèâPbªdÓËñ¤B_š­NV,|'¹èÌå#Mä,4œžˆJTÝzÖ’te÷ ýaŽKë}MNäÌŽ©Ž‘N‚ÁŸÉ” C î¬iåƒ×È6ŪY¨p¿µ%ÑÙQê(Ù§WÚ?ñ`ÈT± ë~«#’42ªªåo¶›˜¦Ï›.L9B§8Œ˜e Û±ÒE…Ð¥ oeh;påQ„Mÿ5ÆB K¼ WÖ¤¦Ý;–§ì2#ÁEž7ƒ˜$¬îcDlè0.ûVu—×{:Øzç'dj/ÀŒƒï«„un.*çÔdÖ2â÷¶ªÙwRh}˜‹µ‘ÕCÞ ¬9‰¿ÉYŸç/rqg8EXTp” «Õ'-ù¶b·Ë¥Æ¢j·S¹v¹´[rµ{/*²&q9ääÿ#Ámãîùc© TRW¡Þü¹šby³Õkóúµƹژ9Ò#°#ÁÝjý@&r‚ÎtÏ!Í& E^ÙÛ8¿*e´°Sëj£.„ðúX-®5C©”žÍ<˜Áx•e»#Gmá?2à^& †¨Ð úõm5íIWmbéLç¹9ž\/7 Ú¡IS¸»»ÅLt›Øá’ÿô„½ê‚B­´v(;öûÈÞ¬¤“¹¿ªƒ•ÓÑ¥¸? Ü~.“v¹ˆÎ)…1‡ Âðw­M¶Ö”‚«ÓËBwÌPL:„Yn³™42aiû¡•WËÆ»¡Í‚Ö'2eïá¹=H¢Ïˆ`$n#Àx Yœ”*ìvÿØk©,·ÕÑé:¿,pVɯrøfÇÖ<í„öøò[¥râ╱M!8¹á¦!»„snëÙ3ƒS) Q4aÌ¡(ϳõÓøè§'÷Ø:èØúb>Í_ãÛÐ^J¥H—8.ã˜ø†ì]ƒ4ÓUn"Ú5LóÌ匲ÿä-!ÅiëáZ,jäÕûÑ µ¥3ãs¤sÒP GÞð“Vÿ,/¼2ýÿ¯n‡=Žxê T³k‰%ŠšžµàÑ~¤èY«YèEpI5Õ".Ì1É7'«óëJOîŒhŽeÎ7Ld:Êw+†A(‘²¦)„¥>Ó<2y¹f-¼\PÉ}ô¡Oå!$ëÒ>ÇÛZÇÉjVuŒ¸ôšWàLÆ/¦·%÷t%ÍøHÀé ïÆ.g˶²L ÑGc¡§]ž:° º{) ¹³;<Û¿E Ù²Î8Ô•±èªèÈ—`D”‘w%?V´ T&@¤”ÞZ,Eâøÿ¶à$ŠÅêÂàSdk0v”žÉ´Ýä1(ªÖh<ô–ñ úPeâ"æ5õ€h}[õE¶¾݃µ…ÆmùJ%}±TI¨ŒŒòE·‹çÛ’ýü±šøŽ)”"8æ ©¾›_ !ág«Z_{,³×@¥²½tÿ õ¢Ëó‡•c$OhÊ$ÜQKΚ u<¾n™ÊäÌöËù×E®69®´AÖÞùSð ß7tCi¿îkÎåµMXÊñXIe®r­ªg!6Ý> :üÀpïåEÌá¡–Ò181U ëR£†LñǢšk æn±[@’PHŒØå¦ßÈ =—Œ¶»¡(íÁŒp¶F>ÐYf•$‚¡5Sÿba!ï=:¥+Qó»²(ý”…ò.ÝÑÆZœºX̨$ú·¼Ý̃ŠH4®ú¶1ÑtÎÂZ)«Gý°qõC"g´›>ÿÍ´²þi‡qG¯{…ÜH€q¶ŸýSLÒÔ£âΫ.&Q󤆄5¡BŽ«HÙi³kuÒëí^¡É©:Aˆk$øë\É7ü×Î!¤X,‰Rƒ"…2iúN-™Ç={S£ÁhpaG‘t:Ý´†Âƒ÷é%Xåy¨’¯1Ê?¥ ²ÑçïçŸUÆ…¯t |Ûn(’“zjÌÚÙÅÅ´ƒê|¤Å6(Åšód¿¦YøUR°Q- fÖÞïÇÞ×oÖµ”uLnßtÔRØF¬Õùù9RÑÆ‰JŠ+ìÏé‚Âq eFæVÕ$V_ÞAW¶b9ÆÅ¾Žßl𼆺h©°—Ip-9UB„hÄÿÄXEÔá2áÖghS´²RÆŠ¾´Ð%Œ½¡?ÑEñ‹ž”œ‘á„ +œ­ôÕï„NAÀL=|s´ÎlïƒÖ[7‹ÙµÀ®´ÿ/LižŠ3eù,¾ÏZëNíg})Úý­T e¬^´âWÃÕ·7N6™l=õÌ^ÔmmºœÄŽv¤Y˜"îho·/Ó ×y{8o,h'ßNÊ7 —©ÒÐø žhl7Ô.GqC[:5h ¨ù›»%Ü I€þ:>=j ^Ý»íæ[E",£@ÜtÃ%æhW;eeßwàCåF÷ªÈ!Í©uw× ¼À ½%qí#lJׯ˜Ð$¶Ä¦ÌÍŽÅ>ô™Í"…—n0›X¸5fÉ8ž²á¥¥)¢”³UM’ìLôQ{"ÿxÀöcb.é-ïo$ÍíQ>éþY—–Tèz»O®´Aà½DòÎuÛÍs¢f&ÿ·ò7Ýg¨[Çõ…nÆaðTrÃ^)@ñùþ´¶z¾y@Î jN… “™øeg†‰úÎ|º”ûü>=T«õCa¾©y›#µy:xÁé‹´/ë–(^d_¨Ï¥HŠoðÓm¿ï™ðäÛÔ^Xð‚zeüx$Ic0r/׫-fÌÝÞ¥MðÔ­úc ˜#œÄÉO?“ãkF›’º–Y6*Ut²×Âc•C¥i:…b2ÄOÓYÑpOÎ0ñ©aۇ̎ÀÑ 8Y9zÊÅ:|sÝ憎ågÚ~cM91šŒ¥”QT¥ù<öØœ æòPÅpÀ2 n8ÖÚ—jré;Ø w‹B³¥«eâ ’-Œ¼D!uý‘î"\•·¸'¤è"åYdpsª"Nis:8¬ÛFŧ‚ÑÅ/€% iû•I“M­ž$?sm×rv"ÍK©36¶Y-{vËI¦K¦N%àn¦°T¤uàÏJ¸ËF úö+É7hÜAƒø"UMZ*­}¿–θ¨…Õoë$/`¼w±”eñ ‰MöŒP°óúk9[ê$¥àpD»ËÈÎ×(öœ‘:B±Ê8!v“ûÍü»~0NËÙ5DnÛ5BﯸÅ`‰xARÛ:ßn"F¸æ¨+·NÙŒ*ž.v½iÈ8$w†fÉÞ³¡j’ðI‰.$ÃOѹL ¥¸¯$[P]Éj5ʃŠ"Fô† ƨÌÿgS›HœÃä×ûÖŸ¾Ô¥Ð½Ù[úúðH;…æ&–›0Jõë™™NC«®Â·ÅYû¦ ü‘G…,5Noè|‘[}U±ÈèŧJZ>Z×-àLs@õŽ“ Œá¹ N@ü5>²†9wjr¦¢jÜ/Â8øÿ0Èz4ºF—÷ó)í8®9¬ˆÍ€ÂΈ]‡_<€ בV°û¡¾OÓÓÛçRG±y@ ï¿ò‰f.²xH`呪hj௘;ÊÐY} àjòøÚbê yÄ’¦ê¯ÛèÌ®ÊjÄ¿ceÿ¸ò/Á{áñ08¬tx8tüÙ‰–ß&>>!”o¢}$6ú©¾—×­Öô$êf• é”*2V™© 0— Nì© ·]dw4t3íõdºÔ¶N(M2‰6Ôñq°Ü&\™’¤/®öÒ¹œ3Å@Ì­hÊ•mVÎïô\²êl?¼]fõXê)ž¤Ø ^$`X…ûǪI¶3– ØÓŠŸ´sæw^ê ž$†ÏY™ÝåpôºacË “>ÚÆ÷ªÑ&<šzYš0Ð{˜…¬N ¬,ýM¡4–E“8cŽºçö‡—_¦ËX!®£ãn—WÛ¯TMøÎœ2Ù¹èB`qµÄ8ðáÃ5kU—Ûm´ÚHâN2?Ïà3;NûƒPXžô¼)D ÌÕAt•mZ°*J gßpsCÇãGW Ö=6W‹ëì….vE#>ó&’sFë¢ P©u¦¨ñCÆrU,hÇÆ=dËßåeÞoýYr~-ByfÃߨÀ¸8Æ^_Í…c—M'%ÛÝ¡äh #e:CPæÆ¢&T&Zõ¼1mbÓðôºc¾X Ec‚˜FzÈøI ƒM¡u¤óëŸeb–¬¸­[p^ YÚX¦[7Tµ$z¨[¼ç[á%§ Θ0”Aº`]2pD¦æw1#ÿá*ß+RyN¤ýrßÂ,8ñÁkš¥}Ø'ŠDÞzž«YQ60äU)Èϰ‚hWÿ§'"Ö>`\nµvlFt?|øH‹òüºÕšÚДëE4°êVMÆÔNÜf+>”á©eÒ>ÅÓowòÂh>!¤}ë6†$)a  f!ЬVÖ(Ø(Îusis{h<œ~6‹´ŽØ) ¬Vô°Q£äê]‰Ø Á—•þþù{jªÙ¬‹û {|ž©Ö G# -xÍ<ú¡5 nñó‘ã sX‰ÿÛ™Ÿ›jƒ}+€õCç«G–BÙÚàë³z…O×'c "˜¸ß–õÆ)Î]9Æñ×ñ;ÃY°Ñ•‰$«3/} ´Í$()%öòœÛZçðzB*ƒi W²;FŸ­?z,«bJOdž].¥Úl,mÞn:Hô L‹ûN€ä½¼§#f´„)(&±Ü7}S ÖÖ·ôö»µ÷¶*Ü ÐÂÛ— †5Fh÷VµÌô¬—¬µä¶ó·nY‘N…±n’DnH"R2,à!d…O¤Â©z±Ë>r4†î†[ ÔÛq„VyðÁ «Xt<% î8ó[«œ¢hèÕŒNŠˆ#`Ý¡Ì'8h„”sPçÉÊÈ$Dʾ‹}CgØ*»¨h1¤YotíJ¿ph¾ýYA43ðð[ê¨ïlÏA –tb%}_šv5³ǵ[)ÓÌe|üaÍ{×.ÁŒAäm àèÈ#›!P¢#p™Ã£XÞšB\ž)aé{·´i´9ÄcÚâd—ßä0þ½aètë+ŠoW²v”&¢Ù‰¸F²A|?açïdÕ¿ä®B*4;lÃÀŸG¾Ä ÇÍ4<<@ûu_ˆ½Õ›ÿPÍ-‡ùޏ\åÿp©#g?éÕÏUÔ!¨1BH8¿‘é—ô|ÕT¨Z ŠÁwº¥£ÑW¤'‰ñÔ#êè'ƒk»Ñ qC;µèÁе³ªüt þ(‹´ŒÞJà@„ÏGºÉR&®SwµRá»·î’ßÑ_wH‘Òcû^„zØrªªG¦]2YZwÈ¢±r"6b¸ÑBÖ ì©LóÜãµ=¨ü^’ ?Í(¶Ë t±&ÑŠ¡?;KE<8öûmV®ÒdL»¢ÍŒ°Ã›3Z¾?FÝi+›x„&VÊfŸ#·“R*+Ý0È€Q<»SºY0Uf¤r·º6Yd¡ ½›EµôPúV×õZ€Ý„êtãòø»ˆs†÷XÀöþ¦Ñ˜ºa@ßÉ ðÈbêŽáqÉwx+A͵h”¬FéúxMbõWœŠó©Yp]BEëÁk†ÖUÈò¯ÏtŒÝwE17f¢A@°RFµ/ót5jó4:UBçĶ|Y`±rºOżpnLy°ò¡ãù¢õAos!! yß5É'¿M~9ºHˆ<ÚsÌ«øFšèj‡À]Û¸F¾}ç®'ODÅâh€¶Bø­»¾-@0œ® 2œ¼ZÊ”>“7¯ ÈÃöÏðšÕÅ'4-»f†Æå‚àˆŸål;žk5º‘\Jó;¥@ >'ÊßH1&šQ„èƒÀj|¸ÞÓ–¢NµóJߤLe¨,§õ¿TG$oCÊé®p¥ð·MYèÙõðƒ“=’“:ªcF™ Ðô¡Änv+ÑOü lFSTlÝœóû˜N€®4„ª7Îhƒëñ}4t<\)Îk’aúì7ÿ2XMH€‰y0Eîî ñËJß‹4‹hS­ç…±Ùl.—˜{‚ìŒJÞÕä¯F }Û+})Ö9N>& ƒ´HÒb¾i¦2UÁùùÓo©¡&§@eJ™R"áNÃgFÛS¿ÅŠwŠ×ç d_ _ÈE8$.#¼’à…éY粉˜Æ÷Ó©a@Úø‘%€XŸ§hâÁõ$Ü”>É¥nEaÁ ÛЪ\e¢"²àêJD#=ÞúüŒåÄïJÈ>ˆZ{2/Ü“.+º9¨Kƒ.r‡ÿgºõ8¡SëqÆä6mãï2evº[×Å#&¢³YIà@°êUp³”LaÞÖ°U{«ÎzÙ5çÆÞ3¹þ£í¸t¨i‰›>µxÐx08ÜãR ëZŸ‡•í§üÝ*Q÷0¿Zˆ¾”`ìϲ»,Ú%¾ {в”…õ>Ì8ž€æˆR6ãh{éä,ž›-7ñè•Åž-­c{X4…ÆIòÇl¤'Þß[ï CŽF Å,½Üʇ±ÝôåccÃ~…fú¨à"­F š ­SÊWޝ×»í Ý:‹êÚÛc:–709ÓwÆP` ¬@®ù‰>·@ ª¥PíÑ4¸É?x?pö0·cÊëÿ×ݼ}¿c<Ò"±HÊsªöR–Ö)6Ï&Ïœ+cŠ3ÿ¬|ˆÍBï.Ȭ\âLX0o›ÕäôÂ*E™"¹kà4N„Á'”÷$Y'RsšÙìñ‰Š ϹÕ2NÒ[)E½6#zxÌ>•&4ë˜D⪹i_ U'¼¾E¡‡¢¶çM>&Má&ë.‡F,”`ñô\5¢T[/Þo£KSRƒ ;°Ö½¬[ƒ`÷A’«˜óGj)”'Ÿü²(øå° –‚Ÿä¸e!SX6*~ œÑ+z3;ZΟ¦F'~#¹*²ÖÆ!Ì75že Òã—ý¡‡m‹´QºÍÛw]âøœê”5XJ·þ/ùzîâcjÈ‚÷¯Ë¬ÕWUK@¯Ñ3ÓÄÔ)Óxx€3ÃV†b}..¤W‚“ÞÈükH°¼æçÑ]Õ0úÉ‹ìõ™<Ät¦lÀ¥±B‡Çš±Ø8ÔŒºï]Õùd•Y—O<`©ºj]¬×ÙŽo{˜…Ù=Æjå LŠl~p0ÎÆ¡ž?óúŠgÃ*@=Q]XJJ£ÙÚM•?2›õ¥µ(2C£ê?ÎuM—EÙˆ`"O!?æ$YÁÃÉ}ðê Ä2Û3I¶|EjÓ (,TlÔÕŠyò\`£óø±©ˆüT—w)µú­íBªÏŽ~µ±Põ0>™‘håÚ}uOQØ“ÝO•,öŠP§QÜ òÁ"ÑKml¶aærf[ÖWrʽ[BI*q‚åÙ„Åæq<Óa§ïÇ"[‹L˜X<’_ˆY á:5Ð‚ŽØÃ¤2¸:QOÁÃâ;nõë»ê"Áf·QY“Mð~U*[Ḧ³S¨©HGx =T^‡±$g:AÛ¨±ž!J2_+Ћæ1Õô›ïÝ%¢Å/N!5c!DÏü81œTäþѤE¤)#T–îNè+ø¨ ²åO5œ*QНuçmê=ÿþ€|¢Ó¿aZÃʨYðGóDí!ÞÅFzÔĦ%œu‚Ø1}ŸLs›BÄvJ$5Ò·á¡å§l2 Ü2­”HôDü¶NÄÀßDDI¶LG‚LÊv· 6ž5¦öª¢(lé“m® !Ä´ì+Äôz¾8­mgFJËÖnXp‹_Ã:¬þ5å^ ÔçÜ…4‚è»Ý«€1ƒ"cnÝ‘]‡'ÇGËÔÞîºsÄýw#·óV0l,ãå ëñ­× Ï–äØlM®½ þ(ŒŠÜ»©Œ!·²^Í¢H~ØæåkJcYÃõß*šg¬øÒ ØÄ°ð±£[Ï–;¯Ìü¾Ô{œ]îä+H;¬ ÑiAf®H=|s´Îl²uFÕƒŒqkËø“ˆ[_Ř·£ê"»Â~$?(¤äÓ}âz>+ yYVŠäŒ nƒÈ@6¾Ìp0Ö’¶R2€¬xÊÕvj¯¾Æ};®DZƤhŽ´—RÇé“F†[©¼Î¿²“"Ý0wŠ=ä´·`Üý<S鱯c(j¹«Žë;†äp™pæ¯yLž£ÞdÓl*.D|U&wížTR2ÇK{•P§2Ä0v9˜þîü8ÃK´Šg+¯ÆàIi¨éÁ”u áù8´ME/;9rÊæ‰?K4ÊåNkRÀ‹Kï +j©‰Wƒ– ³òów©Ò¦B½¦ë§­xCÈšk[tL Ä˃@q‰¨½Ž|e àåzª}¬7£Ü†nW¬‰HÍxà«Ð'µ’Q g`ÙþåTWâw×A±[DÕ¬…×]Ol⯨NWÌ{;k1Üôœ»1§Š{ßL6lš¯¹0?Ç6Ʀ`®HÒ±lÍÖñÚ8'<š2 µ6üàéò4vЕL$/=ÝK.Úxíe¤ •é>zîU¶w°×;“šå1kpúz;b½ªÓÎÍ} gC]µKq“«Ýàžˆ]}Xˈ,f»6¬õ|²YÆõõö©’´~vö¥fèâÆÙ÷On-Ꙃm¢] nʇü÷\ÓF¶ÄÛ˜§£O Jn%ÜÃÑ„oÞ' ‘ËÚ-|@2F• à@·år(ãÔ:©Ž¦cíô•ô&@d¾¿ÙÏí"gïÿhéM¢®Ç”¡b;ù¡ß™í< ò¿ÇÏ´7–Ü`/õªíôŽ5w"ìÇÿƒîü|+výÃ>î\3¨(òë–¹üÓ¼œ9ç4ŒÕuÔØh bèîǽZ÷Û-{×?âûkÄ~?hKsŸjbäÑÒîÔl~Üí^‹FÄÓj±k`Âlú=»¤!±…r÷‘;Ÿ²níQ¥ùÒiæ¡ûu /¾býò3}˜ÔöB ‚›Vø ˇ@&›ë”dq™:ž˜«/%XÙú3-mcëÐîi˜å£It¿=4Z¸"­p}÷ˆH£’g®[²,Ò J¤ QÛœ9œyÂ$wUÐi©‘d©ŒP%@ëY6MYŒe2úó —›­Ql tÀ÷y&7~½Ç¨rŒêdäÒØœâxÐU[ çŸBPnÝØ²c¡¬/·O~’N.ns{ešŠ;P93|7c”Ì ÷àèír;Ã8”úÀó]néj X€ÀaÔ ý:ÆR[Í@=Oœª¥&2™‰¿LË”ÅëögÂøjÃ9]˜r,-•¤¥Á ›ßñ9A>ãý«€üKÛ„3ÀÂ8{èxKwÙºÄiPôJÍ :%DGÕ£l¢·îÑ&û§àâÉw;-4â9ú¹Ù¢|·g¥8-Ó>p=Y#;Äç¨8—8ŠQ/eävŸ?ñNßf*Íi€Ëý†Ù@} µVÂcÛ(¼“„¨CßáÔ+óîçKçÿqÂÖŽOJ’Ñ¡fЦ»5-…¾Ä³=§šv¹\ I5v®ØC¶£|eˆ90îî̳FA‹ÿƒ]mÝñ÷O®Ìf±+Q¨iºcL#4=óF ö¢9Œ`„5_¹ëì\EúhÌÎŒ¢Q½HAx*ѳV4£Â¼T_Íùö¦ëz²†‹'ÙX’6Aª û>2l«÷Ë•ŸÔ·Z³˜>O‰ñ’¢uõEgTÐÎ*ˆew‡J¢×^œ !0®Cz!\ÑÞV«•í]åà“ ( ±Ù/æ* ‡¤ëLEgÑø&§¡Kb%:EGÉ>¤äùŽÕ}Ǖߙ—+:R²D9 ®ž a2¶Ÿ@B²d¤.ˆWr=8‚È›RZ¦½SNÍû¸kØ?Àˆ8>ÖìU–gÙ gÊtMÝt°yªñjiFë´Õ@ARùhP«÷2øËüš~ßçÂwx·ï²qò$ërEdµ+pçV‘ÈÈÁ´,DSW#×l:œ;ü~L¶¢fm櫤Øiʶ[E}:RbTŸ½Šè÷aÛ_A8dÝmîg‹ºh°‹CDQt';¼m‰z$Ù­Ù,÷¶6x''r›×gŸ¢52ˆÝD†Ò…âÏßÍ:ª#6Òzž—AtµÄ”PaS[¹^ÈhÁÏñ09´în³Ÿl)ûãµÎÂÞR…ÁÆßÂÅ’0µwM›¬yp. ó:`…½a¿ ÑW„?ÎK‚þJ6’þþ˜ì‹Ñ1•-¯5EöFਠFÍý•‘±Ô–éãf¦Eíõ† HÇËžqÕl’hË2ne.ÈKK-4ìi›6un½µjï·ë³.›»Á™fGÐE3{ƒâ}f_ݶ&îÃ\VòßgÈ«ž2à_r„Áº÷HÖ¦š~y,^Ù.¦\§"·jjw,6EvÚõà@:ŸEÎ=f¿bÍ6p¾½ˆ‡øÇá¿•6“ÝYâÙeÓ*î¿úçP¤Ú- s‚¾:T¡L£­2¤húÈ<™Ò‹ Î1–HŸåì—lÙz«ö­•ú²Þkb¤S,øºŠZ¥Ö&´þ5@Ðø¶4lÚwä±Q¨V(ÿ…ÞÈ ÄÁÉ­ÅSáI)Ù Ð&“Õ4 ÙíGØ/q"Ž‘ñTìÓßÇu1«Øßއ4ýÆò+‘»Š{@yX Ná ¨‚Úò¶ŠŒzy ó$ëÈNE7Åë,…_ÒúA¢f¡ÄKüö…|æu ñg ­TÊ@œz‰K|Ý\”„Ž5m•7R :èÌ—%ü8D«Û`Ñ´î2¿=´ì~éé…P“X­Ç‡'›+W§·ˆK©¯/°½h]ý¡‚âÇ‹‡­#u¦´îö™÷7]uË1ô?Ží:9I–¤žb[¢®Àä³í¹ùFNàbÉËÝQú—m ý!;ûá–~iM)^ä͵¡áÑÈ­/û_5ïØüò.Uëùà>1иÉ:–ˆž¹wr-‡²¸°€ Ñövl©\Ò>&S ÒN'ë‰ÜõBRt¶Z–¤Å;²fÌg“2•mxw¶2¾U/?œ‰¤`²ßõ^%»}EGN0Œ÷›4hKs‘þâä”lÕI˜óªx-;?¶/ë˜ð˜3» ÷ˆ|’D/U˜:ÐOnß+³!XŒ¨‡¬H\üœä0­!§Š¯X‘Bó+< Þ²¢# £°']d«—:-ÝÝ!ôtzñøú£èV¥À[Õ„á^BmÁ•0×r'(@¡ö‚–‹göïÔK†ÆòzÍ8Óµç­îRÌGEÇ–êc*ÿ߇8 ³Û`°ìàßË!ËzÅÎhœÀdY‡• %uôê÷蘭`ܨwâänÙ›ˆê Ê0WLàêžm€ŸNëÍ­,f©cüig‘¢î”¨kš¨<Øv>NÞ^g6±‡ÚQëÌûSg:QvKϬú[•B¦›¼Þ6÷nà§1ÜÝwÝ!7½g\Ålë\_ªªyË CЃ&¿G/z£ùî»1ŸÍßBÅod{£cüêľL*_x;útï‚.BÀö èCKj$•ÝŸÒXŸ‘¼®eIŒY¡–ž}\y.hÊßK›Å/AWWuÒ vƒn”—ëú¶^T)ob€MJó(wÆð??z‹F×(µ!¿÷ë¦ÿIìþã"A¥+•.LÌ(P9¨åBõ:¸¹+ºQª÷—Lá¾Bfå¦rÓ}¸yš/¢–X­t°¡DoKîf Zùƒ"k¬«kiÌŠ+³»ËÂþd Z"N EæHqLP„ÑÂn1®Ú½Ï/±a JfñS5§îmyžÀ!Уïm¦cЧ0÷qîN{!js¹Þ¨JíÄ1Czú+•=ZÕî‡[òÚŸŽE#®gßj¾¸CöZøs–G§!¾Ø¢é‹sý>këeÃCù ú{Ï<˜åº8žk°á«+óˆ†vèðîùÏËë8ObÀîÉÍ‘Ïå'Èð°îUCŸ9ºìM!ŸÙt¨7p1Ô¶¸²éäÎe:øás#µÚË¿_>ÌÊ%Z¤tžÐSisåy3\d±j¦•![.7Ñ­çñBÑ$Ï ±ahTžkª´oP¹Ô¤zù4@Ð☠߯p1¾-žp×=^ŽL‡»0aÕ™Ñ-N",»¾Ì­…1ÓõäþmjÔ2®Ïßýç^³ÌW9c¼†ŸT'¸è1yŠ«çyM§>k}<0$¤‰lC»BðÖ(ꨚc ‘EWk7pñ~›/C"i¬¹±yF¨U4Ÿ‚›€RwÕc„-ËJ?sX³¤…¡a´§õ2U0QŠ%ÊirÑRlˆð[mLBî“SRi€jIÀ%‡¡ %¡A^’'›“—ô²,¤&΂šîw íôÆ FV7\ ›ÚÙTÒÔ\³ó SD`R€àý“RՙʡãÔrÌD· ¥•^&×€Å6”Œ‘Qs¦P@õƒéÑËÌÖÖ©:#wܦù'¹óüŠ4FÊyÏ y¼i–™Ÿ9Âôø(ÏF[ñ¨ÄóPfgâTTSM®Ëð/ç DÖ B™êçùîœ(›³Óð ´†•^„7Š62ß•!»Ø º/¢…dè˜ûÀ5XVçO7ðøøÑ9˜)RÆ|¿DÌ›ÅÁ…¼mè†ÎRr‡íŸu²ZȈ:…Є¨J› Q=†ì–ÛDåÔÒ2ºT`‘ÓsrzÎâÖ ¤Áâ{±i)h‡!ç™wõ2WÎfQªÔ? 9‚‡g¬Ý0z%½>šîé¦çA+AÈs¶[ÎZÁL}h&tîúæ6ß9~× Ù2^ËØÔß|ŠÖ_ù¸ÐMPØ—ø³ò‘È/ÿ^\‹­³¦9yÁ4E0æ¢×ºõó·Ú¢:¤0Ïlz#ÆÅåI‰Ôv±7äê%'¯\‚Ò®û@Wöe]úÿš^VWØÆM†iŽgÈÑM’Y?bÑï\ñ#¶ré§J“x™›Ã섪€mŽ× Á“$p_> ¹d4i“’™€abDc‘—a¯ïó2¯@e‹¥ S/»cÕŒÓ4ºpÚÐ"³ÌÔ)<h=¼A{š ³e ‡}È>²¡÷ > v{ x92[ËÖš¥Év΀[3ËÐ…ÀãXe/ÐøHá%éøæÜH®ŠSÃfðS÷À»M¥]_€T‘ªÏ] OTR^ÑÌx# º}LOÁ£ý²ö :ŽRhoBÜY¤þ®_åÓûl¥Ü;9¯‡fЫâu„ò¡N¸‚Ü ŒÉÖ5Îþ8½«&™ŽP×ÀÑ>Ù0Ë­ûµ‘aMøÖ°#Z>òµŒI¾ÁÐØ24ay§nÁØ;ø¿Óì£|‹®ê¹¶³kÈ= Šö[o×/˜28¸p‘€OLYb’|¥5i+òl£=ùZÞQc°n•ÇÍS2zŽ7iUHX ïô._ð|†¬zb¾03!foÜéÝýœ—6%ójœâ8QrÔ]½J‰K^£V*#9]‹ì³÷2²ë8Å@Dýé:‘€‘+< GÐ.ê Úz’t?B~éYò¼×+ܼpÏR]É[?™å$·Å‹×ÎdÕBùàƒWUÐõu&7¢é8_.Y$ú‹~Ñúà¼Ö·Šý{ˆ¸5;´6*n«3®§š00;F*ùKPOéYw ¨½ûê§7‡ë·æ Jk0±jÙ•—÷1ùÑP_LZ<ÕŒG¥cÈK*\˜f¦&ïþe’üM”«•ϪMO§”¸kQì9<¥öõI| ùè#·!ëL‡ñl,¶Rº -‚à,¡«áÑ÷òÎ p%hòZÀñÛb⓱Î\÷ëO?üDi/%ê¯=þõÐõô <Ÿ?Ø)è<iàÐ=ľvÑBöjd䪩ÎÙæ°KÈ!²Ôç »”$ ¡q=g;¤Õe¥§¨3$¿Yˆ ¸ï*Œ¨“uÆá†àRn \ÓG;¬«QøkºÎ¥lC”¨6%»À“$ωWÀ+'o–\àÊVÝ<ä[,É/h«ÆáÊ·Ng¾¥ò·à´ |¤0pn(žÁæ>ãÖa&ø2 ^’pví{S%ý¶úß}Y¢(à‰Æ iϳ+¯büToP!¼¥æ>×BÄ«ö¯ö¬tÜ?|q¦ál¤-'£(™d90H(L~Zõ߆gÀîèžgЪ¬U*@ý!1 ôð¼<@ýæ…@[° 4Fn.ª}X4«õ謻º÷69Ž“’X3$PÏ¿ ;nómîÅ™·8Ãã¸@ëTó£Yn'êzÛâNý·åÙ ͧœÀçýƒW YEB;åHg~èÚ³o·Áå•Ç6êÿ¯™o×\$æY‰’/ýRÉ9u¤jÐÇÝ£ú:Rg¸¢¿"-Þ¼yK"ýa‡Ÿ@œR5ˆÛÍ=^üðèI¦As—cUÜNð7 gñôÒˆš¢*Óê™DíÍ^Dú»"ÚüûêÂö “i=áÛÄñÁgrƒÇÐݾ6UòÿÍ“j>ýá„øVøf[ò­¹'¨­ÆÙÎè‚3@®=Ãݯ”]©]‘³„¶Z6… Îe]c¹zßjÑÿñÐ6}‡düªè8Oߌ›<òW‡¼×+BÇŸýÝ“‡¿7‹Á°0]ŽÁË+Αǭ9ZÄÅŠ)tÝ;m ž.xYô–`ŒKÁ«°Hm©YòÒ+Ø×x5"‹‰yÝÐbD¥£ÇÞfrŒ;· iCõ+pÜSãD2 k¢Ó8§€PภOõ~àydãÚêÔrý$…Ôçñž0ÞÙèËå&d€–;-ŇϪU«†‰ÉihrÜ[VuÖÈDwC‡‚ÅIy݆œ°— F£Ï-G6Ô……ÆœÄÐÜB È~ÌqKìJÀ<ú‰¹‹Ës¼Nråb¶¶yOñCì‰ä½n‰<¥T$ÄQÚÖÈ:bî&)nR|Ê߈”6 ÖŽ‚ky¡½^~gŒ·1ß‚ð¤7_)¬ªá“Â@¼ºHLU˜Îâ€å¥IªUOý&š…¨÷`äÎS9ii’Fgùàþó÷úÙã†-jžüÉzµOàózáøtîBq60ùP åü€…ý r¬G­9(/ýQí’èkaºfAë;óTÌìúî8%ý;ÚˆèܾÑ4O.í]ü¢ºx¦ê•;ÁËœ/óbßÍbXÕP±«ÏGù“yñêø"Ñ H4;`ʯ¶Àæ6„‰:‘fÙ4Ô—ˆs”?¬™´Ï„ãfßýõ¡!¼_ä#¶ÝhfîArŽî€jç$i*žšX;dÎ×Óo•ê3ç²FinÏåd…IDa†/³ kw=4iU-Ëíÿ:ú€< ¦ÏÕ‚êÌS»§áv~K·:M7kfw.HaôÂÃßÇÃÞ0/Ó³£b—jSð*Jÿ vÞA±ŠèD$vKôœ\š+䡚 p—ѵŒÞ Su¤Ã¬Õ¦ÊxYÔ9oöC '½]§w{«ÏKnÜЩÌÒþáâs t’î 5_ úíèÛF¯ âóµçV‹`!¾­Ä½v-\Q¶àЯxZ-²‡\¡ˆ#YÍÉïA]Xµ–xMrVªE¯oºý¨Æ0Nd×lšTq:ÙEOšÁ~)”PQ²ŒÐh©V_|»b3T3béMæ$j§½ŠÊ²+Q\î‚¥¹8+Õ>¾¨è>–Œž¦¥UaøÐã;^Y(…IÒK†„º`ó³;žùë× 2 ˜IïâÍ]·Ew–¬÷ ]­Åìs’f§äÙÔ¾¥%¥;„ø”©¿¤péžÌÙM>ª*O»t=Þ6kî[kešm=•ІKEAŠÀ0ÓëõšÊÃäš¶zQǘ¹ò&{raÑF®gkÇ^mx¶ ‰#‡ë$Ðiöñ\õa@qA¿‰²®ÊD?t„®0ïÊHES]D´$— o‘ÒóDæâü;M—»àçRìF`c Ÿ `oá!’a°Kf-8ßù¡þ&BR§9^Ž]¤ƒºß we>µÛe7RYíÝ ³ç¦])6†ÂYàê¸D¶ÀšS¹õ–…ae½‘B°]ÜÉGï^4 ˜WÆh›Ñcü}ýG6b%s&£¹"ô)kådp ·‘µ.´«ËyÝa°nbRˆåšJ´õýÙª7$±·†2ïb¾W»JÕ1×·6êU I¡ l?-àöˆ`A.àÙyªðäå¬ÂãMÔU ý57ÎİB Lû³S…@b½ÞI€Oã3¾pQ-QŸíœ;ìñŠØDB±lå¦ë>»}þ_öã8ÚÛ2ÁOœ 8†,q‚­æõµY¢OŠ¿ ½ÀhOuCù…‘Êìr^ÀèANéW§¸P?ud›€êÝŽx°€#…ç8–|ôa8sF4™-„þÄ+õõ}gl‘ßR ½æ}\HCþAãðÌ©âߢGÃìùÍ!Að½sG)’£Y½ÛÄÎÄ#œÑ^Z¤œ’Y·FûǼHËÚÉ9Otšgfæ{'‹"A9söpào \ðŽÁ)²æûáËU¿åR»Ú nGjnPO@"Üh ‘,€Úw™GÛQþHÞ![½ìÁ>»”­ýLÅ@šé™î=é =ÏÍ73e˜þî©AâÙiüµˆkùwA}µ<!§ÔH¦¬¸}|g´ìòŽ|®’R@ëfAEn)ÒkÉg®S>@”nÄY0&}$XónI rźu¨Uì¤Jã¡ä [ç }é- I/¤zùé¿9Û¯y çnI¥r,5‚,ýeDÓY×õHæ#]fÎh$ ª„‰anm¿ wóÍtNÔ€Ú¨~¸0t‚NË ¢ũɪ‹YÉ÷0=гbcœ5¥æ4”ºôf:ÃÓ9ÿ!é&¶°ø[÷0\ËÛÇÈJâZ$ªU­4U15ZÔ6'¬EûìÇo×RfòB„@lHæ² •\Y;¹TÅK«»¯æuh—p­³§„v¬±b>y)]‹D*Æ4wí‡}󫮢çWþ§‡U•ééHÔùB EC5"ÿöŽÇ&¢æ¼6!»["˜ ¥fYªÕ›Ps©“ã ¬”­šjRŒ1—7¿äG©ú¹€,éZ-:ˆÆŸŠ}Mð*:³;뻦”N ®¹/À°ñ¹z/ë.`cà1{¨»½Èµð/óEÌñ%RÕ®QÒE:+Ù½ýê¦Ðü_U{À¾Eû…-ÈÑ g°n%˜¹LWÍ5¥`cùŠrÝë”òkÁ‹Ï¢¼ÓeŽ¥U¹•¨˜îRiíRaê6I-3ç¯/O³ÆI§ÆÌ×ê*Íâ£ñ¦M”c¥Ñ îV 4pYJo£oéÙDŸ PAÝ¡3ê3Í MÈ9»ÁÛšößÚáLΗìʪ@ß o’)» ÕÚŽ¦Œ_â±ðŒÿ 1SË+\O#C*Sê™Ø €÷'äÌ9Ì dU©)ïùM.é,h.Ø*­Ó¥¦înº6MV²zMXa扞ÇÂ÷ʰ£’2 LÛ/X1¦ ×&¶Œ~§Ã’£¾$4hÉÿjö `5L\`ðèP" ‘§çÇjaJ2çâsPÎB°³ò«xÃ‹ÓÆ\Ó”*Äâ© ¬*_F£l:k–•|V`wè™É”ƷʾԔÙ_…ègSå$8Œ¼j(H9õåzÌÒ›I%³œ¬ÒU¿vž[[›*€’8í«Í— ˜.ók==û9ñÀ(p‘"ÙÁ%“BRÌùËp>íò3Ö9íÖsà}Gö…NÐûL.ü]Á~}<²'r#$‰‡1šX±ÓŽ=BåqOüú£dW¡ÛK5ô#–eK:g%2kèŒnBKÊ´LÎû¾XÎ;R¼ vèð©»RU±¡äĶ6ÃS!Ôý?ñ 0ëtD·ž$Ààk'ëölÏÒkPDv}ä‹m $Q’X„;vçÅ” ¤ÑE¤Š ë‘3ä”ïÁÄÉB€Ò–3ê.HA¼-cd,mnÃp;©eÓ $0:$ÕcŽêÕð•öýº3ÎÇ6¯ÃÎÍÈ%[üpSAkØ1:¹€CD1ìÌ99oÆŸqÆ?'ú?Gd¥y쫈ïËôí&–U÷ ·‹8á!š²QOWú¹Ü²ˆÇ@í-€ÓÚÙþõ€k®ñ)vœ¤>ÊG¿ÚØ2é‹ÀõÒ0I¯m%N\ÂÅøðàBAl~Õù¤–ÇðÓ.É ìuÅZõ/8J÷u眓ó« #i¾UÄášþ1DêîM‘d” E7jA·¡ÓÂνÝúN΂ ¼nJz€ŠÑõýl¿ä“àÄ÷åãLýŸJê‚3Î^ýt—}…ìˆóÈôÇÐE¼ÈM61ÿ&,&="þÈæ -;E+uŸ@Xm ¡+C›Ô´aNsë&Ⱦ×Å ¦à×äsÙ!ßÜ-yñwàü•ðÕ¸fo&t&ÞÅ2”¿ÒhÐÚÜS3? |óEbÒ%#Ÿ'åe÷Ü¢U»ê>]x±ï=´bnºOXPWá‰D¦À×ѱD¨…j`œ£üˆåü>Ù±§Vm,³zæ1)ÔÈ„^e ×ïö“ԉЈñÛp×*œ€¶¿?öcéñ‡¶4ÙOÏÕ8ö»*·ŠUÑÐÏGD¢<À©ËÑdBPà71Þ(Bþš’•ÔìˆÅÉy‚QÉQ…Ά¶õ^X ,ßDu¸¡Ðj—fg¾yí]¢wÍåõ+¾Ðþ€ù·;==ýðc@XÞH`Ä.þ6¬Àû”/N÷Ùâ2»žkºíõ›ËÄ>|î}l³IèÁ­ANOƒ†Â(ßÚ™ôБVG¸‡`FJ\Mèðùè<ˆ@’X¤Ó>õÚ:OÞâôû% œh­ÏáQ–,ý© ²ÓâPl(lxqcÊ{ŽgÐyæÊ7øÎSß™8xÁ‘ÄÔ$N%2àߪ‘à¶žÔl*f'l Úwúsô¬Ö?)Õ±“,ñK€^W –‘â¹½pX«4Ú¾ulGzoMSQöJ9ï®Üx ü#œ]Ç7`¥·I­gD-öà!¥/G=Ýn¾€9æbI¬ÛH}¢ó—\ "ê‡`òS—‡YݚɟõU¨¦tÒZ×Î\€g×»â›UÏèCæÚ§²y†¿œF³—q—$n‘!Þút×sHóí!I Ä ‘—ã(Úk9³Þœ°¿fn õt“½ÏÖz%•ƒ³Ú,ž;)ðwº7AqJȢïٟ%>mäP UÎøæ-|'ý¨@îFâ–äÒÄ%¤X ÜtÉc6ŸHÔœl§×ó÷tDIü=-ùyvG¸» vÿ+6ü¨KŽ“cæ~šñp»œñÈ?8ý¦º;A9 +2ðƒêh»»|®{’~ßÜÊO¸)?’æ¿B+9^‹]!ºˆ…ã}¤¶ýÂ’1Éð*!®m{£SÛC—=$XΊ4coâÓ‘Ëz°‰öË¥hû"t’þa÷COX_!šn1œa2ÓK\$)ôo#„á}»‡i «}~ˆNõ«.zf—ž¿¶–Ëú¸šÀ´ÁÑO˜wѸL_×­ÓVšî•Ïy6DÛkFµ©_ 1–ò¸˜Tó<šnªˆxOHHO Píš6o£‹é>ËÀ‡o.:Zâ‹°La, *ôòórmÙM(nzVÏ L?j ¸=ÞQÁ-Ò“r†R‰ØañM8ºCSb¬V(M¯M)Hp´Ë¯K-J[™8~åìê\-‰9—…Ü­†_Ör›ÃÙñ4TãJ=]äDm–ørµ‚.q‹øTá ã^á·0Ûgkät¯CÚ°V6ûJÍÕðÖ*Û:OßËsSûŠýFÕ¿Q,Ú=ë MœQa•Ï¡›|jµÁûl§d¶© ä0°·]Ì5t³+­QëNËëe*d ¦ÿ§ÄÌ~þ+ÄSÁc•œÞ˜\áÁÅ^aúÒˆÃz¾ì™Ñ \€jÚ$ÿæÇÙv8‚P˜ÈÜ%">ä•ö¿¾ ²Î¦%“]˜‹†„ªÙÜh˜JÒè°qÍéIëö`ï–@­cv¹€Ù]X³Ò~ƒ|äʉ+x™1@˜T+CP¢*ç)õÿÂ\±#!×.ýꫳB¨™S&? ¯O qkß\’/Zºª€Ekü(iã#"‚½n©Ü+Å{XdA`âgE$4 d‚ <ÌHz!7GÀþé b„kªe·~tð+= ×W ´³=9ä# Ü–XûõÂé |U@,Vâ‘X}Õ/PE™•>™‹-’ð7î ÝüRzzë@¼õMg:%!cű­O ˶ìvÓXô¢ˆ^ë)²ªeƒ¯±||ýRC©ÍjÜ$Sõu´9“r8bãÚ4iôØÏ"2ùÀ !££¦W Á¥_¼ä«wC‡1£x±êÛ8•D¦¸½U1µi¶í¥V@¦ï—MÕÃB6ÿ©‘çùã¼»—Õ¡~­ïÈ ¸f©#w–?€1TüPòá*b ì¢ú󩨿5 ´®$ÂGæ…|®ïÅÇ…$¾”Õp"×övöy©‚–™ãSKˆë¦Úyp¼'²:¥Ô-¨ç:÷O";p Š¥™¯pÕÓÕ)1nuÌ­Ì÷äˆbG¢Ò>,m®ýæKh&”]YßÛ‡&PÌ*&?¨ð¹^ápcÇŸjba†"Äf²%¦©¥Ô'‚媸g€Ú_Øcà#ÖlpÀ0ÍgÙ@{2 ¨Çõy]½6",árÜÝ(ÙIø‹xápäµ|)€‹—TðÊÁúTqcÓ(RœgõË(_2nÖ%Pˆ\å9/éŠ ñëSBè—¸ÍD5h<·ü-ySKîõqÉÉ€ÒfWæ^¦|·Ë`2ÌÓÐxÐ5÷p-Éêµ¼Î⇿I#~uÿ ‚ŠŒˆŽ,øåçŠé?ݼ^òQ6NÊÌXZœŸ%ï@òU¯ØÙƒAGò%èI2Û³^t{Ãe´ôi rŽ„ ‹à4Ž÷2™[õ4µõWñؘ ?™BÀm1•âlL~ká¦Y¸··±ÚÝ$³±8 4?+8RÙ4ñ„=6cwøó¹Œn4B{ÖA͸‚6œ&ñ A/[˜J…¶Ò¬ÕWoœÄãnÊΖN…ÏúL¬¹¢HAb!*EïlÛût!}†z Z†Æ½eÃK5VûÀ‚{}2*»Ìê—¸¦ú5‰D³{±sð°Kæ™_ë:4V0‚“èjP¨ÜfûvRIœà]Ò¹…~"S©ƒ=2Žq4'óªWqdS˜h×™‘±V^§åËV‘Æ~ 22Ý–ß#1îl$|<¤Øb¿Éõ/ƒVKR ½È”÷ÜÕÆ€pG¨$ià†\æ„ôÂ6¹HEhÀâlÌ­H4VˆÜB‹”0õê6÷VIŒì„%|ÿÇê*#âE¤¦íû&¿\µû´ª øw„4q¼Ô)ø†ê~®W¶©ê™Kî­pt2§Z¯*ν¦¡.v£'Ú&+WP(=ûi]²Üà ©­ïoò©)oä¾Ñ_öÚsSoU6ðWäŽpm,z†>fs¢ð’h©nзqÔ‚“­¹¥Ï‰{ÛÕÌÕ"‡§?^.MS¦Æ½¦ü¯“T0Ñ;[gÄ<;trÜØ eui“¢ûHû¼~@ÉojÚãÇËd6ìÀGõd3¥²Šâ° ½C}!åt_L„TÓ¹]t6ö’ƒ+?r_8][gq)’õ.Ww±Š`)¤üÆñÁgDM`tœ˜#0‚%£23늗Á+mqô¨ˆa”¨3+‡=â‰L~2°gFsv+Žá”ð/¯°N¹×tTN«þè•¿`XXù¥”9a|î—!QTSj«ä¸y¹Âw&ïjg°ÕìP䆕!VƯ’,¢™e›®ôMk ò#dâþg7O4Rn!¸Ù‘1™4ÔEðÙ –º`ý}œÐ¹8Ú¶3={ó?Ýz½“~wI ®õ¾»ñŸÇSË ücûÍ¥U!Çu t5 ‚HŸ‡Èü ÝÂ^vzƒn$*Zýä="gU{³™´ \—¢ Úãá•쟣ý¨ºØí>šþÃ$»¾ÖYogç[±|á*v´JTK ü¡>ñƒ1#µiÕU-ýÉ[À±»µ«²Ç9±ïÛòˆ3ÓO°¡P¬*ÈîªÈ/4RG4­Aá+‘cÔp9:©¥{Œ³Žo]Mjpè–¢nö4v.oÆH:€ãú¬ˆpýÝÓÁ±¾{Ùj½©(üô ªjBË“µß›HrÞ3#š+ÁÞ 8åï^–ÕWéWöú°|!ñÙwà?É1_ræ,†¼ñKÉ:&–¤F“Œ‘íóØ55HhûæÅË“Ýy<ÿ=evŸ¨»¼ ë‘÷ÏÇÀˆdǪï3YèŠTzMÆ·Ò èÁ³½åÙ-sWjYC =ÚE±¢ RÖ9¦æÎ{3ÞÜéj¼õ˜¢¦C¨P”ŽÄ«C2f°ž~g˜xdÂݸOâ3æ>-påŸÑX§8îlHý A9p¦… qiÝŽªfÖ‘¼íã'ª ðß`Ì ,äÔaCÀãæäˆFJ£ql'k)šÓ쮢˧¦ñÛ7GETKh—4žøsDåXŸ Dÿ †‰"N¨cÂ#˜2¯+' f-Jq·íù 0×¼Hsð9çwU1eÀxóLõµI‚ÓþIE²]öÖëñ¥ÅÙ×™V%¤àIlßYþ¾ ŽÁ ¨²®,)ý éêIîW¥ÙVÜ_Ú'üïtå}Ž“ßH„8ùÄœ 2j„njä@pAùXüJ8êËÑC*ƒ;õÇ%[¯Ny…Iÿ¤º™;wûf-é±úÎàÑVÜ6–ùTßí¼uÖcñ½ÕÑB‡4˜-8µ&)VÉóK´54E L´Kã¥|²³{ (FðR-Œ­ÔíVŒt}3jÐÕGÑ[¾¯àÀ0²AõƒƒS×Ü‘vßg§0¥Ë:¼\¢Üü>Õ4mšµCQ\žüNߤüÏÏ«iûË8DZËEI£ÕË„6(±Pà€¥7›f¬\ºMló.ì±ÝK/“\[E’МØnߨõ©&,€G~)Å”Oóë7-ª­:6 ½x;þÐ0‡ü)p nœð”w{å÷P½uг§›EÑß7ÞõÁ¤༠Þ]ƒÌ•Æúï•íwI”jù„7Å H»ä¤¾qÌÊa9z1T¤0P@ã,¢xúIŽ€cÌôÏÙmâê¡Á]Q'Xù(GäÏ(úôhäÑC`=œãëSõ>)ײz”á~ÄûUg4oÒû™úŠ'ðíÆ[ïÈè¿f‡:À9MU;7ÿeqý2º6¦xé#ÍDŽÑý9vÑÿ«Åy[aÒØ¹åšÒNÅS¨©äý½ËÃFžã@L¡¬CÓüÄÚ.j—×dØ6^ß0Lêx¸Ôä¢7¿Ž'™‰H5ÊБºYP»Ƚ0eÁØŽÔÏíªŽYcݘ±ÍüªE(á*o­0,oŽÞÁ&Óyc=-$)G†Ô¾ƒâñ;´6{ ±îh°ù#÷¿Ý)«CŽ{1ñ¸\ ×£r§_´¤¼³/žùÇnë<¢ 6¸ç?¾¸gߥh;qý2I%‰•(–?S8PêÖ GùÉÓæTW´Î pç¤Ô¥æu§,CELöhûE,(EK×”“NêˆÔN“©¦V± †‚™lGšŸ\Ó¨{¯Kêjúñùn”C•e:Üç'0ª 4ë/´ØädôßÞâÌÌí+Éhm7;MQ_ÃÏç¿ÄùÆN¦ù‡Årì7é(ÈÈhZ”̯2—5épU²Š\_‹Ô Ū˜„J†tg„V©rÎ…Ç€ó¢Ñq¾|¢ã 5A9;.Tþ:Kž¶£)úÑiëT~¡OD@ÞàNwºb‹]†Ìñ(Ö1F¶S…è„U ’Ï8¹Íß‘Ü\ì½L ¹‚yÒÑÃ&Ù¥± CÇ•ÎkSN4ÞZžUr?Ùv\ÝxæøjUˆ‘1°ÁB…׿K µ°U»HÖ­eþ‡n y–iDlQnÐÐdSâêÝä‘üÁZœƒã…wËî×íᤠË2ìÜ v bíÆ±ÜŒ± dñ"fD—©•ï9HdÎÔQ;Úü3h*y\ÓשhYŸ ­¤¼yi‰&íÐÛþ5wþ->ÜþËŠ¨§áIÞB‡…00^‹ñ‹²§Äþ‘+Q}/èÃT´°Ç€ZMò»T1ïJ…Ó´äÌ}zÚ,ë Ür_]%”Ó2!Õ0sèM‚XE—“òñ ü¡^”pLÙÚ´¦°T”ðõnµIƒm>[Â"3–p¦åSià¾'L“?0;áJéyYf•BÒÍñjø‡¶ª~Ðj[‰ƒ ý¥Øð¤ÙN‰ZN2ššÂS ¶°;Ëþï¶Ùµ²NR€û—ï“,RÙ85G¤œ‡72Æ—å=DT¸gûa®ôÕÅ!ÑÞvçPé“4 ~J‹2¬R•„£Ã~X·= ¤—Caf\sÛœ÷ò’ÕIãÞ²@IˆùCÞVI· L£ƒ¡Ü¸…¥U“ümVAÚQÖ÷£Z®'$–±•o:‚¡‰A( (¬”ƒQ7°Œ×bFAÎ2Ôèü8>÷à%'¦L]Ø#yV_¤ÕÏÜà‹#lÝÐ0TAo²Mº~˜¼ÇšeþõO÷}ŸÔt6̃ Eïe`-á03àIük 1 ,¥Ÿrøv»3Ù¹ŽNE"G0%_²Î(hÐ? wʘ£!3îÏ2^ðÝdÙpõÁf_{õcò¾±J:X¶`5O¦äI“¥íþp­H^èï˜ä`Wÿs‡Xû÷ÃßëÂ…·BËé̽ä,¸+ñDa;k$ØõµäÔá †xË$à^…oáª~¹/˜Jq¡o~s]ƒ¦´æäótÈÝi8ƒ9„‡¡ªMØ!)7ZœDv{°uW^l5½­ûÃþ+EÌô¿¼Z³hÅT«¸þzñ<à³ùÂ]‰ÔüÊÜè®1Ãä«è ¼tîw}ßÿ¤‰ö )©“Eí—«rEª ­QŽ?+a2‡MŒÓøŸßR“ Âåƒ Ùc~f<€´q‰jA«D=Hú÷6`” ÖÅü“4ê5`EÈÊ= C²ÀN´vMî*¯ˆ]ó´Jt%·°'Äèh~‚B[çÓG‰Zÿ¶3›,¬„}²¡eÓ·d’ó-ˆ¡·½®| ê‘gÃA#N¶ô#epUf9·Æ@(ôNÙØégHQh±‚ícáÿ[ <1™>z”ì<˜MÆ£Q”';Ÿ=¥ÿ‘L7ìOÅ(6Ía %v¿”Ó¨çŒwØódÕ^Ý–‹‹ãW$Pˆ½]æåj*©~yÅe>œÃiL|a(ÉW,¦¿]ZUÙFCdHR`¸[Bž Ãþ¶62 Š?ª”3!C:¬_CÙW,_J‹œ.Å‚ŽìÖÀ²aý]÷#Ù­Ös gØb`ÒuWŽ\‘4èÉü»y³“×uíöÛ`z§¢Wm*)(D{bÑŸ •¬Jwj žT»ä_ûe'P³äQê3;§C~ÀÛ ÈÂgïw-ù]÷:ø :è,¸4ïúG/è'ÉsÎŒ¹ŒBo5ÆÔ9k Æ;j‹«Ë*;ÂË:€ö‹Ð?ªó º4¥,36ˆºñ¨rfÐy›šU€e¶]L³çl˜>(€…;²ëÐÊE:ƒhÚ˼£t/øÄÝ“áÈèLqùß[aºÍ kðoTæ·ö»Ùdrèÿæ:êuɯœŸ±€]( úÏ¡¦ß(·æ‘²Ë|r5ïûÐç`È÷B-§¶í5³ûéÑã“áDÃKHzsà˜â›žëàäy’N»¤5<áZöEóÒ3T ©!8ÁâEh;&›ãŸ~ÿâqi¡ ‘\r>«âôCœy‘à5‡Ü§¶=”G´=]&Re’(Œ÷­ˆÂÊ“ð#DhXcœ2Ê»r+‰ð³h‘u'ßö@µuçÐÄÌ­Øj5Ïû†>f/3„ªÝ Ř$âA4Êdë–-½p4cewG“Ï-ÕÇ9ö\ÚS­ îµ¼‡j€Í(íêe{{¼.o]M•ñ†ÎizŒí˱鿢¸çŒ³.Š\`¨ð‰ÄÐÔtf¬U;u0e» ´37&_-ŽìRð†[ôã!÷ÜÞ»ìÝΤL…yãÃŒ+õh51/7ŒW¹Ø¾$/U½…Í—Ò èŸeøï›™RJ Ê/nvêóóFÕÔ†ÞÞÆܹ›ƒ¯Œ¡„zŒÈP±pNC}ü–<^°-¹r|„…‹ÔôŸ$~ò÷ÍýÄÃ$ ÚçšMDlh2ÀæüCõÓýôAøÃ&RÄhÑMïK²@ü‰v=qdmí6›tŒ©©µOÍP÷šGÚ5“ãÈBǹ8]»2ƒc{üü <…3±)£´©gšo0ó£Ö Þ“ÀJ$õÌ¥åpÀÌV‚O~t—½¡•sŸ$ ~Kt_.M°³ }†…"·?ó5ºÚ'ù†}cŠ“{éÐtÀ‚ìZn2](³% èvˆç)ˆK„_æ'îÏÂõ™|Ó@›_‹~,ÿï8†V<`Ò ºÆ[Ì}m¹gð”«õ©š±Íç+ç ŸG¸ªÑn政_*`D"P»r}ÿ¤‡ …g-Q¨»YSdêÏ¿i5"µ #ù:JÂlA%ìÂ5^¿ÞwN¥|×@¢}°ñP¬<€ÞÈ’oö}ÚW++¢¢÷–‘îYnÌK_«žåøë9Ù׋õ-^Ž8È©–¢î³ç'Õ]eE«lZP['!5)•^ši)g\›YŒ/dQ ¼Õb [sÃÉX ?ºÆ%§ÓŸ†òíhÞÂnŠ:LÞð>)èúºêûYr_™-`")ƒë³“ÓU<ïÜÞv³á’v‰µ7Áèj™BSøQq£uÅc&·qÆ[Þ]UDFç‹I¬`¼½œz2.ï( t…~Á`Î!šsý*Á6ÄÉ“È6›üAÄxö‰›çÇßyAѸ ÝoµDa«Ÿ)™¥ü?€"C£{ó|âÁm‹}WË^Þ™“ L’vem¡üv TyFñ©qÌÈKÀq&ж —ÛüVw’á[Ã¥ë0[Û .†ñ=?ITX)šøt$>}‰>Ÿ™¦÷ScÂn+´)Sq°Vã­ùóáëн9ô˜sE“bÝâ ôógŸ„„ÎaÊ q–¶QUwMhÆ'ÚQ…@”œôá0ØÝ¸÷âvÔP¶ŽÔ†x¸¸Wu쨎È{ÝÄMìôJ¼šZ//Ib±ðmªÔ(h‡ô(¼þh­jP:ÖB%þÒ“·ÜIêÚ| úÑ!}—LR›Ç=³=<»#À˜» ÕèÃNß©æ¨Îž0e+qÊF¡½#¡Ãj5ìV~¿:ùÔŒCÎçy9.—™¦ìâL^{:|=Š\Aø…^{©ÞÕ)6ÖeŬô6Ńß6˜r=9¾ƒ4¶Õ̦T«—ØrØéŠ…Ã8´Ó­ `|îWšë1ª3¢ ü)Õ¹ „\û,Êv5shQÀ,ñÚ…Õ¦;\ÃâéY+èÿ·ÒÏ¿"¶@¡ü&BÊz<ˆð¸hUãJ5wL_€UJÊñ—CÉöÝÆHI(Š0+–g[?é6€¹wXàÀÎÛ¿CÍ='k‡ö~·\²ˆÍÇ1¤Ã_Ö5_õì¢2±‰âééc+ëòcÙõx¹8NÇ[¨n¡Ä-9«hÝbËÛ×ÄJá)""ð>6 –´Fh¢¡Õtê°šŒ…µ® |ññ0ZÅS ”&¹ ‘‘`Sßal-çðš‚ÿ% w:Œvµb1!üároÑÉ;cÜ| ¨© Ù?Î\a7%Q$n Úsö\&˶9¥ƒ&„A)ØYÃÀ<&\4N(ùðºù?¦ŸÛ,KwuèÞ™˜fdEA´@$‘¦}ÑÐÐi¾¨è Û.(qC`έ ¾´ü$c!!ŠŸ”öPø8¥*ÈŸ”e¦’ÿ–]c¥JMÓ½JˆP”ú%nkû¯loéÂ=6È'€Kp¡aœ0±Åšnk"©‡;$:6k&W±1ë±ük,• <“»û2ž°û©çãaþ%´Å‚˜\Jš˜ŒŸn}Ãø Ì×¢í°ZÀ¯ñçcr%«ûäØdٴк’eepUq¥»¤uPÊhÒx ƒcÃÚ«›¦Ûô»0 9˜Óù¡(Dž"YD¦Á• wÒÉ1—‹µ® Û¶4-j½-â$-iޏ=ÿÓÉòéj‰ªÇ1Ëg´Tæ8¿.’ïH’äÚÅ䔦ÿcæß0jéŠM•ÒovÄõ)Ðd¢`'t|7pâ°êC‰…æƒJÿ[mþØþæÉY^V€m×0þ¬étä}y)è7×(:BüÖ´Éö¦óGþzãŒ_#°¬ãÆ}ÔìB?Ô `hóòÚÙk Ö™"ž/P=5Ñ"X'Qm§,Å[Vð>§…[yOÔ÷U ?Ü$«Œ&ØÁ%¬¶ÏI(ú íAð ·Ó} ¦s?Áá!÷”ed~«ÌÚ¥ˆúddLø$üŒÄR2AÚ,oÕ5œõÜ1®ªúüÑ•½¬3³x*emÇ·­Î1` 1¢1%螺IŽÞþ:r2~2¥Þrb2¶ö?˜í ÜÕ*e:f׉ð¦¥zᤦ}m ­Ibqþ1Wð†–ž÷hs¦æ<{à«í‘˜ÐcÓ ¨{*wñ}ïB°)¬ÄÑò$|/"Õ/wF’«Â€ÿ8‘gåH°Dø›õ]§rÚ"ªÉ2Ç6ÜÂ/Ò”éo§TU½ð3z¢tf‹Öï ™|»½TùÔ=àâNÆtF3ÄXet-‰†®^¹™E£HcR[“§ó}?=¼5¢ò#TûÁU j¦Æ½tq¡p˜eâ[t>%'Å.ªqÊa3JRÁ·ë´ûÅŸ±È4^¯z¬îYmϰù‹Žâ9¡†#¦ó|z!•¤¡‚OzêØü!f^’⧈á TMÌ¥`÷€gííCúMÐé…¬CerÀåDo4Ây©8ø,F8ªˆ$sû$¿®i,|DN6?ôƒàÙc¨z)!:PlOÓKÀÅ?µ{Øqãà 줪¶œŸ‘æcèI¢ö@ÁèŽG¬ÇŒ®Û^¸äŽõj2]%Û\Ö=6*ú(ݲöIÏœj=›òø#OÏÚŽ…ͨŸ8p?îçL‡3ÍM¾%³Pò…̨økõx)+>ÿ†­öÖþ›%µš Ntöài\„ ñÒ« ¨c¬dâ’·ž ‘zÒå®Bƒ&ÂbšÉ] üìn{‡vnQâd OµY:\ûõôúþÜ;lÁ!¼8# J$N’ìÍßÕ=b=ôCu<„|DöãáɳDy,á“f"#U4,ü‘Ðþ÷8†àT&ô×3”!âOªË8w_#&€ 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if €reportlab-3.5.34/src/reportlab/fonts/DarkGardenMK.afm0000664000175000017500000002415713544671343023250 0ustar rptlabrptlab00000000000000StartFontMetrics 2.0 Comment Generated by FontForge 20071110 Comment Creation Date: Wed Sep 10 17:07:49 2008 FontName DarkGardenMK FullName Dark Garden FamilyName Dark Garden Weight Medium Notice (Copyright (C) 1999, 2000, 2004 Michal Kosmulski ) Comment Comment Comment This font is free software; you can redistribute it and/or modify Comment it under the terms of the GNU General Public License as published by Comment the Free Software Foundation; either version 2 of the License, or Comment (at your option) any later version. Comment Comment This font is distributed in the hope that it will be useful, Comment but WITHOUT ANY WARRANTY; without even the implied warranty of Comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Comment GNU General Public License for more details. Comment Comment You should have received a copy of the GNU General Public License Comment along with this font; if not, write to the Free Software Comment Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Comment Comment As a special exception, if you create a document which uses Comment this font, and embed this font or unaltered portions of this font into Comment the document, this font does not by itself cause the resulting Comment document to be covered by the GNU General Public License. This Comment exception does not however invalidate any other reasons why the Comment document might be covered by the GNU General Public License. If you Comment modify this font, you may extend this exception to your version of the Comment font, but you are not obligated to do so. If you do not wish to do so, Comment delete this exception statement from your version. Comment ItalicAngle 0 IsFixedPitch false UnderlinePosition -420 UnderlineThickness 80 Version 1.1 EncodingScheme ISO10646-1 FontBBox -11 -331 935 1122 CapHeight 931 XHeight 869 Ascender 831 Descender -123 StartCharMetrics 86 C 0 ; WX 1000 ; N .notdef ; B 0 0 531 890 ; C 1 ; WX 0 ; N glyph1 ; B 0 0 0 0 ; C 2 ; WX 1000 ; N glyph2 ; B 0 0 0 0 ; C 32 ; WX 500 ; N space ; B 0 0 0 0 ; C 44 ; WX 130 ; N comma ; B 0 -76 123 105 ; C 45 ; WX 611 ; N hyphen ; B 46 364 560 519 ; C 46 ; WX 131 ; N period ; B 1 0 124 124 ; C 58 ; WX 187 ; N colon ; B 32 6 159 447 ; C 59 ; WX 187 ; N semicolon ; B 36 -98 163 470 ; C 65 ; WX 706 ; N A ; B 3 -162 670 853 ; C 66 ; WX 624 ; N B ; B -5 -27 602 911 ; C 67 ; WX 619 ; N C ; B -1 -52 590 846 ; C 68 ; WX 730 ; N D ; B 4 -133 703 912 ; C 69 ; WX 613 ; N E ; B 1 -100 613 836 ; C 70 ; WX 660 ; N F ; B 3 -96 629 833 ; C 71 ; WX 624 ; N G ; B 5 -61 594 898 ; C 72 ; WX 660 ; N H ; B 7 -177 629 876 ; C 73 ; WX 284 ; N I ; B 22 -179 271 932 ; C 74 ; WX 603 ; N J ; B 3 -93 570 863 ; C 75 ; WX 639 ; N K ; B 7 -182 625 921 ; C 76 ; WX 658 ; N L ; B 15 -3 616 903 ; C 77 ; WX 833 ; N M ; B 9 -236 861 874 ; C 78 ; WX 614 ; N N ; B 3 -135 579 917 ; C 79 ; WX 691 ; N O ; B 9 -35 659 848 ; C 80 ; WX 648 ; N P ; B 4 -203 605 846 ; C 81 ; WX 612 ; N Q ; B -11 -179 578 894 ; C 82 ; WX 647 ; N R ; B -1 -331 614 891 ; C 83 ; WX 666 ; N S ; B 3 -60 654 876 ; C 84 ; WX 829 ; N T ; B 0 -195 787 817 ; C 85 ; WX 688 ; N U ; B 6 -33 656 874 ; C 86 ; WX 618 ; N V ; B 4 -188 589 991 ; C 87 ; WX 985 ; N W ; B 4 -132 935 974 ; C 88 ; WX 690 ; N X ; B 6 -125 731 951 ; C 89 ; WX 645 ; N Y ; B 7 -209 609 953 ; C 90 ; WX 841 ; N Z ; B 14 -108 853 845 ; C 97 ; WX 612 ; N a ; B 13 -93 581 769 ; C 98 ; WX 528 ; N b ; B -4 -23 512 774 ; C 99 ; WX 571 ; N c ; B 42 15 545 779 ; C 100 ; WX 641 ; N d ; B 15 -60 609 829 ; C 101 ; WX 527 ; N e ; B 8 -35 528 760 ; C 102 ; WX 563 ; N f ; B 21 -25 553 765 ; C 103 ; WX 549 ; N g ; B 21 10 522 825 ; C 104 ; WX 581 ; N h ; B 24 -96 553 798 ; C 105 ; WX 256 ; N i ; B 22 -99 235 846 ; C 106 ; WX 527 ; N j ; B 17 -27 499 786 ; C 107 ; WX 543 ; N k ; B 6 -155 531 783 ; C 108 ; WX 525 ; N l ; B -1 62 510 832 ; C 109 ; WX 718 ; N m ; B 14 -151 738 792 ; C 110 ; WX 523 ; N n ; B 13 -63 502 832 ; C 111 ; WX 612 ; N o ; B 30 28 584 779 ; C 112 ; WX 561 ; N p ; B 13 -124 524 767 ; C 113 ; WX 566 ; N q ; B 33 -98 535 814 ; C 114 ; WX 548 ; N r ; B -3 -245 520 795 ; C 115 ; WX 567 ; N s ; B 3 9 556 806 ; C 116 ; WX 718 ; N t ; B 13 -117 682 743 ; C 117 ; WX 587 ; N u ; B 8 36 560 805 ; C 118 ; WX 530 ; N v ; B 9 -99 506 902 ; C 119 ; WX 774 ; N w ; B 1 -49 793 891 ; C 120 ; WX 604 ; N x ; B 11 -43 628 870 ; C 121 ; WX 559 ; N y ; B 14 -122 526 866 ; C 122 ; WX 764 ; N z ; B 7 -36 720 774 ; C 196 ; WX 765 ; N Adieresis ; B 8 -179 724 1064 ; C 211 ; WX 704 ; N Oacute ; B 7 -82 665 1012 ; C 214 ; WX 791 ; N Odieresis ; B 1 -68 755 1084 ; C 220 ; WX 763 ; N Udieresis ; B -1 -59 728 1122 ; C 223 ; WX 543 ; N germandbls ; B 2 -304 516 795 ; C 228 ; WX 650 ; N adieresis ; B 6 -152 615 904 ; C 243 ; WX 600 ; N oacute ; B 8 -2 567 928 ; C 246 ; WX 672 ; N odieresis ; B 0 -58 642 921 ; C 252 ; WX 648 ; N udieresis ; B -1 -50 619 953 ; C -1 ; WX 699 ; N Aogonek ; B 1 -257 657 838 ; C -1 ; WX 594 ; N aogonek ; B 1 -219 559 712 ; C -1 ; WX 596 ; N Cacute ; B 8 -57 561 1046 ; C -1 ; WX 514 ; N cacute ; B 14 20 484 959 ; C -1 ; WX 739 ; N Eogonek ; B 2 -240 738 785 ; C -1 ; WX 637 ; N eogonek ; B 13 -121 640 750 ; C -1 ; WX 848 ; N Lslash ; B 8 -107 908 871 ; C -1 ; WX 722 ; N lslash ; B 11 -32 776 799 ; C -1 ; WX 627 ; N Nacute ; B 8 -46 597 1050 ; C -1 ; WX 534 ; N nacute ; B 8 32 509 964 ; C -1 ; WX 558 ; N Sacute ; B 4 -27 566 1094 ; C -1 ; WX 490 ; N sacute ; B 7 58 485 1010 ; C -1 ; WX 721 ; N Zacute ; B 7 -90 714 1013 ; C -1 ; WX 617 ; N zacute ; B 7 -44 607 894 ; C -1 ; WX 759 ; N Zdotaccent ; B -7 -103 749 925 ; C -1 ; WX 655 ; N zdotaccent ; B 4 -53 645 822 ; EndCharMetrics StartKernData StartKernPairs 291 KPX hyphen Z -126 KPX hyphen z -101 KPX hyphen X -88 KPX hyphen x -76 KPX hyphen Y -63 KPX hyphen y -50 KPX hyphen W -88 KPX hyphen w -88 KPX hyphen T -139 KPX hyphen t -133 KPX hyphen S -114 KPX hyphen s -76 KPX hyphen A -114 KPX hyphen a -114 KPX A C -25 KPX A c -63 KPX A M -50 KPX A m -38 KPX A h -63 KPX A H -50 KPX A hyphen -82 KPX A s -139 KPX A S -120 KPX A y -145 KPX A Y -125 KPX A t -145 KPX A T -145 KPX A v -31 KPX A w -112 KPX A V -24 KPX A W -94 KPX C S -69 KPX C s -63 KPX C A -31 KPX C a -44 KPX D Z -88 KPX D z -69 KPX D a -101 KPX D A -73 KPX E S -63 KPX E s -63 KPX F t -139 KPX F T -82 KPX F hyphen -101 KPX F period -114 KPX F comma -133 KPX F A -239 KPX F a -229 KPX H A -44 KPX K o -50 KPX K O -25 KPX K s -107 KPX K S -101 KPX K g -88 KPX K G -38 KPX K c -114 KPX K C -69 KPX L t -203 KPX L T -203 KPX L Y -114 KPX L y -114 KPX L i -63 KPX L I -69 KPX L hyphen -107 KPX L S -114 KPX L w -133 KPX L W -139 KPX M A -50 KPX M a -50 KPX M i 38 KPX N A -114 KPX N a -101 KPX O y -38 KPX O Y -44 KPX O a -76 KPX O A -76 KPX O x -76 KPX O X -76 KPX O W -114 KPX O t -139 KPX O T -178 KPX P hyphen -101 KPX P period -126 KPX P comma -139 KPX P t -44 KPX P T -95 KPX P Lslash -177 KPX P lslash -177 KPX P A -166 KPX P a -177 KPX R Y -69 KPX R y -63 KPX R S -101 KPX R G -50 KPX R t -139 KPX R T -152 KPX R V -10 KPX R W -73 KPX S E 25 KPX S e 19 KPX S S -57 KPX S t -88 KPX S T -31 KPX T lslash -190 KPX T Lslash -229 KPX T U -57 KPX T u -69 KPX T h -114 KPX T H -76 KPX T hyphen -146 KPX T period -126 KPX T comma -126 KPX T oacute -146 KPX T Oacute -101 KPX T s -139 KPX T S -126 KPX T o -101 KPX T O -69 KPX T A -250 KPX T a -250 KPX U t -38 KPX U T -31 KPX U X -63 KPX V Odieresis -94 KPX V odieresis -109 KPX V o -95 KPX V O -76 KPX V hyphen -101 KPX V period -120 KPX V comma -120 KPX V I -50 KPX V i -88 KPX V a -156 KPX V A -131 KPX W Odieresis -87 KPX W odieresis -103 KPX W lslash -229 KPX W Lslash -248 KPX W H -126 KPX W h -146 KPX W hyphen -114 KPX W period -159 KPX W comma -177 KPX W s -159 KPX W S -126 KPX W i -88 KPX W I -44 KPX W oacute -152 KPX W Oacute -178 KPX W o -133 KPX W O -107 KPX W Adieresis -152 KPX W adieresis -131 KPX W aogonek -166 KPX W Aogonek -166 KPX W a -219 KPX W A -194 KPX X hyphen -101 KPX Y O -44 KPX Y o -88 KPX Y Lslash -152 KPX Y S -126 KPX Y hyphen -95 KPX Y period -114 KPX Y comma -114 KPX Y a -208 KPX Y A -187 KPX Z y -57 KPX Z Y -50 KPX Z lslash -88 KPX Z Lslash -82 KPX Z i -25 KPX Z I -31 KPX Z e -31 KPX Z b -38 KPX Z B -38 KPX Z hyphen -101 KPX a c -63 KPX a m -38 KPX a h -57 KPX a hyphen -88 KPX a s -101 KPX a y -145 KPX a t -166 KPX a v -20 KPX a w -107 KPX c s -57 KPX c a -50 KPX d z -44 KPX d a -73 KPX e s -38 KPX f t -63 KPX f hyphen -76 KPX f period -120 KPX f comma -126 KPX f a -208 KPX h a -50 KPX k o -31 KPX k s -50 KPX k g -31 KPX k c -76 KPX l t -139 KPX l y -76 KPX l i -38 KPX l hyphen -76 KPX l s -63 KPX l w -95 KPX m a -44 KPX m i 31 KPX n a -101 KPX o y -31 KPX o a -76 KPX o x -69 KPX o w -95 KPX o t -152 KPX p hyphen -50 KPX p period -107 KPX p comma -101 KPX p t -95 KPX p lslash -145 KPX p a -145 KPX r y -76 KPX r s -88 KPX r g -50 KPX r t -165 KPX r v -20 KPX r w -73 KPX s c -25 KPX s s -50 KPX s t -38 KPX t lslash -159 KPX t u -57 KPX t h -82 KPX t hyphen -107 KPX t period -126 KPX t comma -126 KPX t oacute -101 KPX t s -101 KPX t o -88 KPX t a -218 KPX u t -38 KPX u x -50 KPX v odieresis -83 KPX v o -69 KPX v hyphen -88 KPX v period -88 KPX v comma -101 KPX v i -50 KPX v a -125 KPX w odieresis -20 KPX w lslash -146 KPX w h -50 KPX w hyphen -57 KPX w period -95 KPX w comma -101 KPX w s -44 KPX w i 6 KPX w oacute -76 KPX w o -44 KPX w adieresis -111 KPX w aogonek -152 KPX w a -166 KPX x hyphen -101 KPX y o -63 KPX y lslash -126 KPX y s -101 KPX y hyphen -82 KPX y period -95 KPX y comma -101 KPX y a -177 KPX z y -95 KPX z lslash -120 KPX z i -69 KPX z e -50 KPX z b -76 KPX z hyphen -177 KPX Oacute T -139 KPX Oacute W -88 KPX germandbls t -95 KPX germandbls T -152 KPX oacute t -114 KPX oacute w -76 KPX Aogonek W -101 KPX aogonek w -88 KPX Lslash Y -76 KPX Lslash y -38 KPX Lslash T -101 KPX Lslash W -156 KPX lslash y -50 KPX lslash t -101 KPX lslash w -187 EndKernPairs EndKernData EndFontMetrics reportlab-3.5.34/src/reportlab/fonts/callig15.pfb0000664000175000017500000016441713607302650022417 0ustar rptlabrptlab00000000000000€Ë%!PS-AdobeFont-1.0: CALLIG15 001.000 %%Title: CALLIG15 %Version: 001.000 %%CreationDate: Sun Oct 16 04:57:33 2011 %%Creator: Khaled Hosny %Copyright: Copyright 1992 Peter Vanroose, 1999 S. Dachian %Copyright: You may freely use, modify and/or distribute this file, as %Copyright: long as this copyright notice is retained % Generated by FontForge 20110222 (http://fontforge.sf.net/) %%EndComments 10 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CALLIG15 def /FontBBox {-294 -257 1566 839 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (001.000) readonly def /Notice (Copyright 1992 Peter Vanroose, 1999 S. Dachian\012You may freely use, modify and/or distribute this file, as long as this copyright notice is retained) readonly def % Copyright 1992 Peter Vanroose, 1999 S. Dachian % You may freely use, modify and/or distribute this file, as long as this copyright notice is retained /FullName (CALLIG15) readonly def /FamilyName (CALLIG15) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -67 def /UnderlineThickness 33 def end readonly def /Encoding 256 array 0 1 255 { 1 index exch /.notdef put} for dup 0/grave put dup 1/acute put dup 2/circumflex put dup 3/tilde put dup 4/dieresis put dup 6/ring put dup 8/breve put dup 10/dotaccent put dup 14/guilsinglleft put dup 15/guilsinglright put dup 16/quotedblleft put dup 17/quotedblright put dup 18/quotedblbase put dup 19/guillemotleft put dup 20/guillemotright put dup 22/emdash put dup 28/fi put dup 29/fl put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quoteright put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 63/question put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/quoteleft put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 125/braceright put dup 126/asciitilde put dup 127/sfthyphen put dup 152/Ydieresis put dup 184/ydieresis put dup 189/exclamdown put dup 190/questiondown put dup 191/sterling put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/OE put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/oe put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 255/germandbls put readonly def currentdict end currentfile eexec €Öt?„ócl¨ZŸþûP´»'0*X‡ Æ\•}Ò<ø+ž}õ-Ë•™æ—~g£j3u(zSðw}ϰP×QìÐwa» ²›¹o‘&™òRù_i¡’›KÏWH‚®ó2æ(Ý)äÙÈ“„ͦãå¶‘¸œ‹;UÅ<¡G4ÙŸÁm&|LúDÞv¿†µt7ÚÍsÙ#ÏšØ&9Ö? ¾s*Ãç]©j’ßÞæN8A¹Ó÷nÖ$Ê\Lkå` ?·ðÍ·€D:Fæ†vñ™ä<+ÞjC2 ý½ü˜Úò¸Y†o+Í7]PЯ IF9…(*Æ\1ܺÈ$ùcó®:¶¹ ÜWŽã WлÌ;àæ¶£ ¨$ðÀˆšiIIkÃèíìB!¯Þ58î )‘0‰o©èÛÿfN|ë­P^ή§v;&!óçû…œÉIø³-) H¹÷ôEÄÆÁ Ä>’W)’¾÷`èû1ɱ'†§}‚÷Æ`çå„H’EwR¿ÆYd˜rO¹´xù¤/ àAO`{ŠhS©v¨©t*”ÙL÷z³ÝwÐ|^hwæÓ÷°1_0ý`; ¶Ÿ“¤œrAÆtÖd€ØU ¥Ñú€iô «ÚG%šâbY €?½øûGFÊÀmÿŸÐy/¿·[7µw/ûö¬kÉMy# LH×…†ñœ-ñ¨ô9cf]A©)É‘âó¢7l”Å=2À ¹.‚“Þ³i ‹Œa¢Î,YU¸xáéú{bo&©~Ra½ûéÿÝéÏBª‹3A”Ù©*¡­cµçVÿŒKâUßTê<<•KgÖ]þ@8« LcòWTÔ/ï[ª8»7Ô°“íÎ0ú¬Ñû}§“ðÁ$î›–ª•¤°¦Ø§Ä‘¬ËyСðh¶®Ì«èŒ€ÌùNv¥Š¼:Ko’›,xdª·1þÆÑv33sKÖÝ« "Šu Ìëá§ÿ³ÐàÅ€. Ù~ÜÛÁ»ôl~§Ú]£¦O¿Öâöe8}}~çe%€ÍùªªŸp¥ê”3àÿbÖÛ%m ì¢ô†:O©égÑ`Ö½›‰Yò‚[³„Eèîhñtà èÞ s—¥^1—yc»œIv·H4€ãïL]ý»Ò¼ßx“ºqHêôª)ªý¯Œ¥¡Z§97öh8üðCoü£ê$t+… ¯ßŽø»ïFÐm9zH‡ÔxöfB‘†„>ÌÃч§Õ#5dÛo$ÝŠ°‚{œŒÃ3g<}}*E÷À[I)}ë42´&ñåÈ+Qg¹¨ÛX;b¿¨RGŒ¾/QÚœó´/¡°…!«ìpl`;iíPœïk²tÞÕÞ_z8ïßîŠgb™ÔÉj^"÷ØßäÐ.#Ô\ð0Q.¼Æû obÒLDéÛy(š­GNÏO¢Ò'Ã?BóÞ¸·.º:0 ù{ô2®ø„'ßJ ì·¤a7;ý¦ÆIBL{ÿʈ˜ÇÏͤ\nÉ“x/¬Ûrø5Œ#ÎMùº ¨ÒïíŠîo7¢ã1›„ÙSöÜÉAy9ÂS ¡'Òð˜+oðš9ÃAw±-ŒHüÚÄuI-µ¿ƒîÚàÕ>ˆR!Ó•JçaøSÈb5ïhGƒˆ%ZâÎ2¶ˆ1½g|›kaÅB†ì}Rß¼pq̨•úãS@0’GÅÔÖŸôp—‰Htç`‚\u™™Úó.$™óR_Ûm…Ý­Hš§¤ÑYr(€©á@©ÆøRE5‚óDu•=™Žä7Ð Y.õ¤B½AOv å領JÜ#4vJð1ݼ÷Èòq `Ö“3ºôöõÈ£R¨QºÉL‹ÓV¡ð¨iBXg[б^Œ%^?ÝÐó,˜¢®”’dmöw<ùxžÝø·±cÌàæ¼Q4bœSVÛ¿b^P¥«ä5«•`žÕ"¢oCC~laUŽœœõæIšŒDYô¯ÌšBÁŽ$vT…•{s*~´wÄ5 ø˜ãAY0«´Þ œ+´TàTÖ`Æ¢2¶iÝéZ;Õø÷¦Ý!JI—mºÕÝî¤&ÇÐ pÕDvø®²öþÙDšög«¼gÊŸòÏS£â”Wév: Dö”Ï, 7îP¤ntc¾ÛmÜ;ƒc­ó¡6ó¯kdǶ‚\­cÞè Ê"l‘@ ª }иk—j€&zèMûa¾°ý˜˜Ìö)ÿéUbk)«…"É?düœ X'…´|ôâðµ'.ÏB¸â`€Ý‹4Œª×ƒÐÿ<°|©¶±<è#Á‚˜‡/´—Ö™:žËfÄÓŽü‹Ô‰q³ a7±ç9Ç¥ªh]Æ‘’C‹žõÜâåT ÛzÒ¤Àûe²Óäóü4Ñ$ý?b£Çê×Ï ëššB¥•ŸkB:<5WÝ'{ltíGtçmxÑ_«H´ÐÃ#㎪knœ†"…µ!=ä¨ÖÈ÷ˆ†Ä'|%ÊÒî;n<¾¤ŠÃ\ÿÑ÷#ºf¼0­Sn˜ˆÚÖI›]¶RäíŽÕ4ÊfaÊ,1„ž³”ÕÏY‹‰(Ã|Çãzë§`xïRþM§¤ÞJ¸X4 +dsr¨æ_ã×Ô­°\£Ïr ÿ-x)ò9 _>Qç·ÃF(‹q±Ì6HŒZ¿¶X »Ýî{â"õCˆ‰õþÔŠb#˜áÜ$ÙmÝ0;÷ë¥/,Š.v|Ѐ@Œ“ ­lz~ûâåì¸ì¢<†ûÓ'×púð®ÿʼê\1ƒø›*-Fv& Ìb‹ºÌ#†2¿W)¾¨i¡?¤ÉÔÍÃ$¹àײ|M»¥¦qM%¤O)ßå=×A4,v6'þ2¼kY8cûMÕÝ`jeMu8î\8 È&Öηl<æ:%¸M›Wѧ¸ïcaÊ@çìv¯÷2^Õèñ+ºï½K f¿Ë[ÎŽû!Ov‚À§%™DzbiœÖ=1ºµ1áF3EÑz‰è¶‘¬TŒÍ‹ÊòRcà^ÒÛ©[Ýœ<á*l¥P' ßd9tI²MÈÃþa°EÓ†>òoð(WC/R2Û"°=:û9ê†a|¿—Ýn\ðW ˆaù‘00'¾™å“|îƒÍÁ¤Ÿ#˜ÞNZ£!•µ{&PŽn®5¸ * ç¤v=Âä`ñ‘\­Ü¨/`ÿ]}ŒI±oÃÄT0¾ÞÒE÷æ¡|þ‚¡ßb (¿Y™g4 ¶¼l­È¼rÞ?@ÈIÞܤ¤ ¬ƒ2Rè†{ÒOÜËQœÐ™Áë*—H!ÎJ‡,#庞GŸ·ž©Õá<³Ö­Ì>1.Õ63,1½þD³-â›C•¦û_ï­/Äå U>V­laþY¡NüˆTLˆ¡,M¿W|­þ›2Ž¤Î„“Í –ŽÀm±`uW§M–£|í2šsyÿ{ÝTî¢Ú[M[Ízp!pßA‰7Òtc¬¢ãÖÑ»™Ûåå ¿R‰ïŒõv!ˆ°=غóçý<€þµ2Á Rc­<g!,N“½gbn}§¤ì]cWOïô°²³;A#º¬×0b°h” †kÉý_zðvßþNL—šÉö1?VÅAæ*>Ÿ4è˜Gü ¢ùƒ‹ÙQÀDJÑs®J]”ÀÕ+8”üÊæMÔþDx¦¡_ª®sm@Y«Œ2¹·a*¹?K "(£;™…Ä™žñ†1ò·‡hÂyæ€\i•õ@RØ<¾ÀžþÓVž5Nô€U=~Z:Á èä¡„ÀÍuËêF©Ûü¦‚Ûˆ!«÷Krëc&2ññ뢻7÷'O‘¥/X}üÀ¿4CÞº÷c~Í2ÂÇÈhé¾'®Ô„ZÚš7½7UãË*çµ.00ªÕí\‡Õ\,M|DaSF˜u1}Ҋ̽éÎþÒ"Þ–»©ÌÄ…‹6Qç)“m©›§ÁÄéÏt·œŸ9 ()º;$Q%M´-ûR¨±°óAeR¶`ÆÖŸÌ œÃûåÅü‹¶s×À@WìðCt/—ƒwÄ…‰Q×?Bù»îtŽ}¯$O{PmÌc;î!”g5þ©/‚··ªº¸~û´Ä+û­iq»l#¬ù®³–¸– .†]]/q Úð¾qôÞך¼ !WQܘ.;K=Ý¥KGÄCèq™wGþ­y>O˜l#°çÈ7×Ôo7ìnF×€FÕØï„X–Úʧ¹ {4$ìÙ7ãtŽ#ÎC\vkáãß—“Süú8~›ï]q:íd.r?ÙڅɬÀDÝ"´Iʧդ<ˆEíÎÉòŸßæk(‹iÜæqòŠñ ¯ôc'^øuŒ T:Tõ¹žÙ…E4Í …x‘\ý´¯\ oXð\ú™æÀ–Çε$lõôíþ‹vårÈÙß<'ÌîÝõìæœ¤¦!a…‘Mÿiàzd!}‘{ Õø=þ—Û§ƒmŽE1ÙF0­ ­Ò1º+TïÜ8  tK*‰Úž©§ƒH"ÄÍuírŒd‚@ D(o`ßåd±zB±þBèzß·û52Ò R^N…;z\íqtävBÆXe ¸ãy€Îã+.ÀÌ€¾Ú6ê³]UÎq®ÊBcÞæÅ G6e¬`Þ}5õ'&pËv0!p!jè¿ÓÒR³ôáo%.2Î\Ö {E~›%êJšhX 9F³1gTW‰ã3‡k¯¿ë‚?gd3?=i—ð5T.ë$9“Ìt±gÐÞZdo’ø+uICâv/”A>÷Ÿìaé4ÕˆN_Ãã˜=5’2ˆB—òÄ‹åu\oæs`ä¶ŽY@"_Ð>x?B溞èªsúßãbÖþ¦_g4F™+åØÓp§gØV­_ïŒqk4ãÆ#sï ´bqžä~NV­ÐùfIŽÍ¬ iéýsŒ»o~ Øã-/Ì„ä I‰#Pi+ûº‡kÖ“r Žkõæ|CpDf¿gÍnD,XÕ/Ï÷¾£Ä¢Ò£FõqYº™ô—“óÆ·Ž6ÑÏ:&Ù€ò ÷°w8;ªø,†™ÿ«”ØÙ¯}"a57ªñ©=ËáQÞ¢²Œ¬ È<¨²Æ+Qýl÷ÿÚ̽Úò²é-wâäsÈÚpmÙUï/Ô * ¨&ëJ*qé~íû)ɲt&fmXYlXœÄ˜ðÊÎ=¡\¤Pø GCçÿxz“¾9 ,bû ¶×œüáÔ",›Ô  ƆÍÂuÓY7gèõ1"8=Èå2ìÈwÙ ]=²Ë²¾¦^>ÁïýŽ)xþ²ÐEžÀ;~Рà­àFü0¼¨(´Ö+ð>˱l Ī‹¨iUÇÛ Ÿ—ÔÄàÖJì-SÑ0¬|üùpͿҩ§Gœ¶xÎIëSáð Mº'™20Tè›Y9ΤóãºD;Dø0ªTY‡RÃp˜ ãprvîr¤ WÑÇ“ÚÕ_Qõ,² Iêg[/~O9vríQ¯†Ðw•E{¸ä1ÿG*@·¢›7+Ò ˜¤zõÖI£ÛÖƒÏJꖟȥʊø| Pþ܈ÖØ«KÇ«äÅ’”¾´/0~ J7[9ý¸ø@–OEûýԮÑ.[_ÅçÂv8IQÇ^™ôÓ¨sZqï vIz=i¤1 ÿt:<•;ìÀª5qzÞtà®·{ G‘úÐÊÀ;^ËM+H› b‡D¬€¶÷Zi¸ 5•Ϥ±b~5Nü>bšå‹e½ôÍQn|iï TÞ4b)!vÉxo$O Ÿ•Ý`f‚T/?êJû×baùUn,Íg*KÉ G‡2øX ¦“̉P˳ü"£ÁüÝÈ!á³ü1ÖÓN Í„Æÿ t ³.×ñdœsæo-ñ“†¦%å#5Þ†%îSï6ª4^.['õªpØr“òú‘°ûg‰«H æê7‰[žÎ/FGn=´ëJöû&MN=zZi5w5ž\ZåÖæ„”¡; Iâ4†ŽŒHôä]ÑíÙÐã–a”¯ï±é‰&ð™ÿq:?&ík¥b¢W˜™ª=ÁŽN9’sËD®$ 绋|¯½­‘½y’sÊìÒp>¥Š¹t=Õ8&'r=hÓ&PTûFžW—ÓÀöZ^_âˆ}ÖG¨ïN“e…¬°;yòÀïB ¤9OÆ'ÁΑ‹e•É(p@àù]%=’N þÐzS1¢ö‘†”‚Þîàˆ9Ôr”“*È7Lï€ÏmªÅˆm­ND ã¨;ÇkJ’Òtv‘î+}|Ä× ò Ç°Äï_ØÊ3¾ÅZ××I†é6’»¬ÓÕ—©P¡W%žñ&EZøP´Ê:ŠôÇ×ñ…v(ªd,ºD_þ…§ò€ÄåQL¦‹ m‰¡‹šQ…áÀýÑ¥œlž(D¨æ Gú¨¤:Íé´§(exÖû×ðƒXq¬¢ÌG»è—Ë‘Õ}Å. sq#ûq@>ARF½÷Ä=3;\Àïü¯µ€¯t¡·[æÃV_TÆø!lí¬£ÙRõ˓ȡýÞ—·~¸Ûph|(tÎw€,¬õ¿Ìôœ}eÉÛ±~}5Ï.LÜí"k‡ôž]\ð·LV¿ƒVùH‹QPDP:VÎë¹då¸=ÉÕï>3»ë~Çž O®uyJ¼æÑùñä^-õ7[ó5”·Q8e:E‘É#òÀÛÅ<æÌlìäpiÖ”\ 3ênž¤ëÌãB¡°¥PT·ûbÉŠÅ·ÀÅñ#¢°\Z­Å€©¹½k`i ÃÔeëÐòSÉûŠÒo·tH“gDZ׵ډ%:ØL›~¶×p5¾‘ Ëz¨³zâ`?3 ‚i3 $¤à´è5WœÁÙþÓâÃϲeQĬ“,»gKë¦Ã‡¦ìýOëRÕ5v ›*-jTiélU*'9ÐQoì’®ò7þ<Â"Á mü¨0xt€ôSþ® Ù²°œÄë‡(„¥€ nùÉÁ²õü³þ—@ÆÙÿŒ†ó_([q=ªòWõÉ„`(MsµÑMÖ‘·t+P˜¦NœŒïf…rʮڰG×™OòjñI]Åw¬×HìÒ\JË÷W¦TR(|'õî2Í·4éž [ŽNäPdI_³lJAÔr¸%(kæ©£ßw¯0d\N‹¡¶\2?yBí ¦òM=mªXŸòÖ— òû•hÉâÙi9o—Œw‚… !‡+§6c×ýù‹ ¦áâaêö±éVÙÿÌRÝÌñŠ )Ñ´)$kŠ#îǼÛœ¨¬µ]¦Ÿ Á×EÖ2׬À$†Ã؈ÿ.Hjœsà›âºØñF&<ŒõîŽõâß V÷„˜§A¾ñ³êñ•וXu/Ð~3<%[¤©<ºÇ?øZ°”ËYÙZ4ÇõÂ97­­Œ(‘-ó3ßà]× :*6>Kˆx¡]"nõ dœÉ9ª€ˆëó\WÜÙ;c÷´r)§Ç‡HKQÚß—œGQûŠ ¥,’î…Ãx™Ëî‘“0KjÔZ,i×+D …7Žwö-¢1$ꘅðØ ï•¬Vu‚™ïšÛ¯Rä¸ú°º\”Äwè{d\“;ñGÁ÷ Wuâ<6÷ðúÓǸ 5Ç‹`½P‰²ÇÃD»m]œm1’òy&}fÿÞƒºØ5À”7?!h6q©´¥+(HIdosíßXVóWâ÷ y-ᛞ e©à(%Û±}ŠƒÇm#† ®<¿Ìú3ôMv JÿAðȼ—ðöÊ’K¿k+ŒØ³ç0K"0½éß¿Õ.µx Xí¶z `DòÉ…éÄÂZÛv;“}Ú(ÕC‡s§˜™E·:þ& ª|!qßÅ¥åQêj`´¸¿¢þh~*[fæ…â·íªÖ½96¹®0‚ñ8ƒùד8Vf‹¼=FDHÞ¾U‹Ú ƒ­˜ÆoO}ñ5ÀeMXXúZRЩ¬_ñléFµ¡í×:óc. ö—–ž'W’÷Ãc·@)IìæoGPÞí“ÞSámÅqEÞpì3LU>¨óÆB1}hÝð†5|Ž2š–méRnB Õ¼ui q%% wÇx@_:Šä8õ¢ÙáLj²8Q£Tö¼<WT‹Bî ß«V`•çÁáܹœUs5ÀïýÛÉ4LÙuŒ¨˜™83 ÞÈ´|nœ7¶#ÁÍ ô麑ŒADOZâlP¢¨ÚŽßػũó-Ó[WÇ€º„¨ôõ0Ìšb©Í÷åßc >ûŰE±QïN´´²—‹ÿ}Žg¯ù¦KͼIãŠ20¼ìc..糯ì£+’¿­IÍÞã×%=UVe81çSÁM¨æêÏ:[Ÿ$ù¬¿9{BÖóã‰ÅžÉ.”}dh8€ŒA!Uòuöé6Å$9@ò÷jRØ-Šž²ËæD°‹sv–¬ažPW{ÕÐÖ¾ü:}¨¡(#‚ÈKÞvÂ!ÊChfIK}xýËÑ2øº ˜kÖí4&®.AGXP òJœ4•Чð씀il¾/Ñ?Q“ù@µ–($0G 5õ9C³Mšõ¬`U J‰eJù8}в¡`MýšøžäN¹¸ÊUöœA4œ=”BæÇž!åY{I!wLTf‘ЭEòÈÝ_-`JÈÕñ™n›¶g$ç¨ç–ªŽñõRéèƒÆ!‚΂CfTùkš‚‚·Ìb¢»Í}~#â;´¿¾ÖŠxwz2}÷ü‚Öçò(CÜÅÄSö)èò¼ˆ-Ešk&/F:y›œmOÖâ4Ïóñ(ÓmTùpf“)iÓÍâô,þ¾X!Ï ¢÷=ë[ŒŒÞƒ:³HÔqC¶jeçCé~;DD[ËìQ§E‡Xs^XjNÑk¸®iòäq´aß~ú’ÑÃM׊x]]H `tõ஑UÆ¥³ºµ_K:4€4–K>¬9P¸~ ¦–^5T¯½º ŸPÎk¡q'SÙ¶-j@ =úÔ {ÀmI‹žÔûäéït¸´òX´‚do;þɬ³®„§7ƒ•w¬¶iü«ê)3 h müÞ éüI<‰ƒs ®°BêmÚŒíi¢¥½“Äà‡ré$¨¢ú>L¿ôÄÛ‹w€Ó×ðe3ÙªZB+kƒþ40­8:ÈãÕû6j±)Å]7Û:êø¨¦æÒÊê¶&ÊâcãïM휰qó„êñŒÏ5zÀŸ¿*/§×R}K?ÅÇR­ÄÒhvÛ^çn9Jt[VãÝ¿U¶îf¿…ñ?£Û¡ƒK®ïáfºÒë¿`šg‹Q­o%þ`®__O=âimkQ¤Ujº]ò6CPËÿ%³E©_ÎÊ‘£ïœ,9w@òF ñëX7øÐÍ1f˜M!êãm2àCP–m{üÈê'Ýx¥Áa´#ÔƒÚ׎BÈùá½—ýµümPåë‡Iü†krú…ß ÙµØ-¨Õ¼•·Gˆ¯¬(?½ÝÌÐ::q>kZ²PD¹c‰ä§®¶¢'ÛtæQŸÎMñf[òÉ=(ÝŠÓXÌœÐêÀ±(ü Åx ” ñ“˜ÒûÕËŨÊAí¾g£1]L)Ô-ÊÛå#¿í¡r#Gù¢ž¼ÞCÜ+£;…hWk¨ŒµïŽ?1Ä_9¿nc­ÚÜA(÷ÉæIMI%<ˆØS‘óê뵌ñAMÀ"Ëm@¨¨Ôy²žO‘yŸ ;ÖÓŸD žãØ~äî²A$¹® уñ­WxÀÎOª— ‰º®ÒþRàÕm *L› YfJk}Pö´ñ€ M1èÏÎ%n¤ÍA{ͯæH$¤Ôw·š”°å³Ò˼ӻ¶Lõ¹o¨Æys¥}îÎBÞˆæRë6ùþ€œ¾xŒBìRoax8 ä–r»Ø'‰--a)`Ù{Ö$`¡ÒŒáÛÜr‡º¿"ÜÌu¯uÝt?ó#mXs K|4ØI Àª¤!zmýà;–”@"­"œàeu  „L5Èü}¬ !×SNHÀï‰)´75ÛéÆàR5å=¡èw‡\[óÂã‘VÍ3Ã&|,gXÈý%òt&ñ†9ãkHö–?HÎA—Y“æ>ýï[¡Ma*¸ðŸ0Áߦ!´?û|¿þø¹{É3oÕ]Óš“n>ÇRÒ³ ÉBZÊz~ð]d¹í©nÐò ƒƒ0.½ЧÍL„þ’ðÆ„ô L±–­‘ÀßÌs–ÓÔu¯BïÚdRˆŒ."°€¼ß ©õ®}H|§¦ ´!¶Œ‘i¾)>ï63Êç y®ñ!Lý>¶€æn,=¹û““ƒ5[ðQÄ’B,‘­Ñ¾kóQ!¬NåM!UGn%Þ›vÅ7Ì}|×FZß'„)råËh™œÉ¼·LrbPUÌ R3Ê1Ùᵹ赽ìÞEmÃó+¶¯ÐP üÜ×Â[–7j³âoúY¯4ŽoýûŒYo<¥GzO lq]¯Y{¼¼›ä¥J %9PM‡µ‰™öà†}¶2c¤\%› í©áÛî$8Õâ:%ÝBÜ` Îá>ËòGw#Ö­k¢B`ÿÀ­DQ“³'ûë!ÜdüoˆŽÍõ²°‘uS„ƒ—µE„`å®sÂ’A¤7ðÚCzÓôg]À8JBʼ*˜­Ý”.ôŽœÄà6ÎêFŠCRM§nF ¸ ´N¿ÄºH[ SeP có&Eùc%jüß;+ṓߗªå½„‰¢=NVǾD¾£u¨2äëÐéX¬÷UÝŠÌšÌÜÞû„¬Âˆò€f‡8Osr? ,"bYÈðmfõ¢À®®\cï– ´tI¡W#DúTQ21 õàÉ3,èáÕ«9›]¦·oO$@³²®é¡­G;‡+ªg̱J!¡6$1\ÔÌkª(¥ÓA^pjnEÿ­fSäÓ×T§m¨ÇÛ™/šBùè^kª&OpkN”•¡ï_`­2À\Ù§«rDï«bBŽØ¿áŠBÃ’M¼W6JÌn»¡Š"îÎ1Ä8ÜAÅ {sB5%Þ€2T¤b©³–±¡8Ø)M) k%¬¤¹©Œlª²dÿÌäÅ :Jûg9 [®ôû0”××Í‘TâÐz͘ԩë |ràav+"É`,‚ 1«;<Þ† `ÅXå~Ÿ^Súb«èS{*F—cî,9~ÄL%W^uÈÇb1$ñÚ3Í`c"P&œÂ;)Ò{°m¢¥,ÐSºé<­ÇU9ó£"÷´è8/Ÿßò6· —•]ÿ‘1´cuësÎ×ãÞýC²´(ðÀÄUŸ™ò!òT <úå¯Ëej¬brîå3½*íˆ!*žB"‡—‡aí[lYÅVÊ9z®ž^°ÇÇ–›÷¶šÃ#2k¡5ǃmœáŒ<8Ñdân›ãtŒMljÓõþšN( üÐl´roû59¬$Tä ÂQR»ÁÂvq™ŠH³Jš_~%f„‘MWÿDÙ¦§ZzØ Ð0Ηv·zj¢gL”âôeoU#ùHŸ‹;Að8Lé¡/½£3UYbÞÀŸJ’cRµ°üÃ*½œö›Ë”Á´á–iÉg-‘dho#ºð›”pÛïèÙÖ%Të!Mã†:yoÖA<Çâ–‘‘Þâþ1¨ê¢ˆÕÜÑÎ ’uÈï “O¢„ÈÊZ‰?¨X“6¶(ÑÌm\;K&ja)à¯dôßQ¦ïgU·+K¶‚V S–²¦ ƒp¬6û¬G÷`ÚºŸx}nÍ!ǦʢUÑÕu{»„ZrÕ ûL|épÞVÇõ8ëy@êQVw±4ºŽÁŠRøc~)ªT¬Š9µüŽx x¢ñ4Æ“BH…ÅvsuDL*ö¨€¸”¶ßj tžyÃ:XÜöÈ…bm#=çæx[Ö^Qù[5û/på§›ÿéTËŠ2 y½ ~jƒÅÙTá±7{tÙ^ÓyE35ãuxK¯ÊfÛcX¼¸¡ut¬¼)@H%N AɃh3{…÷(ÊÖOƒàŸ„X¢8±pïzØ­òr¹š¨NÊðpȾÁšæ<< ÑÝ cêöC?ŠØ&•@]…Ôhi=;QU5L>PYÔ‰2xÄvÞÈ\ W¢Þ€dØñˤXêýe:gVž>=Ì)§`UÆvLe ,9Îz[j™¢D)Å^_Îø˜:$äiN›=ÍU*X¸ þ‚p]éQ§!YÉå•~~¼‡iÙå   ‰7J ¢÷Ñãc¾J}Þlj]uf ƒ³ûŠßà":Þ”?©mF3`¾ ;ëÃÞ4åǯ$ß}ÅaZfÞè³Í,Xb³Qiµà:m\1Lƒkô0˜AÏ¥ÝÆáÎúCn¼*Ð4¢m·ÚÙ0µ֑¹Îˆ1>‘…ù À!aÊÅZ ÏÉÚˆRŽÚX\ƒS8”ÛÃÓ¯>ÔCû™ ‚Z¾›F²Ïµõ¸‘'0lj#rïìá‚]ݡ㨯§´i;€Éè·0x¯ ulýØfANÕðÝ( [' 0ì½±GÚ(=ïjÝŽ±ù¶{ä’ÇvË’Ô?@ÃÂÏ4Š2 R¾·År~á4ÄÂD÷er¡€¾Ð\ÁÚÚêS›”NɸëSÙ£žâ²‚…ðþù ݵ¸»‘F§ížÙœ¡§ºU`mXÖ¤Þ¨òPaóþþVîrsì9?¬²”!<úɱ‹-Et•àÔ—šGmNÞ¶tòBw(‰D‡>k^?C ‡h =…† T;žEe-s‡"¦2d'yUÅͲ{\òoÊËyŽ»½ùV‹ƒf ó 4ƒðo»¹¡¹\g«Y£RDù|rýÉ€‹åô¹t –ö¡^Œ“tm“êËç`ön£Ä/%¬#0xЬå/jr\@Ú¹‘Ô¾ ¼<ºázÃ#c$b¶E2“ äÎÕr‹”´ÎG#Ûá[¦ì¸Ã9Æ ZÄtî2+˜®&a»øº(Þ*‘I™íCÄ3ÔÜl郯ö‡ªžóé–’…­Bt»!¸Zcýa •æÅÍKZù¢˜µ~ÙÎÛŒ}êG´™#™®¦óIÆ5Kë9DÏ« Ž…^‚׳.ÁnÀÐ-¨”õ‰=/ïY~àk*ÁLë…Üd]1×gȧÈ÷êèTdTw©QÜÚáz¥Ê·Â|×e:­þà²ðc&^ZÖ­ÙmI„©óQ¾|«ÀtÝŽ±# &¢O‰“ ž&¯ß‚2XÙ½UW1޳b/P~¸½„Þ¯élëAkª×‡ž}Ä4æ;0ŸCdOq{)y"Q0MœÀË3¾Yþbo«PƧÚXÞ‚Z÷I5È—¼Ð\—ÃÜVWæ· ÏñÜl}.Pµäª£™ÊæŽÞ+ÌlžËÌ­;RbO Ÿ\œP†LS@¤Ä¨ÔKg/Jt³„“%«¼ÔOaÞ–6ºƒ˜pºž®’UìÇ\4.kD—Úhö<´æˆ5pæ`²¦^I½¡ñ(@ qjqM†sÄG´i[¡YÉÿ™(ŒØQƒØMkÉOµÐ;´LCZ›½¥Ž  <&MüK§ vªí–¯ÚÛ…3_2ÞZÏ>Ë(𿱞5aÒA‘ÏïN™˜9ðøÛqs2Ÿ·Aâpo›«…ÖWV‚æ¨g’ÿLÊËúœÔd´˜Âgâ.°Œ´©6nã# ¼Ù2›Ê¨>e­‘Íßœ‹"Ð>RSîˆÚøµT‹-qkmáÕ U—ª0˜ùÖiªÒ÷J裕Œh^3xí]œBqê¤t¹È®›'À=ÄmÉD#wVx±­ª ú€·™qb´þ=°ê€š+é' Ö þ¸Í ¸@äFä ?ƒ•@ÆîìS¢‡ ´K±h94´Õazñ VÆ›/ƒ)ÑDaƒ]šßüÁu)¼fÜb_9ªáíÊ ;8œáK}ÖÎoDGS‰}˜ˆù‰Þ»ÙÕ¨^ð × uÓ~‡`¥•˜® ààSٙ۩ꇯ´£)åN­øpA°§„+ìhƒ‹‚€;í;lÞûʤ~|×R™Z­³–RZгSUô¸÷&ùCÇÅâ È5žÐ¥6!Ÿû–n ‹å¿6¨!îÃtu¶oÊGpæ]Æ@2+ÄY  æ¨1¦P‚S„»ün}Ø_p¸MVáfü¾ÛŸål–±˜"Á6+ÕLL¥Ú ísÀ{¹þrÂY㧛ѿ@¡ %«lŸÂD&D„3ÔOaâÚ%å™NBí©_‡Àoª´Òùï¶>\"ò*¸½¸–þåáí®ô<×Qc ¯ Çüù•­ ‹ä [ÿ²ØN8âvTÒí_p9.šd&öV)™Ç÷Ò @“3ƒÝ ³ìiTMqÍ.–£o°¬ÆWà %k߈]¶=ëÃñËÈI5ŠÂÀþ) (žãŒ=ÎÿÛkêÔŸßÿ©ßy•ÒÓÖä„S?žÄÛ[òï[ö\m} iž1õ`¿6/T¤Ã¯~úÌñ:©š¢rw2‡)¿Gûžý Ê0‰¡lÐ}ͨ+·MÔlùW— «Æ,Ìö¹ÿ²'à‡ÕtTµÇ´é¾ îªÂ€©LùÏí…©)ùûê"ÖŸ„R[|õ¯ò¦ZTÒà±a7ª áʺpKKMÂBÙx­Ôt¡‹©!¾ª¤_]³:àEEóºHoÍ93Ã@ •³–†|—œÄFH÷c¡Où+FÕóÐ9€¡Ìù#¨tN…”Œæk;¯M‘®Û1/­ ®ÚX³…ÆŽcûˆÃá.ôÉ~^lÂü ,ɰ0ªÕnT”/6-"*\ëOéî}ES8k$½P”¼v ï\oODÉæbZ«T­Þ ÀÅ—eÄü¥«Ï ‹?÷eá%É çC>3K(äÝí¢›vÌå–áU<¡º%þ¨ ð´ë’C?6ðúÜiL?¼uMŠ MmIfw {¦`™| OêC‡êË臆–{I«¿ì§0;ú¨ê†.1¯‡as·¿#j+Sîy$;åß_nRÑßeßSèùÇ­9†ïKýðS£%ü+ œ]QsèEkΕHh»ÿûõ“º¡€1uеÊç¹áåBö–ŠníãUÒ/¢µÙÿÀªñ­e¤y8 ‹’ËÜ2D’S£Ÿ™:9÷%å2æLD @¦’ ¿îͲ(¡\#ç’Ñ£;»áhêf8Âq‘Æ»ÈÃÛ•aZè”'g´xîMH½Õ®7 m¹º>‹­¼#"ùVC¸H¢n:gMC@N3ù# ΂ÔÀãµÆ<è_ @ë³¢Öp7ƒ¯ };=ñfzD˜iýT¸ ××`xÓ {:èÔìÑòãùŽ£æãêÑ/ﱘK=_wi-ÅTêl+M §ØžÒÿåŽbÈåÏ!Lœ5£‚†ÆÂd E`)~»ÏgØœÎQœh«‹ 18ª=Ht´:=+–S^Û»7Ï×(¿¢Uëí“N\j9j"ÚHÙã›ÑÉ—5 Ÿ©z à^0½ñÂQ†Æèm‡‰Ëñ߸í‘åbé³yiÂ5o“ˆbs…z…ýãH¿ ’hÍûsÛ•LK !cÙ*i껜XGøvÕãK¸`Æè‘ÛgóDJ m7åO,<%lID®¯ž$J÷8=÷ùsÄÐ%!ÿ1H¿¸ºb¦»²Â.ä/>A×Q/ÈÇ3KÕÁ©-™Ý (“Gëv±¯¿ èÛ»™9€ [Ù‘k¤¨¿Â|Žü<”^·cænb…¾g§lˆ‚Š ß2ÀvúÌëpc5}»@»YÿŒ-÷FùùkŠZêiiÚN£4NgÛ*;’½×挛Â:¸¸<|äÛ‘á—®0NKQhüìf5‹TeïÞ9Ø>à‘)¹jô_вFŒ[Ÿôѳ…R:§°að°ŸÓÒu"¹‰z³•Ã7¦ä‘«J4F¾3-Jâ'ztosf³+(UšôØ#sP½ÓæIJkš2"P*cüã_áëmo*¶œÆØ A¤dL‹ˆûåêxãá»_/ÂVãƒX‹ÈžŒ‚áA®¤UJÌ]¬ê…S™‡ÆMÇ`IÈe ¦ŠÜŽ@/ŠuH¨ Þ.£–ñ‰f[£Öýdу߇*»"+Iù¿>*´W¹œóÚ†l!©EN%x£®·‚‘äµS"Bà¹Oô ¨¹e.šX_ØBô&T'àô2ãý4þHâºøŒF,1xòçxÎ]é¿V‘¡…ÙYmBÇX÷{땞c%SîþX|‡çfán¬é}”v&\äGù‚#ÊG–Ê×Ï‚tÄ õv7DœwÊ•0°Õ£ê öç@ 0C ¼ìóõ˜€ÔÒ‚È^Î[ÇBÀÃ鯾>·wq§ƒ©…)ËAu¾ ›‚xE—U©Íåè¦D‚î ÐP ÿé+Ê/‚ƒCÌrÊ!›]'µ»31ŽFnLé ש¤Ý… *üD}Vݹ5­º³~øKñ{ÂBu+›ž˜\‹êT†fÅ +¾¶±ù›nu)”ã:,“ÉÿC6eûÍ_÷WióHãee“ß­û-îÐò6ªÛut»ð©gÓY£djžL³¾]qö·1Á§Ó{ læ1‰Bÿg+:=È´ûÈ€÷¦ËØw¶´öS?êâuR½PÜSBo¥I6ü²@zHU2¸4¼·Ô´ beRø‹ sî¨6?ƒ]kÖ°, ôg‚ÍA/éÍuGæ5½¨) ‡ *Ÿ_åH@måÙ ñ[.“ï¥Ags–ç~ ÐÞ>Èoú¥Nƒûrôö%²ŸlqT–’-ñ’eâ"MZ– Ìë[FëÓ¥eççÉ3=âW©iê§l›ëuÙ&Ýx‡eßúGb‚-ª¾ È#C« ›§Ã˜ü3+jH*ÁO¡ª¹MKàY¨.]ªÇ a|Þ°sÔžž ]ácí+þ1\ù …Î;k™)yÏ]¯ÍOÙCa¡ÉaQÿ*$\W¹•kv S¤xê„Êê¸Ò4é:ÖÁ`4HrÛü,¡sqe ˜8rÅ'šõUþ?at=“.VÜ6ªqgÁCpCð¤¤"¥kÀe ×ðÿ½Åš64Üugøò°ß3¿Àu¸ôœ†D™%X펩L´Cƒ>e©M|+г§ðTó³ÍÏ(ºéO䜫‚‰Y¹õoª^˜Õ\ŠID±HôØã5ò“²²âù|¬ezx'а.Oœk„„oÛº†$Å:+ —Èr¡d½œeTV=L.e‡‹|BTÜS98@åîÙY3É¥ng·$þŸ~XËlõv®ön†½ýð>o@Œ¯%ÛÚEýlãÂvœ(áÀ^8ýç^ ÃÉ• s‰Võ5s["[UBÝ7â»1] `;?á mˆ¯ÏêŽ2ZÜäv“øž€Âð–¯E\I9§ûå|£À¦žÞ.e\Mñb‘‚#Å‘Ã÷Q®› ¿³ªé”øÈ‹X­U½ ÿ&Q0±Ç·ê5¯}&ÒïÌ2P˜ëªÉø=¨|jþ±Vö²vÐDâK©u’CòE`Ÿ×1/K´[W¹´ä"_¾ìüô1éTx8mOV›È°‹QgƒJÇZß¼tþ2ú›[5U¢ÜýÎÍf)fëÐMõW„(¤:uÈç¹ÈßÁåÄtý#‘— $ð„ïW…ÈIÐBoÂ*¦æÊwœ<ºù´nç±L_6ŽÓß¾\1¢­T4³EH¼ï¥Û>l"Ÿ£k³ÒéUCYFF4çs ²þìáÙN¬yovê©l±@ŸRƒ£º·úaO_çðìÎ y= —¡Gô© ºí,‘ä¡ýJÝ)ÍTÀ|¾þ ù ªäÁbµ~ùÞbN]þ­©±é88Nw£˜ƒ§Hóè|J›ß‚` ‡”FoåX5NyT|ñ©ÒþÕZpAß”‡ Ì¢¨†>“Ç5C±K¾=4ÑÌá@D%ˆòíÉJ¼Á¶fþ‘’áûÄ‘Yo l!®òCÒ1Ò¥åß«O/>jÒ•¾ú”ª\;¯®ZXü#„óЀ+h±uÁ·6¸JµEFÌ2îQr\"‘7Q6 Æ´+YV ¤¹ñýÃØ&\ÍncØÆÂòSe;Ñ÷ʾ‰)/â`ÀWr§.•"/€Ý€KŠºqúþ dËéæ7ÀË‘ù%°X)TÐó>YØG¥»›ävu/4„hüm=ÈÄGi¸ÔB³ÒÇÈVª±ê0¬t1%P/¥AqÄoȬÕ$^0ì„ikVYຽʪÆÈäaè²Bß»ï³ëœÇj;H}PX½;|µ‡*®oäè?FúkÝ¿AøŸ¬ÊœçŨhmžå…sÆ|'þ mÕ§ïiæ^÷(¿—wY™×·c·‘⌵K7e^C3SWÍ88¾«z'o1œØéæÛ̉ÌË¥Ù†>Î’ÓL-ǡ՟ÑÇò(Bß=šæ‰@ÿiÿn«“÷J ü”ýt©_Œ®{¡^ÌÑ9eÝu"ˆr3C‰¹v‹…Ø z [»v Þ7ÑáeöºLÿ…ØqË©_{™¹þ:â$Ê™\ëò>ûV §ÃÇlîÐèi?èçRKƒb©É»ÏÀ'9¤&!L¿ßŠxÀ/TBõ³Éš€–NGw0ÛŒ‡š¹Äð¶ÙÖp®í)Ýmÿg·4ÆW°Jú™äÿUëM­3¾, šD¶€Á,ë¨o…­©^Ö@Ëx âò¬+"ˆfRGÿšsç¬, RPzfC„07ï…æ„@Qx‚”ÛQ­²2ÏXÇ)ýÛÈb*–€ûb¤Ûšº)&¿Æ˜ ¾ qöZççÆcÎv-–°¦ŽŒx˜ð@³Ñ÷Ù)¥ƒ 5°¨ïvÚ„¾¨àIzLõ0b¥A¦¼âuå=8Pï·À€–cœ­OƒÖ’„ËIûi_vëB)½‚pÂ1ÕT/QQi’<ŸJ;lmrÃέ\·ÒHè;ÇÎÜΪDd4ƒÝë5†}ún—=!Â/É÷¸ðœôKy3Tr-O³a<¥U‚õFeR8ìhqë>Y¹ßiOÄ’„³z$D"e´±K¿º2bÕ€ž.î­ õá¢;GÜìz—âÆ S@}¢Û½ÙfÂ0xxqÚSŸ0’}µÓ;{V]!l<é×°ät]#Y¹j¤2 X»Jï‹OóëÅgE%Ü/æº6hÒ½Ó‰Ô  »­=‘º•‘ˆB§Kœ‚›U/¢ãsFš¦’Pfõ|Ö=—¯ŽdRÓùØü¯ýÔ-•W/>³çö¢“£ xo¥¶A‰Î!FÇÏyþ››¹oéâN¼Íq fì·„©\9Âô7 „µ÷GÑO­6;:s"ùghÍ¿`ÆwƒáOÀi°àìÌ‘õŽŠn[€;£2ãJ§M®òš»¾?©t4å¿ã Áàå êsÜþk?«}‹²ÊËoãƒì»V$[‘[¦5o9Ðjž¼¸Ù}‚Ä»Ÿ{À§LŠsGì]ìXVÔ·0àK}£oT&vM”ýñ+ BR .§šyY·HNãý!v‡vB6¾¾¦Žï·²«yw‘o Êó'Æ!·ÎpaëƒÒ9¢Peº=øwÜൠãÚucMYöVNKfMYìªÑîÚ´O©ªg)üÿ¯Ñ^Mi ð}Q©†¼˜kënøŒº´9h$Í{é‰è÷_IÃ|f½o%‘eÞ6ÃØaôôO},ÊZ£Q]îVÊ!f#ó¦.ŒxÀ{Qã»d¼eñcãk‚.õ/o$~„µù´Œ\eHÎYúú¦^æ3ØœŽTEýÓbµ^r¿i;Õ\ò2AÍÄdx5Új„~ü½{HW[Œrû¨äï•ÜÔéíá;åăÖ(üŒèÏUL‰‹¢ÿ‡lOêdqR/ƒçÄ`úg¥@UzY• ë‰ÔÞçÇ=!Æ%pvO ¢"ôHŸìÃ1z¦]òŽqŒÄ…jLzÃ;Ƀ{ì{U"(cí ždè¢{P'¬Ú¯, uùû7ê¬Ó»â¥)Öfò‚fÛØ¤3¹#…1S_RÒ¢Ò¸;®tœÑÞ¶&¾ì Y½¨`ÕëöÕ·¿tZ­_åow`ƒºô%”Ÿ¸'R>¢½…5¯ìÓÑš*šÛul5Z Ngõ×k·"à¬lÌø®yG.ÍtEøqMÊxd3°V Œx.*½| °øiu[qŒÿ™¸?‹þ¼lÝsà¶·EÔu¿ˆ×øõÄŸ_`ø[ý×ïZ{dû³A%›˜L‰†2I6ð®ÆOWõ¦@Œê\ñôûÄîŠ õççÝ£$ßi ¬M.ï|á‡ßmLØÐð†#øïo£»ÿ¿â爫ÿ¤¸ìp%‡@JŒo¼üÔ¶©W7´à’  R§œ..<Èô¿\ôOˆ¢›ån–•Vbò”3ÃÛ!íH MÔ‰Rúœ–¯( ŽÆ­éðej+ÍX pM$‹9¶TQpÊ)“¸‚5€$¥Û£¸©Ópï úã^\‹GÛ¦Uz°©PÜ ÿ´61Ö6ô²Í$ÐÕQV‘ *˜­¯¦b„tÈ4Žêê#T"ïºW}E±*`ShˆEÅÇ<œ.dT‹;©Ñ#ÁËÌŒ”=jTƒÜ$†üf–`þ ú®3ÈZló®Ç*ü¯!­»ÁfQ G«Ü ÑIÓ܉œÑÈö o¨°š/‰{==×TÖ“3kØŠ ! ¢ï ŧšÕlZv˜Q6›¿¦v7å°íBÂvÊöåSÉïØžÚŽ·!AÁ+GNC¿läfûj9D $‘Rè«°}ÏÇ-ßw`Ù<ÂŽ¼¯þWº°+4j]ìYÔÃ4ÜSÅY| C§©™÷t È`E*< ökY.ôB]HІ=?³Zl~\2Œ¢>£øiÑ3P+x4¿˜ÂAV*?³P²|‘15¤ü°û'$®W«ÉY's˜Ds£ñØ «Ó'»J0š‡Z¥å€[ \d ß&Jp•×…ªÍ}Ã@AmOx‡©-j=*ñØ•IĽ¸ß§´Ôïšósîâm# #2aûæv+yÏzµ†·¿…”äp{K…ŸŽ-Î"x:ÝÁܤÒÂI"Ьªm,O¼Â–›Øˆsb>¾ ¸«˜Y. ÇZ½F”»¾^uR¸ŽÎ*F>®M "§•RãªÜwý/kÈAÄ—uUâ}:ÛžRmÁKÞ0í? @É!$¨¶uO a×ÅŒ¥jÆîb÷\`£ˆ{Tέ$áÚîÿ•h-ÕU&Ó¹LÁ7äp> ³†C : 64&b'*aU!=Ú\±XÝí]Öci…:žÄwÝì¢$<ñyÛTÂÉlC 0ágÆ.™0‘À€Q³Ô‹”¹`Q0 Ã,hªí…Þv#ù…O2%˜›Ÿçx3ZˆÕ‘j+4åãï´Šn(«ùs#ˆ¼Lr9ŸyaÙÞm°È–OÂÔ·›xζ×ÈQ” F‹$ñ®å‚Û6ÀSxŒU9þG‘ùŽDaVB“”ÌÃÁ¨C'Uáµ/1Z==Ò&# Œ6˜d/”‘ղȈؓÒÒr cìâ „•G-¯Š½€T”ñ(ŽË5øSh¾Ã̪j‡«¯#çá åÎÂú¨6‹1wḷð[ÂôkM'Ó,33Ž™ó–B¾"¦[þíÂ^aÿ¸rÊNB>k”ú0–©‘Õ]ßV×Y悤oÀ*àh.eŸØÑ¢‹Xí…ETÑWâRò÷&±¹Ô)’ùªéî¦dÒ&“Œsõ;LÂO³wƒ‹/TœŠ­ ßüš¿iÈì²bb.'“’Kq^ÇÑw‹Oü¨”<ëÛº±NvlÅ"xl3n± ÓÌáÕàÖ—΄ՊËí::‘á'qˆ7M Ð¹á §ÈOdi„mj²MWòm‘‹Çµ·Çû˜ÿKNN÷Q˜8Ñü«1íu#ÙÚÔwºÉ*<…6¸>ÃhȃðÕ6±åÍ¥»ç‚,$Ù]BBT¥í™þ*WûïŒîÊ»¶ëy“øï!ã¡ë«O÷ÂPÓ:‰èÛû޹‚OÀðÅôQMY4OذÝxSâ¡q\­€|™ÜhOÛðÓŠ†B¬¾h=x`9ÈýR¨í…WgÔem–$ù*péçFxÅ^²AxÚ%¾[ ødQ5D·Üç@ÿ0 P©!vLä÷ßËúÃ=;j0P&H¤ªÆö9U…yÜïå¾Ó„â…½Åþ3Væí[WFŠ.B׿X¿ ùaJOÍ/.ÄèèÖõÒvaŒþÜ £†><ö•ë$í ¼ÙgÂk˜çyqÕèïɪGZÁ÷¾J´€ƒ²×õæ/¹ ŒOÊ<‘Œb•]!AËÇ”x2YÍìû:å#êüû&víØŒuwƒuÀöÅê©}»ÇÏìukèæõr]>†¦©œÐ6™B“B¨Æ–Œ Pó>€¹ ¶µvIÖ¢|Ú•ñ%÷pTõGƒ±¯n 7õ5Ø´nzai.w0u¸t+e ¡xÇëƒ% e.«7PÔB-Þ!æ¹yÞÒ)=±.¯±–A¼ôd‘œÈµPV1jFCÈÊïÜìÓÛóàÉD¥H "ävµT,eš£‹Ú©DÒ.Á"’U %³Î²d~À„º£ä2iŸÁ9S‰,ÝèvèâêÐåQ´,8I¾÷ü!Ú¼!ONbɿЇÐÍ×Cj½:¶Jß]8edÁÞ,ÓÒO€ûÌk!´£å7“Clã}i|¨:áèÛÉOM“ÛÅrטŽEæPÛù\çÒ÷Ja†böÀËÅv½ð58G\õ¶$x¬“?+šÌÅä?]‹ã'ö»á0›?›©hXZ€»Ÿ]Ð2N!©Ýމf¾ÙËdê©0+€^Ær(}C e¯½}æü—þqVÙ„ÓO¼¦Ë+îD5a©PÉ(ÎÜʧ%bªUÃ]<½¿„×õgY´zP†B§[Fò°†?ÝÜÒÆ?¥œâ*’–•YËÛÛ¦ºÖˆ[\g©hOûDÉÔ0¾ Õ¡ì¼å³C“-/­ÜúF\ëÙÂx,,ãZ±.Œm-öId1=‰JTY-¡ö™¹{„ˆêßu{þÁ:oy Ê<ÁÍ«~x§¿…a»y€£ædínÀ˜ç>BÛù5!ÑñÿduÇQOÕ>¡[YâÂ$pŒÍ¿qJÿ¬ÄšVDokUŽIH]ôÚ~´yÙó±\=î­/Ñ“4C’:L¨±¡¨Òž <Õˆ÷ÅqlyžÍN;ü 6ò¹™M*ñ>iP)¢¼Úl°!{ÛÌdY’Êêf¶AѼ¬rNTÓð;c®ˆá æQW‡·$Å4° "W© ËcC H±¯ †?ù.¹µ\aµZCÖ(—%!4w3–Ôê ü)U{0v„ÈÊ– QÖA–s*«‚öXmK½úC‘ÂPÈjO;H¤ÊѲ ;ÄÝä.( ¿Iní7«¿ÚÄÑtBÌðëÇ^gâÔ×óe)öH”«ÈNSE‘ØÂÞáº60ܶb·Äì^ƒ±m‘¿ÄÐ"Ìùrü RÂ]-µ5Zø#YÆ\ÇY}•eÐ.œáš §üÎDª'ãlºÊ›Î}}OÊŽð¢Y˜ø=â.ÇhÎ(²n´Si0¬À;Ü—Ä¥†[»‚*öÙ ñQÁ§À‘æãÖÓ–ýM- ‚U¯߬‹óóÚ5'[ õò×6IJ åj›ÊZ4×ÇÏ'ËþUdX˜º›y ó¦×µì[ÏÌõÛ0_ ŸvXÀXñ “ÉÜœAï4ð)±ü'Òt0@TóAÜ–J&YÒ׉s”ÌOÕåEK^d9ϧº/Õ&Fjβä 2ƒKI|õøÞɸ„|)þŒä榤fHgÅÝÛ\Ý1;ÔiAxÑÁºØÀ±ÜÐìºG/ûP¬„gLEÇ9í«EBupb8¯ËÅCxœàO²þ“ö8{åLÌÕ(æâÎ`T2G]ȃ|ù‘æÅ@¾ì½ q5'eñÑ! V,W@g)tU´ó,¿bëlÄ1÷¦úÿTT(ÚW\ ÐŒCb«iö—7@‹Æ¬IõSk¥{JêæÆ™½½E$qJE¥ë¾ Iñ~‘ou“×é-”W}ÑÐLKUö瑆HpYÍc1‘w"µi®2ÿ òØ9œ¹óOZæ¸04å®7 Ý#º‘¸Aës®ù“Z´\šcè–Z‘sØZ `·¤–K¿<ÒNW!'O?nÀšgÖ™ x3N…Hº9ißÿESUØý/OŸ¬‚ºìœQ®Ü—zN„dgW½•Óšs[ú{‚*Âóú~ió#¾®‰Á[ô8öÂðº]F65ðž‰ojU.dœN!ÇDõ1ÍŨ&ç&³±½m+;Q ‹DÉàóKÊ(¨Ú¨È(¬mûÙ æ«{G󇓇x nËßÊ ´9goe‡éÉÔþÂQ>s6£Ê<ÙÓýÛ¡ë·ĘМ$d®ÇO„¼D«á//j‘y~jè'÷!·‹Ñô”2½zæ|”ÂðàI&T8¬#¯ÉŸ“šo8ÚÛ&© fH›–M¢,h[×5GøÀµÕc²Íر²NÞÖèì øz²Üd1YÜÞi)>‰1€ù[ jN*ú`2©Q›Aðm6¸Ùÿ™F¿í¬{ŒYË6EC3̵Åß1]#Û Š€úmK-=¢£,zÒ·-åw8ã‚7ô`Õ™@ߌ1ˆuT¿ÎhYŸg‚1KÖØ8Ê®¢»”R2šEü¢>þ¹Íi%à^•ƒ&x9FÛ•³óŸP®¢¿¿òÿhÎ@éöùó–FéÄãqáˆNÞ*NÚC3#éµÖD9ZoÅãT€yg³pd¦Ÿð?2ïö)ÉXšÒ0ý#×iÕëß°Rô7,ž<™¢é‹–ô£ñˆÂ%—ØZ“]kDA¤…jUÛ{yöB˜vFD Ôw‘A¾4)ä…ÚÝ:ªG(ÍWJÌÍ¥N5"ºÒé ÏpiUé:¾ÑÏŸ{©ÝŸ”AS]=¤%´,èͶMázެŽèF!Ü¢ø©CÉ V>»Að‘7º& [A£Bƒr:¹ûÜ`maý5ÛìWo…¬vÚN¸FO¥ wˆ|ÆÇ€ÎÛ´7¤ )$Ácá1×SZ„&”œ éê_…÷ÜfŒ¡,§’mWñ%|WFÒjijçµ[椰“3Ì™OÎ7›q¶£ëðlÒÃ#‹8¹Œà+<yü¨5@p»QV”ñ €qä¼Ã]I¥%?[˜L@!•z¨ñvÀ"å÷‡—Jã|ƪ Fíß‚aæe%TTjöNöO@;ɯ¬]|Öa¥«tb&U\}T…ëö¡ßmD³m\ø%öZÂ")¯Ì?ú͉L¬£·˜G?àþõàA”ô–b^SFœUr°\«ÏL¼\‰ËüŒ£~4ý‘›Õ¶ÇšÅG»œzȦ<ܰ£´ßrþö–Åy•vãJ%v–®…íBN@TdÈVLÃg]Øÿ/CÞt_¢ÃÕ>Å´IÒO‚õÒ ,Zw7\@û¼]~W^âx/@eSˆH¡øÅV)¡v¦¼¸ÕÇ`¥¹ÚÓq´®&Ê^#i‰â8#«ÞÖnÜqïTŸ[P©1ýÍôw»h2g›p„A‚›^/ æ~ö(–Ü·ò~Üú ÃþêH<˜4•.î MŒå1äjO°ÿæ6Ü?6ÇÈ–}Q `!Û—PãˆLpJUs‡¦ÿôM é·TáÈ9»j &÷®Öäí=«8—¸X ÚR·fuè&Z.‚ÂûJÃY~úÿðœ­;\/ê‹*ËÍ»íM ›…ãsÓßNâ2]7&&Œé¹®lr;_ñü… 6udÉ<$q É ŒbßMô&«²¡7U¢ëý4^rîÉž°è¦âXr.céÔNÅ.¢‹[Sð—`bžKsþ‡’ˆæ›@(äú5güÐ¥^Œ"‰oýC!ܤÜHHžàÓ`üò«ôFø:r~µœUêp2‚€ÏÂa@Àšy0À ‘¥Š•GmÓµ­âS“´±[|û4Ñ8ÈÜvXˆ·/.ãåE¸]Þó¸ èf Ñ ™ø ö\¦”y1©yFq6¢û¶˜ I‡À–%O<²Ä/çcgƒZ• ¦²2Åâ e؇©´ˆsLUÃÂûW ™—ÍÔEacL±Õ®?â(W'ÖgºߟNû`=“Úˆ(,"^-±¸†c^ù†gâ’yÊÒ÷þŒËEuMƧ{ÖIœQ xìýbÖ®Q@I|Ó/‘çŽ~¿TŒôݽ&5`Ç?¢PUø A‹þ=©-™ü9l?lИ@™f›“ À½ùý¢‡ç•ÓÚŠðè~è)™Ü’Ôt½ƒƒ¸;\÷nk\Ò]ÕoÝnqYÐ&wé¥yÉQI¿þdç‹JÙäQ±å "˜â«|!EâU²3ÑóÞVðÛ49ÕÎÁìØ.¥^l¸ Á@¡Q ¥ïP…BŽ‚í—…ÜIöi¡»H$Á dÀ|•b£wVPíЬ) j;xÛAƒÿqMm¦ÃXYƧS$hKã=¼Zyøzó18¡æ¹yýìY4€d‘C4v-ŸÉí:FrJñ¶'/.uÓ[(4k!Mmß-l:(Fm¥n<ñ¹ƒVv@ÊÒø!(ï- +Aœéª|—µbKˆ‚>Э)/¯ø//ìø=¬%¥“ƒÛúl‡Èa`1€e€ Xf¬î,±¤9ʯ”—âvQÇâ)GºªëþPH7ê™=ýCÛ=]0–⼋]î16Õ–À¿71ø Y7o±€&ÝkHé–¡wëv+ç‚I{ì3Ûa܈³-×ä ÝܱO;Ò;K…âîÉ{¹ïß“Zé»N-´´PJ<]-Ï*¨òë]±ÀÚ NMÓãYDzæd@m§NP>¬ WŠou?1Ì-¹-‡¾[czýzý‰ Te,+6òÇádêôi$ï‰{Jô±ÖÁ•¾Uc=%|4#§ë ¿Çq§KØ/_…H/¿,Þ-o~:µæ‹f±xò²š¡ÓVçºl­NŠš!2•²º#wÔµZ4ƒ‘ˆ¹KÛ4–×ßi2ë¿’0QØøÇ&bwïÌCÀ<©Æs[³£rèྒྷK=¦¯#= Vû>wse´,[˜0T³é1GDTJ¢ß¤%¶¾g O4_6™<“O^0Bù6+ `ÿú®òWò„§!Výñ¹ã¡åÍ`‚æüïSuïòý“»—ÍØ]½ün#ܼWùŸ×Tœkºëô¿­ÿ4nÁËæ ÿæÈŸV3Å)×’ßr̈[žSŸoQ]h1eGsΓêõÁIðÛèìîÙ?fŸ-tønò ÚÙ–iU`|•+³áÅz|nVÂ56-iß|žÏikçã0×K6 ©x?WLÏC]±B‘0WN7âé+*ÖÚÍ…&zì‹âÐ¹í§“Ø5W²•;°g!Ô Ö‚l•=İß]aÁ™Í“æ)°Ive—œ8æÁiÍá \¤Z™ÃqXfí˜ÇSÓÜýák~¹:c£HæƒâàDªˆ\j‡‰Wë™ÔNüéú(Šž¤~„)dg¬®ZàNNYò÷ôÎY“4M’Þ€‰/§àZÐa•3­¦•Ì•‡…ìh]ij^þT¯ïQô$¸qB”ãPcºOËjÊå@F¾D‹I˜Ò±¿Ü«WTA–.õìÍï¥é6Äâƒò™RÄ´F$tiµ6ùþ¯]msÌù†³õrkùù~~Ø–ÑÐH㌞‚M TèdJõR;@!Wå,‚ÓN\èÝ– bŸ<á—ïÕZÈSä“o-¿§§³2“Æ¿ø­d‰ÐýµÙc¿>ÊÔ(Õ~žðÛpÏÙŠ©Ïo;qqf½O+5aH ª‚œ›èôÏ<·¤ +Šm8œÙ€gËcùgYì·¹×áÃbæˆöýz1¶¡^‰„Ç p˜¸d32¢O;3Ô¸oDpÐöD vÓ{˜}ã2¯ñ¡åC%CÑkòÿñdê§jçæ©­Q£æöåFé¨sDɵ޾ öÙšécývܯ¸ìŸo×u•oÜ×±¯¾‹ CÕø àäÿ€˜TðΞR‘—·‡Ab%7~œøg1ø¦L"=òØÂ¨?“ÕB6´Ñ¡Á·ÀDÎ8âH~+Ÿ»`º)Mv­­ñо:E‘û ßvVÆNNOïß=3Þ1yWóÕŸû;ƒh ˜©òšn^:ûè£éÍV¯|ì+wƒÇjLÅ'w:s¬žÓF3M#¥ù±;rh &Ÿ((oß5_¡xPJ1ÇùÅðå;ÂÖ!⃠ºÀMd“#Ä׿A&RyÄ5 PÎwÿ©¹÷ÝÎÚ^ŽmF¼›iW;ΘÒÀÖ8ÿú­Ú ܇RµØø(âX t4ÿp¥RV°)yºÕ!ð” n7_2lžRgFPÃ祦P:`"åÍ#ôü…ÂÀu™¢½÷ ÷:ç#Òî)H ý㔥™|í­sOá< µcœæC‰$3õ\ó†E¦ûu)e&iå&v)Þ¥ZÝEàØéú7ØÂ3}å:©…„à¦NpÔ`· ªIF<½(·h¥(èïš=‹1‚w¤úuÙêx”ÈØÖ™\fjdëÃùv€Œ¨J²„«ššÙ¬±ÔÔªC¾ëhÂl¤w&î.‚PÏn0WøàëBì÷vµí ¾´ÁÝPaœo[„BÞ‘nq¼^®íÈŠBYn  ¾ÕúYûÒ§2Î¥•‡|èn>aþ0†ÃÆ_çº!`‡ºe6’¹ùÙ"ÃrNéÆVŽ‚šE-²gÄŸ»N÷Í¢Üs ÌÍHÚhüÊS™d-NJwâÀuÞ‡Åz×Àˆ·ôÌ ~HÄÃP°Y(ç ²Ù=xiŽ1鈣F£j&ýwüûÓ$ȳs(Jºw¤X´îu¢ù”¦¡€—eÈé%(!¶÷lyüƒ':…dïÛ=±Û¥e¨jò=÷4ZÛ 9ÈêÖåÁ>¨lg5šÜ-×°›*& ~ :€†VÕ|JèV…œ%F¸ è0Û_ÜHïÇ2 ¤ØÈ½òİcƒ󘉫aÁò¿Åb6Í.Ð@«ß^{¶àóKR¬t]åq´5Ó¢€bzÛ¯žùˆïE‚ iÊz¹à[¬uŒ Y ÒF'¤Ài´|¼ìÕƒš?Wä¾+ÊMx[ªCßFr‡%¯ßÝìzH.´«YÀ`ÒôŠFk:£ÌL—E;¢QižE7†þsXè8‚fÚµHFÈlfŽ‚¾kϵ‘Ïkcóê‹q›–„ͧƒJ(£iχi6ìl:—Ô å²ÕVXÇûWïfµœö˽á vz½±YËü–g @áEmƒ9ziÉ~¥q–ÃF"Pðì-Zîîê͇œšØ…h>lJ yyó;w×ÈiþÝëi ¥2`+âÉ þWTª¬1—zÑuˆ<¬nv:ÖÿyÏ’„ú8ÄÌ_B†¹Ÿ;ŠçÈœbïÁNgö°‰ôYºdìÅæ×t;j 2›M_›ÓÅühD h,ÅßÛ@-Ä|/Ãu[.¤÷ûrû™cÏÐ'ðþp¦kH6ö_s>ã ÉÔÌÔàšbÚŒ8§>z ÚÉ®nnæ!&îµx?M<…ØõîFN/.¾>ÃR<êRÙ‚CRó~o!ØÃÌ3}ñ6ÙcÚ Qóxèž Èsâ5Ðè<êPˆLÙá1¸gOGÞ|6ߥ²TÍ{xe³Z_Š.ð¥ó²ƒ`‚·K8ÍœR€›%HLÜ ‚ùÁG+À¢<€Ì›ûÎa$’…Aă%ÊšÊ7r“›}£yáÜlÜ+ÈáFÔL°MÀ¢Y^•6'Ž×…d ™(Þ-n&ÖÖc¿‡Î4l½&yhÚ Í…ÎuÌÕä(K[(qŒM_+Uþc êÿ‰9AІQWd›UÈ¢^îÎû®‚¥¦´³l 1¸‡´.˜‹Z]%ÉñL²fP7^ùŽºþƒáúzwj 0MÎŒ’n1]iô~ÏDÎoà5%ZQÙ+Oȱ—¨xð lÆñt^|¤ÄDÌè«–†æWÄß!?¼nšôFÍæb’ß #ûˆÏûy·ðÙò„†ðàÚ]mÄÞpr£¶‹ñ0;/€CMä`Š Jb¥»{œªwSþ^M+ƒðFV¨ñ+mßZ/,Ê”ˆ‹àñõ+lÖöÑ2²‘^î ‡¤€­”Sm¿Ä°S-Íú“SIçÊXGÔ<ÈuW*\U-™,`Ø—õJ¸ƒgSÞš,·¹R[û5b•ùÓûì¥uª§%ñ Örp Ø+V&'ÚeÆ{ÞnáêH7?-ݛĮ ²–ú™­jƒòBGé­pi}¢˜ˆ”Ð_±jµß“ ÎCW(áwêV{·Þ{ùÕ 4õ’(ZèÇ# ¾U¤nSÇúÞRD¼õ=Ä@©2J“Ñ›Ý'IÔ(¿Š¼l™ËeÆC>;]u@!ªÝ©¸^LG˜Pç×÷ªN´Ò¨ßüî['-DZd)t×Å£ÏÚ9x… wÀ𣕳²š'Þ·¨¬zœɯ‹ U[Àg ÕëpÙVÇ0’ÿÑÚ£GÆ;\Ó ,~iÇÇÿF-‹ºŠ“r 9åÜBštÌJÅÁÈà&Uù 8ê$89xŠÃÇû(]6Ôè(0=,tÀ™ùÑS$çÞÉ÷ô“fýr z³Šð¯³w×2ë¶¾øÄüõOVÑýQ’ ðëGJ/’vÏ,»¼ÉÐ ÝTÌqª›<•éoIná+Ru•)1é êLOþ|ò o›à5x_šÑæw Ñ›ÄtO%[½ù–ã‡9‡Õ£+Wz)©¡¼Æ@¿]ã0;¢+-f¡K+@õU©6ÆÖ\,¢€÷ ;*c;“Û'Ô‰_l³±¨v«Ù’ðû1G0Ïà—w‚î첆øÎ¾Ï RZ€Ð:lâø'¡Í͸ "^Žp‡dþGê½$QߦÔ:ì-ƒ×¾2øm£ª¦QÂJwðÆ_¹ÿ¹ÅÐï—é˜$¿ç²ÈT Žˆ@µ }«_WðLGz±rö‘éï\j >Á¾1ó<dò#iO1Ï9-œÆî [gú¡‚9ÿ¸kø«K=ªÁ3éÃmñóe&²ÿ¾.'¸3!é*‹ò¬c=¾ ÊÝØ²5C²¦á5R…XîµS"ž¶›%ùØ¢µKº¿Â ÈÜäŒ-çÞœ³"úWÄÁðºÈ´÷×—•ý†Á¿°¿g´ùbbØc«WÉȸDê_B?კsòßv/¬MT°ÇìÕ- ÍÅ:pï¸CþÛ›eF3´_c¶€æúp°ò匞/°f†.f"ªálwËÉÞC‡QDÄñA÷Ãð¦%¿§³ÃvSú-üÛ´ð#\$ à6E#Qa·¡³¾a«%j}!Óœtr3*1¾Ë-T-wžÕ/OÑË(ŒECó/ÂßÔr–X;ë@þ˜•(òË š`¡)à´Ùa聾yuV°4c%LW#§Žö8jM9‡ˆoÖ€”nðØjÔ"…ë«íÎú¡×ÅÍé¥~Ó²#‡²%žÈj<÷ôÈŽ\õr}&™áý_cÂÖ´B¤`´Û°xÒ÷ìµÐùÊçr¢eFl†åêFï£,n•gy WËGÉ¢MMå; !1-×FølƒŠ‰£Õe.žJGK׬v¿UŸ=c{¾2‹ž’ݨÑăuŠn-F,KaãL@1‡·O‚r<µ2ävšpîí,ôA€Õ—¿*EÚèîäßLDã;¥¶þgoï"ð†7ògöàÙ½}zW×ë5!‹`‘¿Kl±˜Q^Çìˆô¹Œ‘s'vï‘É=ûdaµÈ9¡®[ øê:ôê½€ç̹g5Ú0}©˜¯SÙ¿/\”Ö‰£È_þIÀQn@ŒŒ$êŽác4 yÝê|…ì>Æi/³¹¤WIí©QfƒÝßhmÒ[ÒÍh£|ÂQ ì\¬íjMÝrèvZŽEtŠ­ÿéß«Fy¥®*Yö–t“¥[²9ÓƒKÓ 1¤ZY÷aP]jwd+É/a; ]-j›TäWX×,ß›¹Ü:Ó¿aô…ye­w¯BظLsê… d'ófmþ>u%1sôéRû…µ? w%Ίí‘NÌUØ/_ OýÅèõZõÿYMü5š¯}v@ž£ñ¨°Ø•PîþX££ð{vÀõ=@ÑÀP /žé˜n®!Ý–á^@ýsM|Îz é;W¬¾b[gÃÆÔH˜Búý¡MM\ÖGRÎŽˆb1M¬ê¹zŒn z¶ÌËá&h^³Œ|Ꙫaz¡hvX™éþÅ_p€ØœÆ€júqø£ï`èW¢n["ÉT÷ºÓ¨™W­{¡J…­ Â0ܨ©Ý„é]ïŸ#ÙH‡"ªOF&yƒFé_&q⥪T§²Ë‘?R¿Í¢}”F‚·€›Nü:ŸÌ"IÓg¼=Úœ|àu^´†} ˆDS¼ü£^ì|ô[нg®Ë#ØèÙ"#÷fJx)‚bëoEþ€pžÒëÙÝ(}ð¢„Þ´!aÁ܃}‘S¾GfÛÅúsn:ÝÄñÄ-Ú/]ÆB¢ô#`œ·ë¶ÝÔÕS-P5lŽÅðÊ 5¼!5(P\v¤ÑDýyd0´+WøÙK 2~Èç·º«D wd¼²ýuÿ k¬|èûû„T‹½ûyB»!§-bx¤F¹÷ðUù;ZªÕÆjŠ‘˜"Û€ÞÀpœŽ» † îã~FQY«“"ÿ†qèkÎü&÷Àme6éè#ûþ(tà+AQHfnÖ ³SÙ´ pPú QÁæzj‰F(@^ú©bqÁ¤Ø’ô\ÅZí‡ÑÕnðNÌ §5Q_Ã#7mZRAúï¿âZ6R»÷/ z£UÉ,€w‘1îî{>F8ãÓyXÜ!ñˆ‘šºJ\¶Ì0´ázX­Ù'a&Ë‘Q”€èÞ^בçÖç|ëÔ?nýñôu,`H,îsOB ~ èÊD $ÿ¢ó0ˆ ¬ùS½¦­×µEY¿•׆¹¯ÊØHÀ›AÜr pÈ-Eu“Õ)žàãQÓ†`qÛ¿'N«·åj êÄšÃü˜[ÖÕ7 Éÿwãú––ŠX±Æ0väúõl#îz¥•òÁÈ_Ð|ù΂ûx€\w3Æê¢ ‚¤ÖM‘~†k§ítûjé6²Yäe‘T:Ãièr4 ÅSb•§¼ßÜ€{hžE 7-ôþúü°3­ìJdÁ'ŒÚφ‚é%±yùŠŠæ"Âý%uÅ8 šÓN™àL0£Di&†ªì§™•ËP¶â¥JVK¡ ^R¨)ׯçî¸ÙXœ•Z :<[›AÁQ»Õ7…§BƒÝ1&›ëg]¿™þ=ë‘FÏã¯,=×ù73’BTU-B‹I¬lØG¾¤IEÂ<ßç\ªÝl²°¸ÊÞáºLÕ9<.·,2l]="Ä´R#;9ÎÇÁ•ÄÁ^hw>ÒiÆŽntE´BÄã×ÑПy„h=îq½x´q~O¹Tk¹)L% 9šÁˆYßDëSŠw±¶Xw8jL³°,Ó9•W°ïi­ÿŒL¸Eeô{Qˆ7ƒûÕÒ„wF÷𸠃 ;$÷ïºf ¾jtòJ_€Ý+raȹ«£J¯ iÆA¥Aiu¢¢úiÝDócZ¿Ð²ý·²g˜¶¦†¸edzGÔµ4#byþÝšÎöÌ^‘NqG™#êÐr5§}»l!Wº†ÞÿI¸ôH~ì´Š`{]ß*q¯ñ€Ð?¬®”l<'Ñb·„Óm«Hñ90KÕòä¢,óó³Þ«Ïøtîkøa›¾ÍÁœþºõ……J´fóˆŽÌJêÜ|¦ÐBàr»^ŸfBó)? ¥C=X¡±‰O@‰/ü‰’ABèºûÁ‡Ã•u]ýZZBp²4ûZ­óü©°OCœQºtÊ2hÉÇU p>‰Y÷Vâ÷&0 Ö¾kðpX‰Vͦ÷ª6x¿GŸùy(¨ßXÙLv°)3ñTáþÿ³ön"½U£qÇ\•Eš‰Ë¾‹€c“†.À÷š·ƒµ•æU$=³å-éPúRL=<Ññ ®öìùßÈÉPǦs‡ 芣 +Е 8Ù¡¯ÕÊ·}·^E—ŒC‡Uëô± “Áp¦&¯Žö®JÌÎm{ìa–oh™1$µœïX[½™háòªûÝ9¹¤â•ÄÎr€ïʦ;SM%ùw§/ r൱ז¼pŽN(Ü<´XДxg8)îI” $pî­¯j™2VÁUiW墙âú E°#_–E½-?êÒ» Y¹kº„Õqæ§ާÃÐãá+i×>ΞK«¿’èùjÐýäêÍ'¸ê¦¬šBÇÓóYßù—hòÒvZË»2à¡g…Ÿ}‘|¥=Õ9%n5ó¯s xs53 ŒÇäÌ0 n—`f˜ç"RÎVc·7I˜+& _飜æb{2þG„Bëý £ÂÞ»˜².èCÈW:ÉCNü0`e÷žM¸¥^­ ØD;@[Mâ ‹g_© ò„„CQ5 uk}@w:‘½j$.•hÍã,^‹ƒ"ç‡}ö—»RèlÅ}ù‘ÑX®Tá5WJÄÈt8äŒjÎÃÈ{BÌ”€Ò¡÷Næë²²SSUBß7M,OÄH¦ |ÅïOi¢üÖFnþÆ;IT!žÔ2—1ù®ô8Å[ Q·Xy=ø™qF2 k/yM¨ëÌ2ÀW‰øt9íîžÃÅ»мIÊŸ£™"ÀÇã!ôCÞPL›—K~áÔ·¨iª/ÖÙÒäù?”ãqâ)Œr²êÌV„¸,pX"ÌôÎÃ÷»“iüJ”ÚÙmõ*†~Ó/‰˜ÒôÊ5ä¦ÿ•91ÜÃUœh½0{#çüJ9Ú`i¸kÝ>T²¯ðÏ„ú #Óy,ŸÌ¡w€¶¤YB«´VÉ%¢–F=ž{÷þ[.òÈÎÕÊÂüIÅ&)ß«FUhÁq‚Z£ãª®é à—>BÓ4‡ßèx7 Æ©a »tŠ {hK “3î{ŒÊI3˶ˆkô×ÈTµ „*¸¼ÅdNù9àÌŸ N›Ké ãÂVÃRü³=ŽÛÖxà…Cdì¿ BÇ;Ëuˆoµ±.ZTƒTÇËØ5©‚Òr0î[stµißFÈý‡J:ð´Aeoeó£ÎqwÈ$jp·Pdû®ä¾“hké†5]Jž‹>YßQ…~àj÷öÛuŸÒã+˜³úÆ8Gz )_#TÏm‰‘wµÍybÓÙqNsª$‹¯TÔ=åK#›œ›!ï”Q?‹ÖÕñ-Z¶ 1h"ÎÍ¢X\}r\ý 5‘´IW¾áµNÙpX@Þ–œ¬:.DñºL6åðÂη#ñŽt\—äX¯/»ó•ƒt0å–!]#UEá|ºö%dÕÌÎÂ?`·JAX¢Çç0EÐyñ=á&kðœßu•ªpÛ®K¢_‚¯ÂÿM)~£;_!v\¦˜8éLø3KZ"ÌÌ>"HC*¢ˆ!Ž‹š^ðŽ,áŠÕÅ!ã¶-7~£CW“x¬‰^øØãžbxªÀ ·«ì¨Nvè ºÃÕ¿èÑòÝÅséuŠ5\æY ÍÇ)¹S¥†têœìèGÇmì廤_¢ã˜þ¹'O¶»•ÊVšì“gS€dlá°Œ{íØÀm ñû[›ÛP»ïT÷1.¨†<‰—á‘ϨûIèwÜlX´HoA&MùçM®ß8êD€ÏØÈÐ*`^kØ~¶5xD8}ËHbNLe¼š`"­ÿF|˜©ÎüÍhÙ‡qÜè)=øé_øøù„S˜øYú<DzKѵ 8eJÖà;åQlÑPðZ'&yâÁgYëQ‚0Ä4¡ ¯zÖƒ ]Ô§ºžÌ6Œ‹m¸FƒdÓ |¢hT¥~¶ ‹“1cNCüÃËÓ˜…ñ«‹Hü¥;F±9È¿ÖÜâ¾"Ó}'ý©\ÍU×BÛövœ+ÔÜúQ´u”†~: ˆ]’z€ñ§ø—È’”²xîõÅPElÓyP@$þ_¤Z]ȵGZhå>t?‘¸ö’¼/°š†Ú6¡|®ý¾qüEvOKyæõz¶ô/Ù ÇÜ…O©ÿrç(ÊÿÎT{/‹ïäÚÿŒ=œÏ‚Ï?[‘áú–O[ ½2lJÆ›Rñe›ˆÁøæþpsÅ©–E€ ÜÀuHX‰x o½‚Bx´òß¡ò/'Ѷæx-Ùš[P¼«yÈkÔdQð2BÇ(g Þ@O!þ„ ƒ›ÞœNKи^*òx È[ö„"¥=…oÓù‰Æ­R ’)ÃÕàz`ÑXƒ£ª¦-5‚aÕ’¢üi>ÎXGÜ kMå«GŠãŒÝ ÉÎLÜî¾›`Ú&di_Îò× ÂÜ9ÝF&‡í…¥œB «T—Zãæ(;™è3Ó‘±ºÞWÅ©ì6'ÞVßF3"w½y4JuR¨ÐjÚïQF~ý}‚Ï/#ÙIä›Ð0(ZOà}°£§ƒ27hŸ¤£ç?h‡‡jIšfF¸=Í/T²¤²X›f“•ǙܫƒÄ”ýª“ë²5úŸ¨’øðŽ„ÿ›ÑÁvÇ !+IÂÅ‘ûÐä7AãbV¥ªì,A4Õê©_ +Y‚Š„%iVTncáq—r÷$Ç1zŸ†…ž—ª¿ ÎYõ8 V#ñnSÛx‘5¨x5ž»MsÓ|ûUј m 3jˆ3ßÇ= ?‰ZjÍYY–ú5%Ulj¯l®¹½ "¯GŠói‚¡Ípu­r‰l"^Dñ ÇÝÏE°Ìóþã[‹aûôúŒx] ­q«\U ¡ƒÝÆbÚ Ärf'êöËÍÍgÙÀðè§òÄ3R#B@C+M Cfáî˱^ê µç*eåNª~沆OÙJ/áT+AÙïÅ{Iþ¡¨MÓ>!§±‰Ð°~MVýá‚/›Pi·Ë{20‘Gw``0ë§a>ÎÕ¯Hž+%Ó/i–´F3‘PÙ:if³FhÂöHáKR±Ù ßdÄ%5P¶f|;ÜÅšõ<)2²á-õë‡ú­Å.8‰¶ë“JéÈ VgÇ‹T$æ„Þ„¤cymÙú CXÙ<;îï/üþ=òÐ&Š9ÌuáºUAl¶‰¢Î„eÌü ³U20ÔïºwìwªjÇ?H^µ Ö”kÉ-WHè½›WÉÚvvLµɉ6ÖúúósšI{ëö_ ’E9vMè¬,Â9Ä–®M¤!ˆض²Þ¨@‘w•Fn_P‹³Ät²R1^7—qÃ^ÖËF®ä¿šRòDó[&X uçü€‡9Ç4A2Í]²üõÒ׳»ãên-‡]ÖÐˬ2ç}žç®Ÿ¾aá~YmërÁ–Tí2élÃÙqYFÙÕöÎÞMkrDä¶_s]¤^Ýþ*ÑWNGí^Ã’¯B¯&¡Pô8b/ <6ƒ•Æ~M‡cñ>ç›Õmœ5´6J@{¯ÑÉùûN&O´èÈõ‚»áFNó¹l⦆ªýwÉ3+{=WR ¬ÞøåK ÀãYIC+Y¡ê)~ ¯ûÐ2:Ë•øÍ 9Û‹ïÀK[’Ý£·¨…î"s-89Ñûh;.õ“–°;‰HHxr; © ÇÁ¦32x9®¾¦tÚ¾>W•)k»˜ú$ò>(éEI%C¶h­Ì5%Šô︾áÁ„)äæw¶07ÀÆÚb“re5€zî²33«)O(¯üsH°±ý½Äm<$ät(>†å;XQŠ×cñÜö0ô=aO Qɵ<5›¹“ìOò $üõø‹ÐŠ›^!?„:ʳ©°²Â®ë ·„Ý…˜QŽb äÊëù‘.ÃLŒò–¾›Á&a~V qotó+æŠ"aã‹*}¼îæ äv f9§ZâØå3˜D˜¾’Çå=ˆÌtÖåÖ‡"ô[ÿþ• x. qäÉ o£ÊÕ^b…TˆP©­Àh%¥ÔêŽÔ×—l¹§UÑ¢CÑ–•‡ «á©§¤o Fé>èõ`< ¤·«iñDƒ+;æÅšó¢­à¥€Dj2n·2½ ¸/^AᆫœóhÁ¥2ú -ý‚B;)\Ç׿\Do’'õ‘û6\Èyä}˜óºnfŠyº€wfq+}Ë®oŽÄÙ¤O>Ï"î¤æÈ´¯NÆ>‘*¡9P–‘<|ru1çïüß¶´‹–¤ú0eº–‡4»Ûê·Š‹ ‡4á!•Îc)R {ˆçÇ5óìRy=‰é8/Ž$•Ю Oæ~¼Žjšì2ÎO×~lÌ+ð.L´q¥bä[‘øŸ˜`¹Kù¼¼èÖ0œø£îïb}åXHfÐÃÖòЀÃß}Z¡XÁn2˜€ øºÅ´¬ù Üñ¬0ÅŽ4hÃ^SäB~›ÅÔF«}R†GŒk%+#oÿäTa›u3]`ïû§éfl7¸!ÔÅ´ŒMÏÑ#ì̳ q=G!ÅFø4¥(@éÑ 4·ºã~È)÷94?Ð š*•±ÂaùRt¥%V|ÏׯÉgvâ¶Åu¸Áv\Ù¡ílÕsó Ï¦o~Ê姘1£[ 8pM‹u€y9aÈé©îý²AªGû›’ç|blC˜ì¿ÓƒgºY ¹HýL³áΛÉGâçOzÐOåB…­}IÙÛÅx.ßÓêç/°z-d9®èäåƒp&¿'»„š–С UXífŠ„þ6Ò¤FÜ„‹íé#‡Ö:(ÝÅ?bÐI5eRR¥¹˜WCƒlÕ Á°ç{Y“Zßô–Ã~õ=  ?Í`޼æmª§ãá0S,ó}DKÍ6PnŽP‘4‚s¥x¥Î¶í͘›ë@4úz:Ö·¯fÞ­k••º™wÑvgo“amº¹:£¥ªœÿ* ¥yx•.ZBÍ#ÓØ‚èLsä£Sþ£3R/¿SŒÝV#¦·'|À@¹ÖKþ³—¤ë¸V?s&2„=¸¨:¡ø.WVoà{{ø¬Á6Äê»=„'˜pµÍ¸iÑQ}fäš:iòZUô­¸Eä Us”™åkº¢ˆf³lRxDæ.“8‰ÚÇû”ZŒhÅw´û‚*æH.V\úY|ÐihvëÜcVÅ`­ÌýæÔ °ä#ç”ÄÅ›H:KKÏÃlñÚß?§Ç!Œâ×j³õB¨<…‡m®Ç\Ñ6<ÓmíÃ(Ç=kIyCiœSvI J°ú$ÚCج ጔANHé.•a殥ðX¶m¢·Ð¡ÞÊÙBf]™¥‚;¸ØÜ{ɦzãךIÕÉ{º2G~ò€Ægùs)‰Ö¸±V.ôZè·”ÇÙfÂDè€uÈÈœLñ•w`#(ó¦#®.` ª›ŽÝ)5“vÑŸ‰F”ºg×ÊæÃœ‹¯é¥),u}Eî‰ó9#ÀlBü»‚ÿ{‡ékÂ-ËÉ€µÍX¡F)·4åã‡-÷qm aÛ´o²áÿ%þrLΦ(d7±0ì'”ahÁvÅí\]uÚg~ªŽ5R9-K–_Ðâ~çË üËXgªÄ3É{Q<Ôäã´B!s3¦ÂNïÅ2êkiwMg¹`´WO^’Jf±Áf“°§ ÚP/­›žþFÆmhÛæÃâVÍKX×Ñ87öãY"”r¾ÔX8ò„í GŠšºTÆ&ò©?mgöáWë(T' ka“ˆ—S1øíè F Ò—ÊkCåõ/üÀd—,Ùa=ü¯NG;W=ôÕš×8C—dÉ+«âëC1æ¢𜠠/:œ\WIÜÿ‘Ú ÿŸSc¿â߯êq@(zt½Qj£9Î Nƒ&#Lx²ñ(ûËþÓyúª N €,b>U«†c˜P[tÒdÔFi°eúóKãž&öå¶¡««GáÐ.E¥ Á3²}‰Z³ï£Úšïœ¯¡…ePD,7™!´t¨£½d¥$[í 'ØcÔyh̨ɫi¢=VÈ-*£aßÒoôô›xÛphª;'¡kÃ">-ú2ù 2Xg[ȬÐoX¸ØžÔªÜû²¥(á!ÎÛB€h*û›‡ø`¤Jd];âiÖ[yq;§Ú“l«z¸_…KØÝ÷â¯$wçP*ÿžiô‘u#_P;jÛÑXøm©£ ß™áKIÍþãN.m²³ÝG¥Ú¨uCŠ~i¡D!mYŠÉÅ>±î˜ÎQß½ŒoÏÀi3~Ù'2§œPÑsõLÜ%á“ñé0uw¤v÷·)–Ii¥j»Ö¯Ý*]çNžaD(½ðššRµxÖkßï¿Á´†×I°O•’·‘?Ú5µU´ .´Âñüv8GÂÑ |Ó±‹³ã_órA¾­é‰Ã÷Þ2âS¿°óQÚ«Á™TO5Þ‚ÌNȽ’†¿ÇU‡,3€ÆÅÈÍŸÇÉÝ(›œÏ™?Öö†’…VCeÏÛ[b©áDtãWfrzAÃcÏP”,ã -føU%Þ¼ËG™üG?HO®2º#Ó/}:N{Ð-ÁxÊšë_[J¸/Qƒs€_ÀDÐþÜÒz.=ÔòöšÏa˜Ï8Ño –îX. Ü}üžh³@ré(lëì2·Ÿ4ž®Ï4*7­ìWf³š2þ*…³ˆ ÔÁ"V\%,8:Ã䂵N"“«¦Yåß~KTÄ`"š˜7á·\i¢òŸXv¨“Ñúp¥ë„s¸J°2À­Ãfµ”^©¥ŽÔ§Pö×v«Q•g³2èiU.h9Õvî ðEÕ…#£ï%@Lg1 µoS…r_˜Yˆþ>ÿR–j­¥™…»•;FXA¼½ ê¶Š,2ö(aæ'8\4¦ö.èéÑβ‘„{âXDú| 0@<ÀÛrûÓ$ÆŸ†ÞB2£NÍ£±ïóVÊý?]O¾1 N~Aá:Ùëf1…âœnª±ÏGÙ…û  oüX7³¹tï¶ ùeUW*]¬Ð>Y¹è¾îàðà³ìº± Ang‰j¾ëýSþi¢ýf*_éé¯B(•Ý:¦4wÕØ2¯n{ÿ>™N ä~ÇíCàD8Oß÷|ˆ0¼‘âÈnŠ–ô¬ÈàüJìGt¬`þ´–ؘ\« ا-qŒ–ò._:¢;û¬ý‹g…›kñ"ÿrþ‹8û¼Ô?«éÎu4òhš3Œ°¥Ì®µC™¡ªðœß9½ iÞ‹E#Ž VCGYdkò훯ƒõ™Íäm€‡”íng–¸=”Ã}À Z–³›Î%OžX”FódîbžWǦÝiši@±ìРTÀMIMœìGJlJMoÉU™w·o]\ÄgQ>bv2±˜IN~cÉÐê4£t'àQУ¸z"ÃήìÐû_£R&V„½Hõý〛p#õÌZÍÎp0èÂÞ…X+úq%mŒî"ô@»a„{$SI« 0oŒE-˪)Û ñÈ'FÖL¹¥¢!Ïl+é…rñ‚LJkàY¸¬eêòÎãÎÙ+Æ0°Ù™ç‡‚]μ؃šU.mé-}ºE™8GO‘/eœ"@¼ŽÊT¸¦¹3²øý^†ÓÛ³#fyyÌÙߪòk$LïâH|8ä{ó  ‡—ê1{¦5¬ÞÎ`-FT2‹šgødvëê\Šf´‰i×H £Fb}GÞ¿í¯'lrÒAÚŠ%)ÚýÝHÅ–ÑŸ¾ - Žâ±Ãk›`ïkfJìaHÿÀÌ 7¹—å1¿¦}‘|ÿLü)‡‡ñÈÈn~â–j† Gù…±ª¤§’ë%Û/w´÷ÔUpF÷[ÂCò­»*§³ ýwç*}ðß%¥É‚IÞ ÁÑ ²_Ìs7øfòUw9 ¿!5bp/Œ<~²Ž&B%zp¿ ›m@òÊp~¹ŠL )ãNl‘ø†Û$íyb÷ff`2Z¨&sƒù® ^-túÖï³øŽ0ˆ6ÝWºÇÜG?wëµù 'yùâçJ‡ÖìÅ8;åÜš¡:ît­Â°ø)@]¿7 KéèðeS}VIÙY÷—Ê }½T<©eÏç@Ûý³mÜàÅvÕõo9Ž×ˆtŒù@R(Î!Õíj‘)ÜXÅh²H>ÀYìòè';.}+Mcšo‹ö}ðŸ2‡y¨ ±—Ô8pÃ6+(úÆ÷FI¦±íìwðyÁkô'ø9³ÕBháûØ?ò[u‘°šW†5¯ó†3Š¥Án66•Y² µ™êoɺ‘]놤i¤v sâ~EÍßOø¾S5êQ´6:ésI²™Å.3½ÅiŽ}³Ÿ_åôIbcŽi®Ð )5n<ÂØ¸à¬œ%QZ¿ºC8“DAä8FUY$†*öŸ‚€~ÄÊ9úz¿Î¾Úpƒ9Ü _âl£> %Š.û¬‚c7yÐB¤rU1]3ÆÇ3äÇÞ ŸJØnšÚß‘²eU±;»@ ±ðÙvºLè„É~JiØÑ™õ+¨5¹K"éoÜÀÀæªSÃ/sÍL!YåÕÌà þ ÜÐQÔNSѹ/]Œ¶¡•NÏqbóÚ:0å©Y&€,Ò8Rªs60öùÆ[~/x¿þŠÅʪÐ?ÆÈjS7Š…9´XsfÔ,ü¶`^å9RD}|iVØËÍߌ¨y/ ™ëk4`,9)«“_ÿìxÿ†VXû¤)ÃŒI@÷p=åbmø”º ݺœú-”ðR·äî~’AuÕX YßüÿØ@qf$þ~t¨`žáßæÛ(h5»÷ Bv”ØÀš°ç›³ÞöEŸù…‰r˜€"ñÇqzdÃÑ3n5I﨩–ûÚ6;½ævôÁЧt‘P­Ô æãõkCEDâ&“ø¨Ôè«Ã€\ßàgoöÚ€v•Ý‚ãU诋CùËÏmVO© | ªŸÍÖ¤¾H:Î\šS»ÃQz EIÓWõn:!ŽxiGÁüs‡ª ˳B€Ëémq f&Š‘hÑ»lOøµm¶Ù•Œ@Oü¢×tæ’ö1Eà Æÿ×Ã’' " æ=«¾gël/b¥ýTƒ²ÞÕ6˸ W?M&t>e/è6·  òºítäÜR¨%g_6ç‘WdÍÌýnO‘å;×2Öè\@Ô«ÿ¸ƒzqß²køt¼‹•ï?Csòý.ؘ¯»‚"Öf7vtĪSÉ»'¼g§'¯¯0[º½^ïI„ŠeSëwt+wÝCtàZ\S]JNì¤i¿c#Ý}u 8‘L£·<{Œ8ÂïíÛt™±6D’±KQÍœz±>)ÆŽ2w:ÓVš=ÏŠƒ7V]ý?½Ë»÷ýØnw¯Ã¤æÏÇæDÑðâ3u¨Åm¼½µ´]p¸›ý@iìDå §]Mµ€‚xþA¿Òàm_m"\aϦ—Ä`Ë^œ<è3,ò;ò³—?Á›f=W ŠÅÜ ø–$ÑK¦£C¿ò},Ѻÿ2ñfX}"ª ¿Þ[(ó_±ôÞeXÝ—K Àì¡Ú÷mºÇŠ\ «ñXoµAañ3³ö,H‡Â‰úï“~ýÍ×?0žÐjè’³œdŽ!‰³|£^Ò_a•2>:ÚÚ’Žh’oa½ðk9µz€zx¥Wö€yÎ…à“EË£Mb•xš’Ó7l‡ßX­dŽr¾6FÀƒ•ƒ‘µZŠQd&Y¦ög¡„âçaÁŸÜÝ—¥1’ÌKVÜ/tý+å×=µ\k€aÍ®“*àô¿Ù b襉˜Ãt\…ÖbÓõ±>d+¹{°kýIdh­¹š"cטfi†ÙM¸:v½½ZØ&v}”[ø¥ÈWèÿå?`1-VŽ“­tؘlî ‰›ªm]¼ëa™É¡ÙäèýI¨ÐwQˆÖà+Īìü'÷q"æäKüzMÄŠ"F ¨üÑ,ÃKU÷ìfÕ¼ü’»ù2`aå!ßõ!e‚4bÒ JíÊÛØ)eç ·ã a"–÷Lí‹òç‚¢u}WÉ¡'÷Þ32?Âá™ Z׊Âö/œóγ14W¦‰ØŽzÅ ÑÉŒM³hC„?`°oêAÝŠÃŒv½‘D€¸Ðwseí'û઺~¶'Þ~3ˆ•xw)*}lÙé—´RNJÙl¾oÎèRIÈèÂ{ýZѵ„ìúÈý÷z0zýå:ì+;Ú¨ÜWfÛª{ÉœÁº<ðMØü'"â9NÙ%°÷à‹”“Ö¾/wió8/(42ƒB~ê™ ¿dÞ_ù”Ê8jÒÍ4ßË©ÿ54`¤írÖv½0wù¹*#Cüléò¾<âü‚“'¸íåÃfÿ¬Ö UŽr?~A*מ܌ÿMivùÐ 4±ó¤ÑR„´;;u o¥„¢¹KÀã&i”zY¡(Ã.›ø|ƒ(z>Ç_«¡ñŒÿÁNˆïÅV†êód:Òµ”1fÒàwžë\µaÒ(…÷L§ÿŠ$¹ájÖ´ó´ ¨¡Ã«§‡ñ®EyÎ ™ÇÝÀ‹47¶È‹CNpÏ¿ɾ’•Ç.ÿêëEœB7Šú¨bxÃ/ϹÅÂCÈ_¿b¹ñn¦™'>TSE"¬FTCN Ú<&šOºÚ¾ÞÐIa¶Nº¶Î䕉»¤¾OSkýCr$G`¾åŽØ»Z¾MêA˜b/p¬ Ü~žß¬?±Ç4!²¹ûÈ@w¹Y1aI Æa¨gÀ$ͧì üÝ®—ƒF¦T\x°<;J²‚.þ͇4-qòaSá)Àž\½¦t”a>õT°jŠš{¶9:fñîa‚~-Cœ>>,ûti’Üî¯ —j°½Ó׿ Ìõbk €{="(‡u§Ò¡}ùþFu»•!gØSÕD­‹Í Û$à¼È@P9¬ mÒùêli9î¦'ög™`FY=-ôXn…ò]‹êÊûÖk1»Án cö! >’Ký6%u‡óQØ¢ÕS…§,VàAX½;šˆÎÊU¼ØY&1ì.Zj@Ôô|•O/ȼM)ÒF·&7]ÏGç–Á!ÁuˆFá¹ýñZ± å¸Àœ/â%€â¨ÔÅÔ‡Ôã’ã#' iéSúÖ×BfÉKYS]õ"]߇â1¬&>¸Ë¿ѵøÙ}ˆ&øñõþ;öó@÷HŽ-ÐqÚœt„è}£ÀÅ(\MY~A%œÊIgžÞØ(Ò«XGÆÀáErXÞLLÓ NÊZp:8ÍjÞ¯¸;ò—% –Yá{ çRÊÖów‡`N†æÁ>zó"øÁX\ ªÇ!X˜ž\N¼ØÄ³û&pá0þî>ìD€l©qÚ€êõ”$”²5 ¼S½ ou¦F7 -•W ²¿+h[Iðù„ÂVqÁ¿GX×<Ïu@ŽÇ«J:Kq°±ë¼Á*ûó‹hÄÉo ûB £ámçð=äÄÀØ Ö¨Ïá¹-ÑäÒ0ñÃÎï6‚.À¶„.…ûÔÊ‚/;HnëfZqÀv'ÉR}D¾~m{+i.Å>4ñyðî6ƒ8\>ϣ̋½9M÷ô"àð°DÐe ×¶›¯X-× ¼q‡q¿i ¤M¹ dªë«a¡ÌÅí*Òãéž›ÇíFLÇ{©FEýÞÖâ¡«#éWª¬ãTù¸ê*N9úª±2·"Ë ÜöÙ‚!f»€±½ƒ÷\j޵¼Ã=à†éeFÙ—hd¯,›¸}›‘*•â[ ¥‚¬^ÄhÃ~z(‘m)ÝG—S;—ԯѵ ”E2Qn*fæK¿Ì‡UUÎÝ¡ásvaAiIÞ-Œ!i1»Í •`ÁäM]—!›‘‚ý“M.;‘3É'£XOÊɪϡ‘NöV&a!áî+4q–¬Øù¿“ýY~¶7O ”y—ÃÊdôJ„(Zoh¶ø|Û±DüóôyÌ`|ä( {½Ÿg(Ð]DÙºèwú*åo|:Å훀¤Þ»)Ïòfÿ%ùêWÄ媮½Yú‘¥%u­ »«Gæk5$zd5@”©ƒw Ê2ýÛ’~›Í:\¨µ3¡m™ZõtŽHØ»eêáT˜ü±åüU®J»qVN‚øM£5ŽÁm=Û­xô\q4ô$÷pÂßaN]:ÇLƒç Ñ ‰D®*“M=‹Nø¸ ïó×M[:ÏiT/Ñ8ÒC+dûÛÄ|ÍüîãùÚÊþ‰ÛÌp 2’ÃO:‹Êǽ© Ey$ó×!Å®¬Ä•Ê,~ 7g!DŽ Ïx÷õæÎ@HÞ1oŒ;˜ÌK±:ÏTý.Žq¾¼§#M1Ö¯3™·²o‘ÔGÄœ—:VyÇ€öS2ÌšrOÍŸ=b/¾Z oDÇ­h«Ä(Œ±Íjº_ÓQÜ6¡CôŽ­NÂ¥½÷úLî»å¦ÐE©3c«Ø÷u÷‚æ`H$¶P€0ø%3ÙÚ.sx×úÀ3‹ü²¡÷Mÿ¼Í±ìó-÷ó. Ý–P¿UºôO“G—Ó¹¿‹Ì§|<ýñ»/GÁ4o½Ž?¯³Ä¢<‚­4îEÿ‹ ¼6B9Ÿá®œ‘ßdêû%º’ÓXmÅ´,7‹@Æw¬4¢i“ú) ®x•2p´tºk²ñ¶¨2ÓX퉰çí0O…ú‘õf™(>gÍæÅÇ^oó˜q˜~ÿï_ 0pR‘ýÂÿän{ö‚°úÂèP¹õ(DfytYŠšÆ Õñ‘'ê‰è¾_VB?J*Ë Û8~±W Ž÷ìuÊöT 0¾UªùUeˆ„öóaˆ²KÂjŽ4ýèä‰ã£¹ÈqË/Š:+“§§¿k˜®’ËÊ^ñá‰0=à²gsLšþóáQc¹qù}؈þ{ËÎ)èã‡O®Õž¡§?$Bw†ÝZ þ ”¯NîË=…F„9[u‰ëpÒÊÜtv—_ÈwŸA¶‰%Úïâ'˘ÚGÁ+úÞÆ·Î¶ß¦5-jChÄž —§^t>Üó_Ë//µö¡ð‡9[2‚†ž#C6/Ûîwe÷¨VðñÞRÂø|ëmðWpî´Ú,)‰d¶mÉh ’ºG ±ëUw±D"@uPnvSDä‡*WWÃa!ºcçTl‹Ý›ÖòQ5xl3³WI7Ó—ó%$0­N‹,±0Sâü%Ô·0û7¤§Hû>Øiâ\Æ\‚@"c>tâì?ŸÊÞxõCå¹Ñøœn±ÝŒ~áç%"ó›¢ÃS\Ÿæàïí;KT…²º”üs^2â‚Yn°±³{t¥}#q9è·(èþá|ø5¡x]W¹ØEá6Z…Nâí³ú'Ò=Åú:°a+ŒPÇ‹õ›q[z_6ƒòÏì3˜ö-ÿJ#ÁaÂÀ©7¼ß»%ƒ/9î„@λ-N&ó°TÁ_^T b:n¤š§9h`ÀþÏæF²¡‹R­ˆQØÏåI/ó¶¤m¦!À¢>ˆàeØ_þ8å›`bwÓÞƒÓº_ –gRH¬zœX¯JˆŒnxUw,_CÑhŒÚ.åÌ*詹r9jèU ©Bï^™"ðSÔ}´ÎÖE Ä/ÖÔú—*mHé ­P¤ÅIðüükŒNÈGSr*²ÉŠø¹t·n>WåRÝH["³·³™òÔ~¥#ÝgÒ˜Ê÷ ÿû‹ýŒ7¸ ²éágMëq,]±oªÆMÄP¢¾]z&“ß?«‹'Ëu³¼B=rG 4[Y•ñ$›ÚƒŽZ4?Kü$Q]7Í…¹6ËFÁ\~ìlï¢Ê=/?Q±‘Ð÷¿ÀÑ]û¿žú;ˆ?œàÎèÛÓ~âä1ÊO‚ÅWÕ°“M‹Ãråž¼‰NoOBmC ¯ \ðüe·ÈBHÈvþ2eôë‰wá=7±u´G˜•Öx× *õ¡‰pã.üŒTþ橲ý±]õ‰ ³Xó³tF"WëÊXdÌzáMÓñùÕ´Y?-à ÛýbTFíèÁàœ· oaùÎȇº s"Á/[ŠËˆ:NµŠø[ÌoКÄM\TÝŽÂÕá1–B‰#íÙüÆOï^Ól«°ˆˆ`0Û첫ãÏÆ„pb¯v–<»Ý"0PÆÛ 꺫PÈæ1¿†Aì_ŠŸ®ê»”4sÞÀ€ÚÉú€ñ»£` qÚ­ë} NM:NB û ì]ƒ˜…Š@†1Ÿ,â ‹ÁHƒÂ‡Ùæ¼Dô¯ßÎàMás©¹žóúCšõqUò~®ˆ-ÈBÃÕÔk¼çS—½Gy B¬e!P …:xFø2½À5œÈ°u×ãÏë€j~ΑÃ3W(‚S±ÀX—¨5Hó{‡Üî”ÅüWyÚW ˜ž?¥>’G2h»ŸðЛҩuÞ2ai£o!«’èÑ °x»1)ð|@ViÑœÎ)o "£khaÍzöaA­¨b€>jwpD„#ÄÅVÛeŸSÕÉÕÞ'÷©Ù]šaWóªŒðX¥šõÌe-³Ú›ÃØË‡LÌ^‹â¬øŒŸó¡«Àa»ÿ„±ø¼€”61&uS=œŠ-@«!îí£Aƒ¥ Ûcg j^ÍÕŸ[‡ {ÈOããHgʺ­â¥z<é6&FÔ÷ïê²6n+c¢Ô3?_g¦¯j"U?zO–9 N½hOÑㇲõ…–)…iW%Êr ƒµ|ûWWRûØÙ´ìÝ…b;“”™HN}ÖQ$çËšÙ’³ $õHJáM®l~,^µö½eËõŒl»I¶Ù…² )¹’ñš±!`Xd§,~jJLïí£8:•Äd£tMB&IFš£NèQæÜ–ðOâxÞ Èêžs¢ú¦ dûv{DÁn;!v·UHZˆ2'z`q¸ì‰]%Ž’R›æåù’¡á4Ö^¤½?ú¿¢¿n,lY¯£ œLW—®ÀÎäàë㧉v´¤užxŠô¹Wl¿íÖ0׸;+h^Á÷æß ipÁ­Ó£¬ ™k1j>Î¥ï)¼«KÈ-íÚï3¼¡ú–àõú«Íše‹><УïÆ~É…ªüwÒiÄöeÁ9ËÇÅê>­†Žò6û"ÏQFXñƒŠ…à\£ñuôwW‡d®U–k–Q‰›0,š3»Á ‡èýq°ÊËpŒí¯[Òa`жf©[êýXýé|Är!ä³}6ÕÚ °«y¬ã¬Ãî“h §t¦­!-/:xß'%í½¦ÎDRA$0õ‡MY!¦ð. çÔjvöˆyÂ+‡%WÛ%îrwûKa‚§*—¬|·œì€|ºGÙ ‹n,¸ä Þ‹ÆVL£\ñ¥‰”=-¡éÄ¶æ ­ê§WÀ‰ÜcÍ$­‰$·Ûa:<ç f¡†ù¹Ðé/Ž,U›3ËGC°N¬øÀê}¥U¶R$¸³¨¬Ù–²Ñ‰hÑÅi¢ð5Pë‚wL<_²U7ÿf† &¿ãתƒÌ“%²—­nñw¥²aøNÈÖ«sýrþ2%Edr-8…ÉW—ŽB÷Ü"cÞªå58»·ÊH¹],.{¥® d£‡3¨ôý&šYœÇRÞIˆÊTH¹`¡Hn"Ò¤_«e᎘_^cÂÜ~&kRà¿Ä®rrö¼"V°°í_· bì äo§•¿çÙg¥x'Ò¯:fuÒRy“¼´ð>èÇF˜´®Èþ·×qGB<Ö2äM§ä±á’›ãB¤Ï­ôpû¥µ–̤4$èÈaݦTªDé¦çøâ-ä]§Ì©ó‡b ZòWF_¿§ÒåK&BÑhŽƒé*fzÇŠ…:Ñ•üï{G ÃÚ!¯û¡…B] \O:R¼©Í¢&Y5ný *j¡Q? Á¤ç¾ØWub–­ÚçYU`™CBu I¥i¡Óì¢d‡_¸­ͳ¿ç}ÂAß1<\~züä+Ãù½GH°­‰¥Y÷îQ‘±Hƒ…û´d‚YCM/Áò°¸C½;÷@ºSºwŽªþ2£©£;AÈóBpwžÎäP3³*ÝÏþŒ—w«Ó2%üsÀ5eïIUÿŽŽrÇVÏc‡®ÆÔr”ÝýîUÔ NfiT;KÀËS9l×¼Zå;ìšàÓšò㉿¨ÇÍ|—‚9»„ªD|3+Š:q\i}ç YI[…¯ÿ¬pOï39øh¬ýnT×0Üélõóºâ¢@#½ò$驨ü?õ°fuè=Ê—ÕRdŽàJMªöö»Êq²¾söKJõpö{ÐÚšš‹"Ÿº/NËdˆêó¥6ȃ÷"¹_5E1oÔZ$ìë†Ë@&…ØÉêÇ.‡Å瘧âÑý øäôüºòq4³U&€z Û5 ‰½\êë|ðò(¡‡âˆ‰Àôvû¬¼—Þã_n²éo¿úžC<¾‰á®*åòé*ñ¥rÂ)Ťæxt_X™q—r|;ý+òÑß3•t"ko}¢à‘êî ¸8LBASÓÎUO÷p0še¼KâVb;ƺäµL`î ¹çDÒ‡+êYþŽ„ÔÊo§ÒHe ¿o¶¨uAbX¹jÞTwÖŸœ»ù™ Gª„Š‡Ë€Ú­B¯°¼Þ›Á_À†Eð sÝvW8Ï4‡¼Œ’±TŒ'ÿsÝÒqjK…Œä™ÏÖ ÔºR †8{öDç-ש¨ªõïæGNA÷t¥ïTôð«c,JþgØàu¶š9í±„ža5åÐ%ííÂ?‹zê×Xì )úŽÀ-@ß]mÝé°«„Çü‡vžÝ©J(¡Ð¶Ž•Åì¿®l×IKË–ïÚºMïÇ,ãIˆAdû<Ø™}®9¨ ”R‹*æR®Ì\…F?½:ìÓ:`ÿšžÅöTˆÎ/§;R&xϨf™…LœÆ`ô½¡›^[æüVÆÙþ“8½ ãY†ŠÈ«s³†·ÍOIF:eøµ•ê›­=¥ŽwïLcqµÔ‹_)»„ëž},ác¡*8ICbÚšU¿éÇ…ÖÝjÈd’]5dýlƒ„²¦mÓü[ßé"ÌûZA©­×U:^Sñá8JBÇ‚I}f‚W;Õ.öÈ'}݈Rù¿ a÷‹&§“Lp\gÎòÂAH `‰Êà;FÓ6ŸÄaFßÝiVERÎÔlKº‚‚¨–½ó¹"¤Þ !_–š(PLštõÈ1EƒÊ|ãòEâ¨õvtJÃ=A°GUç-ÿ|êkõh Hî©m×ÑŶ¬5– ƒ 7%/&Òþ þ‘¸ƒ©®óE!5û¼Qää ½•¹Hy’i¿Ÿ QƵâÇùì„ø‰JòdÙ¨>5ÿ4‰¤“/gé=uÁAáTC:¯{cªƒ˜ÉÑ‹îAÉ6NZ Õõ+Ȭ„[Š­(H²™¨õ0bÒÚņÀtÌTd¢ùeÂÅ¥ÖÌн‡v’sn††ê˜œéµ‡t¶Ëh?qš<¹ŽòØ|©-8¹öê)KÇN\G,Nˆ¢X>A&âÈŸÔ”·X½•c‹NПnÓÊ’Ĕ-ÿT;÷w½ŸYŽàs1ð]5‚ˆÎS³³¥Fÿño5š»èå>.²NDbܬÀs+´þéâëËÒ]Eœw¬ÿ ÔM›&_AÜdîlà—/Ê–ôVo }«·w£µèÛæÐA£ÎiÍÑü,߉H‡Í„Û´± M6{ñ‹n¦¶å¡U=µ^e¼PlþF- ƒ<çÝ·ó¹ìœõ·:>e:*œ‡ä' Qõˈ‹Ù}FN)/ßy ?… Ýõ44ò6H¾o9æR9ÀÖ$P_È´Ûht©ÚbeærBñ” æÝhÿÕ91‹¡¦¶ü¼r¾\atAˆÅ¾¾U¢LU¦„”±CÝvçE›•)‚x`Y+â²²¿‘õ˜¿ï¨J£ŠµHù솎YEœ¾X yù²Üzp‹ìobð¶\çcR›­&m9b&6d}ÿÙL2¾PV³Ïš~QÂ? ¶¦ ؘÜ+’¥âÛoŽTcû:qa8QW<. ³œF‹úZü.Ow]_Æ3”"4"à7åÇ~â‰OÔUÊ}V=À¥y8²Q<äÿÞNÏâUÊðý›ƒ*ßYÖ“¤C¥Ú…œóæ*Çr¾2Ê-ŒâÊ5ž7Åbßb›x·G Ó.ü5•õSŸ)ÊóÕÄNúãÔÅÓ—5>- û~⹄§RËP™˜‡héï¡ðD†Õ³D$x¹—÷KÉöÊÐ_—AÉíêÄ\xsÄAÈäù±ãÛ”ù[Ç©&‚…ŠÞW{±åÊa}y%ijÒlíâN‚²ãЈE;T_?‰âLµ±7BdõëIëçvà¦XyðùëßK†¢B³‰*ZvjêuH}If«önxîóÕD@¶ÃbP”ÁÆAÀéá뙃xzW$mo ¡ »ŒØïžO*Ñ{ŠR&gÎ]ÃwN+~ža¢’ØØ%o'ð ^bצÁ¥ÐÞˆšb5,bêæ-ë»hþlH<ã¼/Jb<¡ŽÆø£Âý£,Ÿ³_«ùØöoJ%R%£ ܺúñŠif›Ú öïkI_îýÄ6ƒ>‹ÓŸì¦O ëy´,"§Ù´ÐVü‡;ÑÓ®SpŒ™4Cª«|©¾„è|å¤á¥ µŽ'2£¶Zš`c.œUA–vÁ+hJ!Y$˜ÜâªöãÊñ¸æÙ£ìí)5Ö#+öá-ÎxþMÕ¡8êñõDd’·”ߊ¢@'Â8è³Ph pG¹| [Ê=ª\·Íp¤ÙyTK»KdŽ]ØÚ X}_:&­9ï`â´Xq½6¹£BâJUT×µÙ≱6-R…¯™@ˆÖ‹»³ãÃVÜÁš›qÉäð¡¨<{5êRñ5¿ßrXK’--ˆé…T¢ú,!&•²Û˜Ý¾Ðk¢ùCj]òø ÖváÆ¿˜K;þTíé%#d‰tâÏÈJ…âÒÇËŠ›ãùŒÑj.´@jwzªSäòJWÅâ#ó’x  M‰P!2ƒ‰™†›uBvÿ±5_ãÁ½ÁtÍ2a|©Ò \E°¤™úµÂ1èy·ª»ä1ÇœˆG„§1Fs£Ö²‘†¯{{cE¼Cú{5K;ÈŠÓŽî\Ä"MÄT÷[cE i&íá7dü÷PfD?:öÚ/“#Ò¨¿ :roSøˆ öpgJ¿Å×·º)<â)CE“è\…ÏÎír쨑½˜©ýïÆ å½ÿÖÆòÚ­Vy÷bvn˜tÀeNýŠ}<•˜…8ɼÉÕKºÍÐÀ¢Ÿ¨ù} Õulß3 nÁõ¥›hg,\ò êm¢Í¢ª„8Òv^ûZFö;¸ö”¶‡'73ƒ 'XÀ}ò±Ee—Òó“!€uÊÍ,äzƒÖ ‘lYn‘Ù¦J«‹e­Õ¤kþµm˜Ñ Gñ=Ö¥`ý]‡ûq*¿b&f*B^–øì#ÖíÆ†n‰"±æôÞfÐ:‡ì;³¯o¨Y$y‰ìøŒØü÷bð½Ÿá—­ñìù‡Ý¼c*|–I¿Ûˆ}8Û½,hñè x@g×ÍÞÅy¤é~yzÏl'[¯…ìTsun“@ B¹—Ë¿œV/+ôdRç¥(Âm;ÔâÔ¦ÎÚòX­ $–¬¥èá>]ú ЬK;w„1á':ßV‚ÓðƤñÒ¤C`;*·ÕÀšj„Rðz³6ïÝoá^k vðŽ-%¤Þ9=3øM’›—æÀÅ•ÙÉ*¦wo'7(uZ~ƒk ¨¡Ûts~ʬ€#Rû]6QÿŒ›¬‹uÄ$0:U3¼¬ïcÞ>ß5”@šIƒ|¥‹Tj(Ë a@¦ ËýeMZ ÒWó@U¤k"}÷Ùç³´+^<~CB’]ÏnàÒÆ#u$ùóGi½f_=ª*5öÙf¤)¨mþ39Œ½©.ú•L½Ž¾"Ê¿C]*Ê.ß3ÝWø¾BÙd›é&^mm޿Ѱ‹ »‚`׊K*×¹biŒ®«ˆ³¢¯µ2È¡s.1ïCMIŒXØ"X« %ø ïGW?vÖE~dŸ¦YW¬:ñ¡lY¡n%Ÿ4‘=äýtHæïu\[WìLRxÒ>seûœ„„:ùNÐüóÊ–2í¶ª½¥í8}«;ðû¦îäŸd2u — ²|6€c3~Ѩàêw¸3qy«*ðMí¹Œ£]d'ÃÇMx]n#¢r]Š -UÒ%GùÕŠ\"îŽÈsuBÆÓ5RĨìŠÑ´@GÕ TTûZzß7K¢æ‹¿Œ¡mZBÛ8[0ðu¦dŽ—X„ì#44ïÌÎ& Ö½Š`*¶»™ÙX=æ1Êfe½Ç.øIªŒÿuÁê(ÇBoÞ‘]ܨøH×·ø}©|ÀHq¼ì.Â×’[‰9‡.ˆBEãÜ£‰×R†)œ—Ñ1[„•ߩʶ»Ÿl°Ñ?NÅÂl;SõÜ*“3[Ó3Þ#Ï×¼”†ŸrHŒ÷m“IÞUž‡‚Ñá„‘]O:´âcåUzy‹ÇÓ§ç0:•ÙV¿2­íå|Ó¨^c–MsÛBót’5 8Æ”ÈgRüGpù'eöCtŠ Œ”™™ bw×ÕœÔ4Äò°‡ºSµ6Û<Óyr¯)˜G-ëq‘ÀËÀÓ6ÖyqI+„×?¥Y»ÿ§ë‹"cÔY(}8ͬûoýB;i <ÏCF~¤YX ß]9i‹¶¼µƒüÞm1Ëô¾î¨§kä÷Û&êÑóHXûð6¿!ý)ʬšóžL®)k•©±¥É"Ú`AA0öµlí¼üä¥ yÙà±ïÎ”è¹ Ôh°^ôÃЫ _¤% RÀ-ú\‘çáz©Ô0ä‚ЕùÚàÄÝ‘St€ä‚!}œž/®HOÛ¶Êmãj%Z%»ŠÌk‚cÚÆ÷¿¬1­E¬G}•£ZÎÁ÷Ë9D'úÚ™&TF×CQ¸”ÝRnCÀk€>¹HöÎÍ×…i¸²|¿8/®`«ÇwÏTT¯"»:ý9ýä÷3zCQ#kE6î:轄|Å*ª³AeKž-ÙN"ò<;Ü1ƒZÏø¬íЬu%iA„÷uÒ%+ñÓCYcË|骨%8`<殇ÒX+;¹ŽFa,ùžQ¹Ðiex$Èå.ËO2e=ë÷ñç^4±ç‹g!©„pP©¡´£D4ÿ¿™f¬‰h2xû`*íqk–Én ­‹Yá÷d ê6ÆŽrDuukÖƒTÀGV[Ã4’w[.i|Zl\A7мKtyøŸlùaÉ“F~!jðÚOúGm?ºá5ª#€õD}êãNºllIdO†ôÊmÝ$Hë%¤«aQ÷:"Lƒw˜O » 3$w²:'®Ì“õ•¿8…¦fÝ¡Û~XŽ*{]‡,ZúÔ´M§xoÿÅRž~¿ªÞñH ”é˜,«nÖGHV.€~¨±/õQ×¾‘®¸檇P¤Žkí‰ÎU>ßBY(qŽ•9KïcüÓu×B;{Öœy ¬‘†,“œ‡ÚT h{q³ª¨âÆÌD¸–Ê_üiåRFŠ~T?׃qÌßÈÅvlE ²ÄoY\ïÞòø£näî‡üØ}ÕXVÿ˜èÙŽrN£´‚[ËøGNl[:Õ0]pHÕöõhK €öRÌ%þÐkh“ññ òK±;5Šš`¯Eû6Åø°d"·Ñà@á撴ÁÈ©õMEЈ!VéÊbãô±ECûxí™øOx€^1W“Ʊü‰‚÷;…²‹¤¹^J>WØõœÖï8¶1eZa< ´-9žàÛª!˜bÆfÞT&¸@ïÚmGm”—’$2`5$µ*%9{,ÕMG‡Æ®¹…ÃýÌ ÒΔ_¿Õ›œîsʦåØÙç´7¯û=Ÿ´` NÄ+s¬4‚7¹>Do‡€Ñ¢6lrÓi÷2ñ1ÍiŽ×jÄ+óƒd’Õ~Åj·OcYÜÐ#àkEB轿~&ey©ê媄njOÙËÜ!8¿ÂzS?KŒÆ·åhO{"¤@MêW¬™Âßh ˆ* â Ôƒçéê¬MíÚ]7¸‰¡ò߆mÜ|‹„¸×Oçž(­ãܧP¶)õ–i3è]€Ã¯*¦I컼b᥃‘{‘KnPÂæTîþdVýY5¡Ò±MVb%‚yP†k)“Ǹn“H; }NCð@—¾‹ Fàú¡AŒ„"ØI$íUzf*ïTcâÂÚKÐè¥޳ö6=u˜gˆ¨¨²í .ñœŽtkµ¤cóòšÙ2ôœ9ݼptv$¿¡Ðþ\äÓÌ쀗̹¢v_õ'žä–±;-ûjå’ù¯{2Ùó¬ß {BMw¶fId»ïW<翺¸c¾R„±ñ«.”ƒ€‡ñ|l­ýp°Ñc-¬·yÊšQVe+ n@Ç ÎH F“Òj—µi]mí9þÓ5œ'ФØd› Ç B—ÍWi²îWk@ôœ.•d#ÅííÖiŒê„…rÛ'4m–f‰üÔÄnk%ÖAOÉ_!ɼ›¥°÷ŒHÚlþïS>ø[ÉÕOfÈ2ê2€NsOS¡½Ýª0ð:™Æ©FôÜÛ'ÂÒjÅS´‚ÊQ?,MíJ(û<«(nÒ5v±G¹PÓ±R2ž1¾‘BÅ=›ýäz2_ª¯pס|»g“¼r¤…C¬o+Äǃ54Ÿ˜ˆˆ~¹î,Ùl*Û6ד¬¸YG@àUÌ•± &Ø9MKî¤.¦ìV–’‹FK«^Æ!wK|ROy°ÛÝ¥ânørïÿ"•ûVª™à[¤+ç'=Ñxi½D£¨z‚ ê£ñM<Éža÷í‚ñ–/äýN|»4˜7¾N’Es{Û ]lõrñãM\žÝ &ò7®±Ìž É,`u‰8íè´Ú$üþåX(û`°åa|GMI69/Ð>d±Ê¢®†Â€N8EÔäÙO-ÙD6®…Må`ì”fäAP|öÏ"C]9Ñ3!\-F zFVpP0Ò*áb¼JêF\š®ð‹Ið]W%Æ‘¿{íÞ vªÕðÍ:œœéÍ&Qã'{ýœI†Ê’3;q‘’”é$ý6»wÓ¦ƒ˜œÐJýˆÓxwàhnÈbYÁJ‚øý¬Ÿ–`PëKòÔ¤„؈4_*öÂEó€ îîMǶ%lVáÑÙ~¯›Þ+éj„ÓöPeÊXÒk¬&µÅwöƒÚX&¸k¾2~ï G}Ü Â·Bʳ!¬²?aIÊ zÚ×5¯bC‰PxØ’‡d_-Sˆîf4o¾ap]9ÌýFõ+N¬ Öxú 3äÑ0{ebE…#Í"Áö9|ƒõ´û;ýIípsÆ3{ôS gSP Æ{Ó¶‡¯ˆì{awQÞ\xA¼a'¦g$]…>R¯%.îT ‹ý1ÄÕêq{¹\ÑÆZ¶yX>â÷fUCšŸ@:3A±díÈüÁ\¨D¼ ó$ž¬î&Ò´ƒ»v“¿%tJgÊa'.öˆþú匸N€QìA&T†Ð®1öØèL¾Àˆ7¿G"û³ÖUƒxpÄ÷áPzBÍÊ›HèÞ:‹³’ißuð†Øž–O~R_ÁõŸZÏØöý#oY]ߘ͈JwܦBgÔ ¤0aAeÙfüŠÅf#‹¿ÊØ‹ˆ,³Ë•.r®¯Uˆñ'™¬.^€‹5”J`Žƒ¯óÀ]`¨D"©ø'æ8ÈÇ-Š“B4zo•ß |}‚ùó#f¬è‡¿`²û—Ä‹..À¤ù·À¶ãÿî"ÜíI;žâÙwÙ‰*“°ºM¾º,n{=Ý—ƒiBjA {ö)Ê”A?ëq‹ +´¨>ô)A»Rw Z-~è׎0¶ÒÇ^·zòH½¢åøGëw ó­Äã\ÖwØ«ªõ…#;;è&·pÄR ~é‘9 ²3»™öH$!{B2 HÚvÆ9Å}š‹»Ãg„2‰=>Fkzö1²Þåñ;|±ÿžÀΜÊÞÌ îkL>ö…®î8?ënÅ…>f¢^p¡m’Eã!^^xzÆÑ"‚©XÔô©(×Ô°¶tST› 0.2Upàú(Œ\.™Nº{TsS·ún°³4?ÞÃý(-•ü×5gHÑZtΨÚw…îÑ«#;¬U`ÈOU‘Ë{µ>N~„Æ^¾ývdl_€´oH#yy:ÕtÀBÙ»ëÜÑ“X$ÕFa)ìnÞA«¹ZMÜ~m:¬fÒÊê…jÈeÝ®xXú<渚ËÒžn;_4þ̳°…|f̦foDH4©Â† ¿Ü<çy¢G.E7E½Ñùf-£é¯’¦š„¤˜Ê|ƒÝb°ð¸z\zÓ; ²çÌZ¶MÚB¿EýŒ‹ €ÔžÜþ-á Èt`oÜÃúTVª—†Ÿ— ¾í»¼+ ~d„ï€ôÜä¸ñ‘tNCo {ÜÛRkèÅvl¿¡‚¾$¦Ò4\ Úû̪š!nƒ·œ»³R› %uJ‘^ÊÆìÍvÅ: Pô­/œ£gãòT—•€0 €™ª(ΛŽ$r|õñ º÷hj‚ TC¤dgÆEÜç£AQ ­ô¿ªƒð®zûUìÞèÙI%S(]+‚µ”bîP‹Ê!±BÇxÙ¯pl…Až€·“ú ÇË¡? u7vnÊ©@¶øí=Àzv–ñ323ÝÆpœˆwŽÃiQ±i¬#€42—Ü3÷É"Wµb|í2`ñ‚‡W6þß…o6è‡i=Èéo²ÀÅ’»80Ö'}œ ¢oÑaù³öÕöý’«–`#ç×ËNk=½f "#ºMÌÿ&h©ò–îøa¼'7 °ŸÆRÆù Í)×ýë}ëšIËߤ;«…Öaƒ£W÷È7 Ç–1¸`G+tt/˜ oŽj¾vWo›!áȘe`mí¦º&pe¾q¥·âdçŽÅ\ËË(\‹öçbX±™°2W»ÐØ¿t.WbÀý…F&8›u /w«èÙKLÏ [­ˆóæÐÅHÄó=Ò›ªJ·þT"®Eë&¦÷$€Â˜ÄS‚„=R _ô8‡Ž"”)A>$ªéޤ‚‚˦½±\7íHÖÈ×[É›>‚)w0ÉjÁFšAôe³l…{ר¬HV14w€ 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/_ei_____.pfb0000664000175000017500000011121613607302650022472 0ustar rptlabrptlab00000000000000€c%!PS-AdobeFont-1.0: TimesNewRomanPS-ItalicMT 001.002 %%CreationDate: Wed Feb 3 17:59:02 1999 %%VMusage: 33490 40426 %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype %% Corporation. All Rights Reserved. %% Times New Roman is a trademark of the Monotype Corporation, registered in the %% US Patent and Trademark Office and may be registered in certain other %% jurisdictions. 11 dict begin /FontInfo 10 dict dup begin /version (001.002) readonly def /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Times New Roman PS Italic) readonly def /FamilyName (Times New Roman PS) readonly def /Weight (Roman) readonly def /isFixedPitch false def /ItalicAngle -17 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesNewRomanPS-ItalicMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44336 def /FontBBox{-191 -250 1031 868}readonly def currentdict end currentfile eexec €‹-êóPœ œh57JÐ{@ˆ¡*¾„xÓ˜ÃàÁŽù—/E- =„`oM“Ï·±r6)”åÔ@r0çõ|L˜vܵ>)o%¾ád£Î®$\ãPJ[4¹ÿ¢ÒÜk±¨ÁM<‚_U—Ýây3•)sG‚Hòˆ)-› ö ÜÚQX «lòLƒ¤æÚB¸]ÙùªO˜aSân–Ô3tgC‹¿Oú鹿¹o«vDR¦'L0…ÃaY‹äW‘ ð±êv=óŠÄ4u¦‰lYót.\Ôñ·ØÄ+K%vöó£äüÓó¯–bêŽþ Y¬º½ '3QüWýø˜$ÊZg|w‡Ð ÁWžä`»Ì±±…/ ´¼­Jë _vœÄ™±f1o‘Ji;IJãJÛœJnQëFÙ~uÛuñð[“Å´^Z?Šô\‰2bCeUšF,^¢ã}¥Ã½—bUÖÆÒŽB1NËèÔ>’îïÔ‚¸6¯Ô‹¹—/FÝ~ -õŠ<ƒH<$»H<…NÇg¿áÒ¬˜z(ü‰'‘š(ï[Yµ”²ø‹íÙ”Œvdš+É ~¿'‹m5Û‰ (ÏP—ÏC’÷ |çÆÔë Ý «Afû§’½ãÄ2’ñþÙÔù ;¡À—YÓ7ôÈ3ÑdœhE{5Ü-*¸Yò¼“Í5ó¡Á{ÌÌ×ÒîaÆ8œGF¾^emù¤m…AûÄf~áÛ2s›‚Ï…–;Ò³œÿÅШ wrQ‰âtžÄŸÄ`_ÇlËñtK]l©p2ïJ‡vuÙË.i–JðŽýêÏ|ïó^nxÒöxW…VµÚØÍXèÝ•ýÆU9SÃ+žDœËašKÂ?ÿwÈ«PதöfÎaˆ×»þ…ßÿl ÈÞ냡ܾlAðÑêzÎ^B;ÁOŽi¥*tƒ:0èoú3;çúE ^0-jN{À×ìû'È_ÒÔø$d™¹GoÁsË¿é&O@ßôæñ$}l%Ì^À ŽØ$'­Òº=£ä‘èâÌÆLÆX"´ðp¢F2ÑXmuv¤GÓ ð¹!XïK\¿îfÐ’à¼h\Þ픸†µÐ‰Ú^ö§»-\ú*¯ó÷ÐŒK.é!:'ѺΰvöÍ^ü­Ã§7¨ú lfïcéQô™À_ªÄä€ -ë1tQ`Ý·³ª\®ž¾¯Ñem{†õÇœ#µ¥fùdÌv‹¸ñ8Õ³hÙ°ýxJ<,åó9èÞêIaäÎ8KCA Å€puoË5\jésŠÏï?{vTÉS…¦dñSWì§"‹$%z+6^_¤’{ÐkîVªÚf¾Au,AªÉO”¸žm{Þ%Ù¡@ .°1’.Y1ÃA¿|ÑËZ(¢’:‘²÷~YoàK‚ªÿû°Ý §è‹ ‚¨ AÝÓ´ wŒà?°,ð;¸³»Ø¾¹dÞÜX×ÕJ»ï±¯øú?®7¬³¢*@{bÈ’Ÿüê Îá0\Õ[ŒÝÏ¥¸Ô˜ºŒ±„ã–ZÍÊÚª#Ò*a`­Y t˜å¿4’ˆ¡ã¢Fq0YƒãWF‚«Øyf\¯©\Á–œÔ×yžº Ð ­0[ê Ü?(ðÐUˆl–NW“¶ÌX¼ü|n¨­h›ƒ²ø°»ãG ÅlJnL.Eˆ\\ïÄ—œñ½MâÏ¥°TÜ¥ðÎVì’F8ò’l¾1Xƒ+Neºb¾@Æ’ùå^º j˜®{ôÒ¬_Äéq½šdÆÆ³_rùòŒS±‡ïKÀ7A#ù=%3&~`‹=Z$žQ¢ï-4«í{®÷> Ãr*'Á7 õ&ö zÿÝøäªCYrŸ£W.ïoO,$È„†=ž¢ì™ûÄõ°m³.‡’œKiOÆ‚Á؈žCI—ñ¸×r†ÄŒ\<ì* Ž‹gâ Òka^l.ÍürÀŒÌ^Ø\+[©ŽjäÙk& €9MᥞÀ ‘§“ŽwÛáM{4OÌ‚öm>U ,h½é-û Eý|P—(ıGX3‡ŠEÙBaô6ÕT=O‚é¡uÒ%Ë2^4‡;ìI`ê6Æ0o4·Y{߉I¾×‘Þ'q8Ó-W§pߣ”›ª€]|»+YvÙô~*÷µ??°'8#ÒØL…«ÉÐB‘û>r-±¾~ÜtÎpyòô±n›(ôøè¡ÀÉA苃ã1Ö ½àjàЬè¸y»¯ŒcÛj;3U^ÛD8ó›#¦5fäàp–ÒcM‚ËÿÓÔi¥cøì¥·¶•¯-¹#^sNîùA6’„íCr6AC•?#&èï7(!†Lb+7½ÿg¡‚оÍäñÂQÍ e™áP ´BKci„³ž=Ù&ÞØŒ79¦ø‰:È*„–0ݺ¡©9´E_³‹Èˆ•îu¡h¦RdŒ²Šm˜±XÚó[ &ÜKìGL"¸o›e¨\ŽÆYUˆé1x„6ÇÓ}Þ«Ñr{wIÄJ,ãqÀ®.â„ì;ñ^اcŽš²9nPÿפà?®Üê¦ÞÚtªÅÑ ö¯<9QB¦´±Å–ŽbìT‡v Rì*¹g)Ãæ Øq28äGÑ¥2,ïêÀ<®MÃ6Œ=sFÀ(MïéÁì&…·,&’OòOø¯B´ Mõø¿4g½!ûoU€+ðÛï·èÇ‚Hô»üÖ\iKPL9“kaFн›Þ÷¥j(KxØa2(`ó1¶D+XË虂{2Ø‹ÁT&Êq£pfÜê9n»½—¯X¼þ‚ F9” öó¾×Ö3ÂÁIÞÿaò’vˆ6}iÌw‚ê>ÎNÊ—µàÁ¤q³®kЫäüÞ{E¤SÍZ;»ùPgá¦ÔçiDˆ Å«†'^ŠlËû¯×¢–{›•O…2Ê ™wÜÏl'¢+G Ãò žåyå½à3&ûþÕß zë!:’TTÅEÕă ·HQ?½¢˜á/¤)X0/‘£ª¿Q{¨*‹@:8r‰ÝL8¡Ü]h@©ƒˆJåV²Ý™à³ê£éMe‰É¡DH©—`Ž2a\åή‰‡ö€bS€¤Ú¾áp£J|‘'ˆ•@ñGOÕ×4H7`t`|V@±ÂjO-%á’7n1ƒG­æîLýÒ_Twר£þµD•Ì\›Ú`sOñŸ8ÑiI»ŠUèo€+ȧåþŸºZ¨’“„Ô¥]¿~l1Fšq•™Œã:ÒÐbŞСº‹j4Í00/Äžö˜ )Ï4˜ÅNp[k.ÃÍ…ÿázBò£Ô£Îp²(X9KÿÞ2Þ„µ”œ¹#°šZ·%,tž¯ˆbȾ}%ž†»`âÕØª!Þü¤m·Mº}2[mÅdÄÒnæâ’Y1€t}lQüÖî´yN.ßÈ´‰OÛ4ȱ8„g9|RµíÛd¯ût×Q²&èâ;H»ÀŸ#!Ö¼›¢Pgu‚Ÿ ¥™[ËÆSÜn“í$"<¹ØÞ;F<µ,Ð çK©HM6ó¯rÝÔøQ}Á—Ñ űÕÌÚÏïÑëùö%bͦ.Én§à·ª’WXX‚ÞM„Ê"쎵JcR’R—Αm$Kº¡§ÂνJj´Ó,¼ÿô(Š@0jØdAµ‚ÁUO:Š…è±zIbVâ3sºEN¹ã«Áš›N8b°Ï=ðÑá7K‚’@1ˆšFô·‘[ÅEtd0©ÌÿI9j±+':EØÜÿ*xBƒŒó>¥£6yôGÿžû|iu,̰¦úXüD}àpç2†‘–§Ëj‚¿zdXãÜÏê!p"hqô¹ót ’á\r]ò•ڠȸ6QxDëæô,ÜíMtô±hp‹œ#SU-]j]³ÏDhï‹9Òc|sE‡O·Òc\2jp¯µq2áy(ßùGCgÔYP¨Îíhb@cϳã§dñ”¦ÙÄ ‹Þ•?¹ü`×é_6³N‰mAìï^¢ÇÏY(TÑÉæpKÍ7Vù€±à»`îÔF¨ÜZ‘S«¥€tó|è;Äv²6T`•ë#ó™…ùNWèlj«+â?DóK±wD¢æqJèÈV¼Ó 缂oƦ¶ÿÅl &º-½ .ã ¡§Y<Ï4MBT´#`¸€¬FÅn§¡c%L’ЕӼQ-¾ÇŸâOƒ`N•ç´ÄÃ&q–-4ô¼c”{„ Î+®Ò\0 oAtr…æ×Ûf:ïkž–ïì{ðòq޽ÍO˜:: p‘½M'OÔ+Ø[ÅÆ§¾•)¯Ô_»wb«¨o—mYIîø¶cŠÀÜLõRì*,cïVïc±¿G?>DÄß¶ÍïÁÀ!0µûG7¸™éê6mQÁ¡8¼6Í~—‚Àá!ð£K¼D Ò`˜o9½Šð´<2ÅË®¡Á)éK´WµIóeÎÓ°E>×'ˆÿ'âÖº_±–Þ5¦z~Ñ/í®nQ¢¿çÛœšs$ÔT4£Â˜Ékî3© è«ÙL¦HÄ{ 43Öâöè õ˼2Óðæ¿l Ç¢ÜegŸžªJGÌ úí¬çÄ»—gPå|‹8ÄðhßÝæˆdw9e柞<úÂFÎ{#‘, &¾ÏW†‚²–ÙñV©1†µ°a]‡ëÃA,çHôu iöß\àY@õùá8Åé±m8‚êJ*&D¾EúÇ)Št,F½¼úvån7+ݽ×éá -}Í«œVgÈÅ{nC¸Ò—1s.V‰6ƃ’éìÕŸ0°öXˆ²ƒ½,@†¯ÈÔùq×Ýe 18·Aò ãzæ±½Š(y‹ÂT_óã¿Î1r¦WG›”U¥Í|.)X|y/©çBÔ x#}‚zKiÕèhçÁCyÏwQ¢@Y· } ®+tQ® ÈÉà$Ô’(Γዪïxr_^·pó½GEbGk){DÔ,nTBCb"`QòÀŽ/"¥È<µœ‚ö[O¶X²æfd´×ù¡ìÐC_Q8ÅkÑòwžhp·ž¿ÐNbÕåh­eHU&âepQ(»ñ ŘÙ"pV£MÓZÅeŸãͬËóZµÕ;@úéct—~lÖÚ Ãó‘Þç>_ÿÒodHn7N$£DÒXV¬^Úa9GªFVèdÿÐÍ^“<Þæ$Ìã~ÝY)ÝÁÎê1u,J¸ªüYÅ?~4ùwúy‘ÃËBbÕ-¿;x–k±‘â›-ÊÔ¡ ¾¾ô[zíÕ®F»ß{¢ZéÊkxˉk§çéÏì ——¯2ìøëö5”[Q8;cò¥ùî[Á쨒âœpBî1í¢Õm?»móÒÖ.Û—$Er=X’L]§JÇÚŒ£Â`(ÎV½¿•¿öÁ”œ‹¿Ún·Ø:!bAÙe¶…s¦Äoæž\T·oM¾ŠêüœqâóiƒÑòó­‹@:-S’+X«8î¼aK&YàÛE+Ì}™ãDqOðN­E—hDúÎr™¢øû]ËìEP‘0÷I_¡­¼½àJŽWúŒKØ{C³Üæ^|icÙΨ#œï f© ,gÎéë2±YTm[Ƭ w^#yÁõÏIÌZ4GkÖöfµéŽä?( ùy[¨§] 'ÄÖ‡!Du!®ÌØFp S~éÖ³ñéù}Î -¡#ÀƺƒXh€¿¨ÄO‰ZõÒ;'&–,HXÓ*÷Nµ;g MãeŽâ{F¯4Ö×t%£ê©Bõ§F¯Eì•jÌv9?GxÏëÃÞÑA¨Ì1¦Äƒ¯ü¦—œÊ Ó„$½¢|)ªY˜Å•s1U´-ÄðÓb¸³Ìÿ¿zˆ¥& Ò+.pÅ­H”ŽLKÄ ©}8ëóÖGº]Èx‡ôJí(™®æ/±^Ö‚Áá¿ëv £c5¤Dí IÏ_âFô1 ÆC0SüÊ×§Ö…jžA5ÔÛSĽ†äN›%tt„­©ñþYÈTǹe¤6­3v  .­>‚špö|cù4ª—í] m»÷ŸõçÓ‚g`ÒÙbiꛪ [È×—DÚõÓ‚“:ã]БÑPhN fpFu ^‘gËÆAÊ!šþãwL_ gdœö(ÿú-?ï5% Þ×ÒQ¥‚ T8)J‹ÙyÐá‰ïÜEƒ)GÈÓ8õ¹­•²ó4´Wÿ0€ Þq™¾ÍP‡„žóÂXt²vÚ£mÑÖç©XçÊeË’µ‘Þ“ÊþÌãaÑåÏý³dè^°ñi—1Ï4Öɉ¦Ç`òÔ»šQ`'©óÛ3é+?V/’*‡îGG˜.2O¢ú_ÒÑžeœzRYÓÒHvŒÈèëIˆ¹Í ¬àT"5Ç>U]Œe¸t¯/ƒŸåbøëʸˆ‡¹/©ìàÆiÀ;Š¢J—"üÛ¹ºdÆþÎóŽx½¾øÜ´(CnO·¼,G ¿po»•ñòR%Vk›q ½ß·(﹚÷Qx×ìJÿìPG]µ|¸fØ3ÖIÉòÜ Ýlãɳ?oóßз”ßÕÊJÀú>¬Xé ‚–Rð3V“Ü÷Z7Æ‘ýý*¾ó­/°õGÆÇ¬âé×ìF}—;o7/¦kø|û"éD"w"Øf82N\´ÒÍŒ}+¥þÊt ¼ ÑtdC¦þªÁQß cé•Ðó£½ÂÅ•`Bšdï km¬R‚ú·C½0IÔnP>™˜êbºúu0Õwˆ„÷ÆÇŸ$œˆ±=eäü,RÎðþƒ9c’rßPÿ¾7—$€ŸÔ÷VcÛ`½7jìšc$Ë –´¬7TcÈ:¸a¹#¥ oXõ :ÖÅ ãc²Ôh-³«j’ÚaùµVòÕ!/§§ •SÖûà5PLAMÐ^·ØoI÷(,ô!ÏÉ<¾~.ê€Í{(q·`¯V¨>ÜMQç†/n>0‚?(ªyÈÆ…«YnùÂ]®pb#ú<¯qéSÜÈB«}<ñq ¼§éÞØÅÝ,?¡Ö/4h—fPàSV¬Ä&“À! a¤÷‰·=@ÌX(÷×aç{K5ÌLŽ Ë'prˆbãD\Ì U9Öˆ+ÏDzÿ€‰þU>Nn&[8.€R¸Aƒýé¦ì\î‡d O=(¿&ÃXYsÛÍxeÉCì¹Ö—dÊ Æeš» NY⣓z³‡;ºy3*E¼Ë’òõ‘Ü¥š€Àì¨%çÅñR®af?ÏžÇgÄ­6¶·´ðí&NôÆN¿Ü‚'åëFD„üÇ]¥¥g³|ÕX[Ñ aó¸ ÛRüà»Ãáä4¸t—09£ëhTŸfmç™o^rël‚鵪Ëj#Ê.™}ïQ#Pá ŠÜw™5Êà€Êd2Ùüï®p€Û÷š\D³‚÷'èý™_¿£¯‘Ið|™Oô«¾?><ØFP6±ˆ Û xN12ãõ8upö:H’™$xÖ,ôq çÑ&Êý´ATëÎ’kÀ1ejxTxÂLµ±¢ÿ¸@õâ ˆÉJ²•ŠŽ{ß‹$W*!û² ÷©—pñ;¶’6Ù^Z;ïX VŽ…ç•{[S@AS+O…± püŸäÑüÀ´xüÊk!Ý»ÂÇ]Ù¼»Ä°ìÃRÞݪ‹~,Ò/ÍòÀv×ékJ€Ÿë.™Aû/O2‹wçŠoRÉü}‰ƒíÄ®@8M-°ÒÄU5[–òÞÜz+ÒCe:eìjîW {á9`{0;Ô;Iš„íé0ÄCh“}ÐØ˜Æ8•éö¡£‰ 0äÑ®Ò,.­ÜÌÝušý¦…m4…x(`dn¿äÕ¸Óò œ&#xû3q—3ã“ó¦±÷ PÖV7–»[è‡mÃ_¢3ÚÞ é#-=B KVÇöÇdk_#"ŒñqZwHÊ‚íYç´<Éf4ݨþ΃ ÔšaÅÕŠaZ8z°Ì#=Î=økÖí¿`+ûµL!§ÎÂuD ž¯iõÍ^ŒÍJpêà7›„¹‚‡ë·—|õbòJ‹wññNf5ãÓÞÖģݰ¡y-Dfð B*ü˜ÖÂçCCm\îoN¡â¼''ëØõ§‚è´iC*±w_ó··ÙJ¢–%Bœ2 ¥©(ºÛt+;5ë8hÜ„þ>éXt˜1¢þy`È“Ç,`ÙË*¨/ T@GÐg—Åå$œw%¨u(޼³—ÎÏ;B¬¥·¤qÚ ÃÖØ¿K‘i¬xÁ}úOc;IÙdð*Ôk«Lõ›zPþþE™FÄ"ä¼µÞW8o`æHrÿ.~tt+ŽÏyði·2de%ý9²#†gucÒºìð!Zûdknk¢8t6’^˜š?ð?ëÃrw²t^€±â'ìúpp9cp>Ž+â½=ŒAµ¢BíúK¸*ùµVu0#µ“Díeâ±\I>f™\§?Š<×§qVìüóÊT:N½`žiïVlØËI µ5yÍnòïú4Øfi°_‹ÊÐoÞ–Iœ¶w:³lÏ0☶ƒ )ŸÁm礵ƒäfBrã+¿d\IÕBd_’b÷XË*6âåï‰þ…zŠÕÎËÒä!÷{ëæëW•^ï2<å2GÝl çß`gëÓ¡‘¸vb¬´3£ã$©\”–“ëyqdX$¡ú(·ËX1CRuªxœT:³rˆY>ØÞ˜2`šX­]—zSøsó;Y¨Šv姬€&UÃýÔêâ¢ð!Z’¥ÿÿ¾dà¶½æCý¸ŽŒ¥`È!ÐwÈ@9t. –Õêš@æX‹ê7D”FŸcAŸ_<€M qœÔèörÏÙæŸ¹s¥×áM ¹ £Å åÖÞ„M˜ñ­sÞÒõSêeÂÀD9¼9yܤ±AÇÚ€T;3n)bGRVNù—WU®Ã9¸Id㌫§ÞÈŸ—õfØÑ:ZÁ®Cj$9@Âo ]õ|è©åÖeô÷/ý’S\UÓû‰‰¼¬³ýS úì#GdÚâÆ4ÕZžëOkÄöp¬Š]·•¯¬C$ÌÍ®œB|êä’ÖÅGÆ-“nc/ÕIô¤(N…–%\N7Õ…âY¥Íƒ‰†"§dV¹¸|m†rÒâà BH“OÒüYÐÍ;d, ñöÖE”ÞÅs@*'¢¿]3å) –u7¥¿t’Ÿ÷•z¿=AoÉb`\EÚ³[ˆ-ÿ¹ÊÔž¤±†Šºtû‚O¾ uµðû  ‘(m»>@gc¯)C‰ãƒÖð)§'\‡”èÊï4À¦dµïcÔ`?oýh*tÚ˜§¥ÇÐy»$rŽÜ ŵYéÒÄú»_sÔ·ÛŸÚ«F#ÕP:㢞³‚L-—ãº&ˆ?:<¥[@:ׯ+mïÿw‹¬dÀ°²kƒnm¯Ý)sU«D=Ø-û|°Q€é´[¾§`Ö÷:[Fõ·ÚƒíŒI¶cK‹ß•Üsv·#J‚Ëe9LÝIj,Z¡/cë¨Ê/ÄæñÍ øìŸ+‡²°/¦ó8˜}~0ÁËüQ"5õa&'üÈ!šùÃà‰°{NBxuSq¨çã^³‘u-i1›^5›`¤ˆ1ú†²V$ê¿âKBª¿ÈxÝ»ÐØz¾¾rC©ªr"Vâ?„ ’’½ÏÝ7Jip¨¬ü³€aÆIx%`ƒŽ¸>ºæ]¾>» /èÞ¤¯Bæ…ŒF÷Z¨"ÔÍ>Å¡Ðv-ÖaæŒôˆx—ÎÌ"ätá2€ D“˜šÌŸÞÂës—uïS  ê_µïß}Mü™íô§Òš†¶.Ø%Øe'˜pʃ~Æ:Ö­ËýÁ§Em5Y+ñ¸×p Eœj@\v)4…­|øÈ`WÖoÈBTûË>“ÏúÏi?®o¯Æ´+:–òpÓÏ ZáèñR,´”=[~ª[â°Y®µÐ{õóû¹y}53W_ˆ>é:âè_°›Ò(>^æœ-®~’rR…ïC±nÌÔ­_NÕ^,Èà5×O›'û¤‚éµ–B¦„°ð€¾¸{.¤‚”GbÙìÒ ÄH‘x0Y[Í/â$ZkÊ"Æö¹™rÜu‡q÷Û‚c¨9?=™ø‚Ö³/èKˆ6Œ7ž3ÿë±»Ýâ3GQQëåa§¼Aªöv# ^æi†®nõdN+ͯÖñ-ÓJ»Åá0š\ÙÚ ¦XnjÑ1¸[ï$:[Ûl*­ëL!—–ÿZ`,ò-aÄJŽ™’>;ŸË@‰4MW³fAqTºÛîj2„éMO¦ÖÐaô1Á© Ì/Eék­Xâujéoᥧ¬õ™˜ ñ)2J€–qtAÅcœƒè—ZG˜6— µ)ûžËüý\éÞûÌà)sžÍo/~(·†õÿlz¤²µj†»Ô#òtºä:Ü<„òs5KÔzð‡Ê‘§YØæÕçƒ"5pÄh-kŒÝ2B8ň5«0¬ªcn h­ÉÍ<_©0TYå8‘ìÓà° M–¥,O<«ã ¨Úæ@S[’eÙ¡ôþÏÑ‚}·çr+e]ŠÎ;fä)áLD“yL±ùÚ³ó÷ ä›â%5ÂØ”¶žär!0=`‚“ •ìâlZû{e­v’L›»5*¼9}ºÙ»ÍAŸ u#¦¾ƒ>NUZØÂLi¯þø›slõM×¶ñîÁ[ÿ,딽ÙoÂrÿav™©”ƒ–!’ýóX…AëËiUòÙ¯Ô˜µÇ=ÎC¸Á)VóK }{éÎÚ•• ±ÐÃoó:ˆ–®ð°5%~L‡XiǬ‹ƒ]O‘¨=†-©¦yÅ‘p# Š|ØË(P}ÝwL)#ð0„–¦¥ô9<½œlqàPtéÌ6©ú@jTˆëÞ½ÂEÒ]>ÙöÀÜI/²gѲ¶î8OÕ ó2¡zÑqé$X¢…ÎòPÅÊ|aÀÓºÈrT€·M¥þl⮲ÞߘlåµhH5 Ò¨™Ä ÙĘí:»†ór.!`ž\D|sã5;÷¸Êà öm"c04Yîý+z ýÓ¥ÒöûçþÝtò@ZÆ2-&F<"ÁG0NÌ¡õ0gV1 t~1&~õ5ì9›ôªwii¬ÉP¦£ [´(#4½ù£Ë$ ”Ôô¾l IÐñ”ÄfÿÐò„w% #û•ÐD^¯²ÝÚ‚ÑtËò› NÚ¡qÇŒNôJ& &˶@ðÈÆ†‘ôù‰L”ÁÛë`ðÁÙ±×ë4ßÇEŒÒDÃìd‹â?Ü:©e!¨tÅÀíæ EyA“O“w'´Õí©O²ïƧi]–?H_ Æûè»Ç©®¬ dh_¤àeoˆö´™=S3Eîl8ß+kTÅ«Ð*k 'ÆêA^øJ¬pqG(¡ñÇC»T®õ~Š\«…]±G]}STµwÍÊM “±:žd¶àÊ Õ’t“²Ä§"9±áVÌ­¶?Þ{ä]韓3½lš”°>²@.à.SG;ºd¼æ5o›èñÀAŒÍì QÝSŒ¦2±Ú{ FWJ#?‘Å©QÎpí,îYx&Ófìò’2Rý8'a6mfR^[’.´™GЇanyè©M{µ•½í~Xnu¬”lžÑàu›6ÿÓ¯´züs,`ÿ¨ÿJÝÎ7ÜKO» ¦á¡g-V&7—r(ËðE^ ÌnÌÂæ»Î;sÚbªÐ²œM€I…žŒè‰™(,2µj£ys)W¬5áÀVhBÖ<‚§P¾›ùòt>ó®MͰÔß7Û«]ÏæjËÈ÷®Ëo¶¨GµÑ _PGhš![çü@Z¼(bOò¦Ùvt8¤ŽÇ gC.ñ> G€îp©ÉÙFïäçÍk]bKÆÕ‘lM åX¡|{ÆŒø˜þ5”›%oùe;η§¾:Óž~>/ÖN)ü²•@,·ÛÅh:ºp¡ê…ÍGí‹é{[Ç­TI>);{ëSy@,>jíH¬g[w7gÂׇÏOw ‘ªVÕÍUØÝQÕçá Õ¨4¥ Km7Ól¥|ŽxägÚY8ïÓÑÆ¿ùH"Ìï°¨ÆèôjCkYÓŒRê+Ç!PÄtø„f%Ô¹Ÿ¬:…ñ‹àˆ„ûO%­X·˜ÿ»éñäÛL2_^^#àøE­Šo·TÕÿ½È¯ðjÍØà÷¸Ô¯3óoU郩m§yþ´…œ‚ ú*¾ŒyÛç:dµÊ³#êÜ:Içw&±Åä¾ÉFÀ¶4[Íaì³wÍN9èrœÂÍ Q DupN=;¸æ$\Ɔñ—DC%"`þ#áÜqëf޲O­åTd6;²N LÂzõ³´ ï¥k¡˜òÿóK¶ŽŽ—̨¨ƒál€0 (_^_]µ‘õ«² l/5ì´Ú` ˆ˜ðL0ävÅóæü½èëz+vج ÁJO„Õnãi/g”D„ä,ãçQÿ$ÓÀWÐ&¥¸#Ú~åG„çÔ„í´É>ÐD•ß–)ö5¹ýïœñ| ë‡~1 ‚´ýøAºOƒ±U1aÅ!©/Ô¼âŠvzMîÉHXLŽ™“omVä¹|q´jQ9"ʯ}ü€K¥6(Ë ¹4lg\¸±ƒµÐнÔ'¥@Hj>ôþu×xŽ‹Šßú Bí¼»¬»n˜Dj”×Q¤‘Æi(…››×v‚l72IÉ—ÝéÔ™ðZ£³÷&vˆ\ýjà†cs¦8Œm¶ò¾/˜@s¯bçÉê«/“¤agT}Œ^¯šf'©»e)ózù‡!̱õ,7‡ýúµe×Ñ:·[ñÿn¼ÝXç8a&ÉÓ§4:,ÅrÍdãXæîq?pËóÒ ÔÕÒ„cN@ýŽÐÇþAlÔªmס1¬:šª×ÈE"HO5G‰:ÐÞæÞŽKâ2iªSîÆ<âB$³ùi ãÉê5s…=0¬ikž• Uðjüÿ¾ž I…J‘­»ÍÔQ/^N)]å·P…DZf¶¤Ú7€ôâÊs¼™Q,õ-oËÔZPÞxë’¿‚M-+0G‡‘àΛ9sWýYh]K$yrPVü¨™5EtbíÞ‹uI†"Úxtÿµ‹qPZK–ÑØÞÌåO¼Äë­åS‡žsNB'öY|YâŒÝŸ"Ý ´çWëMYo\àA Sfj˜»¡íæÃo­Žû| ÝKà%W{L6»¤‰àSoþ5@õ—ÚXÍGËe°dGFÍáÿ…÷¤™Ód§¨À‰1XìÄâCË>‡ 'è¼´êK,¬¤ß ÁK—à~ÁåN"\ï tçp2—àO§Õ¬Q‘9‰¼zøÛÍÑ>¤1Ïb¹ßo9ÒEëú @ÕYêr6M[¢2Ñý[QyçÝžHÃèáþ©$VUrYp\ šßÝáÁ†=¿þ¤†#âÆü̆o±Í ½‘èÅ3kô|~é ¶~4Ó?;)>)…TZ¡¢³hØ€z´TÖ {ɧ3d—Ø vZ f [ůJÌkñj°ùLž˜X<Ž=ãAuAÂÓµ“vS(¾*¿€Ø ÄÀøž´ÀŽD¤Q[±;Õ<}bž'ÕùceöÉdUJnš¾‘ÁƒrÏqX¥¬Šë^A¹WÚ?ªWwŸò린oêà“]º#GxºgWß †e“Z´ò—à§œ\ÂòW…ÛniX½se~¯ÇLÓ"3VmïO4³i‹ô–y„H¹0Åú ã¹Æätø ap"ì€(‡2ûšž©×Ê‚@qz¿ *îî«Â ¿OGž(Þ8ˆPñ9.ïÛñv'–iY,op©ø{e­Ç–:,ÚtÛ AÆ#vXÖ òAº¥9ýŽZq†`¼½‚J¸W´@:@ÄÕu…‘êÊìéoƒšŽù"ž»3­7nµ>6>®rXØH8ý´Ê¡è1MÒGÿ˜&I©[IœánÑ&ê[ †d¢ pÑ[Ï‘0> ôÏèÓ“ã zH~걕}gQ^7ò>08sº™‡&üú‚®c%>Ýökiþ•ç8-ŽTØë0e^⪈(6Uº[ØÓeÐ8•¥âHËÙ)Lñe²í.9¤˜O± º5@z¥{Õâ‡dc=ªµw÷ëX—ã¸N­à-ÞU@k [B„‚Öj„.À(·]o˜©[̽Cæ[A~3Ó©÷Ëï¦=ŒÕª§ÿ.¹U^{£!ôïþX ò®*|ê.î”ïnrúüÜ2aŽ 3²¾ñçÕ§KÝ.2FÜÿxŽN¢f?()F_¯™‚´G÷ÞÈ‹ž~$­=Çí ââ†Óù«Ê)8DbÆ„r…ÐKjˆ9§xî'+¥ÚKÃLÆù»ª÷C%ɺ}U°Ç‹”0ßБ,SXC_ž¶Œ~éGÕQè½™a8ɘoR¯wQÓ\«ùkmç©üII¬w«Bjw+Û²la¦3çú™< FI‡ðÝ¤Ž¬á:¸ ð‚Hô»üÖ[½µhz‰~[:é’â!¥£ Ofçi†ÿ“¹VJ´ËEwšbÙf?Ámc}_”‘î¬_–£Ïñó>õØ–®»-í«w+ôC(: œæO0íŒM¤'i Vê@'¬†H\E­­ —R£PHÃæµƒ¦—ï [7å«wF?Œ٠›†:íÿš:Ú5V)ƒfÇcAnž¾Í»¯JóœT ™Ê‡À$8+ „·+)fÑkrüfLô¡¤ƒgëg¡èæ…ë“Z ’¸êÛø+—€ª»M€b>Òæó@*¶ ÕìÞ~f:óOñíG,´õ#p¢)š=Æ[¦m3HÒfúQѺ 9šhp2¨—¡Ðd€@Wì¸< ÆŽ„ÒG‡ @–ó››&Wù|ö•P„Ub€ü ãŸý[ÑQŸ¥µJÛWŒMÛÉÌ\ ¿—µC,*òèoúðÊÂÚž ±Â¸ÃÿÔÕŠ'ê Á%s"¶_‰¯ž“íõ—ë£~‚Gupcã­Ú,&YÒ[ïÚéÛ‰1ö¢æší®÷/ nS,î— G\®pô¡?î×è äøk]¬|õeh§Tø_>I$ZbXénm:Ê&ÕÞå^¹›JvߺˆË=a‡VÅôu˜ÆŒ[QpÒà(öËq dû95C€Ãš²’5ŸEµ×ßíGëpÍY¢Oh$Lá¸âLM¦âÆ4ÕZžëN½IÁy‘î¶³xT~OˆVwX¿ìò¬$Xª/Ó†ÐfÏ­5°mQ´¸Mõgo©kk¨,!pÇh™sZ:©yþÀëKwu’.5ªü1öìÒ½`r\"r­ dô¤ØUïÒ±>‰®‘ƒ¤)Ú¥‚h-Ñ÷a¹¸ÍJµ¹Ð÷‰ ì•E;-¦VYÿ䙨ÒM4€ èœzR'Ô÷»ÐóhLÝëß7 ¯V0°À×µ¹}XãEû°JÆîuheðÔÌ팕ˆ*ö7¿"惰9 d‰œ8 °ÓØÅµ©uFÐ2ÑNó‹+-¤$zìeG *øÈGÈBS÷¢ÀÍÇ@HJÁŠÁ_«WåÍa–0`µó,ÚÁl d7šUF6g¦´;_Z5lp·mucõ#Ó=]œª‘§)eñ©tE´yèÜ?Á>¡ŽßAû0à–¤!ÔIõGÇsˆu¬l&qs”)ejÎMQ±H¨Æê<_ì¿&x[&ài§3mÅЗ6¾ÿ`:(Z¹>%ét‹Ó:a·Y(Ú& Úù%QIˆ-ëJYaÑü0ÏDX {aåBÎìô-l^ÐÓ“¥ wqMZ¼'P­¾2ä&gq1ÃŽqSöÇiU»>Êv›¿€M寺֕ÿÍup Hþ rí”ð­EªhY¤»¯ž¾4SebãYw5nµñÝ™  VXïWÇÓÉ4±àž e¥¥3vf˜¥ôê¡4—ú§J$gÐN{»™•EºgÂ(»wÆòÜI$ôƒ9Výå0NƒIâÁ ã9 µV˜F&ˆ§$*q¶Ý,v5üö,”¡Ÿ6³f¤ÉìÓ:®½ÖȲ+IP„ ýOÉ´gÙ`Xæ‘Å XM!–!¢&Fåžè&Zÿ”û«é=ï6Öl‘вhåUOóiùM]?½Ìn"þªos¶ƒ€¤¯Í-šhgr pèƒÍîšø¾ÌEõk44ˆIOÀŽ­/ù7œåÔóè]¾VVù2tØþ}V yâuLY]Ná( êþ£®†.s*Ó_˜õ>1§S?ÿ…SƒóóÄ>£y áïP¢òºtWI ÏзÓ'}Ö€ùÿšK&]ØçKlÉ·ä‰~ˆâ…$ñ<_Yè¯ë—Gœ—Æ+!ßùP;` gVÄ{†‹ÉLWƒ¾‘ö¦&¥†2!5 &Ò×<vw¦/[ g嶇?_¦!‘8©àôØÞ³Hd\}ÊÀP™–ónm¼Áj«{¿|F:Ð`r;!œgM\Í'°üsís=+(_ÍQ©á¹&;œÉÛah âªØ QÀÙ/ìíÐèÞÁ@\« Ôž/A3X^§¢…ÆödÞÞ7‚%¹Ýs7,}É=æÒ6Ó££]œsþXЉ`ärÅ”__]÷MJñĹþ€£ëD”·M¬1Áà¬ÓáÃÈkŽt˜úqƒÎ뼃°…[R(wêø§õ˜†mÔc\Œà%±o\’‘äí©9t§:ÑPÔ4õ‹à&ÿäDÏ_F^¦âñ¨$„w ·FSÏhZ€ÛD]GŸœ<»J/fî‹ S x5¦ôµkیלÁwÖÒ“Þ},¦h xð“×ucö\½³{È]”ñ…°)2®á‘»ÁÒJ0)1[í/¿ñ<(#fÝ©¤›~¢£¶eßéyõL·ø“]– ä¨ûˆÎ¡~úE¶NâË÷†k˜þáúNô@³;PXšGuý!àþxôf˜R %cßË¿3)•uCšÚ'?¾sÊ 4q8nx±àa›/,™¶!—`˜•[”•ßÃíÔTÄ%¨äÈÝûªŒLö(dP²…4m;sjoý¦¤¤8^·Ð Í¿1îï3h­ESËyc(9JÕ4U°ô‘Ø_¢ööL2+tj7O ~ Hg5¸œš1Å¡£7¾Ù¢«+Zã1øL릢˜¹šË¿;%kX”zëª]3{·:OV±Yc;|[ åþáÏtrûèñŽ>ÙL•ÇÇœOþël‚öõáÿü}õ)‚N¿”íp«j7ÐS%]žâ:Q¿ ŸA¢~åõø:awµ“Ñ?+†Ã0bEÏÂ0/a7ÕçÏ~³ÝgfÛÞ%:h‚O¡Üõ>mµ|Ü¥‹üíco—Ì…lÝh^)¶5¦0Á0›Už4BÎÓÀSX’b¬<†ï³OĈÿ8Ñ«¦øÙr‹ÈÐ$˜ùÀ är Ýxgú¹!Ý~ǹî^‡"Ðâo­Ðþ„NEóü*ï$o·'ˆùžõÂbñ/Ê#ï@´&€âí~™k î”Ržrôäx3Ùh#ðùIàgOŸdÝ`Žî4®6›A­ÖØïë!ŽÑ’è »M¥{˜ÆyÝu[kÞCeéÛä Ø·ÆrH¹ùEûÏì³IHSñÍÈÍ’W#>>´cöÊ”f`r `|`n‚ÈEÌ`Ä™㌂˜zGÏr²¬$ã+¶srˆ™Õ œ^ºÏ¾P·3¢Ý ÛŒpnpψ¡à‹`'ÅãŠÊÇÕà¾C¹ƒ¥v½›XE|³¾ûò?-üÅæ´¨?™äxÆ –xŒOÔá„8¼‰?_bÖîAtPe;æKó³Z$*ò(n´ùèY¶Hi¦Â;¢°SÍ j /³-•øÁ3Ûéòðã¹½/l•88©•VÆé3$˰¯žOS]¤:,ƒª&õ kæ> ð¡iÿáˆ,K9´…KFAkë<)­t²êã>fi„¯å»þn.6í@¹6°Q£Õô³Ö-éÒ¤ñŽ>@BÙ‡P/ÂU1ã¬<†–ç”ç ±vï ÖîeŒ‹´y‡\uüv‡²'Gd0þH0w`›÷A 0çã—Mòèõ}-¦Hf§Ì` Û*Æ&IŸ_"ÈÚçÅqy”ÂÐSšÝfŽÔ~¢f²j.sÒÁÞë²Æ™ª·º©ŒGð4õËW,!<~—Ó³*ÙbŸGÌ%ˆG³csÊ[Ñ0„2¢Æ» O> JÅõÑ6®Eu¤×»Æø…D'wgsN>6@ŽWó•‘rÃZDFüó/2¿Ûôs7MŒ,íÀI$ã+§¦9mÆP]åÛ­Œ—©ÀüÑ4nUÞ8ìªP›ö‚^?Àl§–Š×¥²ŽÝÆ?\ˆqÿl+À_ ‹\8øLÄüRJ™Èk3ÉCÅS4ŠÙœ^J³ÙB£ÓÓásf«hO}1%(Þi&ªàSm„LŽ ›²“¥œÖèn·ÓþŠ8v$Ð \HcÜFÜéºÂÁ.tãì‘Ñ!>áù{B<DŨ ªXœ„d›ô\–}m • ÌRRw°ª¥%ðU~=]¿¢\½17Û“ÇW’`} C%;^°€^K lû'jf YÜSƒu¾šyÿä¤j ­RJÒ(fÂ5t”Ò«Dþ}EïD,‘B‚üö!çŒBñz‘Bžnå]£)f{/{Ñ I¶$…R(=‹ì6”Ò¯ki©ø˜LÛ Ø2zX0W…–!×GgÔ¹ôÈ›9åN¸Ò¼þªCªz_W§­ ï3W8“A( 9p¬Ý¡‚¸ÿcõê²´´umÍ!žt?O@±+às>ñKNØ;v!N{¹½ö)œÎÇfG츉‰([ÏF¯2=Æ€ù^®B;‰% å‰ H™)«^8NáuÛ¾­æós ú›‡·ÂIžÉ}p?~Hš‡ÇqæÌ™Èe)5~ç,[C[áí$¯$Þ¼ êuÕœS>!³J*ˆ£Qæãì "GgÙ«©ÂüJh2Œgå `údÓlííÃow™þÌÖÀý8DP}k<›g¯~`Èx2À4ù±p×^Œ€r÷$‡ßJG¯ó`“–è†ÎÍÁT^²9íb’¨nzZ«ù®Ø^ZõPtÕ¤*©Ãs4KíäÁÎÓ)’>áBý{¸ÿ*FGr¥9^ٜۄË,3dÅÜßcjüæî${ö8Î%6}¯Å‘.…‰ªŸ ò9!]â÷òU¼FjB½bTö…šD8o—Sèž9ý`†¸æsMÍ7‚† øGá®kNlçmœÀ­3 Ðäôä+³Òó.Þ;: ú M7—ƾÝDõ:d‘ðÄ MÊ$们eiqB( Ï0c•—bå-ɦ%Ô½­ÿ¼•ÒšgköÿÀ9Ûý†6¿¿ô8vÖÛjï:-©ŒÌۮǕaùÍýXË6Ñ•j;ŸxV ­€]vª›,jf&cúYEe“BÍÖÁ,æqvOýÐ2{´‘v´/ðI¾£+ÃçY´£fû(uÅýoiÒ¥8¯’Šx_ TòÂÎR«²*ø3Ü60Œˆ™ae gÞF™-ï 0ÛE@i[ÒÄUcVI"èÐþCçk?ÍCëòâbÄžsúëÞ©[¯'Ï Á߆À0’§ ÐiGF‰÷Ѥp|‡å«3Áæ…ì«ÇdLÃxÊ$mÉ”ÞO…º±"©a¾=®©B£§ §þíŽ+±"½ Îí &ãU¢Û¸¤;«àB’·9nóXësÞáá5Å!ùž `[QºÝHâ£Ä¬J¡¡¡·'eOñb¿ý`ìL„õD ¶š‚aÃÓ#(óœ§Ðg(„"l²•Ÿn?Æ„è€vŽh•ÉsZÛaa"«).ÓtÌ :ïaã®ï[žŸ+UÐÌ:ž'D‰l WüûÚrÙ|eñÀE€K#”[…z¸äEpüÕ©¥ùY¨ž¾eÄåÈäet=U›NÕÖ¨÷ÔúŽü®’âÓ÷f9ÕÉ,´õµÙê¬|ú¬¡÷Töœû öõù>žÓr#œê:Êï€ï™ýÁqÎÝŸÃY«+ü¿joŸ;ã\I·á"+»d¯N, ¶¹ðÆ©0üÍ?ìjb^ÃpHŒ1›ëÖ»-xÅ(•í)Ð"ÄÏ9_Z)ÛtíX£xw˼ÞE4Ù@ž®³@…»p\¢ìÝ“¹%¡Tø_øCµ²`%FêgÍoév±Þí>x½Ç쪚EJÃæwn»0ý]X2#ø™,BÔ7¯•ªƒA¼Ø[‚+DF6-’,ïTõþý)ƒ6XªQ[Bõ±Á2‹AúoŒ¢'ŸÄÎi“V9]Û·½'ƒçPïJ_ßuã‹îqz*ö"¹ÐŠóW!ç[¼¯ÙÈãò›×u Mx(΄á:±›¥¹Þtôö ¶½‚YÏ'ñí%-,ÕB3®Ç‘½tf3ÛÛX[^½bRŒ¥ªÓ•}¿¼Jò€à‡~êùY¬ÙEuP†e ö᛺S¸‰ v Ê•¦É£ZLfÙ½B$ϗѥ׬—$–¶&ÃÿbB²rD¥W6êhqøæÜÎêéµÈù¼Š YªÍÌP±27½YŸW%ÉÆâÙ›/—%Êyáþ#–ÛÉÑ`9d«¡¥;ç ²ãÉUmÓAŒ—©a_I,IHfKæwá»U-Õ­³³IÒÝl§÷6sä)ŠÖ_G]N¨xÔ•¥,†9»m‹÷6SD©Ø¼ѲÒ,ÔŽß¡Q,¤.0­è/»QÐ]ΨBj9+ümTð¦GéÜÜGôr'ܳ2,sûg×­³#fÁlñ¨–¿…¶µ_zr©À?ÿPÿ›ïðfœ3~NwZÿ[»µ<»¶t­uõ C\G¥%9Ž„SI¤¬Z¿{þøM2ˆUÇnO›/ „Cuu2.èò?M©žv¾±?Õé(”|‘¿‘âÒ„JWUeÆHí tt ½þHKGK6è~ØýdßÐÀ‚nŠÛæãØT|Þ5MÂ‡èæƒ¥í$ª)”,3peø_Iÿ4:„øc³õþ«â¾ˆyËœº.ËUæh‰„JJz'm<#OîϤ¤€ÙNE0V%)ßüfÎê y»~ø¦àÕ‰ ØHðúÊm¬ÝɱMsópÃÙj\a0Yµt»K8¾hìöëÜíE£ª9݇Åï}èÕ5À÷}•×ZϹ—1»A@[±¤Ô|çýâØäá†Ú™¤™dÙ­PÅßi^é ¢ /ü£ uâXPÌž&ÛŒð·v¤´nwËkŽÀ¶+7 –c=Pð·t!% ªw©§Oh3±ü›lg–Ç5ê¼+išºpªøì>säÈhTä- ãÎt]CH(ähŸ7]8켓2zÑ&*€¿›mµäãTJhšæÔQÕE‹ð ìÄ|è¤ÿ°S|ýG¶Üt Ê·Q5#1må£êèÈjžÐû…=ÓÕÛc©C}ñ Z¶0}BèÕ¦v;pÈ ~'Æ^xkt£Òr!u¡2†èW¹ÞÈ…8J§G¸.:BüÂ9 sRcޏ¶\‹+†¨Üq^ %§2ªÀær>^ôº,ñ‚I±ÎÛAO¦ó\Y°ôË7û­CÌVü1 TU/ŽP6Ñù€LMèŸ|ÛM8øÉɧ'4Õ/µ6ÑUH 0mk©Ìcè‹á(öänÓí‹ö›åRÒÁ¿˜fÑ !vq}stòÈãÁ;FÊÜC:N‰žå&ÒøéöñšOÍàhÙ®fìÍTûË”˜Ú ÑÚŽ;êúVÀ§´(^ú£Á=æ´Û[–MVÙMvYá¾ænÒ¶™%2ͧg¢™Ûð‡Qºá ñD0ÞŠúF´û=)À¥ô²¹çwó³ûª!³é#p8P“”|¦¾Æjä|ði,Ú†:º¥¤Ûýu05,7Ë2•'†Òj0û³ÅkbÊ c7¥ð¯JÒ;οʭÉ—ËæÌÎù£;T1­þ77|eEÝ5”«^ƒŸÙ½.üÍ'œÆ¼¾z>ÿ5½ù9Oi6NíÕ,b–Û¨+T…—ÚoèŸÄZíÞTd߬ÎW„zõCÌ‘méà4DÌÓzì{¼XIi¶Œ¼œ± I4ÿØhwYþ ±n„1ØZE©¬ô"³$¹¹¿ñc/_sØð»öâÿ üéFUpû==Þš™ˆšÏ°¤ð½Yô†þ(«À €Àú=¦5Ýñ©98þÒqÅ`ÖdÞyËm0ùßy¡ ô{~wâ ¸='¨nÚ´_ïƒÑÑí’1ãäU'ôΞۙE…WøwÀ‚¬õ¿WôpÆ|?•™]óª øÉºN|t1%ê§ß̯æ>Z55e;4Ôí(–v”˜Ù)ÊüßAâ2ñ=!wog¡´èñœæZÎ Ø%N:&}ØìÊ%JÏèÐåÓö¹,ßC)Y‡4ò8N§a£éRîcÏÙZ(zy™Yù@Ô’²Vû®Õ¶Æ(™ú–O{~ è7»G¾5šK^NjúBŽJ†NXÚK÷ððÔ'ûÛ@ó®tÑŽ#‚(ųä%¿{µ(ROI¨ô(ÕסÒ]ǧA‚Z¸á„]â‰>ÿYmqŽªLvi8—ۮτ3òj°‰=®÷OÌÙx£>¥9vHzìä8i×RÌõ+v¾l&ß ¡kAª÷hÇ4k˜•üøâï°Z·š*QùÙÙ•7€sLèbD¢ƒÿRÍÓØñ+éƒÒû¸Ÿ! 0Á'´ªÓŠn±0ºhïACm°kÜéÈŒ[%ÜÍ)WgŲ́У{ž)ri²£nü“Æ@BMÒ§Ž þ”5¼ eåÂ\÷Ëu”Zÿš—„g;!dÞÙÑßç F—2ÁwÄÝÁ¢ ïÊ×àH÷>‚Ž›’Ñ3ƒí^âfòžèϵqaŸéxp»rÐwƒ µæÅåÙiKï{±t@Äšö±£!†é™Ò˜¨Hè F±Áµ_!|v;÷6máó¡"†GBº»ªåË|¾)ÝÚÆßê¹cŒ,ŒÃëí#âf]³N‹N±|’Ó^dž2Ø’ÜCÖÌõYÌR ù±µþR›f@­€:·©¹"pWßÙm…NVǼtDöř˯äÆhµçÙý-"]u7ÒºDã¦æ7)w£H±!ˆà‘jëRç²8ÍñT†ƒ/ýß«q)XBýÙAø8 b2‰Å “ ‹C,†u (qB#Þm|ÔÚ¿g ÒèÊ-ê¯2ÞŸ6h[\¤¥ó†Ì*$Z$­NŒ¶iÐñnðbUSRÿ¿ÂeŽ—œ«ËòR¡OtìAÆ?êzîeíøvÌ’'¶W.ÖpÿZÕ<´£~kmkSèOaŽÊ_³ ½{8ÛÂë8*y=è¢Cî½É)x^ŽSc Eöä#\Á ’ {j&“ù´¼Ñ“<³K¾e¨–×àxðNT¨ Þ•…œ<¡V°7€ÏˆDè ¡b=V9æM%¼” Rü šŒ~ íHÎ/¦{‰ÛCÂ#\c\öÞÔ—Rñ¸ý%]^ˆòÙ-WUêŠ\ª à×kÆ ð)½Ç99Tõ ØAG“‘9²5‹ÌãÛYšÌ‘é¢w‰Tȉܖr‚M«!-ÛÉ¢ÍÃ×þäÔT—Iþm§ òJðXôOŠ€« ~“¢ s*žþ:zŒF…›e7—ÒŒÀ ²Y?ùŸå|ž¶*­™Y‚g°šxXb[÷\½ÓÃä©ýLŽ´Š]U¿œisaòÑ+•ÊU÷‡w ¿ìG., šþ™sìk@ž‚EÄ¿ßwDPòQÏ„&f^3]€ì‰]PPbJÔó†ÖÃùT×è&°(HtoëUé‹õÛ¶²ŒvœŸˆ4x+ Hß]Ö5àé$ëp_aFéÞZtÛ]cO¡òúÈx€A¡þª Åp«Aîÿ²ðUéâp‚ÙÄ\ºÌ) I‰E£95ð–5ý½Þ ^½†HøÑ²KÆPÑ7q H­´ä)çÝØ¸£ñù`ÜYàïoÒ?ñ)._tÐU§z'JŠr†ñ!`u.4ñðc‘dHH²åP4ïPõ M‹*ÑÀ|¿Dnêç.%­²t³hëÜÒ—¡ÞÙ…ˆ¤3*KÀ„á„çϸ¾Œeù†Mˆf¡h0è^´Sï}Õ8ÑÂr86žJ,KÍ—GzCŽj®u cÕê®-Š_ž%öwô+ž«¿·Œb@ëEl¦ ß]Çê@[`íJšÓ(wIþ úg4ü͵ÛÛÓ~3þƉÁ|¤4‰äöÎÕ˜ãÚYk3žœËkX_|’-!‰˜P#øÎ¾Ô6‡-’hËhùDéÁ`ÆŸà*H+£ÎjÝ8°Ò4š&¯N{Õ°Fø®]ÝÖŠ÷@ÅÑp ^ù©¼5^Ío÷ ŠR1ÿJZit7ÑBäsŠl¿dž´2¦¨üZéP7ô¹: ¨‡ cá»d¸Œ`M¥vocÎNÆõЋçd!zëÏõäŽ@%iäTÈ<îSÌúB\z×6Qsr†ˆäùåcHØ®™ŠàfêØíÊ!ä2‡8¸Û§ÔáýQdlcß±™×çØIÌèSnÎ[r•üc\°=È7·7üƒ¦A–ÔÖJ¤~êÜmy£‡ýYO&£’%j•êåInãV0¨µg"ZAÖ¾gÊŒïlù»¨,…¬µþ1íý7„Õôtú]dæÒ\ñxx`B:JÑ‚_ÿõ9ó÷ ß‚rØÛÖ@û¦»q†íMŒ#‡Þ9š²Ñ*_[³f±òvnP«¾ã^•”E¥‡í=^N $X ŽSAÁ7wùd‰õ°aN\6Û´AW5„ D¿vLFÜó$€ƒH:c>Mñ¶£K£Gya"–ÜGþÔÈ‹<Xâ Âa€õN†8P“ð¥v§BAu–uÑ èÃWÓòöŽ¢7€Œ ´°RV‡ªÞÄ:þNw®cí5æÅd®Œ^`‚@¼ª¸âf`ºUíýõ—E –sDüØS/ðaÉÙ1Ò´ÝQÚhÎZ\1åáÿŸPö,¼K4+ :ºÜÀp5Å êÒØ-¦ºÞ×h á™ýÆáæ1¸)dÈ#ç÷:iWÉ´\Yƒ¥1œÅn7ôbk ÐfNás–¶ËÉ¡à,±8Þ`x”crkzWö"”Y6½¤$7úvÃ(‡Bc¶ &Ù„¿–~®)µï¡›ÉT)=y9à\ÍÜÔkäm¯ ¨æ‘Þ±df-Êù9gŸù4|¬¸¬‚§"¢wñ¹‡‹—vëì ìÍ·ÀÞe¬³T¨Q›%E²€Ô{K•œ…Iq½¨q¢?§GO3Õõâ¹Œí¹°µûzâN9ÍŸ/6 «tDŒ+—­©ŸqµËl•Öýw4v©_ç{Ü£Dù°º#€/–Nu<þ {UÞ‡RnŸÙq<’ö~ Œ¤P GCCæiçyûL9^Áæâ¢ò• óùÑGÝÜHˆÍBÞP?õ ÷)hˆ| ›;ÊݵTË0Ñü‘¼Ù´¨½±‡‹R1Se ¥<óþúTyÄÁ6õ¼HætôF÷C 9þK+Å5­RÛë* Q5%ý(-:>ê³¢í1ª£ùåY¿Ž×$GæÝ¬ð|ðô+*=æ¬X»·è£]—õ€’Füf˜ZÝ¿.…U¡ß±$Jl¤F)êœHC†¤qæJSëþÝ‚ RsäÒ' 7O©©\#µí²ÞÍ:¦êˆþÖŒ·m²K;äÙ Ô?ðp|2ÿ„7Eo»Œi¢ú¨0fÑ©°j:.e›ÔEËg6ùåL4Õ;¯ qÅœ©ó„à!&Ú¥!^ø«=Ó†¯iZ™lWÂ115°“ a{ˆä±¿,Q 1üÊRÖÈýè3Rw⿾ 6¹òÁn%G$Ö¼sxÐöäÖŠÕýtVÜ<ä¥ Ú©Ù^Þ«Ïb³çýýs.Å[»€¸ZHО²"ÍÉà;“ Œb@@O+D,_+—–áP̽k:oHž\š%_'aSPå+G3@ßD‡áÿÊšx7½å¿Vng&ÝýÃ-ªszäù£:a$U—_oþŠõ=ÒFsg¶‰~î ²ÊÈû³ 8„>W½5í$ZXAš»a𯋵M¡èaÉN¥b:«á#÷ù˜ !ËLóÚ®]í‚õ/@”î§ç1ꙡäðó€ÜÛ&O“±:0Ô+Ó:øà¬À–Þ\>Mÿtä!У!þuše׋nbm š’Ыb¬øº¦3ýöª ôåz'82/_…>5û-Ô„aªI²ìp'iìÿ£¬8j[£¾ éí Ö¢-x>©ÇÖl8|¬(>ªV¬yŽ:²ôg®^¦/úåó ªv~L³´Dšx†"\ýn%#‰ßþ ÝM¡ƒnQ= ƒxo¿ ]·¤±¡èCCœÅ€·^q© ô”Õ < É…9é]ˆ·ýˆµî½8µàmÉ{jÛ‚×< ˆ¡@SÔX,#,/F›«»‚øÜGEĪ*KUÜ´ÞŒ‹d{ÓŒ=@›W"Ñ$ì.Ö\ˆ”Æ6t½÷+ÇæWËp¯¬—¢X¶,ÛÝ61XT¤)ŸÆïŒêÀé}\ÝÄÎxW=jªôìã»”/^¤·*Z\d­ùˆJPneä7¢‰óµXäl£0Ä}C!gG-Äñ_&µ{…í­÷-ëšê4¿qá%G *Þy½8ð#^] M 8œ?:"…Ê ôZ9Ƕ›^MbDPmjmwQg¼ü#·Q'oûL1+=x ‡o„=. ¦tÌWMePáõò”¡@׃úG­‡£îˆo,‚ô‰T5’BêùÏ™” x‹\þ0¸î׌?Ì•~ÑfÒ0K2‡‡fϼ›°]„NŒÞíw(šªç¡Û8ôŒKϾÕòÌ0Â0Ũªî·o:èD*trðR§`¬˜-‹ÅAÄø"åÀTiëÈ·g9ór<ü\ìb¾i¾ËØ÷Œâ>©,pi"làܺ‚„ëN:uàžÅñòwøÚDâO§ø_ÇdoŒ²J²Ù¨CyÚë¼ñ)ðÿ‰÷,š´K<–zG[‹J4wç¡få>÷;-œŽ‰Ã|,PÕÝž¤S ?…? n4i–g"6C‚yÄ¡UV>¥ÁÅzì…„}²±F¼÷†ä()‡CYç´ô”œWHŠ)ù,Åî5•F#bÒ_Æ œïÿ Šñ“Û¶¼Ë…Ñk¢^ûúæ`ó‡Up}9¥ågoùÈ”‡åÅ‚²8+; Wõ#)YŽ, ñï–—£J÷E€ŠQz‡‹ª/qƒI„…‚Œ·óÆyîo%Ç ½½C>á9r{|@>W*áe›BRÚ¥àÝÏü/#‚¦®/äøÄ‚žÒ×dIÝs³á"p¿ie*ÄÑôªØFEzÖø4va²3ÁÕ~Èë,žè»^5ë…'T'ÿy ¨ô±ÚW1ñ´{Àºb¹cù‡âpVü`¤óêz2ÏH0þcÜQédz÷_’ò!½gH|fܰæ08 å1T±ÜÊAá\9àª~+NJˆÞOă³-4 œ\Ë1TÕöo’ïMäÜ)R/ãÍIåz^äKm™$޽%`á廞l†øÎÙäÁ1ºƒÿ£-'h?„»ÎËÅ{ñú/˜—:†Õf¢¿±5‰At†§v"ý‚s¸¨‡è-£­×ýØÖ×}ºqê~ù¤AÍâ)UüRF —°OraKV@×K~’¢êÕ+ôGâ@É×wií\OG‰VƒÖ‹ƒòL‘‰*%Ø‘…ŸJ¢Év¸ê‡ )1Œ ô %ÊÈÃkÎÂTðîøÑ».@iðc’Ó‰cmPé`zïBüöΖ%×lzãr‰ŸT¤9‘+‘n ”.qðF‚À©ëÝŽ+•X$6 œ-Æ‚®5!7W³ |ªÃ‰€4¤bŒ¯üO¹ƒK½,m@°(K.Î*Ô†}Šºä”ÍŒ÷¶ÃÝ,ÊLübHš’¡„£Jù?¨†MÌ´ÝêX°Ó ÅQ Žtkù݉ c úHMšmrêßvãÊÓt«ÆˆAïÕlÚD^CfœÁò\õÍ ‚4±>|¾ÿâŒ}# ®á !Œ›÷¬EË5Ú\j»òws<•öÎR=ÎÊÏP}ŒßqÏm9ë”àúPó=¼ÐêŠ2IÈå7oÚkr–:)lÐ 3=ŸÕ™±´à25¤ÜjÏ,ëðêÿ©šª竨 ÕÑ‚V‚§³†4òØ` !6ܵf]ð<îvˆ[‚¼w 33S& ¾ŒpÉe e«­Ú6Žà',^Ã`ýèç5ƒ“-7%œ+(Yúà°zk%Ÿ±æüeæ¤Ø^¡Ô¦iK×bÐûZI®(@¡!¯ø!ݤñÜ£ Î!Õ÷Âýn×ýÁ}g:034¬CÌvëïkžD]a³ºƒ¢õhÑ_ѾÌî;‹ÊÜ$,ºO}¬{¡Z›:)Eû·Ø™ÓF_LJѹ}+`t‰ô¿Ó1µ7Ôª™œÐÞô› =n¦6IA›¤Z¯‰N”]œšZþ±ÈòÆ/÷OH-ûÑ]n› ŽY=êüÁ/ôb®ìÕ“„®äœéˆ3f‚Tã´1®¶ L€tsR9¾fÒÀa 3 OM`z.dVjÄ­}•UQ^Tàï«€C¾›?äÓª/,ëWòÌf:Ýí `˜°‰„-Sx™ÏçÄ2ewåÏŹOŸvíí×½¤YÔÚ*våÈŒ§㨠µŸ/c–ÈA¯®{I/“èârÓ¿ÔwáxUun’H¶ôÔ  B¨é¯•;k㉽Ê"g¨S<µÁüUj)4µ#×*§™†ÌШóX*w2¦ñêŒvÈoÀÓ¨Z™-ú 90Jª¸æ¨_|]Ý„Ïë%ÕÐZ+_ܪÏGØ”ßH¿¤j™+<ÑÒ5%J¿´5&§–ë»)PÚ@Gq>}zq*ί´<ªM4X Ê(s9{ﺴq!C0æ 8=š‚25î‰ã'Á£nåm¬Ì5ÙÄm’˜ FEBO6«ŸÆóTÂKˆ*иôù6KÏzæøM8Õ>GDç¯s±”h<•z ºpŸ¯ò¼«Ù™¾äî×%(®6ÞÆÉõ‰éÚ&ålËu²˜ÎLj‰’í+¡y2µl¡§DøJ-;ê~}ñGõr1zeCñÌ5cé oéÆ4ìBBï,:€â<­OÌ~0%¿4-¹r°ŽC¿ù×hc:Èî“ãî'},†ç¹õÓ÷ %l¢bœÙî|ëÀ»g)ÃŒÿb¶,sÊ æÎ>‹¸o§šÊ…>>Ø2"'ÏKݱS|ûŸ±z—ªs‰clçÖm¢¾É ìcX.ä×Vð(]à:аÀ]Õ×£:?¡ œÎšü»2+ü”ª+#Ç\ÃDå3ŘÖ]RôY¹E¤®¾Ýïbà<† "¤Õ<Ëú 2€ÂøðÂÊ®^"%Ö²ýIZ$æsÆïW³¤ ©4of¯Æ¤ãÓ…÷ˆæ½þ ‰ëŸ¹  Â^~€ƒF‡ŸÌV$Ž`ÏEç~oÔç­u‚ ¶–èFUõNŠáŸ½àŒšùeÁõ&—Õ7²†W,§P®¬Ú”U±‹!)ƒFË܇4 ›évÕÍÌqÛ×1º-‰È Éû9›®£Èçq‰ >V|æ(N¿»KáùÐ΃î®?g{âÉñú úY¦ëÄ{Öçg®ú8óšà³rDÏ€ˆN¬†8_ [ÅG£G›óp‰VŽA,¢D@ J(Æ[AOL=ýРUDTRÞÀ“c9ÿÅ:aê¯9“êzÃ]+í“S·TbXÆè4ÛÇ×É6ßã/™Å;_IŸ¥ÉCd¦½|7©?` Ž{aÎ5súk%ðSƒ"­Q]Ò‚Ú¸*Ýíã¢ñÞ0r]tK4æûŸlÄædyùaa Ýëû‘ƒÂÄ+øà|óQkø²ájç zä˜rÚ"*åšìNÙ–9ÉÈbŽç½¹y…¤§†ysG0ÑÚ.ÞûßöGeœL»ÏšiÇ?iC_>J@pœ GÊm”ÂGOÖQOZ ÝyÍj­OO³ƒ±½ŸÜ¸$;?öÛ_ÃNÎd€ö>!Fڨقºü°(Ð œ›%ñ²Üîx”ïÕ?i½LnèºÚÃÙ!Â,CƒŸˆeEQ¸mͼÛMv+K÷˜ 9t_ÓÚ|¯?žÄ¿ö$a7¸Œ¶öUZ;ÎZU^ÃÑ“bÿ ¾«¾¡¼DZ÷}M hì_¨è—Ry\¶M<˜qí ",è`]§÷'ì5â!Zâ±uŸr3;‹‘n §®jTÚ"#æõÞO­“GïÅ{epȇ"!‚S@:–í^-GËîöÑqPFztP$\ƒgr›{ÓŽö~³‚MÒÆ£Ú‹ßXÛ ÎBK{–L“òì“fƒ?×HÁ%\4bèõG7kÝ”lŠz÷: Q°ò¾#ah²gùãð™v:¥óEFÂÉ‹e‚‰\·À6qm· ]/³¡-Ü…p? <+Ž'G´[=Ÿ‘Iª¶•F‹ ^ô¡í±ýL©ïú/ Ë{)«Í©ŸýöF-\F™ÓQwjn¬†€À?ìµuï0ú‘yØ Z)6ÂÆ‹;A\av$ˆ(0×u·tªxXe¥w8¯¹HñÝÍÎDÒoÕ_óÇ%Ç&”ÇN1ᣵœ—%§®W‰ææÜ“;î¯Bƒ4ˆ»hä#•[º)À ,mfu|c¬4¨UbTôP`¿?ÛŽëúÞnCÍuYä™1ê— ºÔÜe]=„äëÐÍõè‰iUFhm=“Lç̾iÐDã6Ø{Ü+k>oã½]_tgSèƒì õQ5X³Âò½Y™¶`ðA^K+Òñ–ño!}öLƒñ¯’ÿµïC†ìÀO›XF·½>€ ÀLtD/»hÔÉJYRDf}¤Ãdž#)AMRÆuv!ƒqf¯ÐÀiÔYÁ·_¯Ö åߣßs£ªQs̾¥ã#ÝðÒŠÐ6r¸Å{í]’Î °¸ K•—øUa¾«ˆÄ`|“Öc$­÷‘/s™£Y~ÉúAû’îïÛûgN„¡;3òåœhY×éì÷î´Ù'9^ãñ˻ՔMdÎûq¿?Ê„#¾kõV6~å{²i8˜@Í)®UdbÑ6]+пpO´¥†—ƒìì²ø íC]) vC„à»1æŒPÕ¼ÝFª&1Tqö48 n0á»§5"»4”ÞóÿÇKUçûŒ÷ö}$¾Qæ8ܧ«íë¥å/n&¢,>#”KDQ?ðøYëçc”ò„¸íÛ;ºV¨Ó[·ðÈ‹³_øAËÕ/¤î:ñÆMŸ¤uÕG’ZYA’úú¾aò¦²Ì9¶{·äûïÕŽ>Ì$È)º X½eèÙ7jIZ”M]–MÂÇ/Û4-ÎÁ¡ÿUêŠÛ¬¸ÞÅq0ƒÂhx@Ê«9%7á! N£ÿó4RôŽEZæy¸†F×z.Ãü”Dõ4"i%}¥ÀE•– NÁmã‘bÅÇ G[ÓùJ?üú`z;¥EÝ˽šLR~ÆÓö;"­¡œ¶¯Ëó÷Çöhé &EBNR1ˆýÖùºP¶º)Õ7i‡³Íåêï™@¨" &"¶AþbF§'GÂàî®”⫵e*óŠ®.uû F±è+þ£šÈW>XšTlææ¸ˆ¤b‹6Ä€?µ—O¯D}DVì×8%Z9Ke“ç²@Sã +U£#X¼»'ås.$m :=fçUè—ÄѾóŸ|T´ú1Ö3¡›¤œ’÷kâú°RÜÊi¦4ðþ]pi®&ýR(?ó‘¿Æø½ÀÙœà¿Æ\í®8 ˆÀU¨ÞyÈnÀãáâvÁQeë„mP§IácÌü¿e+þSÖsTwR‚ØÊ‡ƒŸ9­ËÍ5Ca4ÅhÑM(©p5Ä›<|<æ4¸¡Ÿ›w&Vrók’Ñ€®#ÙÖâ¨bC·S3Œ‚JçH¹2Ê#Úoº©‡Ðô¢¥$ã,vb§4¤óð—Þ]6»W?\®âcÙsª“‘Jã­ðž®nMú_.L·Jü_š\Y‰«Â:²D*X+˜DM¸]ÒP•_sÜNxþ›ÝýÐʘ£Š/>½ŒQÏŒýX€£ýïùǤ&ÃöÙz ¯ß ’+CÕãÌQâ!Tèj9¶"åÙØ!"{„(íšV”¯ý<èêZƒÜólŸXdÖ3n*ô“»ý jŠêj—½ÚïS¨ÏèÉÛŸaH0Ú Y>8éRŠ€9A/Àvíb)Ó£s,0§Ò¥ËÚåÜl£s±ÇF¯WÕ[m”†a}ɧlÑUŽ[ èÛ¬®•HT¤2/Öb=ÊæÔFñ ôxSÇcަnÉNuøPo€ŽŒ¢WÒÇõmÌÏïÖ#„þüxÿT·.ܳœü ¡†ewm9­ú››ðÇHeò μ<¢g–Ý™½+À;¸£¸ €tfY­ÕJ‡j”O1µûqñq§¥†ö󘻜è/ ´ 4±çBCë¦I8ûã¸Ò «ÿ³Ï Ðb×ËÛ›NÍõâþ8"+÷µ†>.“ e䃨ò§ö›V7]ÃÙ#˜™¦Û쓉Ex?CùlZ‡×X4°MCþ½õÅÐO€Þ>wÉ0ßwN IßlȾYªçä|æQÝ\Œ8õˆÒmo„U%¹ËÞ¥Æwù"}Þ§©pç!öozù·}UÈzô5#±™q&Vñ·îýpÑØ#UŸj¿<©º"@p!¡ô^*¿âÔy½¬G×Ç$£hÏ>5âe`¡hdz²s’'hGÔ_1¾’a¢õ±˜.q›«¶Ã[f2V> ëp4+çM¹Ê ·K‘gw³²x¸O%ò[_“TwŽ^ìBé¨=¶w耤Œ7I*µnÓY¤O&‡Íø|×­ódÕ0«¥Æ"ºy½œÒk‰ÁÉø®Ý\l°ÐSžnÑ“–w”—éÞÃbÛpü¨&ï5ŒWÌ`“óà$È!ZL-å¡ßôÇÊIéNÄ”çXt>ÙKð&8ØØãtQ9a<0àÀúAøìVéöO@W£\ÅÃ’`µÞ¥7PõP×Lÿ0qA€[ïy ÷h™lö­À/,io‰3€³‹g›¯½ƒ·ÆNP²ÞW9;h]ª«²qÿ|¯³@ÚnÁ"t@/-»§É†ŸüÇ`™v*r—v¥VØYfï æÕbšÈE°^Äï]`¼ˆ¸¾,wì•–½Ú½|o½Ô3ÏÙ”Av %òäf¼C$HÛvyõäüñ˜ÓÚÊ~Î,2çFD„FÍb5ÊýL“*YwR¿0Ìp)½{øLº©M»{€€\Ú®zµ‹÷´\YBšÔ‰¼Á¡$G±Y ¹¹Ì^ÝÓïµ&8†L’çž"æÂü'´&àŠP÷"Åî <úˆ½ÌŸËÒ–O¨Á Ÿô}p@ÞŠêFD^ ±T¥,I¡ÎÓ Á9þÕ½“ä õÈöûÜ\^…ú¤1ªW,%h³•Ï®º×ü[È·Qµœ:QO–¬ƒž˜£ýv= ·ÜÐ2¤Ð|o¢Ú¡ˆ,h *b £®Í@ ×鈾½F¦ßÛµ´ûè®E€vu…Z«ùÏYÏŠÏB„Ã_@ø‡_+“¯ÞE |›ÀŸU iàïáãe“m}'7¿>ÃJŒéo (¡¼ã‚Y1a$¶QÄ¿)ùB˜dk»ŒóC“Á!_=1Û²_‰[¤NÓtrèÖ©¦@‰°ø„ùªlè^ Ùs­ÑÈ D®ªBîi¿vœ¥}!èç­nN²Î)l0d„¢áØ´ìñWIþcÇìyÅ‹qàjÞ9†ôºwø‰.¡è†Úç0`‘ôUS ½îwh‹°•·Š™‹†wHW¬”XB*—¹X’=ÚMƒ,-EP¹<©&L£ÒÕãðF÷úêTh]Œ©ëòÝàTÊ:¥‰4ÔÑ.Uj“gMkåW”*EÝÑCåŸÈ#ƒŠ-•€ ëKìfêGIîbÄy²sZ¤¤ ôÙ$¢•²øh|›Ôanãse,ÖuTÓ­µ0nàɺŽû\AÝ‘¥<ÖG“Ø«íI^2pÄ`<çMp 9´—J@ ÷gs}›“ëÈ‚b¢>BÞäù$oÙïõ@•ÇÅš³Á'zhbÝ›½KRº&8 °G‹ùgá±,Ù¥w -TêÆ­³*ôïÎfÎCÜÐS–Ïj ?qìN O ­ÖCQÊÁp I+ó{zôcôDz̃æ¥4ñ‹6eîピc¿”ðÐzÆ(>2³Ÿ‡æÙiÑC(žÍ"%`-J z öql¤QôÓ»£aTH!¿‚(Åv›š„N \*û\2ÝI·™¢¨Ý¸5ÒõÙ| 46`& †«Áy#‹Q I0ÿsë(~ª6õý¨N ÛJÎ] Zhܨäfîö{Wíô‘ÆÐ¼ Ä%L´ˆúœn©~ªqíB£=Cj$¦×–y"¿,’Ó0Óâruµ—W>HÚÂõª‹r4È€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/_ai_____.pfb0000664000175000017500000007656313607302650022505 0ustar rptlabrptlab00000000000000€Â%!PS-AdobeFont-1.0: Arial-ItalicMT 001.001 %%CreationDate: Wed Jan 27 13:00:46 1999 %%VMusage: 29187 36123 %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. %% All Rights Reserved. %% Arial is a trademark of The Monotype Corporation, registered in the US Patent %% and Trademark Office and elsewhere. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) readonly def /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Arial MT Italic) readonly def /FamilyName (Arial MT) readonly def /Weight (Regular) readonly def /isFixedPitch false def /ItalicAngle -12 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Arial-ItalicMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44340 def /FontBBox{-261 -250 1059 936}readonly def currentdict end currentfile eexec €‰vAJA aB-‹1ŠaÜ‚IN‘7Pˆq“ }ÿK@ùTÁËÛßZdG²ž$M™S.ûÚ‘´Ú ²p8}ÖŽ¡—³LOÞ×öû×n¨/ âæ¦|äOü×PÙ™øyær¤Ñ=žèzâ½»ŠI‰ ~ve¯”°C@M¿Z*¨Ä¦É`ô––z`_a=h»Î<Ï6¬=ù“ÚAÃE6\ÇíÐñþÊ]„ÏðlžVcĤ§ÉFÓSØWpYLÖÉè¯Ac  ²ii³D‹éŽ4€ÜžpžL¨à³pK¯pcâJ'o!¨ðX–æWñÞÍæ^”)Ôp…Ë6ýæ(/¨à¼VmjÔä¹§ØÚàáBõ¢?»ÇÙ—ÈoHH}Èv#@k,ˆ2-ýf– Kúè Å€±s6/f©ÝûEä·Ñ !Þjü*Ô$G‚Ûæâ Š'\ɧËj¯r?¢Ë<Ôxœ,ij³[Ö),ŠÏ•ki×Exö§õíä]{öò›KÈèȹ`Dß\ÅóÛñ)Äe•¼)"WÜ5"È®u~´]½?…ñb´\Í ¦øCEÜÂFiÃ"ÚrYQyŸOŠú:” ¡¿Zº1n,j$sXEq# Š„·Ïô›\ xxw“m¥½|€›æcãõNMïôÐd¿°ã›—¹j@ÐËis"3K¢ø"šF[Ýϳ£­ñh¤\DæN-Øb÷XïûÉJÞÞ‘g’›äv)º-l®%½F6u³¦ý²8Iha¯£òW”J½…[> ˆDÏ&L,äÛÒ,ÃÌÒÖümÐ!þXÌö—™•CMÁÌüqÀ$xXäà––Sd̼ž8ª¤`2ŸÈº`˜¸Ë8ÕIª$æ¬$²×ÆÙQ‰ŽÜG oû’ž|ó“],ñþú×Þ„Å`qO^™B±md‰%È÷Ü´"° bË eñ¶Âµ;®·[ÅÅ8u’Ãî˜#vfÚâò-ëþ† õV{ÁÎ:ãnEÔT’¥z‡º„Ó™iÒFR3Ó½N¸äÂ2z+‚™hjì:5÷0ì7™±Š]uX-¾$«¬¦*ÊÚ¢ZrŠòÅ}Œ:cïPMý– ;L¯¦µeÃqD›ðßðÌPáUri/Yé^›W‚®LâÜ"òz.¢%Š8L«H¸;Ö0˜†–?Ñùº˜¢/V-sÔK©DlÂB˜¿W;AKÆa°Y‹9ÂÙ—¬aª[w±+1Š©¡‘²£±¤ƒ=}H_•3â×a«úrœ¸»Wq–òJÉ(1$þ`ɾzSP¯ÍëP§Ù13¥‰ÀÝl©¦Aãl.$«¤r)bd.È6ʢȅ±ÂÈy˜’FÀ|EØ «ò `v5«ëOÆ`Tû‚sÄáRÏ C°Êý§Ø=:¦%ÈVÞŸi»Öêþ§HµEMHª{Bú´ ‰­x¿cï­†Yqž}³“!½´gžCΪ«Ì­7«#mbW¿£ µSÎcBzàDrŠd¦S’È—õS³+o$Ú‹£þ8Zw$2Øê2–rû£EÑPÞ˽øuh>ôêYøQë érÌÔSño®OUÄÖ½ZÞX0'.2Rr*ë (Ùi8º' :{¯s[É;dKãfŸ7H¬^À´Ü+¤$œÎ²;WNyiÜDs±F@Ln«áÑ8pÍÿE÷’dO¨²í9ý6ܵY÷Åç`ëjA“+¿fÌ©•5›a´‘0'üGÃ>&ªfëh54`,^"÷M²¯ /PYfâ7óݼ4gÝÏäÁXV7ÛÉþü5ÅSo¬ž,v1y‹æm“7ºuæœ?¹²0#r[UÌÄÖN3žrî»êÚz€Öª”°ztKÙ¦gÀ‚·Y¶çÆd] [¡–»t컓ÔI ½™/ùEä ÜêÕu+,¢|LÞ¬Œ™¿s00£+«÷ÍÚ<*Œv’ *ŽÙ9ZåYþšs€Ùb¼ÃúrÜ2‡Ž¤Á¤ÍlòÚö¦e]°›dF}QMÎGå€îÁ%ÆÞVöU“–§—ôÎϯÙIF: £á·P/û\M±ˆõÏHïp çĵùhGïÝesϧA5)¡ì¶R­õïúØ\o+':Çeþðj2˜UË(á›®ûb?¢È¾É%JÔ\pÇy_’s©#- 5ó9 u•½³†FÞ°Kì{â(ê>Ãy¹rÖò„sÂ7E}ž»{ƒ[¢˜} îDÔ~\´´¾³þÜ1—¼]£/_5vþªmVï‰ù£S  Wsd{ÿpa6Y—WÔS>§îéшü*™IŒ'iu}à†i‚ ¬¬èÝP²<‚ †sŸ"ýU Šv” Ϫ«!zÛ òÀË{KìÓž5e5.u–ÍëÄ«Qmð Á¯ž±·îÑPÈ™\p1UZDÃüÔ Gd%úÄ{.‰½¶TmNª°2ÏÓ#‚òÐÆà‘;Ò 8-AA*[“q}L„ã«,20ó¯ÞwŒ4‰NcË£˜›YÚÛ>r‘Ö«s›~Oî¿å"ÌàaÎpeÞ˪Еß4„Ã9ö‡ÛRÝ‹åÌ,eõ©ÀY¸s…@øy?aq-x¾‘ófú‡pÔÚ¥Ú¶!—K©•'$ZÒ”òI{„ØØ@:¸þcøZt{ÊtDŽcS°öþo96Žðž”3òGz‰O ÷t× tS$}Áëiœ6„Ì.=ÛeŸáð°}”“6! v˜8~õCc]Cý*ºE É€X¶Œ:rÃŽ©HPľ-`¼ë¸ï$lÊ'š|•­ œô¤(åk ©òáîûuäÌïŽyÞúoeG^¿©ÿÒ˜Ed%‹†D@·ÌŠí¹õH‹g‘,Ë/Rª)Ì^õÕ’iÏnv©¥}4rô¿©šƒ )>Dö¼û)„¾xÞKÚP\.§Iì…E]ð>M"RÙîÇÛ0)“Sô¦íÄžÕè®Ða­xºDwast ”5Sû¥¨ÅrÞM½K’C ºÊÒ` DÜlF XàrÑ'RWKkBzÕ7/j¨äâO§Þí~ñ¨ÄRÇòAü9« 9ýóìó0ÕÌ{yÞ8œ¸˜cÚV†B¼ÕÐ¥d‡@Ðç€Z}†D“:îC&oé°px¾¸” EŠeÿüPUßäd/3Üø‰?I4n1Qî™ G#mGž¨¼b‰–°±“þ"ÔJòÜÒHbÀ– yžžî[€!uÙþÛ  Ò£ë‰`ΩÔÌ-Ž›•¢Lÿ&¨XãÓ¤Eè‡J§H€”¨ÖTŒ)îöªÝ¶å=Üë»T³YŒ’fK#£;Rß³;¿‹•hVž=h®Z85̃2<›ª4i÷=»,©ŽaMŒàw»<1ÎR¨Úÿ)/ÑŽÀ6öW[žå8~GÆô\Š.µƒC¢P§ÔP!áù´"f¿î³Eipotù†Æ£`§¸Àû<åÙÔÜÆÚÖ\nüž, (µèºö§¢+yÒರr—ÎêJyÎKT×"•{F´f#ÑJȯ8ù6âÙÕv>·Ç…”æn@[;b€ ßó„¿W,M[9îò«ä½{MÖB´FÔ¿˜¶ þ@*¾QTŽºL«’ÑÇ6âîl˜ífѺATg“`]"ý—sŸÌ—‘Ú(ànœ?ÜÍe†] &Ç/Ì.P8ºÑÆÍ·ð¸¢«(°¸V¾[·"E%Ȫ:½$i—ïÌâ#%¼ñw')VoÕÔ×ýÝõ§ŒÄ¶Éë,›~''=;–z~#;z}§ %Í ½±ªÖ‹&Ï?J1%–7s’ íJ ÉU 6oNõà“=ÃѾ’rxl*3Ô°!Y@Ü[m4&žÖBŒ€ò|güÂT®Xœs(Á mÿ •ûmïu°tC¨áÏç“Çguì¦U,"^m¥©ÿád»s’ÑÕëžÕ¿[ñ6Ô0%HææßV*óš2¥}Ê(šñ$oE \M/t“€êÙ¸oe¹ËP—{¸Rœp&ö¯[ô¼K ã«çdé+]¾4Áð%¿šJHÊyš_z¶„”¥Áá€M}JÁ¹wˆ¸<¯áJB0îʾImd¶´RM’Ç«y{× 7—"Àuyïô–µMu`ï/¨8ó­ËÈD˜‹w2È^6ìÊ +”]=?àGÇ)† §^3ðMyR`Š¢±Š¶5ã‰Î;™qKªA S~½Ù !øN8å@€úR¹ )›ÕZÏûg2±8|M#§¤õFfÝB|Gß½xQlõ½·b_7a¹‹LýEÔjhÙ=+9¾$ü¦ÈÉûUÿèæ)Xx%€ÓQÂ>'ÎÞ?ë#¼û„\û„¤øöÁT;57!ö®(Õ3@0ªÆmQ8{¡àÚ£…ka4¾uVÂÜe—L )ª©Ìتò™ìÔuT …÷-’Gˆ£ß0›ŸÉ†õáUEAëÇüa‘Ð~Æ*æ&¨píö.-D Ýœà¿2¸Ä/¦ÇŒ•)u ·ˆ/j4/¯¡ÿyÁ²Q¦êÞ ŒÉß‚µ‘ê4IµÕËÐܬáúæi6*Ù9O Y·_ë®b€(mTT©v îηyK,<Þ~§±4‰µÙi†p•+ëÅ>¿÷ëþ¹‘ #u.?h_^Õææœîj‹c"ïÕ²èlÀ Ý:lDq†5îY1¦šƒ›·~eIiÏERÕœF±QžHæœ6)”‹¨”|êÚvx 9ÁRå­¡êæUÓ½ ÔÜŸx»^Èj®•_`^µéO‹R¤×(•»Åaž•U„zOoWòOÑ”ñ¯éI‡¸ný…tèØèz¡Hmàÿ8S´)F ª ÇÖ‚*8m­q,ï¸þìm³·ëä…ðß)Òð‹¼Çïšèš*=œ&ŠT8V«0™'ŽÛ?è@‹Ì•&ok8žðlmh/S:VW`-úH'>Úª4 )ï±Ç0Ôÿ\Òøÿ¥d/˜sÝkYAs±?®þ! Þú®„R†TÑÀ…}í(Õ}šñSõ‡_@‡ Æò¥6äj €ÈXÁ]±á$¬Rý¥óÔ¤vq 1`!uàÖöîØ´°O2péÎUõ©CˆŒ‹ü´ºF­—\=ã'éß ¢@Š´Ðv}¼¤CŽOúBaôï‹ œcÚÿÿŽªÎª{ù„Å:Ë9&‰—ÚvÎ8Ȱ"øÂÆbòyÌüêì¢æÌžù;òóX–å{'žjÌ÷Fg)ªûÇü bÂ,x’ìöÇ{8’ÕmTItQ•òÊ•™6çC‚r@zy çÞÞ0ÐsÿÙ2ØH¨ðg¶°0Źò¹N®_Î1 ©.•™«TúèR/×(;¥‡óô§Aä}Œ#5Íôˆ.~oŒOM1Îëâ諸vì"3-çü“ü–K) ž+ \ˆk.}ºŸ¨:4í=±Ã%2õ1Ô7.éÛÛ†´6‚ðÈO€+–kyv\øhaŸÝÐAÇc+~~Þ<±¹Ó\m7õ·ܹ2‘°7ËmT¡€ÍÏ}ÀÓa–ŠoŽNV25BÇxÕTñOdü§­ À9Á+£žÓ~V‡—}±\/£­WHjÏýP]ó´±'S=Uû©cjj'kúãÉ-õ(éáœÿ_ëç¶èUm•s 2ë¤ µoüzN!²¼raBLSœ@À?hýk,V,iJUmH1dèå„=¦Ý$†êhìW‰>‚ß¼ˆG‘‚ ò X5’¨º/â3% ¡ñ<ë 'n˜nZàör¾Ç™˜¸ÀMÏÚZå®yO\㎄ ”CX©pÜZÏŸ«\ÓÂTûˆ7@‹ ÅÖô¡åeÍÊé*l3¶yoKŒ½ò¸íÈõ=£Ï*QöŠ2þù)ã&íI³÷wÎTB‰¸LÂÚW1Ûd»KÏ‘Có¡ üb‘ ¬¹-o #P€Øî³7KöõªrCêê0x~5áÂ;ïC5†…¼$€qIC3åÏ8˜ì³ˆªª*R-A9‘õ6J±¢af…îŠäX:(„4359ßÐ;éù ×çuF²jªC>Äaœ9$ÕÉ“õ©5J8¯žÆAA¡p;¢@`RÏ)zÑ×1dra3R !Ã9xÊúÜ„eµì»# PVÙâu`E¦+L=­S˜Áÿc°\¬×¢Fp Ž[|?ƒ7-÷&©›šñ'b…⊺`4gXÙ¼£8|xâç½»˜ÍÍXåÂéÛnQ™£Vðq jb„”ÖÑ §dƒ|J––…)2Á͇RüpâÿnJê/ Ïjñõþ¢‹¥7\@+÷† \ÆßÉ—·™Ï…c‹½:A*¤ª>at6 \?éßüªZp S½ÐplM÷ ‡÷= •·Ûr™=0åCm_WÁµu2ª¾©V‹;ƒj”wöиÌ^ ±‹·gQy£p‘ ˆ«­,™¨Æ9åêèiÃÏv!È«í³œöî¯";V2"#Èö1°b¥u¥žÂðÎ…„ªŽYf”Ík·þŽ-»ç2á:MNÐAƒÚE´˜ÝÌww˼Þ)…ÏÒ‡°Þ¾n)ðÝñÕîB ð,¼ Îõ§Ù…Aº›"a5ìÛ¿¼˜=›Î™ ´úK®… ´¦›¨¹­¾ÎµW…1.敲—DZkqØÉ’&Œ;ûOÄJBÔ0FÖä޳œº¦£"©š3ûF3þµm0%œÂÞÍW<ƒ`ç¾7EgÅzóqÛÓ•L÷KpÍ…Œ›`AH=†ªςޡ"‡6Rÿúäƒci{Z!»œ! 4°½¥~BK.œCêƒg~lìW˳ÓWF G¡ƒåÅÿ·”Uªbpk¬Ž¦î̈Á îø5ù>kÇÜLÜ©†yuòà´Õóïêžð«(@©'júT˜ðׄt]) 'Ø-0 »O)wòfËMŠc4ø_¯µ|,FY—*d]tl³Œgh+GÿišP°¡kô,;—ïÉH«“A݃ÈQ6)};ø ÌÃTûÖ6'Õðĉ8£ÍÅ© UK•b,ù…ùYìóØ­¸(VEœŒó|Ìjîñ#ÎuM¥—P¡A ”{û5ÔPÝB¦Ì?NkaisêqDUâæuHg°7Ù3Õv*âœ>Øø¬‚Î+Žåƒ96ËM³¨¯T­!åÙíž·¸oªíÉO›nQPƒŠé„P°Ç2ÆØP@ü5ÇÍ(8ï~À+œÌe‡ù¤Å ¢î”íÅ‚-§> jE–9‚/áÿÝÊÚã,eW/ÐÔ¯ëK€Sû¥žhÜÉŽåŠfÖ±ÁÛudG Bù)½æúo¼,iô™ZôVê-CcjS”ÄÍV/…õ´oŠæ\w‘À¥!äm¥~äk ê5ÍZuv£Üyu1Ú±¿·H7Æ2¡Û’Ò‡jÕ–}´ôr–ƒg JjºÛ²×Î Šß½ðnSI~NôÄ—ßCÜ£X³PMñ¾À± Hr¬r”Þ1Cq*²ŸtïE˜?Ñ>ŒhñÒXßgvÃÔEàÀ×Ü8[ݳ)Qô¼Þ]í©íŪÑâµ-Ft¬å­óñܤ¡{„Ï2uÕIÄ©,äF1Ћ¡ìˆÁO‚™‘aq²ÝÙ7€Yq¶# &¶4cËt©~?$8¤šD£1šˆ3ìpÏ2N±´oJ~f©†ad^wÔp›}f.½Gï“ôšj­V9§Ñê4" x!ãŸfmƒ}ùQy\+½a†Ôž>gÙî`4.U>‹ ºáN“8ˆ(º†'3îù®ÜL·£væ=Y:Aƒå;K7Î…Š7÷ï3vN=ƒξ\¢ác6/¾àŽn‘:¦ÝüJCoÚ@XPŸ•UOÉÛ?·=Hª@RáÕ>ßjêð˵1Í€üñtìŽß÷¨~8¶C.Q†•JÜ¢øêÊw4—{[‚É)ËZ—R‚|…ÚÕzN€§R7÷’QÖR¹Uù#|ýØô€­QÓ¡Äú—ñ¨5,ù~×}H¦áKìhš¢mN(z¬Z/#ÕÅ倎²Ú&اÛYCìyiu€.Ÿ° …£rÊMÞ\49—6ÞX‰6]`rl*,žŸ?íC35Âå)Ó@ƒuPžñÌ% qÌ™š4†"ׇnRC…=“M\Xܬÿ®|x°t¢Œšs³æN¡+ÃÀÒ«ô¿ð+õFÎ.Õ³vÂ÷ͬ<mÜÍ€8FA}“òt&ÝìO•êÓäÿØÆ±ñ‚Ææ’‰ÒAbVQBŽ]1é¹Xì’{:LÜGËéá¸"»2(ÖÞ5ÁÂFÅI²>[#­þþ‘ŸÁïâ‹®~/ûÈžÆtB¹»@ÙÕq =íÎÖjiŽe—<‹oD²ÜcÁªv"ȽÚ)`±}TÚvyW!o‘(®±‘¡.w>?2šÈªj6ëÈ/í >ácÚ̺cÔ‹®çÊœl°WÕ£>p¤¸UAËä•ýÊÛ8¶¬xתýºÑA‰g·üÒ ËÇ4Ø#ퟩ÷U†y`t8‚QI­º œuű§#jK]uš®x‚’Hó`ƒ÷ý¢Üô: Y1´„-‚hHÉä1}-q¢ÊÑÑ0$(—ßgûoªäGó5¤²„bæ\*}ä«c˜Y¦² ƒÝ¨ÎyEWŒ»N6|V"Cä2'baÉ 9³ãÃ6¿ò†þCO’­V=RavôèÅx*ä-š9Xæèh$ò?iYkpñ:™º´OMh¸Ñg‚å ää†kjEKtY8¹‹ Ë n~×Ú³ä–+¡ÉùEƒ¬¡± •]mK©kˆ\£ª…nç{ÚŽ¾Ùªþ[FþàS[^Ïâ6ùǨhœ®td°LïïÌ,ƒC½­ [÷³j΀‚í¦– ~²ÀÃ7(ø.¡êÛwPn¦²[{÷„¾à”î`md/M¾.—S¢héqA{ t~û Ð_ÿD./¶aö¯§šs+ß{ €þàÔæÏ\TÖá· f ¯TޝAUš^€ûOÁªn¿lâ¯Ô”E¥f¾Ð$1ÃÌ/ØCåîHLíe‚lŽQ^…,cº›eHú|ízîâÌ…ÓÚ‰ƒ¿z ˆT Êôˆ ^Ò[†4ü²Ó¡NÉ'. .fëõæ!G‘1…†OtJÄ=“%ãFêº\íLÛ4›šÍ±4çaýémsSNgô”3ö“WumÏz;£€Z…-Q7ð¦HôÔÀ^5qÜó´ŽÜÒŽÊ«{ zs†Vå­‰.5ȉ×I8÷3„Kq¸Y!p˜Hc¡|åÉ©ñTÃ.nb_bç/,ߊˆ·tȽ–ûÈ™Aþ½˜q=-ž&³Ò²=îc6V!ÔJ…W`쨪"¶ÀäÛ(3OC›­<'åhZ0P,”ÅL+²]W¹ ×x°•ßwóˆÆLCöø¬Ð"‰pWþQpQ6ï(–ÈóD¨Z 3¶ñ9±J7ÇôÆ£€E¨H‚œgøñò“ˆêõpæîÔ0¨í˜ Pú×µ.™²~e4J¿D¹2ÌÐ)ZEUž [?ïX1„H °b|0šðO1Ïõ¾Æ §¡>êÏàf]—°½ûüWYM‹¶ºÊ `M¯Ä[ÚêxD#«›Õ 0^¼¢¼`K±ž{ˆrݲ¶¥‰…¸ ëüîǺ••F^z©‘àdÛ5„³ ôKÞF}¤Ì+]£¹²ˆž°^lÁE¦hâ58AWçFú‡Ü}C¼®•¶#þÊLý s¸ø b)Ü=w5"C(´AëêÄvþ3 s§éК¡È=…¬+'̱]{?ÀdC;Ê“IΩsÞò”ÖN“•š²§éüN§àUÆ­ÊÉæ#QŸ†ïõWÑÀ5 ªKèf_,¡­<¢ö„ÄO–zO@DËk ˆêO[,«ÏQ ø 9â=‘Œf%­<¦O«þöÒ ¥Ýcäɨugñ.·;jQ³4 ̰!¸íå•][*ó:æÄXÜ [|Öˆvo{Pí6‘H  à'_Fwœ$¯>D–¿1hfJ˜7…Zº[AVKÄhƒûÏ&rš3á§ó2êoÈ'à 3˜´’8˜rªŠ²ÏM:9×.yëÈnû6¿µ‚š+˜¥;˜±}Ð*ßahöÆÖ5Ó@‰Ò‰ \›…c—Ý/aš½¢VæÆüÉ%¾&¥JBÍÇÊæÀÐ߯…0們IEäXêDæÃpœìVh¤íºÂ˜Åã]Um5K£N”ìÒàxˆfÝ éõGµÍÓÞ ènµÓ\Îø—ÎzJœT¼ *ö­9ÒÑF)j¦«l=;œw˜GüsRÜL²}„K3w,³·û† ¡^C»H…`¿r%ôZëõ Ô@¢„a°ÔªY'Î çù©n(jN¯=¨˜1ñ6ª!iu7û}‰®u$Jį„ó‹j&(Þ·º—/5iŒýVDaž©Ÿ ÀöÍå uŸO~BéÇ]ãO<1¢Ñ×÷u»HÆ·¿§w››Mk÷~ÿ;Ý·¾‹æŸò˜é$c)%ÊFR÷ȧ¥+ü~èíÙ”Ü&æô==ßTÓLÔ>:nwÞœv¸T›%M_Õ‹iÃmÙ±—UØNôÕu²/¿ÖGu™J2œö év—ô‘-îÁ)šuGÇ‚$Ys©Hå§!÷ÝÚ©Ýi–F2{€CWRÏÞE@]~{÷UøŠ²Ò:ަÝx•Ru)( Àݤ†ÑÚsœ™k5©…'–°«#‰Ó‘¿aî0ŠÂœ­[ž‹šbÃ…N¦Fö—¨–§=Ãá‚üÿëM  è‘R$dÚÖºâ,ºìéí¤ð÷Àýx÷0ÌlñÐgñR´ƒµÖ¶ ‘w0V—+÷ð&m¶`t4:9¦üII¬Y|:€§öVÑ3ÞXÕ‘Ìœ$ šFaž ¬\éÀl—…±Ë¦í€ïcä ÖzÈ×2ÕZSù܈ï§L:j’æsæˆ~³f·>ùy@b ðöEi‰¦X¬á˲Áwæ þçåÏYes¶Zý9ñ³yïœ$ˆI›ƒ&…kÝ_ÿ¾*o¥4ÏÌUlù.&ék?B¤ =û xQz5|þŠ™‘F’µRïÖèï•¥,í*x%kkœ§=ĹAª Û„ð_€kY‚̓€ËáÆé}g‰|d7n‚ ‹G'IËûG] y†ncD+Ûð£´ßk@æ7·cg¨Õ*uC¨M»ÂJ¼Í²ôúÄ„¸‚ö×Wé×§–}¯\ò¶ Ïb³&çðˆ¯û´sæ­8 ÍY7û‘_&&ç!Mý ™\Eµk‹ÃöÛñ’Žè¨æ•|CÀpa‡¶Äó[ÙíßY1’iОÙÛC¶..áµ~­ ø&62(EÌb¤Ü"M2ŸF,¤ÈŸŸ˜ú{6 .¦b>vyìœ@°²¢Y#„'@õ˜r¢…ŒqÒfÔîÆIU/Ro¡è©Ç˜ŽæÈ8!3O~+ØÊxµ-“å ñÒg¯ I[‡}µì˜Sä,gjìÂgÁök¨5Óx'QWW€º˜ó±“Ç4NË1I«¡É?ªa®I–³®DbûEGú̢:â Œ²&ñ¼vH-툜°±Y4Wܤ‡—ñXLÏuè“_Ð9~ÁM—I.=]ŽŒÜÛ zc+ø~àBô¼x?îÀ|×…™¯BÁWˆ?Ô†4Ô¹ÕV†£C§!AêUi~`ÉŠñ©å çß]zus(῜ Oò§t°\%A6¬Ã蚥y!U¾b+.KnËÀLþÖ¿-¼L$ŸšBI¤„Y-¶öcrìÍ“†ê‡¤mpu.ÿ÷hÇSzÌò­>šùÉôëqG]\?-1‚¿P@hŸ—ö9Á¹h*.Ø¥9ﻸZÎo0j„kRe*Þsø†»ý>[‰Ðö‹^VðÖämêòý§çÓÜ€*Í{-*á›ÇVƒNéªÞ󂘖`PõzGýè©[)7_s®ó´¥§ö9¹L#eþCÜX²¥ý7Ò ¹©7 ¡,µ2«„÷ò%0m¯ôŽºòø=¾/e™#9ãX~BjÝ%UƒÑñîzÖȼD—Þ”³×¼mÏúÈji¤Mç[«ÏáA (ÍýIí3bÇÓtÑieèWöaLNÕ“C݆úœçaÅMosJiê)YÅ·ÍSW0•+ ¼48·:/­Ò+[·Òm¤†År(î)lçØ/Ò§ÄôQmÙ¾ñD3nÌG˜¥árf/îîu“UôYí {ì$I™*ç¼­­w—'JUÝL… «•Ý嵠̢'8 É¡«‰‹è×'6ÿŸ¦¤ä>â¤Gê+Q é­Ë²°x]ìVÀe°$Lô³Âª~Î6IløiÚ^Uz!Ix•s@Ï’·Ý‚ÉüÀ÷”°vŒ„ã Ûô%ñ“ëÒø·Ü»YZK'¦~lZÂ/ñ ¹à}!ôœä—Ví€Àc¨eüh¦ErÛÛ¼{eLÑ5‚vY­C&”ÄdG:´lBuÎ}/¨þ®ƒWnȇAôj„fG›ä2nD†»Ê-gíÒNh‡…Ö.ÚŒà'VÛ²ëg#„ÍSí‚D¸ùÁGDáÇÿÔ”ïQ+kýP; …?_dÊäOV‘%±<åPKw :(€Är®´M9dãA˜ §œƒ1kï­]BëôÂlw·ÊŠ,ý¿¡åØÉtü`3KŠZD7нa53ö^Vž~¶’\(‘iv»‰Ž»ÞÈ›ë›ßÈ'õðøVØ}‹Iµä{ƒì‹ï˜~Q>Û¥H \ßèIoò)k¼ûÊ’ÒÜÕt±ÃïZ¨%Xê@rQñ3çPÐÄrm¢Çw"DI„È@(fZ1kT‘V·¦€»Úàé0 릀[ü4.¡ýöÜEk+Ë öë M) è´’/$õ!¼VQ²1)ÃêœÕƒºYa%×:³0J•(~„E©éüÊD#‹ã~‹ÅŠŽB”…‚gÔ´5É9÷¤åãÒÂ{éåWüwDŽûVµ +w&b(Á1Òj giYš¿ 0›¼²¼²uÔeée"[Ê V€!N8æòƒ‰E\WèÑP5Å¿®$=J»OàÃ÷YönÔæ ©20§ëqøö_§ ÂŽ`˜¶‚P"ËìÿËätS"I]Æw%ã£bg|ÐÍ}¬´o_cQ¼_F4¥Lš¢pýèGEÀ²Ç¡©¹QÄ¥.¶Al%ûãV}ea9ë£×l¨%{.q{æÔ¬bÆç+P?Ã6Õœx?ºVë¬$o|‰Ï1Äž;Ü~гÙ€½Îl¬fÈa¹Ä k¯_YÿÊ8] ¯ÏS&p‚“?Új?ìÓ¢¡Û6Š4¶âæXwz¸ty›m:tM6êêˀ žÅÔÀÓc"³|›”2J 26pù5¨^ˆG™»—Aµ4Ø%hW!§¢Ë{¯ HRµ¸ðÏ]Ê^0ßt‹¡³6žy#m2î,‚c±¶uqŸ„€‹±/èî?оg\&†c ˆEêP*‚u5PŸVòíüDÂb0ˆ"±&î à€E‹úÃdï'wLMàŒIXoâ÷¥e ¢x-ÞlÆ ÞŸ}ä÷ÙÕ4h}º£*Æ»ÇxlȾÄë0j¢è-Q.†üBŒ§3 («œ¬ÐŽ· Ç ª• 4ñw}vš$¤ËàWä&[šZì-p¥ûON*tÛ ¬®ŸH‚ Kò [$ÿ‚¥:\ËÇ„é–Þ·Èf™[â>SïÊ(…¾mj‹)FÊiÉ8reÏ­·µ‰§åìo´bdrï’±¹Ú»µÌÌRßã)í“Ó¥Ò?¬€% YPä,É÷Öy;2ÓV½ÍÌaZ hü›§¢€(=ôe\Y{·Öµ‚£“LxXd ˆpî⬉Ëî±h³QÖ‘“š—X>î羕G؈gGS릸ìXé GÏçó„ûc=f–¸ö08GâxºC8Æ1àÉ$×zQ`kÀÙy yX³’”†óCs”a¶Oÿt]YDë¨ÈßXÓÇ8¨{¬j~Íq2âÜ”4×胢B˜c­³åç{Ý5–¸m(hä·I5p‹HðÁ`òGŸ§~p ñâb×¥m·i¯¾¡´ˆ´Yè• :·Ô#çä[N³^üø2¼LE±{Í;À —Ÿ³®Kö]DJ¦y¾´³úbõÔŽ›-iMéV+§—z™ðèv ß#è0 ƒ=ÃÎ$dg>…©)tü£"W+0¯k$#M’)©dù¢k›c1'“ü»³‹Íú>.ˆ›_8‘­=ñ¸ðÖ«]‹R<šÃæR¾ §x÷„Ó(‰å¢Ð¨N0Íx$aæfø«B gÀ¯ÙŠ©3!õý¿»à>o$耿Cèm}Q¢™Ñçs Å‹Üß`M¿åÄ·üò6gø§Œ5Ç¿Zà#U8µ×\—JA•7÷HNWé .$g‹ޤ`®ë¸Ð¡;nÔ¡&‰þÜZò¾×m©£Q»÷ƒs9!Xrd„ŸÃB0®n’&ßò<ÔvBÝáÕ-FY$yõŒz ðdDz•KÙg·ÓÎÅâ^ö1V ²ÕkB2¡¦UÖ> ªž‰€›BZË ±÷õ·hˆ¢P´ U.Î%ÅÇYSêÕÊ\…¡7ë ZAt£,PZž¬˜†ùØ ¸x2ÖÀÏ?ê”&Zí_·¡º] +ß8¤?uÏs Æ~™ÿ’˰=ZGX gÕ-Õr¯3'eæHþù" .Þs1fÊ? ™‚®°’NþN”Â~ÍÒÍy¾…qŒª?붆;ÄYêú@R;àHåŽBéueUdZ.Ø8–“oÔº&W ÄÿBZjr”»¤a¯à^fãô ¢ âB&ø¶êKàr¡äÑe>(P¶¶ºè>³Pœ©±ˆ'²ËoŽ9o-Ïõ2„Íü{Å…õ( ó ;rxzx³ ,85~»’.ߨ }›v2¥ÚSSl=S}½Û@œør¢žeɈ;­æÉo&€Ô¡U24DfŠÖ.ã+º4æ:ì(Â-cÏ.¯ôžÜôœq¶/iJ¨C3`@612¨'Õu€¸?AK§@ < ™Ùý2¨m°…l …VTò‹\Kr?÷Õ ,öB¶Ó›Âs:æ…©2ÞõÍü;Ávi^ÿ}À²Þ‹î°¯,Oâ3ÁBu^v¢ æ¤ 4 ºÍr{uæÃVà c‘:ªàäV¿›jL’vi›_Ì$÷ZKĨ{œ|Γ3m‹$û°,eÌ`çäœz$zûw ­t|äRì!Hk–IÿG å“²Sr†˜M¯å'ÄXulëÆqàqÒ1Z;ÛúáÞ- {ÓA€¨ÔÍÊÁ6^‚ÅD+l?´ÔÚLô[XÖ0Š•¹u²±^—ÛCcØ`ÿÍ•?{yYå¤;åPK~šO¶ùQøGgÿExö˜Dƒ•9š¥G‚[nÀ¥Å FRýÌ+ÅÑ€œRÕ¡íÂR˜‹þiýÈ—ÁP!›Cz°Ù:¡ó±S5¨zrYˆuß›ø^lýØÉ÷—í‚’ÝÅZ{»°yÆ9ÿoz¼»!óÒ`\æ–¹Rɾœûº¤ê êm¾8ˆ¤ñ:ëi;ÞBfàYƒ}’X_J-â¢éª fA£³²¦¹wQh— ¡pcµ|·†¢¬ôlºk³…w4bž8_¹ƒög:[þH™:5&HÓ†4jn¨Ýýù2}F 8l=ö<¼)÷,žcϵ¦ ÿ,Å·êüí¿Ã˪Dìá„Æ²‘¾%&«tO‚# Gäfqëè~î[Ñ=w ãÑ:l4œ¾§Dï畬ŸµöSz¡["ªT{¨+¾¢°©nà·Õ„±ì”›wÆW\æ´iÁ…#|9¼ÌâW‡Œ¾Nôt¦Ðƒã¥ŠÚO¥6»êjý‹ÅŠêšƒ¡jCG°±,Vx&9õ‡yŸm˜Þ͵Ô0ÖeDÇÅø†7{ÉA&Ê鵑D¹¸^Òm/¤uSž;âyÆiNÃg‹tÙº {Í/ÄuïY;IBŒ¤LqžUŸø%®¹²dGq’«?7D3ÃapŠÈI¡2n°Pƒ¼QÂË\á€ïv¸p¹”XŒàÎåÿ)â>v°JWÅmôYJZœ¨Ñ­¼N¡*ZÞõAª¯d†ÆØj·ÌhK·®vÔYAÁBu°Ï¢põøìˆa+Û -È.G‹—Kà{ /Æ#4ƒ­ý &"%‰Î~ŠBu J$L·—]Ê DC ò”@£G6œü¿Ù~¢ö›Tó=ø¡,U·¯0ídôL¬Jü8…­-gl³’¦õ_ûÁ;W^a#®¥”Ø^‰oam %å>¿uÊ5OÖ|l©·°ÚÛØ—ª‚!£Ó¨ãY„å2 F¹ùUpAp&Îm„~Ó’bÔÜÒ²oRü…è§Öv„ùSý¢ÕêðRë5²ïôM'ÀG ¤iLfÕ‰âð8N@úøgyØxòÓa'«ñüô?~Ú™;C+4g \=ëƒØÏë ˆ^°#倧B&|:ÔI}MÜÔµä™]\æ 8Q\£bV%‰ïŸï3ºi6E†²Ãˆèä%Lja¦Œ2Áã¼Õký(Vá:J?-È¡¸ÜÅ_×Éh[ÂTO3˜±ÑèÉJéb‚½ë+€WF2T֙߈î‰ç9eï Xܧ_‚ƒPQûÕ}Ü8ÁJ •W¾hypìÜp„2 ܩݮ’Û1ÕÜ€ÏcÉ ì¸Õî@ª™€NÅoÒƒ÷ÝÚ” ÛøãO&ØQ;5•‹5cð*c¯Q2/ϳ@€€W3¸*,˜,Ë"ºµ°ùÖ~c;u¾AWÖˆ²D( ˜ö'©‡ ¶ØNP ŒsŸì§àêêãXSºíÚÖ’MïΖ÷{@² ±¯2. m²zÿ¹"‹Ìš_¸þ áÿ%&F„\û‚^  Ïx¿6 ^ùaáå( ÐoxI¬ˆ’{«åVmlQ“Ï >©¤uí[ %ULœ J ¡ûö{ƽ£àbœ…éìg!´D ˜Rx7ùµp™0šé©U›f-œFt>Ì$z¶¬èþ’à}âf¢jøu §4›·&”@và q¾+)¼¹Ëã>`&tÓ&ž„,׎)ÿâ ‡7Qùޝ!f¥©Ûz›siÐÆËíþÀ°lEzÝt$øàË÷†áÚ$½¾5É1P—³¯0_!(¦RߦäÃ…qqjâ1¤zÁãSÙfó+Q`A˜‹ËnÑûöFZTú¬¢ÿW/€Ïù-”vQ”ü§Š¾{ù’Ç=ÑÊÞ)z Vf(ZçÚÅÌëïÎ ôêÓoŸýÓ%2}ËŸù@¨¼…éã+S§Ûù-/™Zîi³©J2§¤ EÖ{âoq“óK¶°+ŇP,eÛœMŠÇ뤻ÒÛ‚PⵎŠè‡­¶ yÿvÿd|ǹ«êÛ™`ßdC¾Ðw1Ú刖<ïxã«Þ³†:qÜä´E ™'6Ÿ~€{iÈ=è;Óxô t§´sv¥»d|>oª¦¨âqc‹ ´Ž$ê÷-aõßÃfFÇ”]ñ) zø¹é—5`þ¨·M“ˆ¤ŠY"à¡ðØÇ¬ ßnÈ ö£A9…¤`”¹)DlÖ f$Ȥ'w·a~Z]ÆžgâýµÕÕùs"ÖïÈ£ëî: yQ^J÷2WÎfÒS%¹Ði¼´;o³¤¿ìS:c¿,θMî‚l» ˜ß$Zt–=Œ¦ý`­°ÁÀ‚D‡­4K˜‡Âæ 4ªè÷¬ÄX…ÕãôK0_iËHæ ) _%bêúû¹ào¼½³W “Ò,N¶ÊC!p¸ª»bH”FåÐ4ëøñfB|«ûü7§´+@*ÁÊxõäbÏÏæ-rߦÒ*,àfçÈ2Zàètà¨2¡­õh¤KÔzÙǹLxo¡Š^,=t„vyyäŽ(®{ä¯Ñ+µN< 8¦ÁP38úÿÔï×d›É•¢Ð‘ ÅåsNFîöµÑù§™·,=YRÿiåŸ÷|Žvàe™5†’‹CÄ6’Ç`ù»g/#¯Öêôáo’?<$©Þ>3AïÄÞJ‹7v«ÇYÒš,oy·Ž›Šãm'üœ©óÏÛš5¾o³’‡éJ”ÐѲ/(íÃ'»®$|:ÕM¬nxèN÷þW±Ú(}'B>—k K‹Ç"­c†¯hÚVˆ,Œe†Î¾âNË»úCêòþ öèÀ%ˆaE9íMa¨·jýø|ŒQÈÂ±Š—Nh"rÍKù¿ý:ŠmH)ëg#’¿.—v*÷ÃPý M™¨e<`²©Ì<³¥7 ¨Y[ûy„05â 8Êã‡5M°pËûÊÊbH-X+4ˆ†’erÖÈ‘ `6ü’Û$ºæÈƒÐøÙ ºy¶6'Áéö±Õ”{i¡\2Û\¹Ðâá`ýñCJ’_\ÑIh¥yÅgRì^HÚ†ÁåL59b¦ ñª‹ò—qs·w„ÿž Yþrª‹eI*0„_ý<‰z§Ç#„ÝJ2À^‡­þÕ‡r.($·U5f Í9ÖëÚ+‹A·ï cx.ܧÜc,Ø´¶šŸ®AN[Çó"厫&Ãd•R(küèL¼Ä”V„/·-¤uî #+"…×Às§d¾Ûdr¶#uï0cFx_º¾.ýÔ"K)1=Z£úÎk£·¯”³¡°hež0DÜrv‚m3L`ÿŸ?Yâìi¼ p™¼ÉXêþ,ü4¸^‡NŒæ©º¨}É•FŽ/oÁ¢¹«™,£ùo¸9Ú/rËK.µò"DIùûG^ŠJ2} ò\Ö(‹_*¸ÙŒaÇÊÉÆ5„Á0Ù>›±Aü™ü½|—òÑ­‹þOšÛ[>dðA´µðO0•5:Û€“CW™Ð,LÊ]Z†ë¸J„"s+}?c‰+EG‚¦L_OüAŸ&Yñ†!UÛÏaé•È×Á;¥W}E¨Ù5@Cs<»Ú´­Ò|¿{)ÙOM_s=:‹Ã•rUÂ^žþ/\ ø4/6ÃÂKß8;:ªMä¡i<º¿çÊ#‘öÌ]=:÷J{¸°4t÷Ë:Íf–- ýrÇõ>Î!HÜå7HS$ú™ïW*¢MÔ°‰à5^](¯Øœþ!u/¸ÊÅ%] ¼Ðfö U$ü}897!([Âk ¾(â9·_U•¦OªoŽ?á‘õëñe‰ÔÆ,ª^ïóèEËjãþG¬Yz¦ñÇTߢÛ=œš¸¸–3ûË/¸Ñ„h£Š—”øí•¢4t¾¶Ú€çv¶TÕšN"·§€PëqxÁªb¹~ªÞú›è ÈlàKü‚Ó6øÖ礂ú¹eMO¾ü4Ëà’ÉÕ_Ó­Ôïè|g÷gQKÀuec@$Dì:^S¿Oå÷Ëqª» ˜jȦY>v7üµ´v‹UÙžD¸ÅÛŽß§Ç•lçεõ=%&%í5BøøF0üY†ìlóm_ªpµt¸nö4«úþ¦^ñ¦“o †Üꃬ‡ÄírÛµHabW wÃs*íG[¦ê=í¾zè‰åù„î2b\\ZEAZ”¬§T÷¼€¡…¦häjh!-ì‡*Îv<ÙÐÖŽ<¢­„€òAOï™ÒƒêÒXàÌv¿jl*žÕÁ–Š2÷,ñ°]ñMìØ¿wÁè :®<¬†¬V€ÚV¾y¶Q%´¯ÎÄuÀËGpôÍÉÊwC¼KÑûôæiMÆ=%µ¥ÐTÑØÆ€0ÛýÊHÕØTceµËŽúEOçËÔíkk߆ã…ùÙùûà i/ÆÎ>Ì]— ïIN#Y«Ÿy)‰-±¦:ž'œ®†'nø¢Íþ¤Æ·Ü’¢…§ÿØD­ºQ7vŽqŽ,¼dS“Aã•g>ù€æo.ÙWP7Ê1”CÉö^v5]eFÛì3tb*o9ñÇÅ®C¢Jàµõ vkïùÙó÷=)j¡YÍßË"œÓË:ýlùÔAP‡Ü*wIQŒ?` h[s…Ÿ Ϥ*F1ôè¥/]là1ǃTˆ¯Å¸\³¹-­'I:Þ-K?U³‹ %‰(?si½‘ìz»˜~¹N\Á戩t ªEÆáòëC‡ZÉRG%ˆâçô‘9ÌÚT”£ïµl»³|ÿ>™aíocJñ# Û(äg4›mtî)¥ÊW¤“ܶVZf€ÒöÜ+„h?ÃÈ¥NYsöϼa‹7D­‹ˆ0£Ri³=¢†Â’n¢§Óqd îÉv¥wa’ wxÙÓ/ -öÞ¢ŠŸ¯Þõ>€ÙB³úv¶Ç([]õšýq*B¼Í•µC.ñVêGèP¢ÇÊ=à~ šíy-Ye‡† èØ ×ó‚v±köh­9+Š1…OeE·°¶Ð"Á¹ÿ—¹I®èƒÊ5z ÀìžžQ…— ƹÁJ˜ñšEG. t(è6u¹{²õä4ÜÎ<öµ3Ç*ÖOζQÀ9ÔIúÑ¢62xd¥¬zt ¥›Ñrÿʨk=\h÷ëT‹5å}²ÇŸ1µS‚ï~»W7«éJa,Ìk\1 ,¢8–†Ýå|ZkX¤<«â128”O“ú=# ËÃPK*ôA •úIÌ[$Ž»eNÜ 5MÃÊ Iv»ÿ{êñàF ï1˺_Ÿ`U.JÄãÜÅ ¿RSÁàA¦:V ˆŒÍz+Z×㦹Ããž93{í í}PÈL ¯–ÞhßK±áP’+1qBr;Nt©PˆæfÙ¿¬ îR#9w©J¼¸b9büÞæí‰-aBaÿôåÏrVŠ›Yø[1¬1Grg~Ú̃5ãÇš~=L`È5Ýó¡k¸ÖÌ^¸õv4Q¬eMX §•º•ùÀu1Šªù–ŒIt÷ú Š&‚Á]·+¿\¤;èÜÅÇéÝÊœ—âË‘gGnõȧÂDsÞ_»Î~U)ã굋áDŒwËD zå1r“+™=QBLÿa÷•n;~SïŒ4KAOu»ë ðlº&^åzEØOòÑÅÓeš ¢·Úð>hRbÐm+¾ö?WLB£Œâ%WsžÐ0ÚJ ÒM  bP'"ÃÂt4ñ³Ë‹3Õi°>øj·ÚÌÊñºÜ戴Òp„yµÂ[îÎs°²'dþñ%òE¬, íRkßjÞ {àB–ØÄ÷ŽÊbuœ0ÍKÇ»±AìÎÝLQáµ™ ºªŽaÌÒTn3û“æ2%¶0Á¾Ôµ³=Ò÷l â׎X;¶TuAÝ|z£ž^eÎ)ËW7Lºÿ,¼7q‹_8$ÐïWT¾x-†ÿ–‘)$°ã¼é}_šYòí‚gJ06©Òi¡‰ _À K‡71/øGË¡5Ê4â,Nª¶‰¥r;_ØûÉŽ³½üä˜Ê5ÄÈ]}ýmÞHÇ—½+bl +Ò® Zd­_yüL¦¨ŽlÅS›’;þ¦Á—{±´ •Kí'¬;Év¥Ë…5æ‹¢ìTb¤·2$Å0ÿNö%(ÅÍÖÙÅDW¹<fÅBa'Øw9ÿü€h8›®/ÊYJ}ëFéî5ƒÄ¦Èk›´­Z£Žýë¾ °EcZ€D5ôé}9ÕÏ8 Ï,\A¬!Ì>fyˆC™0ÿÉZE=\w^†XI]õÁD̶†"tú‘¥–i½äeå‡bá‰ã›Û?}ºÂM†&"8ê<,­oËÚiÙ”ÁÏaœÆ€ Lë%:ðÕ9Í#W_úW—R<{|=¼Œú¡ hÇ…§‘¤ÿ -ÃïÖK@¯€ìÍ5ô—Þ‹Aöê°¡îW½£Œy ÿýN‘ÐÍ­rUûÐ(]êÞ•[„0Ìr¥dãõ¹¹ql.¶vµ¦ _? ß^䢱: c‰FŸ&Á78RpæöÉŽóL%‹$1Òu…LK9O%W›ûQ½ÊľÙnieó›P嘇Ÿß/°ÐqËö —UëËÅ@äÇ(GD^'„”²£H¼YæÜ³3¾½Úúoã¤Ë?®¯„nÒŒä0Êáˆx!ßËy&#Ý'b½™ÛØâ ÕO¾®×ÇüÊLÍ+PSôöÏ~åZ«äRqÇ4(jïMa$!gÆì9µAjNËds®X:î_šÞ,~:ˆžñ“Lê 9mù…O¯’Mg¾ÏĹNíù#Jƒ²Ü-t¤eS|—ÕrØø?FX°¶éÝ2Œf±Î5ž»`Y €Æ‰­Ÿu/×BVoêu,'º‘¬nPÈfJÌ~Ìo-¨5©Tú²Á*ÕbþÚ’·òªt¡7mY¼©› ìX5-®f”½6û€ ¤ÂC:rúŠöæÝð­`–ð~ý`­è~v]þ¡I¶¯Œõõçå„ÿUìñ»¿¬§µê}Ä·cò[„ ”\²" è"  äKD%’™4ü+×W½ƒºÑöð5Üsæ5–=§£»_ÊJQ|rf×$J4wZ/£VÃÅI‡ˆ€¾`ð­”F{ûøÉˆsìåtŸÑ{AõÜJ6ó|D«®ÿ¾îîÅ „2û5µ_$Kžm§6å÷¿í2«•AÂc|ß ­XÚ:â²9c£•|µ• G> XÑïxå‹G¨kðV¸œ4–Äó1>›Ç’5áÈ4¹=Z=–ô€5^ÂÌ·'U@½*•¤ïV©~à×ctUñ…¸+Þ5ÕC9tîÛ û,ûé&Z¶ ]6æÓ.~d™èE9’éÇʶù¢‰?“¦ÝV5~O-=¨o™…Ñ·y¦æfž¯àSž„´`b¤íƒ˜©Y-ç~3ÓÚ±ßk«X<ùÆh ÐéØçc¾þyÜê2,!z¿nm|ê²2ðOÿ ±OÑ“–¹”Üðé›qœfÅyàË"œ”Aw ÑöŒÉ#{êt§ZÿÀ¶â@YÆç£½33¤(„H@L6›ÍÀ ÙŸ¨8Ñ!Æö£¥ˆ†ˆs™%„Ù-Åÿe"–ÂïÈ"eGr›~Î „ W`Þ›l¾"§’ÒD£ô¯r8Ýü]dåª^˜_6­%ÆÎ?u×%Ô…É(E* \£ÿA;¡é¬¹òˆÄ¯hTƒ'¦Io´ÆmC‡ÅM_Àií²ì>žt/Ó¿^ká ŸŽÐ·m ™±¯ÍðØÛ>së›wäÛÄÂmj³E†Ñ& ÕªØŽo•‘¡;í&JŒ5ð–ŒÞS:‰PÛ!9¸Åö½„6 ÿM:§iP¹ÍrU©w],_Ö•³7#…¹ /Ÿ°S§7&i0á¼ÚŸOã)YDdK.bÍ2-È÷½ûM³>ü¶ï“JáÖ8zqM“õwO@’¶lÖqVBy">å:Q2'0I*ð÷1*GQ”_~u:ú$W֬׭?ðƒÎõöv*—H¥00Eqî 1(¨$ÑJ"ÄÍt/Çîì³T­NõLîÁ'˜!ºBsQO)#ë rFÔõ†íïJÔFvú(T[ºúcÙî:ígd}4•ƒ³?Ä8Gc‚÷€ ’ÙÊgB9xÖ³°PßÖ?Ö«o[{bj1¹—Ó{"ã·—¤ý[c­ûŸ?8ïmæ ó¦)xÛ‡4˜ÊçS4ù[wz—‰Í¬ð}ô+Ì9~G´h‚Ó¢ƒU{8^p$ÙqÑ,Är)§‹þ¡4‘65ÕéýjÇMU‡ÞgÌ+·Ž>…N8ÅsæËŽnÖ¶¤œÄ(Üsgl¤‹¡eo™‡2Å’™CÐj‡ydãþ뀟}äf:DZôþõ‹ÊÍ3‚ü«=MPà‡˜¡/Ø+.¬0è/4oÿÀ´¸ûã~ V)¨K3;=>{üE_fpÙh‚Sr—1Ý>{ ï˜ïUô‘ÚnÇÇXDsRq%3f1ËwÛn(òk…€\*ki¦Á@,~ÿ§éÔ7@!# ëmØY¿ÙÊ^á@ñ‡žk'ž¥44ø%÷nm¸z§öøÄwå1õ‰”´n“RM3-€J¡ÈbÞÍÆ(w}'öÏfp÷a)ë•Gþ–ä¢Èh;ÏSƒ1´/ȆR÷‹»ÄÐÐÂ4̾*מAâƒÚŒ~67åÃIoÔP‰c}Ž™ƒCV!• *Ä ±©™%"O]6˜{ƒ,}¼›Y³#*K×+T…CZ Ø<<Ú­øUôšÀŽ¥’#ú– ÏtG©fHBUØ!üÔa]#0œ’•ó¨º+#*cºGÕÓªÚ›ï©üÅŽR<ù†íÞŠ A<á»"¤ýΰ¨?îLYr‹ÂU:el¯Y€<£ùqHt§â»DáAӷ䥢P{ÈnÚæ%ký×x,åhQÈBd•Í$WÖŒ+…ÜÈ E€{­H”ŽAØgPñ˱뛇ËñEî‰yÖ°¼ýµûHöîSŽƒzìs`¦‹f§@öQ¬úîž±díÙš6%O‚‰Áĸ`‡:?¾âGlIÛ*<©Ä„KTìfî“!×PëXs¸&=G2;2zWPæ[W µÄx Bñ3ÇKn£ðÍKùf#=¹dxöºö«ÎnøGL§®ÿ³HøŸnô¦_|m÷ÖO-ÃO8acAÛõPdY\B¬ÁØÇÉÂÅ<««Þ³os…‡!Ó±oõ†”ø¾Ì6Ã~Bv’yÅ%=mqÊïÉúÌïN95ÈÕÅe‹™V )£«®Ø ®B׽؟\ŸéÁ—er=­·(RÖva:b|²ï½ôÑg÷´h6ÿ•íö!þ’àÒ=Ñ¢³¤â/¤„Lz¡ÔrhåöJ¸  jRØQ”x^º.EoÕ@塈aËumô^Þ[k#k0r©CE`3á&´°1;¾i2Q`Mˆ¨È=:ç«0¶ÉªŽ¥ÄÑ,G¹Ð&LÍ´½ºPr…v¡vUJO_Šè¶X6´Ó›Íéø¬=oð¦\ƒ®ÝÿòÀß›e"°â8©¬Ò\oâz éþPü‚j2RNœ=¬á‰®»jf3”ewnj½äl®å # HT[ŒÝh=?3%’¤£ºÛ‹ß[HH΀_âWÉMk7(¬rdŒ¹Ú %CãTßÑ›Ì\â(ûf©>ÜtA†Âö1÷Z^dÅsŠ¿ú7ÿí,LJFXrœ~ \‘:©ë굌Ç'û}ŽBd1÷pOQ:%½¤Ž­ðð yc¦XµÞ¹ b+ñV¸ š«€—— Õâaô9'ág}ýÊ™nslü¥—8¬^&ÛDp~Ñ©lq¶J—uÞÑ*vÛÍDIÂtÇŠ¾+ 5¿*øó oÌ{JÞÏõ.©&›z/ D“/I+«ißòåñIªžõ« ðS ­^6žndѼMB–¿ŸØú&4ûÅŽM2¡f‚Öxî-,÷qòªŸqm¼)%zôÒNžÁ*1¨S´vXh»Fû*xRÂõÿ/yÇ ~(gÔm„{õÛ—Xí2ÝøIèzÞ¸Î^J¨# Æ"hBÞÒ îtoj”ð\©´é®j ´WEÀñÏOCˆñ!·ôFŽNåøª‰ª¼U•¨h¶†“ó0LÀן /®ú&^¾nñ†o(ÁáÙŒ•3a„ù$'ó1?ÄÄt[gŒN©l£á´ê£â]DÇgò]¹¬õ«gÙç»cÖ‡t˜+kÜïõ?ÇU¼iÏ©6Îåbš¨Aø ¤g%7(ZÙ\ZýÈíº¦c… D zu˜¦+,ýªö\dß³þÖT7?yä!'—~¾ —`™Ñw|ÃkõArQä|¨ö!b+šsË«e¹¼ÀF2ƒhåŽô5]K{ ì0Dñb]F/;2õ"†øèTDl`Aò-Ê-ÜïLˆy~×"ë}AÕ\\n†ò6ˆ™ù{å™xò›¢íLÖéŽý[¡k|;äÒÖûü$5Íôˆ.~PØ«D? ‹ÿÄîxV/«+?b #p¹?N!(oƒå2'…\j qÃù‡ŠÓ!–h]:m¸ø¸›ó–„QÖó%ݧÆGRý±Ìuxqd›§¬¬`–®7ç‘8½>ˆÓ²c¯ï…91˛;þ€]@B*4Π)g?>yp4Zî".MÜþïŸY'æxG´žÆ$:5úŸÇÖ.‘6/®/œ¬yyvoË¢ojÇ•‘šñË3`ÑT3­Ï—öº€¸¿ôÂp96V¼ç&i¨›;Ɇ¼*%½t»Q:³f'Añ{]  cêHìöfYéNFÙìvÇY¨í‰ ,š´m3‹Óàˆð0Z;/Qò,2•RUÕo Ùá§×À·DD²@Œ®··x•SoàRÂÍ'ãÂ5î9ü Â5”J‘äøµ¨yYÍ÷éâôa}i©â4~¨qÔ;ƈ?}ö€Û³Ãˆ¢-ªLÀåÈ,»<ùÿ±×—]Êb¥¶ƒEBœ¹s‰AÒ\8¢ ™Þ_Ä”Z`6ÛÓ R~Õ~*;¦ÒnÁ» ½*¦PläÌ÷}ý5ÆTLd+¾‹ oñ˜ÏåÃWùÚpÏçÙE´T£g1ÑBü€| ;Îܸ Âñ÷$+õqþV‘žoÀÙý¹X°þLãÎÏw‹’ò/Rnƒ!·ÅJ ƒñPh.jS@‡ŠJ¨§Áþ¦Ýd6WCÀÒAÒ>.¦@t\«¶#fþ%áôzKF­ÿ£7¦ë+ÔQe ô¿ Urw›Š23m+Ѷ€«ªõ<޾·TêEj¶ÉÅñP˜SAÀ®Ðlk4À±ja©!ŠC}MG˜«¬cúÄ[|碋'*îÞŸ«ÞÔ‰9¾Î¦w+¸}! Ð%·>ÆŠ«Ï˜øÈÆž5Sõœ´ò2†ïÆ“›,X55L]$ïÃúüÌioÿ›6L9Ë 9Àîë¾µ=ÿÕz<¬ýèKz‡ŒV[[l 9mØo“k‚³QaÆ^öj›†NC™ÃÇ04ýç>rÌ¢ÝE)>ƒ×4!:ì@ò3ÄKt>wƒ¡ozØ4OLVî‡PævS”ÊjˆMei–¾ÆmÎ"bæ®$ŽûÞ#™k´‹ CsŸ´ìm´¶Jq*Ï^*švH §Šªr@“9õžuéƒ ZÁ‹\"{¶7œÖÞJð£¾XIäÍ£R—‰Ôù5C j“§ZȉóU»Y¼­±[þy’RE¾Ò‘ø]Úå²sS]\SWvÌÖ£(ÛêÇŽž’ÔÛ}¡9Ål{moÀd©³¢½T ï³6Ù.ŲýtóíÒá<—ŠWÓ8 Z]OßCqŒ©áMÛ–3Þë5þšÄhpX3Æ¿ü´A“µPÔ2O.­é<¾²|¦ëV!H‡Ö{²ßÌ9¢×‡Ø‚]Êù¼éG˜\›zìÌ0¿Š-ÆmÙØÛqOÀÑÙegÄ¢ßú.]¾²!ìŠ5q¨x¶Oë§b™ôË&e‰¬ÿ €¯«2g/èSl+KG§©¨‹jˆ:I2©vºÅ@¢ëµÅÊÛLø„è{à÷ûÅÇQP€‚PB@½J`eÄÓð“Q8¦g¨$aC$k5€=4zÆèKkŸ@.‚.Hù᤬®có%íHÙftî%OÏ€Çð§~¯PŽ…°±;D#"æ~¦(I2¤¼Ï²°5qâäöuJÔÔ/e£ ìOU6?Bí¸/t ÔÊŠMRvJ>èpª‡á>ÁM»ª±¶Áxÿ4-æú³Tʤ›œ£ÈZ /ºµi®¸'jiFmÓ”Å+ k·ãë…áoÓï“GGtšÁ}±äêž/c©¡LÜ,V©`eìS٫ɲƒ¤ý(tÆì‰&¿n¿…(áŒTA"^ôЛ\#š¹ÝÕhb 4¯Üö¨¯]‡ ­}#Y¨‡ÍBް™ÌÿÀc§koOçºk`º ŠªÌ³Z:btôhЙ0Ÿë©Ô…ñ¾íPźéø#‡¯·4æèÇÁº $£'¯Æí4"IÏ1Ñô°¡Ò¹:‚qá@wžîÞTbãº%7™,‹Y´Ñö¿W³Œý;ÖZà¾ñÕkÜ”'­ B¹œŒÕkSŸ÷>¿}ï ›Ÿ0Xì (/³¤°¥,¹þR^sF’ü±êHªUÚœ|ÀÓç~å…LnÔÚjhdvzê2]»Ë4W½á¨¹{ Ãé«C!Î 0ÁerzŽé‡Ú‘¼Ú6„à…Û D%‡w]Y ¡È™*@öÏA϶@u¾Í¢*`‘îáV÷3m³@[U³Õä©Âë®C×­·mJ J}ñ¾‘E‚ƒíȘ¦v‡-‡c4Û,Ôrë\»äƒPG >FUìǸ,Ñe1Z\qŸ:q˜Ø˜‰0]þ0]éhá öKøR7~”YÆ¢¢õ¼ZŽ›Ï/?ñ–È@x„SÆÄ¯:C÷ À/Û ô£•ùTÚáàÜ'·…tl)+ ¶VØ0üÑkþ{%Ñ»på.é@¾|që ìzع$,Ű­  ÏSçL¤# ¼J«¢¯ù72„Öt¡ {?FëÓ£UL@çMø¹*ÍÜõÁU"1f žvgpìÖǼÇÓw4÷'[›ü²LZäê£âý¥Â\@ßܼë¼°Å V‰æÁ¸)´m¬‹+Í¢ }‰AóýÞ³.¨eY>÷z8—⨤‘Êdñßã,‰€–ÇmÅT¼W¤Bý6Ì(*ö%]̤hOT½(ÑND^ý‚±=IRÉ™¿P±üGLÃfêk®#gõ‰•·ï 5 Ûãg Lo'ÃæøÐå{nD½ûQ¾1‹Ù!W ƾ¤¹¤Vš°$=sÍ# ÊÁã'K)­ÂMCNÕÙu‚­í&éª3º‘¸Œƒ±£pÇÈ€8]8Wkó,õÏ~­¾ý-ˆí:àt&BË®aCW¥*õº^›Þ+Õ®„°ÈÑU¸IÑ@X™ðÊUüf›@s»± ËÞfT˜ÁæÊ¸¨yÈäúŒÒÙk{j{l†ktß‚|“ÅuÏMSÝžë…Uêxccë0ƒ\Yíä’ÙD¶ ¨R³±=YÅpN-æÙµUU“õ9gÇæÙ»qÙÉÊ ôüyd£Ù¼ÏˆD:LßR~m57èU°|ø>$ÊIY/–Rz·âlîh³(TÁÑô´%Œ8ïA¼º^)}$œ“hè4C»€ýÅô™)áåQǗɌ̺g¿ÑyF–{vn 6 ÇÞ`l zwÜ1é°Çd”0 ÌãL¸y^eYiª¨‚3]ÑÛ•ù©I;¥p?© ” n'HðiQÛ»J¿Î91ˆ%+Àðë@KZÂÁnŒ‘D‰“÷úrj=v3¾MeÓ,,ûÙñeY‡×*^vÐôœg „ÆÛnŽ‚BN¯dœ4Ëv¨3˜æzJqºÌ?âyö _¯G"`rdð¢žCóàˆº¡ÂæG͵ |Š; $Ä{QóÁVì$ÁG€×°XýO÷v ÚáM‹^›çþ(çïúrÒ¬+ÓÍMV ÎÄO²…ø])I5 ÔÕ‚…zàþôój·[þ”Ò(Û{ü6ŠÊÜX„>}oh»ˆÜtìkû…É>¹¼°“õæTêÀ!¿ 3] ¹‚Ö7 ‚2QÎGºÕO\Þsl½Ùúò@Ŧõ]D lÞËDjF ƒåP@†U`c‹§w5²o—2ºðÄÍÖ“FòD&‰½U_¹írä©…Gxnßœ÷)(Š s+æöDóK¸çRTpªag#›ñ áúÓ hhý$~ÓfÈýöã•é[ìWÍ”LO»Ïš/ å»h.ËÈÓv¬1èf} I„˜ eý{£ônæí¿1ŸyPj­Yfå4‡ˆ`:¡¤9ÌJ¶ìZ'\Tc”®ž˜L«ûýÚ‡r~¦ êë;r6ZÛ8Yp:vòC­3I'‰ú0À—.²äL±`+hj5mÌò¦QXäSÀÒ³«Txgh›h?þ.yu3ÿÝ@+YKa´’™Z‘"ßf¦Áð£ANÇà—•}¥Uy2ù#ä1Ïw8|NSU"-öe>¬‚U6­ 7ékŽip$•‚]]­V´K&Ñž1L°‹¥hv%’h¥¹‰ªÆ[{såGÄ1mÃC0·óÁƒFŠ”<Ñp¨WVÒuyÆî)¸§‹„ ¯šIRM“û·‘m}$a¡ÇŒ¹Ê¼c7Ólzí…MP‰³™ÚR7?@aOKØêœuMîD‹gËýÐáEôðGjai5óe¯÷R;Ú¦µ<½%eö° UÁ ÖGòc+Q\pæ4'ž¤Ï ,ž­î†A£Šª9 cˆÀƒ«(bÇŸ á‡ZûùªZ¿ “£sj&[w»‹7‡kãêYO ϲáÿ¸ žûCÁ×cçô4§¿B:øi¯£ÙÕQ :QÈYÉ Ï&y–{O/ôò[Q—i¤Ùê="ÓÌß©%åBG¤x7ßê#’Âié·瓟qŽCèx `ˆüA%áÇíq9½0äµ@dW€ÍÝhAwó,á œ†q„O¡ï‚ÙK_õJ¦^ æ(Þí!'ŒºÄŒè†ÎO)·‚ß´Ö«ù1ï%¬ƒì:ð3£ú‚tи㧜²ß¹v¦Ee².Æ‘‰™an¤€846üó)€ÜVù¿Þ¾^¸8òòÜ+>EíÞ'#ð©+÷èélÞÜáü<9ߦbQžÀý¤ß 6ZBè…öhúHN[ŠO˜P„21"@£‚­©t"ÎêŽÁÝ7ۮȜ*®Ödôºz;¯QÒ¡P•YŒ_;&W\ޏÍ9ó¡©C&¸jbÀ¤1ê¿ÿä}Ýä‰â‘Å–4ä“€Å;¶ˆòÊrZÉ„ì88@CªO],£L)]O ¢ñóŽñ/Zd•…Aÿ–Ù%­ÅénÙ_1gé›I‰m²©#æ)wO”$É®l:PîhEYS÷¬~A+pyÊô+dëóDZY¤)³ØoI÷D•Ë·ý¼~0FÉA¦ßñ@¬9•»Éܻǚï¤E §ÓÂgEêšfÀ¶ú¥02®–?&ùYÈÁñ$U,4:Ö‹¢Ñ»Möè" ,‰AðFÛZwêF‰Ýª5p×]r lr«˜ "ïÔDžÔmð…Q²Ì•¼F·áå´OGÉ®Áíº âDzبédÍÊïÅ„7;x¼Ÿ Þ ðLa¼ÿ>QuÖÌR@º±?ÓÖ)”/јï%óðh »0ÅÁä0†zòQòZi¿&eôy¨Ò¡E÷KÐ*õÙ—$Õ»|‰¶¹¡Üçò €pS‘ëMï²IÒŠ ™Êz¤¦nÚjë8Æ’þ}‰­\ƒk,ËäZ×ñ>àm¶ª¤˜Ê¢í Û»›¿ÞRž£îÃÁ{„CáQ0œ=±¾£ 7k¯šg‹zµ>UJLÚ²?1òd䌱åç Æjã™Êµe ¶¦e¾z£gúvõ¤VÑKܡޭ£Ï'ÖÑê¸.@fùEE1m ÌœEÕ×Ë31Û"®¦&JÿÃÞù™CIˆTú³"e/ví; DÆèd›=©¢Ëÿ8~d•‚7ÓgÎÇ@"I §P¾*;¢µÃCÂ\(¼ÿC^Þã³HeC-¦¸µ¬"A»WQdÊ™K82æ<É–U•g¸Ç±£‰<…:xbíRÿ.aC SÎ2é_«Ž[ ±…JDŽ< \FýÓ .äUaDaƒ$ÏÇ@Ö$á’g<ã .Ü=ÕÊ–Ô£Û®B~ÇÔ9ñR±=_ÞOÛrœì[í£´*šé‹¿éŸÎOJÖ-DüÞžÜHË4PAS­ƒÂwôõkî9”Ù@6æÜÆÜ¨¿‡o¢ ÒhB7‰¡h™ï&ó¶ÆXë®k͘Ëx$º~GÈå>8壸é=ïâ/[ÒùZq(ëß×[z6üî¸éú Pâ—¡]S¸ãWÍÄi°ÕäSÈk5)‰ 0e=~ätˆà't{SZ:ÞzÑ‚‚, y×÷/6a”Ë2ÏXÿ¥õ{!äf!…Ôv¾ë˜ow6˜Eu°9˜º—ñCàYøÆåM§,¬hG•ï˜A¢ºÒl˲PŸ6ªv7∠.*íe]„ƒäŽÜ¬Ö0ؿߧ¯,¢-(•[äʰ®ðxñOõ»A"gjX|g?ëÝ2©C!ñf-“àÁ sùÊ‹IùfòIŒ Ÿ§°ê$¿Bq‘ÀYUnæmÊ‹ö0´5åvl~_ã‹MÙhÏ²Š‘Ì½c['ÐIšÈ.Ë Ž-ã=€?«A»gÑ–÷ø4tRØe[ÈÓúÑÑ:XŠ~*s«(v}¼ÏÆ Ðs8Zä5†n¤Š¶‹ÊN~7닽¢žOXé›ÅÇÔ‡£þ/ÊšU\˜ß+uÞÛ©i{†j:áÜÖFY 0¶vê©uDPÞ2£Ž#%ç•€g°ù¿~@£ü1¬?¨^Ý«D#¶Ÿnæ§¶ €×-˜/!neœŒó"°«Íu”ðŠ?(MWYâ"u Üž•jÎ4ek.¿õÀ–×Û<`ªqˆ HèѾôœXæÐE“#µ¸#öÔe/(íçK±–òL÷ñ9ÔuÝ̳"ãhµÚR”ü¬÷ÝRf—ª¡š(’@(Ì6ª¡’ ÿnzÌ뻺w›`þ1J 쇇=ˆØï?ÈúGO'[‹¤¾d¼ž"™å|EѶL“Iœ:ÉRŠ•vѨ&ÞF&+ Ð'ýa¿õ´ÝÝàÈæ}’–µ¡ØJØG˜ß·r{I¡bÀ0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/_a______.pfb0000664000175000017500000007652413607302650022470 0ustar rptlabrptlab00000000000000€«%!PS-AdobeFont-1.0: ArialMT 001.001 %%CreationDate: Wed Jan 27 13:02:03 1999 %%VMusage: 29179 36115 %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. %% All Rights Reserved. %% Arial is a trademark of The Monotype Corporation, registered in the US Patent %% and Trademark Office and elsewhere. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) readonly def /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Arial MT) readonly def /FamilyName (Arial MT) readonly def /Weight (Regular) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /ArialMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44339 def /FontBBox{-222 -250 1006 922}readonly def currentdict end currentfile eexec €vv¬C‚ß_£Y‚b†p3ñá@ÊOß•ÂÊ¿ÆPÎ |L…åO½’ô²Ê÷E¡)­&j)®ºËÍ(Û­x'}""#5qú6Å;™t‰ðÒT2 ;ß#âÁ`|³Ç!Šaæ’F<ÖÉyê±°­™x¸ *"cØ4Ñ~¢ø @JfZ¿ îÓÃNG3JGòź-ÞÉ&8\âÆ’‘¼IЦ4@Bõ4…Ñö\T¹”Q« "B-ºö\Æ%TÿjV—# #²wWACE”cŒí[ùËÄ^ãò±©3ƒ‹u®}rp½mv#5Á'Ö‚@0Ri@k~Ý|ÎúwgÀîÒò¾F‡ÿlÒר ù@I^«Çèüžá;ÌEû}ßUžòú^¡–-~ê6¤…¢¬˜ÃæÉˆÓBÇÚüeü»EN´pB×;C…EÛ¦Z—¨g,€~ªþ´¨ù<|ˆMPüaWÎXDþ¿U¸Êˆ;RáéD3Âó¡êC ÒÁd»#xD¥xzÏ Þ²ìê ¸•ÊÛ³Áãh÷gE9/À£ÝO²KÕ]0kƒŒ?Xó…”ßEñC+4>85 ‘tUYœª]¡=PeE¼©«.CƑ⹱5MÍÌç\ø7Š…Ú3Ö¶7ûaäí@À&{9’ÓÄÃs" ÿ¥b§eqÂ[æÖ&¿iÛµ”ÈìŒ>©c4Jø( û mrÅýi[RÆ^;£4ëÂh¼ë‘”† ޲e¨ãѪõJÒ"ú‘íeKwa‚ìÜ_j{ÿ¬Xž³ÎA;F&Èô_ÛZçTm¦”1‘‰qœ°7¢ºoÛ›W§XïcŸñ=³ó}„¯,FÐ4!é)üK6ô§ªÀå mì~2è²4y‘n×¾À¡ýü’„)y®~Œ!-@§tž„W¸pu¾™òaŸX¬*°»´3ªø¼ê$ê\Ò¤ä.O«ÉÐÙ%x“t3–âµüf áØ"€&TÆú¼&ºêÿj¾£»Àt«ñÚ$ w@—²Ü¡¼gíizŒH!­Ý ºÕZúT›î'9Ë©ÌG!.!Éùù E1j63X›Ý7kë‘ëÇqÔî¾È™EjÎA¤=“ô„ª4ƒ0Dkfû„ks:‘¦áç yGªM+x¼]I.ª´oª€í¢<‚Ýj »«åÙr{ÓÈáx\Ó"gt|¢Þ…)Z3H…žh!OÃ!Ø]$ËÑq­uK;x&hm£ÞJk¶ra:Y£î~1y! ×Õ-ÔXŠE ª ÇXþÒ£tsÛ~^¯x±lÑd qRVvêÂÕDq5y² ¤ù¥uØ«×÷ˆ™Š9“Ðñž¯ûÇöv?HxÍtk‘½´.…B.î›ÞúU6?콸6^òš8dL-ýfrîiü=é—Á}¨È"?´4jwŽÎ(UDŠ]í¿å+;çFa=Ø>Ðüg‘7ÂÔƒëŸÕB19|úìˆ[ápUÝ.,ÏdÕ£òäõu›‚¿™áü›Ü=Ä_"NNAHÄoÃþ÷cíÚe-šÀñeÕ~TI‰f`éÏþËx¼ªC ¬ÔM0úËlž)ö»˜«R‡lèHõfÝ LÝú÷u¯2Gý€ÅÂa Ð÷hYñIq3Xô^"9'T°ÐmÅ6úÈH@*> ÀÖSÐç}qFjßO¹sÔë EÐhûS. ÊÂê-}Y¥š|K‚j MCTáÔ#ݲÜÊcâ%#w»ÇS $žš}U8ÝÅ4ÑEš%Õ›ˆŽë{¡ý)l Yëwuõ§~ÊÏÌVk«•5¼î÷F™ÙHËgɸ@%‹$ëê2íòP;M]¿rjÉŽØY ,ý~çç(ûÜ_À=N¶Â¿6-¸ß:².öˆQ±ŒRf÷­Êª‹®2DQ¡è?¸÷òòÀvçÕxЋ‡ØÐjÀ³l‚Ú%“ß(™‡hØçX̹G}‚X­¿[þ µä7ò9½G)åvé5’Ø–Ðââ&ToÉ’¸¿g×áÿA¦"ݨ ‘×®ørl.i,{Ž/%Ó:•–`µRRAjàÅ„ú¤ÿK23Ðÿ…eÆ¥iæ Áݯ5BM)ûæU4#yw“¶K¹á®èû±b¿î;>JÀ|î…VÜ‹PD¡„þèÏ–n+UjÈ‹ùg%‡DSsê –ÛbM ƒ ìï¢âóø?áÀ»õãõ´U^½œ’$Ø@UhTÆøwÑ$h”­íhž¤t±1(SZ?üjœl¤ˆóP- œ¥‚ÏVw¡b¿qyø¹`kКšLΣû.ð[4éRßnç^ ªÀò3Ë]ÈJÿ§QøV§æî¾3F"TYbÝ®¦~Œ»9ëls¥Ì!Ìuî˜/néù˜f̾î…Ãxž 7²ò!ÎÔ.-R$‘©æ;¼·Q?Ꮈ}MÖ.?&ZÆ.P×ÌG–Ä-™ãLdBËdÁÕ7ÑÊ ««xÕYÉšÑè_ë墋öÆ!³Èz2ï0¢Ô´÷DÎgCÛÁó³¡6"@d™âdì‹ä"B°‘÷b’¬þ p'ƒô¸Ï;U, º+ÝiÐÎpƒ\°–ñ÷\ÌŒì|‚tÔv82Þ¯ð˜ŒdVâï:P–„D)½;_%wµ° ‰Æ¢Z0‡¦jKó_//C ]%ÅJ3g xíFDßߨŽgµø³ VcÏS¤;ŒGmouFŠy Q äoéÏæõ—þhÙ/øsf¦ï`×ÝÕµ<õi¦ Š/ YÚYE&û¢`!°a1£ˆÁ/v—¾p5µl˜Šé»³°Ó'L± d #ߦ¾B¬ñ-c¨ì ÖÜ ¿ ÙÉ£m¶ºíÏk_Xfrr%ž×¹fv=è{aÍþ Šf|ÏóঠS™ŽèÃpJPÑ-ŽÎÒˆT¾ˆ¶5‘ذž Ì_3‡$À=(A†„ÅŒñn÷t;Ê?!ÓÏœ-–`ÿÐÀ‹ŒvT”x“ËHg$Ŭ•!oÂæÚ­“y £¬»°‡àVD‡,â=Øj¶9Z§¯´s¢¥—|9p¿$OW¡Ø Bœä„Þ?ò› ½Âî´q l2OžS”œÀœ#QºzÙºú cÞ ˜÷oõ›ÉÜñÄN9 M9¨Z¼qò_þY.”ÿ«‰|¯Š£AÀÙôš;` ¸ü$Œú?YóUÑÙ&bÞo ¬p9ìüH™Züs«UûßY±Ã7–˜Ð‚bò‘s“ › ­ AtK–äÖ¬5Z[g (tWív¯ w+ÍÄ8ý.[­;̾ϖèHºŒÔ‡\}Ng£ª³¹ 0º:áн´X :§4ìT"çb×à ä·s|€ˆÉ» ²YM¹|ª÷¦©A8+æ}gßçzÓñS‚Û9ÌŽë#Š\,MÆsæVlßI¡pbäBgéL61ù(‰›§v¯‡.Á?”HÐ~Þ \®ä‘º\'¯)œ¢¤š½{ËEšõÛÎ황E§a‰.Jˆ bݳü9„^DY$òÝ!=úÏ-zdWŠ'2JQÙýGAF–'Æ©7þr }…ÂÎ*rHÂ*b¡½72H-@='Aù$*úž&œ¹°6tô@Õš9Ì:ï•·|÷ÌC…РA@´ *õ#0'ÑD¤3†=Ì1KûÌ®‰[9lG¾Ñ¾±i£É\o ~›†»/Xî )Q‚]ˆÌ—uLû¨ÝåW+¶s¹Ô˜tåÊ"lY7Þ•¼àÅ‹€ë)àD—ҙ›Io£q[èë»ücc{‚±&Áps· wÅP‹àžõ=bOÍlüîxZ ttÊ*ˆ"ñ~áe¿&ê×rú¨5’UuÔ—‹À¢}ßúÇ~*÷:»ŠnÄ ®]g‚’ûö5vfaXtKÉ´«þ¾ëþI_ÆKÙ/¹ID¿Ÿle¸N„©Ì×þ0™«5"úÈ,7G¥ÒhkSW]YâàiÊcÁgçmÏ|M8šË–m¬ÙB0Àtý0LgþKSƒ¿§çÁcòaä͸A¿+îfˆ7!:¢zr>Á ƒÆÁ[¯´No hÍ¢Ó‡ÅJ²r?‹¤ÓJh{ž5ÛŽÀîõ3¥«»±ÕÔ/e³K5WabX‘¡ê‚; »llHóD_za…³þêVðÉ än(HKv®û¼”è÷0”€²ÖjR–a´Ï·ÀÄ<Ã{5úO ©¬HÜÚ[iaK¦z鸥aç»q{y*®ráÙf`™ÅÇ2Rd•@{ö"èmþ„D/¨œìÞê›Õ ¿ã ŽÆ°ßÿhVãNÔ—šPvS¶ù •öWy6±¯ÿàÿZ1’Eô%±¢„"¹ŸT0€Ì,`ÅO¢àu¹öT¾ø¤$uj4¯9ð²úû#ÞNä ä8™fï¤fxFK–hѧ8F pÝl¥5ÔàLy·ÆŸ±„§°Ø–%x•LsÄ/³WÝ0“Ù Z:É&,Œy2§”¼‹YÎÆ2D ¡Ô-úVüÉghÊ43^T¾‚Ym¬á"Õ¶]Õ©Å %L"è?y‡½¤bòkÇ@gصòˆÈUÒå› gmC.`Hk;R"§ßigfõ™§¸¢Ž-µ…Â' Ü(ÆfK(G^‚|´}%ÄA†ü!}Î;¾î®?A°Ø8 hc)ú…“'Fé¯-û:Ý®§:^ÂÛååSÄ d/xŸÎ›Êx˜Á!½ÔSEø)y`Ie÷á@"ñjåzTUmpr‰1=Dª~!m RX‘"q–ßà â±;¦¢ùÖ q¡…(RÞ‘eèù=ºy¸—õc¬ ‚ÖÙìB$ù[ƒûÀë6c~ q†‘ÑüR‹)m9ì¢lƤ‘¢œ”W®t‰¾¬²ö à<)ùsŠœ°a_ÍB§m~W!rXºâ_Â4îöZ=LÎŒKר"Ü?¬ìÀ5¬3aÝ®S¯àp’ÙšS\’D#Ý|×á ?_º–²÷o(á2^ŽÁ‰Ã4Åw÷‰O°i‹ø"É„ˆØì¨ÞLü(žúö·óQìK0´ûO2”äµ™F­Ÿþ`‘©þfk&º?c§IeÐU ï¹Á>-JA{<¾r([Õ¤ì=öäDØ»-ƒˆN¬Íâ9hzíf‹@mUœˆäæNdž ‹C,Ýq96?nÏw˜ñF$U±x#íO3ÃÆê¨)w—{ЛweA®+”ÅUoQIµ´34ç;×—†$QèUÄe—НV†k¤ÍÞ¤?‰çõ–šM)ÚiÀâ+Ï|ϱnüà°BÄa”cS8Q²º²Wu+GÄÔ²ÒŠgâFûõÉå!ié.•”hé¦ékTH'k´<25›(”µlóó®EŒÍI¬ó¸Â%>¨v: tݳÙÖÖ£ç³þ›½ÆíP¢ïîQK"Úþ¶Ûë3ƒñB§+•ÉJ„%þV]¡šô·‚²oL¾¬ÑÄ=Ò¾qúàæiGnüFÚ›¬GÍn•#…[õ–Aö@é‹,%sL5÷Ö9øý“Znà»f’IkÀƒ}œ"ä@!À7N‡œa<þçŒPžÄD ‰ª3ÅþÜaþÊå"ç 3°¹k›NæœPlÜð+<JúD6 w©5"¸«€‚SßÁÉÙ~Â0gà!È“»D›eá6Jiy2Ŧ"¡ÇgS|üqam“UZ*cøà GÖ}Y%Ø7á°C$ÌèqDIÞ+§íd¸?AMÑ¡æ;ׯ£HÆíî\0À)èÙ-Μ«³±6‘6_Ÿ]Þü·ö’wž[·¯–ÔŸT¢/ŠæÛP ;]jÑEö%Ü{7-èóG=Æçá…ècÁFCÞ×po$…tr‚u}îÍwO»Ú{®°‚Bż&6:B»ÈyŽrh?¼Yl?OÚC¥—jsïfŸ†– ÓÊ´úUj±  °µÚÑav=ÑU׺Tª(]’ÉïÄË`°¼°0´î•¼©v Q±Êé2×*=L#üδåãÁßâ©–ÕQX]éêø§)¾N2sd¤ÿ8ê7/Þ“|]ïˆ%‡kò ³­@{‹î»Ä@ý,™¶á:Tc–Aå,wê?â.“ÛÖ²™k©ÂS7¬'aNƒûNË«¤dÏÞfðùIûë;€ÚnhtžGð¡ H†þ’™-rm†íh,©|wá½O]¬c—rÒcªÏ®š¶G+¡ Zƒr˜GÄÝ3Hü<:uš;3·²ƒqŽ ö¬hµ} Gm¶+4ßò$Ò>Šˆ0ó>žï1õEpR~ô EE‡ó±TóÅ…à®_'h8râ½»Š#Ó¿—¿‡×Íá¾Ô­È×åï©Wù߃–×(³„¦ð°û­ËÀ’.ÚçéMçŠpA÷ybKLeºRmvÖËöRéÿFOµ¢Âžå?š›+±ËKÿ™Â]+N L’4·íxxZèlÚÿ5|m”AwK ­Š›T;×{¢`MÅ­ZõýÄ+o0Q{Fœ—ŠüÛ|Öô1Wú¤î—¦ žžò@™ Á2Ýäeà©:˜'·¡·™I=‚ô²¿Ó…-hrn‚ÿ/äôßÑ%ÏUÿ»1ta=~´1ŽdiOãéf§Bæÿ¡-ªŽ6nx˽øræ|](åbÕ­Î6 N"êí4û„óªÓ«¢Aæ®ÝáÝcm‰8ëäô`5ýÈïféQ…·»“^¦ÝªF‚u: wÜ„^ÔªAŽ_s|¤Žý6Z’wüý±AuÃà †s‹YÖJœÿÖ¡J °²¥SD1'’ `ýy`{©¼ê_jLo •¡‚.ho=G,Øó\¥¯mÔ !Áo"ž!NE}“RÕæ >¾û„ Ç% EÒÙwV •Ûèx˜"–Oªxd7ËMiËI ÄALþ‡Ì‡æ3V GÔûfò-ÜFr|é¡p®˜®i dÙ~ño˜¸Â .¹´Ëô›ÖRkž­)¨z06²ð!8,Ú W‚#°òƈ„‚»QÛ#¨÷!°d@ø-äû<8ëþV#3 ÜW¿ì+±ZWe¼_3V^äžÚš\GÝ–.°«¢RXSºG½’‚W ]Ÿ9Žæ‡ÏßÎg3\FLèA<2@X;a ûÖÕl(€Xù° կ͗œ¥xg04€49Z¤ïžj¹ÆþBú,o¨¯ùÌMÉŒbšúfBG©‹¾o÷ÍÍHZÐe/ËÕ+ЇÊ{ñÇŽ\ð¾v’}²\/«;‰«k³aú³†È š›ê®û•±Û¼ö6ÊïÿsWõa¥—‡\>R®¼ªê­Î’o­«ÃècǽD#J#»QêöÌFxP»ÉûµtXÚÉì[j|!—õ†&l ðÞ 1àO0 °„M'n¦Ò›©0½ÇÀ¼½†À'b¿" "’"›tÌáÕÍVñâ6¼îz¿Í:(åh/U3ãc‘QÖvHð_ñöÓµ.Ð]pkr¹ƒUß/só°µéÏî“Zfõ ZÉ,¤Šiq-—î6¡l9o„ÐRãX˜?ô1Ñ~ö›‘EQðÚê$È@1¥CÒHp^ga xrØoݧ¿³«°9?‘” v1Ê•›”‹´#3o6ÊKa´@#¹óË<ÕïØ–f«U@÷-PûÕŠ Ošµk…tYZ«À‹kfËÀ£Ûu%±ÜLélœµÅžIŒÞ"Ò+yx¸}hñ'Ëñ¤B_š©pW¿¬‹ÿýjÉõíèûX«âË…Ôé¿ÊÔ%3[÷ ü]Öeç;Uà¡wGŒ;ŸWKÞ@Èù ðNþÂ0TÀÆ('¿7äPE]V #F\ZQÌgÚIFÏ+]´~@rj¹M²¤ ɈĎ³ oëmfÎÖopM„‚8Ct$™ Œ%UäÞCø«ºª/¦Ý–ϴ固Õc'…‚Ðô¢¥Þ§ž#À·&X§ ¤–ÀÁÉw†”mÜí.‰ÆWf¼ß·– 4µÀGÞ >è¿¿ÊÓî°©ãÁawÖÜ0‡Oà ·CëdÛ5 ·é=„¨ÉB*ðd# 1ºé5þú̉ótÜ6ð‡¸‘y˜©åk—Œ¿¹eÈ*dÕ»{$Æ}ï)kêÒƒÍþDôÐï†`ÑÞ”Ì˰ͦµ¢æ³OùD7 ºpëðª/bY‘©x펶áo"£ì‚:]M`,ÐË\„4Ö@àž\|”ÐÎám ñøá®ÕŸ¤ôÑÉ–­7Ò¹úä­öˆ‘ÿéú#Іé-‘mÚ5¸÷Q}LMò“Uõ‘ÓG?«k íz,_+ʨXTü¾Î6åT³ưaï‚ÓËåÔÕ.óª¾iÜøÔ3¤>ñN®ÕºZkÍýäû©¨Á¾Óõò?MDHë¥èm@šaö®ÁÄ ÄVì¹ò« áÈ,]Ìu:àÄ<³Eìí%Û¥‡VÄ¿|ƒ½áûÖ…"àb!\c‰ÛT+Ü|ÈÚù]ΦÂȰ"§µ¿7H£b@·ëDm×Wäpfi¬È×—'1PV9Ú±RIƒ Â@ˆ=€Ô ó¿ÏRÃ€É ò¥ÏÉOk~é§þâÒ*‰2iè?oM6)$pƒ¸àÒaêøêwþÚÞ4µ”íTT[lv.¬¿~±-l Éò!ö{ÓŽHÔpÌŽ´ÔãðQŠ"œÊåóÔµ]Ñø^hÌ…WzÞ9à„'ÆÈæÃ¸8~åpŸ[ç\6íî™÷®Eš!ÌâÙF Mð}ÂN–wBç/ƒ1ð!ÃúÁ©¦õމs0Œ™¾±|#Å)x€q;AbˆW°X]QÄ=“Åâ‘àu¡qPÿ~›‰¡ Ä7Q–@"½) ºP]ÅHÝèg‰‡†I¯>û(ÄÃÒtìHgÙëœAÙó§Ùb¸^w!é4eÊôÆX"RWàPßsôYVÎÇù‰p{’OŽË’B™èK:ôf\ ý¿pŠ_1?·ýF®2ëqÜÿsðÍDü÷žb÷GG–°ý~ÚÊv“U*/´p —~)s@(©uâÞÏö•Æ…PÙÔs 3Ûódüá"[‰ßÍ•½¿€í&Åho“¸‚s@Ïz»’êI>Çìaa1:-Y —䨴‘ßwdÆcòŒ%t‡ÄñÄêƒCfq/7ŒIì}”·6³û?äß}Si“ð9-ê+\`£Ô½"®Äy¹SYh!s €£È9j­®…øž¦¦YDàòôNÔQÎÌ6ï´æžÊ•جXiÊUj*x2ODOGq0oï; íDfn,Æã/’ üjY–>ãÎúð7¸žnÄØ²ê…y]4 ꀋ½N¹îØÄEíQx«)ÖP¨ù93ÙµþD˜i÷zBqHìMj::ì=°Ù0åè NJÆÜ‘%?Ud¬YeYÂîá`”aùÅh\x²B%iÞÍ 3-ã*Â6¼”ðOÔ÷è¤3¼PLÏøéy?Õêá\,ÐóâŠöçxTlMH!T¥¤wÝ"Øôæ8ÉB…éEn¸Ë¥_¯'–Dßà÷GM#…ïëŸ-W†•E·‹çØ Û…Ô`ȯæmÔû(ç,3ú¨yf§b¢¡=Œß ÿÕRìUÛìßHϯT§ÃjTxŸŒßž¤µÜ€±Ëв8îp8v.B·nî7zM®ƒLæ×3y©ôd%0š)FÄŠ6HT?ô*+¹ŸRŸnQQü\úÐ=’>œ‘¢¥€Mó5kvÙÝ ßýÅ&íàÄ•ZÁÏ÷²~Kè’Q¯™8‘°´™Ó]¹âZ“/”Þäïß þ{𶼸òô5NT}߬®@š;hk ´(J¤¤‰}a»;PNh—ûþŒ‚‚Qr”ýŽ[2ªd4SP3?1N u‘¾Ò-ÛÐÆwI¦ótu¢_ô´pr ³•&\`Åu‡¶k—õsˆ`rl ¶p΂HsæÎ%?GÈ€¸{ú£¯½ëçJUX{kr=•yv6€»|üˆ¢?‚ûŒàIÆ&Xb0„‰è2,!Mœ|ëÝ­¦ïÄõª`zœð2¨³ l¤“™Ó5ívêŒÀŽª$ s}Ù ¢J¥•ä¸cÃý$xž¼Šû>] ±óš•eSþ‹á.éœ_"¨ ¤£®î ]Z+8”L)ó&ÿÓóÀófG.ª\ºå([-«^§Ço¦z×*´mEB;XôOÀCÀ/­µ^=ˆ?+…ŒÒJôÇÞH ‹øËòQ5Æ~óÂ"36Jà:;üŒþ,ž7úf‡Äk¶®˜ô€¼Ò2Þí„ÊD¼,J@ùâø{çš,HÐét´cØ»ô¹öÄSù @-÷™iöIÇÃé›IZeâ6ryÕT’Æ0îw´8£ çOúೇ8{Ý<b¢v?Æ "¾þµ@á<+„^c+¤gj$ó•7 îc+èa¾ØÏpU—ñÃÚÃqO¨ÞFöûpæ’ŽÁ_äŽÇh½È3½Ë…Õ^w1™dcœ«o™ R+úi'Áù]Þôë¶ Q˜~»dg“­Íüªb?–ñ1„âÚ-:v|c¾ ª‘¯æoo³[€ukN0VvGP½¤»}1ïÍFÈ `ÙÏöË"½]J©Å =y¤´°œ.ÃŽ¹ª[ m£­¡¤¸›ú¡BJÅe~*yx{¬FIÔA|ÍÛºÎDA•­×«»/ž„7»$œoq¡µù3™­ÒÕ™¹¹éœ_™Á×¾Zèed6žiw=ÌÃÑRjB?mfªÈŽ”ºp#x³â{ûa„·`mÿ‰õ:£ ×ÏÔZ|ˆÂì>ˆŸÒ®Ý¥®•]ÿ‹®"Ýdu#±¹£*Î.²¯1—Ù]O‰•„… H¿úŽûóÄ~îBH bª@£lò @¢¦×ju?¢ó²·K^3¶-Îßå Úû‚‚Eôç ß’PÛâÏc& å‘÷˜¬èð‹ÛcÄìap?d¢“´ï~%/®é2ÅÓ˜¼µâ»ïiA\jGWŽ.š8«íÒ)òãÇṟGÒ4Ì" p/^ÌÚå®8@, #‰JàƒuI‚E€`¡:eöIQr›ìéò|PÊ–¡´µ4ú*NÁër{ï˜Õñ+^ýþMc.ƒY†ñoü£üö몞úÅ×…W˜WASÏá(Š "ª´W»õ›ª7R:ÿ›IØcTáåÓx×î0M"}JåáØÜÛ†ÁèdêžéÕß±àpÛÿÒ¶Zú0nU?z5(‚íIh´MK(lÔžáž:þ=Ú5™6à\'Á7ç}ãaÚö>B~¨ï­Ï6èõ a5ÿ&G If;V¦­*Pa8‹’¦èœ×kï›Ç ‰Ìö×ÅöÏêT WnÏܯùÌ{O´¨6ÐÂ"|Ïጨ4n ,]qÀpz_Tg{ã^Oêcù9±r)1/–gŸ­È:£–ãQÜÒ>!"…V¾ù /.rm0;V¡fÑïIÏnɳ5¯Þ–ÄV"´‹ìq9sé`Y¢Ky!B›Ý_ËÛ%\š*¤|”3Eð²·’yΚÝm¡˜YŠ)gʘu¾î0æ=ÒÚÒ.íϱ+,p6>+„ +b> Y³³®YðËÏݦ‘±ý ò K¯w?þ Ž@8M=©{ÿš!WJ8b?±«áiǘŠס á\ˆ:¾ƒ2@Ä•'KCEöÚcx¬¨ ”Öç‰#hfYi!úµ(ÂQì*R÷¸‘¾§dfI„~â­ŠÜ<ð?ëÃrUU»Ã:1cSJØi¯Æ¢F²÷r-<RY¾Wÿß¶ŠAí™Su)h€ýïŒZÿÜÈ_œ¸™Kã½/C·/TµG¯ŒlÎwÊz|p±,p÷ÖçÚ™?Šá†¶þßuJ†¾D´æZÁ #û3Æßà>EG´Â.¬x, ÜßH@´ZœÈ,¥æ¯à½týpANóËÂßÒÑß2äa+ìïærŠCÛÚ‚¬æT¦ðÇP±ïz’#Ö€{²r‹=\‰E©Ç÷Pfth4ÔT™ZV¥ø””dÍ›¨D¥/ºØiêy.˜·S:rgâè!>§¼’à…éYç‚lñ¼•Ε‚}ÎÙeÉJK¸$kûúÒdⵘx¿Ð¼\ü¥R¸‘^ô|;(½îŸÆòÿ^±ê ‰2%Z²—Z]÷¦‰í“游_•š¢^ʬ¢%›x%e»"0礧V‘ÎÑݲ¶{6”èô‘¦«k¹Âz,»€‘)˜ž¼â P ó'Ò}ü<Í|»ïàgòÖw'ɶˆ™L‡g^0jªœ>["m¥4ÓŒëL05zržóêJÆ¡-ÖËY…d €d*‡ ;PŸOh T‡88"®¦î$ì4/Þ¯O‰<‘„]ž‚™±!ÂÔë~³éuÏñ˾·xêfÆÎð補øàöŒ)mb]°ØÂíhad»DŒtty†=B¦,“Ö7¬ ^ðÑyeáç-ƒ¥©àw‹U°­!^v2»xzæQ¸Ê*gß¼_p`" â·Zï§Îö¢`MŸâwc4$-FîÕ  $Go\wvuzíÉesW®2õ YÂãÅ!œŒÑ/E–_ÔİŒ±âñ.’F£Çœ²WÕóÈ9GVž|½Î«¼Q휕ŠbÀÈã» —»ÆìN6—«”Þl*ýoªp…–Ž<®hšòÍÅ5ȬãiõÚuС)ü·Böå†$åA¼}æø­²ùðñ2áÕÌ@kä,1XV€„ùB·Y©‘Üo¢«øŸ½E•™Ý(X†â¶íq-g lñâšyùRäªTL®ùb²OO ¾ ¸)°,Äð×1h•Èy38}·…ýfi! 4•þ¤â}ºŠP«× .}Bø§XË×åH˜ãg Rî» x3WÚDÍd0žrÓ v…˦=ÄO¬ÀǼo`oâ?¬ƒŸ†$§hi~vèbyÚÞšr˜™Â[׬â\ d§Ä÷wsa[Zv•´šÕ&)ÐXD ‰3e&H‡¼SKVr)?F“ħ<IJãîªbJc9ñìÓp‚Nߤ»ÁI#TmÜÎŽZù´péZ9 |Œn›tßn|­#0ºPf}Õf+tÂÁgÒ¬PÜü^êjͱórû@®¨Ôˆ<­V/ÃK °òWÖñ4iScYiØ*ÒÆ®‡ÐµÓÊŒr‹¹¯Ü„_¿Æñµ…Û«ì†!ÓɦÌÏxZTÕ¿‹Cŷ՘ެ2~ :[’FÀVÛî_Êê0ö²Û•…tø{%DSù 2#jД.'SË»dëd…Â4É©‡;¹5‚ËsÝýWݲì¦jQO@[Ž–çB‹@£ÙHPèÀ¦;>O~ï­pà™g y¥Õe(ü‘a{´J£.y%À¤p‘É·Ô†ÉË2Ì»0œB‰KúùN­ 7Ø· IóBKs»Úö0—IÂjs®²f%p–«jšvz¥bÖ#\Cˆ>ôŒ:èšÊ¯­vkÁü{ 阧Ä$G»?ã¡e|ˆ¸’Ò ù.Ú¥™)îÀÒÇFNX==A{]Q³ìäYå^E¼h(ë ç³ÃHz%îÊaÅ̲?žñ•Ùq¸þ6_›?©gíßÖÎéµáŒTÆEd§•é‚䊰+¯§!áú“z  ºž¨›èÏÓ¦ÆÏu“î2›4††¯Á€ —>´‚æQÇè¨2CúO¼Ý+)®+ƒ³Aé=‰ÃZŠñEH yö½k¢œ"wvî.ŠŸÕµé;/9ðÆúú c÷DèáùÆ—?ÿ· 8„Ø~˺'¡T® ÎU¸»N£? ˆ5’®˜×•œ¬x—„ºÂ½_‰¤mON:” '¹s­ zÆÈõޱoñ‡þîê}„ˆËΨŠKç„ÿ±=’µÅÇQgsÐóžõú×mw ¨hágØÞKž9vdl7ëö7Ç5W=m߇Wß]è9°·" k¯·ö"¤å£ ÚWTÊ[6ãäÇ—‡`\?©ÑE•še0‚«¥™&'ÞÝÄwwRt©(U ßcÙŠ¯XÅ R$aþ<äÓÔé§å,Q¾¯c!BájcSÒÃuå4ù‘LS€v+1É×Ö•?ĸDüwÔ²ý=Æûm& ‚.Ê8œð¸3¨FϬ~z—Ì #ŸòÜè–ì’½=6Óþ¼Zaâm´Ÿ û+YuÓþL˜~¸ ÆDD`å‰|ÕЃ6´tÀ%Û óÂ,Í©bEè÷ì©TðV¦—µö I«Ú½ûóÂ\J@”«ÅÆ·g 0ea輫Tç­;î¾ö=|PÖŠ“ÍÈE mršdîHë~úœ[†n]Ë9ˆ<ÃͬJØ•Íp!jke‡AføhÑKáŽxl$¼¢|Tà¸9ê·Ž‡W€ÎTÈÙA½~’°6ª!Rɶ ȃ[rØ ºqzr€9-X_ŒªÐ)<±µÿ»Bïj/.®©ŠÒ½VÂ|¿<–1"úÞËŠ‹«Òªfr;?ªR”J ·‰s¡ HVÞÎêôå©Í¡„ùB ~s²lÓŒjP»ž—DíE”¬„t’–’ÝŒÍ §|ç°Fl”dÏéxoø;5´œœTø®DÎÖY­&#Œ®úµ céie?œQ[IÒˆLa]Q,¨MO¢—r·J§1H‡N¦â-ç/Áí‘ Ð{feÏ1Åë4°,gVØ“cã]|C™v\ÖYÄìÓÝ1%7¬ŠË…Ç}gˆÀû¬GîgF¯­‚Ôž]ÑÀOâÉnb¸=Ø‹ß:éѧß-Èp9KHø¶GÉùЃ޵]ú,’ÿ ž>Mxµ”ñd(ºÀGeÛ‚kŽj¥ ‚"ÅŠ÷R¨ üÉû°XŸÒ*mâ %TTKžþÀhx²Þä×û02ôÔÂ&J ;5´œŠÜ“N¯òCOF).!ª%‰$hcK`;JºfŒb»ƒœØ[[^îü~"ìS9ðáfÛ ½êÖM¢¥ál/ðx¥úWCç닸ñ Y©ìñšÚeMß~÷Ÿå„[èß­èýŒç õ½¹!kvÝrbîK¨ú/¹¢^]*Y€î@á]Çf´–;¹Ýxi)ºµneͽa€b¯ãLoèewê$[Ä%ÀˆƒË‹àB©Ÿô>­ö æIWÜD÷‹í× Z{|2Ì›¸èæ’éOL t é0ÍÚ]Le7 7N4ä¶3W;ÔÌvƒ$0½Qñ‹|µCך/Ô4™.Is C?dnܱpbòHçȯ<,v°:»ƒšŒÃ5í6Fµ†tF7ëk<š–žà_ôDZhw€6Ô!þÆþà2°ó‰z¾c±úÓíç-µEe84Ëp€ö(Us ‚¾ÇRÉè=Ç ¾0ަ´uÝRQñ[c*€ƒ”9AÅOe &±j*4t…ýAx¤éoËJwkáƒ$.‚TµØõX`; |ó«ªéˆÉá~{Û-RÔ„ã.—[h:×›yVó¶7á®Ç¢DË}¥û™RëÛq…ʹ±£›•ŮَL ´f¿§ü¬ñ—i=SÇúÖÉg£H±£Ïzù†ò@)¨µ»³¦‚ÀUì€ædhZ^’Ç(F&u³{ª”K`Ôkï_u2€N÷†¾ª<ÒØ[5 Ö$SYÍhŧ|’òfÓµºØ|ŸB“ç‘#"øÙòU»l[}˜d÷—=æ2E#sè}ò†µdá¿y‚=oå=äZ/ƒØÉ"¸Ž»”©rr18pžCa¸ïW nv2cɉ3§õb£Á^Ü@ ù}Èûb¶nðÕ1wwÀ¬¤ïSnÏ<×F¾šWç6»3B N%6ëÒomx,Wö:BUS7™Tv˜n¹PTÐ>¬Rßp’ÏëÌŽ=ßˉk-V‰ÃÆ Ž\Xí7‘Ö­Û¹oô¸ç¢‰,SþY-Z¾aw ƒ¬dÕÓLs@GÌÜ™[÷H†Å>šøÖíÿ4;™ ùñßç >‹$„ëKNÀ—u!‘‚ìÛôº#{aµb2ÚÖ÷îà€6x®6AŽó¡Üž4yJ²…,RwÞ(–µ×”çIB"Äžuæ;d×=b|çuÿ7Š”A7£š”¹GÔ|¡ ¥iº¿L’Æ£ã@?º8^›üÊ~f?šÞSoVs6ƒ3F¤ý…ç|&ù *޵v â}þ°ç„Nxcëb)Oà#©´§Äçð·_6Ûè#¢È€"´ÒGêöá&$°QoTUO÷Iu°£¯Y€šc‚™ VCñž€RÍ-—ÓðFCÕ G#rµñ³àÍØY‹»ê§(ðäZ¡%³-°ÞqY7tlâ”ɽ÷pþ3LþEÜÓ%ï;aúgåPqŽ„mœieÔ;ª8IDK6ë¬RÀÑàj$‹‡ ¿k¼9cfã"¯bÿÏor|ÐÈqÑ7–Â?¶J/ìC™ÆøU Ž(SlËÊ}p`x!÷|iÚò;‡8Á~+í®êK¯¼áà+²‡;Ë^°Û7¯£D¼Š^(DŽîLJ}þ4Rjè½îwÜqn¿ýMÛ)ÉtØåé×¶ÞQs3—:2Û™*´ ²ß2eúÃû[i²úp{‹ŠUê¤g鿣ú×–ù%VWr ÈbÆ £Åk«Åêgz²¬âJ'|=˜ÛoZæÐ‹Áÿ®)ŽìuÄܾXBSÑŠ’މ_GŸv”fãŠ"?fÃúƒÆÅ8ÛÒôùñ-ô@7:˜¨måÐl@oAž¯ ,–ØZ—6OÞuîAÒÿ î ü8iz~9NMâ}QôÄÙo¼¨,­¼áñ7‰AÙûík¦´óÏDÞ@«Ž¾„#ù™y–ungA“º¯4Èp”È8E‘·„15¢ÎÃHÕgû0à>{6» ƒ‘IÑk´r1d‰ÖÜþ(ˆ+!nɬuZrWk©÷mAnØñŠèrÂWûR±¶mÜn€ÞLm)vÎOiª>DP:í´MýòP~øÞô&m¦0Å ãZ :sÌT5’ÑÐu¬oÎv¡²‡²Ç»ªÌoó,Q©Ù޵è[j­M­[ÝŸ•d75åó:j)vE‚GˆÊÙ¤iÃÖÀ ÎûLpç­î‹…§µ[üí[ôt›íN6¡Ä¡çYóÂ4Z>ís¹É”n\z6‚’”ð2 #Òó­1?æ9ž=«W$ÀÏŽTèÂÅnüUt×CM}hÊèq]"cÞ ËÓ“Qʵ[†K¶iðn;"N É!M""vuy^;#ÔÅ×O±ït¹á·Q°‰ 9Â|±úÓ:s2ý€®¬Ÿ9P3ÉëÍYaæá7C‹‡ýOsþî¾Òdî< Õõ¹]cÖÞ A¶]>šá©mÃó¡iäµYÌÑãÝË ÇINä à5¡lçY€iP(ŦÅVw»°vTÌ/s´¡ ‚Â8/‡ŽSåãkî°) †„âݰØ…Îot\O2ˆkûâE'UàÝù® •,•{õ,çu|Ø~[Ù°à œ¹³À=È(Ó)'€÷ot¼½‘ÒÊ;®RêIw?ãgÕ0¹-YÒ§ÉãÏ#¿«üwâ?eÉ‘° ‡êdÞ €jq¥W%F%(ÀÇÈ]Å[@Þ H} Œ4±5Eu`Kv(îó×3¿©\¹Â–È*ï€4\“ Aÿ¾?¡õÙ3?áÀÓj»>ÙÙ8|ÒLjVÝÃÌ8iƒwW¬ŽÀè+ÜGµÞ–ÊfÓ™$&¥Ù|cRz_Jãˆbiöáºh“mR²õÔ‹+'ð}þõ)¹e¥åµÁÕbk-üÒ~î!Hóƒéôê¶¾ôŽä¡¬æõ¥´Å¶9¦þ‰…’@E ¶ÜÉA&8* Œ¨Qü”Ü“dÄUÆ3†Tr1a‰¢¯4òzÐs}á1IKBÏIaÂ:0ŒåLÒy"Ý`¼ üÆpïÂq”“(%²éÃ9€K“Ju~ÉÆmÄE6sâÌ%l |»Žn¯¡n`²¬3BIR_¹º¯Ûîûè).З÷è•oIjVÍv3£î‡<‹¦ç8tדWªO“Æ—Û0ÉLÐÜÖÔ¤oj¨C›Žäò:8†–pOxÚEjÃL¹~ûŽø„K(.SP%/Dºb³³?‘ÚSéâBÝC‰3ºâhþÃÚUŠ{g?ÖÄW겯|Á¸äiç”þAÅ¢£Qžîu4¨`w©ûEý4¡tŸ‡GU&îdùm䯦3/aQ{²>WâyÑRQk:ópìm&²W;$&Ša«µ]°o[ïU‹©’ô~t½ï…b‹@M€/_–àŒsX¶FP|É3¤éÆ”¥Êût4ºÄÿœ«yÈÆ…ðáÖHhû>ðm‹æ3‰ÀÙó^öhöŠ-uªí0êìÂb^¡´ìÑ»ny Ž&è=ü÷&]žÞÝÛIþÂÌ¿vDàEwˆDRœ •È¿±Áw‹:ÎR=”vsÍ‚ïg²ê>³²³7ÈØ¸rQ2OEÏÖ‚­ì˃AçšâþCý§[ÕÓ×ñcNÛ0Vɉ‚?±[87cqH åœïง(&é/1ïxÔCÔ¼ƒÅ‡³c¶uó³ði#|%ÃÄ‚YJ,: Ï5ñóÃ\¬Ùö µ™.oà17«Ä‹‚›IÛ ‹#q=ùÇÇ PM¼)Á\åÈ:ü,¢~}û§‡’ß ²DWjár¿Å·K‚܆ºײJh‡ Õþ"·WÕó!©’Ñí¤ìK+oÃ)Ûbvãåž²2´Œ«ÄŸº—wøºV¨·£¤ãçn`Q¸T <˘Î×hzÝÏO”AQíw-õí`” ì&)'a”b×ÞÒ ™zGÿ,"òœñŒÏSU|¹ï%/×T)èTâ¼Æ( ‚¨éͲ‰ÌJrIu™;ûB[fy5ûŸ‚ÅBH|‘N>ב :þËÚ3ö"¦—¡E–ø/\ GºáXæ“çWsí@Á÷¥7qçR˜½($Yz4I$Œör½!|(·5RVÌÐ_póBƒBÈhÂçÞyóÓ#€LŒa~. ?}É µÄ‹Jº»d&CÃ'Ð[‘íÿŠ5¤¦Ч ¼× 6Ñbëº[”»ψ€v××eý¸1™…ŸoÿçÁ³˜†`Ÿ5yßµÁØI™?¡^†Í³ oØÕñªÍÊA¥uÀ1še@ºzÏÐX‹u ™$^th` zþãÜ1ñ0&ñŸú¶ q¾aàB=D&&-žˆû*ébgO_P¯,ýùø;ò:EK~]Üi¬bßZzÄÎgüÄl/’×diŽBÊ3'ìßÝ>ÔÔîc 4¼ÀH^|…àÅþ$@BÔWí66³ƒí8؜཭f‹u’6PÝŠKÈK9á\½«“ØúÑ S†¨v•Øqì"¤n°Øo ÌN3Ï Ý¼}ÀP P­5WÑPÃä#5SÖÅÔý»‚í³ý{Ú»*4‰†Ïò¹¶ý=²ŽÌóšuÐ2øjÕÁ×»,Üìi™hâKìKŸìÿûm"­”k•up£‚‡©SÉM‡¤l|Šý™ ?Úx1ÉëABã¸Ûñ:ÕB²€[È»I[ȱ¼º¥|çqéîÓ±Ðe}{€Ìì(”‹E ó6d0vù«æ×»AX¸9ÉŸ½Bú+»ˆ€’lTŽðji½ “Bô=qåÕ_Æ‘âý·MB«.%z×qcÔ}éI~Œ½8…j?‘愃.`ËY#=yŠKdõ¾Tµn- Ô%«nŸI‚ÑM¸êi©2° ÞNs*uÑ t$t™‹›36g†i/«àÝËï¸ij Ël(Ì>LùÖM¸ÏvPs²<%ÄÓ=æïÏðYã$ ¤Æ ‚mQ^”€»/pÅÒð¥ØGÆ~ÎXÃ&pX>ÿŽØlÛÍ0Ùó[‹ì#V¹‘ŸB,t˜£`Ãü†…*ÐT¥Á…E ºa2^³šq>`0¦9‘:¬I ÃÌŲFÖ\m’œ g8€\ FˆâY¶Të,å+œçÖ‰•Ìý4@ˆˆÓ–4Y¹QCG4±¡E&®‰#3Çô*ìÔ]„œƒÔ’ò3c uÓc̹<çŒnâ|ÂÕ3쇛µKÑ#³£Å “Ô¦i$Y>À'‰l'? D‰?¬«»Cs‰B7&E•èõ±ë™ ü ³¤ÓrèÛeÇtoZíÈú“Õ#T£&¶Ç…ª?5È j†W77)׌äpjësÊ7•¯$òßÈ9éëýPie^6XöXY3žM±c jøô¢Ü°|RŠÃK )ñ¨æª¦9¶inb„§¸ìÙÙ}`CÎÛ {ÇÓhH8¤ªj8°ìFÝÃú’qëú 3¸æ<ñÍRB‹ ÚŒÜʲW¤µ õß@·ôý9 3ƒy´af|3Å|¨5TEÇåÞôÅ[aDÇ‘}Yƒlpn¾“ñÀd#Ù¢/ÞÑAœffnc5«¹–/Gã]ï‚*Ä[*dÝe†éVàÄí—¨å6¤‹ïàšeˆ½H|£Á4 ïŒéO>惮×î\õºì‰nÓÜJ¡çžáøj)!*ÄÇüT ”ƒ(6*(´ûö¾C[Ï/íýŽE†­÷}e,HêïF™[Z~)pùÔXŸ=Õh×AÙ,È%]¼P4 ä¿;º=)TKîRA€$™v©c[b9õ´  Úü²Ýw.\£0|Âo×ïnûlµŒ_ té‘î8²¦*Ý `ÿدl›DáîêôÇ€OG·¤  ¬F´7лÒÓÄåFÜëg ØüÇÓª«ÿWSV”‡Úm ­¦äÉÂ/w¾`&²øB0³ZÛ|+ ±£ƒ[ôKÝyq Ì·”T´ùd/Øu´«¹­IÀÆÿhña¸ß"ØØiX¼tpà÷ô ZöÞd2š¬åa;hÂÆ‚ù-6th{Üji×fã Ó‡¤Ÿ[—W¤àI£x‚ï~s±2åÏ'Á€P 6\þ²)ºÔK,âC_1õ‹CUf5ê`–Ñ1‹H•º?ïq¤'@txZWjŸ|ëG“ÃÍ”àö¾“L,Óøïa®õve n#„Y6µ™hÃÒ¼Ñ~îÿ3ú%Ñ[ÞKe1AcöyBê¸j…¾7tbÛìâxõÙ¹é¹Á9žh>±e °o*b1ðÝÈaîw|A=hÞ½!ö®gŠ•nX’.2B0Æ2y@6Æ¥ŠX[´xÆŠG‘iÁüî_M>ÈÍËâö ÕÆqL0wÁ.¡Ý\!œdïÉâ €ôozãôÿL„ýuУ§{¹…þ¸f‰=Œ/•`–ö³þS|‡ô߯§äÑG¨:w*c Ý ¤h¤â¥•Î]„ü4ÍvßL{a%‰uûhiôÖ¿"Õ9ÀR?þZ9a}Cáf´Xø žeƒ)²‚Pž®nÜ G½|ìW{¿òtŠ<™†1LVýò-Þ4&šØ÷WÃøßŸ‰Ý`À…“[ ¸MDu‚‚¦vÚ‡šÒô‰xý58ùŒþš ¸èAÙãi±FŒHGõÚx Þø*Òš< uÖS yüÁ€ÿ'•xý0sÉËê²\K.@ñ–q]>=ŬT×àO·“Òa–`W´øS°<¯ƒ+9±ú‹]É÷zºëT9œE‹úÃdñ¾›ßX8ÀÐû!û‡M³ÛÊçÖÁǶZ…áÔ„ˆ„,£#ˆËúéC¸¡áMëãR¶éÒë4å¢u•÷¾Ðvc Sy6×ïZ{+QbÀ캄°-}zVJ7ÛƒåoA)‹¼ÊzúJq+’°âyU¥ÞC¼•f•|°&_í?ÌùÆu»=U°{e© ˜œ5v€Ôäòƒqv»­€êhÄ0àf€-Øñ5Ö8'ê™ï½äe’¥[NÕ‹+a•ß7§1-û:é–ð2Æ_¾3ì‰-ÀW*ƒÙ¼A8ÞO¸óš]u3lûŹè»+‘V) QâO¤ç[•~8ÄÎI%¿¡ô7o‹·îú˜–bþ¹0ƒ‚S1ü‚ 8&³#~M›žxK³Ö+ZÄH`}bνvÈZ³¿Ã3–M¨¡ùr¹k š`k /zÎÑÈþ·ôž^Ô] Îgb2KF©Ó_V“nÎ`ç Ð|1ª¶±ª÷Ö÷ÒöÖit«AŸèã©ãÅ™—ä0c\×`ˆM^±¬µ%æ—Ng1TAŸ5E’ö•§2—)›‘[htEäiJ¢^MÓ8Dþ.× {Ô˜w$$û¯r¾…I+š&©è[ aý”9"d1 9¹lÑpM©ý-ÊÓhiÿ3ÿ×Þ®á/~U‰e c+š Õõ=uûoƒ¿NåÑÕ46Í€ •¾-kµ×ë™È®áVy”HøwëBÚ¦aY]Ü–Ðq­îP0øLS§ µ. ¤‚Kû«=G'-åÕÕ†c/Æ®£Š>À-í&f’õÝ"G—Þ»~´QöDÇÔÖ®LQôò…)õ¬C¼ó‰–­‹·/â´ö»95Ï=š/eÓ1†+zø&ß/`IêŸq|¶ "$’ŽInQ4D‰Bµç\uÍ3›äº:“œÏÅ*à NµÂ» òkƒ¦áœÆ%sÊJ¶;¼¸ %CíyÏ‚èjÀèª%¤Ão$-©fÒ2ÚfBÅ]º—퀮åvçëw>‡ ŸE¤¼‹e—ÆÃ…” f¦xJ¸z ­Íz´™wXdÞõ« ÇüI(ùK>•fxüÈQêzß_œÉ©¾1è'?§£f8õ·Ýèöï©{É Gÿ`Ô/]ÊÁìÒã}óe9f­7çD­vÊnÞý,‰ó _ª}œƒU,¼éÜ'`³Þ7ÁÖ¹ŒaÃ}BÌ0 é·ÓÁ-#ÓÖµ¥"cœUüOÞ9aäž#ƒ`)E¢(<«ÜJ¤àü‘/—7 #ÄL¼UV^óóö-/‚_cúR6ªÑÚ&ú¸|ªÔr²"ÌpPÕ:çªï:a] üRÇz꞊|þyêW€3¼dhÒ5RSwY>&K¾J.leô0jA)ï*•nQ²³Ap©Þ«Ù'üQšó6Ÿ ŽDØ%ìDÌ·frê1~»k*5Íû¸Vÿü$ÇAœë-ë)†„{öõ_€¼Å!®s@]ò0òìØe«ãéi™ž%×ÕW+P mE9 zK`ê sÅà]°ø·›Bj— ø.jIØÞº.ØD’Nõe.ü[‘ÝÕåþ̙Ԕ7é™Ñ1m×^¿`Ô¹Þ°ªÕÛ¥^ª3¾Õ²…XpàN1‡€˜îõã–½æûq–dcZ’™çÊ`ÍŽ¶[Õêuð Õ‰€ô7§ñÛä®…G4æö×ù#·ÞÝ`ûìsøÅÛ`CÀIPHú°Ô÷À¾²jV6¹áͦ™Pÿýy. Ç"ö-1C¿>dû” ×=‘À`†We°Ñ$ßa‰´CU_ó7„× í^ÓgÿyóA©bé<ÝÐû²¶® pcô<‘áš-)›H@q@Juÿš¢ýð~êy%pgJ+#´mç~WsæH ©JÚÍ%l¹VÄ09³ªƒy]Ô±G¬ôÑT&ëIHÂOó%o6ÈÇáñ?ë(-C~©ÿú•àÈ›ÒúmÈhñÂú×,—r¯ƒ¯r¯ Äì¤<ÔØƒŽkƪÞ.swêc‘]§¡Õ\øÓš13†uBÖ¢2Q誻ת]0Õª˜ä˜ï:Jb (eA]vêÂÕDqGóHrXÃÜÅW÷pÏ#sE‡5¿r”& 4NbmÝ(.^ú eÑNŒ€øØ™‰鯹'Š7þ+Ky]IèiC#"£¡ímFÒHp^ga  «FÓ °è†½¯èÅUIÇfÜšô+5Àõ• ~pÀÙ[šCÕìï¿r<}ä,,Ûªº(Ò?§›1_1µ>·W<„x”ÛÛ«¶‰;rǺ§LLƒ–&§ºb‰²{2Úç|ð†üïke¥,Ù;_UK;ؾ}]üÙÇÒï[zˆ¸‡h<#MícO&³ý˜¢¶ôOiæ¹pÊ«|ÖÂl;‡Ó H$wîÙyß'²Ôuí«ž€LJ#öVÍãù›+Ík*è2en…¸È zÇÓp‹ßtoRߕ£0PÙɾÿ¿ïc˜Ç•íý#0ÜéQ &Ày/@Åþ2¼ÁV¨Âò/bõʱŽÊsN%}M ³¯«ãYÙS¹N³Ö\M‡Æ…¬‘Hãœßî ùa´¡=á2{‹¨@h‚ÊΤ¼FOãP³SÂV8ÌdS·–zñžëµÒ®F¹LÒ’Ãð‹q³f³$Ž¿Æ8QÒÌ #ØqžS•àr3@î!9>Ff·ûJ¼ŸfñK¦÷3Ÿš’»Ýd ·/¾Éøûïn ‰x§ÜÄO8W1Ï“Î=«ü/$(®K_ú(™Å¾¹Zò_}á“~èëZ&ÖxÛŽ3å›­ÞÍÚ˜Â0Ü胪5?<ÌŽ+êØþÕõè´-…¢÷ÓØàáKQòsX¨¡ö[5o¢MS¥õÛªb¶µ_ÉSê¯Y—[9Xjiõ\<•ó£8ãx¢_’4ÄG툛•ÐÃÝë¼ÞR;?4-ã¬ÅòIc!ì˹rù`jõ£jš‰žI¢ÖxÕ–»—E’>sä2 0Qh¾”ZÁ‰V~Ò ¤‘Bt‘zÍà}ø†c2·úN×GoîfÍ®/‚$öqCéÃh›ŽZuGe›+Ÿ7ïâ·ß@2„?Ë$ÙšÇ?6{WôN'ž‡Åìg^Ôïs„™úб>N熸é yÝxVÏíþ»ªVøßÞcÙ²<Ü$ŽiY¨òIüÑðé Ù—jÞ'¸ ¬Éˆ+ðêXP,…”GÈ;¿– À"ŽŽàÖèKu8¼ìy-ªŠ‡ø`“BsùÏnRþÇ…Þ˜QÌ›r£Ù¤o目ȷûÚ!“íQÚ‹]2‹5î¶3T¸?ƺÓf+Ý'ï[½¯Åò/ešÇKè\Ô Üú]µfÏ“|¯¬éÛ Ò¬áhÛW(ì*ÍÒœJìóHÿÖ¥í©œ$+0a™‡¡_UJ^TÏò“BŸmÔézbñDzHN-€ó\ï¦'ÖLñ7&×k‘«¦ƒÎBQê¹Ó0¶JŒ„ð'™šŒé\Nê(¦èTea]u™=ö9síÂõ6+bw²u§¬9í_¡žFñSœFø$A Ö®žRh×_=+pˆrfÞMeß•á31¯ËuÏ™‚=´Ãl²Þ*„»’PŠ¢ïðúûa·ñ“€³å3ßéi˜m$ `i,ëp–‘†L×6”ëÙB¡C…µ\?²èÿ:ŠuM—G‚‹Ø12-ìHÉœ#•ÁFAÇ…KQ蘫2„~ô¦ v÷r®.ܶŠÔ%g"ÃÓ¯?ûÁü_#h¢Ø-ËÄ¡*(5®RO”ÖÆšG¡áõõõñlh»¼tfyækÇð®ÐåN¯ê}lNCæC8áO±*òú*yã„FÍ2ø«:_œEzDº›×úZYËwœhú¥ðw^&feº}ZYån?ÍG"Uî¿¡æpÚf …F¼¸‹’’¯ì;Ó[·UUÜ6Ûã½:yÄ­‰‰]©˜˜Û«'~0L}PºÿVèg.…j1ÉA-2aI‰éœùêæTÌð®­WO—ÀTó¡€v©øß-呿FލVÀ×íJÇ¥YCñ¡ÍåÜNô½æT …XÝꄱv‰LŸ1õ@ÚsY÷ Rã;ÍóGˆ™Ë¬üôéûèÅÆ‘Žß3Vª‘‡Ãb7å°á3•F,¸UÂöæhƒÇÌTò!Ög;ñPy2üT´Üêžö@Nñ‚¤•Ñ¢„3ë&`×IËè-v”òn-Á!…‚­`“HÆýS c1Ãnv…‚ÌÎ9~ÀµÞÚæ¾9ex;¹¢mìZÇu¦ÚÈvØãNdEVc~b j£´¯MYÉ‚ ”¶¢úFD±«Y VX$ÆXÖɬzÑÆŽ\ô.F`už×,„Q®­âäá”Ô¶gi+ÓK n¸ë­†- âÒñâxYÎë.C؇u&=•.Êò¸¼^‚¸Ù¹ w?•c² Ï8&ã $i‡p’æÕ@´îÅëñ…(6GìÔ(×gMçù`:ëÍ®äã/]'@»eˆ=å G˜Aðÿ +O Ò!Í)¡Ì˜:W1_\ATïBn•‘pÕ‰'Æ+zj;ÈôMžA"~Öv+w·!6káÔã=Õ+¤×²Yç¼vb5Pðy"d9ð¾+Ì ôÁ¯_!®w`#nÍ´û`;†…аõÊxBĻ؋ÿ‚òŸÏ5¯}®«9ÑD€7òhÑôÙ­¾>ÿR¡?a‡À8jToåƒ+cNé; ,#l]‡ÝGO6mÛ?4]l.”¤@`˜ •³/¤}¼±R„õV€·:µBeý$ó7[¿dHñ–¥!6¬Î· ÌPÌÌ+(EnJómvï¿¡À?ðbhüIìÂßæCg „ÁüóÍ+õtønþ@Ò;iË`®·¥ ÖX^õ´8¡ûT³_¶–;½þºE/æ-\t–nO"IÜF&E˜‡è —JáÓÜòQ‡ý4°`Ýeë74¢ëÅÆvI‘T;Ó¸38¢Ëa!U=N¢Þ=«›`mÚ3¬Èô7ÏUÐAö$’GQ¿ª—WÈ(Ž ï 'cªU”eÅx&[‹I ųe}÷ã ,øÐšuYá.]´0c¸Tk9{Œ_ágÄiþãƒÊí-cÀá!Gí(±ˆ×ìÑ¡ÝʯÜ1öÔEÂèÏ‹eT6›ÅŠY*B©.øW…L…©:ü†C±¬^åf&0Ãñ ~,0Çå•Åiÿó©MâùÅ?йýYý¹"E"1˜§®xz¦`]fP—}Ön¡»‚ÆufUŽ rôØKµxn†VbÐý+i ,Vx̦§ÁwC®­à7¬0Ówf*©ç%㼺‰žù\”·KNç4b‰p¦#³˜kŠ:³£uR%ê¡™Ø6T‹å¾ƒ­õCï¾³ÅV`9%"ârs³@­ÖzÃp„^ì{jXÏUÈiIШíV~Éy¯#ão® æ½?ÒØÆ­‡bœ}ËÎUú~×dP~QÂm¶6e‚I à[ŸúŒ¡S‰0W=­o]哚¨ynÂÏ.y©·¿fçÌB@^õÚ'¶k€È;ô ­½¡…‚ š—sgž±n4œ˜qå€Ë'’ôÒ )4ðßVs_B‚9RiëÄÇ %Ì 4Ç"EtäC7Vå_—%ú»ºPÓ‹MÜW+ÎlÚ]sM¾MžoÐ9™O=Mý¶à®Ðî…s¥&gÍD^º•L®w Kð BÜcçhãÏù»Ô¨èÊê`úp-ˆ´3C^¯‘ßËãÖöÁßÁæŸQDM£ö‚ÄŒ½ªíGDX ût®óð ÁÅÎ5Wµß÷&qõ‹¤Æ¹'Ù†ÜëȘÓiälÃ'ÚÅ;™„ÿôO¢¦Ps‰Ž M@±${a¥RSÁ‹‹¿´°ÑLÜQn“€‚™Ð y—`ÙÊê*É8÷Õ†ýÞû4/þ0{í _p|]ýùíÙkŠ`P>8K{EŸñ-{bÎWM(Ÿ°À8ÚþÚ}ÑŸ–õQôâ æúÈ\!ëœÈ_éíÐÑ”iõÎ-pu!‰oƒý‹‰~œ\O¥¥µõüÜÿ›fX:¦!>«É_W¤¥š=ø… M½+ç¢ é(5IÇeRimÌJK;–g¦ŸÿØzþÖû7‰ÿ׃ëxPFó`H°ê°ºˆ¾Êž(d[±-½9V‰)ìS&žyÄ7Í•ySÀl˜…‹Šâ(˜x°¸"ó ø»G¯˜à·eom&Õ™ä$:«“$nqƒ›ðzoýjöóÚB`ÁHÒº]îË GH½ž°ÜeUÿÉb}½‹rÖFÒöÆ'ï× Vhú¾kw8¼=I`›¢Qw3 V|¯Œdi}~¤œ$¹5ªš?Û{䜿X'/0œ¦~ï»?¤­HJ>ïG2ÑeúNMÿ¯êÙØð”";º- ‹ìZ¡[Gæšwnø¬×œ ±P$š4âÁ{þ²ßkð‡w›oF¾q²8GÙŒòŠ7PæÞÓKÁûŽ9ç"ùÞ‰W|áJëëFÖ*´6EP[™ ÒLtÙ©,–Ž ÞRgY/ ‹“uwªÔëàóm@š'B#Ÿ¬Ø®z7ªg²Ê¼‰ôÀö¯Dõ’™6f¦¡eQ‹'Ä}]£—[tŒ@ZL‡¼Úµáý¦‹·{zÀ«äË—dåˆ[ÄÁ‰:ÊL•”Ý*Ä _Ý™,ëëdù³ÕØ>Ô€>¢ç& þO¢d”4Wi6Rôl CªaûßÖWÓZ¼†n'¶1–îRNªßÐV!ô¡1Ì 8¸º™‚u O7Öz5wó&£‘V°]6¸JÒÐJÖ G7ÿ³uÖŒbž<&âï¥l±¦F0jÀÃ[Ž:zÃÛ¾( ÂBzÛáa˜cšÏïJòsxD…ù!55‰âŒüÔ²(“DµW‡ç:`ñ «‹]K€ð§‚Ù È7/›:‘¼õat*”5¾KrrA¹ß%§á dRXO]P Ï¢[ˆ7P±uã‹<¢©øV³^OçG¾42$£Ë¯â©½Z %x[2Åc½ -{¥3ú²NžO%ììõ5©ë HˆˆÑÞ¾<ŽB*Ðé¾ è%œmœ`­*”­,aÑXEÚŠ§bˆ|¨;Îo«•ºAݽ{uÙ|k› >=/ZGÃÝoØö˜†rÌ©ËD’|B¢"ib}áe²"C¼‰ EuÒ&!†ù4éJšGQ_×âÊo¡…Œê@E°T²èÜË‘“L*Ì.ÖE”Úw­nÝCîì1ÚHDê!¯±ìîÅÞùH~¡Ûî˜óÒ\zÀM1¨ ÿ°†Øö¸ÇÜî-qJËÛÅ HfOW”,ï9 7ÒãÈÏ"zÐÙ"ë?Ý‹¢ÀÒ± ;W[šs žÄ–Ù’wgïx¥SËÿ+Tô žßÚå)ÿZE©VèMŽÒÆ—až&Q–Ž!neœŒó'‚ÏCv7)!Ò?úwÁ÷ëwGß{ûk$‹Pi¢£[Œ÷îÆeÃ'E¨ÖJîšSÏAÌø´Ô6P@ð)©+<4À¯—0\ºƒ¥?nÿÛÝ6v¢>щ‚òC$ÇU=•¢:»×^Hq§÷OÐç§‚f«¼žö'u&ŠØ>Ÿ«ë…$w·Í‚ÈýÒ-Ž.Êc PœØðûö¬Z9.LjÃ|ÝiÈ4àž)eÛwš(=}¨»Ï@ÉF÷gs pýŠÿ–” þñ|æ½3à¾ÊÑp“Y~‚— ¹Q¾ˆj”ÃËŽ ²STä(ü¼ö;:Å1„¡ïÖ¾°N­tkê4†´É”4¡ÈéÄ)%ƒÎ/‡UŒ¿`=º¶ŸŸ¨ï¼Ë.‹Nü6KZ˜FÿÒ”_1¨8¶˜®Sà_Vø^”4¼YU@z®©û”S©EW[ñø_ûm"[͇úääUú_ÑÎå­†™©¿ˆ\Åcmøƒˆo0&“UA˱Þï mÚ˜à4n1øø{p sNŠÑ¤¤<8z`·{øÌÉ1ÕË0)V&7—HâÿÙ.8®k°bV¡¥†·OœB_Ñ.Ÿ†¥üCä"] eUò’u á’8E‘œ0-V˜:ß©puüÜ€m(‡ùNÙu€<ó\Â0†SúiÒ²§¡Æ²”7ÃÃ¥;ñ“ã2Ðî"P¸|™4ñNLÉ#Ñ×Ô«m¼‘Kª§™…ÉpQ=µ3ÆçÌEE “¡ 2‡V¡+õ&ãc²#4BæSм%›˜bƒ¥U÷蜥ž…Îf®je߯ˆ TÞ¯0¸â€ÙŠ›¯ ôü%©Ò šB,!9ã @ÌîÒy¸XzÀK7Øþ,g Ôe}§žÈÞQSÐ&Щò"‰™`…ÇLBj»ñmf8P£;U÷+ß ;²PÙó[l=—ï}ø3[%kFò'èÊÛýlÝòeEQ,eOfJÆÿ=îÕ8•˜#¡Qàø76”Õ)É«|ÕŒHÝG¬©eêfoiß’ylã§5¿¹!W¹Ìð€Â®§¾4» ‰kzL¤jóŒQüð‡ié‚2›Ñv‚KN±0®›}Óûv5ÊæunY˜ §ª¸œb@\ê¶’ÇÑ…ÖÛ õüøœñ©ÍSðæÁêî‚WV½¨$ éƒeW"Ú±‡í†\™ZÒœþäSL$€’MhèUŸiTŽt³íÿÞµ«Î€CO•Ã4¨É1<ÒÛnФ‘†q*B3írŸ›ž93ަµóÕ•„Ÿ%jÖ]švg­;z…ÿ>T'`CàŒopr8ÈwM7Ò GŒÔÔ»Ö·û¶à{w¯¨~ «¸þ mžmOÖ•<ºp•AÒ &묓\¤À(ÊŒŸ&Gõµ¨ÉVd `~øZý„,Ü"LuGU!Z“l.¨1ÊŒZq–%—°™ŒÔþý°öž0tm4T#f쳺²¯J-pê¦@UNŽŒÌÙˆÖ½ƒ£‹T­YYõv%*û[[‡/ ÉqîNÙÑóªäXšè]¬…æV49|lM¨Yr Ð·ˆ’€®X+¨‰W{ÅÙdÊ [É"¼: Y»•­²0±t ƒ€åÝ¢z"/áæh§ Ý$ýÓo@¬§íCñÎ(Å—$ C€Ëò¡½|(µÏL•Ù„¤ü<1úôù³¸ñÌ…F'ýâ49Ü£—.â ecJªo-59èÏ,¦Š̉ê“]àpÝó+Âmadõ&³|‰ êY¡¿ž«Ÿ^òøÈ¹„€åÃIQ§ñ®Ä„i v+r†û¿hº Ûwá}å#EbDY< ¬Ö¾:³:VºôðÞyašpîÿª3á­Ít{]â»kùsûPÞ%›*jµ[ ŸèŸýú ¢ÇUC`Q{l´×^îàÏ.ÄLö‚dɪ{·ZcžJeB×íšWŒ£)#Z¦û[Eœu¬›Œ.Cj sÏo©‰z¬7pÄÆù9?gƒÔ.ñúO†òÃ0XáÞäGàíÎà8ï»´,ÑÇŒ¢ý>™rïRÑÒÂÉo«Þ­HPz¸ ÝòU ÏƸ)Ú¿h)ÚUýdFO6Z­½çÖérÍ2ûkglx§Ï«† èn¨égÿS•Z>Ç{îbÁ>³á±¶F9Íwˆ-ßOð ×Ôn”o¤-V†M{¼4Ǭ¤À' +’Q5H¡Œôx@ž!¸yr­m?ææ×ÍY(mÀµÑko#æ'è¶ ÙD¾FGH J˜øn‡Þ¥³ÂZ:´åÌ“-†‰>¢æbså…™3¡¡œ­Ó¹)úž%kÏâ¾öôˆªÞp%*u_y8SŽ¡¢‚®H®ðoÕúø—$d|â¼oÐ!Ù®^’ŧ%?}(0b™ yΊ’L‰˜k%åÊävl<õéýÓ‘lboU;*¬]èÉZ±×µmÀQi‚¦,\•œ‚skiy¨áìá¶2²€Æ·ãt¤[šÕ~ݤ·Hž¹@N{äçíµqùÏé u¬Â‹qƒ¬jÜVªnæ‹öåxYh´Ø°GX¨™Æò¢ª¾VÅìɘ€['¨ƒr4]ª•C+R_ |•ª[ÑüD€oÁc^/gv="B~ÞÖ˜ñ¥Ú‰—áí3š?ö‚™C–®Îö-X’œŠ98V—ï `$õˆ &J«o£ž¥NǬ/&3Âû&„îKÇÌ” Èç؈‘Æ›µÉø 6D³Þ»(_†…mûgËÁ3ï;…;D‚g¼*­G·/Râ”Å&ßÅÜ»†ÔÑ„îšF=_ ËrTû¸Ÿ²Éd´’SÔPÐÒ¥´zàm™ž zz‘¾CåUìÍ|{ZRÀË|uAgŒbü'´Ú¦>ëjîg¼LÆÝÿ3ÅHÜ"¢$ܯр¯lêš„ë@8¢P³‚Ñübõ«Lí¨¹"¬ÞHÒˆ¶Z\äðK¡-™{Ï Cý… ¿/ýºPž±)ÌË›K’,fëlrFöÛÆxÇtV½0*3!n›¹’zùð««U=¡&pëoE˜©›·qO“É Âˆ B¢¤ÔwVØï©ëÍ979Zäò+3Â%H‹&„b!‡¶t–k9•¶f[ƒoÉtSæ7k­ êø€ÂaJ™{oŽdï ½tŽ‘˜iþΑ[. Zç‡xÿˆ øóm6ŠÒxŽ]‚@›•„ŸÒ’Ø2¿^YM§Ò1’a´—”5Êó }¼G5ÍÊvj®ÅŒ›Ha¢T€‚øÚÔÓ¡Óãå¶Ò); ýîï#ö\ŸQ†ÈȹtÉ=4õïQ"“r´VCFNÇÄBÍÚ•;¬aDÞ2ɬs…˜ü[K:Ý;i÷¸‡ÝuaÿƒÚñøb†‡s/ÆgÑÿãûîÀÅ™²,£›ŽF\—8×·y,˜·ÍÝÁ›»|IU·I"j ¯ªhò÷¸vgÚ¯ì`HgÓD>ÍöX÷,’À¨ª1ùgŒƒí^æbÔ-²vi[ê77.¡`WìgÌg'“èŠý²µŸ°ò¼<¤ym:1dQ¹¼+b6&¥×%j uˆ³´Ó¢°õ—%{ñw(Ù«òþFè`kÆ¢Ðs‰YÑT­üÿ æñZ§Ç!°¢kéÓC:P·PZ%P6€I[ºñ†{!:„û>]g²Ü+¬oçƒßnU×tqq~:ÊIž‹<³µÇ ð–ŸähW'S`@·ï6èˆãQ沫XM«O7\ɪõÛ­Èü„ФÑb }€èHù)†úiÕ¹×Â}¼qUÅ<œµ†7ø$Õõ9™sÐ;±Mt£cÿmM&a¯²õ».TEÝÿ˜JRÈ4“Î2yÖu\M€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/cob_____.pfb0000664000175000017500000010525413607302650022506 0ustar rptlabrptlab00000000000000€¨%!PS-AdobeFont-1.0: Courier-Bold 004.000 %%CreationDate: Wed Aug 26 16:51:37 1998 %%VMusage: 32181 39117 FontDirectory/Courier-Bold known{/Courier-Bold findfont dup /UniqueID known{dup /UniqueID get 44053 eq exch /FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontInfo 10 dict dup begin /version (004.000) readonly def /Notice (Copyright (c) 1989, 1990, 1991, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved.) readonly def /FullName (Courier Bold) readonly def /FamilyName (Courier) readonly def /Weight (Bold) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition -224 def /UnderlineThickness 52 def end readonly def /FontName /Courier-Bold def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44053 def /FontBBox{-88 -249 697 811}readonly def currentdict end currentfile eexec €Є]N¥DíZDlbe…6lZA={†¬Çø„ŽÂ`o5øoÆ?M^›ý.ˆòÍ"@\,-Ç'ò¥[‰Ê1Y­ºÒ‰‘Îô‚5ôÍQôÃW ((ß•‚m³öC”›¡iÇüÆjßmæ\uÃd»t²Ñ–S¸rGüÝÆÄ‚b@uÐipó‰qYc…7{Ó#ž¥‹Þ½³–¯sÖŒõ1sZcQÑ0H¾@¾ÎÙÙ¥(­!8‰@ 3(³vaønQVz©æø ¡O —“/;j~áÎU€Ÿ‚z‰÷0à»D%7ê¶fØÍHjƒh1ÔREÝo(O`ošdŽ'è"¾…%¼yß)… ?>ñŽÛü Àk–ç„®wwå‹:À[Út†îñªz®>§ Zû$Ò·6 ó“Ÿq±sïK Ì3d‰N¬8ãyêD©€øãïUþ5ùr ׊l´ôÇW½Ôà¨üž€š%º]-’”1Qhƒ>«·ƒ¯¿éo¤X€*ÃÊG'!…¿Ì‹FFž£I—Ëiɧò2B×vyl#å ü±j®fp^KÇLû s“–¢ÝS!&ÖUUÏêÖ»ÜÒŽÅgéáÀá ü°âiðÜjy]î7—”²Ü±†6ª•÷óî~ ⺗T*L/.SV íbýÛŠMô²^}5û…‚>Ï´·7ž|“CD‘ëP)‰ØÄáùt<›é¾©YeÜîY˶^Ãøζc”̲Âá8ׇ\Å÷ð†]º@ŠcІélCŸ•¼—¡oAtctü½Ûs†¢¦ F–9ªŒ4O£Ú¾‹TÊH,A1NL¹ÿ7ù€¤Ž‡¥5lÑAºy<=»‡~EùcŒ;ë¼/ü.7Š.õøgõ–WC[MÕ¨tޱó+çT%Wô<ÚÞ‘ðšL…ågÑ& ºVVñ—“F«¥.ê‡ÀŸ³jmÓ™“"ûîÏ|(Ô¬:40Åü¯_<Ý&OÓÐÇ+£"(bÚ[}caœÿÜ­^…„`âøžèð¨f)w÷¶»ŠÞvMC=åÍ qwFb ‚Ï5Ѭe…$?H¢#Àm^qÛ¨1#Üó^I´9¡5“âÂá44C¶i¨.ޏ•µ 2ÂyœSb¹¹Ì¢èëKוvÿÖ{…X’=(;⯕§½·Ó<ˆ\"ç/hw #¾Ùd%Ótæ:!?Û[“©ûº?OTßæ“Í}Z܉&¿zöM¬k@óÈV.ê‚R^Ý#à÷~½ÕYÝ‘•‰Äaâa¼æìz˜6;Ò©zf‹_󇽄å½ûª›Ù°QÄ'²¼— ¢Ä뎜ÁÔƒsÍ–D[ûÔ¦Z…;+‰×UŒÖu|} ;~0"? ~ðž­ÒÙ)!ïËrˆOøGȰt`Hòã\èjæ¸þ«—#PK Í}ÌÏbž¹÷ßN>$«fîLÓOaƒ†qëÚ( 3y§²&58¨Pz™UX®¬æŸêfy0ü}þ@Ža âÖ†ˆƒ·}búëaüŒ2á÷ù_ä+~Ê ¸Ûf‚žwòøvíÏΟÞòŸ,øGøþî{$ìÝflåäU;æqÉ› ‘ÈúŠÆÌÏyò!;Ö•÷”ó1Èádz-Ö5Êr }+CГ俻ś?>*ò—~Àâ9ƒÒ´æ æ½ùN³ë€ì¸|4 -a\÷ÑP柠æŒâdåd]ÍÕ"~í ‡(-¾2‰ñ{c+Ò¾p0Ø ®¢S dõ\¢ësI®{lf« úHœ^ê(i®õúá;°;öˆߢÆ_ó—‡J›- ‡õýáE‡wiì%ûlõ%¨™ƒ Ô^‰@¿Dcñl]K¢ýhC©èÀ®c› s~[ºõ—XM½õŽFÖí+EDÞôàL<“X™]ÝôÍòÉçÂ¤ë¤æ¬EÑ?®K*€Ùà‘…ëè¸ ,G ! ð(å)VÌŒ¾+ÉH©&û¸$î{eBå:%¼e-ü·‰‘ØîéÊoÃL²˜5ÀpN–šÙy~¿è>Š{ãp™çH B21“Å¿èXq¹ná壷Ój¯™ìh=%&>GßÞ_ jŽ` ¡+>€ˆ¼«”A°œ}g–Þ㧯D̃ñ¯yH+5ëä>ð¸1É8øáï?_1Í{í¤wòÚÔArTñèù~ÇËUF³ ¸lÏ’]Ú›þQõG®%CÐ^‡üä˜tÃÏ©eûÝóAXްgͼãõ‹(ˆ#>ó€z×hÍ«0kâÕUèVÔ5æ%î G„èì]€ìü‚=imI\¨›Á‡¿µ.ŸsAê8 ÷Œuà5qÑüÌÚl!R„CL.…k39]¤Æ5Gdp< KDùŒuáQ޶|'ü4]Ÿû÷n‹-¸Â=ƒxÛúØ¥{WŸÍ±qÎXóÏïïÊòÕË"fåüjðîëÚ›«ŸCB¿Ë—Éøçæ3Ο0ŠÎšCÙœWÜÐè£x‡~ÚëeÓ’/Ni·3¯ÇêÌk¿ d‡wf* næp q’Üa²“‡EŠú¸Žwù3yäµ K ¬Š^|RºTÇ¥ /™f2Ñ.ñ bè¶Àâ)ò ö Ú‡üˆ»µÕ{˜±û®œÑeœ5EÉ+Ù²¡2Î~­R{ô žÅ„¨¥§B‚F<ôŠ´øüùÂÀu{n3 /3Õá=à›¯,x=ˆ†G=@JÜÀú„˜2÷T®Z¨xCü’ n¼~šqí[ƒãôc’¤QOOñ9<:YÀqƒßônêÖ¾­¥Q)`'BW$‹t‹ÞˆÞ«`÷Y8ÄZ.dk4ᙋC ‹ÛnžáLr]”]6Øo‹y¡I@ù?¥¹ãô:heVBŸµ:ÁùX| 0ïfxp °^| dmoª¦çsŒÆi,òƒ¦Ã £0ÝEÁÒ ¾_˜;ûPžïp¹! ºÀ¡Ð_¨ a¦ëÊ€”xV:þIA…ÕÕ€¦Aîr‘ó̪ÚoŽŠ®˜6¥•1ìEÓ™U}#î˜= ít{7âOîÔŸKf˜ù”>ÞHKr¾bÞÓ80äÈœørÝïrõ†*]w 7x ­¤ß²Ã"®d®+À ‰Å‡Ôiº],/å7™iô÷ÉæQãjî~6òÿª©´i%.%^†|(8}I-|¤­Oé;£-šÁMŠ4lWEÇÑ'?ý`„ìé¯GF÷kZazÎÝã4"Çòïÿ,ÊíLä,ÿ¡Öf–Mà ½ÖA³â;®–0ž@$y8)ÒÕOÿ¼Ú=”'wæ·Ãi_•ŽXêUøv8Qñý7d%röOŸ¶ï|² „VŸ-Τ#Nž–é ÌÇCU=©–ž²*Y}~Ž?¶N‚ôxGP1‘WªmíÞJ ÙD”¬¶)ˆç)1Énµ¬ˆÁ9söÊâ$YÖñ<­MF—Í®œî(¯5YœÄ×R´ÈÇ#œ T!Dµ¿|^hHVÆÖõbâ©{‡ˆÞqÏ@ÉêN1º‰”oªÕåþlVméôG×üÊÜ议ú×LrmWQ£—·Ñ½r¬:J?×ò»´¬·â¢¶)¯L5W +· ”äEïÞŽ–ì%÷Œß³P)gû¨çF3HG }c}ÎÙŒïÛ®+†½¾Rˈkaåò ñJÚÎ[ÄØD‰ªwÁ‘q»Q‘>¢)©s`‡ 1Ç´‰ÿˆý9ß e=º;¢ÖŠvÆ8ü·wøuÓ½ [7¾w¯«ÆÂŸUõÿH˜Ùpc—5,qhûò.° ~Y6ÌU¡—ÑPt©™1=»*Šôk A³VfóÜ|JÑ“[N6ÿØËïɬ-<Ü+¾r§:úÉW]—á‘°?Ï:÷µD˜l¾ò;¹Ovìv­–÷i‹i#8jÐl± ŠŽR®"qŠWN»¿*މÅ_¼Ë|r5pµËåÌηÞ!…=È0”úW¹œ¨;ɳýIßÄ#+ÉÛÙ--Y5ɈuHc18ôJß³äonœœ½ª¶©'¤7Ï6HЃªS0%ú WF§iÏ”fŒoä¡- cª°FÂÁ$ »™ r ™Ê,¬5ÎïÁ*CæŒ.DÈ V^Iÿ"›FÚ`Ô㸵n¬§6’á‰TU˜=ŽáW7ÂÛuŽ3öæ1½ °lˆýÄãî5œu3ä†ËÿT!úÇOl“4¤l†JLMUU&.«?¾Yù27-.7Àî |¯ Óî<#FÂP›5› ó»7HâlY˜m~Ð>r¸Û[Šè‘hÉ^D2UÌriù‡Ì‹ßJå-e‡521ó¸ v ÆÙŠñgi#Õ_¿ÜÈ_w¾Â€w’¬b=Ù0¹{ç!üCŸ?â—L¨J6 ƒb–ßÔkl>9: ª° Ê~´М ®×àe7šÀ©—l™³€æîývØâTE:Ú¾ûóˆ©\¾ Ê@HÚ{6NtO.áÐû?[h§’'ûâ¾£Wj«À)')¡qQ}¡cAWÕ 7Á1|×”%€Y‹ùé¶|á$'!›pc”©·÷u¤NìûÛgìÉDh ðk„•£|óÖÿ¿Á‹¸bhx< ‡³9gÛ°èp™ñ„á#QS€uMzM‘f,ÓP‡”$š#.uwî‹ Ì›\°ÎFE-9°Tt?¤ì²Ór©¤`R<¯g·æYé Ù*R¿}Þ鈨ÿA)æfÙ‹åD³Š=“PÅ*uÇ?èÑ„wPd&G¶ªœt½º(=lT¡î­ –F¼¼ÞD¾ˆB<X‰­¢W®H§­ebòøÿ`À‹// IFv;ûuò²ùák‹À Î[|®l$ôIË"\ï tçp0;CÿÎ8‚[—yÎFõwB>xãk4@ú"véã[ VÎÙ«—”r×Q#*Q†î£$DUÃê þzŸzCx`yúO/äÀŒôj‘5%B<Ûÿß쨕OÅíÇÅÕ]jt¼µœs¦z sÅQº‚î´'U_à ŒÁ" Ã! ¼Ù;Fb9ÏÖÿÑñ¬öMÙ©üÖZJHkâ;fÿËåÊpáuë¾’(xbúSåF0g7þ¤ÊM‚ð:pô¬j‰b©ÄÖ]vv »õ4¡šr·”íjûMkFeÎ0­Ï~q*{5+¯4;v@¦b"óa膒 ¬m®<‚µœ¼¬³ŸJXK§}dd˜¾~¤ÌPXݽ'O> ‹}é«_™FahZÒjˆPÕâúkîqÙbˆ/ÊôúX›Ï"ÐÄÈý­‡R¾>•Š xíÂþTC½eKÛf×7m'—ðçËÖÅüÛÙ}Ä—H] »'(Hb· í ½"ª¤×³Õk”²è$pÀW;{êêÁÍNC2ñ}ƒ'ú›d©®ÇþF©7³w `fN2ù sdý#Uà•­|`‹³ýËèƒw/$V•+5VŽMÝbš„OΪX7Ño‡Ý9æÔ¯ô/üx£‰sÏLÝ‹E"óÍîäûˆtOjWÓÇGSºÆ?’Sö\ʪ@RZàI\^ KÖþuZ Ý·²x2vâÆC\'ÇÒ|íºÉ¹FbÏ͇ý~qfPm¹YDÙè] ا¸ß=›²D߸Ïàîë„ÛÚ1ÉǰÂÒO®Ü'r›KŠ“ á1hâmGJ†v) f®]‡ìhÒÁT“Ñeœ5EÉ+ÙÎŒBûxþJ t*óSaKh$IÞ>U›bË•š)ùª8oNÆíg¦Pr„ xS>SÈtSý‘‡û¤:u¥Ô_Ƚο$ÍC9é~.5 cÜŠZµ(ksLŒ “ì—1Ä’Xa´ÿŠeseóüÊÜšîF?¨´¹q%Ìã¸êœ?_ë'ÛURGغÄX±,ڒc šÂì»<›ÜxûTK®ÚraIñ;0nÕèt×§Òxà6¶UíÀoïYH‘º¿ŒÎ¡.aumê§eNÁw/í¢0#ÁÝÌ ”çjMÔkz¯Ð9Ø–h!Ð)‡y8ïEå`–À5þ»¹â·yÿ¡Ó’*ý? uÿ‡3ð}à=±æ¶õ.3ó[¿EÏI‡ÕJÙV”n®ÛMâÂKëΊ®&ü—æÁèºí•Ùà¶¢—>µxúµê³ Ž!+ïJ¼ó)È(èÀ³£YØ“9 â*PvÄça“Oz“‰üà:ÅÖŽÞ>ˆàh“³þõ7l!L²n€ü.XL¶†úöâmœ*0'OyÏŸs¦dšt¤©“cÝ}/ªU*vÔ4¡ö®-²1¦|~¿$a:ú;T¢è àÙ÷/ÆÌãzŠë¡ý¾Ÿë0«0MZh{CMð,[5Øñò¹ûxAÄ ÆûpQ0=Ò.‹;†ê'I½œTõÌyÃ^Ep±ÖJÉ=Áݲ@-`º‹‡YÓ­{ëm‰k\"6nנ޾¶`®Ÿ°/ξºÙFŠ¢,Ô.  IÆZîœØ¿4†¸µyž@ˬP,/Va£8}1…)(6!Z<õc&½ÿ+zLÀI᎟žú‡d¯}st—uÉkÆCê4¡ç: c@л±²nX.Õs©Æçà²ç¬qN‡«]Àºc:ÑÉÃZ•y6ºÕ˜1”Þ‘ªh¾Ô¯=Ý\t H|¯T¨~[¸ÏcÀ[Òδ…%ž uñ¥ŸTóB`JNqàü\ÑÔ·y˜$µ¬…ú)×ó(Ño93É2 ¤›P·1žµ±*åÌÀ؋ÖöÖ$ÆŠ¦&vZþeh§TˆË"õΫ¬½M4<ìrˆ°zQª!ÎÔ`¸tQÖăë®Â¬»G`ÊGDå Ò+öJTY•ƲÏFéWYT3€ó ç<õˆà#T²ÚE=ƒÌ«*Í¢eïj‹–“Ú{%mVÿ5À»Ó²šÞRsѬä`ýfL4¿Þ/iÿ+ AŠ=;cå.W¯HÖq¤êÖ\ÀƒÏK¤õ ÇiL6[þ㪆Až^åJ’“ÃÛP‚ÀÞ›²ú1`Ö¿qðaGhíìð·qEàv_¦°FbMŽ D…¥'kYAf{pØ* ËsX þEº”¦Cú: ôÖ¥° &OQ–e'ûpý»1~û¶4Ö:¿òÉaQ`×~D¬ÔOÇûƒäÜ@%ã¶'Päè šp¢ ÞeqyyóWC¿šÀ¬B'«Ìèp±³’X†1þ~-¼¹C3n&«­ÿˆÞ¹y¦?ž>0¨}5{ÅzÝ;ŒÇ¥Føî°Ý‡ º„«äaÙ©’ôƒåZɼU:×»ã]¦øZîà IVÁ8@í¢!1 ’¡/Ê{Ôéý¼qSLöèÜ ·„ÌŠŽs)ˆb*Úåµ.°_ɵ®a¢´ŒÝq§“!q÷É™òòfÎäÜè Ë»Øä—§òéêÒR“ëÀKy^²‹³²¶‹ K³£°ð$c;$ðÈß^†3Kbì4Zî{’3ž@Ö™q˜ûç4‰G~?:áù„!le_µ“û•Ø€¤ô[‹^Vû~#ôð¾%‹wƒÆÇZü*Àø9‹Êæw¹\Š•vñÅ+¹ts(‘ä¢#‡1OÁ¬ìå}r¥;~ >(¨Yç3kÔéwÊ-–寵Š.kR3’nÖÚº`eøý æ1EðW`èýA5„ôü‚óK„\P!ÑU‘Œ?Ÿ(ë§H*­Še$$ùLÁl âEú{{–Œ§aÑÄv®µžˆ{Äémñ¢êÑdŠX<õòn–YðÕ÷»,@Ò ï4‚Ý´ñ¼s/žî£¦D=*ÑŽç§|¦À0ES¤n²'¤KP ^oŽòHšw:Iµ¬.\‚9{h¦ ™ElIŒÜýa¨<õHKÜN²mò·©§•!”qêI¡G†â¸m1Ú«*lÛ?Ä>é-ž{òdNsãŒzÈ+@+³×¹®‚$êØ‰a§jIŠúმ@E{ˆcc|™±ÙÄ5ëeP‘ãbÜ–FÊÊF<.øxw×Þ|S&ý„ÅÚi8ûwÄÕY°{kÜi±©gmreöõÞr^¿³Äl‰š×õ7¼±äÀ®FIB\W‰\íÇAùÀ&E×?¸“†SÝRlÛ8ñ¼çµGT>.ïÏZŸ6%8dÓµ‰µ‡·üÂãâ¼°2±^ •‰AZö‚w󡥳𤊾Ì)™Õ#Iúó½>h)‘€¯úN_ÈA&Õ¢ Ïá[‹4¹n3C‚ ‹‚bñâ uÅz¶¤ËKpJ±\ä ¾å§+$ ÈPv¼OHe*.,º±¹—.:½ÄË⟗±è"qabYñ6’Bp¨÷ÀµÎõ.áV«n§b5§*'qyà)¾û0qQÄ‹mäŸÖ¿®3kª{œñ³¡zž÷à*†3üc·[Ò˜KŸ×eضG§Ö±ßä»áÊü âU¨^1¬Tƒç,@IÈ ÍkÂ^–ÝëÓ© œ?§¸©a=ètä½G€ãÚ4l¤ˆ~Æ€¬ž¼ZV«)ùpw«¨¹,–â®…D2B&W*ì¦}ÕW‹;[žN™ãUàZ "}0é,ná„?ÖzÎèöNÿÕ(Ðô½µ<½=+>Ü3ǚȠŒ‡ÿâ!ªÄr<‘¸Mo3’ ¥ãý·nsœGIÝÍÅÑÓ½é4•æ¼5þZ.ñh#¹à0Ñ.3Ôš[¸th‰n€¯hKι‹É|9õÜãô „IîñÄ£ü 奻ÑÌLT)õìù ¼ø~;%£Ë•뢪1-‘GåÓ³w¨ ufÆK0‘UüŠž°áUï.[$¥1ó©CdâcéjHŽ ”…w\„]a¥ºN‡´]%nþýo0‰£¡réœÍÄ•«à>÷µÙ¥GÖ}®Ä ß_‡>±ØæŸl>©“UÁ9ÿ:²j4 Ç¥òIªZôz@9ZDÑÕ¢TÒ¾rˆýQ•MǨd³],|ÀÓ2)ö¤=A˜È'ìÉúØýä3îà·Heu3ßâöÚ#Ÿ{ÙDè€D1‡¬‚‘øTAf.õʦ•”l`¡£‰È…g›uŠê6z}ÿ6 >ç»5?z丑_ù<•‰ë°ñ±¢a!tD5¥:tèeoèu¼¯ù»"6‰T¿óTý"¯ßÛ‰ÎçÏo©»W%º 5”Æë¾ôJ@ëðé'@áÒ,ÝL€‘¼J5x· COBõ¨“„Ë 1w|«d]øˆ¹x[N{Î=Ú}ùNá'ò}"—ÓòE6ÞR™ñ'‘y'Ñì«éÚs/V¦a‚ ã†?~ÙS#ÀÊkyh±÷ÿLß—·i·Ž<[¥}yƒÎ£1(Øß3š˜3»Å“[9'­4µ»yݶñúÀ[Û§¨„¶¤Þc©VfžZ~‹ÑÖÃŽ/×J-XHdþ€ "›­¢5Äܪ_ põM+UÌ-²•?DˆÈï‚·ÄÍÇÏÛ ¶¡mÿë”RæÌecl )ªð+YeB>Ô ýîÂc&IÌ3ù3(+çý@òr×]Y2KJmÉwnþ9îÁ.x¿e‘æþ^Uy84;&"¬Ü}–ûq:œ§šÖiï$ÉZ<‡œ‚£©j+—‹S[±°I.%ŽÀ&>ûOs8€ 5Ÿ?xà&Ukµ´k]â5¯ÛøÕU:p¶Ê+˜’Å,´·°³‹;,æ®…_0ð‚W$ÅEz”÷”ò2|IÁs/˜Î7h”ê§&ÚêC N{£ß?Œ3…êzf@Vo!ÛAM‰@5¢óÒuéöéf«!L‹0ÿÁ‡âc¶Ä$Þäbšî ô*wéOÄV°àÀ2€Z¡\T¸è#èØ Péwi¾›w|J Ä'á©Û¢ôתÓ1¸¨-t€M9Ô4M[àuıý²‹‚ë%E_ÀУv»oxmí¹Íá^}¸Äèöƒ´Þ!b蕦pQ P€ºCþVþ÷Ó‚4Ä»Jx›|àMRxh¿v@Z‹µÊ䦰öi‹ÛÉܳmªið¥ JèP,Úê«7–Z*{+^ZÉ-¾q}ëŽ?MïQ%?;&4øÞ+^– Äívj.yŸ€‡1Õ2p\r2 ÿ±¤)c\KUï¸é~±UÉ›•R¬gF²æ}$÷ZH'*…ãeÿ#A¢/ ®x¿± ÞÓ“è¸l÷[¯µò䏿üšpõKa ¨Ï–¦ìŽî{é\` 0›Ð&1ÏsV0,ïÃÌ_Íce'|V“rg}å«'˜äJ¨œ,Ñ®Y´£i±`¨ê>Ñ”‹•ÛšÉ&q?úÈÍÞ.V:^]1ÈŸp•üë\ ñpì5ª ØQx%Ë!î·|(b”tFBe¥A=K4XÍú`ÝĬ¨buú˜8Ï (¾pb'D n‹íTYôi{´ï ^§#̼¶‘F„x´.ø ßûC4÷4WA7dŠXâ:È=¹uL¾¼O‡<Ý_rˆ!Ic=ô°‹G¼ÝÊ ~Íæ~[òá=8Ô!WûL¸ã,/ªt~u.š-– †<º4Ûéd‡9gî­í‰$:òJ¼UµMuÞîQÊœçjvÂ9Ò/Ç­C œLªy.²•÷;ûå®ù!Û ¢¯…=4q—ƒ‡WN$‰)òl¨‚K²æ; {²rE†ìÀ’žáOuQê–¼‰.Ê¢™â†8„/÷ç wœäW&¹QÜô‰¾Í íâ{.8ÌÄ “ z†‡Ôü"w«ê6Oï'¼._"|cŸ=¦l@S¥ ''Ùáª-™d¤ŸüYË —˜I \²=‡Ófj L­n Oü;Tÿ¢ÆTš qœ‚$l™/_º9.٦΀^ hwƒì€ˆÔn ±¢’êR±𼫃7#k [À|·ÆBΊù2Ÿž F§å‘Œuò©¹ÖE‰‡&By’FÆŠÞ|$]})„¬¡•Áý>¤É34)àW ñãK]'»UñÂÍÛïµ²Öwýs¦7­n}·¬ÆÙYîÐ''¿1Œ•Hsª£1_«kU^\9»ÚËÙb|V'­Z]Äæã¨k—†ÿ¦ñt‹»LÐmH0RÕU‚ßÖœX„Ì»çN/c¦gÎ"¾[ê¦ê³z¡T°hK‚5¿ì™„ÝaÒÝ—œœv™ÿÄpª§Wik±b«TX Ð©­ç† 9Ï~ºy¿>ÊoNàÓW>NŸƒ›–¥06Ü9Õàñ~¿*<«¢«¡Â8òsª¡Õσßêñ¼åN:…¦¢¤ÈË_¨÷ÁrÇO´òîÏ[á°u¼ÒñžY’/i(i3káYíSÔIÎÏ_sF /œÐˆ¾ÁOÕM&iioÛDÈœørÝïr°®èR?Üù bv ¢4]hïOŸ¾0 e ‚ïJÞäÓ°Åk»ô¶e!+2€ß×-þ Cî´21•kX ‚2èÖ qÖ´¹€.(CT´‡ðUIVUÃÏ/ uóýì¬þ/?EÃp¨¸à%ù®¶®i¤å›Éx6ÃÙ"ðêåŒNòàu:T¬ùn_7 7¤ bà°ø3¹žèhªw6ß*R|­dÝ7Tp~罪Ž:£‡ÃÝJk'83ôiYôÁ̰Œïf…rÊ¡Oµ¾°Í¬9V$nøž+]ý{ãeÅ•³špýöà A¥ÿ%þ²4ÌÚ;îƒ+’EgÞh×eËó£{|ÀÀÚaFpOdØx}Œ@=z¢Æ8˜kCaë†èÙÔvyiýçylk¤S¢a¡°›KU“€­ÕGs¢ª°º†O9GHÁ|Á1\ÒäQ:T[ûÕИ®yQ–̓’àmW'ÈI-{n)8# ‹ÉôÆU¬'¹.PxÐy[Í«¿7±4«]`‚ÞÍÍ>¸T}æ¢Rµ6Ù˜õ0/KyݧÖÄ´<ŽUå VŠž¨‚"Ç•úkF¬E1C£k.š÷ùÚ!ËkÖÂ1$'ljosM$PqË[[OŸ¶0ý¸˜á…°U)ú¶BCÀÅ©Ð,Kþ‘‹0¬è,b»d‡@«ï0‹D7üòU¬`œPŒ&°¸Ï„oc^Cþh¸»Ýò“'ÌŒI|}6ÂP÷²†öÑ‹¹H`ï3³Źbt(îpAÉhº£ÎýÁHÍÎÅcbÆ^«þ§¾I wÃgªËlջ߅ðêvžóÇŽv³n²¥À Š` ,À­ôOd7ÄÖFú ò5ã輑 er Á 4>Oä/Œ{íül«¶}2wŒ–î.S}XÊav©ñD(3‡ò€7¯å·#„ç!t@ÊÙ èmÖnxT1¸“Ü0-äêµfÎ[Ó…ßåD 7ßì=§iÞZ›‰GA8ª»¿Ë.:&TQšóµÛlsL4]áÇ’gŸù)^åð,›ßÖÇÙ°x˜1ºé0u‰‰’ÀQ#ê¹H­;MÔø5=¬ö~™Œò=He±£$ø¡Ú@³D×€2^™1e™üû•g÷æÀÝÊ(‹Âœž¶:§µil4x¥*Ì*|è1iÔø€/¿Q7×Ô‰…uܨ ¬9ç\Gø·õhp #(6á”B"Á×hÆRÞ†¸r_ÐcUJ ½a™9ü¯óuÏõú ûÔO³5Aßð|1,ÄGá‹]úô\Φ’jòˆÃ&¥Âi¤p·» ‡ ;ÂʘüX5!÷Cí]ŽzŽEãØhqYz6?(QŽ.ÂÝ2¾5tþ0÷Ÿj/§Ä?‚@µ |8Õ|=Zuž¸tŇïx{x±ˆ›¶•Ýn”ñ¥}¸' ÁÑçÛ¾¡4³Â(ÜÈÚá+ýèéœ 1¨w‹°yv@{U3òÍapC”:= Öo;¼­øöœwp¹.Ì2'wL § ·žp„ODä(˜È ´´t¡0kŽ™ˆØû„þ˜Á8>Ý:iÙ¨„ªÏôy¬Ž­°ÐÎ.ÈÕ ¶¯ÁðÔT–Dk³HME‹®În ä,ÏF˜Ñ ˜5þ£ ˜œJÚ¨(a=ÌÞË >¥ ¨øQd^Cr.¹jº•\eûÅf l/5ì´Íg´ŽÃ¤_yò3Á<Ýš©ºï é‘MºC¡ÛŸà•ä\Ô*M´Ø7“> ×@?‹:ÁOònÜ4!+nHµ—ÉIåÚ~÷däû›veOÄôw—¨’²§ œ1ÄŽ]YêÊus—( ¸ÄSM© }õ°£C°…³o¤1bûñóàm`ˆ“Æ«ÙÖH¤©Eª˜(‹ÕîùÛ‚Gü>áçuÔŒs¿Z™.a†åœVå+æÿÐ]-͈²?hÇóü*|@Z³’–¾7=Ú{T¾m€ÄÉG°Jl¤¬ŠP¿àÚl Ár½M¯fõu'Zˆ€Å±(§ÍÚåá²Ëï)â›77CH]Ñh`ˆ@øG™ÄƒK¸ ¬ù¾ 'ýk‹…(ïÌù›úϱîJeqæ­{èY¦>^fÙ*¸#1¾wõ7ǸòÇ.ÅÎ[‰8-‡ †x/z”º±[K4or226÷ž‰8QÐa¾Wi±—oAÚe~8‘» §àE`Çîîw¾óï©-4°  xyÛP«¨¯ý»Y¦Bd ¡2±}{Ú4vßMs|ÚÚ§&ÒÍ]¸ùì @ ²hÑ–…yxX¨ðšé(]Í3 ÅðѦÏMÂÀ‡K5w¥Õù ½~"A…³èŒ¢*’ÀѽßëÇ3=5¡¢²ìª‰íqªÏíÎS“Õª+ÌÔzÒÜ]«=ÌÌ$‚PÖçEaŽÕ8, oK㈤W@ÈŽ¿“"I™£s ¯-p¾&7†ªØÀ¯Î–å‚ ÌA÷gÊ㢕Åÿ6%Á™‡œG¡åªˆéšÐ ”ˆ6ë’JmÆrׇq©U6AE3|çBöÙZ++Æ" mÒðãâ¨[Ø|oÝ NÛ½$«¤‰•@õ-TV,æV“´ªÍãR7ñRBH¸à ]꡹©Å³ÂG9Ãòè<7¡.D(›P†|ò[ÅUË…U¹¡ðw.¨,ˆ}•¨Vc;˜Èuè É1Ť^QDC<«r”Ôfh#ºëUß×$ê2óYFx¼¶(s$ßy.·X¨¯G@8·-Ú¨Ã$q)±P„` R6¸Û½ˆ’cŽJ㛫›(mužt͸>Ò_ì9ÌiqÉ,J^–gš»Ëï!L‰¬•Ü ÔiZ²)!LšÐ¹š5/(dŠ!ó‘ù€W¥³¼; ÿÆ<eR0ʦ!ïõBÌŒô¼ fÆ|( ÷'“ùª† Ð0:.£3»a¬ùºã2_RDcUd±i”"Ž( nÄyq–õå¤YE/í²Wi_š#ÆÕhÀ?Ûb•>°qq#µÆ‹ØÚ/ÏÙ–Žar“щý%ßå\ó>ÈD‚´bl ½K*÷O—ÂN+¯õKAâøgLÒ_0¼±s&pFqÍK+ô‰ÏW)È:¹q÷³¸@ ãÖaÓÏ0û ÞOWUvGŽy3ÕÅ•à=úèUmBÁ!·y.Vêýå¬ò²/ZÀö³·ý ¾S'ü˜£ @H% 9@Æh]¥‘,³„+Y4Ù™u: ïW IÅc"Uj¥èvz>\du“uïû‹/Ù×7Ä~MCÑ^÷‰O·£èzEÒÆÎØ ߌo¨KO¼/–š€ËÃ8†20ÜyK×fŒ8rûˆM ŒyE™×.@V:? BOކ·¾Ã³¹7Àù4iu/êANaº¡Î2¡âРoÈÝóÖX솎4<&úÔó¥rž30µZå•tš!/Ž(…EùØkVÇå¼b+^úÚÇ”;æJ³rˆxoýþ<3l±5W}(=ýù«¨}j¾›aÀ‚ðµ´3th…žÿ²”À•B~þÇ,î2a`Û(u•ÅšÓºä²qm’µûØÂ@‹€R‰òG<רïÄ]„çÑ+^ø¹WßaÜ$¬Ì™)si­?6¿lP¡oGã¡èŽ,oq—6¯¾Þ;‹òóT‹·cisñ4VòøÞ}¹,ìÒ>:.fuÛñ¯ ÿMFtzvã »œ¬·4XæLKVCf¥—™ÀSY–¤!øg¼K ‰d®ôˆÇÎr=w“qÄ^ÿ«A¿­g7Ïó«P¥ð#ÞˆþÁ^³ãêi­–-l¥VãY(2ÜxŒIÑúÄ+~õ·xÖd¡ é+ѲWŒÕže ú°Ed®–Xl.| ã+[KªªkO—H¯IR1æ³ñ:]qeLÑ×qŽév‚’ñU}+ö<]hK1ô‘h­ªi@H›ÔÔ[ÕË̪.ì`° 4{:³›lü[E‘™}"Õïq›«ó¦U1’›È3¬uqÔ²”ᙯët2]Dq¨¹Mèø< AUEt¬;[§¥Í=iëÿˆÜ¿m˧ZhîäÚ  ¯Ïzå 9žwm°ç›Ouÿ—áù· ‡™ä‘äPKe˜Õ…h ›4ÖÍÊXtÁ(·cEr9ø5CÛTè+Yë˜ÿ¡‘ÃÏ®â;wj¹ïõGî!¢Ü°€7ºÚ¦^Ž/k´{G6©8Šf"<tXK &âï¬¯Ñ %o_O羕z£¡Á1aQé¡Ðíµœ=dx%A÷‚(èNR%@“[Ë‚=5©¦HíÍ®$³ÿ°Ö'=V¤{».å™9ËOœ̶%¯åé=ұ E\"À¾Çll=*~\7 ê.ÿ›9üÕûF3grÂî· œ`M©Úrïe€eßøPïÆŒ_×sM‰­É9›A —vþè]ÍèˆC‹q>¡ÊÀ5³Ö'•–ýKÀÀñË(7(B#d‹6–Ríç³qßéëç9óÓºF’¢ÖE‘³@WÄ´šH†´*t ªÁªÿ”—îæ b/,ž[¼Òâ‹YþÕŸ1"™²öÔR„® ÔEÅâ´!½ÊuÙ5¿oˆ•Õx“yéL·}ܘÂOï¬3¼VBFBʶ[E}:[+Rãÿ‘LSé1@¨•¡ˆ[…šcêjM5oÔp4„š5)1¾EŒ”ùKµ«à¬kªºá>½Ó8íDdÁ£Ý6y€Bµq¤&h!K(°Ùe ž@Ô&€ÓuÇæÉˆx¹¨¸øúz¦^Ï©sHüw]žÇœ“Ä‚)Ÿãi§ò³Â‡d__aÑ‚€Ì–_( —h´—,ÜÆ‰4•23¬y‘Šë¾\hõÛøF² ºm‚³‘!zãåQìÖ~zø#ü%;ö×ò)#1»£½OqŽæ7•@J7 Î?Ö×h¯þuÚ|„ÓN>pÑF#(Ö¥Iƒ Cêrøìƒ˜À´ù8DêXi០BœZ™é‘Âp¸ýj»é3_O:GIxâZ~šçPbÊs 0>svÓ(„xÍ|ammÙ½`5>ºä$~„Þ×£‹¨Ì—­[ÍÜÂm0³÷r=¸©h6ªN¨Y9“‘ȃ”«x©UPÐ[VÄÜìÑqœ@Fì>ׄ ÅÃQ ‘KóŠºnîÉyâëÆ49O¯8ýÑV7¶*H ÔN±2-èևò†íìÁS î?w¸ÔÚ’ÂvÊ},$%tÉêbûQ©¦Û/Dx¬1ÇÀ[±”œ§+ëp¨JɱÂEúÊ'ZGÐ*Ë0'8.­=ÊN±Ee©¯ Ù³Ö G9|ú¹ðÅÒD®Ùm-ÿä»Dt¯h¯¼·­„WÍbÈ -‰ æ!ÕÄâó6±r´ä ™/ÖÅ@(c$~´ˆK'fݿĭGlOvð˨ÕYö¬0Í'àýÁç$¹Sûœ…Ú‘@ƒŸ¢Þ;6D «Ž¡ûðQ¸ ù JM8ùJù“_°X ÄHS´ô•êš |hhÅ ®‰Åšù^ºxÑ: NÙ™úzeHï;.Í6¤çJ[ÃýŸÔ33ù;¥¥î^„Œ{Ç»övJ/çr+IýLü¨š­û ¹iB›j·:¶? vûäé!ñßÅ%Éïã¨Gä^CKÂóv¾÷̉Eˆ­]©+;b¯á?ZxEµÃuf0ûeà÷Œ tÛ!)µÐÌjé-‚“Ÿøë¨–³àPbŸ¿N›Ãßç’³ÍA3z”ƒäO1„©ÖÖS.A^ý÷W/á“¡"ª)©XÛ„ÑèÓ{î°éõœ²Æ”©ÿAP3Ó¬9Ͻ<½ÍØCG&V›ýwë¬oÒÖ>Õ÷õù 5pœ§ X›¡ `w€´Á•]î²Ðf«Á>õ¡èjBÔ0³{ " ŒŽÃmÑ~/a×5Gž}B‚e ‘ï+Qô˜cúBêB¸Þ52B)R­¼°Î‘>úJ5¬ eÐôÜEøCH#É)äϰÚka·*EÍ>¶}@ûÒ›–5-ïe`ºŠì:í펀2©5°«$Ÿ Ñ/|7ƒs21ßnuHÃz óÜÒ?‡L¿X½‹“ê'cÞµ¥ë1Vü| i>ÛÂŒ«-ªÄhªÛ×ôË” Èxt¸¼’»&)£ùOÌî§FGÊÀ&4÷”Õ,S˜‚évZW‡¤Ü(xÃŒ1£öD 1‹‘’ž«gÔ‚|ë™°œÂ@UØDh¢"fK˜%׆íe¸ÑQéj¿0Mi¯í€W©ìÙ|¦9íJÊaJ­’ßµ#°ÎÊÀFÀJžÿ:`\šÍš¨=TÓC§#R‹á0³•êq0µ–h¸‡Q– m‡(ãX0õ­ÔÏCMá@%—ÀWMÆ`NÎVF/×Z¼5•ü1) fœmçs"ØËTøSwSÖ¾ G>lV7éÏ$'cùÿ,_'¾Y‰tÞ¯ie?ä–Ì¢0äÇÒõº†¸Õ{F¥N¥lbB1šƒ¯|œ€ÍJøî8~Ω"²ïy Ë6€OtøAÕPÀ".¦ó•®ÆŽH¨øï‹¦é1=†U‚'cRØ/›|u ÷ª=U¯IW=VtugN…ï·¢ô€3 KúU«$ÝÉ¢ÀklÞv X¡ï侂ÎRåkH<ýtŠ+rýù{ÏÒìR£ý~³Ü1r4Ýç¥Ì/8M^ÇvGã’R™05è8@Ú•…{3>¤oMpåvJdŠë¿)Q9õ˜šsáÀÒ5 ¥²nõæþ&íCÒâ·mQ² yÔÒÇÇн꺃6îN19€Ÿ‚ üŠ oìQ@ƒ¯±8G€ŸêjÃݧC÷RŽ 6ö†Qo<†jŒ« ò¶\‚ß5Ð ¶åÊ¥>ÆæÂGú´»€^VÑed˜¹ß¥ãY·&ŽýxC ÃàV‘`·øº„Úã˜öï¬6z5^ÑJÇqÍõ?/Éhû±âÙ§N²­Õ=gÉ–õð¶#‚cg°ßºñ¢ÄÀÏ«Ä4@‚Ka ›Îs·#¬Åþë8MZµÖö£'W§{a jÚ-ªUI“³"óŽ ¼Ñ¾ЇÛeÔè~=‹O™;ªSÖ´ßÔa?t;¼®vwÆØþ ™On6…‰”L°²†\ÑBÉÇÖ˜ZÈ?tQô›BÀ–­²>²°0ÿ¦Z‰L¦I{Ù\ƒ¡¤ûv¾UOŒ&ð›¬> ó3žzíÇ„~Í]Ù6€ñ †é˜Ëºîrë9vµˆm(Oö0ØŽÙ’ÔŠÔLŽ7C ŒP sØy‹åljòˆ•þõÜ¥ æ¾–› µGe)ð«Óo: ´”~úYcÔ:q*ÿ§î𴋦IT?ÁÛQò_y]ÒNŸ=»ÑyCaç¥ï_8¨œÞ¨‡Bù ƒz“ÝrKË¿ø†Ž¯\nóáøÎúBªGûd'zêpÒö•³“?ì x(øœfÊfzêº}N~ç:mXVûf÷P ?]eoØsÂ1óšÐKÕ±éD…[QþªÌKá&_ãh¥¢\zªAhK+™·žéÃãR鈈ôlú?Yúö-ó”,½í8Vkàææ $ö×®fõ½P·ð ¥Ä’×{„ä%ÜÍç9°žLޣڿIJrí>SàéYGîæT«æë7íŠCkOw b,ƒE8¾2¬¬ßñC€’_]•ä&µ–ÕSÈiËSsîGg*•†$ÄÆ´ñ?Þ0V²Ââþ7.=ˆý•C »“QeÁ¡ÎÿfœöÊDöê(60М`áVˆÐ$¿qbÚ\ª#IshFNhѶúªïÏbàUµæ;ëk©Â äåé;.¢/,§÷u{{G»âqNBšðŠwfÈØ1àSI;ÒÚÓ­yiFTø¸’u¸ï#Dð"jºðÿ5ß\f½Ññ¿SÊÅ<õ>K‹ôo«Ê±dV˜Î¥Z“hz·ˆ8xbr~¶oqö9Í%¦?o‘¯Òpnê >,yZ9ÿÚ¡uôððÓ‘»¼È™¥ò•î™±|_¡˜G)°”ÉqÛ|ÎΟ=Ñ9 (ÌÐ~P È3š"]¡NJB:»!<‰÷å×ó|{>âŸr@ˆ2Ü &Ϙpíu¯u) âù3äõ$°0{oÛ\¿·•¤ö*˜¯h†f—!´®õê¥p¬-e‚˜Ìž[³VÄm®‘pSLÛ+ ¥f8³FÝΕ³ù.ÜÖfËêg¦Å-YÍŸ·p]=g]kŒK5T)ø =§ún_4HNÃ}Ö”‹â.°Ðµ“hT¤E/ô§v-bô'–W–yv²“(*Lj6ÀXßfÈAèbI¿õM%£fÿ÷€[{oUdJÙòd𠉋º6ãÝUù7…*ŽÃ¾ª§â­È•NNNFú.Ä$áÚs­]дÝ=À$Oö5Ñ DbçÎY¶Öc´p˜6ĵ<ÙTÀÌçûÎĈŒG’úÅûâ!Z° ¡z×Ýdi(R;¹´èèñ|^Z’}ŸOçìqù a0±ô]A¥µ#·ç†æ¸$ ñe%]8ÞZ.¬™qWá¯{žÖÝI>÷×l 7Y™eù£ ²¼§¡'Ý:V Ô+E2 ¾EP§Î]’±ç+à2G~¢©•ÛYÊð0ï!EXl‹z· ´×¢EÚÉç‰fâ I>¡ {ÆD^íQkS¶¿÷á)ËQršŽQxvÉ5iåOž6â`NÕªp‹ÐÄP h¶¼X„š;9†[½€Ç[V=kþ¯¨º]Ä60ï¾žŠ³Hã¤úöæã„îi7;ºìs­âèp6«[>ÝÚâÈãJ±;&Ï‚ ÷µ,öá¬Ú+»PÅð½ô‚|*é¹~Ç"š˜F³©”™B5¦SºAÿ¾.w ”Ši}ƒ$×Fü|SUL—¨ "ñ:Ú:„ Þ2ûž„› .¨H¯ÌÿÚízXÆum ö2—¶F:(X>“¨à;^!3IÃfÝfˆíã Ú‚âÏœÊæ ‰` Ž./ÝX-ðKs¡¥#¾ø6È"ŠŠÀQ©$à3½ŸF‹õ?DßI±¥EÅÔÕViÛ m”<$p>%‹lHQ,>œÕ· qRQF'»pzæ©òò(ç1±`¿yy¤@„7Z¹*Äœ3ÐîÝŽø¨“§AÎVöáAp·Ó‹ôa9ç$Ý:ÍþÚ¤Lø¾hNw"„ÆN÷q“ \IpþÙ‹£!»Mƒ]ð‹\Yš3]º_p Z»ëòP†y‡kÉß©à÷þ}4dI–ô!>ÝCúóü†Ÿ Lñ_bR{H›àAù-ðΥςÙ{k,+Ý\¨¦_àeršô»{ ŒšîÄ¿wÓ"\8`Æ:‘Õ2"_Üo(yJõ­[Ø#e\ ž~ìú¤$û9SÈÜ‚ׄ±¶XxÄ¥¡ÑÙ(Iû‡¦Dcqr°jÀf)ŸØ«àcП¦øU+#v¢Ô-Fyh[éˆâñµˆ`3³°§[·^®y„M3µnM·)˜¦a‰“ùq­}‹RqPQiBZ=C¶sJ kr(iõs~£äí¾ÞaH>nFÏÒ£ÿ=‰tžzàK%Øå±r!i … *Òânµò’É×1cÓmg)ì±iÔQ2v¾¼é¸[zÚ éîú-pGO6Ú¢ÈO-,•4ˆõ¬øÞ€BS'’uþÐDZ')‰™†GSåè•TQR 3 ƒE úÁ”‘jØÂ?G놪 âPšä²Ýˆ$7N$D]\qeø“:ÉÌ•3J(^@²Á_Bs™2Òk!‰êôÄÙ¿=<áxwÁ±^ÓÈñÚÀ@üªoUv–w¸âª„ˆä2†¡ é©&¾Ž_•$ÇW ;ytÅ! ÿÑGu”GoÄs¼(š %€Ö^—ŸGýV(ÝJgSs¸ »),Ç+(Ýß'z„Ymfš[ÅMèŸ Õ×@p¶H»Ã ˆxY7ÞTÕÿ^Ñ …ÛÇ%xvZÿ[!§ÉáϺ<×”ÊF‡ó(õ͸ßþ@/lÜ7s],ç›îðß2C HÉmKs¤Œîôª?Jɳç½_®•Ú ©lÛ@4"B_çÁ©uüj-kð†ÞwçÓE\¸­°¾“dè¥:®hŽu¹Aµ¯Ò’£Û .)S „aÊ’ïÍ– åù#«wáþî½ñ¥ÊþäI) 1Šï;”eðFÓ–X¤»/³‰w@ó˜»ìz+¯¦d1ñMJþ2=?6»¼] 56»6ÒÔ°ttøÚ ¤n;¬ÎÆÑ'Ï|ÜmZ!ógÑ©z³HW•y°°“Šy…‚—†Ær‚VÆØ—D¼5ÐJh<—Ÿ0½å&w‰6Ýë8ˆ¬HtkkÍà‚TÞú$ômI6Ž_Ê+Qà¶5`[f@Îßj(" žTtmkr껨¿ƒë\ ¹ÖV3pr„ xf±–ÁÑqoPúˆ”Ü;G7pwÜq Gfõx€å‡îeDß* ƒÀgç—ã?Fewª¿!à‚LÊé凑éòo|x+ðg.„~\ük´ùXàCNsfL@ ñx„°9íÒ‹5 žu¢Fð‹Ø@掲üLVö7"lfQ9â ˜Š0kX‹ƒi³æµÂöñ¢ÈÊ­„ç úDT# ¸öY]ß 4>±ž8^*K@bÃþ`UíX´nV:ÔYïÆ8¢Î¾u Zcø/´¥JA 5tñY²län¾ÿԸݸÜÙ@'»_—bê-?ß7@8ˆŠ =&üþý)—E<¿Q²QmgRYËÀ\Õ§‘NÉÃ`(¿çluÜhÊh:pWÛØ<:ÿÿÍýŸ–öù¯ÚÝ,Sjɰúü1DÍmõÞÚÁPL#ß2!š®šÂ¥Å+±°L¸/G4DPkNÉ(=‘ZºÑçíö*ŸŽ¸:Ò7 qUF 0½)T‡µµ­~¡?)̪¬môc ðNÝŠrÙ®¤@[†€­æšCœ ‡NÛ_§øò±,¾£#¿KuváÎÙŸË!iÚíTGž“)ɡĴ(“Põ¡6‚^-n·J#5TÛ•¾E­ŒŒ´‰M¶zÜ \EÆÿ(ÈþªþµAÜâõ D}osÝmâQ÷–<"ŒÙQW‚\Lšål tŒ³¨j¼ã!h.$Ũù6uÍEeÆ©p?jrÚÁf pßV ߤÆ˼0Õ`¥UpÜɪ¾q Üg<5ù@šrÙ±ñú¡.bbqKe9s\½/µ3ÖtK+¥ŒJMÀí1Ñ#tÿ`‹s)aznïKfPSŠé &_¯/ ¶*îË5œBØ™ø€9Vß5u½bòh äñú9p_8 £+->øúïÊ´ÕU¸€Z@Hj eÝEs+ù3vcw";k‚Ž•kxWmÓÑ;Àöʱ©zƒèB‰¥`¨¤©’è6îr=1é~\±Ü ýÊÅÂ2Kq.v¤˜"A©(˜y1”c¬ÝŸs÷Id»}—äKyqê†NqÞ ¢ªÅÏÙãjƒ]Ç£1Õç‡äQeuæG„ISi›vò0#¹ÒkÈÞÍëu–q\R´šÜÕ©üÙ2`>VÙýà‡”kŽr»A«F7ÐRÜ,bȧ°úéÒÍGÏÌ 7:CÆÉû_YvYp€z!žþÌ ½Ç«½Çõq{·‰þ@È XÔÔ…as|0=eé8§{¦šÇíÀ™íÝ{XÂÊÚlð‰çriÆ6>ò 뺛p«f“j„wXõaô=rön#4ì(`m~‘¬â‹†XœÊÔi”«Yµ©@Ù‹³à;IV¦qá¶ÜÃ3ÍD5ãÅ„íðxF\m|5)&HWkUäyAk(¾ËÝÔØ«’â¹xÌqª;[NÚ©(üJãqs›Oüµs&hA1?%p¯^¶¿~ž…¹ZôgFe„¤Ý;ªûôiì3.±K ˆðù¼¶)ZO$úo&ĵqV{…,zÿ-ŸÙ'bݶÙeˆn;–° lö ¸‹·Ðú5;Í+Ò8x/Ó&¶Ã0¼íKëæ'›Z»O€´FŸ]B9ä9ý$§wÜç› «·¼&;†LÐQ—w’•_ ½áßKÔ˜J±ä²ñY—¼,™=bªÑz¯©„}kz]i‹TMÂØGCÛe^¹;ª…“™¹Ü:9 Å´·Ç©§d4vÀ Q·ó5Ùæ‘æ7ïFœà’ áº|ÀÉÐ-9,9´|šS²¿ÎáÞ9yÊœSVµä~uýا<]ÕS 埛½" ßs‡­,OÛJctìøV§+?·}ï¿Â]…R®æ®}h1èYj‘®¼ÝÛ|´6wrÚ‰=è¡øÃ;<*ßè{w&u•ãÉØ+1ÔÝA˜œ»dÅÌ;ùïÖáøÍøÁÇ«çN‡\˜ptA\2ZúÏcËýßX‘ž-Ûó3þÿP7|Ãt+ã @êã—åÁ˺jäP/Ü…«? Ò¼ô¸¨Ð¢ç«ÁÖ€Øÿ gË µëåªoos®q›µ:TË ²¥.äýÆót«?áÝ “F¸‚BlíÏŽÑéj¯[ÎIsÅ|ε‚Nq%@L?bU“îcñÍ$£ Äì4 Òs¹i…˜žÐ¤­æ`ðu7-\-¡³o~3Úýµ<$˜àY«ø·ÜQD Æ¤2ÙªÏâ|N×y³×t2X C²Uís>»3@,,zÃz¨V¯¾Û\\pš±’Néº"¬ÃùÆjW-5ê bFä k™·v 6ÞÔ@Cž&Wä ¥Æ9“‡óÜ‚qúÁÂÏ—˜œŒ ë314yTãaw»mƒ»šƒ(@·ø½ÏA",³žÒ*¬dš8TÈÀOÒì‹ÿ{€á©šÍ“¢–ƒã/s+*´C­’#®~¿ C£„µ…òó¡ÿÖ¡C,§’µeÖUë¢n–‡ó=³[›LmLË™vUrVú⹈;c.Iã*øà9"|$»NøLµÕ¹Ã[‡5¤½Æ\¡c Äd§ÿƒ3Gè ø`#.š2™vqâY’+š("®´™PËá×$ ]àÞ†mÎ_ºRÚWüäOmíd¾Ú,J¶ë2q¾˜.%L÷{Ip*B“2D¶¬B@ÇÍ<Ng•ÿq¦>esÕŒ€Ë%Š6θ)hšÌÙƒP9­fÕ“Ý:©ѲèƒYÔÇîã~ò0îˆ~_ËU!CÖ|ˆΑѧCxÄqš+÷Z(Ö·}ËîµÀxmjrHÒî÷ÿbžã-KOKdô¼TôßáUýúº1¡ ˜ÜDó…à2ÔQ„!Oç‚Gå³ÁO™Rçqs:·Vn¤çä0WiÈ#O‰~ãÜVc‚;7RMáöð¤3ºH ×1 *äŒ%Má—áuë£ 3bVÑ=Ó¸¢k7ÁxÙÀEÈ—¯@û½*‹læ4Y¯cþªTTÖà·ˆ?̹‚ßiÃÆµõÊ5»A;2æðÖ*“›`©¿aÕ½RâÜùƒçó&»„ÌN¯ÔLß„á¶ë\}AQwY¶§"å`îœ8l[!+ ¬Òá‡]„‹Gy)W΂Nûkòlp’ôx}I+¯!d±jµèèS^±:K¼cYÁ§|—‘ûÈÇ Sob81—ËÒRê9¹/U$KÀŸa5;‰ÂquÌ¥„QDÖ©0˜–í‰c¹Uh/Pz´%öý{Û‰ˆY³m6 è×ûÖÙVbR6´S$*ä8y8£ƒñOK¦S7i×:(ø+Jbü Àq3¡,XûãÄKuÞRáDgÔTã `š«sé»{ZDï(%y¸±gIh¼®üæ¹gò‡¸ªÚ¥ WE=`grΦˆfókØü&µdú[¯j7 [®mN✱ñX°;ì“s_J½æJž3C)ôÛö#•žèÖN„1¹{5vKV¡:ǯjŒËOèKDt«SGu6Ÿ ·£øÍš éÈ¥[™ù8ƒŸ[í,Ô¶ªùë£QÜ)îã'aÚÚþ\¯Ž¸Ã­àÉÀØÞ .{ëâ;¦·è\˘÷t±k #/ÎG|]õÉR —ÉÖéu½’áLxøpXÃRÍM‘5È¡~pÓQi>’hÚ ¢yÉ©8œIÎ è!úK»z°º«ð\¯µØÝNQô¦ƒíÈ26±r¨NΚê0="*WýÙ:öú*[ª÷®%»ïÐçl7ÔdÕƒ<Jb–7^3 ";¦tÁHе@/ûàPܬ{EBi2L=RÚ4¿§CX;^¡ÆÝujŸþd{û½ºG @Ö.w ÔL*玫W%¬š>/êæÁä²µ¦ë®ÈØÎÞL 5D²°CFB>.Á%BÍýí¤p½œï€Rw:šágÛ”Ié¸îxž,¤A'9ÎÌJw÷õLÊDdãÿŽ`G²Ìöw®RžÒ:u›§9‘…7ª(kºôÓŒpžè&!sƒÅàGy/5¼æ‚´“§9SVý*=ø`S²ÜÛM=gÝ÷È`‹]Ëtx~@úåÊtÚN]“±Î¿KÇFà“ºH’»‹Y–Ã/Ó'ÈߌuÍK9ù®ùÇ#Â,Ía×éA•Êò®?€T䳈óq좈W©æì#QJî5MW¼k[oâ:yÔBÞ5á ´ã=ÙÊIâ@KªoÅ"?lm A¨S|©È7eï;³Ï…úD¬#H’“–ò2Œ%xÅ¿æ“ʾóå¾4‹B 5ªg„æÆë‚OaÿÛÎçJ­'î<&- x3©rì¢L:–'æm‰7s)ÿ8×Ìu%¿:úò5{«+ºŠlÿ,Ê¥Û»V`èÖ꣸b õbã-âã.Ô]¡®Z©§¼eÄTª±³ƒúRÎByábÅh=wA{I`'S·v¢‹¥w'à«otŸJü¿xï/%A®§^3¸|Юƒç¡r1x;ì ‹¦pB Kµ:ž‚°·PpCÿ˜ýzŸ£!Å·! FE6ñ —1¿U9ë¯{i†ªÒúÞºëšrV.}vFØô5ж:ò‹€SYvú„Ì[ïCСëÈ¢«6o¶~ˆßzûwön‡Ü-4 °EÿÔ»”:étIKÂÇíà^ÂX%‘þŸÒ(ß½s†‡"Ugç &ZIåÁ&°¦…*´ìêcn^FœÃ9G‰:~¯[’‡…!{©m׿†íï/éè xa€þ+bH¨EyRÜM+\c›yˆ57©­0f²]¶äžŸ\ŸÚgG²;QSím¬¸§¾~‡G]awÀÛI ˜GðÌÒ‹ô«N©@Š ÒóÆ‚­è$3¶W¨7 ‘õˆmÝ7Qlbç=AêÚI …èŸíÈ_lðžPÜ ® ¹›ÐÚJ.¢ˆ!Þš´ÀÛC­%zT¦0m)_ï'qC+Ñ.oGNrYó,: ù Äš‹G Ó,Ôëˆy¨h»ŸéÒ¼È~xY}WEGÅâ*rêº!6'þ<ÛVÖ3¦”~Ê:Fœ±º?5MºÈ{Äú† L–h°^ô¼mË 5í˜×Í­‚¹>ÃÃDXè…T¼¾ÕùÀ'‚ö¥u9UˤJZõeÌDZJõÊ,üÈ“kß’  •aÝ:TÏÜÜQ¶b­ÉæWñÆÎ1!”¶_ˆy›Â•ðð형0ïøjÝã/‚¨încfˆC&4V”oB¿®# m×ôœg ˜Ó[`£Í€[HfoH`C„+ ŸD/6/Ùü8¶ÕñÎÖuÏ/—1­·Ð‹ÞìTÓæ•Ùý—T\9gLOÀÍ¿*€sË?ξá"¯<_GxÍX„‰:¬æŽ6 –(ìQ-=Aþ ´Ûh&£©Çó¤+•‰ÔxBm{îúâiTêÓ¿[¦‰Må „¾™÷4ó ɲg{aWhÁZõ‰!7Ôþ5ew] hÇ›Ýïül‡g!©nu½†ÊøFëk¨!¬5Ü‹Ñp|¥šê´>Œ”èin±Xÿmo|ùù:t…Ð CBL—æål\Èi„N7ôXÕ=ËŠEù}+ÜëűÙôÃÞÏÚjãQn»¹¾µ©tÜOOšàéF ¯6š»*FäúYʯ¹@µû>ÉnÙ±¡Yš†øÔÀ7Y”z;%·]¤†;+ø<¤bkô ü¤')ó¸ïXà  úñ d儡سeó°‹ó¥s¬U|SÍ)‹âð]hÜÔo>ÇüPÀ‡V¸ìÇðäö²Í=T<íkÚ‘Wb–vXPr4CáÉMä66ĺòâÁïÍO“²S¬mn¾‹¦¨ƒÖ¢ìij'ˆöâñíIßqâWKÔ8ÈB^䙩ˆÿAB]y5/Úõ< M^!½Ã>ïT‹W²¿ÄÞ¨qJ½-ï7!JzøVhlE·mä‹O/šKqS?sö½ù >„EÒXf´»YÚ޹Ͽp½û;]iããÎÕRt½Ö-'ô Ý%Kˆzœ³’JÔ’‰ºa~ qó¬ËÅŠ·ôVðö%¨GÄ%jД æ)=µþŦöèVÃÎóâ:Àøji÷Ž50‡ïãcmÙdpÔ*Э;òhX·,)Ç:&ê;".²\ë„0,ôl[ln*r;¥VO½¾^Ÿ{í͇…óô¹ùM|3êÿhÒÄë a;‘QHD–úê|P®¾ÞfÀ0µ=YÁ:v¾ßW\^m‘ê@™xÆ"kÖ ®~6UE58]š¥,yFÂZÍx†g‹ òØêd‹lôó”îîx6[Ñù7àîAÑ)o]F–€(¡£=Ó‰Œ«Ó›'0AõÐTòaÅŽ»ˆ¸L]íï¡-OuBÔ›[0˜5CS >Oòb½³™Â ô`·0s8vi¹ç•ÐM¯W˜v;¾(Š:èµË¥ [¿S ¾*ÄÅûo´ƒü»8|PHŒ-*YCÙÆ•ÕB=îzb³OåÝãö“Z CÄ1POFhéúMÓçÂ8ÒÊýXÔê"à¥UöˆMûÒHj¯(ŸyêÖç†0€«fuÕðéƒvìàÀﻕ‚ý}—Ó;ÕèÈàêò^´9WYϦaÔ¡Áxm†xHŒç·Žuqz-#§þïõj‹€€½ìÊe¿Hz÷¸ØïÎ=èÏAL´%±`·{ýÿ1ù¦²ÐæÿS…e²*jØ”!̬½8^¹æTN+bŽýTóMèÍÜ5›…vŸA"¬,jó;Ú[dGDÙÜ1x.°’nÑH¦S‹(®Lm™4“^7ÀŠË¼„ýöyd¿\Ô"§hÊ×Nãõ­À½Á0þ( ?ó\åìÝUA½;óJGCiçð^ŠˆÀ:ÑÙ´çC’½nA¯í^¾=Ñî·þCú§üºÙ¼òêìt¦g“è’Îð[뢙ç£ï“êH m깤4 ¦ùl _I]q«f‰3þèB‘D›“Žè#üÝC¨)ÓJg²’½ŠÈŸN:1g1p¢ÒLVÈîò¤xZÄù|NˆßÏ÷7H¸Eö›ºÏËôÌJçV†«º’©º¾‚²tåÈ£¢ËÐJ¡|ûΓŽ_àšºªÒvÖ&‰–°sœ¿†96Ñ€¶áñÚk +Å‹è&=:&¤6«ßµo'÷Â1<[»N ö·¡Ö#¸,, ©Þ(Åi;ª/–²o ǰIFWÒ·t ›±÷´|Ô“¾‚ÕЊtIÏŠ“» “ý‚^Á÷·übLž†øê®†­eOY *¾ŸÏ›Ì!`E¤h|,.%àÉfé笄"Üp'Bêî«ørLyâVÜ2µ&±¸~Jq9r{œŸÆ»K":[/ºúŽŒ&è ‚GÁ¼¶Ùën­bÿ¡×4·Ü‹RU€·JÛÌû´°7d˜±@?ÈÏùÁ+&•±S}ãøïébÒ‰‘õŽ$Ÿõ݇ÂzÝôfÄ`õëϤš(Ž\¹¡–Ý·›©jï}VU':I: ÉenŒ¸±(/d,yý‹[î‚ÆÛ%18”)2¨†¬“f‰ùöé4Žž¬ˆ ‰\ˆåǧýr)ÒèwOqŽæ7•@JxÈ‘›wšZÓvµÌë×ÔÉ}xÕ™zÖ9V »ÍË}K‹¸Ó ôœs¾^c\pÍê0[>R…«,‰Ñ‹G¦ˆßÄÙÚ 9²©m¤ÔvÛWù,†í|ñ0uÂ4Â禲,ïí ":EeݨHowóù _/á‰R!þR½P“KÇR\¡[ GƆpìŽcØ‘²JÆZvùg¦’jæðÔ¤½*·œÿÆ­¶=ò6âzöqñº¦Ù¼“(UuR%ê¡™ñOJ´Ôθ±6BMÏ ¬”/ºù”øO˜—j“µ`ª(Ãtæ$WewÁ\|£¡Ëuå"­‰VÞ1Xî×w—ƒ A7ÊmãµlháÑѢ⌞±q +ÆM¹yíS î^£DøœAÕ¢ˆð<·Õû€ !ßN;!„ë ¥mà!ö܅¸}È»ü‘ìuTx­êDâO‰“ãS,À”ã?!‹už'Ù¸6iÉŸ Œ£„ŒÂÔFùìŸøi‰ G€Ÿ7;ùÒ…’hŸŽ)¯¼Íl\®*Ôí+k§Ox( 3΢Fê‡ïdI£ÇÍŽ.r¯½ïÙ‚¾O‹ ¥e3VûÔ”æetgNÁ`Z®÷ìi6Q©ƒŽº _Q¾ú¢P©i ^ÿOpeòЀ3v'°??á× ,yïE…h²xǵ­á ãxž™Ä Âz•4œ¿&ÎÂXɆncäWúŒKvxæ8ìhJ¸±s/ª ™™}ˆ÷įJJòUÿøãmó>R[”Щ—îÆØ†$³!GXe\BK¸áO¬ ºWÞà=JB¢Ð/~õñY™@'9Ö5¶»n°®î=Þ·[vû°á¸²Ó÷“ž…BÉr'„boiÞ_ÐsõïzÎI_fã?õê‚I5’†ÝÌE,iqd‡å*ÚôµëS–Á[¤×çåwƒj™|43-g•2Þß‘D‰ û³g¥ü5ÐJs‰õ^µŽÃà}ÍzE,ó‚»>伬$ÎÙ§[œAÄVÎO•^ƒ&ÉÍ¥¤žÀ5/ÛëwCåž]Ëgú5>Ê*mýÑ1¸ðì|³ÕÙ)HO„‘Tº©•§9üvbY©›þ)+Jo ƒ6ÚdÊ[yïÖ•ÐÊ.©1 èìÖ¯o‰9#6UjŒÞÏ0–w‹¬” !•cºTŽ*¶ˆ`å•© hg.æšvÑ×àÔ=ø+)¤ÐÀËO ™SCO·1]¯S ¯xµCa}ÑÝ„›úËä vìS'±BþzBÎ{ÈP2rш°ty<ý4(SfXhAKg(EøcÚ2ÌO ƒVF‹ÄwÒ$ŒT¤Ã î—!^þ»"Zx0aìF|¸¤›J¿Yß¼åpNï#Æ×âwžȈœ40Û€\5‘±°PÆeùyÈ˽XÔ?z°yZõo@póï$É1®UÛotwôJ7Xìn‚ÛäQÛ tS×eÇÎýåS­Ú¯Þ?…4Ñ>c$[;]Žá¹Ïä¬Ñ×=ˆï¬(h­ÜÚŒª¬nÿƒË˜ÝWAñ…åãcÑæO'M E Ï]Ç‚ s'´;V¾¢ð + ¶§]¦ÊÆ!ÝxƒüÝ© H‡áËh Ç]s™PSlVC¡tÁ*6/Ð:¾ü”GÄLåb%Uð3Ú¹«·‚ýŒê¢æð!¯>λr"Õ•¡Ýj£¸?Ïcæ q+u·R®¶kðÓÇ3/=âi«´¼Iß!ën¾•=™ÄTÑ çoﬧ:í}O¦Ô)JÝgRË[^&“§ÑP_¬IíIXæØŽ„4<ŒÕ‡k‡Œ-ˆ£%þæ-$¯2~Æ;âeç`'4¤+™Eåéÿë¡L<'ÿ’TÍÓ_¼˜„/ćçКÅf³úY}¦ÂÔ„¸±†¨€Y›Ðý®õu v/L=†^ýÔ+ü‘qevËÝà+ pW¿¨ƒ@À’ZY¬+-‡ '½w¡÷Q•ùH²=wç#•êòz k ¹fÁÎmÐH9¥;¼`¸´&‹Wz3 gnbygUÙdÚú.ñáÊÜ)6_™]aªf™"R`¶ˆîËš¤¿^¯ç õÄãHÑÿ®_¸=|HŽâ¥<ÄèïpîãÓ)ûKBû(y9%,%X)¨6–.˜hjÀ:QŽ”ÜB–râĶNÃÚLÇ-ª=oìK—mÑ9~S¼¯î[ &²Buñò²znÝÛ¥ $sÕì _ûN_GÅø9O!„®ŒÄ«[£ÌO6L8‚$Ù­ähÐ/Ûùrz?P½ê2W‚žªâ‚ä‰^Â1“õEhD4®tr@Ãþ9ɰ˜æ–Ù`îÕGá l½(5¬¼¡Û¨2€¥.a$¢$,ˆ4gôCo.¸ºœ€Sm¦®v–ÔÑ…o%‹-ò¢ û §òE•Rác7Ž>èùÚÿÆc¯xåɦuK…ô£;èösLWe#åkLU›.•¨Æëµ×#Â@(oÚq!ƒñ[Ñl‰­q„¥Àóñ+X†%“Òos‚[ 7À›!h5’6mu·ñÓlÜ‚Ô6:1 ÞX…Ù UãcB•„ýßkY4/yìï£sa³³îÔ£þº­h Í»sä/â¯ñÚå¶Hc†bÕ$Ú­¤±c@ÂhT[@,0Pèçi>r¨Ä&øi’œœ{¼ú÷Ø'Ø—ÿÿ zÆ ;\cžWø”ògïq¬²æ4Rèû)Ì{Šiu9"öup:s]Û.2Þ€,¡›c–tSá”Í,?!™Tce`gɇ|ÝÑÇÊyEý.¦I×Ó^ÕXh±ýG„ÕU¶¹‹ùPþÔ^ZÊþ”-qÞ¼4&CEIBÍds V(ÅCO2’—Ù:Ìûµ'_½¶ç´q~é³´jí\²õ RíóÂuÛy…G£”Ä¿J¶¿’=#ÐX*%˜2xÄ´Áu¤”>…^žw î¡+¨>½²ÇÒß5µ†é¥áJ”¢ñ*p(¼T`kÄ{@àÈè(>ß7ÄŽu­|ÅbX‚Ár¡u¢dT¸‚~cqwËy$$Õië8Èü‘V’og¿î~ï ºšØŠä–~ku_Tn<âÆAMØ®-¼˜ÃFA僓ޚ6Ù]1×Ó$íDª!Þ̾bïPÏ=„#èCK ÎÖíùáÔ]3\+Þð1–¾8ÓñÑ–½›Á Á€÷*m|¨kÀÏ^Ußn÷ö1i‡ge‘rl¡¸íøÕd Óù6õžXÿ‡—¬l€ ¢HÝ<×ÓÆ’´®j3é¡1ñ°È°ä©¼7[ÆAý£¡‘BÀ!EÇdrr`9 1Ãp‚| ä×ëçUD ò‘í}V”ïÆ"5\„îÉÖ«ËÊ¡ÒëСùÖÿ 2}»RÎ>ô&Ó¬eú|«Ž„°W}½énw(¢ô~1U¸üHÝõêÃ<£3¸n‡¨ä¶ÿ¿”NÕ»‹6ºQµ×•0ÛHXˆå¡Æ lÊf‡Á¬w™f’¸XÊøn_`,q×þ>®¨¯åDYLüvšÖÐ=ƒ¿²i&³¦èºÛ'£B-ÛÛ`ÛS{¢ÿ ^8µ0ñU¶½wVþ8†îmi½øGuýdEÁÍÜatïMÅÏúßsn\v;¿à´»$¢ŒTÑÂU‡"rù*å‡êH•¾bL]øssÓEiUâ­Q1ùS*9ê%[žÀ©<º§Ì€¤;r•¿|Á÷Ž2}6.Í£%:ÛTôbc ÇÒ3¼†Í¹I†CZŽe"­gœ¿ô§ÆÂ_5ü…lðœÙ˜SÃÿEœ±¨òaÀ&ùЛ<Ë×]›1çùµglY+xê¸!ÝʹÒõ#0‚háã¡Ô›#OšNÏ–±ÔuçÇá“IwÐ]Ó:ºEq„‡¿ß5*`÷ü9Z¸«íœ:Ÿ±ãpðòéÊ_ôIÔc³ % _†[Õè5ÅÛŸ£ÏÞ$1Ô¤ú Zç?§ƒÚÈÓT`Ñþ­ÁŸŒ.ì¦w¸¬7¨òŽ–oöÆcuÛìË6J”QU­Cr#¨p¤Éy®¯ŸÊl)i®|ö%dXÚm»÷¬aüA;Ëùˆ4ÚŒÂ2 5ÙŠÀÈ3Cè ½ÎÐpZmk8m>¾‘JÑž{2QÓèsº)PJ›ìÆ.ŠÃÄs¸[´¬Z¬·@=\ïÒׯÏpÃÄÓø‰×¸_—Ò§±E©¢H…ô7§æ‚ NMK•yG!ÉT5Ö÷¨NÞ®w:~GˆbBèGÜ1Û)ýƒÿ¯î_†7Ùö¦^YKa:BÄd³ýëFÈ_}0YaT“ÙS,´vïÓ=cµósÝsÐ.òË\—3Ó˜=ËÖ(G/ãñ¿"?‘!>süO´:dXõˆ £… C F Uù™z>"ÛïlvùQUï³:힇Ëëvk³¯Š_:"Ö>QÚï‹úƒb¯Äs@B"Ž2Q©Ü—‰!Å̇SE¤~ÏÔ§¡^}ÀˆüÕ·Qý”äPÖ{©aµòQ£g¥FmH=€q©'õæD-lÇpÏ9@垟æâ2$ÒÌápm7Mä˜iÑn¹¹]”AñÄ𠤼•pä-÷± ã%ƒk¹©Ò,w3vb„v ”†]áÓÓy-hY™˜=ê¹çè…>»yßqÈ壾ÀZô XkÙÌSè2á\ò¿˜\àÚíù¥ZGŒal:À»8ðâa‡ˆC(†=r ýÈáHí‹ák+3\48ø0rpráqXþÔ-{=fK–A1[ôˆr{_%eOŽÊþ¨¸Z¤W©>‚a-|4¼á°ºª‚Öv¹?¡Âr`Cðók*ÍÒ£XäKÝÖè·7åPÃÆUL™#ÜŽ•s]SqqÒqÀ ‘&¶ª‰‡bïýöZ@M Ò°ÍÇüCt¹½Á\gÜ£q³wÛÒ“üP.m v锯3–°þ1£ ?Z8ÆüÛGw‹Êd+;í]õ`õDF*2%›¹ŽýGŠÂoõļÔÄçãPDlêÇ…$à=Êñ6tÈqÓÕòý{ {™ †ÇÑãÜVOuÜ06; 0T3ÏÂ%ªË¹B.¹ñÂækË·ÈAÅ4SŽö-'Çp¤¶ŽãÀ{¯”Áûà'K†Ún*ïèŠÇn¥ÃÐõ^"•žàDTòѪGÇn,s…ªÜªvMt£.æiÄX±Ç“œ²ãkÓ")uÍŽÊ(¸í–Á;àæ‡D0‹ƒB=¯Ñ–Å7ôî®-§õì€'(¦$'9 ÓR·[˜“|>Õm»>óŠ»]õ©Š‡iºÈºòKÊÄÑZ™½ÝG!F—zv¾Ë…Hý ‹m”#@€ñ°O>ÁdõÉ–?i0aºÜ.GàפpÌ´@Aº5¡›¦ u—ëLyL§ÜBy5MW¼kEÎaÆ5èaLùF¬ˆn[:+ºÃS´–/#ö¤ùÓm“Ì@ Éᵃ¨M],ßÅð5”ƒÚ½RuÆÏ0þê£Àzâ&>ë„V]Iàµ!”kÚÜŽŒ˜—ƒßNÂÞ;/“¯ Ìæv×ñy¥U(;Î]û&? oÙÁŸTZZ`îï³5c˜ñÏf…t7üyU ¹Té~o¤ä•Õ™‘M*4»fÛÿ*ý,èŠbcò͇©šZ•ÅÇTR ZØRRAàåÓGå!¥=¢² ¨;'“'G†ÂBH¥ôbÅÆm“Ž7#iYXÐPó¹qH‹aâ&Àe~!“ðgø«½ÈçZÎ;ßóËYtn±92°mdi÷ ÷¡²ð/,$÷#£'»÷þ¢?‡8M± è °sØÀíËòp÷üæüþä`ÍÉqáü ÈRè0ßÈvÓËöéï"ÜkàÙöoíâ{èqç°ò›æ µ™•ˆ¿ï˜§ýõö!W©‰òáTç.q“ÁP‘ð7O÷ƒÒ´@ú+å;MçQ¯yR¾nÉr•oO?lÍôLõúñyŸ$3ïÉ;ld¢‰Àý§^£É1‹Ñ…$nÕÔÛû÷}è·Ø|Ƴ@Znu»}Ï‚Z'úº·ŒÊXK±®ƒÙ,Ÿv •ìÄëOHkeQ®§ª[bò!ô,uy€´ WÙ“ת³ ÜL¢õÒòVÛm¤_pS¯Jµy¾Ä0yàÂøE¾"r*Wã‡êÀøFî°ïcª0òZÉqydLÖÇ ¼Z®“:ßpǨñ7é'Ô{Gº8… ³MÇu`â=×|ìüŸR½…IZc<ünºß¬áݦTvɇ¹„!cÎÍXW°%xÜj;¢kNü,d”ô(’¡®QOŸÎ÷§>¦Taâ§[w‰pD4Ù(|júT”Ô7)òûÝ D ðÀu¸aÌ¿xÌReŒ 3]õsæþçør:FÀŸ(Ú·K޾€ö‹€Vu?c‰7ÍC÷`‚ª°³ž©¤è8+ÿ3Ó¡„מ¸+¾Ta‰0G*Qûw0¡H99,­kGõà4G~EçþqåjçWÓ“üý„©¾Há¼#»¾ÌpQûS?!tñ§ °°¾Ì+Ó.q2õ2 {/Öž€ 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if €reportlab-3.5.34/src/reportlab/fonts/Vera.ttf0000664000175000017500000020061413544671343021737 0ustar rptlabrptlab00000000000000OS/2´_ôcëpVPCLTÑŠ^—ëÈ6cmap¤Ãè ±lXcvt ÿÓ9üüfpgmç´ñÄ&`‹gaspH glyf tAÏ&ìŠ~hdmx4ð!ìHheadÝ„¢ÐT6hheaEoëL$hmtx ÆŽ²´Ä0kernÜRÕ™½ -ŠlocaóËÒ=»„maxpG:ë, nameټȵßpost´Z/»¸ôŽprep;ñ øh::_:: dM0­l  ƒ p t › &   Y &  &   c . 5 ` õ s 0¡ & {Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera SansBitstreamVeraSans-RomanRelease 1.10Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.comCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera SansBitstreamVeraSans-RomanRelease 1.10Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.com5¸ËËÁªœ¦¸fqË ²…u¸Ãˉ-˦ðÓª‡ËªJ3ËÙôT´œ99N´R¸çÍ7sÍ`s3¢V¦V9Åɸßsºé3¼Dßͪåªˤ{¸o{RÇÍššoËÍžÓðºƒÕ˜HžÕÁËöƒT3fÓǤ͚sÕ þ+¤´œbœ-ÕÕÕð{T¤¸#Ӹ˦Ãì“ Ó\qÛ…#¨H99`Õš#fy```{œw`ªé`b{Å{´RÍf¼fwÍ;…‰{ÍJ/œœ}oo5jo{®²-–{öƒT7öœáföÍD)fîs¸€@ÿûþúù%ø2÷–öõþôþó%òñ–ð%ïŠAïþî–í–ìúëúêþé:èBçþæ2åäSå–äŠAäSãâ/ãúâ/áþàþß2ÞÝ–ÜþÛÚ}Ù»ØþÖŠAÖ}ÕÔGÕ}ÔGÓÒÓþÒÑþÐþÏþÎþÍ–ÌËÌþËÊ2ÉþÆ…ÆÅÄþÃþÂþÁþÀþ¿þ¾þ½þ¼þ»þº¹†%¹þ¸·»¸þ·¶]·»·€¶µ%¶]@ÿ¶@µ%´þ³–²þ±þ°þ¯þ®d­¬«%¬d«ª«%ª©ŠA©ú¨þ§þ¦þ¥¤þ£¢£2¢¡d ŠA –Ÿþž žþ œ›œd›š›š™ ˜þ—– —þ– •ŠA•–”“”(“’ú‘»‘þ]»€Ž%]@Ž%þŒ‹.Œþ‹.І%ŠA‰ˆ ‰ˆ ‡†%‡d†…†%…„þƒ‚ƒþ‚þ€þþ@ÿ~}}~þ}}|d{T{%zþyþxw v uþtúsúrúqúpþoþnþl!kþjBjSiþh}gBfþeþdþcþbþa:`ú^ ]þ[þZþYX YúX WW2VþUTUBTSSRQJQþP OþNMNþMLþKJKþJIJI IH GþF–E–DþC-CúB»AK@þ?þ>=>=<=<; <@ÿ; :þ9þ878ú76765 65 43 21 2þ1 0/ 0 / .- .- ,2+*%+d*)*%)('%(A'%&% &% $þ#þ"!! dú d BþúBBþdþþþþBþ-B}dþ  þ   þ  þ-þdþ@-þ-þ¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °ýEDY!-,°%E`D-,KSX°%°%EDY!!-,ED-fþ–f¤@ ûû/ÄÔì1ÔìÔì0!%!!füsüåþ–øòr)5Õ @@ƒ ü<ì2991/äüÌ0K° TX½ @ ÿÀ878Y¶ P ]%3#3#5ËËË¢þþÕýqþ›eŪéÕM@„üüÜì1ô<ì20K°TK°T[X½@ÿÀ878Y@0 @ P ` p   ¿ ]#!#oª$ªÕýÕ+ýÕ+ž¾`@1 ‡  ‡   üÌ91/<Ô<<ü<<Ô<<Ä2ì220@   ]!! !3!!!!#!#!5!!5!þÝT%Dh$i g8þ¡R>þ›h gþÛg¡hþÅ`Tþ¾if…þ²‡þaŸþašþ²™þbžþbž™NšŸªþÓm!(/Õ@U" '&( /)/))/B" ) *!††#Љ*Љ- ) " & 0ü<ìô<ü<ôäì1/äìÄÔäì2Äîî99990KSXíí9í9íY"K° TX½0@00ÿÀ878YK° TK°T[K°T[X½0ÿÀ00@878Y#.'5.546753.'>54&´diÒjfÑoÝÉÚÌd]®SS¯\ãÖãÖdtzqá{þÓ---´@AÈ$¬–£¼ëè¯*.þU#´œ©Ãš jXV`ÕþOnZXhqÿã)ð #'3•@6$%&%&'$'B’ ’.’$’ &Œ($‘4'!%   ! + 1 4üÄìôìîöî991ä2ô<äìîöîî0KSXííY"K° TK° T[K° T[K°T[K°T[K° T[X½4@44ÿÀ878Y"32654&'2#"&546"32654&%3#2#"&546ÑWccWUccUžº» º»ü—VcbWWcd1 üZ ž¼»ŸŸ¹º‘”„‚••‚ƒ•Ü»»ÛÛ»¼Ûa•‚„””„–ùó Û»½ÚÛ¼ºÜÿãþð 0Í@–  † †  † †††  !         B  (('•+•'”$‘Œ .  .'.'!!1üìÄÔÔìÆî99999991/ÆäöæîîÆ9990KSXíí9í9í9í9í9íí9í9ííí9Y"²2]@² " ) **&:4D ^YZ UZZY0g{›š™—• “••"™-  ' (   2'') #**(/2; 49?2J LKFO2VZ Y UY\_2j i`2uy z““—•œœŸš › š 2 2°29]]3267 >73#'#"5467.54632.#"ò[UÔ _¦Iþ{ü;Bº h]ühäƒñþΆ†02Þ¸S¥UWžDiƒ;#Q¡X’Â?@ýøYËr„þþ~þã“YW×€ác?}<¢Å$$¶/1oX3gŪoÕB@ „üì1ôì0K°TK°T[X½@ÿÀ878Y@ @P`p ]#oªÕýÕ+°þò{ O@˜—  Üä2ì991üì0K°TX½@ÿÀ878YK°TX½ÿÀ@878Y#&547{†‚ƒ… –•”—æþ>ççþ;åëÆàßÄì¤þòo @˜— Ü<ôì991üì03#654¤ –••– …ƒƒìþ<ßàþ:ëåÅççÂ=JÃðN@,  ™ ™ ‘    Ô<ä2Ü<ä2991ôÔ<ì2Äì2990%#'%%73%Ãþ™g:þ°rþ°:gþ™:PrPßÂÃbËþ‡yËbÃÂcËyþ‡ËÙÛ #@ œ  Üü<ü<ì1/Ô<ü<Ä0!!#!5!®-ýÓ¨ýÓ-ýÓªýÓ-ª-žÿÃþ@ žƒüìÔÌ1üì073#ðÓ¤Rþ¬þÀ@d߃¶œÜÌ1Ôì0!!dý僤ۮþ·ƒüì1/ì073#ÛÓÓþþÿB²Õ-@BŸ/Ä991ôì0KSXííY"3#ªýøªÕùm‡ÿãð #@   ‘Œ üìôì1äôìî0"32'2#"‹œœû þ÷ûûþ÷ PþÍþÌþÍþÍ3343 þsþ†þ‡þsyzáZÕ K@B     ÔìÄüì1/ì2ôìÔì0KSXY"K°TX½ ÿÀ @878Y´]7!5%3!!þJþ™eÊJü¤ªsH¸HúÕª–Jð¥@'B¡”  ‘   üÄÔìÀÀ91/ì2ôìôì0KSXíí9Y"K°TK°T[K°T[X½@ÿÀ878Y@2UVVzzv‡tvust‚†‚‚‚¨¨]]%!!567>54&#"5>32‰ÁüLs3aM§†_ÓxzÔXèE[þôªªªw‘:m—Iw–BCÌ12èÂ\¥pþëœÿãsð({@. † †     “  “#‘Œ£)&  )üÄÄÔìôì991ìäôäìæîîîî90K°TK°T[X½)@))ÿÀ878Y@ daa d!]!"&'532654&+532654&#"5>32?‘£þÐþè^ÇjTÈm¾Ç¹¥®¶•ž£˜S¾rsÉYæ Ž%ÄÝò%%Ã12–„•¦wps{$&´ Ѳ|«d¤Õ Œ@   B     ÜÔ<Äì291/äÔ<ì290KSXÉÉY"K° TK° T[X½@ÿÀ878Y@* *HYiwŠ+&+6NO O Vfuz… ]] !33##!5þþ5þÕÕÉý^%üãÍü3¨þ `ÞÿãdÕu@#†  ‰   Œ¤  üÄÔìÄî1ääôìæîþÄî90K°TK°T[X½@ÿÀ878YK°TX½ÿÀ@878Y!!>32!"&'532654&#"Ýý ,X,ú$þÔþï^ÃhZÀk­ÊÊ­Q¡TÕªþ’þîêñþõ Ë10¶œœ¶$&ÿã–ð $X@$ †   ¥  ‰"‘Œ% " !%üììôìä1äôäüäîîî90@ËËÍÍÍËˤ²]]"32654&.#">32# !2¤ˆŸŸˆˆŸŸ L›LÈÓ;²káþðâþýþîPL›;º¢¡»»¡¢ºy¸$&þòþïW]þïëæþêyb¥¨hÕc@B üÌÄ991/ôì0KSXííY"K°TX½@ÿÀ878Y@X9Hg°°]]!#!¨ÀýâÓþý3ÕVú+‹ÿã‹ð #/C@%  ' - ‘Œ'£0 $*$ !0üÄìôÄìîî991ìäôìîî990"32654&%&&54632#"$54632654&#"‹¥¥¦¥þ¥‚‘ÿÞßþ‘’£þ÷÷÷þ÷¤H‘ƒ‚““‚ƒ‘Åš‡‡š›†‡šV ²€³Ðг€² "ÆÙèèÙÆat‚‚tt‚‚ÿã‡ð$X@#†  ¥ ‰ ‘Œ%!"" %üìäôìì1äôìæþõîî90@ÄÂÀÀÀÂμé]]7532#"543 !"&2654&#"áLœKÈÓ:²làþûâþ±þåLœ>ˆŸŸˆˆŸŸ¸$& V\ëæþsþ†þŸþ[—º¢¡»»¡¢ºðÃ#@ƒ¦ƒü<ì21/ìôì073#3#ðÓÓÓÓþþ#þžÿÃ# %@ƒžƒ¦  ü<ì2ÔÌ1äüìî03#3#ðÓÓÓ¤R#þýÙ¬þÀ@Ù^Û¦M@*œœœœB¨§$#üì291ôì90KSXííííY" 5Ûûøúþðþ‘þ“¶ѦÑÙ`Û¢@ œœ#ü<Ä21ÔìÔì0!!!!Ùúþúþ¢¨ðªÙ^Û¦O@+œœœœB¨§$#ü<ì91ôì90KSXííííY"55Ùúþð¶þ/¦þ/¶m“°ð$p@+$  †ˆ•‘ƒ   &%ÜÄüìÔìî99991/îöþôîÍ9990K° TX½%@%%ÿÀ878Y¶y z z ]%3##546?>54&#"5>32‡ËËÅ¿8ZZ93ƒlO³a^Ág¸ßHZX/'þþ‘še‚VY5^1YnFC¼98ŸL‰VV/5<4‡þœq¢ L•@2  ©©L43¬0©7¬$©7CM34( (+(I+*(I,=MÜìüìþýþ<Æî991ÔÄüìþíÔÆÅî2Äî990K° TK° T[K°T[K°T[K°T[X½MÿÀMM@878Y@ NN/N?N]32654&#"#"&5463253>54&'&$#"3267#"$'&5476$32úŽ|{zy!<›g¬×Ø«gœ;’¥?@hþÕ°{â`±smiùhZ}þÙ˜¹þ¸€€†ˆ~R½Ôk{KOþÂþè£¤ŽŒ¥¤þHMIùÈÈúKLƒý ß±k¼Pƒ‹A@fþµÁŸþêjhmWQoagƒ}}I½¶J}‡® bæ{þùþÐhÕ º@A       B•    ÔÄ91/<äÔì90KSXííííííííY"² ]@:XvpŒ VXP ghxv|rwx‡ˆ€ ˜™–]] !3#!#¼þî%þ{å9Òˆý_ˆÕý®ú+þÉìÕ C@#• •• ­ . !üì2üìÔì9991/ììôìî90²"]!2654&#!2654&#%!2#!“D££þ¼+”‘‘”þ çú€|•¥þðûýèÉý݇‹Œ…fþ>orqp¦À±‰¢ ˘ÈÚsÿã'ð6@ ¡® •¡®•‘Œ 0üì2ì1äôìôìîöî0´].# !267# !2'fç‚ÿþð‚çfjí„þ­þz†S†íbÕ_^þÇþØþÙþÇ^_ÓHHŸghŸGɰÕ.@• •  2 üìôì99991/ìôì0²`]3 !%! )“ô5þáþËþBŸ²–þhþPþa/ûw.,¦þ—þ€þ~þ–É‹Õ .@•••­   üì2ÔÄÄ1/ììôìî0² ]!!!!!!ɰýÇý9øü>ÕªþFªýãªÉ#Õ )@••­ üì2ÔÄ1/ìôìî0² ]!!!!#ÉZýpPý°ÊÕªþHªý7sÿã‹ð9@ ••¡®•‘Œ43 üìüäüÄ1äôìôìþÔî990%!5!# !2&&# !26Ãþ¶uþæ þ¢þu‹^’opü‹þîþík¨Õ‘¦ýSU™mn™HF×_`þÎþÑþÒþÎ%É;Õ ,@•­ 8  üì2üì21/<ä2üì0²P ]3!3#!#ÉÊÞÊÊý"ÊÕýœdú+Çý9É“Õ9·¯üì1/ì0K°TX½ÿÀ@878Y@ 0@P`Ÿ]3#ÉÊÊÕú+ÿ–þf“Õ M@ •° 9 üìä991äüì990K°TX½ ÿÀ @878Y@ 0 @ P ` Ÿ ]3+53265ÉÊÍãM?†nÕú“þòôª–ÂÉjÕ ï@(B¯  üì2ÔÄ91/<ì290KSXííííY"²]@’ ((764GFCUgvwƒˆ”›ç    (+*66650 A@E@@@ b`hgwp ‹‹Ž š¶µÅÅ×Öèéèê÷øù,]q]q3! !#ÉÊžýþöý3ÊÕý‰wýHüãÏý1ÉjÕ%@ •:üìì1/äì0@ 0P€€]3!!ÉÊ×ü_ÕúÕªÉÕ ¿@4  B ¯   >  üìüì91/<Äì290KSXííííY"²p]@V   && & 45 i|{y €‚‚  #,'( 4<VY ej vy •›]]! !###É-}-ÅþËþÄÕüøú+üúáÉ3Õ y@B¯6 üìüì991/<ì2990KSXííY"² ]@068HGif€ FIWXeiy…Š•šŸ ]]!3!#É–ÄþðýjÄÕûáú+áûsÿãÙð #@•• ‘Œ 3üìüì1äôìî0"32' ! 'ÜþýÜÜþÿÜ:xþˆþÆþÅþ‡yLþ¸þåþæþ¸HH¤þ[þžþŸþ[¤bb¥ÉÕ:@••   ? üì2üì91/ôìÔì0@ ?_¯]32654&#%!2+#“þššþ8ÈûþÿûþÊ/ýÏ’‡†’¦ãÛÝâý¨sþøÙð R@*  B ••‘Œ    3üìüì9991Ääôìî990KSXíí9Y""32#'# ! 'ÜþýÜÜþÿ? ôÝ!#þÅþ‡y;:xÑLþ¸þåþæþ¸HHúÏþÝï¥ab¥þ[þžþüþŽÉTÕ±@5  B• •   ?  üì2üÄì99991/<ôìÔì9990KSXíí9Y"²@]@Bz%%%&'&&& 66FFhuuwˆˆ˜˜]]#.+#! 32654&#A{>ÍÙ¿J‹xÜÊÈüƒý‰þ’••’¼~þh–bý‰ÕÖØºOýƒ…‡ÿã¢ð'~@<    B ¡”••”%‘Œ( "-"(ÜÄìüìä99991äôäìîöîÆ90KSXí9í9Y"²)]¶)/)O)].#"!"&'532654&/.54$32HsÌ_¥³w¦zâ×þÝþçjï€{ìr­¼‡š{âÊõiÚ¤Å76€vce+Ù¶Ùà0/ÐEFˆ~n|-À«Æä&ÿúéÕJ@•@@Ôäüä1/ôì20K° TX½@ÿÀ878Y@  @ p Ÿ ]!!#!ïýîËýîÕªúÕ+²ÿã)ÕK@ •Œ  8Aüìüì1ä2ôì99990K°TX½@ÿÀ878Y¶Ÿ]332653! ²Ë®Ã®ËþßþæþåþßÕüuðÓÓð‹ü\þÜþÖ*$hÕ·@'B¯ÔÄ91/ì290KSXííííY"²P]@b*GGZ}ƒ *&&))% 833<<7HEEIIGYVfiizvvyyu€˜—)]]!3 3JýÆÓÙÚÒýÇÕûéú+D¦Õ {@I      B ¯    ÔÌ91/<ì2290KSXííííííííY"²]@ò  ($ >>4 0 LMB @ Yjkg ` {|€ –•     !   # $ %  <:5306 9 ? 0FFJ@E@BBB@@ D M @@XVY Pfgab```d d d wv{xwtyywpx  †‡ˆ‰… Š —Ÿ¯[]]3 3 3# #DÌ:9ã:9Íþ‰þþÅþÂþÕûîûîú+úð=;Õ ]@F      B ¯   ÔÄÜÄ91/<ì290KSXííííííííY"K° TK° T[K°T[X½ ÿÀ @878Y@¸ '' 486 KX[fkww †€‡‹… ”—–     &()&(' ) 54<;:;4 4 8 ? H O X _ eejjhiil l xyyx}  x €€ƒˆ…„ƒ ”——•“ Ÿ ¯ @]]3 3 # #ÙsuÙþ Ùþ\þYÚÕýÕ+ý3üø{ý…ÿüçÕ”@(B¯@@ Ôäüä91/ì290KSXííííY"² ]@<5000F@@@QQQe„“ &)78@ ghxp Ÿ ]]3 3#Ùž›ÙýðËÕýšfüòý9Ç\Õ ›@B••B ÜÄÔä991/ìôì0KSXííY"K° TK° T[X½ @ ÿÀ878Y@@ )&8HGH    / 59? GJO UYfio wx Ÿ ]]!!!5!s•üPÇû=°ügÕšûoªš‘°þòXS@©²©±CÜüÌ21üìôì0K° TX½ÿÀ@878YK°TK°T[X½@ÿÀ878Y!#3!°¨ððþXùüÿB²Õ-@BŸ/Ä991ôì0KSXííY"#ªªýøÕùm“Çþòo<@©²©±Cü<Üì1üìôì0K°TK°T[X½ÿÀ@878Y!53#5oþXïïøÞÙ¨ÛÕ@ ÜÌ91ôÌ290##¼ÉþHþHÉÕýÓ‹þu-ÿìþþ¬µ©ÄÄ1Ôì0!5ûØþ¬ªð‰f1@ ´³DÜì1ôì0K° TK°T[X½ÿÀ@878Y #o™þºfþŠv{ÿã-{ %¼@'  ©¹ †º¹#¸Œ   E&üìÌÔì22991/ÄäôüôìÆîî9990@n0000 0!0"?'@@@@ @!@"PPPP P!P"P'p'…‡‡‡ ‡!…"' 'ð'000 0!@@@ @!PPP P!``` `!ppp p!€€€ €!]]"326=7#5#"&5463!54&#"5>32¾ß¬o™¹¸¸?¼ˆ¬Ëýû§—`¶Te¾Zóð3f{bsÙ´)LýªfaÁ¢½À‹..ª''üºÿ㤠8@¹  ¹Œ¸—G Füì22ôì1/ìäôÄìÆî0¶`€ ]4&#"326>32#"&'#3å§’’§§’’§ýŽ:±{ÌÿÿÌ{±:¹¹/ËççËËççRdaþ¼þøþøþ¼ad¨qÿãç{?@†ˆ† ˆ ¹¹¸Œ HEüä2ì1äôìþôîõî0@ € ].#"3267#"!2çNP³ÆÆ³PNM¥]ýþÖ-U¢5¬++ãÍÍã++ª$$>:#qÿãZ8@¹¹Œ¸—G Eüìôì221/ìäôÄìÄî0¶`€ ]3#5#"3232654&#"¢¸¸:±|ËÿÿË|±ýǧ’’¨¨’’§¶^ùì¨daDDaþËççËËççqÿã{p@$ †ˆ©¹ »¹¸ ŒKEüìôìÄ91äôìäîîôî90@)?p Ðð?????,// , ooooo ]q]!3267# 32.#"ü² Í·jÇbcÐkþôþÇ)ü⸥ˆš¹^Z¾Ç44®*,8 CþÝÄ—´®ž/øp@ ©‡—¼    Lü<Äü<ÄÄ991/ä2üìî2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y¶@P ]#"!!##535463ø°cM/þѹ°°®½™Phcü/ÑN»«qþVZ{ (J@#  †¹¹&#¸'¼ ¹½& G E)üÄìôì221/ÄäìäôÄìþÕî990¶`*€* *]4&#"326!"&'5326=#"3253¢¥•”¥¥”•¥¸þþúa¬QQžRµ´9²|ÎüüÎ|²9¸=ÈÜÜÈÇÜÜëþâþé³,*½¿[cb::bcªºd4@ ‡¸ — N  Füì2ôì1/<ìôÄì90²`]#4&#"#3>32d¸||•¬¹¹B³uÁƤý\žŸž¾¤ý‡ýžedïÁy+@¾±¼Fü<ì21/äüì0@  @ P ` p ]3#3#Á¸¸¸¸`û éÿÛþVy D@ ¾ ‡½¼ ±O  Fü<ì2ä991ìäôìî990@ @P`p]3+532653#Á¸£µF1iL¸¸`ûŒÖÀœa™(麜 ¼@)B¼— F üì2ÔÄ91/<ìä90KSXííííY"² ]@_ ')+Vfgsw‚‰Ž“–—£    ('(++@ h` ‰…‰š—ª§¶ÅÖ÷ð÷ð]q]33 ##º¹%ëý®kðýǹüiãýôý¬#ýÝÁy"·—Füì1/ì0@ @P`pð]3#Á¸¸ùìº{"Z@&  ‡ ¸¼PPF#üì2üüüì91/<<äô<Äì290@0$P$p$$ $ $¿$ß$ÿ$ ]>32#4&#"#4&#"#3>32)EÀ‚¯¾¹ru¦¹rw¦¹¹?°yz«‰|võâý\ž¡œ¾¤ý‡ž¢›¿£ý‡`®gb|ºd{6@ ‡¸ ¼ N  Füì2ôì1/<äôÄì90´`Ï]#4&#"#3>32d¸||•¬¹¹B³uÁƤý\žŸž¾¤ý‡`®edïqÿãu{ J@¹¹ ¸Œ QEüìôì1äôìî0@#?{{   {  { ð]"32654&'2#"s”¬«•“¬¬“ðþîðñþïßçÉÉçèÈÇéœþÈþìþíþÇ98ºþV¤{>@¹¹¸Œ½¼ GFüì22ôì1äääôÄìÄî0@ `€ à]%#3>32#"&4&#"326s¹¹:±{ÌÿÿÌ{±8§’’§§’’§¨ý® ªdaþ¼þøþøþ¼aëËççËËççqþVZ{ >@¹  ¹¸Œ½¼ GEüìôì221äääôÄìÆî0@ `€ à]32654&#"#"3253#/§’’¨¨’’§s:±|ËÿÿË|±:¸¸/ËççËËççý®daDDadªùöºJ{0@  ‡¸ ¼ FüÄì21/äôìÄÔÌ90´PŸ].#"#3>32JI,œ§¹¹:º….´˾ý²`®fcoÿãÇ{'ç@<  S  SB †‰†‰¹¹%¸Œ( R"E(üÄìÔìä99991äôìþõîõî90KSXí9í9Y"²']@m   . , , , ; ; ; ; $( ( *//*(() )!$'† † † †      '/)?)_))€)) )ð)]]q.#"#"&'532654&/.54632‹N¨Z‰‰b”?Ä¥÷ØZÃlfÆa‚Œe«@«˜àÎf´?®((TT@I!*™‰œ¶##¾55YQKP%$•‚ž¬7òž8@©¼‡  Fü<Äü<Ä2991/ìô<Äì2990²¯]!!;#"&5#53w{þ…Ks½½Õ¢‡‡žþÂý ‰NšŸÒ`>®ÿãX`6@ ‡Œ ¼  NFüìôì21/ä2ôÄì90´`Ï]332653#5#"&®¸||•­¸¸C±uÁȺ¦ýaŸŸ¾¤{û ¬fcð=`@'B¿ÔÄ91/ì290KSXííííY"K° TX½ÿÀ@878YK°TK°T[X½@ÿÀ878Y@ŽHj{†€‘¤  &&)) 55::0FFIIFH@VVYYPffiigh`ut{{uz……‰‰‰†––—š˜˜—¨§°Àßÿ>]]3 3#=Ã^^Ãþ\ú`üT¬û V5` @IU U U U   B ¿    ÔÌ91/<ì2290KSXííííííííY"K° TK°T[K°T[K°T[K° T[X½ ÿÀ @878YK° TK° T[K°T[X½ @ ÿÀ878Y@ÿ" 5 IIF @ [[U P nnf yy‡™˜” ¼¼ÎÇÏ         %%#'!%""%' $ ! # 9669 0FHF@B@@@D D D @@VVVPQRRPS T U cdejejjjn a g ouuy}x}zzxy  { v } ‡ˆ——”“œ›˜˜™@/– Ÿ¦¦¤¤««©©«¤ ¯µ±½»¸ ¿ÄÃÌÊy]]333# #V¸æåÙæå¸þÛÙñòÙ`ü–jü–jû –üj;y` Z@F      B ¿  ÔÄÔÄ91/<ì290KSXííííííííY"K° TK°T[K°T[K°T[X½ ÿÀ @878YK°TX½ @ ÿÀ878Y@˜   & =1 UWX f vzvt ‚ ™Ÿ—’ ¦©¯¥£       )&% * :9746 9 0 IFE J @ YVYYWVYVV Y P o x ›”«¤° Ï ß ÿ /]] # # 3 dþkªÙþºþºÙ³þrÙ))`ýßýÁ¸þHJþq=þV`¢@C        B  ‡½ ¼  ÔÄÄ91ä2ôì9990KSXíííííí2Y"K° TK°T[X½ÿÀ@878YK°TX½@ÿÀ878Y@ð     # 5 I O N Z Z j ‡ € “        '$$  )( % $ $ ' ** 755008 6 6 8 990A@@@@@@@@B E G II@TQQUPPVUVW W U U YYPffh ii`{xx‰Š … … ‰ ‰‰™ • • šš¤ ¤ ««°Ïßÿe]]+5326?3 3“N”|“lLT3!þ;Ã^^ÃhÈzšH†TNü”lXÛ` ´@B©¼© ÜÄ2Ä991/ìôì0KSXííY"K° TK° T[X½ @ ÿÀ878YK°TX½ ÿÀ @878Y@B&GI  + 690 @@E@@CWY_ ``f``b € ¯ ]]!!!5!qjýL´ü}´ýe`¨üÛ“¨%þ²$‚@4 %   ! © ©À ©±% $  C %Ô<Äü<Ä299999991üìÄôìî99999990K° TX½%ÿÀ%%@878Y²&]#"&=4&+5326=46;#"3>ù©lŽ==k©ù>DV[noZV¾”Ýï—ts•ðÝ“XøŽŽœøXþ®·±Ôì1üÌ0#®ªøþ²$ž@6%   ©©#À©±%#C %Ô<Ä2ü<Ä99999991üìÄôìî99999990K° TX½%@%%ÿÀ878YK°TX½%ÿÀ%%@878Y²&]326=467.=4&+532;#"+FŒUZooZUŒF?ù§lŽ>>Žl§ù?¾VøœŽŽøŽW“Ýð•st—ïÝ”ÙÓÛ1#@ œœ ÔÄ1ÔüÔìÀ990#"'&'&'&#"56632326Ûi³an’ ›^X¬bi³an“ ›^V©1²OD;>MS²OE<>LÿÿhN'$¼uhm !Ë@T   !!  ! !!!B  Á • Ž  !  VV!"ÔÄÔì2Ôî299999991/<æÖîÔî9990KSXííííííííY"² #]@  s › P#f iu {yyv v!€# ]]4&#"326!.54632#!#TY?@WX??Y˜þð!þX=>Ÿsr¡?<Òˆý_ˆÕZ?YWA?XXþóýN)sIs ¡rFv)ú‹þÿÿsþu'ð'&Ý-ÿÿÉ‹k'(žuÿÿÉ3^'1þuÿÿsÿãÙN'2'uÿÿ²ÿã)N'8îuÿÿ{ÿã-f'DRÿÿ{ÿã-f'DCRÿÿ{ÿã-f'D×Rÿÿ{ÿã-'DŽRÿÿ{ÿã-7'DØRÿÿ{ÿã-'DÜRÿÿqþuç{'FÝÿÿqÿãf'H‹ÿÿqÿãf'HC‹ÿÿqÿãf'H׋ÿÿqÿã'HŽ‹ÿÿof'ÖÿÿÿÿǦf'ÖCÿÿÿÿÞ\f'Ö×ÿÿÿÿôF'ÖŽÿÿÿºd7'Qؘÿÿqÿãuf'Rsÿÿqÿãuf'RCsÿÿqÿãuf'R×sÿÿqÿãu'RŽsÿÿqÿãu7'RØsÿÿ®ÿãXf'X{ÿÿ®ÿãXf'XC{ÿÿ®ÿãXf'X×{ÿÿ®ÿãX'XŽ{9ÿ;ÇÕ '@¹  YW Y Ô<ìü<ì1äôÔ<ì203!!#!5!¨°oþ‘°þ‘oÕþ\™û£]™Ãu=ð  @ÃÄà ‘ Z[ZÜìüì1ôìüì0"32654&'2#"&546PnnPPnoO@v+..¹†‡´¸ooPOmmOOp1.-rB„·´‡†º¬þÇ#˜!Q@+  †ˆ †ˆ ¹ ¹¸Œ"  "ÜìÔ<Ô<<ì221äô<ÄìÄþôîõî9990%&&'667#&73¦“¤¤JˆDF‰HA‰Mfñþ÷ ñfI‰ƒX⸹⡬)*ü *'ª#þä 32þá!bð`@!† ©  ”‘   Ü<ÌÌü<ÄÔÄ1/ì2ôäìÔ<î2î990K° TX½ÿÀ@878Y´66].#"!!!!53#535632NLˆ=”t‡þy-üìÇÇÖè=—´¶))›Ô×þ/ªªÑîó\ÿ=¢ð >‘@54&.#"#"&'532654/.5467.54632{?>‹ú?>ÌS8alÎÓƒ\]>9Ì­IšXW”:fqÝÖ€][;;ȦI™¨.Z.L…‡-[.Kˆ“¤''PGZswšeZŒ54m@ލ¤''TLf{x™f[1,pE‚Ÿ3Ñ…! · Ç \ Ôì1Ôì04632#"&3­~|«¬}}¬ú|««|}¬¬žÿ;9Õ %@Á]] ÔÔüÜì91Ä2ôì90!###&&54$yÀ¾Ž×ëÕùfùáNݸ¾èºÿã¬/š@0-'!  *†¹*¹—Œ.  !' $'$-F0üÄüÌÆîÔîî99991/äþîþÕî990@@'(Š Š     ! "&  : :!MM I!I"jj ¥¥¦ ]]4632#"&'532654&/.5467.#"#ºïÚÐÛ—¨:A9¦`áÓ@ˆIPŒAtx;e\`W§—ƒq‚ˆ»qÈÛèàs`/Q*%jŽd¬·¤_[?T>7;‡[¬gp‹ƒû“åÍ/8L`@6EBC?2ÉH0É9JCÊ 9ÊÉÈ É$HE301BKL?gwyVpMIßÑ`3þœDåÍ/IC@&=Ë>:ÌAÊ$1Ë04ÌGÊÉÈ$É 7aD=0^* D^ JÜÌüìþí2î1/îöþýîÖîýîÖî02#"$'&5476$"32676654&'&&&&#"3267#"&54632˜mmllmmþù˜˜þùmmllmm˜ƒâ^^``^^⃄ã^]]^\^ã§B‚B•§«›@zBC‰FØûûØIˆÍnmmþúš˜þûmmnnmm˜šmmng^^^å‚ã^^__^]⃅ã]^^õ! ¯Ÿ®"ôÐÑò'“FÕ >@!  É  b b cbcÔäüäÔìÔì91ô<<ì2Ô<<Ä903#######5J®¤ªqÃ7ËrqËrÉÕÿý¾äþÑ/þB^þä^sîRf1@ ´³DÔì1ôì0K° TK°T[X½ÿÀ@878Y3#‹Çþº™fþˆ×F)’@ÎÍddÜüÔì1ü<ì20K° TK° T[X½@ÿÀ878YK° TK° T[K°T[K°T[X½ÿÀ@878YK°TK°T[X½@ÿÀ878Y@````pppp]3#%3#^ËËþyËËÊÊÊÙ'ÛÝ>@" Ïœ Ï œ  Ü<Ä291Ô<Ì2ü<ìþ<ì990!!!!!'7!5!7!Ù}®/þHÃ{üúþþ}®þÕ¶Ãý‡¢;fÕ¨ðªþÇfÓªðHÕ‡@9  B• ••••­    ÔÔ<ì2ÔÄÄ91/<ììÄôììîî0KSXííííY"²€]@gww† …– ¿ ]!!!!!!#!5ýÇý9øü=ýð Íq‹þ¶ËÕªþFªýãªþÕžüðfÿºå +ž@< +,  )&  *&•& •‘&Œ,+,* # )#3,üìüìÀ999999991äôìîÀÀ99999990@*WZWU!je!{vu! FYVjddj(|svz( ]] 324&'.#"&5!27!"&''¶ý3>¡_Ü'y=¡_Üþý''†NOy;‚ÝW¢fªNPþˆþÆ€Ý[¢gXü²@CHp¸¸@Cþ¸þåp¼Džf b¥MK¿YÆgþöžþŸþ[KK¿XÝÝÏî /ÿ@- !$'!!0 $*0ÔÄÔÄ99991ÔÄÔÄÀ9990@¾     $$$   $$ $ ***///***55500055 5 :::???:::EEE@@@EE E JJJOOOJJJV´° °!°"°&°'°(´)]]32654&#".#"326#"&54632>32#"&“1†Te€vYR…Ä1…UfvYR†F^ˆº§†_™HDža†¼§†^•/XZ‡ie†‡7XX„je†ˆ‡ߦ¯Ø~ŠŠƒá§¯ÖwÙÛ .@МР œ   Ô<ì2ü<ì21/ìÔ<ìü<ì0!!#!5!!!®-ýÓ¨ýÓ-ýÓúþþ}ªþ}ƒªƒû¦ªÙÛ¨ T@.œœœœBѧœ $# ü<ì2291/ìôì90KSXííííY" 5!!Ûü@Àúþúþúþøþëþî²pªoüªÙÛ¨ V@/œœœœBѧœ$ # ü<<ì291/ìôì90KSXííííY"55!5ÙúþÁAúþø°þ‘ªþ²ýǪªRÃÕÆ@F  B Ó Ó   fe f eÔ<ì2ìüì2ì99991/ä2Ô<ì2Ô<ì290KSXííííY"K° TX½ÿÀ@878Y@(†¦ µ' ' ')((79‡ ˆ¦ ¥ª©]]!#!5!5'!5!3 3!!!þcÉþ` Tþ´þþ{y¿þÂþµTŸÇþ9Ç{3›{JýD¼ý¶{›3®þVå` M@% ‡Œ ¼½!   NF!üì2ôìÄ91ää2ô<ìÜÄ990¶"`"Ï"]3326533267#"&'#"&'®¸Š‡”•¸#% )I#ER2‘bf*þV ýH‘”¨¨ü¢<9 ”NPOONNý×hÿçÁ-)b@'! '!Õ* $$*ÔÌÜÌ9991äÌÜÌÎÎ990K° TK° T[K°T[K°T[K°T[X½*@**ÿÀ878Y>54&#"#"&54632#"&54324&#"32ôIH7$$0e´ÖþßÕ˜ËÝ¢e‚ WOmVPmmW£Kƒt,>bþÊþùþ±þFØ£Æ[àt}þþÏt{þw;Á ]@    ÔÄ91ÄÔÌÎ990@0QVPZ spvupz €€ Z pp{ t €€ ]]!! !!5 7êüA ýJïúÞÕýIÁÁý3ýÀ•!ãœþwqÁ@×Ö¯ggÔìÔì1üìì20!#!#œÕðý ïÁø¶}ùƒÿáÿðª/#Ë@1 ÚÙ"ØÕ $ #" #h#$ÔÔÔì9999991/<äôì22î9990K° TX½$ÿÀ$$@878Y@V             ##(]]#3267#"&5467!##"#>3!‡¶i/7.%7vy"PþºÂµÃ)6<  ¥y‘þJ\:1fd.¡xüo‘@E¦}/þú%&@ Û Ûܱ& iji&Üìüì1üìÜäÞä026732#"&'&&#"#"&546327j ¾ÊPd@7*8  k½ÄOeD=!0 þú°l9¼TA6?&#Hý•Ánþ!þbSA8?SsÕ;ð)_@3(%ãÝá%Ý ßÞÝ à‘* "(kl"k *ÜìÌüì22ÀÀ9991ôäüôìÄîíÖîî99990!!#5#"&5463354&#"56632"32655‹°ýP®•,]€˜¿¼¶uu>ˆDI‘E·³þì¡~bRh‚P{¸þ@p?D‡q‡Š[[""°ðCO@Mr`Õdð.@ãáÝ àÝ‘ klk Üìüì991ôìôìüì0!!2#"&546"32654&‹°ýPX³Îγ³Ðгi~hi}|P{Ý¿¿Ûܾ¿Ýs¡ˆ…  …‰ NÏç@@" å‘å  mm  ÔììÔììÀÀ9991/<ì2ôì0%!5654#"!5!&5! Ïý¨±ÆþøØØþ÷Dzý¨?ž‘1/Ž¡²²²aLÊð"þÝïÊþ´a²²‹*¸>ŠþwþËÂþØ{ÿão{3>@C'-%= 4©%†ˆ©:¹.†-º*¹»1 ¸Œ%?47&%7& =&-7"E?üìÌÔü<ÔìÄ999991Ää2ô<Ääü<ôìÄî2îôîî9990@0+0,0-0.0/00@+@,@-@.@/@0P+P,P-P.P/P0…+…0€@@ @°@À@Ð@à@à@ð@??? ??0,0-0.0/@,@-@.@/P,P-P.P/ooo oo`,`-`.`/p,p-p.p/€,€-€.€/]q].#">32!3267#"&'#"&5463!54&#"5>32"326=¶¥‰™¹DJÔ„âü² Ì·hÈddÐj§øMIؽÒýû§—`¶Te¾ZŽÕï߬o™¹”—´®ž0Z^þÝúZ¿È55®*,ywxx»¨½À‹..ª''`þf{bsÙ´)Hÿ¢œ¼ +ä@<+,&  )&  *&¹& ¹¸&Œ,+,* # #Q)E,üì2ôì2À9999991äôìîÀÀ99999990@p(?-YVUV jf!{    { z{ {!"#$%{&›•%¨ -ð-&YVUZ(ifej(ztvz(‰•š$¢­$]] 32654&'.#".5327#"&''‰þ)gA“¬\*g>—©}66ñ]ŸC‹_’56þîð`¡?‹`!ý°*(èÈOuš))ëÓHn.—MÅw834¨O³MÆxþíþÇ43¨Nÿã¬Õ $†@/ †ˆ !ƒ# •Œ#%" " "!& %ÜìÔüìÔì99991äôìþÍôî9990K°TK°T[K°T[X½%ÿÀ%%@878Y@ ttttv]33267#"&546?>7>5#53ô¾7ZZ:3ƒmN´`^Àg¸àIYX0&ÄÊÊDœe‚WX5^1YnFC¼98ŸL‰VV/5<6þ5Õ b@ƒ ü<ì2991/ôüÌ0K° TX½ @ ÿÀ878YK°TK°T[K°T[X½ ÿÀ @878Y¶ P ]#53#3ËËË¢×þú+eþ›ÙÛ^@ œÜÔì1ÔÄì0!#!Ù¨û¦^ýÁ•=ÿ×} *@    ÔÌ91ÔÌÄ903##'%\½sý®BþÁ}}`ùºs-Pbý;þV#Š@@   B   ©Šæ©Šæ©!—$  $ÔÌ91Ä2Äüìôìîöîî299990KSXí2í9Y"K° TX½$ÿÀ$$@878Y.#"!!#"&'53267#5!>32&P,`r<þÃ:¼º:d/4a/am"‰ø?$Æ—5dð¤z„þÉý…þãÓ¦!!‰¦­J·ÃÙÛô;?@.9*-" *œ19œ"œ œ<-<Ô<Ä21ÔìÔìÜüÔìÀ9999990#"'&'&'&#"56632326#"'&'&'&#"56632326Ûi³an’ ›^X¬bi³an“ ›^V©gi³an’ ›^X¬bi³an“ ›^V©o³NE;=LT³NE;=KÚ²OE;=LS²NE;=Kÿú`Á8@ÔÌ91/ÄÌ90@cmpxyvn]] !3!¬þ^DýïàCúšîûÄú?ž%# †@Ièèèè è è è  è B  ç¦ o o nüü<Ôì2991ô<ì2990KSXííííííííY"55%þÓ-þ+#þÓ-þ+#¿þôþô¿¢R¢¿þôþô¿¢RÁH# †@I è è è è èèèèB  ç¦ o opü<üÔ<ì991ô<ì2990KSXííííííííY"5%5ÁÕþ+-þÓ²Õþ+-þÓ#þ^Rþ^¿  ¿þ^Rþ^¿  ìþ #@ƒ   ÔüÔìÔì1/<<ì220%3#%3#%3#–ÔÔ©ÕÕú­ÕÕþþþþþþÿÿhk'$¼uÿÿh^'$¼uÿÿsÿãÙ^'2'us Õ;@•••­   üìÔÄÄÔì299991/ìì2ôì2î0!!!!! !# !3úýÇý9øû×þOþA¿±gþ¿þÀ@AÕªþFªýãª|pm|ªþáþàþßþßqÿãÃ{'3„@1†ˆ ©. ¹(¹»"%¸Œ4"1 K1 Q+E4üìôüôìÄ9991ä2ô<Ääì2Äî2îôî90@%?5_5p5Ÿ5Ï5Ð5ð5????? ooooo ]q].#"!3267#"&'#"32>32%"32654& ¤‰™¹Hü² Ì·jÈbdÐj òQGÑŒñþïñŒÓBNèâú°”¬«•“¬¬”˜³®ž5Z¾Ç44®*,nmnm98olkpþ݇çÉÉçèÈÇééy¶©é/Æ1üì0!!üyéyµ©/Ì1Ôì0!!øy®émÕ '@ž   ÜüÌÔÌþÔÎ1ô<ì20#53#53Ó¤RšÓ¤Ré­?þÁ­­?þÁ®émÕ '@ ž  ÜìÔÌÜîÔÎ1ô<ì203#%3#Ó¤RšÓ¤RÕ¬þÀ@¬¬þÀ@®éÓÕ@ žÜüÔÌ1ôì0#53Ó¤Ré­?þÁ²þ×Õ@ žqÜìÔÌ1ôì03#Ó¤RÕ˜þÁ?Ù–Ûo )@êêœ r ÜÔ<ü<Ä1ÔÄüÄîî03#3#!!ßööööýúúþoöþõAªþ#îu"@ÔÌ91ÔÌ990 úþþôþ þ üÏüÇ9%ûÛûÓ-ÿÿ=þV'\Ž^ÿÿÿüçN'<suþ‰ÿãÍð+@BŒ‘ÔÌ1ää0KSXííY"3#- ü\ ðùó^R¼²#/ƒ@I -'! - -¹ëì'¹ë!0 *$0* $ $(st*(s0Üäìôäì9999999991ÔäìôäìÀ9999999907'#"&''7&&5467'766324&#"326{ÏrÎ%$&(ÑrÏ;t=:x=ÏqÏ%%&&ÏsÏ7t@?s9ÏqÏ(&%%ÏsÎ>v:@t8ÎsÏ'%$þ|pššprœžs#G@%èèèèBç¦onüì291ôì90KSXííííY"5sþÓ-þ+#¿þôþô¿¢RÁ–#I@&èèèèBç¦opü<ì91ôì90KSXííííY"5ÁÕþ+-þÓ#þ^Rþ^¿  /J›@( ©‡¾±— ¼ Lü<Ä2Äü<Äî2991/<æ2îþîîî2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@0P€€€ Ðï]]#!##53546;#"3#J¹þ¹°°­³¹°cMù¹¹`û Ñü/ÑN·¯™Phc²é/J„@! © ‡— ¼   Lü<ÄÄü<Äî991/<æ2þîî2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@0P€ € € Ðï]!#!"!!##53546J¹þ·cM/þѹ°°®ùì{Phcü/ÑN»«9ÿ;ÇÕ>@ ¹¹  ÂY W Y Ô<<ì2ü<<ì21äôÄ2Ä2î2î20%!#!5!!5!3!!!Çþ‘°þ‘oþ‘o°oþ‘oßþ\¤š™¤þ\™ýáÛH®F·ƒÔì1Ôì03#ÛÓÓFþ®ÿÓþ@ žƒÔìÔÌ1üì0%3#Ó¤Rþ¬þÀ@®ÿmþ '@ žƒ   ÜìÔÌÜîÔÎ1ü<ì20%3#%3#šÓ¤RþfÓ¤Rþ¬þÀ@¬¬þÀ@qÿã Lð #'3?K®@D$%&%&'$'B@’ .’(’F’4 :&Œ$‘L%IC'1+C =  1 =I 7+ ! LüäìÔÄìäîîöîî991ä2ô<<ä2ì2îöîî20KSXííY"K°TK° T[K° T[K° T[K° T[K°T[X½L@LLÿÀ878Y"32654&'2#"&5462#"&546!3#"32654&2#"&546"32654&ôWddWUccUžº» º»ùtž¼»ŸŸ¹º% üZ VcbWWcd²žº» º»ŸWccWUcc‘”„‚••‚ƒ•Ü»»ÛÛ»¼ÛàÛ»½ÚÛ¼ºÜùóŽ•‚„””„–ýŸÜ»»ÛÛ»¼Û”„‚••‚ƒ•ÿÿhm'$¼uÿÿÉ‹m'(žuÿÿhk'$¼uÿÿÉ‹N'(žuÿÿÉ‹k'(žuÿÿ¢k',ÿ/uÿÿÿþ`m',ÿ/uÿÿXN',ÿ/uÿÿ;ºk',ÿ/uÿÿsÿãÙk'2'uÿÿsÿãÙm'2'uÿÿsÿãÙk'2'uÿÿ²ÿã)k'8îuÿÿ²ÿã)m'8îuÿÿ²ÿã)k'8îuÁy` ·¿Füì1/ì0@ @P`p]3#Á¸¸`û Áî?f7@ ´³uÜì91ôì290K° TK°T[X½ÿÀ@878Y3#'#¶”õ‹´´‹fþˆõõ¶J7c@$  Ãà íVwVvôìüì99991ü<üÔ<ì99990K° TK° T[X½ÿÀ@878Y'.#"#>3232673#"&ü9! &$}f[&@%9! &$}f[&@Z7IR‡“!7IR‡“Õb+ö/·ïîÔÌ1üì0K° TK°T[X½ÿÀ@878Y!!ÕVýªö”Ç)9H W@ ð³VVÜìÔì1ô<Ôì0K° TX½ÿÀ@878YK°TK°T[K°T[X½@ÿÀ878Y332673#"&Çv aWV` v ž‘‘žHKKJLšDf,@ ÎÍdÔì1üì0K° TX½ÿÀ@878Y3#šÌÌÌîá _@Áò ÁñV xVÔìôì1ôìôì0K° TK° T[X½ÿÀ@878YK° TK° T[K° T[X½ÿÀ@878Y4&#"3267#"&54632˜X@AWWA@XzŸssŸŸssŸô?XW@AWX@s  ssŸŸ#þuÁ@  ó' ÜÔìÔÌ1/ÔüÄ90!#"&'532654&'T76xv.W+"J/;<+->i0Y[ ƒ0.W=ðî®fB@´³ÔÜÔÌ991ô<ì20K° TK°T[X½ÿÀ@878Y3#3#ü²ø‡ªß‰fþˆxþˆLþuÁ @  óô 'ÔìÄÔÌ1/üüÄ90!33267#"&546¸w-+76 >&Dzs5=X..… W]0iÁî?f7@ ´³uÜì91ô<ì90K° TK°T[X½ÿÀ@878Y373¶õ‹´´‹õîxõõþˆÿòuÕ ?@ •  : yô<ìÄü<Ä991/äì90´0P]3%!!'7ÓË9Pþw×ü^”MáÕý˜Ûoþîýãª;jnžH ^@ — z z Ô<äü<ä991/ì90K°TX½ @ ÿÀ878Y@ @ P ` sz p à ð ]37#'7Ǹ}Lɸ{JÅý¦ZjüãšXjÿÿ‡ÿã¢m'6‹uÿÿoÿãÇf'Vàÿÿ\m'=¾uÿÿXÛf']àþ¢®˜@ õõÜ<ì21ÔìÔì0##®ªªª˜ý öý ö ºÕ g@  © ••  2  yô<ì2ÄôìÄ91/Æ2îöîî20@( °Ÿ Ÿ Ÿ Ÿ ŸŸŸŸ¿ ¿ ¿ ¿ ¿¿¿¿]]! )#53!!3 !Ó ±–þiþPþ`ÉÉËPþ°ó5þáþËÕþ—þ€þ~þ–¼ãþýê.,qÿãu('@^%{&%#${##{#({'(#&'('%$%(('"#" ! B('&%"! ##¹ ¹Œ#±)&' ! (%#" QE)üìôì99999991ìÄôìî9990KSXÉÉÉÉííííY"²?*]@v%+("/#/$)%-&-'*(6%F%X X!` `!f"u u!u"%#%$&&&''(6$6%F$E%Z Z!b b!z{     {zzv v!x" *ð*']].#"32654&#"5432''%'3%F2X)§¹®’‘®6 ~rþäæçþåÝ4*ŸþÁ!µäM!þÙ“ØÃ¼ÞÞ¼z¼&þà­ÿþÉ7ÿú7´kc\Ì‘oabÿÿÿüçk'<suÿÿ=þVf'\^ÉÕ =@• •ö  ? üì22üì91/ôüìÔì0@ ?_]332+#32654&#ÉÊþûþÿûþÊÊþš™ŽÕþøáÜÜâþ®'ýÑ’††‘ºþV¤>@¹¹Œ¸½— GFüì22ôì1ìääôÄìÆî0@ `€ à]%#3>32#"&4&#"326s¹¹:±{ÌÿÿÌ{±8§’’§§’’§¨ý®¾ý¢daþ¼þøþøþ¼aëËççËËççÙ-Û×¶œÔÄ1Ôì0!!Ùúþת?œÅ …@M œ  œœœœœ œ œ B   Ô<Ì291Ô<Ì290KSXííííííííY" '7œþ7Éwþ5þ5vÈþ8vËËLþ5þ7yËþ5yÉËyþ5ˉœÅß ,@Ý ÝÝ ÷‘ |]|| Üôäüä1ôììÔìî2035733!œÌßæ‰Íý× c)t'ý+n^œ´ðJ@$}}BÝÝ÷ Ý‘~ÜÄÔÄì91ôÄìüìî90KSXí2íY"!!56754&#"56632 ¨ýª"?XhU4zHM…9‘®þµ8rn81^BQ##{„l‹þä0bÍð(H@' Ý Ý Ý Ý ø÷Ý ø#‘)~&~ )ÜÄÄÔìÔì9991ôäìüäìÔìîî90#"&'532654&##532654&#"56632 \e¾±9}F4wCmxolV^^ad_(fQI€7©Z`mR|†yOFJLl?<:=svcE`ÿÿ‰ÿãð'ð'¼5 ‹ýdÿÿ‰ÿã?ð'ð'¼5ñ‹ýdÿÿbÿãð'ò'¼5 ‹ýdÿÿsÿã‹m'* uÿÿqþVZH'JÚ‹ÿÿÉ•P', ÿ/uÿÿ‡þu¢ð'6Ý‹ÿÿoþuÇ{'VÝÿÿsÿã'k'&-uÿÿqÿãçf'F‰ÿÿsÿã'm'&-uÿÿqÿãçf'Fà‰qÿãô$J@$Ó ù"¹¹ Œ¸—   GE%üìô<Äü<Ä1/ìäôÄìÄîý<î20¶`&€& &]!5!533##5#"3232654&#"¢þºF¸šš¸:±|ËÿÿË|±ýǧ’’¨¨’’§¶N}““}úü¨daDDaþËççËËççd߃¶œÜÌ1Ôì0!!dý僤ÛH®F·ƒÔì1Ôì03#ÛÓÓFþÿãð1@: Ó"+Ó ¡®•¡®•/‘Œ) 2+"!)#&  , & &*!/<ÔÄ2üÄÄ99999999991Ä2äôìôìîöîî2Ý<î20K° TK° T[K° T[K°T[K°T[K°T[X½2ÿÀ22@878Y@z  1Ti lnooooiko o!o"o#n$l%i'i-ŸŸŸ Ÿ Ÿ Ÿ Ÿ ŸŸŸŸŸŸ–Ÿ Ÿ!Ÿ"Ÿ#Ÿ$Ÿ%Ÿ&Ÿ'Ÿ(Ÿ)Ÿ*Ÿ+Ÿ,-2   USjg ]].#"!!!!3267#"#734&5465#7332[©fÊ A7ýæ¾8þŠ Êf©[Y¹`íþË(Ó7‹Â7œ(6ìb¹bÕiZÈ»{.# .{»ÊZiÓHH"{/ #/{"G×)Ù¥@ ÎddÔüÜì1Ô<ì20K°TK°T[X½@ÿÀ878YK°TK° T[K°T[X½ÿÀ@878YK°TK°T[X½@ÿÀ878YK°TX½ÿÀ@878Y@````pppp]3#%3#^ËËþyËËÙËËËsîðö@BúÄÀ1ôÌ0KSXÉÉY"K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@ %%6FVjg //]]3#7¹ä™öþø¶Jéu@!  ÃÃúVV ÔìÔì99991ô<ìÔì2990K° TX½ÿÀ@878YK°TX½@ÿÀ878Y´ ]'.#"#4632326=3#"&ü9 $(}gV$=09" (}gT";9! 2-ev 3)dw î‹ö‰@BúÄÀ1ôÌ0KSXÉÉY"K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@*$$5CUUŸŸ¯¯//]]#ÇÄ™æöþøÏî1øw@ úÔÄ91ô<Ä90K° TX½ÿÀ@878YK°TX½@ÿÀ878YK°TX½ÿÀ@878Y@ //- ]3#'#¢¼Ó‹¦¦‹øþö²²Ïî1ø†@ úÔÄ91ôÄ290K° TK° T[K° T[K° T[X½ÿÀ@878YK°TX½@ÿÀ878YK°TX½ÿÀ@878Y@ "  ]373¢Ó‹¦¦‹Óî ²²þö?œôß Ô@ Ý ÷‘ ] ÜÔ<Äì291ôüÔ<ì290K°TK°T[K°T[K°T[K° T[K° T[X½@ÿÀ878YK°TK°T[X½ÿÀ@878Y@T /9IFYi‹«»       "5GK S[ e„¥µ]] !33##5!5ÝþË5¦‡‡þbfþ]ýämººyÇ9ø j@à úVVÔìÔì1ôüÄ20K° TX½ÿÀ@878YK°TX½@ÿÀ878YK°TK°T[X½ÿÀ@878Y332673#"&Çv cSRav  Ÿø6978w{zšfÛ¶úÔÌ1ôÌ03#šÌÌÛÍ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßà>: ~ÿ1BSax~’ÇÝ©À & 0 : ¬!""""+"H"e%Êûÿÿ   0AR^x}’ÆØ©À  0 9 ¬!""""+"H"`%ÊûÿÿÿãÿõÿØÿ ÿ^ÿCÿhÿüöüÛà–à…àVßjÞqÞ_Úï¿8ôüúúü (B¬£„…½–熎‹©¤ŠÙƒ“ñò—ˆÃÝðžªóôõ¢­ÉÇ®bcdËeÈÊÏÌÍÎèfÒÐѯgï‘ÕÓÔhêì‰jikmln oqprsutvwéxzy{}|¸¡~€ëíºýþÿøÖùúãä×àÚÛÜßØÞ²³¶·Ä´µÅ‚‡«˜¨š™î¼¥’”•Íf‹‹55®Å´žªšq=3ۤ=´Ù‹žãd‹Û²‡á–œdž¨‹²ð²ž´Ù´Ù´Ù?“‡y}É–s)ÉÉšÉ3sÉ\É\ÿ–?ÉuÉçÉüÉLsÓÉLsɇãÿúÛ²yéD{=ãÿü{\°²Ç´Ùÿìªç{ºfqqìqÑ/qº9Á9ÿÛ¢º9Á˺ºåqºqJº+o#7®¼=‹V¼;¼=3X²´Ùyy–sÉüÉLsÛ²ç{ç{ç{ç{ç{ç{fqìqìqìqìq99ÿÇ9ÿÞ9ÿôºåqåqåqåqåq®®®®9ì\¸3ž º's×´ÙËLfªÝ´Ù´Ù´ÙR®#hdœ¶ÿá+/ÅsÅ`NÛ{åH?55´Ù=´ÙZÿúåžåÁìyyLss/q%®%®‹®‹²´Ùô¼=ãÿüVþ‰^3ž3Á / /9‹Û‹®%® ¼qyÉyÉÉ\¢\ÿþ\\;LsLsLsÛ²Û²Û²9ÁÁ¶ÕÇšî#ðLÁÿòF‡+o{\3X²3 åqãÿü¼=×ɺ´Ù´5‰5^5bÁ‰Á‰Áb3sq\ɇ+o–sfq–sfqqãd‹Û×s¶ ÏÏ5?Çšÿ+   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóõôöøùúûüýþÿ     sfthyphenperiodcenteredEuroc6459c6460c6461c6462c6463c6466c6467c6468c6469""""X“ÿ¶Oƒ²ö!n˜´ÊÞE‚~áL·üeÏî  R s ®  ß X ° û : i “ æ  = z /¬E…ëuñ)pཊëP‹±á@Ö"m¹#{ßC€øw³R¡Ø‡Äº‡wè [ r ó!5!B!â!ï!ü" ""#"0"="J"W"d"q"~"‹"˜"¥"²"¿"Ì"Ù"æ"ó## ##'#4#A#N#[#h#”#Ï$4$%3%S%&&º'K''·((X(Ã)_*%*\*£*é+z+Ó,D,,±-P- ..R.ª/‡0A0½11!1P1Ï2H2z2ß3F3p3p3}3Š3—3æ4z44£4Ñ4ÿ5595g5‘5ž5«5Ï6[6“6Í7C7©7ë888J999)969C9P9]9j9w9„9‘9ž9«9¸9Å9Ò9ï::{: :å;;^;Ž;Ä;ô<"<_<§<´<Á<Î<Û<þ=c>;>H>U>˜>ç>ý?a??Ü@:@K@\@m@z@‡@”@¡@®@»@È@Õ@âA@AVAkBEBªB÷C_C²CÿDUDÛE*E?-†” x$ÿÓ%ÿ·&')*K+-r./2934K57ÿD9ÿˆ:ÿ­;ÿš<ÿ =IQR&UYÿÉZ\ÿÜbÿÓdg9xy&z&{&|&}&‰­ÿÓ®ÿÓ¯9ºÿÜ»ÿ ÇÿÓÉÿÓÐ9Ñ9Ò9åéêÿ ëÿÜìöKûý$ÿÓ$ÿÜ$ÿÜ$$9$&ÿÜ$*ÿÜ$2ÿÜ$4ÿÜ$6$7ÿa$8$9ÿ}$:ÿ$;$<ÿa$FÿÜ$GÿÜ$HÿÜ$Iÿ·$RÿÜ$TÿÜ$WÿÜ$X$Yÿˆ$Zÿ­$\ÿu$b9$dÿÜ$gÿÜ$h$oÿÜ$pÿÜ$qÿÜ$rÿÜ$sÿÜ$yÿÜ$zÿÜ${ÿÜ$|ÿÜ$}ÿÜ$~$$€$$©ÿ·$ª$­9$®9$¯ÿÜ$´þø$µÿ$ºÿu$»ÿa$Å/$Ç9$É9$ÐÿÜ$ÑÿÜ$ÒÿÜ$Ó$Ô$Õ$ã$êÿa$ëÿu$öÿÜ$ù$ûÿÜ$üÿÜ$ýÿÜ$þÿÜ%%&ÿÜ%*ÿÜ%2ÿÜ%6ÿÜ%9ÿÁ%:ÿ·%<ÿ%dÿÜ%gÿÜ%©ÿÁ%ªÿÜ%¯ÿÜ%´ÿ%µÿ%»ÿ%Åÿ­%ÐÿÜ%ÑÿÜ%ÒÿÜ%ãÿÜ%êÿ%öÿÜ%ùÿÜ%ûÿÜ%ýÿÜ&&$&6&<ÿÜ&b&©ÿÜ&ªÿÜ&­&®&´&µ&&»ÿÜ&Å&Ç&É&ã&êÿÜ&ù''$ÿÜ'9ÿÜ':'<ÿ'bÿÜ'©ÿÜ'ªÿÜ'­ÿÜ'®ÿÜ'´ÿÓ'µÿÉ'»ÿ'ÅÿD'ÇÿÜ'ÉÿÜ'êÿ))þ·)ÿa)$ÿD)6ÿÜ)7ÿÜ)DÿD)Hÿ)Lÿk)Rÿ·)Uÿk)Xÿ)\ÿD)bÿD)iÿD)jÿD)kÿD)lÿD)mÿD)nÿD)pÿ)qÿ)rÿ)sÿ)yÿ·)zÿ·){ÿ·)|ÿ·)}ÿ·)~ÿ)ÿ)€ÿ)ÿ)©)ª)­ÿD)®ÿD)´ÿÓ)µ)ºÿD)Åþˆ)ÇÿD)ÉÿD)ãÿÜ)ëÿD)ùÿÜ**$*7ÿ·*:*<ÿš*b*©ÿÜ*ªÿÜ*­*®*´ÿÓ*µÿÓ*»ÿš*ÅÿÉ*Ç*É*êÿš++ÿÜ++©+ª+´ÿ·+µÿÁ+Åÿ·-ÿ·-$ÿÜ-bÿÜ-©ÿÜ-ªÿÜ-­ÿÜ-®ÿÜ-´ÿ·-µÿÁ-Åÿ-ÇÿÜ-ÉÿÜ.ÿ).$ÿÜ.&ÿ.2ÿ.7ÿa.8ÿÉ.:ÿ·.<ÿ·.DÿÜ.Hÿš.Rÿš.Xÿš.\ÿk.bÿÜ.dÿ.gÿ.hÿÉ.iÿÜ.jÿÜ.kÿÜ.lÿÜ.mÿÜ.nÿÜ.pÿš.qÿš.rÿš.sÿš.yÿš.zÿš.{ÿš.|ÿš.}ÿš.~ÿš.ÿš.€ÿš.ÿš.©ÿ}.ª.­ÿÜ.®ÿÜ.¯ÿ.´ÿÁ.µÿÁ.ºÿk.»ÿ·.Å.ÇÿÜ.ÉÿÜ.Ðÿ.Ñÿ.Òÿ.ÓÿÉ.ÔÿÉ.ÕÿÉ.êÿ·.ëÿk.ûÿ.ýÿ/ÿÜ/$//2ÿ·/7þæ/8ÿš/9ÿ/:ÿD/<þð/D/HÿÜ/RÿÜ/XÿÜ/\ÿD/b//gÿ·/hÿš/i/j/k/l/m/n/pÿÜ/qÿÜ/rÿÜ/sÿÜ/yÿÜ/zÿÜ/{ÿÜ/|ÿÜ/}ÿÜ/~ÿÜ/ÿÜ/€ÿÜ/ÿÜ/©/ª/­//®//¯ÿ·/´þa/µýæ/ºÿD/»þð/Å/Ç//É//Ðÿ·/Ñÿ·/Òÿ·/Óÿš/Ôÿš/Õÿš/êþð/ëÿD292ÿ­2ÿÜ2$ÿÜ29ÿÜ2;ÿ}2<ÿ2bÿÜ2©ÿÜ2ª2­ÿÜ2®ÿÜ2´ÿÓ2µÿÜ2»ÿ2ÅÿD2ÇÿÜ2ÉÿÜ2êÿ3ÿÓ3þÁ33$ÿ}383:3<ÿÓ3Dÿ¤3Hÿ·3LÿÓ3QÿÜ3Rÿ·3UÿÜ3VÿÜ3XÿÜ3\3bÿ}3h3iÿ¤3jÿ¤3kÿ¤3lÿ¤3mÿ¤3nÿ¤3pÿ·3qÿ·3rÿ·3sÿ·3xÿÜ3yÿ·3zÿ·3{ÿ·3|ÿ·3}ÿ·3~ÿÜ3ÿÜ3€ÿÜ3ÿÜ3©ÿÜ3ª3­ÿ}3®ÿ}3´&3µ&3º3»ÿÓ3Åþ·3Çÿ}3Éÿ}3Ó3Ô3Õ3äÿÜ3êÿÓ3ë3úÿÜ494©4ª4´ÿÓ4µÿÜ4Åÿ}5ÿ­5ÿ·5ÿÁ5$ÿ­5&ÿš57ÿk59ÿ5:ÿ­5<ÿ}5DÿÓ5Hÿ¤5Rÿ¤5Xÿ¤5\ÿ5bÿ­5dÿš5iÿÓ5jÿÓ5kÿÓ5lÿÓ5mÿÓ5nÿÓ5pÿ¤5qÿ¤5rÿ¤5sÿ¤5yÿ¤5zÿ¤5{ÿ¤5|ÿ¤5}ÿ¤5~ÿ¤5ÿ¤5€ÿ¤5ÿ¤5©ÿ5ªÿÜ5­ÿ­5®ÿ­5´ÿk5µÿ}5ºÿ5»ÿ}5ÅÿÜ5Çÿ­5Éÿ­5êÿ}5ëÿ5ûÿš5ýÿš6$&6&6*6264666b&6d6g6­&6®&6¯6Ç&6É&6Ð6Ñ6Ò6ã6ö6ù6û6ý7ÿD7ÿ 7ÿ7$ÿa7&ÿˆ77ÿÜ7Dþ­7Fþ¤7Hþ¤7LÿÁ7Rþ¤7UþÓ7Vþ­7XþÉ7Zþ­7\þÁ7bÿa7dÿˆ7iþ­7jþ­7kþ­7lþ­7mþ­7nþ­7oþ¤7pþ¤7qþ¤7rþ¤7sþ¤7yþ¤7zþ¤7{þ¤7|þ¤7}þ¤7~þÉ7þÉ7€þÉ7þÉ7©ÿD7ªÿ7­ÿa7®ÿa7´7µÿÓ7ºþÁ7Åþø7Çÿa7Éÿa7äþ­7ëþÁ7úþ­7ûÿˆ7üþ¤7ýÿˆ7þþ¤8$8-8=ÿÜ8b8­8®8Ç8É8åÿÜ9ÿˆ9þø9ÿY9$ÿ}92ÿÜ9Dÿa9Hÿa9LÿÓ9Rÿa9Xÿu9\ÿÉ9bÿ}9gÿÜ9iÿa9jÿa9kÿa9lÿa9mÿa9nÿa9pÿa9qÿa9rÿa9sÿa9yÿa9zÿa9{ÿa9|ÿa9}ÿa9~ÿu9ÿu9€ÿu9ÿu9©ÿN9ªÿ9­ÿ}9®ÿ}9¯ÿÜ9´9µ9ºÿÉ9Åþæ9Çÿ}9Éÿ}9ÐÿÜ9ÑÿÜ9ÒÿÜ9ëÿÉ:ÿ­:ÿ:ÿˆ:$ÿ:Dÿ}:Hÿˆ:LÿÓ:Rÿˆ:Uÿ¤:Xÿ·:\ÿÜ:bÿ:iÿ}:jÿ}:kÿ}:lÿ}:mÿ}:nÿ}:pÿˆ:qÿˆ:rÿˆ:sÿˆ:yÿˆ:zÿˆ:{ÿˆ:|ÿˆ:}ÿˆ:~ÿ·:ÿ·:€ÿ·:ÿ·:©ÿ:ªÿÜ:­ÿ:®ÿ:´ÿÜ:µ:ºÿÜ:Åþø:Çÿ:Éÿ:ëÿÜ;ÿš;$;&ÿk;2ÿ};7ÿÜ;Hÿ¤;b;dÿk;gÿ};pÿ¤;qÿ¤;rÿ¤;sÿ¤;©ÿ;ª;­;®;¯ÿ};´ÿa;µÿ­;ÅÿÓ;Ç;É;Ðÿ};Ñÿ};Òÿ};ûÿk;ýÿk<ÿ <þa<þð<$ÿa<&ÿ<2ÿ<Dþæ<Hþð<Lÿ·<Rþð<Xÿ<bÿa<dÿ<gÿ<iþæ<jþæ<kþæ<lþæ<mþæ<nþæ<pþð<qþð<rþð<sþð<yþð<zþð<{þð<|þð<}þð<~ÿ<ÿ<€ÿ<ÿ<©ÿ<ªÿk<­ÿa<®ÿa<¯ÿ<´ÿ<µÿÜ<Åþø<Çÿa<Éÿa<Ðÿ<Ñÿ<Òÿ<ûÿ<ýÿ=ÿÜ=©=ª=´ÿÜ=µÿÜ=ÅÿÜH[ÿÜIÿIÿkIÿ·IWÿÜIZÿÜI\ÿÜI©ÿ·IªÿÜI´AIµIºÿÜIÅÿIëÿÜNDÿÜNHÿ·NRÿ·NXÿÁN\ÿ·NiÿÜNjÿÜNkÿÜNlÿÜNmÿÜNnÿÜNpÿ·Nqÿ·Nrÿ·Nsÿ·Nyÿ·Nzÿ·N{ÿ·N|ÿ·N}ÿ·N~ÿÁNÿÁN€ÿÁNÿÁNºÿ·Nëÿ·QQQQ©QªQ´ÿkQµÿQÅÿ¤R&RÿÜRR[ÿÁR©RªR´ÿkRµÿ·RÅÿ}Uÿ}UÿDUÿÜUFÿÓUGÿÜUHÿÓUIUJÿÜUKÿÜUPÿÜUQÿÜURÿÓUTÿÜUUÿÜUXUYUZU[ÿÉU\U]UoÿÓUpÿÓUqÿÓUrÿÓUsÿÓUxÿÜUyÿÓUzÿÓU{ÿÓU|ÿÓU}ÿÓU~UU€UU©ÿ·UªU´UµVUºUÅþÉUæUëU÷ÿÜUüÿÓUþÿÓYÿÉYÿaYÿY©ÿÜYªÿÜY´YµÿÜYÅþðZZÿDZÿZ©ÿÜZªÿÜZ´ZµZÅÿ)[FÿÜ[HÿÁ[RÿÁ[oÿÜ[pÿÁ[qÿÁ[rÿÁ[sÿÁ[yÿÁ[zÿÁ[{ÿÁ[|ÿÁ[}ÿÁ[üÿÜ[þÿÜ\ÿÜ\þÜ\ÿk\©ÿÜ\ªÿÜ\´\µ\ÅþÓbÿÓbÿÜbÿÜb$9b&ÿÜb*ÿÜb2ÿÜb4ÿÜb6b7ÿab8b9ÿ}b:ÿb;b<ÿabFÿÜbGÿÜbHÿÜbIÿ·bRÿÜbTÿÜbWÿÜbXbYÿˆbZÿ­b\ÿubb9bdÿÜbgÿÜbhboÿÜbpÿÜbqÿÜbrÿÜbsÿÜbyÿÜbzÿÜb{ÿÜb|ÿÜb}ÿÜb~bb€bb©ÿ·bªb­9b®9b¯ÿÜb´þøbµÿbºÿub»ÿabÅ/bÇ9bÉ9bÐÿÜbÑÿÜbÒÿÜbÓbÔbÕbãbêÿabëÿuböÿÜbùbûÿÜbüÿÜbýÿÜbþÿÜdd$d6d<ÿÜdbd©ÿÜdªÿÜd­d®d´dµ&d»ÿÜdÅdÇdÉdãdêÿÜdùg9gÿ­gÿÜg$ÿÜg9ÿÜg;ÿ}g<ÿgbÿÜg©ÿÜgªg­ÿÜg®ÿÜg´ÿÓgµÿÜg»ÿgÅÿDgÇÿÜgÉÿÜgêÿh$h-h=ÿÜhbh­h®hÇhÉhåÿÜp[ÿÜq[ÿÜr[ÿÜs[ÿÜxxxx©xªx´ÿkxµÿxÅÿ¤y&yÿÜyy[ÿÁy©yªy´ÿkyµÿ·yÅÿ}z&zÿÜzz[ÿÁz©zªz´ÿkzµÿ·zÅÿ}{&{ÿÜ{{[ÿÁ{©{ª{´ÿk{µÿ·{Åÿ}|&|ÿÜ||[ÿÁ|©|ª|´ÿk|µÿ·|Åÿ}}&}ÿÜ}}[ÿÁ}©}ª}´ÿk}µÿ·}Åÿ}‰&‰©‰ª‰´ÿ‰µÿ‰Åÿ­©ª´ÿ­µÿ¤Åÿ©$©%ÿÜ©&ÿÜ©'ÿÜ©)©*ÿÜ©+©-ÿÜ©.©/©2©3©4©5©7ÿ©9ÿ©:ÿÜ©;©<ÿk©=©I©Q©R©U©YÿÜ©ZÿÜ©\ÿÜ©b©dÿÜ©g©x©y©z©{©|©}©‰©—©­©®©¯©ºÿÜ©»ÿk©Ç©É©Ð©Ñ©Ò©å©é©êÿk©ëÿÜ©ì©öÿÜ©ûÿÜ©ýÿܪ$ÿ·ª%ÿ·ª&ÿܪ'ÿܪ)ª*ª+ª-ÿܪ.ª/ª2ÿܪ3ª4ª5ª7ÿDª9ÿNª:ÿª;ÿª<ÿª=ªIªQªRªUªYÿܪZÿܪ\ÿܪbÿ·ªdÿܪgÿܪxªyªzª{ª|ª}ª‰ªª­ÿ·ª®ÿ·ª¯ÿܪºÿܪ»ÿªÇÿ·ªÉÿ·ªÐÿܪÑÿܪÒÿܪåªéªêÿªëÿܪìªöªûÿܪýÿÜ­ÿÓ­ÿÜ­ÿÜ­$9­&ÿÜ­*ÿÜ­2ÿÜ­4ÿÜ­6­7ÿa­8­9ÿ}­:ÿ­;­<ÿa­FÿÜ­GÿÜ­HÿÜ­Iÿ·­RÿÜ­TÿÜ­WÿÜ­X­Yÿˆ­Zÿ­­\ÿu­b9­dÿÜ­gÿÜ­h­oÿÜ­pÿÜ­qÿÜ­rÿÜ­sÿÜ­yÿÜ­zÿÜ­{ÿÜ­|ÿÜ­}ÿÜ­~­­€­­©ÿ·­ª­­9­®9­¯ÿÜ­´þø­µÿ­ºÿu­»ÿa­Å/­Ç9­É9­ÐÿÜ­ÑÿÜ­ÒÿÜ­Ó­Ô­Õ­ã­êÿa­ëÿu­öÿÜ­ù­ûÿÜ­üÿÜ­ýÿÜ­þÿÜ®ÿÓ®ÿÜ®ÿÜ®$9®&ÿÜ®*ÿÜ®2ÿÜ®4ÿÜ®6®7ÿa®8®9ÿ}®:ÿ®;®<ÿa®FÿÜ®GÿÜ®HÿÜ®Iÿ·®RÿÜ®TÿÜ®WÿÜ®X®Yÿˆ®Zÿ­®\ÿu®b9®dÿÜ®gÿÜ®h®oÿÜ®pÿÜ®qÿÜ®rÿÜ®sÿÜ®yÿÜ®zÿÜ®{ÿÜ®|ÿÜ®}ÿÜ®~®®€®®©ÿ·®ª®­9®®9®¯ÿÜ®´þø®µÿ®ºÿu®»ÿa®Å/®Ç9®É9®ÐÿÜ®ÑÿÜ®ÒÿܮӮԮծã®êÿa®ëÿu®öÿÜ®ù®ûÿÜ®üÿÜ®ýÿÜ®þÿܯ9¯ÿ­¯ÿܯ$ÿܯ9ÿܯ;ÿ}¯<ÿ¯bÿܯ©ÿܯª¯­ÿܯ®ÿܯ´ÿÓ¯µÿܯ»ÿ¯ÅÿD¯ÇÿܯÉÿܯêÿ´$þø´%ÿÁ´&ÿ·´'ÿÁ´)ÿÁ´*ÿ·´+ÿÁ´-ÿÁ´.ÿÁ´/ÿÁ´2ÿ·´3ÿÁ´4ÿ·´5ÿÁ´7´9´:´;ÿˆ´<´=ÿÜ´Iÿ·´Qÿ´Rÿk´Uÿ´Yÿ·´Zÿ·´\ÿ·´bþø´dÿ·´gÿ·´xÿ´yÿk´zÿk´{ÿk´|ÿk´}ÿk´‰ÿÁ´þ}´­þø´®þø´¯ÿ·´ºÿ·´»´Çþø´Éþø´Ðÿ·´Ñÿ·´Òÿ·´åÿÜ´éÿ·´ê´ëÿ·´ìÿÁ´öÿ·´ûÿ·´ýÿ·ºÿܺþܺÿkº©ÿܺªÿܺ´ºµºÅþÓ»ÿ »þa»þð»$ÿa»&ÿ»2ÿ»Dþæ»Hþð»Lÿ·»Rþð»Xÿ»bÿa»dÿ»gÿ»iþæ»jþæ»kþæ»lþæ»mþæ»nþæ»pþð»qþð»rþð»sþð»yþð»zþð»{þð»|þð»}þð»~ÿ»ÿ»€ÿ»ÿ»©ÿ»ªÿk»­ÿa»®ÿa»¯ÿ»´ÿ»µÿÜ»Åþø»Çÿa»Éÿa»Ðÿ»Ñÿ»Òÿ»ûÿ»ýÿÅ$&Å%ÿ·Å&ÿÅ'ÿ·Å)ÿ·Å*ÿ·Å+ÿ·Å-/Å.ÿ·Å/ÿ·Å2ÿÅ3ÿ·Å4ÿÅ5ÿ·Å7þæÅ9þˆÅ:ÿÅ;ÿ·Å<þˆÅ=ÅIÿÜÅQÿ·ÅRÿ·ÅUÿ·ÅYÿÅZÿ<Å\ÿÅb&ÅdÿÅgÿÅxÿ·Åyÿ·Åzÿ·Å{ÿ·Å|ÿ·Å}ÿ·Å‰ÿ·Å&Å­&Å®&ůÿźÿÅ»þˆÅÇ&ÅÉ&ÅÐÿÅÑÿÅÒÿÅåÅéÿ·ÅêþˆÅëÿÅìÿ·Åöÿ·ÅûÿÅýÿÇÿÓÇÿÜÇÿÜÇ$9Ç&ÿÜÇ*ÿÜÇ2ÿÜÇ4ÿÜÇ6Ç7ÿaÇ8Ç9ÿ}Ç:ÿÇ;Ç<ÿaÇFÿÜÇGÿÜÇHÿÜÇIÿ·ÇRÿÜÇTÿÜÇWÿÜÇXÇYÿˆÇZÿ­Ç\ÿuÇb9ÇdÿÜÇgÿÜÇhÇoÿÜÇpÿÜÇqÿÜÇrÿÜÇsÿÜÇyÿÜÇzÿÜÇ{ÿÜÇ|ÿÜÇ}ÿÜÇ~ÇÇ€ÇÇ©ÿ·ÇªÇ­9Ç®9ǯÿÜÇ´þøÇµÿǺÿuÇ»ÿaÇÅ/ÇÇ9ÇÉ9ÇÐÿÜÇÑÿÜÇÒÿÜÇÓÇÔÇÕÇãÇêÿaÇëÿuÇöÿÜÇùÇûÿÜÇüÿÜÇýÿÜÇþÿÜÉÿÓÉÿÜÉÿÜÉ$9É&ÿÜÉ*ÿÜÉ2ÿÜÉ4ÿÜÉ6É7ÿaÉ8É9ÿ}É:ÿÉ;É<ÿaÉFÿÜÉGÿÜÉHÿÜÉIÿ·ÉRÿÜÉTÿÜÉWÿÜÉXÉYÿˆÉZÿ­É\ÿuÉb9ÉdÿÜÉgÿÜÉhÉoÿÜÉpÿÜÉqÿÜÉrÿÜÉsÿÜÉyÿÜÉzÿÜÉ{ÿÜÉ|ÿÜÉ}ÿÜÉ~ÉÉ€ÉÉ©ÿ·ÉªÉ­9É®9ɯÿÜÉ´þøÉµÿɺÿuÉ»ÿaÉÅ/ÉÇ9ÉÉ9ÉÐÿÜÉÑÿÜÉÒÿÜÉÓÉÔÉÕÉãÉêÿaÉëÿuÉöÿÜÉùÉûÿÜÉüÿÜÉýÿÜÉþÿÜÐ9Ðÿ­ÐÿÜÐ$ÿÜÐ9ÿÜÐ;ÿ}Ð<ÿÐbÿÜЩÿÜЪЭÿÜЮÿÜдÿÓеÿÜлÿÐÅÿDÐÇÿÜÐÉÿÜÐêÿÑ9Ñÿ­ÑÿÜÑ$ÿÜÑ9ÿÜÑ;ÿ}Ñ<ÿÑbÿÜÑ©ÿÜѪѭÿÜÑ®ÿÜÑ´ÿÓѵÿÜÑ»ÿÑÅÿDÑÇÿÜÑÉÿÜÑêÿÒ9Òÿ­ÒÿÜÒ$ÿÜÒ9ÿÜÒ;ÿ}Ò<ÿÒbÿÜÒ©ÿÜÒªÒ­ÿÜÒ®ÿÜÒ´ÿÓÒµÿÜÒ»ÿÒÅÿDÒÇÿÜÒÉÿÜÒêÿÓ$Ó-Ó=ÿÜÓbÓ­Ó®ÓÇÓÉÓåÿÜÔ$Ô-Ô=ÿÜÔbÔ­Ô®ÔÇÔÉÔåÿÜÕ$Õ-Õ=ÿÜÕbÕ­Õ®ÕÇÕÉÕåÿÜã$&ã&ã*ã2ã4ã6ãb&ãdãgã­&ã®&ã¯ãÇ&ãÉ&ãÐãÑãÒãããöãùãûãýåÿÜå©åªå´ÿÜåµÿÜåÅÿÜéé©éªé´ÿ¤éµÿéÅÿ·êÿ êþaêþðê$ÿaê&ÿê2ÿêDþæêHþðêLÿ·êRþðêXÿêbÿaêdÿêgÿêiþæêjþæêkþæêlþæêmþæênþæêpþðêqþðêrþðêsþðêyþðêzþðê{þðê|þðê}þðê~ÿêÿê€ÿêÿê©ÿêªÿkê­ÿaê®ÿaê¯ÿê´ÿêµÿÜêÅþøêÇÿaêÉÿaêÐÿêÑÿêÒÿêûÿêýÿëÿÜëþÜëÿkë©ÿÜëªÿÜë´ëµëÅþÓììÿkìÿ·ì©ìªì´ÿÜìµìÅÿDöö$ö7ÿ·ö:ö<ÿšöbö©ÿÜöªÿÜö­ö®ö´ÿÓöµÿÓö»ÿšöÅÿÉöÇöÉöêÿšù$&ù&ù*ù2ù4ù6ùb&ùdùgù­&ù®&ù¯ùÇ&ùÉ&ùÐùÑùÒùãùöùùùûùýûû$û6û<ÿÜûbû©ÿÜûªÿÜû­û®û´ûµ&û»ÿÜûÅûÇûÉûãûêÿÜûùýý$ý6ý<ÿÜýbý©ÿÜýªÿÜý­ý®ý´ýµ&ý»ÿÜýÅýÇýÉýãýêÿÜýù MB@hmþ ¼þ‰þ‰ L GÌþBGÌSf €¯ JBits@ ûþšmãB±‹`#cÕVeraSansÿÿÿÿ6ÿÿþ628R00@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        "                      "       #                       #     $               $    &              &    ÿÿ P ì_<õº¹ð¸ºÂg‘þ‰þ Lmreportlab-3.5.34/src/reportlab/fonts/DarkGarden-copying.txt0000664000175000017500000000244613544671343024537 0ustar rptlabrptlab00000000000000Copyright (C) 1999, 2000, 2004 Michal Kosmulski This font is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This font is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this font; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. reportlab-3.5.34/src/reportlab/fonts/cobo____.pfb0000664000175000017500000014254413607302650022531 0ustar rptlabrptlab00000000000000€%!PS-AdobeFont-1.0: Courier-BoldOblique 004.000 %%CreationDate: Wed Aug 26 16:53:04 1998 %%VMusage: 11931 56737 11 dict begin /FontInfo 10 dict dup begin /version (004.000) readonly def /Notice (Copyright (c) 1989, 1990, 1991, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved.) readonly def /FullName (Courier Bold Oblique) readonly def /FamilyName (Courier) readonly def /Weight (Bold) readonly def /isFixedPitch true def /ItalicAngle -11 def /UnderlinePosition -224 def /UnderlineThickness 52 def end readonly def /FontName /Courier-BoldOblique def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001000 0 0.19438E-3 0.001 0 0] def /UniqueID 44055 def /FontBBox{-88 -249 697 811}readonly def currentdict end currentfile eexec €-À “úJ»GA¦œ>U‘#«T„.7r2FòÕ>â8B~ðZ?å[tïH@—E†Ì|éZ‚ƒ_”Nàž¦¼¯n!«9øeN2l•u áq‘eV4 -¦ôÝä]ÇZŸ;‰Ç:é'óüÏÛé'oŽÝIóÕ/<‹É® ^Gèñ$ëÈ+£NÝ[ƨͪÛª)ÄNÍÌü·|¨Á1aE¬Ë_Ý2î“3”‡¿=°óÜ }pŠ‘¾Ž¼º‰Hµõm»MkC³Xþh”1(µ¡pшáÜ7‡GñnÜטŒ6€‚íÉ®l£OÍÖu­6bª¨ꕎ]F÷Âx Zg] jßAз±>ÐH¢íÓ냃ùÊ)º{:o ­Ôù Nùgw4÷uà¾1÷Nmušæ"û“ƒ¤.Ÿ†6µ™Nvôâ¡%’zwî[0<5ب|ë6üéz‘¤oš‘žé×qÜm¹~BŠa2“ú-ÙJa™dÂw<‡qÕ„·µÐøh?jòPÑüé'Žç”°¶i€—ø±Œ"ñŽ0‚8i“½æÉz*ç ±rtCíâ#™êa‡QŒï1íN2éb쩨”¨V±í…;‹^¯šy‡Lì¤;M¯ø€9é[”®m€ ¾Dø¿#ßQ”ÌÝÇ.koÂ6'ŒX›>–ä¦îfÀŠ·’©«–@uZŒS¯Ò¡€S©`¹6F”sØñ]ÜBB?ŽíºŸÖ sNW2m½ã•òˆ‡óLÏÌÇÇî ô³dB-5ëËøTLÏiEþU2.®À(Õ¾ÕkPG…c«Ÿ®›óŸ]V~³Êÿ6Qƒ‹†^«éûtÕÑ<ðÆ­:viå=ãû󾎌ŠsfN i›­ÌQ ˆY@>Ú9Oó_@‚¯J)Þ×Oßf°¹!1aÅ)­oLtýR³³7´lDáM·K €Ì\p³˜æ™™P‡¦>¾\Éaóìþí ,Oÿ°ƒ1²ÚÌë‹îR|ýM!ïõÀWöM@ÈÚŽú«ß’„Ð-j™UÍVÃÉŒ †î‰%Ï{N–¿À¤ERpÉY¶ZÖ†îõ¨Pÿúö:l6ôLÛ×ÎI óý -ÎM„öŽ~ðA@KKÆqäè˜$OƒDºT†¬¸Ûži$dÈ=ïô|Ùüx˜ÕýÍ7¨B/b>OU³,Hf·ÉW˜æÉù‰›WÏ”èÞkÇB\äD}F$tWn—»ù•‰\&ªdžˆi™ª`šæ[.–üòûì±+ÊRõ°{¨Þù ê¡‘|òœhú¾˜_’(õ¦æÃkö‘°ã³Ó‘œ¹]^ç £3 ñ í«&ù9El±ç Ž9œl;¸cdœ;# V?¨Àïõ¼8>­þ®#‚éã΀Y!{¿Ë˜Ã.3røh'¥¯I½åÄ.zÒœìæyŽŒù@Ð-!DÁ´œÍ …œ²¿c{Õ™ìC‚çEü„ž€ €Ñzk~ÖX«ýOT/˜.Yµ^±ô2še+¦2º(ƒ·¿ 9ÿ|æP]àå…i‹ä<’FŸ9CµE(ÅÑzÊÓ}#BJÛqCëÖǬæ8ùÌç‘d²ßtFM@e7¢.%&´ƒ\%Öƒ½ô?­±d¢J¢Lx…ýä8S=N#„òÈktA…á¸À#÷àˆj$ çx½áØúÌý}^y­å$”ðõ¢®`,šÈD5jg)%“ÉÓEŸ[ËóJé ½Xíù:Lü2ݬîÖpmÔ9ËÔàü`‰Áx8“¯LïRè›N<Ÿ„J¿'Hza‹go|ü& ñÌU»:4ëØöí @ðþ˜œí!¨Îåb’®c@ !8ûs¿o׆É[I=_ˆÃð•´Êø c yÞ;íb0Ëó²J‘8M¡¼@íBÚÒÝQlc²hòg ?µbY­£H»³³„­Œm*^=Fe¼ì Q—œ§ù)©°eÔ8Ê)\„brñûò%ùl–u¸¶ZÅåóƒôDÈS•"u2‹*­ë0dJ4¿¦õ·@À‚”v°«Ø°0GUv‰¶vfY“ü}:³úKù6ê5]0 ìuoæØÛ7_‡‹`æÍÿ˜Í[²ñ¥„0 >£-¯@hnÁ–V~XÄÓ¨nêá÷}Q­í.uÃß-“ÓÿËü ¥zQ"ö[cb/Â&Vøýc3ú†ŒxzŸƒ^3§ìö(gùé)±¤ŸÝfŸ‡ûDYpÿ`õ¨êd+*FRùM@#ŠÙ6™ÛO²×8ª/ä„>š0¿è~æKg›šAŸn™¨gÌäçdé+]¾1ðúߎ1‚…”|ëlÚõ h" AIÑÍãvG}ÕÐyHUßNB—aTS:1 ìÑøóËVÆzìÎcÕþ¬4ŽÊOïˆk—‘îÆ¹KYÿ÷¸­”b†®Q£G\ÞdðŒ@D ¾Lÿ Äl7ûÁ™s#£÷ºÏþ×° Ô«%téÉþ êVÌ`žTÖA®Î϶ï+ƒÿA%ë¢hf•™ßàûrÏm<+¹>bA%p£}^óÿþF{EWº!h}:ù¶±% ûÀ”@S`cËF•?2w–•#ß?p>Ú™‡Êš&BÏ#ôCľ×o•'L&οÎÉ ý2Ž”ûõ|{2ÜHnê¯c§FÙÒû :–}Jým§‡…­Ñ%ÌÐÅ€²&mˆÔñƒ† H¾ÊÜì-3¤æÌYýD:ë‘P_«I(Reíÿãš›ùOöjÍ/ŒrðV–eZ8ÐX­ŠÖ¡p'ÿ~ s¡Ã°ÓI—p÷½›F,j»ru{FÑù¼þ›§t\¬ïœBdÙðÈÛ!dn7 ôª“q˜rÚDœM9ÌôÈ!«Î¼zòo— €ÙÝHO«Òyr=Ž)9¹³MBî›wŠdÿƒTl´.ÅÕbz8 x÷kµº‹Çj’Sν çj Ю®µbq‰Æ¨Æ³ØwÕ9BÓ¦ZF©l¿hQ©! ¸ÆSBtĈՈ°õîÉ*‡¼8ʰ±àßíq¾Pª oïôƒ.NÔѼ›~Nz}2zÔeôlÔ¯£ç¢»FÜèÞ;.=F:õR™jp½;RzSçúº[ñaN°HüVHâ:½n݇¨Ëm#/ÐX´8rTHG-j{½ÐlEu•æ¹6z-0ÿˆ‚`„”¨&mÖ>RÚ”ÿ¸]•%—Q1;žÚó¤8]jËGóÜ­áÙŽØCYœÚäµÓ>‹ºÎÃ)ÔNOålkZSÝÑï}MøqÇ4»òlã¼Åî&}Èìo\¾:˜‰:j‘V†kb‚¼¡R—h}ª[’‚%­ÝCÂeøè…0„ iíËC; ](PFÆ•¡^ƒz–çTTµÐQG‡s…€øÓ£ÊX„HŽÎìúC¯wl’7ntòW®êZ‚jêR#ÃÑ÷l€¤8÷†ŠûüU@mnއP÷÷zí¿¯S€Ì&÷n˜Z)ØÍ|ÙT“üõ=Ÿ2\³‡ÆÈ…ÇK“ƪGzà±±>fwýæCó¤Þ]E¿Xix©M‡*(_ŒÉ3"ý& Øïñ}()˜¯’‰×jž;ýúÀ¹ŽÂô¡q@q’ðqzÆ h *µ ò5 Š©ö1ÄÏ:G'ð*£É$ý“Óý±»Ü©c£c5­ô9ÅRõáva¯"ÖËaÕX¸Åm9~Ú(P§i;tÖÅ>]w>)0©6¨§»âaoêS¼… 5Ø\§ô»ˆð?–ý—@¼mXi³– 4/ æð‹ɜwó¥‘nŠ_Á`nì·ã?¨§ÉÈà……s"‹Á{ùù~˜¡¾ V‰®yúõþLº©MËÛ»ê&/gÍÖG£H_H³Z&.ÈëhgÓäágÕ ©6 ‘æ´Æ@P¼Ž†‰BÁ|…®ü<Š×Çu”Iá¿9_'%Y”_ÂÈ} ™£]õk¼!ÝñEKÏã [~øÇi)¿V˜gI/HÞ<ëÐKÎJ8÷·æÃX—ÜÇïA ’Eä¸x?­Ì0ëÛí軯r³ÕUéÝ^ãëï¢Ö½~$&=»™[–¼ ‹µç^.ü†­I,ÍÛîÅŽ¦jw‘%y"a†DƒÛÄ›OFX½®J¹Ò Â’]ìjZ""{õ°‚+Nà ·†W Å—âú•j4Õ#e¶Ñ${ÞgO޼ZƯ™añ–È% ¿A™èÇŒ HÙz›·çŽôbZ[šÊõ‚ ŽØFÃâjLêI¯´^–àî>æð°rÍühßSë»øïR¡1Ö_v„iR±}`-¼!"iî ùÕ–š~ðà"C`iÂìáùþ‰xoä´H6Á@#™º¨³E×øý}%.Œí•îá¶õ“7âk¶PßRØçü\ûëïØ‹gØø0ccyë¡=YíF»!UrSc ÿ…ö+Òuõ- 2̧5BkàÓÍ\\iXâ?¯&¨ó²w`×ÀÓv$” ø®ˆØ¯ž„¢ a),Ö"Š Iײ&E~¬Q ‹-•®Ÿ4 ^BÔEí7¿¸À+b¼îöØ!ðcDäYΨŒÎ^‡CÈÆ=l쮃µiéÄ),}Œ£f-+ôa ßËÛ­Å2) Ž>ÖNY.gc2ag£L6&?ÍÖ‹U¡œ>š×‘öÿ`“¿ÄP*©Â¶ÒþÅïÆþ* cct¿„>âzæ,åøÁOa2{Éõ·»•zw½'“I£Et¿Um¥‘ªªæVT¯<…kÿ×7{|󜪷æ?N»};hôðE×K9¨›ìª³„íÇÝúyñöê›n…uRÕguNUÐdàÇR=“l‡ãm€—ªk7ÁxÙÀZªHÕÄy¼¦E–Ùdö®›Ô¹õ$<!½Çi2‰— BáçËp¥D”L€|Ÿ¡½f"†ÛûGfÁK.RPM× ¾Fbð ˜Ýkok\–ÎÔ^œŠAaa¿°ÿKÐé$§ž EÖ§6qÞoÁ /| JÓ {^Ñ{±ëô°w/´ˆ ˜V¿ vü v óž]Àç@3š7Ãpx’ã=Pò?á¨Z©E*naÊ¢ _·[zWÀ§‡t¯5±¦kCÃT@sá_䤸©/¢‡ÞýJ ŠQ&#AËB©™¡¹v‡x~A1³¿“¾¨ÃÆþMýÎëàc_{½Úeæ|*M;’Ã)¢£¤…Ç‚)ÁÆv¯@)Šl#˜äÊEeÔ8· UhìVá^kRUq™X'„jè,†öT9¸-P£tA¸¡Ë/D•C9‘€®à÷r&©œFÔë«QsTÈJSh·7½Ö—ý”¤~Ѧ)§œÒm”PÓ°C-ñ‘õZQ F¬-<|-xŠ¥Ð´P“™v‹®¥ˆ7´o»ç¿¦(Å7Ý,ðµºjƒ‰“—Óóúz,4a^“œÐ÷ôV“»û‚ÙJ`f<ÙðïÉÖð­åX¤:/†Àñ8  tJø:¸ -*¯ÜªØ%#[œ›ôÓë’@Â:õàÒ2º;}ç?F£hÊ”½§uÚeF}§#5ÃÃe-X–ÄB¡¤^‚ºž»hÝöî¹»Æ[3›û°N{w÷Çíj Ïažî~(é^^Ôð%[È”Ô'á©Ñ7´,5ËÒ°¸v³ÚáPŠûÿ¢Uaøzª¥åWé\,5þÑí^÷ `/CQöŸþýíŽ%ÓK(þ&7tOågL8DjÌãhpB?§é01rþI ,ŒIÆ+NÇÔ-¢ØæÀR5˜òCyð2¦‚àÛ‚¶t¹¯È;ÀI’ޛĄ9ýéÿÖÞeÎîäûˆtOjW³ð}~n‘ˆ–A¼`¨²YIÀ)ü, ‚û¦1qÓ…ò¶á>‡"='v’ò¸»×cn¾Ot_Ó¸Jû €e&tf %ÍÆÂhã^˃2IVµhRúT1“Ïq–OKS~Ï Ûs3R–í5ƒé¤F|¥u× G¨ ñ•ÍØEÆl îúIË m³÷è{ìÂU+õŠØèˆE©Èþ™|=“9ÈÒ&@Ø*Á°í`P(›†?ài˜3:æ4`Mþ›$­Ñæñ˜í$5‹Ôªùpÿs¹F3Èê3k6WྐྵžD½d~³Ç/ îÚê ë+gE“ ›Õè8ì”Æ@_üYÜ –UIPIÎãBtÜNžr“¸,á½TþL»œ¾f1§|Úž ”ªýð¡>9Çp*ý(àWÛýgÙðGË5ÁqÑŽTØ1÷X”é¥ß+ï¶0-MîìAîŠÄx'ÒJ””´=‡¬åÂÐK­-ðBQò”!ç]­ÿüŠŠçƒ >àÐ2 ˜‹aËL~„“‚\'Á†XÖ[äé5t¸Ì(¥<½—\~¢ .½©È˜ÍÐrÂ鼎’t¥Â4¼9±h‰hîÃ>L†r@" —P_$¬ÚŒñp·—šà¨àO‚ƒÜœÑÈ“¾pÍZÎ|y)S¸ Ò PñÇèžílÙ4ÃÊ0/0«•íîSƒÒ¬€ŠŒóŒ­'!Âk°#lC:Ã|šRBn$ð»Ûp Ÿš‘+­g:ÈG'ÙúµÍÛ~ö“k3[$ô“<ï2~Xƶ>°d¡Wí4À"„®E¶ÎžVÃv"üó8Ťv”ôU·¶JaÜÔ€YMFÕÓ E1k¯µ|Vº\¼ôÐrŽe-ÒÅÝñV‘¹},(–iˆ²oÅÐÂÖíêŽî>#?Úç dñ¡OŠ÷èúDý–¯ÆŠ‘ÿ#+sê0cNÑqEÒÆŸê¿àŒh—qGF%^©Ÿµ³6îs\¡qŒ;lmü3O Kž“¶Jl«“`ŽévhÇ-ù“ (U-¶FW©:1dzo²)©RF× ›a×}¸d8…³•5²$ª÷çÃ*—Þö‰Z§• %YýíC­ëúü 7,á“iÕ¸ÔUt,Q°å@G&å;Ô®67aóÇæ&oÉ’¸¿edæßW¸91qËãCnœ…íÛovCb«1‘ýJØ*qòÉÏCˆ+× pž° ìšd¯b£›)µHV‰dM|6 ]Ƀyèq…¾,L¾1Ro9]]ˆ¢XmÒ³ƒ\ïBë|ví/ŸM²•“]°ÿ °xñûnRoYVgžÚë{´N©Œð¢‘Ð@öXÕðmÁ¦Ü‰ùײbË< ›ÒZÔt¢&í*~LíÓìÒW‘:ÇÌ㔨òŽËÌ/ŠnG¼¬:(ƳǛªïÑBŒ¸^ ¦€ÃðVÐ.º>wqKbé)žOæ0I”ºx¹w¼y¾7½nê·ƒhµPwç¹ÿü©Ê5X5#3}EKP‡ÏÃ7ž9´`±\m?‡ Î’%)K^Až_©­éÕ²ˆ¡ë‚å-M©ÎÎ œ`zÏ9æj`$»Ô>QÉêNMµpGFMmöbõMpö€ÿPÕ“¡âAä¨ú.ÞüB¿JŸ9ãÝî’¿–‰<—U %8^(z9„ËoâJk‹rDcÛ”"E³VÖÛ£]n#òßFh:jCûØÜŒ¥ë"Ì’èI¢M\eYÇž­ÇòB°©Iº_4 ?,5®/}XµÀa11ñûvðªÌ“Ùs¿NcÛý–5±fe R…]“ÒZÎÍe¬É*uðÒuJ{'ã{X|'Õâßáâ 2Î[ðU¡ 5ˆ/~´åÐ0Bh†{"ñØ}D^¨é£µ„—bï0ÅâÄ) 1Å…„á«îî. eú„5§˜-#—¸Å‰ø ݿт2£sÂ`µÆˆ}»¤¢Jxš‡©aÐv=GkSedÇñc1q¨hÏ5[[OŸ¶0þ>鋊’cŽJ㛫—ïûD E£rRLa:9D¼}ÇŸ;øŽûv£Ð¡!\€D¾[‘J\›ã¹ ‘Ǥ€­¡g=„b*‡~±î1°ӿŠ÷n:ó³Ú;@ƒ60&>é]¶ C¨Õ €ÉÐN:÷a—•cÄÄ“¤n<©fŽj÷ÖÞ€pÙÃuâ}Á3¬èáïšÓçxfÈëÚTÚü”¤¢¶bSô…»¶?}ù›íZД4%5%  WŒ u2 °Ero>¦Õk|÷ š!”FW„ýW燸 Uœö¿e£edÀ5E^%…íhhñÿ,–4$œ`?_eLÖ0lè,1f­TýláELôúU[OaÖñm£²+øÌSë ½\MàòÕyðRÎ&§.™Çx^¯Üò'ÃÂír鬰ÝåùtQëàP7I¤»Æ#dÚn ^ÄÝÜ.R¥ê$Àïìô HÁèrãŸÑ·‹8œúä×=… Óÿ>Î,H•¹¥ð CA[+•Ó?Ò¾n~0—eìl±Ôu4£w´ærh\Y€Jt@ NÓºX­ b±ÿÿz°ð˜47?ê/’:O Ú‹*|ËÎUúU*gÁ;þÖ”Þ¢`_ÛU5?‰<ÙÑŠª²îOi¼ZmÓp/8æQ5ȧNW©}øâ0¦º.Høs'í€ZrÛÞܤÃê“lËïAƒw(›m6z{,S#Á Û×EÏ àþd(bPû>wAsÒÔ8!¸pûÈé9´ÓSõŠt³\ñ£¯jÉ Œ;õú¢ÆÐù²É`n‡haËò¨“3XâÔ~ÉîffA@™ºŽ öa8®R>â+# •æÖQØ2¹à!¿ÖQþ ígˆ” .Ž×ýºQ/C ¯x²ó3ÖѯÞlZnËÅú ¾}[§1ð@=÷ ƒ¹§>àù€µ®3HE^çT½ƒWÍ` äNM¿£{{pÍ?1þˆÉäIN]úÁÿUO=;^]ÉÄg¢xFap"ìðhî µ{è5Š(§úï¼¶û“gNÄK”X‡!e±‚,bÏÒf<›T‹[ÎK÷€äPJm l~’ƒè¦Ð{ñ6ÈìëÙú¹ ¡I³ÐtæeÓgœ?i:¬çÔh –5ù.3Ú¾XöÍ·…á,41C („56Ù oõÛÚHø:-×!jÏ&û¢±±‡H[i†¾mê^µ¡û†p~s»O%ïÁ=eU˜[Ò-YØz¨| 5ì+dA›:yà•Ùû°§—n7ñ14¸µã«¡„ŒÏ½zA§åìÆ ñ S¯í”£èúË=ùà y4Õ‚Qÿ“ø´›s#uµN]B()´1cˆ×?1®WÜ'HëÎ3@_KLñqexgĈþ˜n}³íÀÜÑ›€zÄç±ù4ªŽ|Ò4pœhROã…!JϘ­e‘pžÃƒMn;lIŽýÝT¦™³:ÚøøVÌú¦8è¥8L”U;„¤ @¸xc/ðŒuehÛ»Ú±ômâÓEs®Xðû”&×à¾ÇGl³«&£¸¾ Bî| ¸N cË”ìð«õÅN£•3oM+B–*—›÷Cºm0„)»—@s² ûØÃ-,+ðùH}K´wP·;ù5[=ý'»ñh ’*fâ8,U¾Žqêóm¼rqðdµC¿ÌØyÛætRÒ»ÇB0ØjX<òc€À¸Ž%:œlÅ6êÔèLÀEà¤ÀcñÞžIj8FIƒèãý1² ä•öáýYeàÆÛ.Ÿ(!O2rî¾Òs>µ‰¯m[2¦3•»Œt…x\66jÉh˜Ÿ¦1¦ˆÍ—Þ`X²•w{šîÂþ©:›¢tÚDò­pX§ˆ½õ•°4·—¢ównÂñ•fa¦™>á“Û>¾^cQÜüQÂoîrAÝxCÒÜMñ Ï’-å²Ô@5mÕ÷)]lŒCùrø ggY&ŒªÖÔÑ®X:AÌ SµP9Ëq'Úi³ Ê0Mzú ¦П ³¢–~fgŠøUšÇ¥4m±õKH<—)ÀãM´©B4Ñgö­rݪQ)õ–õÞ¶›6h)Ý5è>È i†Ò™m M˜…y$¿ . " °ú³²… ´…é2ìO,wö¦UfNer`_rÊ‚Ò8½Íê“};‚}&†z@: ä²¬õ{ˆ†MäiOÊ;j™=øjþü2Þ}hxù1?h¼™¹Ùì©pØOØ¢‹Å¹uÁÂRhafΕ¥7y(ˆ­ï§4¾©ü)@I£á+fB„‹«)ig¾²wž‰m]Å›“…ÕöÇwéÒÃÞž]g¹í|`ã1ò°*R«j`œGâ°lˆNZßÛ‘câNîÿÂ^Ó)WÇ_‹GóˆEq{>'OV… ‚VKv› €ïÖӹ闄‰iiùš…Á` šµGU®3ͯïUšZ,ÜdMLË-Á_‚ϰÝÝ£Yd‹½±ˆ;gßÕêzáqæz ‡ «ßâš â„Ù:`k3îë;>¹=¯«í2'ð, †‡øAZKºßaäϼ©cöÜÔÝÈî±P,´ ¹~I¬²¿îU‘ñáï Ú~Vîý”p7W÷F·ÿ·n&ßtBò±æ(Z»¢|ö´š"mxŽ>Ìix¢_zò»”ÍCkž²û»ÙOá•aaçéo;U6"îÃ@¯æÕR¦JÅKI^õÜ»Doˆ)ï‹ åôžJÁOç9× ¶¼ÄˆeŒ’íŒJoĬ†B\€™úÐeçßwš}<{†Ó†èy²6spFS î»I –´·V‰šÐÒ ³Ò‚•X·j¥WÀ°ó9IùäÞäGõæK1zWu}ŸÀ7‘Ä¡³§­êø™´‘ܾá¹ók±—Z¾HŒô³)5£È ÿ-ƶAmµ89_͉ñ oÑþ,½-懗3PäU²–øsz;æÀe79/IÕo;âO'ó‹pÈ~]Ré¶ù4ƒÉ(¬ÞTAšeØ0\ZÇìG\ŠâÁá\ùgŸy¹“#TyðØC}Ze‡…|×qéiyP(%Wyz–Ô®0XfuÊ®D€ÁênïÙX6èÅ› !(>t ïN·Œ­0­®k‘"Í–Î)¥Y—O*‚Ü×ç`’ö¢F?ÄmªŽ¬´ÍjsËN×Èü=‰àKQWlÔÙÚD³Æ÷ÄÎÀ=?|¯ø´½`‚ójüx~¿M}ŸS ð’ZS?ËZÐ2IhÙ¯{7àÅ`õˆÉ²ÃÞ1ò­IâUé½’Ë„h¶MyP(çùñ‚‡YXhÙ5¿n“Œbú–ej.®î\'5Ÿö±)òú£ªMt3@toýd†ïyÊ£P=wÞ+#ºæüÞ µLKÃþ—x4ã €w|Ê™ôºØ"NfÑ)OÃlðõÕÕщri|í¡°jôpUù¨7„ÎϽüߢœ]… Ò~–±F&¶¶†êÿÂDΩ†(+|–«èì^/wu"†âóÏÎu¢¦˜¼þ6‹=.ëBþ-êiß‚1²»ªçZXýD’€bX¸„8œ±àjw&è¬ï*é÷ŠêüV* qï6×TøØ,?EÂd¯»×¨æ‰ü包͹ço_tèk]OýDϨÖ&à6 ²JEÉêõPä•Z§Yâ­>ÕÊÈðçsØ„} 5JÞÀ®Ð6¨•ˆ,íSÓK/6y+" KîúÞÇÄÈà>Fî"¾ˆ²êlE3vV\ü¡ Ù€ŸX¿U°EÓó4/k¨«“ÒáZÍã)pBÔxЭF3x´a×&IÏdx³÷:1GÛNŒôÚÕF”• ஆ=óX^Ì¢×ú<’òI"°fð†wúŸe¬ÔÚêå¡Rïä;9ºÂ,ÄûÊZ&k?\óÉŹð€<„ìJÿìPG©¯·˜ ’q°gný‘K¶Aõ·ÞæÒH^“ÁˆO„òi+&Cfñåç*^ríÙé{±÷¿¡!âR¢[ׯ‡W޼2r¼€{zï)Ô‘¨ª³t Ž®DP·`4¡Hb—yµ CñÖC×5€\(µ³™˜§©A¿²ïå@Ôšaz.×S¯Û—AÆzƒÈé¶C½žè TÖî3ŠVxÎY ipg7ÀÂßFA”µ/‹¡<2.(Ÿ^“[¼#i.ð ŠãT®“§zÎC«Ç½ævúì„CÖÅ.Æl Åýèg ÿîË’·*SíyÇšu—2S½ Y$Ä•:?¸I—FÙŒ*ã°ß Ñã´Ñ1«HFÏÒ“*¾"C+£™q’/h|ÂE§†YGÊßàÄ÷‰QJÉnߨbi¸€tªíz Ÿƒ¹!à8Zœ,z¢p0-¬@GèøXíîÔ¨DЖ:…Ôø"ws¤Ð¦¸'3¬Ù Ñ oHÔÖ¯¼xâB‘=ÓkšW2Qžâa’W°xÂ9Ò/ÇÑe‘„u:b4‘åY]±܉³xV;ºñj-ûã|!&²ïf<ü7#‚¡Yî¾bë6ŸÉÙtÁ|›&oÒC^WÖN„¡˜ˆÙB_ ˆ^¥òRUMÿôl†å¬È›+í°9°6=Çõ÷²”P{~üЀÉ%saŒ‚r­s_ª¢Äדäå®Õxv–’,!”¿+Ã6ŸÞGzÌ%p-4²,ТäQaiû hâûÈà"pûÌê—U“ÁŸKYÞH¿q*ö|ÌÄÉÁªB"ØÀ|Dª ,\û´ï—F˜ ws‚™Â ŽN'–VÁ#bá(þ±`Òw¶q<¤àØÐÙßrD,ËVÙ¦A7¸d æLf €«Cö‘Az4`ÒøÎ˨Ãõ~PJ—76=ô­MSöFIâ°–ˆè•[»±„üvîñ7«?©y–h ŸC;€æÃè¡Æ="hƒi_þã±   œu‚“j0 ÈEóô%Ž|¦0H;Á—zŸj©Š‚€û¦+T›|Z¦¾RÃe¹ŸTc‡nG) ókPÿ…É´^Up]ØØÑ$öÇ|úS[ú×…NB[¹_!Vo6ûv¤öÌÈûP":UÉm¯ë¦VÙä-¾A’”"ÂSP²\l¤íï“„·çŒ»öœ²·hdsy :¨'rµ«·hÿ‚ô!p¹cr»:£R&ˆ±ØìÞ æ•){Ô<ê Ã¥m !Øã“¹»è"Ñ¿K ½¬–´£XËbèÿ?uœ*[^ —ºÊHšèQbÝG`Ý»¶m4q!kVD×ÂÇ,ô –3°™÷AÖ4Ê%’ÆÚ=]« ߎN —9ðÑä¬* .žvˆÓÜ ®ã¥.k~\½þ¾,¸Êö´@7eìœyµµö€ô”4+ÃÑR’q|ÙvKµ&Ö[ŠmežË%{ÝïÆápë 33}«]—ú„Ö½q¶H:…ˆ®æð·éWNÓ éšžrvgP{BÒ.–3°3ÕÞë·!Œno¸ª¼à|íV:Ùëd²š²è~W9{‰Ü5:¶ÐûA”ÝJ³¬ž8 þARò%‹ÅæÀæ4EßJÎÉhÕƒs†ô×V|Âb0ÜÛoÔwöïüë[M@¶Öt’»P ·ðJ&jCV,P¶¸ (錛÷6)„ί¹¢EK…,½Íy…~¹U7¬9Кhñ¬D}Y‡Œ7_×µ“¨£—œ´6ó ‰XA8€I«úéÉŪ¦¾h® ÂÝ.º´e:„qËYQ<³å\íð¯Íò‰\ÞòÂçGK" ᒯƈÅ9“üÎìžÿeXÌ<ø jeʃw•bÌ{³M,ÙwJÓö?†•67r:¦òÄßø8ÞÄÒ¤Úì×m… Nzþ¢Y+ä}…`Ì(1ïoJ®Ö-Üg#ñüý°RŠ9aôRvæÞ¹»«Õ^ŽýzÊd'_AÒnÉ8g™—ñü„SM^WZP‘ {‰ÆøƒdèËëvþ^îD‹¿Å ÄYß²X¨*cå!«1~ä¢AMwFI³YŒ‚Mmv`eß±/h µ^£cñrÔ- XfGÄÆ•e;6‰{Ýß(%y­Õ*l øZ6 ÉM©tË,¸ëÎH—šr¸1Š#^c\Õp™„×…ƒ¡Ïl@¤_Ýrã6iä“:ãžÉ ŠþÊdâ!&Òvq-Ö¥ãCEÙ¤A*4Ú®vËØóÄ‹–³LÓÈ8”—á«R&µ£ *£(Ñ 0o–’ˆ±É€ÆY}zS2K‡;Ž+Ib#¢¬¾1ßéO\pLKŸ`½Åý‡AW¬,àÅ ß¶PÇA¦C;Y$âr³bÆ2°&C¿ÏÖèãqð%V|h[ÈG¾É,æ(ËTTª“dCæWåæu Ê pýxòÁsU*NsÔÿGh{Käõ%~æwñôÓ ã|æ¢Rµ6Ùˆ:nÊ¡h˜ŽašÒZäí7¤Š±´1«pÝŸ:­NPfT(€bú²¢eÞ ±¯4a{€½èR¥BëNɤcæoÝCÆFéÝèk}»x^Õ=ïÍ-i³md—“OrPäˆf.+p½±lõ€‚Ä 2gÎbŒs6à°Ø,Û9 TTsgÙÄàªårIQ㧘¥€ÿ]e®©=ÎWÍ_<ÐOK\òÓ"÷?£&NÉòÞ®÷ÙꤋÓeMʉê'2ïŠÃ»Í`ÀFîÈù$˜ŸP–%xÅS<¯ÒØŽ»‘_¿Ð~ïM”Û¹I QŸåi¸Zr×=7£ õÏn¸bJFî'ö›‘Ò›3 ¬Í€;Pž'z;§ËNVRÒ' Nþ|¢V==Äæ„ÂËnÔü7Ù #/òZ¿êî¿ÎçÊ—RÞt >¸ú]ã&‰%äsõ%”¶È~;÷±‘l>»zbJbf ŠOþ½ŠšÈD5kjÃ)lü½á/q¹J‚YȈ°(Qs'y„ÄTw§ŠÓËm¼þ¯íÕ9´‚˜!'Û]€Ã´i;)ó9nSG9{Ȫ=X1Ø´ùðÅ`Ö…Úa(ý‡²þý'«[·ói­ír„•>R|?Ûâ3©ó•D–F¬,Ûmìö¹»!b D‘æšþÀÞ mþ!'|‰s²Z“sø8ÑiaŠlÉ6ç©Q“pPoÇŸ ê,¸¶QB ª6Û»-SkÖ N5¨.À;Wë‰5BWSQøí¶‡Ê΢«P&ºKåÎõxÝЗc{5¼PͳþÆ ê»•Åâ‹D,¸¡?šSU¦h]r#º'v[vœ<ù7ç >¼`!ú€Â¡òâ³ïµZÈ]C£ï½wåž+FZMÙ-òþ!ºâ_ã8Õªª6y®ª÷ñTJ4Aƒß;Žo£Hñµ`¼ÁñÀãªPµNfá|¶JÖŽ¬C!eöÝ‘ýõz,7/JWî£qÑ$‡{V»ò•žQe %ñh¾DV¼<Xh~¹KZÅd¦—+¸»±8‰xó®Ö9± @Š‘Ã༩Г° ðÏj£V°×«‰x N Ý‚7×rÙ윂ÆÉwtì0GMˆ°8ëW_þ Y—Ç*EB=2´†šï>½²&ÏFm¿¾MN—|ïö_b\íj†-5uÚÞÛÆÀázë’æ2µŒM왬ÝÐrY5H³ÔIém&r €ß‚ïçDTòѪ÷ÆËõ²­P©^´ÿï°ECÒKw¶ÞÀ÷Çå€É\ö›ÏM\zAdÆX áGË´§_pY·Ïü\¯þ¦Ý¤`£7ù§Ê÷Ó©›h¢®Ÿù|P¹ðe]kFûD0ýžµsOø¢Œ¯Z¢ õ9ż'ÞbäFnŸõÞµÖÛ=cB‘n•EmúÁh²EŒÑ3zÐ~²‚p “|UØ[‘µÞ(ǰ£ÁøÊõ‚uHaÄùɳ¬S˜˜C4óŒ7ƒõ4u„ˆÛ¹¬{ü N“åæn;ÐŒôÜžÔ#A¨ãmæš™šŸÊDæt?‘ÜË‘ÁM‹%ÒšO>Ý¥þY32U«VucÐú”‹;*XòßD‚ܲø¢Å÷)êš²$Ôúðm¨_hnó‰¹ÅÒóêèóË‚dåñÑKno ,§»ÑD8U¿Ûk÷%t4ù7¥ö¥Ç‰-iúãÖ¯Ž æ¼  _¯ÁÜ™À>ºîÔëý£æ–§*Úåµ.°_RbA6Gïs埣Á‰áÕ›Àr` ¤‡9ÿ•rÔÍ—#m$5Ø1{wܶHWã³øüLÔ*½Á…1õAßfŠ´û -§ÝËŒm€AMʶ¥s,ÕBa˜F Ïk¬cåJ6ÞZã•~+õ^c±»V,:üñ¸þ'yZuºø+{5’‹ƒ›¯››.*à+õœÃ3Gíœ]B+5‚Íö¤ «‡Ýyõ^LÏvQæˆD¡º³¶*-yw+®=f/ŠÛJÞZ4‘BÍu©ÒjÛ‹úNà.@}DŽ˜À«½¯™„Æ…pôÕÜ^°À=ø’½>Qô¿9ú¦?icü‡û5«ìF!æ‹Ó·P­Uƒ`8¡åöÒcogZ)àcü8IC€Ú59äòéAÝV"âôÕ“AÔÓðÒ*š4Q>gÅóvLg?‡Ò`DFlN©~üB_p‡ÚñˆKœ‹®ýÜz}iV¼¾[BµªÐ‡—y!ïÐ1'ºfŽÓ& îÓš’Ì០ŸÂ4Jo—ŠàÕÒãà(©ª#ý@fG=LFŽ1ÉÙ£« ?õe2 2ðødåqätBv [rH,ƒÖ4E…0—ˆ{æÒ²­üº‹†€”¥Ð¦›«|“KO™-B>0ájVýÒ¥g|o‘.Â.JK4Ë7I®gHûkALxöI%píÔ°ñSAâ&_Ü8a4}+\8‘»ÍY¤ä'üµ‰ ƒg^D8@y¥ŽS•S¢09X²‚Ž´QIJU½ZWVcýá4"µ»2ŽR>}šã­¨—4Ó-9ëÖÁʶËmQæ“oB·êEG_W@»cïr»7e‹(˜Ü_Š{¯îiCQ õ1³rx†3C廸Á ü1ðÄ>´ØÌܺïPË/­q­p¼˜0ƒÒEZzÏ0Êo )4#bíYŽIÓOA·mIãéÓs1j#Mk i‘R×4ˆÃÑiÁ?Ùç*ìm½‚ãlP9Å7WnŠŸ_MŠé\)‹áa ¹ÅFâÚ‰^ÓÔŽ„œø¬ëNp2äI-ð¦‘Wµá]R=)“µŽFÌ)z–®ÏôŒ9ð7édzL†Â‰Br¢süÃ%‰nÁ[3Yž’ƒO)ò’†; q<¼™7ÂÜ1@<ùÛ8gËÍífŒâ²Åjè£ÊŸ) ¹ˆ„S›×_~ZWx‡‰À)mÑûÉPò%Õ°:;(F¦â¬¹6Urz©…Ñ Ãù|¯²RîúJϧÌK@ÿÄ`ϰá"í…7ùg˜G†R&éš¶-6O ùŸü*åmà5 Æxù>.k'áƒ"”Œí΀+ø`&ië^¬ÿZ9/¶ "cõÝ”ìIÇYõ@®kà@º~‘eíÙ> ‘ÒDJ²OÇ|ÍmÆ)”÷Ö­ô«<Ã"¿®2¥—„à´kaŽ%}¾ŽÖçd•i’9N’dþ»¢ù !Ñø}ºýyµ~•“ЉßÉë,1¨¬ëþ‡1ÖÚ Ô««0ΪøÂãÊÍ|ª$Ü®€zï벓Îb H øs>?å5x<«€<3¢ "){!…Ù„Ûz©Ðí\~eÀd$a–U‰Ì˜Ò /;Ë(à¡ÿ •Ä¢¾2–Ñ-^÷ñÚTTc”Ÿ×kyÙ¡P%4ô EOžÞðÎ…Õ±€ñ7#~1©£°o­Û)R…³&Îôu 8|dºàÕ†mªNœ -û!!$&OU+Š;JŠFã1< y[·þ Ï^®¹¼ŠÿŒ%:^ÖjµâC”‚Ž å;>Ùžë_¯³MÜnbd¶ÞŠûмޤ;7'•yßgX ®¥†à (4”ʈ`ÁæaÔÓ³ ’æ¼×i Â… À#»½9óéLuÀoÄc.@úu–Ã(Å4}‡œäS›æ‘´‘øä6®êHTëÅ*0€ÏK‡sèqÞÅ;wÒ­¤HQ,È„zéÚäà„x*ö1o¡¬w•éÊNA8èßÏS7<~†CÌmy#U°¿ ã÷ZÜÄèì0Ÿ5÷|4ÜeÅD3êQà׸˯ґÑiM*.ÞŸòï·õ¦uOoÞî$:¾cÜ e‘h²F˜ÿ-hF»þ<-C†üIq!/ì1‚(Öv îø[”âc3hÚ!SŽÎ7J/ˆÅÍÙïóM>ÍS0ZÏò4òg nÑ| ^}\tá€5×çŒx±²Áë 65Âò^K9ôÇûÖhÂEewèÝQFÑY²¾áY½žM+cT»šl{ÒVcÂÌÖVó^iµÝ¿éqíšá î¥×ìôŠ'¯÷ñß&6f­Š¸+„Se4…äD@¨;0dh¥±&R–çJšŸgÆ+ù‰»ëÖ8 Y6 *ÿóë ݪ¹-YÊíÝ´ÄRWÕé¬XÝ[ °.§HpR¯NÖ§&ù<§/EÍ¿€ÿJ=/ÂÐ0G]­o,ª­;ßOä…žŸ&í³ÿ]0ÜWÞ~@A¤RµR§)z/|Á^Ùè¯ð#ÛHæ+Uç¾kÜf›NÈ…Œ‡/¤ÇÀ¢¼\H”KU™§á—Nå&ygωrþíφÚ&縓¬ ÐêˆNÿÏìÅîþðúŽž±E¦}ƒ‰H8’8”¢‘OLRºº¬2ª¯õû½>OA4põ„uëÇPZÃW=½;\˜JHùÛ½ O¯žŽs×!*û‹rÿüS³†Ù¸œ}ý„ L¾dé.žr¬8æÒÒÓ2„ÝRÃõ?P¹qU¼é'FhLj#ıÿ™\ã¬ÝÈa°Ës&j6²æüf<ý‰{uÿtU{ÎkôJ!‹cçBeq©YŽ|R¶jÓ2×0ôT8òûSw,@PTÙ›B\E×ôÆ3¢8ÛÆŠ®ˆŸ{væ$ŽdãhX,!ù{Wên[Ž!Zx=À -{5yXÏcظor¬­5éb`gªøEÃݨ(Wøu ÑQq.BŸ‹ðB¶Û'öœŽ«ЊGüDT€ŽÎÆÓ¼MH›>àg†²JÐaQØâ!1â‡s+sÚgKNPj‰“´s-=Î#dØâsÛgs˜ÙT“üõ>[é9}Þ/·oßFa¡¿0E£F­«²~lUŽm'aÀê¬;ý\{VÓOÎÉy¤Ö¹|c?ÿë¬ið&S˜|á*Æ­ @8ylžæÛ/¶çì‹P+æN÷ÁÏ:ÃÆ†cDM´T•…ÞnÓ‡Oë×w~C©®dîHïc†Á`¨Þ/ñùªëAÁOè,²ë-ן֛! ÍdŒ[›ÄíRu“_ ml“E{~Ķ5d¤V\Kê­‰sÂÇÑ(ÆÏ6V÷p#¤ ¾`Žé*Ýa*)^íèTAƒó8£õaùD«2¥ÖfìQ§½ÆYŽ_5 9ÛÅóø+ñI1»l°îøÚ JíÎ(2+: ´§A˜\Ëü¯W‡º±{nKj¯™ìh=ƒ'6Ó¥B/Iê8V%榵ƒµ†ì”Ë—K{ÝÞCÉ+¦±wj•þ¤–Øf[rÜ ä-sµ¿XÜ?|dÔ# –/Ë[ΔâµçÆbÁ¹1oYuCœ‡Ãv‘M“ì70xgòÖœXF›¨ó<ͻԗ¬–•Ü|Ô“X¥)Ú†3Dà{.ïݱÑ#ƒ‰±a0s^bÝ«&Y7˜×±ÞØÂ|ˆp*Ëko²íÁÁæ]pv(üæ²®ë7‘ÜO[2?—’ S :wýa…À':´Rè¤Ê0"~_—Á‡s4ýßüP®Î|'™š3…Þ×ÚJ*þ¿špw«c-ÚS!÷8óq(K·æQ<¹Á½Ò¯®òü¸D"‡ÝBá…œ˜Ó€ñc­Ê¶ã„ãºäBLBU¤¡ºd %Ü:uÓF’óNkk ^/+ÄD$qÏp—ŸÎiOÅͼ¿ÒŒ¼¢zú϶h€GfÉñˆµê4ÅVo,b9úö«9C­†¥/v"9:Z[gëcŒ˜ÎvbïØergRš“'”eX¶s>gj§¥>­zOôâĦuðïbͰ2ar6JNòl•ä%mûµ(Sk× QÄ¿H·IOâ蹯Q^A0Kܪûœ™`‡žþ¾ü²ùD…p@ôTMƒ¤ß2Åtó›éíç(Il®  x `{3Zî{’3ž@ªg+Ä—2m_ö¤\»d¤V?rÝpRjLr¦¢ü.Xûyˆåúp3ã&¤(Úf*ÕòÚÀ¾!ýÀžˆ˜Þ£^¤»¸;!ÿñ1IDuM&- êÑ/Œ¦ µÚ•š 4.Mžá„T[…ñ¶|-ýdêÍÁ˜h‹“Ô× ù= ä’ªÙ…†Íôv$† ØZÆ.P×Ì@9%w»¤Ì¯â¤6+2|KWà}† ²~ð#ÓÞÙhÇ{D–î!YîuI®³84ä߃Uk ÷ç¸ áÖ.eî~¶MJ^º|ª¨P'~Жp„ODä(ö|Ž»¢…ùú•%‹o5ÑnÓ7Dó'XkߨžAÇå²²…ÀOò &Èÿasÿ?ÊoþÉ«ìW0µ^3T¦¢Óœ‚tZW?†Œ+ °þ²øù!0º *ÿ¤Mßg"ifñ³ð`(i†±Z¿(ÈË_QãhíÏÖYi¿&eèÿ2íûYàâZ¿ÈtTäÈŽÚÒ{Þ°®„˜Jÿó'o&_²tÌr¤VÑóÍ›îÙò¶(ûkWF˜uŒ ŽBŠwàûA¹DSBèz‰ p-/F°ƒAãÆ]V.×*su“"S<ÎJî¬ÜûïR•Ñß¶Eo ¥Ö!%)¸j÷P÷Â:KÂiÐ;,t6-ƒ•U7ï–<9F‹oA¥¾úˆîq*9d¿RIîë8<ïöƳ’TK…‹ÍbÞZyÆ/£j¾œéè**HkN-ú@ƒFX¥"qZð!,´þ9nÇ#y”iQ™±›õdIf&©a—E-×ÚíòÄ«Ût/½®¼ ¢Bº>«BØ“|ÍÐì ÚùˆÐ ŠjÒ¸01RºŒ {—급Ýt÷ ‘7×÷MÔ°/2Ç(õ¶€!¹æ™Ìq†@Â"¡u2ÀÞèùpP w"Ú'¥A¼;"3†€a阿”­òG^0Hß5_£ÞKÎUhÝ VHËè Æ× ¨¦Ø±š‡|×P?¹@¢4(p—Då]U”Ñ–€Ô{ ë†Ü˜êÓÛÇv„‚í„ÓF6€%fl-´E·b-ŽwR¾UQUoÁ°ÐÙ¸D&õ؀§Í”ŸKu¡®çP=h™rPÖ³K˜Òcµà>ù0.èÀÒkŠgºÓD.¾*úFƒ‹Úa'é]÷@äC\å$xz9ýÍèq^‹£ä‘Ëzòt„‰æn´!pN—ÿÛNwБJ„´)_2Oiú!*'/ÂPq$ãAý¯ùc˜Ï›ÁÏ-‰Ä¢:Ûk•W×íf³•­}½tYA®»’¿ÃçŠè¾ŸÁ•^WÛ7©oÀ¤0IEÞ£× Ôí/\EiAÉ7â ¦±È‚1A‰Øgôm tbѯº‚=ªö>(ÎSyP^`#ýVèýT4¿L SœâL×Wò˜j 8OeC±q è—ñ–/©9SÇÊÜöÃ1DZ½Z‘P¬ÍŽã‚¿€ÕŸa¨ R9”Ï5W^8»Ð‹u»™…çŒüßÀ XØÖü¼žßT‘@žNs¤A)o³[g°ó º…V¬`8¡J¹”°(y¡?nù'?ñe¡|}áT#ñàüžR…ª$ÐÚV#Õxf´©i?!ÿ}1EŽ);ç!äëê },)w ã^øþu} ~L¾G ÛB7$£’ GX%:ƒÛÜÉ+]ÃÄ<ŹRD~™ÚS$“•™ HixM§ÓáõOÖ¥BÁɤþ¢-…ÝUF €âÿö¨š)bŠ’™åmc¹ÿ¯¢›ÀY9+~?Ø'Íeš‰“”pRÿ\MìÜ׎¼5•yë ÛÀ»Öï²cÎe¿‘Òßïarùбìù|S èJôùÚ£@j–½NR'Q¶°ß7#( _ç¨d9Ä61©–‡À_°¬Ï±%õåÒaÌ8Çä@ô 6]FõíC %-írkH¬ðAàNKºÁ2¢³Ts¾ùD#ÆûQ­!ÀÀíÆìÉÅY­³¿C.ôoáÄE}ܺÉÛ…b_BñÀÏ„¨/j(Q*X+'?2úý8Óíа’³ëÐÊE¥€ÀZ,h9Uq3Иú8Çl€W-qŸXTbÊZ=î”tgì‘J˪êXjý*aå cX ÅÒöÚ±ÃWãepÔ6´kÂÔÞ¶þ~}Š”Âîqíbƒ['1H¶ÒKÉìРôø&T žo…=ÚÏT8‰xU:ÿ»J°çû¨‡;’ 5ƒÈ)Z`û h/ù§ ~`l˜õ&C®ÜbB©O°K{¸ÁMoç§Ãçæ©ÿIxÀv®Ï#}^Èñâ‡%ŒÈØo}½®kSGŽDëT%ÝñLfƒ®þͳ$Üïn\ï§Ÿáåk´z`v=Jަ_XTæÄù§Ò>ØV“Í&¹d‡õ_{¦{^%š -B¦N¾¯×d;.)óÛŒ˜Â¯ðŸ)ˇó€×”æ¤ß››ïãô ø8›ðóð»?m+é­å¨Ü,D(o‰éÐ"ªf2¡cž GGL~‰>·ßwÇG²:*#(4–+àñ‚^†6Ç#î¢ÂŠ® G_C™Å"nƒÓ)ÏQNƒÁ{FÍNQÑÕc¨ÛÕC,Ó-úu¼Aëj•þoBãÇ—á á;a@› lSl)-þÜ0ÎVã‹a) Ye[pÓýqT_*ÓÊ}ûÀ°Ïš,®¿p—£Üd¦ˆ›ï„!§/—‚}™nV=2[íÆBÒbÔÖ9¨v=îfCÃ~5!H«™âPZÇñ‰õ‚´ÕŒS),©dµï˜šg·²EqÄf¯–õ{è5kjs¤"{¡¤9ÈÔ…Ÿçb “ÜÀ«óÜ4S.Í(¬îd)69…(;0°Š¡oÖcǃÍóª¾ø§—&½žY HVÓ¾Ýà áKÀÔ‘ÿ›'%?›^B–MΤ³O+tĵ®nE…©™£%c³í•×6i‰qßÓÜl%™-05IÅ!ÔBØl”i›pênû¼á(ò´¿Ã‹}©s›É„\uÍÂT*#%MŠc4ø_¯µuC™¾¼’‹ÓQ\òþW=%Þ›DqÌô¨Ý@ZuDÉ“ ”Ѿ(1䂬„*Cr±Ê[·(ë.ö™qZ߯kÈPÚÒõxÜtrÌ»ÎÒÙCŽë„7æ¶^ð-'Uu3­.z lÁ4UIg[0<º¯ so ­Ô¬@bÒÁO±jÛ] N¢Þ¯<V’éªQñS°®)|ùI ¯`¤›OËvðëŠý ¦‚z—’`´šQì+•¡?Žh±ÜÖ³JÌ›­ß|dëÍä‚>ƒVÓø˜œ™W8¢[ýà‘GžÚõw¤*æMÿ¾pÍàoæË“û%½ãx,³~­öQyªË?ךJíáZ][v£Uß³-<ñèòVIø“´`$rµ¹}|Q‘éZ÷®ìù_ÉRç0c\üRÁ¼¡!÷ªüÖÉݨ²—¾]#s´f-|<©^†·%„&iîƒ×€”â·aЫX^‡2¬ÎQrWX­C‚×NÊL]éføïœË·›¹ÜÝØ¸»œS¿ÿ^QØÆá§ êÇj'¾ûµäiý¼H1éZ‹ñœÛ&†.)üÖà2j2`.Dt ®ÿ©Ë#-B-ß¶ë̃¨q“Bwn ¯xÎÃÐÉ;“sXl¡[ÏÚ¸µ¹eà¯íÁLyÛ€Âå¥ÃóÊuxàðëéšSqÇÓtßOƒÈ݇¨Ëm$Ú“ã Eæ.Å4*`›ƒí¨‚±>t‘¥?•]?D ‹àc.Is3½ë¬¼òPË´tž‡¨Ñiü›™xkó9y¶ýÿ“x±]¨¿&> â_ä Pá§tg÷…œ—f[%‘‹¸Þ]YÛ9[uUqª¢ž]¯í”óØû\GôË•¿žn;ȦTÛxX^šdÔweAĽœà̼sÄÔ²\ÃA\c)Ÿ· †“šûÀß¶˜®„=OÒQY&ºí àO" ‹Bh‰tlP‡¡·¥ÖÔD,Ž«|q¥HO&¸#¦áîiTèo=µñÀ³5mîÑz@ƒdÑͶ~›’—,ç予@Ö/-€)çAfôÿŸfÌ EǤþX?iB.• nçØ®ó«aú``n Da.å¿Ü ¥jìëõÄè·~í%¨íüñ=ïÔÎ;÷…6añÄøæâöoÙóM}pþüÞ!'É å§VL³ƒ†(NJÍÚ÷c;jÉ ]n­)„JZòùëò¦çÝ â‰B)¿Ñ¿ã±B[7ùÙÌ…0¶ÆõÍ©¯Xs±ê=÷B¶þð¦ë¨VPÜ y¤„“ãÛºm×ãíÞ2ÆØ›rz#ÅMÇ¥Þî‘SÌú‹7W•V æbÒ%gŽßœç‡ÂÀ!0µûG7¼×5Oظ©OØ3×/Ú[G.TM^éÑ5~3+<ö“™B˜zÀ—corS €~MºïBˆ¾žCÖ›rÆ™²nŽ‹búp÷Ìéä ©7P¬À‚Q‹ÁåhHLÔ1æê¼ªÞA#êêwSBQL‡a˜âS“sˆ¼É.sPR–Ê3dª[1º ¶Oq½ÁeP9ÆrL±oÉòûjlÕrE„^EùµŽ¿Ãef‹Lu¿sèLà`›ùô¸]´êªÆÖ‡…ï<ò­òAfKÁT}Zt®Ð…Ö‚®àÝ?µö­óI¿K;oº‡æñ+δúÓkÝ]ËÚ=UÖBLX«úéÕT‰kÉD](šà7àãîÙ“™ŸÄïøXn]Ì.Jåݯ”u‹£L:ï4Í£ôà 3ø-•®Ÿ4 ^G ïch–Ñn@äuãËýL ï"é>¶”#}»y%?ʈw 4¥YÒo{Zš‰¦?¶Åƒú¨þó±B²ÝU1ç5óZÁ?×–—çKÁ¿ƒ1Â#sŒ1DµÑ™³Øæ ”¶Eî?ôkužq«}Ï\,èÒ6H­]j±Ï`©+UD\ÁÕŠúG¥™ï¸ $|Ÿ¿1}‰hoµÀp†qðlÛƒ×þ<ûí,‡[l%%àC°Ù‚Šmë6!{)¾#ê«ô5(;}H–lm¹ïÜQ­,$±¯L ~ÎÀ:4ÌÒ‘ÒøX” û£pG ¥²ì¦â|¹ÙuÓ*~”ï_Ç‹Šëò:r(½N±½í©Á‚|_6ñK‡m”‹ËEŒÍN1 ßIóÅjñz@:’°ëÒ`©Nsdž` ðéÉކx¬¾r¯´ä‡(#Œ)Ä2­ß®ÝŸZ;ÄÐú£n·kB÷ºÙ#u \—5wIÒN–ˆuÃsreÚ,tœ|Ù31ÿ0[ÿÚ¾¿ÓêUóQiJìk¾=¯JŸñÍçÌ`ܱ`ÛôÒG%å͇ÐÛå¸c4}!¯sîï /An7²D[$·ýê®,¯NEíè»RÐ8£Vέ—f+™K’Ð_`ÐMQ—}‡Ú ½p<³#‚én”Qã$U”&9Y6—?DMo·t2£Viª¦‰Ç %9ÝÈf@Õ„g|w¹ÂÊ~Ÿ†ƒz:&DþˆÒWføh@q˜ä†‹F .c˜-™eFº j5²eì6®;ôLÿiZâ5¼”MïÐÇòý£éõAùòß8!a,ðd\XZ™åœµOHï‹¢4ó8~çQ*<*¦qkvYGÓ_Í$÷ïÝ"_ÓÙ"‚&ôf58áIj¤wd5}eÂ(îvur‘@šîÀÓÙ™dìtÒaÌžËêÍußÛEŸÍÚ¦–ê95eèÀYÌ[YM¬ Åïòãóóq‚ô‹µô…~ö])ÈôŠ»Lû4]Šô˜ a홺ñ×$KÒ•ô;Kd8¨A\{3G¾,]vÌÿ43xO"SsUžœ!Þ{ö’‰^zòäürB’ÛàVßÞ¯ÞÊ|·u ‰}ÊXÍFÌv»ž¢#mz¯Ð9Ø–h/–uá”Â"gE÷âè87ü#HxõˆÒÅð•ݽ¥Å\po&ö‹W˜¿eE²JÊʧ7…QID'YdÅØPp¡@±1H¸óRij¸Jk™ÎŽ|ˆþ\t–šÉS?Þjy-QoûFwº÷Ê?ŽéÂLâÞ1¢õu0hac08"ÛšHãèùÏ儸#&…?ƒÏ?^Ý’ÞL_.7¤tH¦ °Ë3y@…¼gŸ`ßMþ…9šw°k%5žèAA&½ÐÀ€5ÂÇÎZ¬ÝÛJd7nñ·…g8Z'Ì—¯pÙ”$(G.{ïp÷-^Kp+á¤: @³®„FÑÿ»»ÎDçr`_̪Ûç¹±jŽŸYZǬ’(ÿ60‰ÙçâÙ¸šò’»§òâ² ì<ÇÕózbZM‹oñ¿•xûá|Â.v4ƒp‹+ðHù¹åÜ5#3#äî¿z˜Q†ÉË®êû†D˜8j¦ÖT6¥YÒo{Zš‰Úãä˜ñr÷«v¸pxØùÝ«[þÝ|ãüÖü\4\w4¸šP…Yü§{+å¨Åæòdu ²}gÅ€zCÌŽ„hwÃ-+4OùqÊ0ÄŽEªsXÅg4÷.+ {<Ì6ÏÙK†Ì(ÅÊP8ÞÞà|qì‹õ)m¶ê¼ë+/[—!¡ÀOµÉ×¢­5äOj|p6L ËŠ´”“€fz}ïºÀX!HÚ‡Ó{WÓ…"ìoÓ9ºgã¤j>þ–šM)ñ­5g½}ç¡cÜŠÄè‡ûá=Ä&šî % *ZçÞž¬&),-JÿG`2¸¼‡ía6GµÕ¯è²Ý­|~Ê®™ xRï€Z[ûþisšCFG·j¯ÔÇLGÏV)W\ûkLæf8ߣ”Ž,¹lª’oÙDoáÜw°,õåϾø˜+*Ê^1µ/Ÿý~§KFßZˆ¼#Ë€€p*ß±EFÕC5Š(Z„ØE³zW‰tÎu \$~§í%ñp¢ÁO£hÖBE%}:YÃî¸úw à Æsø ÕÜâ¯)Åagfë¶¢¥ņvƒ!,ÂO’²Äº2H'eiö°2휬6Þ”p»CÞÙ´ñP—5Óß;GÕú]ðn °”Š®š‚W&~ë{²ü6Ïp1â*^]þÛ¥ò4 ùÍYZlqͪ–9(’õiˆNVåN›—B¼Þû »˜A#à!_Ý_D7Ÿ”*ï7O¹¼ÍHÚ6{ÊAÓ”UDHPª^ŸSXœ&R¤sãêÙ ŸÝÔq{zæË”É ®´–ØðÑš¬rõÁ HowŽ+dîî–óá|Áz$¸üßÄc7ÌX× ”Ú1~ÊØ È]0ÿÝ,”uµí¼?>'X0«½uÏðÉ+Ö9`oîjƒî¾+cròÖ]¦P;Óf϶ƒhütX‰úPB»°Nò¿O¿ô„#1™4„ʦ•¡¦S•ˆ¢>u1F@À« –‡Ä]øû¥IœG¯»»x5㉥A‹HI}š¸­Öâø¬ýn…TXuËî“*jÚÃWAá'†‡vÑBè/È F.c 2ÂwF¨ïÅ`bÃEu÷TYÝL¶‘Ý¿„=fxÁÉZºß-¸ý  ÊÜhå~@ÚNzëÒ‚úU­/Lí‹$N‹ƒCïE¯2. Ø®O~žZ»žžù¿N—)·1oŠ$k/)âeê™[2ŒžÝ…øYpaX›£ÏB>[4± 8…¦û,•,ÄäHbÿe½7P…\‚ÙÇ4š¬#bëHN¥»æœõF{¿—WýPÐSœE]> ®¶Y‰ »4ŸœÂli€Ý2Èy¹ÕŒ<Ïrˆá¢‰X=É‘€@a•ú3÷¾R „KªÚ2=¹ ¬º/}¼÷bœù°eHæ’ý礽&¸³¹•{ÎÈî­Ð®.¼îµÕ¬·J ®¬?y"ƒ™Ó /€Íò€Êt‘‰nŽï"éÚ›ÛµÖL¬­æ@>ÔDW¤0‡Âä÷®ÿk;Ú› î÷ 2Zgá3mÛb¡°“×¥· ö©YE²ŠW¥á@ÓÇßÁÂ{-5è“F$nÃoE;Á; ¿">µx ¯bt­°¸„2w«Ö,ßú]~‘ƒ†‰œêÍá} Ñ‘ÂYMO#%þ›1¼‰*(ÝcÝüZÔ8·5㦃ÇÌ(¥~dL¹äWænn\ö¶¦UܸÔ&µ+KŒ)Mâ|Y¿IVGÀ{qáYÂŽ@Š“ŽÎöÕٓ’¾¶ò<}BÕHúÃÿ&¡»>ƒD.Ïë€G~á݉дÇC‰mF!å6þôÆîÆoØu³Å;Cì…oûp Õ9Y|lmHo'!Ù¿#û䲯]ïÇS¨}POÕ¼@¤-—‡ ¹´×o*/ìa^Á£Ž†è|¹Ö_ZzÂÚÁî_ÿË7YR‰¯ïéä°#ˆ+s‘8CÝ`ý#R™2häkèà#ÿŸTŠ—?cRìô—Àáb1€ìÈ9¥az.×S¯Û—gÂã-"ÓsKÜ€NoE,{ÚN*™ƒ°I¬7³l¸zŒ•»Euö²½„¾ÀF%|¬k]öªœ,Ï Â1ó©}‰`[Š~c@0ÞÍD“¢PîÔ$+[­Šï‘Ú$^©öLJ{Vú&Jež8ï±Ö=ü¼"«R—V—1öin̤•dA"DÀ0tÅpFÿR‰ª«Š|Ã>˜ÚñÁȶT¡í\'…XŸ6~x!â 9Û-S¶ÃÌ£åÎ<Áœuœ´&E#ª¿œýTó@®©ä)°pgRœ§Š.dÞtYµ ޼ÙoÀQùÍgÑæïR&9^™"Ò¢˜a˜¥ux0ÖìGQNXu2Ã4^[uèh¼XÃ3­¹°nÎÂo?ÓùE?˜ÿŒQ{9¤ˆC;¢¾.ôÉó³ŸP òÜ6ñ@£É=cQ˜Jv†ÄØTèàéF¬Öz´„ä…Ä5:IÝ'/ð”~‰V@ãß{‹ÿ8º(«Žõ’Ÿð­C×ð«s àºTË—n»FB„v_ô\v¼ÔF4þWŃ£‘.{Çå±kЗ]ÏVQ݃uë^!‚ó-ÍÃÝ#mwëc )µûòÞ DRrËþ¯¡6¸Ú×Mè )Œš.ázòÆž.1ÄQŠšdîó…,¦F=F·,cŒºô…7…)Án¾#r$U@Û\º¥Ë@ÕÝ<Î&)C˜Ç@·‰Z㊯ulû®Õ%KTÔ>ªrnV Š{ì‹¢1Þ-[Ú¦¦Aáˆv»G2ñ6pv牚ӾD²'íx¨7[WC¨ˆô÷OZtXfh¾l`ʹkÀ|\ÖYZâ@Õ9­Ïå¸!LŒ.ßã(96àÞ } âuM ÕâdÊv¨ì\ŸaVS¸”¥dÖ7‹ŸÈY~´™Š^Ú©çõDt´‰ýÆ· Z.L^Ôt/þݼµé>årÆÆÁãÒ[NW·D¼Õ-ù7p*ví~Ç:•úC|¤… Ö€y±+ä«ïe Û|¿É훸^bèÁ°ñãôäDá\µà‚ôâ”Ïdˆµµ˜¡Á®·çüŸ»w(…}ÒÂÈpz¡õáV® oÉÐ.2ñë@¿o»Ÿµç½"•KÝ·ÿxñX®ûœ'ÿötí£É=Fšno›ƒh´ýòŒ^Ð·Õ ´[póŠ•?Ízü h|>`!¤Ë³’’cwÆ;TtÄä(h/ûŽD“b uàÀ)Þ>ÏÄ©öK®Ÿæåþ?OF€úÜÌ~ËÒȱ“;Ü¥u3¨HPz¸ /„÷²y3¿ä¹»U©ª‘ó ‹²x sbšRq2Ò ÍN”2(jeìxdôŽ¢jïÜUÔ;ÙlRl.tÚgÂ3&\êxVÌÐ鳫‹ËhwÏõD@^ ̧c*€¢fÒø9ÍNüd# \Ç$U[ÜMlCV^~Ïviú¦3DQ|"YÏžÈ+ox!¯ký¨Í:ÜØQüu ®pÄ]†0~Þ&räŽZöÏ üãD¯-â-™MÁ½g”z&Ý »V:Ùëd²ÚJU¯¾ hW5›ÚÁÒd°ùÅŠiœ*[È6v‹Vޝ¥«T`>H÷ öý§–UëÕx½Ý<ðô‰n¬ø‡²ög[»Ã:¬¤håÈ›žnÊæ{ ”{5V•+5Vž{®xEWå+0{®’Ò@2oð\ƒY¨cíGÔZ®;%÷ åIðY¿`,dCêØ’.% õ”P}ïd·àiY˜†çs ÍBH±Z”)uŸ¬Ê}$è„Å×R…è‘nýߥØ6mY>Aá–é•]jŸÕÑí=ïŒÒ«ÐDӿرÜUn­ŠY\³ _Ï0õAV²”/üZ×âžD85ˆÄ]tº·ã '×-½\Â-=û1ºn˜Éy×@ °›I³­÷)½ØâÙÿÏ<Ϻy ö¦Þ§D/1Æ4{!I˜Âç¬s)UÖ ªV™« ù^A±íc r“ë ¤`¨_qL9À®˜qj¿›¿£°´rY`ù<ÿ=pÛ×ã6¡J —`LZ0ù‹LÆÔžî{h†Çaól[غa¹(ùaîaÅ:î‘ÖÜw3`òf¶ D*ÓwÔnÂ+œ} µÿѰ«Ö”{c¼íøÓy¤¦Ë„dû¢†p°™Ä*뀅€>ëà6¿Nì¹’¼Ývš½šP°¹ßéÇ)Ì8…?Ù!s¥N“£~¬RKLôËàSë~8ªc©ÍQÞp {ŒQÀ2÷ß°Õñ¶8.oOBÕÛ=¸°ë"ŽOM+µ½U&¬.ËL£Ývû$$.Úê¦ØVEÈKƒ²qfñMy„p«Âíæj¯\- íQ_‰±ú Ç}êÚ+èñž?eUKaÞ Ìx9 <ËlMU04=d$¢°1U3ùÍ‘™G}~òZ4š¸´P§ƒ‘‘Ã}ù•Òß­½ ¥:^Œý-ÁÑG"P=ýÓ ×ëû<åMó~Ü€œ³çÕò¶ÕŽô/ú·q¢½ŒþHàj}ödó þ¾ðt†Zo1cÆÁI[éïh¤£Åî©Þ÷%ÁþÍœù}·#ß íZ,;Y!¾¢ø 4ò%ø@ËjZAnå6xÖÀPsfØ öÆÆ ~CvlmP½uœ~ág‡û8 ö»-Íõ惙þîL¤‰C¯}wöøák‚˜{5É/žÖ\þZ׿£¤ XHXnÚ~óîÓC_:¾Ž|z‹Fh=«pŸ¤þ7PJd]Áæ~£8åe –!ji S€?mÒr<'ˆã@ºá†5 tÊ÷@«w6¿騙p»Òë5§¡Ú„bzÜî"Á mü¨<5]"O)ã:·‘fOš5ù]¯A¤ü‡%¡HâÚ«Ù¼æÂÑœÑvÂŽbpÖ­óº¾Oú}/"”›õòûtwZ|9få>Þ;_ W|ï)» .²ªx†ZC°.±¶šªXÍ7Á¶ÃŠ­"Péùü¬1©Vİ`!:íŸ_«¸j¥¾®ÈÆN³ ‚‰Ù@µ·ÚÓÊʱ›LG×záCÀÎtòŠÐ^\—~*Â)dvü ‹åú¦~‘´¤'!Äb+»èè¶u[ëSp[×—wºØ„ž??~€’ÓHz´œõ7%mQóØYtÕÚ¯5BM»°ˆÆçÉ)é=ŠS¹Gc‚÷zëöñ•¾Å&Ýw@äŠ6®ì® C+3Áy¾ééQr\Êq Êâ$wî·Òµqœm¿¤„·¬IéwЍîaM¶–ùº“%Tf©eÓfù§ˆ1%Löµoµ ŒÖýâÙf©ÂÊ|ûõØç*ƒÏÄLË›Ž)×ËôÃPÙÒŽDÍ)k~ÖÒ (høÉ …oÍ}zVÀ¿íâÀÝRgr"? \¹;Óø7òpîØjä¾HT3Ña+”ô†ßV5G°Èƒõ4u„ˆÛ—CЍfÔNý‡P³tèrK\++ù‡’hVKi 5 Y)òô1KgbôZÁ‰dòdo‡¹Ä¸‰óãû3P×El6|ÿlE4‹Úf¯ê™šKb4*˜ƒÅxå;ëÖÅpà½ýiÉ%íÞóB\x9™€Ç"t_æã¦þ'ïìQž«›¹ÙuÌ K³8§}®1Öe\8EØ Ò`OIZ³ŒaÃV}‡Æ°œæ+‰ÒWƒ= o|Áó/s¤ößéhKçî|qb-’½ï×PÌa§»’î„¥¡Ó÷ê|wȱ;çtD®¾ó²Ö¸¯œƒÖUuÏû„­ÅÆ©òÑׄ`MºUqt ïÊxž2’¨ÿÞ^Exd¥ª¡Ê|·9Ï"û@'Ý9ª`ùpdÚ]zÃ~;í½kÓq÷ÞgCзg¾üe¸~5Ã`üÎpä„ê„V5Öò£Ðˆ¶fÅNÜ  í6 àÛ+”Nðú>ê0Ié²@k³Ž…ùŠ…\çú| E6ñrÁ¯  túýëÖþ)¼Hð)ŽôÓT®cY’…Ò1YWô" ¶«>ÂgsY¾œ–Rz0j>+_hŽL-¹t8ÿ 9«çoFå#¨Õ<°ZÄ•XöT–¬.dưú©Ó3¯Ö<ý/mâñÕÄÖñ4ãbWÛþ<@ì2@‹aìúÊr¦ÈƒkÆØÉÀP¸ó‡pj=ZlI ÖÜnðú·ÉM\ñãŒKÔSeËÑI³ ètH±ŸÎdN\Ñ’èÊ} öÝ _®þÅ÷uM"ó¶htž»¯Tŋ؉qEænÃÁ¥ÄQ»iÇUDdœ7Û–éÉR'˜·{–m¥j”Ó²1"¹é8O׈|IQ”ÙšÛ/‹Ÿm#ׯ…{à’ÒÖHC°îõ’C˜¸‹U¨ƒãŽ[#YÄ’×ݧæs4$Ýi‘îZ¨©ú¬¥XBt:•.1½„Ï&'#eŒäø§m¼Oâê} @£”p{œÆMÒQÄI²´¦iAfœ­¦²90Ä7 —©MÜÇ â·¡k¤7hÌ}´T>}ž®Ê@ÎMŒÁøH·V§ ˆêU¢]‚¤{:ϬJf,|Ï®$vVx6Ê XE±ÌEpexsûÈœJ*’f¸€é¨Áˆêû÷L»^uÐj™ ´;‘WÐl©+ú#¡!žÓŒšõÔëÕã,R_¯.Yr÷NÒ I¹J[¢‘QÞ{ý´Š|DZÙÙ§>ó+yªMÛuå0J%ƒçÙ–ÔPŽÊ€ —®‡ÅÔJõqnIºTÜ@ÿÇÁŠüµ–‹Ty– ±FÊ… Kï©xÿ{”ØZ+SÛgó>Õù`R˜Poé#[4ý©ñ÷|¹ý²]ÇîQ+½já M);ÐH_1Âòó)Š•H¯zÞ±‚Ãu!éšïÑhaeìõ-AÃ'$f+û±L Ê¢dë&‰)7èÍÂ0÷ð‡ä°™Þ-­”ýÀ4®³«þÍîôK@©Õ~ªÄ ˆQ¡Ç‰ÎUSVW¶7¢žŒŒ¼>Ô°aC‘§cžèEÝ+êWM¶‘à5:S‰NÇÅV`4æCm7¿yí Cÿøù·Žê4õD„R¸÷ ªžC9y@[ÝOXÂT¡Fb™!7Ò&$0<¡/\7ôûÎBA"&sJ;ÈíæfHH8dF ‰fÖîŒÜ¢Bž@/V)ün“œóêƒtèi˜‘,…ÛLuˆKLs‘§ÏæÊ¬v=%®ýö¹z“ŸùàR2blTsr÷¤›0ÏV¯Ÿ 9é‡-¬3’Éu[ÀuzÐp(È¥7µ™Á›aü9'pÐc¨ ‚²çÛQÅkOK±ð7è0ÇßȳkQú<åwx.ÉfÃf1\¹ñdmRÔ¸«èG’k³š§c̵Ú53óÉ’;ðÑÐ97)yìG!W0OO⼂˜„l•`ëØ£žûÆÓ~<<’hŽÌlg¢37‘Œ„™Ü±žÒ¯»HÉÃÃØùøëùâs­¹tä^&Z¥íJÛ» ]Ê'¥¨ËuH:u6·ˆÔl£çd€âÓ^K$¤¬lÝPؤ‘yÁ¼kPgzõÜõ>4éG RI#¶š2ýJs5²4D©µ«iê, §à¿Æ‚´|Ýä¶@ÑõYð AnÉJGÖ³Sm‡8%´{êDÅXCÏÓ}H¦áW¶­câm*‰±çûÈÞœÂÎÄ~\ O ²g,)Zß øé? ó]ªÛNèöæÚïó„Ö*¦$û} °®Ý0 I:‹Ñ»í>ëFF`ç×;2Ç„K.ê Ã2‰À fò^”gÛ3’îÜ;[Í¡t‡)7mS¢X'ÂóÀv*ùaŽ'¢ß¬nRøƒi‡±¹¾»ŠôLzji¡ÔiÞµ¬œFjØ=åžLƒ£@šsq¸êr‚"-ðŽÔBüCãMíû àƒo© Ñ$Üñ[mâÉ«7´0®p²°‰¥‡Vɽ ÁfvÀß±3ðÓÚ2°ÑËf^¤|ŠÔ#XWäþ²‚ž‚P[}«8ã5å%ŒÖ/çÊë/‚˜ƒøZ83²]²8wQ‘#s!œJr,„0¿Ê•ðh†Šµ¿ëTwÀ§)KÜãÕÅ«âÀh»°äYjÐ ë"[zúdztÙñª±.Í,¥Ý2»ÔÓ<‚NDéÂî®ñÛÿˆåt„%‡v9TŽÒlJ]T Ûi›/2;­?®4jà[3vé2"ÅßV×Ó%û\:»N;V‰ÇR¾Dæ“ò „åmmÍ ^GÅÉ ÓðNËèÑÚÄü´~%Ì›G¿E0x{ lóû•†Cý‘±+ž ¬ ƒá[‡ ²Iã°ç8Àw£UýA]¢<_\ß|5jf5¥/£Eõs¥×ÔÓ@[ÏimL¾•ñ–|nEyP%õÚ“›|ø›sNÿ×yà²ræU—PThØŽv8YW¦WuêþÍ+s NÀk ;½6‚­udÑg†­ãƒQâµyq çÝs»ßñóÏÂkÒQ ÕŠÌ”Ó >®‚|Œ¬¤bØé«jÔÌÀ9³m+•Y–è<ðk8/"Ÿl —£YUÓð£ô›Ö¤]Vòujéÿjš1yêíßOÑ©ÜVײߟ©Ï”£ÎR×Ñ£pYxÔŒ$›ž»œãÖ¥¥¡Uð Œû ~ìùp?ÖØã1¾E¼âìçÜNÄ™ƒcä~ñ)­³Oþ‚ŽyPÉCbû´6®tù&Å¡ññ»A.”Ô”0À3E”¸°Xù Å Úîg8èžÞ P”¦¦¿ÎГ@™ 7Ýê¼E¨nO]•.S§®‚x .O-u½¨#Iò±î\ë‡%mxXÅü³¤»7û&V,a½õó@¼ŸžÃ*I®üIvº½W#×ö4óV°Ï[@kºÒAÁ Ëk¤¥Éé;ÖºÞô»ŒuÜÑœ‰‚T_”ä£sºEÈDG}5JMFa:žm/¸QÄ .~ãLÔÆ…£l(d«ò¦Ùß!alj(2(^ìLÂ#8¶U€æ™×VX %jtOЉt¸î á‰t'Ù/0Š"äÓC/qΨ_ æü»$œì¾ëOb—,«µ;%(:HKxhç¨î}ÔpÍ·Ø< À” Ê_ûé›Õ•ö)°ÝP£Å~V{«{ˆ!‰&öj*ç#Â-¬×gy%ÿí%+‡¹¢Î=£lå´ Ã ˆÜƒi‰ôV²XùbI"Ð.:žŠ ¦m¡UÁ4-²÷бÌç†Sjµ={lLž %Ì_m}é(á®P¶¿cÕJ„,¬Êóää+©šœøbL)> îˑȴ§ÜJöŽ^rL)´ÔVJ>šA†ÌÁ‚ôÄ1õ¹+ŸÄm˜ ²©Žzj” X}ðØš˜œ}Ñ?Rìçj7òügFV| ŸNËEõ¯D'aáOQ]Qͼ®1ÛãlÚ½MNw6üà‘B‘¯CJ ~Àå8ÕíÞBƒ²z Af{–rCé?}Ô>çÎ ÿº—”lP°s59nyDo3¯'Ÿ3Î\DW*W©ö0b\ÐEºÔ…Ïi™ ±Pk$GŠ‘9i=ûùy],´…¡ƒ¯ldkê(®¯Á‹*˜uX›ÁÛ`N&< ­Õu³ë0GØ¿v`[‹½I ;¸úH¹â³fÜ5 áï ?~z_¯†ÓÎØò»sv`™o_š‘œU(½Ø\]Á‰i²ÃÞáÞÇkßGhe¡<݉5©z‹"¼ \^7ü9Îz}àÕ»ˆ—ËxÝø€Ž[eH,ª¨’êü¶4À´VCÛB~»_ì)¡#ó¡–šHá-]J \k˜I…Ésó#¬8œÓ'êˆåÚê-Óa~lCàKa…’U6mÑGï©›)IÅ ©GâÏL$˜Þ`±|•ïþLuPjpÈqþP×,êérìj»)«ð£ 4x»‚ó_iׯ€ss5îYè.Î'=µ9U x½\·Ö¡BÂp¼‰B† ixF£“”+ïÀ¸ÔdˆÇâWÐúÏ•9>ö×Ó%Ïç®?F¤ß?–ÇF5k_Òe” {/! Gh–±ì†.šó”¡ïT£—]LÜý…Ò1’VnÚÎÀ´Í©†Zh/xÇêL“jüùTYK¥&o1Aþr×ÌseuÐÕþ‹¹} nJêØÏ¨DøÆX,Za‰ïÊpVÑÿ½gýß!?í帟áWÿµ Õû}ùêˆÑÿCÿ8q'Ù§§í8îÃGÑ(Ìb<ØìÄ¡¶PüE̘y”#1_~° ÁKF–²‰Ÿúiq|Õ]°GØÝE¤Š©rFkfmÌð.JS·\Y6«@VëãcG%} t/ì/è,+u‚’+ˤ‡¨Õh)â—y.ŠÁçB0*4&ÖÕK> *`LW<Ùð~žVFŒýaû’6˜_R¾Þüâú‘WôDà2ÿtMúã[½ÒÛv÷Qtÿ²[æÌ×Q¥R%äÀpôÌ!%½ãý%̯¶Pž²bB×½ñnÕ„8¸ßÔM£^šÅxÙ(²½ó¡\£IAf’º²¨ì‚›U¡¨“¨/–«ä »Úät³“ÊãØS3‚¥Äk –Úúa-bGD9OÂ9ð¼‡~(©ÒüMCqµù™B7EêÖRŒ´·…Œh§²Üa¥Ò·˜A«lÿØã¥›ÓC¦H˜†±§Xà7Ðc؋űÅ"ÎK‘–z•@…&…mÐ þYè41¢ Êû¾²ßðöÜSÂRY¦HèAž7ß›°Ž=>q½‹‡ñòÌh™:i¥ÒGx V=}¿„|cã§Ãï cF/ ™¥[–ß ð©h ;ü?tÔù¥ñ%®xçc/í)ìŠÇ´ðiY?¼É•á´ÆÊ‹ ¡Û±Ð¿GúmµJ„’µžÏ€ “fwvÀ}uñÁŒ 9픂ä^£\‹«3ò´;ëGˆ:³ögBjÑ«Å!Ïú1¹n˜»Étä&ÀB¸É’1µ…'¿±rßS3°‚,Å„-ýÞ'‰¹v¡Y •8%¦rñ^V’çßK.b¼ ¡£ø^q*Ç<6ˆ¨©ÊíãÊÏ«3«ÛfÑQ_/?:ýöv»yè?³ ‹Çv¬e9W”›Ó8¢KˆŠl“'óvÃN¿º¯Ó—” ÉB𺠲F£øsŽâ»‚ê ÄXŠ™c7ú”yô_´^N*"£v :‡±bƒA¥ˆŒªÚ8t»€ú§gâFÐkÅYx‰·pú"ƒZº>J›ê°îr*'yZ’sư´ï“fHÔɤSšÐß‚·¬›4ÈúÈùú¦Ðøþ: ÷)uå¶-ËP2wgïlcC‰:9(½;Ư²gºV=OE±$yï'Ûž‡®5se »R»3wpÿ×ÞÝ‚‘¶|ž‚©^ÜÓˆ˜Æ\(<9>ëãSÆà;oË˪»Ç„(¯%€ßˆ¿¬œ.¿F§s•àŠû¦½N¨NMÍU!ù3•Õuæ{‘‡¬‘ÐqÚ¢+æÚ,#ò+ë;°µ€±Iió"ç¡)"+j‰éEhÛ;ÓèLBN^šÊÏ xMØâõâ”îöØ©¥ÑÉÃú¯ðqu¨ªÄÕ@|Ì«Y¥p_ äÀmNüøÁÈá·Hêy¸ 1Ê,T÷%0 ¨D5¸P#“L¾ò!˜£N‹Ú¬LZáV½“ôèOuë‹”Ò÷JP„Â<³Åî)£»ÐwÖäî³UNÌçéßã°€üQÙ2ÚêÄד»-—Ø´Ë)çð˜¨Ô%ýYNB 2%ñBʸpÚßlâ@ýiöÑÆ8-¶å]¬t-ôˆ& '¦ö Ht¶TŸ‰ñ¼ü%ŽØ±«ÖU?r'” ž?–E*hÎ’ÏPæ:ààQšLk3r3—6+›vA:PüA÷ºÅ€5¾Jî¥oæRº¥(j¤²ÿ#>@Þ­[„]L>L} ¿üõh Ú‡”:+(î¯1ͪ²aÄâŠÐæ]¦‰iàqÏP,l´Lj\I†ídµø‡;а†yõAaf[«-ùVèÀàUÌ×¥]wü@à3ÇÆGÎD5DˆF]¯Ç\õQt9[+Θãüλÿ·ó!‰@K‡ÖQõš Ì |¨Ÿsð°TÈÅ*ûÚJâ•@ßúOš¾ õâèæêçIý6Ýxr­N’Pìb b„ýo\–2 ·íš‹gs9–‹X÷3Ñð„émÝæéè³’#¼É„Ò©ãy/N&8óMqÍè盨òJNÞ¤ sý­Ç~€û—v„ÀA`Þ¯iÂõøÛ\ÌÉÿ`¤ ÓÚ Ðã*Сhû-ÂQ¹ryâu€Æ¬k‹ÝqC}pÇzåà‡$LóCóŠe4[£qêµ òF3D¡‚sZ~ªx…Ú#+ÎýÄ•ÑÁä.å ßf« øXª^rh¡b°Âm‹P–lР;?ò8=µ’\–yo>1ô1ðéºGÀhP­†R‹0ðGä·/n¬9@´6Ê›ÖðxdÓHÔ$z5³ƒt^Xå±¹˜mŒ“#ÅüCe:5fûkK)¿&RcÃ*n ñ)1Ç< N2<ºš3&û;1}Ú©-Xêˆíº4|“qþ©¸¸ Ï™:Qs.ƒ)úpç·»r,ð, #ÃRHCé¾ÿŸXÜ!;OÉT‚jÛZ·©g੉v';¢ƒBáϦ5Ùs@)’„L®?ßûŸu ´’èiÚ…Õüº R¹?¯ó°u¢0(²*ëøN÷ôX÷‹µ8ßÁ:·dæK,Öóa ž®pÛí) ¾ cÇ‚(íþ~.*“ þr(ªOKüÉÒýa8Ç‘^Q Šc1­Þ.ú=p UwL7z´·5ûê7ç¹ø¸íx|¸@èµ÷¦ÃªM©{|a»[f2aŠ”Ál`˜ÆFàX³œÌî;".Õ”®S¿½vV9ðIÍzFSYëÖ‡ºÃ˜a<æÞežâ¢pBø äb&ß…\œe®mvÜ/k\E†~~&ˆ=ÏDL¼æA´±Z4ž†¯F$¡¿Éϩɩ£›úÊ„O'ƒýD'tüóê‚¥ƒ‰š»Ápœf¡w ö 9 „€Þx.vL®¡ÎÚdñ Ù§a÷—s)GQÔšûó Q’1Q…C{Ä ¶nØð¨Mô¯8zï?ɨŸÝ{ƺXÙ⿺ćlt-áºÔ#[šÑ†åtƒìÂìxZ*DĈ9&eQq?Ë:ƒ[( Ýsï‡ ,¬+ϤJÍ8Kúj†6 yÿϺªW2oÉ‚ gˆ>0åd%=e*‹¦ãóËa°¬¿%G¾ŒÌVÑîÓURI6¡£×MOןèB´‰•jõCÅDùxâõÒÚ”‚‹§¿?h< êüŸâ‚üR0îÁ"†ö5NbŸŽS¾~/‚kóYÚ Š Å²y·ë‚üªDû"¥1—d‰¦˜Oæ£igÃwÄB È.e"â¸TVr‡»ÜëÕ¯3ŽpøéC€u(|v/}§·Ê$F#:z#—Ìóx’ž“X]OŠÒ¹ö%üëëêa¸õ$-¬ºž¢ÿ$ç Cǃ•a‡\æsÉNß–>:0Õjt-‚w5 u„â7‚@ü¾®­ÑÎI/çÛ ÀˆsIüdŸ‚}ªƒ5Wd¨zâ§+ê&‚'Ø´ÂŒfƒ„†žçðkбñ¬ú½]GÔ"×iX¯Õ %/¯@íI¡UpÆÈ4[<ð¶æÍí|å7ꉚ)Ÿ)¸®´+íêä:%ÑÝpenpìÃ6h_جFJ䚯œtDµŽ+ð¤ ÁU‰’W‰w4I™ˆ“Åzï€*#±2ö GÓÛÙlCÔ°MK¬ÕmBÔ¢;8ªuA„ðꨎì¹md‡[½“ªFŒ“$qµ^sÚI‚À‰)=å‘0:,‡Aé“ùkûU[OŽ"f¼ñ/„ø¢%î?ÑtųìÊŒ`©ÒüòÞ ÔíAÆk¾vJà‰¡ojßW&•³èÖ¡–`9Ý*–ÓzxBqE!w¦ ’¯ñ < tJx7ÔóWNTEzÆžrìÀ"O¬¶›ˆ€ØJ– ®+«Ç/HJvÁ!V0÷ò^šÍìËÚoDšs„ÍìÅaç œ¥yÓr¼`v2qíÞ‚M´€\íø)àÆ1åbeÁ‘ûñž¿éäçf+«†0&V¯dîIƒ+²ô3Ñ&4+K)ÖŠ7F¯Z{ÆóoR<²â :YÛF0÷'ݫђb7æQà ~ògòC@ÛMoËXÞdþ+î!Þ»Áâ°Ânò}üš÷T$‚%šqÀgJ8™7¤¥¶,ÛxçŽcÁõßKþ5fgïƒ)_¢LÔE ¼çHwæ™zPÏ@§YŸ×Èôδ—ÌJ,ÝiÆ«=·ö®Ü€†‰!lCµ‰àá¬ðä\jù2ãbF¬X[ÛD á©Íª®”ûÌì¶O_²£8š¿ËûzÙa©µ¹ÌÊ‹¸Rz&^ö˜?Y²ìSZ ÓrÉc~ž6tÝ H ‹¬M0 ÆØÛ—$¿©ßGÉso÷{Qè˜ý¤ ,#›?BH<1’ 1DC¬û%å\Ô} l”‡L²þ0^T¬,ݤùkwiö¤o¨ìßß$60CWý ÁšVj¸÷¸@ßrܤ ¿?¿áO¸³b7îzERâ'ôëˆKëñÔ{»Ó¥yL¢6ô–¼ˆYç&½;³¦ü³[^wçÞ ÿl[R „°öl`6ä…cPî¦ Vò /Òq7Ÿ¼¢ê;٠ ÁôÎ¥¹Á”ߪ’öjê^<ÕXêtæw‰—„ä´¿K¹÷¥Ñž?¨Kèé1:§Àïg ZÝ\–§)_Ÿ(ûs^2q¾+™&ÂýŸÝ·cΑË{Ð­ëŸ ËóVŸ5Øt'Œ¹Üȃç ³H•O\ÖtíÄ5ã¹Fïw0ÚêOkOÒ2Î|¦€ÛµT]¸*DÇÀµ5(j@R%Ж‚s;Eý…±þ\šÊœ<Ïs/\!tBšg„Ù´åo;é³âø¶WGP8õq MÉÈ5ë]¤R5?¦MÂɶ$Ÿ{Úó¥ÑÑääõb¤Ë¼Ä¿Ž¼ï$clÔv÷Ix˜¡ª^ úDMIj“m[Å™ ÷êc†ÚeB~ûtÈ#¨›±4¾ïðvM6kÍáR´·$+yîÑ7ˆ5=²sýðS_-Ü5½”¾+K9“ýos_XiFH™(\ÛM‹Ã¨Ø8õÕ›Î4rN}ï®Ð¿ºîcïÞïÃ; ÿ7Øë³ž˜ôö¼Ùm¬Éùà †Ä6í‰`ÈÈUm±oò‡!¶&&ì(Ø\‘¡Æâg ƒ¯ˆ½ž8(deÒ ­j$‹)qÂpEc¬#˜8ÝFY×MÚš·ÿ‡:¾È;Xw›Þ˜7 9¼].GÂ1½âv–C0t”LŒNõcÜê×Ènïr¤k]$:â%@$[¯ôQ4 S|¿â¸Å«HÝaÊË›g¡ £DÃŒy»þŒ9,ãd<Œs/–N¼»­QLc&4ꣴÒÓÈ‘9Ø[kR(#%@LJ”)Á7fMš¶}3€wë ½…â0 ºÀÀ½T¿—yfÀõ(v?5 °·Û| ƒsŸa…(xðJ¡õ#Oº…¯p›’_&Ç$¯j‹[´Þ ~üx¨›í%s (ñýdcMC ù؃2½ÖOIOí4ýÑýüú°¹?ž-Ä ÇËF;áoØ 1Àj¯êc}½ è`ÞÚãb“Y•؊Иœ§úSÅð8ëëíÃèCØKpÝñSœZ/ÊáøofY¢`C—½Ûf¨ÝB{Šÿ¹S…üŸßã|ò"iIoº„˜2FÕ½AÒ÷öŸ“Mœ6‘xâI òYO³úªÒáÒ‘`²tcšÂ>4å’„Â<\qH  @ßèå‚–èo¿V€»‰zûX·Ë òf¾‰/òÐMYïhbµ0ÉAÓ=¼„)ng ×OâÃ+ºü=¤à·­TÉ SÑAv„K®¼BðÀ±j½F‰h†c{OO$Âb£|9(C*ëB;˜yŤ©³To†2˜àØvÂdéI@ÓæíOá†b°j’ˆ®ÆÖÂy1Ž–˜èµ:¿ Q¶, ³DÁ¯õ6ôã¿ûë¦Ã™3f1["ÈŒùâÖó,—¾ßF‰4u=C¹ 35ܲxÕ+Uí¯gH®$| û¢wó°ˆuÔõãJãùSI–l· #èénï?¼‰¡~üä¤9ªíçæ"{ëgṲ̀˜:ìWu 6 &T€ª·v“'Ï—@)‰@e÷àÕøE‚,p”¢‹ÜAH¬¸0_ïq™úsŒå3\aîÉžÀ…#¥Õ^ªÅS®#:Þ3¦Z ô†O{Ê[½fŽšCÞ+¢ímàǪSƒw¯¶ 硇ýuRüµBeý$äIË t`R)S”ä­£Òvßÿþí Æ6§C-1³KÌÎÜ$Y 3û†ßê8ÙGª*$+÷–â¥z?H$%t¥y…Þ ~ ê#‘cÕCüXqŸ¹ˆ¾Ûï¦Jˆ)g”_hl×ÜBFó#¶Jr¿oXºÒ²ÒRe#êÛç PzàØ“7EBßpAש3zÕ9auÈÜÙÔa©éÞÈVt« +ß± ô³KBnéKI?ÛÚžÀJ:áDL&VìòaäéêƒEp7nÍT `¤¾öÏ9ë~úÙ2¼P µ·X^ sÜÏ×D] š$´gТ7¯"wcú}vH,nö°1ņ[—ÜZãï^“Ú,ñ¢«T€‰R6ß[Þ«}s7 ù–r =éêÎÓίMN£²T ‹ƒŠ–'a øiæHf;2—š"m†¡öÆk„ ãá–u} )Ð@9Z–ÀÆÚ£¸*]ÌÎÅ8רm#¹ðD& -fÒ4n”áü|‡ÛHáî$ I„nâç[¦ímЀ~è’­ l÷kÓÈq«‹âq\<Ðá)ŸË (B6К߂ê~äØùû¤Ê{* ynU§âSÇùýÅzà{02kóÖV°Þ3ºn"ø¨]zö†oOk“GÁo”nDK”û9šæònP¿êüÀžZçXÃÜX:¹˜ñÃW‘1¦X1‘#Ÿý „ÀÁÜ—úŸºŒ¹¤Cú÷fM;ÒÛDæí©lVN…]˱çƒK;.ßÂxŸëf0{,"AÜ…}tº{ܬ߬è×eû_Üõç‡â{uäÙ®Äc0˵€ÛëjÇ i0:¿p môû!¶3þF¢y4H â™ÝÓAfVÔ‹9†0¶l£®hf çwœ¿…|åÉÖ egÚÊþR\X*yH ~ÎOµ=3”Ò~l.vüÁp~þ½ØómœÝy+Áàľ桱¶`©HŒäóÝ ã)÷vÙJ3. +l0Yµª¯^òís;}µ›å5cçØ‰cøfÓ+l‡Ò¨OñQBÁ2«ùµ­„sH¼¼Öñ+dzAÔ4xýeµF¸|†²YÖø¶HQøwDùt[b¸Ì¯ÔÍwJ„FP®ãÆ­D™£àËþcÎU³f¥­êx½¸ Õ£*PñL”3t(}°‘Ëxwg€^AƒÝ—_ÿõ*Šâ¸2Ç#9Ék\(-Š­Í4›µõÙéN‡Ñ<‘#£n˜ØÔ² "kªU0á¤PX }¤ T/’þ¼0¹Š‡Rfhµáøõ©‘ÐÃMÃr}a_h©-28€HSnªž.èÏ›cW¥~i¥oËk~È…Í‘Ë.š<*ÿw"u?6 kô—<ãã*Ùù9üó…è“‹  #8m%û‹ŠhŽçwÅ ü¶„îÉ-`^=­eoáÙ†%˜<:¾dŠêÖ]«ùÁßá³–ºBö;±88¬áü»°0wm0]ŠQ>V—ÇAX6v •ÑCoAK¾Xë—C_cCQ5”Æã>µÚk7~”„ù »·‰pKÚ¯¾ú(ÁpF)^1´ Ô÷;|3šÝÉ„Rü¤“±"Ä”ãeM.ßTÊ J¶¹ñžÒ¿"Óu‰«ôeo0ÃBÕBRµpv—·©5pÚ¿„º²_;0 ø_­Î<ÉH°MoRp–VwI?UÙ‚Sðy-¼žoí2VÀÙþ²£sÏE´{ÌãN–žڒ™æ‡/J&'QûSÕœêK/޵zãè÷óv¨…«/vÖ(V#5 §j­òsÛán5l¿âWÏK!`_1Ä+UšêbÂâxŸ]„p{ϲ& €”P5…×ÞÁVÒí–4b «8î.0ü÷bši¦;£D&Q7àOHí[PBá¯öïLIÈ8á3T‡¦•bVÓP6DD¿×ݤC!ý)WøvWu!:¦îýPŠÖ[˜—Õ„kbl›¸Šæ(126žV ¦Á£Ú~±bAž(Rü~ð†²àæ¨(X­©µaÑÌlOò2P¾RIbÒ@zZémhw&óˆe¬u ¼BW¢«mcïX)%u½i•8Ÿ -²F¸ò”ö I÷9¥ßÒ¥¹ÿ'¢N“VT|GÏgNýªóÓù×l¸8§4·.†"K¹cœøTŠËÄGoÃ3à¸àíÑ'ûL ŽñFBó&4¾bs¾bÝôÿ/–v xY - 4v#.ùKÝl>€ç_³DÊ¢Àwmó}sîÅ}¹®'%þŠÉ_õç]¦ K,ÁISÛqu¼ˆ«Q"Ö#h×%b:1u‹n™5ŸÉJò ›¿é]ݹ?NÕ¦D, ~òÞÉt®  FÉ^9iޱS2å´j{¯­šªÃøzS§, I¼¶Søá †±È%ò-÷ÇÉ[y#@[©Á}ÓÌíBxÅUÙ@Z1Ñ£­dy—´o³­·6Û2ä3[ŸÐÅçK†Ÿƒñ– <…‚=auèŒB’º#*h.d‹gd¢:ùŸ/x:ð‡÷·d¾-N`9äàòÔ}| æãW“4¤¸Áç€Ùˆq †oÇJTtÉáƒþ9—FFÕcŒœ€î^׸¸R·#ФÇ‹]¥¤ˆŠìj[ã|_W™Š×"Q^ZÌ`1tbcÃ1Ÿý/Ö!a*hS±Uñ |éèÈÕ¥z5:X`Y¢ŠøÎØöö‰£/œz莆Šþî`¥¨ ˆø.uÚGÆ\JÓûòŠ^÷ 30~:+ö«@†lBEáVÜ ©äø†aw/‡ÎߌøÚâ‹om“ª·²ãS/+Æ: Í9%1§·]ËZ‹…{…pÇMª„BË0rn”Ÿ¹ÐŠ9ÜXù··hÏI"öÕ.Åì€1Î>»KqÜ&ë-üÑ}ÞZõ3êödk%·úb4®}´?ž¬Y„l2ú’·×mf[£F—ÅŠmvQ¤àÖWÖ³±*™™îÎÝó+u˜ïìZ;ØnaÉ~eYeŒ¤%{-‹X>ÌVjH:AÑt–ÍU`Qß]ÒJ ¸Åkœºðð_õ½$wIS}yÏGÚ¬(“6¼F±ÌØ›Œ.°“pªÝ€È~š‹+_x¥ý”åaùªŒªÂâk~½sO‰ Àu)b©0:†f#õs·Œ*¸8¶tQ5¹^ªŸŸÝÞdCÆŒ>6l˜Eqj9¿û"Ù í4W? ³¯_YcÉõËmý/’ØQÄ2ÕÖÇ®ßdVÙæ˜þ狹”)Ýõ~2´Åfè%ø8Îà…³ Q:šq(ë+Ëü Âú“³SNým£‹Æ¦…i‹Ä‹Béa.7¹ú‘ðɸ­Ãbî;’1É–øEbLnAáÁÂÚ¥»ñÑéá¥,£%w²«ÍŸ¢Â|¿@BÔŠÊjmZ/×VÔVÀ’ážQᣠ~ŸÅŸ`‰fqõ´J]Åă!^¨©ñÀ`G›BC EÇ$@òW?·4”Ë8¹¿ýGþk—À¤+«I³¯ÂEL¨‰š* 3½ ß VfÉèûŒ²÷DMÍ÷ˆQ·:;èè~>ßÞ)¯W›ovÐê…Q౉ÚùF\çéºNÏò$ìðƒä•ÚÝíÖYíÞ„\P_Ê„ªC¼£àµŠWi)bä+ñ½¡Œ÷Qü(¨H³}6·ÅêÏ™¾²:—Îa'F’Ðtt³ÉmƒSçÕÌVÅQðy¶Yg¶ÈŠˆ»vD?¦:‡NÞ^ Œ£‹ðNþNÃa¨j+áWÖá§~4ˆÌ=µ»ñ𨀇²îo,׎›È2+ÞðŠÕͳëÎáÐáŽÎ*“Ç|| y^>…ý+ußAQ8”¹Léhò“*à?:eSå!ãqMýÝ.v4¯Õ´èrcoœ§Ü‡4”ž‡WŠÐf€1·»Ò±£½*7 0Í´—~ZôâO «-wI“}˜KÒ¬Ž™l×¢L`Ü1«>Ƶ “dŽq¨ç“̋ۦºkÖ­ =¢ÂýC²Ô=-ßkì&²õ”ŒÒS ð¹Òåï7ÙUü‚K¯ÀïÈìB<â-‹T@Ö­:­ð5ÄnáÖHŒ‰~}jL@],{Äd¸Vyë@©l[áhüÁîƒDä‹løJO+º/Ã;±é ÚE³¾â½¼`¡ÿ¶Õ¤2OeöH.âsÍé†×i2iv±9a6U²6}•Ý¿EâW×â,¯ä¿Ðî…'¯ZÕ˳^›§©¼ÀÃHNmíUž«dïª{Eî—×ⵎToÓ…Æè2V´t ÷Á›·U¡{xß, °Ü*Ï\ R³+\Gí¨û†¦'ì)”í'[ BÙ¢Âê*4?wç—ö¸Óu6ËdÁNS)ƒüÐܰ¨ {3&‡Ã¶é Ænî¸éŽ&©§Éí×ñ%»Ð~ØÊ\E=‹õ/vì‰dùcLÞÒ!]¾H 乑]ÚD⦈¨F¦õ¾3†ó@ h³Ž‘õ÷î§ÆáŽKò*«Ciþÿó>™Õ4™.IX¼RG‘ÿãDó¿ÄèA­K飛 týžf9† b‚Hߢ·þªé] 'ÅÒ™qðZc <*8F†7§ `ÉÍû'nÇÐ JP¬ÄÕ…ÖçC4;MFh­‹Ø fuEo2:¨'ß2‚‹`ƒ«ÍÌ•Ð7"9Ü‹"ÕœaË^:±• W_œÝÁt<”A9ªcÎÖý)«—h+4+ ¸;‘”›¹óUÃ54–7Ž!4ÔÆQá§%à9 “¦ŽªÕ¤E|ŠBÁϤÓÊÉW@²\Ÿð°ƒKÃi~­”ã“ ˆò4¦×eQT¨QÎmÌVÁÙ7ÍÇ¿NÐÅb@å"ïÊê*Ø„ ¥O÷Y†`9_€ˆÕ¡N䑚zÝo‹C¹F“ÙÞþøxèŽM“ý+·›ÎèWÅU=^£<¥^?ö Ëš˜{˜§è=XePß_ÇØ‹É À†¬Ly4”'BÚ¹Y+`»„t‹q?CR˜´¾¬,w®>9§r3Ä´UÜÐfrÍæ4\É×频ã£:é|q. “;Æ;̤‡JNEÇéœîKs¬¬vB4ðŸ³kg@ŸaO”{„!ßá"Ç”_Þv¿Ù„F›èÄÊ6³æ·«•Jûœ!¯ÆÇòÑïÚÇëx“pL}ÿtÎrwUË0ãP®aÌ:9ÌlhÊ@à–iªsL%kr]‡¶ ñÍeÀT¯$eÖÌÂk_åÛÇËZ&ઠlT½˜Ý!‘;Ø–1™€NPÖChóm<}Hs´j:{òãX@%™v-@è¿|E÷Aô )Þtž¦[iÚïW9*ñ+‰g~†ÛZP|y¢kø9…àº5ÄDF²K KŸ%ÓÊfÂÀ¦‚›A§N²(4ãj!0úÄþ y=Ö’—f‹Š£ƒ‹ÑôVí2puÕF·’®CAÎÛ­(oϰÿ«Þü‡ñõ3ÇÔG)h fÊ­F¼{é–©‹+“MX%Ý¥Lp4¶ïßÑÕ^ééP¾ ˜§rŒ”—7¥¥Æu–KT­Ôõ$xÒÛg~ ¾±„Ît»×«I¾?yôä-R)…î¶— M‡mÃßú‚8&õqDZ4g&XÅÁ¤…r£QûŽèìå?Y&›¡¦£¦Y7C Ÿ:ó_4ñPÿ¨±øH¹!~‰ý ÒÈ­‡$¡¾õ¬uJÅ{° ~øœ'íe¯ÂÖFsï*ùËaÔ#G˜8ç|Ëùçü“ð N”‹´8h…tÅ5„f‡îC:1!)µ3|21š­Ó„Æ“‰ö]å’x© BŠ1>ŸŽèpc×èw~~¸+`œ¼^¤¨ù’ŠÌ5x}ã’,êdGXz4÷ó–°uçhJJÅ™™ËFhíEãÑ4ìbÄ㲎ç’‘i•“볬±Våý( 'ì\±m°ÃÃÄ!ßÄupy ì~ö‹ß’ô½Á:p£ iWjñun?³šK ªu’¤úæH&¸™ôê#š1Æ×%W,éüf{néÊVÌ®dHb© ÕE¯öË™Êé5ÃA` ‘øÖ‡«€Xîµ,ô…Ëz2/±0^Ú4¼ý×#>Ô|Æ8CÕœ…êæÄH>Ã)@RÚ]hßßx½Þ3´½9y%óªÿvÔžö¹ªŸ°ô¥Ïha!Šj|Vá‹VVñ›fYmÌ«‘¾/üåh=}gÄ“ü ‘’,¦6-’x“’kÒ¦Hõj/xI/ÑBdð!U^ïIÃ@ËÈ Þ#BåA€)ÅJ›WÜg/Þ)ÍÙÞº0ˆƒî=Îçµf†·(ïêÕÛ·“VcIÃ(C£òeg¡Ç>Jqmlh³ÓË0—Ê)<…ø¨-óNØ4´|b„3ø„¥´H¨Mâè EÆiJk¨‰&}|H¹KÁ6, ÔÞû¨òŸ„ð5ìËo,ý’ü>t˜¦ìõÔcÜÆ<î¼ß7Ð+}Û1Ü59-îÌÙ±l«ñŸ½Ž?‚ˆRØIÊ’NgSLó¿$2FÅXÔ5‘+í“ÅRþñ=·¿RíÖuè©7ÏÕ'ýh»\ÔdŸH1Yæʽc¦œrx‡äÞçóé@ãÙ2ÓgŒ@È©ô1bp¤¬þö•Y×ò4Ûúá šÌ`R< Ý/>¤üˬ×]îkå×?% ób®/ß@þù#²52dbä#_Ä¶áæ¯v÷q¬IžèŒ» T¥wv2º‘eÖ#dz¿ú近͹<Àõ¨=uôpwòvu°C/$nã †ùË›³Â#é ‡ò-šUGT»QGV¹MDÖÐĸ51™|ú£vËø„B”å;u¼x ÄóZ"§1R`Ï. VŒ…¬ƒ ø³ @!½k v%Ž™2 x¼þäÓ¸´3ô;ë´¸ugQ*úwiŨçÇ€i4ŒfŒ…w ä¤U®&„ŽQÉ›ûz ÐF]? U!‚©Ñ?/€ñÆÀ™ù7èɼê¿&|Qé"ЭÒ7'h“ü8Öìµû2µ3Zô¼L,UÀU b*‰Ú²¢‡€…!W{ÒU`vï×VÚ¤;=ož·W˜~åªj£¡µÕ©õV´$"×”§z>Ô¤±"Kö€¿ÑÏ%Ñ.e2K­õ°ÔJüI˜ìfÜ’ ‚àte¤_&§sù"—g˜€â‰ü4Ï^qÂZœ2 ½ØtÐ¥‚rèØ¼»zÅ µ¬™³€-²Ûm¼æÏ @¿)°c’›Pm‰t»EÀ©BÈñ}|€G7ƒDƒ†X+-®ºŒÊ"ðHE/gÈgä>ú÷[Ô£L“ðD ®₊VÞoã`Re»Xê°†NRTŸn‘ùå ‚9Íz^,›4[בêdOd½BäR«óäPåþ×Fy¯d¹O›va‡8¿DbÉíó¼á$‰}!cAþùxC–ÜÈü‹(Šã’3MB õØ„¦ÔéaÅÂo((•øâ,¦ø§ËŠ Õþ¶ÞL@’>}agž–(Z°ûa™Na%^¶CjÅa$×Ö`º^ˆÏ³¯Qu3ö¹+FAC~’ß!%=%4RZ?Õ !›9(Üg°ÝûŸSÅŽªEšçZr–4­¯Ü2oÙÆ6Q™ß~X;òÛëáJôŒœ 4ˆæ T-¨e¸–ÿ{-¿R[Û÷ŠÚ@¤ uØ ¼\Šè–Ÿj[ÌãœS.SªcʵšQ.o/ü`É®ÃBÕe‚‚êó¼Í—6Ñ· _9ÉŽl\•΀Q ÷·wï.G»Ï´7ôÆ5àðb„¡ô*>°ÜF}TYŸ5"¦èÈV(¥~°å®Ò~×Nù¯0ŒéáR8ï`ÇÂé° ·.ÌÉžÎý{{?L–ê D¤5ˆ±r”øŒl•Ð*×»ÐLr`~QÉ—2$ÊPчƽ—‡ËD›“)½bwCs>:yYÂE]éR*¨ê`ƒ`¥kƒ<`þkÍÔ!ÀiÌþv‡}ðH 'pUtšÏ~–Ù¼b²§î01Ì^o­ÒôÀ‚WjÏÉñãÐäì‘ÔÆÛ>éÁÑ4jú|ÿëbvÍ.Ë;ÅvF·-®,Xlþm VÏ ¬t̽Žù!¦sŽt»Ek~ fæôR36¨®¬=.Lü¶Ù£¬ÞmF¯RHñ€TºÍø™ÜŠÝX,”èÅÑÉ´†ìóƒPL’G@EhÉBÁhãÿhÜ[u}O蛥$‰šˆZEw›²9ÞŸÆ!RVB@âéÿ^²ùhóg_gÈ~¤œH´i¨–Sé#‰Ö&áEI{ÛÄ8Öþªæ—Þ¡>Ééë»VŸ§³à©Œ?.SÈä]ÿpé+Ìœ•óœm­L];”áÉ·:ªdE?@©Œ=•„çƒtSôxú,à“± }BWt‡ªVˆh›1+ ´ã@±Áw0cHM{[Z Ã>¸h‰±þü=DAxÄjoàhÚ§bWs3…ŠA¤Œ¹-oå%lŸ%¤`ù$ÏÐcãLéXß4MÚsÚ‹‘’‘µ ¢0JîYëwë$Ã$­XæÏ¬äÕ¤B;Ö‰Kù&àikŽ’hÂ:Bã=µ>V} Ÿ>ö>‚ 8Ù>-ZçUC¸‡¶J„^Ylìh‹EÑqm?PRÍ>äáörÆ¢ðmÉU4¹9‡ÏY –>¹eÇSæ¿ó5À—Y.½¾á6–;Ró¯‘`{Ð0z Ke$ÁµD¾'‰`:EÆî“ÒU“l$—‚FÞ"U8Ù_²h e›”’}ØCÏà)Dd1Rv8¹V^Ïnwgj›ƒ;Ûå7 }oë+—é¨F{U÷¼Vln¸ïœÂ\Ì 7¥r‰ŠÃf¼0¼'ãi.iÍ5ëÏs6?IäahЏU%º‹†;W`¼®®»”?E‚‡Ã´ eÝ…3 ‹â“g{ØSwžl“¡®c+B€šë7yçGnÇþÿxKòSœãëöF> ?JÓ( æJ¶pÅ#I’ú­ñ¹.²Ë€Ïâ³ø.²­ößÀè–EŽd‚ZÉn§ùß½©ðû¦ÄDm¯sY…¡Ö!®AÂÔ=@‚Ú53<¡ ’>™ÚDDR}êˆ5Nk‘t°n™þà¤âpü}r³g/öPï¼~å!$™óÈMwTA¸$<Á!i~`®¡ö\Nq?ŒXhìÔVfš(Žmy¸ˆYÜ›‡Ø›Gw¼HhˆP¿0M‘ÿZÔòˆº&yåçó–îŽ'f†ÓD.ö_èâו+g­Ý6î6€@ JiùòXøÉr©§"ð3s𴺥›JÇ6vߤba0òã$AõÕûšñ=ùZ…÷S8Sˈڦ ƒôÍw)JÄî0%>¥¦”ü^IA÷{k¹{q[çO“né-F·åPû&ñœÇ 7y»5rýz1ɵÃsˆSŽ÷ù ª³pïe¢ÚhìÒm,—¡Ç7¥ög†þãt°çæø1)µ/ä!uNP¼Ãp|Wry⊹À±«¹ýI«Þ~†ZUƒ^ÕoU·ºY« Å aÈ“Rïp‹Ô6¹<˜¹¨ñý91­_·^4ª5†o»í÷]WÜ Bj0ÆŸP#z08Ä™…»0®Ú›¶W› {Á˜´lhE9™åk¹Ó‚.f3KÀ`1zƒK˜ *è·ÁÞÑO|;Ùkjª:áL ï'7ÓýL˼MµRTüð=÷h1éK¯Ãl—®)wc²x›âN*9t0~–®b‰V_±F¾âô¤ XHXnÚ~óîý ~ç³ã;´v^*ü÷5õÿ>Ø)"üÅcà‰žÙìw”<—EÛN±5Ô°Â{?6‘ö>2ƒj)·Åˆ™½DHº>F#: ØÏ4@Ò RT8 ýoÓ»4ík²Öð•Uƒ¸š»ìâ|? ðiy€MPJaË»¹v§Ö¥°P¥ ©Ê\B(·:§9 :,¤såÓ;¿9‹`…å…å#gGžK©(™Ã‚‘л̲ø²š:Ußîhؘ¸k>5ã9)Ì èæ¡ûÞ­iž†¬\&ánŒ§a¸ÒhžzÌäCS¶dÌVáp  P ÝRÊy3(<õãVë˜ÇÝ-T%1Àg£/Žò&¼P»éu­YÛ•øRôW@ÆEŸ–6i"Ÿø—ˆé6+³¸+– øZ»Ù@(%_.Oº¦…¢Nˆ­ÿN KÊl'í*DÀ”pD±ƒÜÌjàfÐO¥:œ…á=ÈPâûV BÖ²ÆbÅN’¯X!é6½Å–ËšdØg3I©–î!«[`Eóùª„£Ë€àÂ>Ô&Q˜–VÙ~)uæjOö1Þ Ò`ÿ$¡0.H®Ã Ù<9싱/èÒØ¬ïË ÇíÇ6Û8ärÅòp¾áòC) £AF¯r´ý6®žQB›D­–„ºp´†Ú0úaA¢»ODše6 ^Ýjk¸ª*¿’!Ï gáót×O{¸Õܼáúö–~>×l{¿Ê&K‚5i¿~eï—à‚Mb£1¶Uc­êì|¤@”9ä¢ß✀žà•ä˨²Ø ´Ç{ªï„š¤Pޝ´4v‘ªòn« ŒœøN¢F¢[¤’.•Á¸¹{'ws¾24­•zìxƒ¦´Š–ÅU²2br¦c0×GMZ'‡÷Í *à¡J«TSÅâmr²#²|¿Òušˆ>âþN2@ž|ZÅ[öWñ7¼Ÿœ¶¢âÜÙBîï-^¿Š¼s“q:BNßè0-ö¿˜Z7‚¸e]UÕÃ{»¾¯Œ¾3±3…›Á“òåž8…EDuÖ–®YÚï<ö²}½Dû™Q[!®õa–´ÙzÝÑGõ¢¯Üpî ž=[ÃõúáùUE„o‡ ÌnÙ¤aª=8Є¶Á^—Îë–× €8'!õŸŸÀK ÅŸÛÿ#yè âAé©Tƒ‹• §ûì–<\_!—æ¢%þ»ÔX'bëãò $©öúB5jköÚߙ޺~_à©=ÄÏmã²rS[`õ®cE _š–ØáS`‰ÜË·!žbgAË Ö›=^<ÿx“Gû÷x1_C6éê:ÀAH›èš^Õ—Lý³œÓ¨oú_~[„ fɪu0ÏÍl|‡ÒœÎ8°öK]çb ¨þÈìO¾ÿ.qD6hš’§o‰ÜK˜¨]}s® möÇ™©•'üÏ›@]§ö³¹ú#"Ã|;rrâýú½9cO1! Ù”çaYXÔÜ&»Í&޵ůº(”걜.ëÓ4ê2#BDD4ÔÞnY%ìAwû¼”X¶Ðñӎý-F4q!Aê°Ö ±îËæn±†‡2c#Ýê±ïr[Ú}d@N %}À­ÚýÃUiÿ™I–ÕÓtfµŽ© ¼^ ›ˆ#žÓ¸Ã°KtlRøÐïbŽi”.”ÐVϤƨƒ•3}îgÐ/yv=–âO'Ï|ÜIÇç«"QâaW¶£ä(©lÈAàÛ+!úbû™âXJËý¬, ­ºÕ}ÝôÊÆEu1C‘EÕ&§'1ñè“—¢S²ÿuLÞÄZø8µ>Ú£Vð¡ðÏò ´D‚!Gc^?å²êÁ0'KÊ£»¬ø©©K3ëá÷ÀŽDËZ­Å}ÔŸ¬QÇ0²a2¶r”{9±ÔnA©»P9›ÂtÖsµúwÆ!$T+Ÿ>QN!“‹¾‰ÐVVµùZÝr¬êÜ7ŠŸÞ»õŠáRD÷¿#1‰ C±ÍÙÆ½Þ`¬8—¡öˆí‚Ó”˜ör¯æ Áòå··8ªÏå¼NÛ} é<ò<Ëôác²È^{£“ ¯Œ•ôÞb¶_ŒCx³¨qIØ%(‰÷×ø«ÌY6GPÁ2õ¢åŽi@ÚvÒa|¢`¬™yC8ã&ƒ;GŽ,"odQúm-°‡/ ×/–°ù…¡^ÿ%¥ÚöšF3é;Ã|ƒ‡XÛ î!¶wÁÀø@Þ÷;¶µ_d®;Z1« Ññ26ŸÎ¥¾ø5ÚÑ5ò ›Å¥;;’“p³ëîò¤Õû?zzl0™QÍ4]ÒÞפ׽xöìZðжG´ÉòпÛn¼¸Íe#»FNœxù” >åL=²¶£öSÁ}†ÕᤠÝn*Ÿö¬<殆8~x> †~›uÜcÎ]@P#Ib‡È»äÈz%‹NrÊkÿ*ÊorïPµÅùaÙ&Ui0 ¶§“îÆdãƒ0DØ9L6i)g¦¡â€#°6¦8/~:¤:OÈ3À2gÇzG}‰`Xm”»Xm‹ YÛžôá [âE.u¹m“¾lÄL스ž{hëàP ®"Î ÝÙõPùz7ç–бÜÎSÄ=÷ô>ÝÒ€)`ø¦U>¨î–ÐÃ[Y”ù”—»0{ƒêò¬T,¥–Ú.ô¥¼ÔrݦÓå„ÞŸÁœl ÿÕñùàM¶m™XàÙMÆ÷:Žé‹FÜŒoÜëú€þv„hcòþ„øè^6¡ôv q{Èz…–ž¦• ÃÓó |ÆÚÄ+bÉHlI54£gÍ|è싈¼ýQob‰`œ+35•4+cbõ0ôDàjŸÃ¬°&F½^ø§G{üOe‘¦¸[“\ßv%éé–î×·çDÆjˆcÕi¨Ä—ŸóSš –œ¢¼Cèjú®“z$õy§hõ¬@±d‡"søÔb èD†û¿ªv’¬–Áº Õr«HÅÖ9m¨èƦŠ\¥«í'Hݸ²¨w:Á#=·9Xu<^ôl“ë"Ô.ˆr÷£ªÌTëÃWù |1 4¼ hµq‡QÓxþtàÙDùþK(l¬Ý¥Òa›UYª\…‡0Ô%îÌ„ÃC—}‰°(Rùöøž€Šéø.‹J>c©±£»ªÀæy¨_Y¸qtËɬâ6¯`™ž5\™ƒºª•U¬h¦åŠ9ˆ]>AgtÖ[Ö­P›Æ†¢¡žÒˆžVöÊ@ Í;él¯ÔÛ5vÀ%­u¸ÊâG|°Úå‚Pr¶>B ôê7òü÷ öòåBa~¼ùœ±ò®+,€åPüó¿È¯šžqóÝ‹j.´_n•$S¾ìyÚ5s}—ÀéV$G•*Áñ.íãÜß\UcÂâ#Hi8³"¢–æ¥ôÏ2õÛ ±Á_nüºê?sËœ7LåÒ·ˆe=ðDÔÕÝÕ,Æå‘ÀØš:odE‚ô½d¿×•¯ÀÉåòÛô2#ǧûì±4†óó?H¯Æ,oòQ& 8Øzäå¤~’ýì"­ÔØ”¬©é#4åð~âMà‚ÊØ•»#œ`jf^Å ZíoÖô îÞoÈžÿ‹Ky¦ ß†$Öx®˜Xóíw%âø?°lRY¥Ya³çÿt”ŠÛøÄ ýI ÖŠ˜ ߨ‰Þc¶®¡ nœ©+ê ÖãéÀj³h|gÉÉQ“c_Ý,ñ¼“‰D|Nx8™ÌÉÑÏÚ.9q8ÿùGil-±B…—ïŒlFŠõ6£SôIð3Çô%«§‚„« ~aÛ2ÛÓJþV­ýË+ ­Ë,V×yö#ñÞˆ`rMÏ#RÙÂè0‰Cm1–×’œ¯ú{š?C°©Ž´8ôÂênû@ùZ2…½;sšÜ¢ÿ«|þ<^ž[/ˆ7.ú'fýæ-ýø¶Æ§ï¸Z"=zÓàf“Ñ*ièÊN<ÑX7¤ûÃ"YaâÊqÖNÑÃ4­ü}n†èùºa5rY3G‘ÄáÔë¹,²R…™FñÛxbÅvöÉ Z©4~—Œ†ØÕ+Óá-БodÂ^AÚÚ¼gÍW˜%’'¾Ö. üÒŒ—qôu9 â5n§dÚQrDüï#&I@ȶ»ì¹'µ€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/DarkGarden-copying-gpl.txt0000664000175000017500000004307013544671343025315 0ustar rptlabrptlab00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. reportlab-3.5.34/src/reportlab/fonts/_ab_____.pfb0000664000175000017500000007633613607302650022474 0ustar rptlabrptlab00000000000000€·%!PS-AdobeFont-1.0: Arial-BoldMT 001.001 %%CreationDate: Wed Jan 27 12:58:23 1999 %%VMusage: 29118 36054 %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. %% All Rights Reserved. %% Arial is a trademark of The Monotype Corporation. registered in the US Patent %% and Trademark Office and elsewhere. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Arial is a trademark of The Monotype Corporation. registered in the US Patent and Trademark Office and elsewhere.) readonly def /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Arial MT Bold) readonly def /FamilyName (Arial MT) readonly def /Weight (Bold) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Arial-BoldMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44341 def /FontBBox{-167 -250 1006 939}readonly def currentdict end currentfile eexec €ÿuL^¡C\™dÍÒ …ãEyiïÁðo’L ,íµÓûV»Øgÿ3ø›EáÈÃìƒ%sÓŸs³>zj‡ƒJÓ¯# ÝÕpµ°Z‰Ù ªºâìÖaMÇQ‹ :AÌ—ÐóÇøAÕÌ[Bjë:£l³—¸€„ÿR‰M¾Ý¬a(¢¸ÿŽÅ4ë§jyý.òßÜ!Ò³©´¶ I¿Þ®ÜÏCÍ–Ó¬ 'æjØJ-‡Á²M¾Fø iä†xž»ï#ËÛr¡xäØD Êe©åæé¢3ÔꥢS[„BÇò¾ÁÚ”J–Ç(;h»–ŒQžÝK@ Üà6×2ì=.À³Ú˜ƒ1„WŽîºYùÕ{8 xG ³òTÍ‚þ%ɆýHøþI¶j!¾"Ýžåþ@ž+tžºê†Í:ƒ]…Ý‹‰¸¦®>ÇÐ1mõT—‰FheIêªisŸ•“ÖÎ^Æù4¼Q>®VSX£¡ —û»v“yþÚò^ªmJ”ý¬TzMߊ^c.ÜôÁ;B‰¢Y)Xõöx€ Fp£WŸc²ï‚hå Èlj@E÷ð‰zý¶¢®iviäçÚ‰=Õ8T*7Èw£gsX šeuÑåOènJ´eö Ÿ6Ѭvªl#ØÑ„µèœv]8åx,\SüiZ©—d¶¢í$‘Á²¸Ë,K|ÔB6÷]Ëô3W‚²¦î†»ymg“<‚ìWÖ¡ZÝ`H#òÿ[ ˜˜M—Vú}åT±Ké*ý´µdIz™_¤Ùȇz¨¶S¾œŸòyÅòÁ…à8U68 iNb±Ž4mI\7®Unm}ÒŽ"Ý7ræyø^@Q*GPŠzááb‹èµÃÿ‰¡þ¥z¹îÀoÛn³ÏrS+'÷Ϳ°§¶‚æ|+N °Ú¦èS‰ƒ{£xŽ-Qì'K9‘Ï€~_gÕÚãÎçRŒO¾ž3އLÁêæK Ã/¸Yz_k%Ñ© Ý›ÐÌ[ꋹ¤’ÍF5W`Æ/’Ú´w>OÁüÒ¡¼T{ÈYÇWæ+§Âb:ÕêYÐeÆM!žÎÉêN}¬fÂLS^T€$<È\]³…¬0ôÜ€xg*Ô ‡x:½çg6™Pé|Wé¾Ó@ÏÔžFþˆÝýÂÅÄ_àÔ F$ÆÌµÝ½tnU5;æ,@¤Åà‹1(þâR›~¥½Ež˜Ãk‰hXžKªžÓ*zFmãUTÁ2sFaP©µRì—u}ôû™ '¿m+8Dy]DCÃÓÂ+z]f‰õ2ƒ=ƒü·eä…'— ¨EF衲Q:„mŽn?Íæ@?ªÅÞ,ÕéJÌswáã>ý„P½¾°ì{r“ËÊ‹¤,§Är’Œ¤ÃÒ³õ‘«ËÖ@ÜO‰Æ ÎYž 0œÅÀå!8ç5YL¢mcp\wÐ~ä"M½ òLw!眩½Ã+.åyî/ª`Ž‘ÌFn”Ö‚¡†ræ^|l¨ÞKíœ,±{ÊÁ±}§|Ëø×;wû½Š:nÃ¥5o?¦²$¶ «øÓ<~ ‡ª,>1ýTª³à(/(Î49b‡,*HÞGw¤ã™{jØ›¤4ª,S¼1”ž–¢ß$Ñ?¬\OüfâñëÂV¤¡^.j/%»¡l®÷”Zæ¯} O=;ªcþw”\ÄiVlÔDO^Šÿ‹Û}ÌÙ¦Jv«™ÐGæ ÔéžzXióuÐ^˜ú‘©#\¯qr3¨ª¯ËN’q˜S•«8D<ça:[§>½šR[`¯¥åéºèŸ)} -—»XͺïÓFs=­‹"¡ê4ÄÔ5íãÓ½”dø%–åŸü‹ÖWr e­éP¤âiëýìÔ›§Èï¹ ð62qûfÛg·»7,z²€; ­`JÕp(a ¿ÞZÇM90³ÂyáÃÐÁÀH­ 5g!SäÖm; ðZttÕ 1£)¶˜n°µ ü¦‹ÅzºÆš:}ZžOõp9ÐÁLrSÈ'\ÇOËúÅÆïY÷_àGT± É_À¶P$#Ž86’ xèw¾ˆQñ¢MBî3êF òÃÐuléç6Ú‹ AE…ÔÃm'´yfÆ‘¡Ü)ÆB!U/¿zŸ‡•Ìñd#<¬g—;8=÷6²ÒÅ ü‚‰R_„¦GLk/Ëè3Ÿ‘mÚTå>žÅYÕ%ëîmÚ¥!ÍóJxMZÒ¼Dó7Qk›ïKš7ø«{†­Ì;ÖlœÈâñmr(|Eõ–ÓéªÙ/Pb‘±!X”=§d2Ynø¾±šO½êEYvQq%øÏ™ØÛGŽ tx•É_Ávþr B~®²€@™6ýÇ´3Þw;d6\‚ÕéûÙR´À…k]ÀžaÚfÕ)‘$m« …¤D–Ò°L’u“œô9]=(ÍO–&<ÿlû[Ô—Z8¦×°S•˜4‰MðÀéµ@›-šê Ú‚y‰·Sé¨_|г‚²‡fÔØÀzY‘Îò޶ÝòÂ"Ìkxp]â<7 “=¿{ŠãOQ¦qüæzÕG»ÿ<°”n6ŽFpylnq@swök ¶Ž¾ÔØÒ†{õ×¹./Þ®Ã`nš›€hÕÓãä,£?ÿ¥ÆÉ‡ââWå3 ×Oœ‹§®ºÃ4îêðïg‹É—ú~/P×Ú=¯5ÎfâûðVwlŸ ‚"¾¢§ó?¬Ú%,Ü"“)ƒW{4R»©æ`Rz‡uû{vžÿ ¢´Í½üuw¹®GÀýz™ïC«ÑQS æxßfh6ÒAMTÆÿtø ¢·˜Ø"ømÔèº|k¹>«¸1§UeÙzRcÝ«F['¾ û?5A¤J¦݇{^ °Hʾ·†û-u0ŒÇØW˜V‰ .Ìó$迦_NIÄñ—Æ rqzÿ?:c¶ÙäôÀJ¡òÐÍ‘mqö=VÁ·kúà‡Á{FÞ m€Ù²„Ë/Q“{ðQ„[QÙÓð~„È'_w¨¯YOHoB¹\+L2 {b*3©>91DÕkçˆm'š]ÜhÞ>i¨îÈhL5<„P·Ö X`ʨ¯ ”åÑ“…åx*4 ¯TÊœ™›ÏpHöåãWD?ÊÒÃŒ~Í—Q¤Kµ%“w•\ ÔvÏE?<”ß]u ÓZ)™~´ÖîCxÓPî­ ˆ|e75RÊ6ú#Ǧ€þèÑq zÌÕ $° ¦¿ K[ Ð ÊaÖU¡Ðk¶RʈªÛÉ Ø3iFý¦7y;JøèdUfÍ+'ÀðIcêU‹ÿ”ÂkByÃ{’ëRÔÝÇéÛ´¸2DR·óH¤^lûòMÔ+μ4J…ÍÑ¡Æ]ä4ªÚŸb[$`}s;Ãn±U\õäÊ•^6JS)†å?š›+µ Xx“¹‚±Æ¿`Bêµ#ëä’°\½$àPž™Šõ*,®]ÛtPÀÊÜ¡>®FU£¶ø,ŽÏð>êùÄÑVu§ú½W¶ÊºÊ‡¬,¬ô1¥é±I_<­½%äÎ lb­—'zÏâ’ èZÕo9÷Àf `þAýÏúŸ†#¤4^æÇdôáÈ =î Õ1ö¨–ž@x£¬B }Ÿ¹nÛ¬WU)\¶¹šhÑq¯|3Œô8 ‰õ‰0ÉúÀí^4÷aòP—‚-ʘǤ«^ÿ#+¸ž1³{é£`bý ¤ORÈÉ£žv¥¬§ö996ÇYœL`‚Õè½ÑC¨æŸ-_KñVm¨î>Œ›Jüú±ÜÝÖô¦*H—•¨²:|ƒ“çŠëO»ûkF<ÂGBp´ŽMVÛ¨wÊ™ëÖ䦜G”oÓ<ßÿîÑ(*ÞqyîÉ]+•€)ji#üH¿º†¥”F߿۔Ÿ·Xãí=KzÔsà 1¹aþ}«>¿_¨Ž%ªq7Çð1ÔÙ;*H#ŠÇX(e–ýªäW4,<ÔnL %V¢Îe¹É.}¿äeêÊ»ËQÂuZ¸i‚ù ¦.ðõ.?°H¨äª¬¦ÈÇGPÑ®%¶÷^%‘'ªF×$ ?Né2`‘Eá,N‡'Ú3Ƚð–¿§ãLÆ’±~-˜.¸Œ¸‚Ñ7€­¥þ×ÂÍéŽ.|’¯*!”ã¢jK8—뱓O ‘ÁnögÈ£š‰lDK Á~È£sÆ¡q7ìRçŒz»™ÑmJŸZo§ ¢¢)h¼ár-Oƒ–Mö(A'»J$Ós–Ž »"2 ™Î ŠM“týs5æu7¾‰¯:ǘ&íó«pÓ9­/‚î m'«jöÂï‰PaM¯‚Àj•+Ï„JõLFšæWO1øï3NÉ­²¡@H×úÚ…Yu0 q|Çw6ló2Œ<„üe>®(¥ät#w^s¬E·Úå*_z7¦õH?¡w_ñÌ?ÚÅ!×Ös·@ÃÝŠ¹‰:7‡'4n‰.¦¢ ]WbhkœñºŽU2—ÑUnà%Z`h̯ío|( wûlõsn½®ytë3"8øT_WQÛ#¨÷!°m‡OíLØi:2 BûáÜrီ]Ü·êAç¿¢ÿuÞcë~‹Å.ÄGØûÞýÒ]®àûPŸ4¿·™Éß'ÕäòqØýà‚÷–<öY™ °R©]<›r·ÖúRŠd¶½6‡-³´… .‡ýíAþeÄqUíûÛU'‹Šì¸9ÌÝÆCr‚Ó¦N­.b}Bïd lÿøÇü1 ZÅ–â›L¾RÇŠ$)gá¬gûU®ÓîÈsX²Ù™ÿIØx­Ä,$QòLAa{%ª‡mŠêÑÕ^m®pÖ|+þj‹¥¦3.êP@Ó÷nîÁ•ê\/) tŽÿв¢"Uc–#y³™ÿÚ’”@ôä ÇÂhâuª<ÎÊ,Íß÷ßgöÖ ,ž‡úÔªí`žÙ±€ 'óýçðȉ"ö ¬ ¼é½ÞÃÈŠNšÑq,Ì<£9ôÔ¦zÏŽ¾¼eÒh¢½<q, Üš–°…—".<Cy>~k%Èø” ×RUy>_÷GS ûÝH.Í‘;O¸$Û­¬Æ nhf¤Nñ{ï9æxK`KÆóãŒó¾Ý'(MEÖú«W|4#òIl¿¸ \¹Žhµ¥KÂzbñd¬åÜ—¶dSógëf ¨”È8D5¡÷‰¢½ÔÌ+b%p#iUE“ðLþÒBX (>H„6ƒoZùÖ¦˜¿ ìYæIõzÀh¦_ÉÝŸƒ7 "‚â̧€@:B] !+í^C!,úY[r±–ŠŸ´64¤¼D;“6”cY8«ô^<ãìΕëíAqSŸÀ6 å”Pµ)Õ’+ ,P¯nU•£Ô:ÊM²œO×Ý؇7«¯ ãTηüm oªBíÒ+­º~’¬4VvWèÈ»{MùwsE£@­W¤ù^T8OAZ W‰­ïÙª„[êÇŒ½¨ðøçS±©! Æ­Z4iµAò€çà‡O‘õF€1w‡ÞÄ D;ŠÜÊPšräö½à–?ëÄùE¨ó:á,ö¨Î:y%KT³§¬(¦ÿ.ûF2SŒœc-\W›`NõÒƒ{BeÓt±å‡`?"g:W=píåuýó¯7øm>ÅŽC|ïj’ HÐp É8| `ªØ÷¤Î“p˜qä#•’ÒSi/‚‰‘MóÌD½|µ”ÚP|-Uó„tŒq-Iå"'ö;ˆûþ;ÐÐûM#¾c‹ÃÓN$ -]¦@‚”Óç(gq=#—(‡ÆS)ŽÿëI$d6!GñÇ”M£=g{’ { \Xqã­“1MéÑÂö‡`‘ã-yâ¿q#Äáj0ý¨ž$]6'H™tÄÉ"÷Ó°*à߈"鲺.1·ó]¡×–g7ñumˆïçCR_\òDÕTݰƪÒߎŒ²H!Ž¿˜uT¢Å]žm…­ye£.å÷J‰_+FôóeÇ›—ÍUu¾dŠ/:¾ ÅÝTD„Ë.IIž'-ÖŠ>µIÙù3Ùüm7´>»RPM™€»îaË¡cPö@Z&5 ¼æDÿìL¶‘â@«Žƒ)xÞY—]O×±×£ýGB›[a0‡ iuuIuîNzõ¯É^~r°˜CŽ£Æ /:ÁJ§”œÔèõý*Ôà%¢dù‰zðhÒ·Ò[Šf7ëÌÄîd H>â û“ù¹•zzl]lÛüÂa³ÆhX4õ©(úª& Ú5s0'† ‘¯_ýÁθQb2® ÖûåX"S)A‘8ŸBn K[*õ²rNH}Åp,äò ¡™Õ<ÁL¡Ç9«ZÂe#ý7µ£µZÚo¥•;d:C%ô±ó'SEÄN¥²Ä¥M_¡Àž¿âäÑͯQ×FDÁP•$§>Ð yM­ï’68Ê®uºñCPʘ˜Õ‡kÕC§r»šš™iŒVK…¹Ú¢þ­k êó&¹‘t¡Z7Ø å4;úë½í†œM ÊϤ›Ô˜Ó²¿~Nqå_¤êÅ›‘¨NœUkêöá$XóœU²ó+šœÊ^Y¡Ü÷ Wpo€á §¡ãÆ6ªÈWÔ)̘ÜwÅ-ÆÇäУ5F;·ÓÚÄÞ+5½júù—AKÑÊ­žd9„…‚áxªjoÏ[Á2º—0)J¿6–âfúÇ*‰‰g®\z“†ŒGòM\¹çÙ âÏ¢4¬¥«L}6^§~⟽4Lõ&‰%3Š”½Â蹉–³èàû’@ŠÓ÷†…ufþgô—1D£´æ±ÿ¡Ô(Ã>¯ÉÖÙ”ŽÍú^óƒ™2\ ?߃R4+f œ+"$OÕÓÒrÊ6•!0Cä²¾ôx0úÕªje(aó<£õötLO­¹çï‘SZ?$]ŠñyÚQZzê—Û#ŽLÄò€àýëR»<;2¬®(JÀ¼Óhgøú™qúÐã£H’a¥|‚nãÖÁHÌ$ì£fô•÷ØZ»T®õ~Š\¨tÝñðÒFLCƒøV }LÎ\- V‰Œ95Wd˜º©„í~Ää\Ö)*{,×`äF…ÉÉh OM”~BÆÚ\ðÈëí6É›T˜ÚñÁȶWÍO¸¿»ðÎÖ ®p‰Â…‘s µ*Žˆ¼@7øÐûzYJM5#QþU[°<ÏÃ<.0C±C‘OÍÕ-59Ñ¿QU,:£ˆ¨Š îÒ*Ô/PÒ>• Ee`ú ‚Dv‘_©;ä)ïZaÄ{'§?ѳ1ŽŸ™Õ!ú€ñX†™`y<®ª1*ã9\=L7O_ ²Ó¢d’$[“.˜ž´W&(fJëøHïá\ÊFQNë’Ù>¸TÒ-B¥Ä†¡C‚ÚÈpFî>rº Üiäµ2!bjñ©ì.°Ø„æ~<û 4¾ž„þ¹¿*«ìùf R2ÈBç "ÒôSçãœþ<Ð;Áã@fݾ/Jk0ãC+ÄÝq5¡1O[„éP¡"9«¼?û÷Oºf¾ýAõ•'²U‚Äà„Ö¹}ú“µhe)¼l4úÄyõVŠRUÌ*L–Þ:5È=µÉÚû_¹JÌ8øqµqT µmu‰Öa²í›!EÄêG QÁ”OW3ÄM‹fB.L;–ìÍÆÄ<¼Å¢4ÿæ0z û Ðü›ëwüíE  Óȸá?Ý=ã«;-÷ý¡ÑbQmÙ̶9@ˆêí;Ô-kÌê‡%;é1  —Ph‘uÞ>Ìéô×a u‰½9.ÌdVrÁÞJ.ö}šP°)×Tj/n@!kºÆýxý^OQ"ëÆ|á}ÊÖ}W>­Á¯ R:˸ƒýÅÉK¥ß÷rL›D+á϶0é'4Ôwž¨ùŸr9°=-à{Äêæwæ9ëv% ž>ÍCGvŒh;Ð!ôw”÷°$yë¨Çg+R£ÝV¿/[0AøÓ¹Ú)†W"㵘+áwp$Õ`ûzz%K-^F—å×3 Åšh©raÝ0oRq28¤«+½Étµ$6> ÄF/ìpžÈ ÈTäÊeIiHcÚ½]G Оç/5ÆV)g#Éä5t DMF½Ã*¯Å”®§Þo†¡ r>êCÀœø¯f™KÅ×ÓiyÅ™ÌA"@L×eU“µÓxM:EÚ÷$[Å·ä»]Ô4Vþ²j$„•JhÀk©ÝëS£ ļ£G#’ùkVµ=A=´†‘y2óRû9«‡èæ£K0ëcÇŠíHŒ¤) )üT`úÙÊ(·~žÒ|XŠÂ.ZÙ7^S¬in«åÉâŒþú¦!ï RêÌšM÷ä@JK-_¡+)¹ëÌEÖ4)åÚG‹À"Iª‰RŒÉs(Á;tJ(ÆÎ’‚aü˜Á@ô~ŒúBù ¾™¹ùZKéº[ q3ïî’¿õ2þ¥ÃõO½ tõ§n͇¡ãÈ‘Á<ù;¢ûRërx¤8ƒ8õU‹] (5=ð½ÂJø7.ÿż±¡&Úƒ­8ûð½§MJLã©á%ëX!ä»ô…Á/¶¹ÄãÖõ ÖkqÌ×bñ«µ×4"aëe2 >ÝÍ÷®Í6Jë˜æ‹Ugœ‚Ölý?!m¡Tò$f–Š ÿÔ‰ öíè~$%Å¿¡ãPNgêÕV„öç Ðò¹-ý@ÊaÜ ýáÎBÖiW†BÚ¼:Ðê§CãÛëb=%ÙàÆJ´‚í¿Ø$à sâõU™4×í»tb¸i|'¡=r´Ç¨“¥¯-óZ…­Ñ/*dMm:7ŠŠ€QhY+<‘æ ¹rk- ù>—å賤,S½èŒÇ1­—nûÇœƒ'š›‰:VÆ(ö)£=¾FJ¼Ýòmbú·‚6¼œ~¡ª°´õ²$w""ãqØJc·&R6 ÑÉd£ùÈÜ1”ƒ+æ£õÎÞë ¤‚k ù¾jî5 dy_”4f|×;‚ZR£O¿gf÷N†&=£©çŽyÈš=´¶Xs&@¥Ô!«øêØ_{Su¨6ÝZ“çr;µa^0x\w±1ªMԪơA4íºc[!¥™T·d¡ezûèÆS0žñ÷áu;Õ„:ó¹ì!ˆÚon"5¨vêø§RÁ¹oª·‘Ñ•^»CÒº©>£óí~e;ïQ9hŠ4³—Qù&y¥ì#kn–äêC´y¡ÒÀü“ F—홋8‰UôDY°Š0‡¥V²©?ÝÁ:ÉK/¥Y5ïóT8Úðf DóY¿B–1ýµn‰% huò‰ZÚO-‡ârƒ¯ì†Gå:›4«èù™YLî³Ô|˜]cl¥ìõýcN†˜­Ú­vÕª;#ÖSø}ˆÇU• }¿ïò”Êó¢Ê_Ÿ×p­uá›Ö‘õd8Á3íë9”tç ´¦Rü•ž½DJ¬=÷o˜.]on®xúðD绵 ÐV<4¥ké* E/buM•ÅÅíFgÀ8£Ûr[½€üˆ¾ÿËÁD†ÑÕ(ÄÚ¸´0VÔàÖˆ--‘‚ –L î̼þæÐ=¾Å1Š}yÕH{8 ¶62K ‘ê¬?f”5þŽÅgÑ‹A]Ù”Pš‡ÿKhG.~ÃsJ®Þîê3„ý»€$§ ±DºÊNq&Ãp9Ž…«•dð^ýE{Å}=ÞГäfD„þË€­˜\PÇX‘ÉF‡'Ž9ró\(»úËu ¿¹ÝYÝSﴹȹ ï¦Eòw’,ýKøÌWŒ~³?q ðÐÿ‰sj ›ßóm´FÕÆõ2äU{óUê2Ø­ÊÜÔ‘ãZÏ1ËLöIÃP? xp§%+ñUõ¨B|z<¢ÿq_-mzê ×-²ÜÁ‡Œž& #ÀŸaÊñŒr“ÿû“Ãmã· ó~ˆ²¯¾ Ë«¥ïä± p8u­šfŒÖ»´W!KÇ1¢C›)œz¦™§…±]}MîôúÆæžÚjORa‰duÈŸX+Í]ã.Á½KÝ>vK=}d{FÑECnrP£Ô;^,÷&75º®Õ4ˆ›/è~¨®ë'f§¹JsÛ\‚Å<ßž#b"ºÎDÅÑ0AÍHò¥>Ð)œžvýW.'nÕz¶¾¡€¾¼O³- Ê ^_ä#÷Â÷omG·p•èÛè¦Ì)G$É8›`æ¡Âü`±óø©Ï¹½A?yô_["Ž¥ëöÑÐr’BÑ9O ˆ Þ;d•Ÿê”íæN¨s{œƒ…hì–Ê(ˆ²–Ssß©±}g_š<\k°ÝaQPÚè-™ÿ±Aj  ú×·|¹Ys¯Ì ‰¶˜¥W¢±Ú™ì4•Ó6ICd×T‚ç …ÑIŒ@=Ô¿!:X¢¾¹ñÕý+¥ÎÄöø¾„8“X–nÚô.Ò'cm6ÁeÒfÛlp ùæ‰ ô'ÁŒNq×BŒ€Ïh\qî Ä‚¿Œz}ë{P›½²RXý£GIŠÎ}ëÂ7Þ-wX™Ê€o¹§/ßÁ:¼x7HŒñk&‰öD\FVEÐMöÜžê™$ÝXPÜv”É—7¦v6zdÇÂG‹“©öÚš@ ؾP&gš<– IkÎ(裬Gì\çÁþ"…tžŽ_:䙨ÒMFG•âøËÌüCÅ 9ZYœß|^Kožè`_#¢hLû³ï¼Øžkõèõ=VæÊtL3{­œ¸Ús/Hƪ&ü«IIÓgÓÐ!Lk©j8o&²Ü€Ë™¥JUaЊ·.9ë„i g_ùþ‚õ›{½t¥¡E<¨'Nµ•Ò³|™A'5QÓ¾ßþˆº·u¸ ì:ÕÌè] ƒn0ê°káþ׼섅ˆÃ­DìT)ᬋP’HúÖÀ~pPÖE¼ÂBìÕ;f{m>½CoRHWk2qU(”¡ª•ÿ>[´–xsl{Å 2„² aßÝ/ 0Åú8þÄ¢àܨ‹Ÿe„Sæl¦ÁHÙ’“-—ӹ䓸îŽE§Špâ…ºŒ½ï$˜h{Ê ».GNâòTßí:嵌ôo]!Õ‘š]&J^>G%1sΚ›õËþ²5…ïXì„°«™Ó7æo+<}äÍ?N?Æ»wzdŽçTI³ñW9—¢…K0õÏ·JhàŽ*勯ÒÅ©Eêh|mÙ/낎jë"8‹¬,3IÝÑy)E4„F¦ËÝE7É‚ãj§yÈÆ…â“xo–ß®r¼m,MæîØñb…9ªDƒIÜã{ª¥z0-·þQ~FóÉÖDoþì[Ç>ú)(ÏEvÜ ­ÿð‹Ð7®“°.ù/©Âë5—/ˆ~Kâ™^èQ–Pe¨‡òÌle"݇Z¸ïÝôŠQ‚ü}„>2Ÿ+,Ù¤ûU4£,–÷¦¢(<ŠuØ=óˆ[eåçB¯’p·» ‡ ;Ãøoéò•åYgQnîÒ?µq^a$åìš÷ý0t‡¸Á¡­€—gùz¼"éîXâa‡C`åž(£ŽJ…Ò5çÞKt[µ¿§gëÌ ¦·D ½'„‰T ÑÎÑ5$Jy*äJnæB »&÷dP"v§=p¬oFºáÎøäx^Ã3eÉt܇Æz­Ïd+ÑV”Aì£\ ë)°A 2ªeÔÂ}Û=±äJ­ßvkÑJóß”y€z:Ž‚+çs‚ 7à–“’`‡}ÃæI¾…„¿9I±ÌŽ¦Ù®”[½€:{ÂlÅjâ¥Í›Ç?½¾]ƒ&忎¬ŠÁ…äeªSµ$¥OÓ2røº/ƒ¯r€¶Ë+¤z^bš§¼ŒÐ«BÍæ~Q\©:Ñ.ky 7ch1xÆB×rÆ:Ûl×ʾØaÖ?¯ÓoBKu™î´º¬LÍþ ~8z $æB?觩벑í"ìÚ.|lªÄDgcî<ƒ?Ù>NÝ \aÄÁg—Kgàènø¶ïçÖù ˜rs­«F!Iˆ“(Bˆcø‘âž'ÿzb¯«K§‘ÆÈõG7C¡—ÙšÓÚtÏö`[E²´<ª7ݶOVÞQRà…AwYM‡²ÿá3C×¢¢í}X®~ß­r¯Õ“@Ómª9,u»ûœtÃjÚ•¹ÃÛQ2g±3`Ö’*/™ØÑ`[Kñ1å¢UUï^nÐp³yNÚà˜Ô 9„°³žÈN¡iÙB<¨­ö}ówý¯M¬)¦ÿ©Ê—ãp±¬pS„ëîƒÏŽ.ÁÛÉPê–'û~ÖŽhå̧—‡’…dqEæµHD߯`Öj·uPÐäZ×Pycö½Rhì½çUlþƒ‰´ÌR¬½´¬÷öuúxŠfp® ¿â(ç} {Í¥ú(ºD3÷kÀj¶oŸ×\ËmVgEí'àÙå=ƒ§§½01rþI ,Òzì²M]RX(¹|±ÛZ@u›À¨ u™`觇>´íȘ·}Ž•H£¸ÏJÍ=±N›G  sø!Ùg‡y12Ε»Ä |ób9.ØWcuËàö –¯€Yž‘b%Ä}31Ë»„l?!P´hŸÀÿˆÃ÷vh’l×Rί8*iPׂ:èxsøu[p³1X•,þB»MìfcÍðú‰€S¶$r-•vç CyÍÅ7R]_“Ñë ^ ¯%ÀËQ’yý•Åä!ßñwUÕᜑëHá|ךãŒÌ®¹ÅŒ`‰‘`ЃՆ§œ²ˆ#h®GíáxWyëxfîôUlòàMÐ“ÍØ?Š”ÂîqíiaqÛäiTÅœ ߹u1¥Z2ƒN™°À|/V]ýjÂs#nbãë[2“µºµËBW×[Õm:ÔJÑU ãHAD\#A3(,ŠyJQ­$ˆª!ljºnBÅØÁ2<¦€Tc Ð‚‘} Û\;D½´O/&‘tžŠ &Syåh OÀ*Ø‘0éÒð ÿ¾uï÷Dš)À"N(ÞÙÈÖD¯ø¯ÖÛ¢¹;x÷βÛ%›$µ¤P}²=„âA¶%"å­Ã€Îò-Æ,˜_èè,·ˆ£ÈGYîÖÁªuea§´ªØ$dwqÈÈ@ù§´£´&Â}Ôv!_Ñ6ŒQhÊ»àp:è%ÒX’ûœ¸XLÖhãñ%fŠÊ…"ûtƒÞÿ— }ÏÞ~‰qR¯Æ¢ïsk“VG…½\'†w>ƒG¿[ojÐÜÓíÄ ‚¾ã&¾h¼Š'f#ÔȨ’ûºMzq¶jž™¬«|`Tíñp+¦æ…`¶}d,ˆæ,6a³ ÄJŽ+QêA¿ jÍÓ£ÿå®L#’_ÚÿÅ$ñæ%W“ám+]hÑÕˆ^ºªÉ°LN»O¥Ñ"ñ)cÊwÎtÒ¿söÊ,¨“lòHÔBþ&¯ Ü©~–óåÚJ‰?xHK© 7.31¢aaÍ×éOütù^×Ô_fBͧD:; ~$ˆ€É£—&w‘ã'%þªk6ÄÒ›­§ÇWé»GqOß°Ç!qÿ¨ùЪ$h¨¤÷šŒÚ0 ’«RØÃÚ‡$Y8¿–<­j”=4ÂC% jÆ´žVÃnÅM¶U> /Ê^qô.&¾«¦a=E¦+#N•åÏZ8yêªlÑ^ÔÂæ²RÜDÿ®Ž"¬0 ·Ë.V=‹‹‚ìemð™¯.ij;ÄêûHÀH˜O¾À£BÜNÎö"<ŠrP]¡G_°Ú¬-J7IxzöJ'~ºÑ¾d¾ ^äa[k’¾N‘J+HvÑŸX^L@ÏLŒ9œ%®~uƒ[™ËÎðÊeál×*Ò¿Èkœ8²±Þ6ÜPZAt.Nu¼CU¥?š}ÒCÂSß1uŽê0QÄ™Žâ?*ì§pyeËɯ·†°c/µÊ“ÿø¼Ž¡p+"³dŠÐÑ$spÀ½ypÞí¸P7žÂlYšî—ÙëG’ísÛ€ 6Š×€ÃÅaŽièŽrõ­Ö¹dÒo3ÎJlE›®æ4Ð;Z³­¢E¶”›WÛ™ÊAãN&`M!Æ& `îÔ›úrÿTPç…'\èÏă)Àš‡qä èØ]iÏ`Å‹˜xN\\svJ …¥{G:gÞÎAV’/2¸ ÔæÜ8Vû/ðë¥K{¿F¯5ó›* Z¯4W˜žJþÐë]šÄÊóI‰ n36•,ݾxȺ‡$³¯c¨Æ§›©ëÇd` ²&k¹ˆ+Á_§¤~žŒ^ÕÎÿ¸‚†Mh=äÀ±Ç ë5uͬ³½ŠnR*X?Æn8Žf¯,ãÿÓ^fmJ×Ä–§¥-‡­®IY÷ÕŽÄ JtZOÜ«(—ŠQLðË"½]ž>Ô-?ÈΟÃo¡£t¨»e=¸iªz»Xe ŒÌ4g©³ ¹ dî @}ãW•ò·E:4Ö9æ¯Ç nb‹©* ØcSY\"Â/c=®iyãv¾‹˜Î¨7ê}‘zöò&1Õ+®Ž ž­ ² }Ñü7\ˆ‚Z.\$›KZþý± ¬q×;bžU … ÏŒlÉÈtÏ–7³ø×FYm¿zK4ôë/Q U³Ùîž¡%0\xŽö€&ëÓKƒvEŽÝvÕ&ÀdÀ–ÚÑ«‡í×ðš~]^C´­ ¶ê;Dµûiuä$¸Ý¥+šoÚ3k…:0ÓW;"lü¤š Œ$Ñ –´­>L#” ˜’<÷| ¬CPÃû’,b¢¸¯ð| E¥Úy U•Ýã‰9ÌGŸØkèÖS#¯®0Ò¼4 Ð^†ÇD6©‡«àkJJëÌ[‹™†‡¾oG¹üs‹±o»½i†? 6ÜàzÍ‹¬eÖѾ¼Ú6°Íî?8ß—~ÛõN¿4ïýENB·ËQG+»šu@iy™óL*ÿ ¡Ho¦#œ¦¸A£|nÐaõÚâf Ô'‘ƒ×–ΡムflÙLo>† ª×þ ÒK]˜Š{¿U&Bž¯à‰ù!ˆ¡/ðŠß0Γ,@©+XE¢#®Aù!pjù‡Ø\¹N·™ç©HÆdøB!]Áyr>ðçì´Ík£Œ¾<Óç=EÛå”I‘ŒßèÚ¸ Ýñ…qáù Þ§*ªûM½|¢ÍÎ $ÇtÚ]IQÛS×§|*>ëëý6ì« ‘oQ¾´¦Ù=k“A EOPÃNÝU3}"¸ÏK\cëâóŒÿH‹ä=ÒžcuÄïöö6l"@é¦h°¤ G}W6ÔKÏ ÀôØäž)%õt§{Z~K†ÇgxÄ`àÅ¿±ç®­ 9K‚oÂ@Ñ©Qy”³ÕsÈ™å_:àÎ~+!u> Sÿ¯lu–|±Žãˆ¯¸Z2" Q¸ÓÝçh¾§ÏÑxýŠ1Gv‘NJºY«€«áý*ÿˆeÉ"i.¶oé†õÿ~â* *,ââ5è… ° ðSŸZ½úÀvnh²G0;GÉQmôéµø «@D¦ŠãõË~1 _D+Ó­K]`ugª? p}P«€*žüþx‡ÙêÈ“vÕÙQoÞœ2óŒ)ÆÓ€ÄQ\vºÅúõ!WªígØp~‰½qUYe´WÜÕ‰,šUM·ù‚x’Þa­ º W¾Ž±YmZ°Kd[±ØÂ[ºAåê$HÙÂÙÛ'tÂUpÏtE>Ë™¼/ô­M§¡]XŽ>37$¡£Ç¼ÐÎ%m·ŸÕ–j²·XûÄ.Sn¿NÁa‘ÿèÜ•­yÂBäÙŸ‡:묲”,‘Uw‰EÉÂõåÑ?v5Èø‘âwøaŽK‹²0ÔìwÍ‚Fa=qümüɭ𧎘qæ™É¤Û§•I53ô“Wêöø|¹ ‚þE"2”£U‹-˜¦šß&~K PQ¹•ô*JCè"땾3G1 °iñìù{N³ƒÌgÇ[#÷™ fs“¢ÔÍYÑí«9x–ýBü! 7eF†Y66[bÉËË/“®Â ¥î¾vøÁG¸“2Hãã™7ê”SâmÚ2èÑ<ì¼LèlþªÀÅG§½øµD Gd¾-)KßÈýÙÏ¿ìṫbÛC}žB}Cˆ«ä/â ö1†z¾•ytÛ˜Œ6ª#yÂxA¬šŸ\èW.:«(`Eçï¼Ø àZÇVšíçàÝøÎçú»™àþ28À^š½ÛjV@ŽóħloÀÊh|g¤ì\Ĩ*_æ_Ûë¤T> Ld¤ßØFL´µF¦LlDD۰Dz#6UE šÀW¯·áqíª±køþü-:´±`$52  öN¿]„Ð~/EÒsO  +âöðW©ÏTGGÚÎ#UÙzÃøÆJ‘¥Ü¿ÚèSw|ãá¼Y AT塘g½Ç„ƒ,ütÔN©Ø…d&ÚnPåǦù¸‡ nð wÖÁ)eÎ&ni MÜŽq©n\ä–g×rY#ئl³yo–71#£d}5ËÊÆÛ£tA´ÈqÁæøP=Ô±}˜”Ñܳg8ðTÕ e¥œ”L99œZùTª=³O½+ˆ^ŸXíûp‚5lÀÝÐQ «¾òÑÄŽÐúfVdØ÷1t­G4.³PËh¨„Qí¥Ô …R¼°Â_¤ø©O¸¹l’ÇE˺æt„…´Ý!)7'úÍó™¿iu°W»TÛxiU½+–]ÌÔVh0jTÊÇŒš±gYâç (SyÁ0tω}ÕigM_çºìs»àé§tjËé#“ŸŒµÄ?óà—%}›<Éššw@l*ÒÝYTUð´»Ø{š‚¦úlró5$Ãï&`ÎDð®Ø(ë”}Ñ/¯&¾4(šÉN×ððÓX{ITŒs&œñãyývYMbºƒŠ±*ky‡åŒ¨üÊ1©¨xv4|=êmØÿüý¯Ù–¥:ª\†XäÒE‰ã±U*IïÁ¼*×YüåzWÝ¢«±Ê­z‡1 {Ϊž/ä,J™ @šÐ,Rðw?·eó'BæÀÒ›Ãa¹°¨ú@%_ã¨dð³AœÆÅã ›,Ž=qHݨAyoZ ´ˆº R¥sÓVÑéô½_×ß+ëësè¡ æ5—Û£W[1Iyñ ;,aÈp2bBð”¨Âc^DæØøwÈ€$@óýÀˆ„×Y»Œ (°"Á¶†~‹É'ˆ»I^*ð(ºnõ/œëÃ]+ë4–NT.Á\¯"B>º œßº„Á·E bøµ~n ³óZCÿð¾õê¬ÿ£U)@t"Ùkk™IéÇ{uYœ+aƒ§ìÎú—Yòbs ^È–êLÉ¿íR†‘Ž›ˆíl´{†m¹RVU‰\•ÂA›†#¤4l¿ó|ðzî8XQÝ6]Y6^ñ…¶“º.a·Dr+SM¶o=±rëýÍÁX^Gz>˜Fu:vL É9®3{g’Gèšà 8?GýÔŒA?þAAwáóp¢¥ ÂÑR½gŸq‡.’K£•ð Â#Ãy%Q|vÓWL€åßø¦Vl$ÂùÜvlÜiäˆßnmí!k²`1÷Ék–~+{×2 k–Ã>.¶] @ÍÝaÝ! îsîÎø/Ya‡ÿ€[Çbz›N­èzØe±]kÝàu[ò*†¡`õ'•\® )ñ ETfÇÀòµzé&LÇ!™7¸¡\Ôt‰-MÑ5 Vô¿_榫Ñs¯‡JÕwr£ŒyžÈ{:Ý—¯¯$wmÝÍæH$ÀNDs~Õ½OÄXüãáä¡.¯ÎE‹=¢Ü”jˆH+‡½Ä ^©Ðíe̸֨1M0¦–~x2›ªñ]]<*âÑøPœg¿ºÉ;’NI÷-v—K¦õ€KøòåÞåUj¸óG©ØŒ¡!mC, ?Ø8!Š Ö–;«ÊÒ‡:Æ=¼@"(αzy+ŠmÛ†çQØð}ba ‹¨J•ñ‚>¯MÍçºÂäè,§ýBãÙ¦¿FšƒZJVAfÙ…ZzrØN ³k‚‹æ°•¨Ô^!À¦Ú˜×ª-¾í+ªíL|Ìö½‘%µO·xCsWMñê²ø(ƒoÇy6¦ÒtM´åžû›g¨Ýàçò+Ùöþï}ü&®¾û)acE&AåcW¬ñ~eµ*˪qšåá^­_³Œ_N”Í—Œ%ÝJv’Ë ?I«–1ÖW› öõÀ„O0ÿªÕy1¤8xï8?\U^ÂŒàó ÿ‘âŠøÇ5G …ÌÊ‹€°¥å&$õÄ0þ;“‹ j\VœdR¨™¾£âoÞ52Ãd}ΈDBËר4[Gì¹w¯’1Á=Œï>&Pš!wí›ËÉ趘ëxó2Þ[ø#ž£}¼GÇõ²¤¬-øÌvt+Ôùf抷4 ã&l­ü%Í ‰BówT93™ÓÕƒØÖ+‡]TSÑÂd3HãYìEZC6X!Cj¸¶épÕŽ¦Œ-a£¤`ó”+6ÂyâòÎ6ÜAgeôH$÷ÇÙ{ð4UǪ`ú×TµéÔ5¥ „·]“Ž@ÏÝm‘\ÿî! *+¡K2ËØnÁ¢Æ¥G’pnc±Â7!¯äš Í4…<1@Œn”ãÕÍoeDwžX€‡%—‡¢Þ2œoÿžÅÁDV<°ºP+UÑ×`‹Íxó@Bè &ŒÎÙaí÷2î–O»éF˜¿È'–3knßÀªmwæ<\ˆoJðžé aO«”Â’v+›Hõ&Úñ_ y`ZâùæV,DKùì¦Ïê0kiøQÈd«å½@œyýý~›D×]økùAVÂ9@Ðj”C`ÿ§U°—JÒÝR¸´Qcâ!&-gM—p#Òov;Õ½—t Cb‚àgböé!UQçR‹·'ZO`Ïqš?Þ„Î}ö¢i@ñ'݃ŸÒâ(Ã쑽P09)ÓVÜQ[T8xÈü³,q®ž$¯G*Ì€ öõ&ÉI´K¤õ±•—C@eÿ¶ššŽã† Ù¬›Ì[œZF+ß­ãkwð¬ÃZ,À9gPÏrB^¡y˜S7¾û kv=clø™g\JhsãhÊ«Œw3s`z SÕÔ¸M¬Â#`M˜Ú±ò=@íÄáðj³1Ësó<ùvÇì™Û²èpNÝ ;5E=à깜ó&kµhŒ·©ñ‹(åÞ](z Ê™M¥©Ó´Ù5xˆÈéH#)Í×úÀ8yGí#ŸçF™Sìîÿim̹ˆw S‘7ëýÚÞßO à[°Ñè/P¼“ñ©ØmHb>*Ü#ØkM½/w 2ã¶Ùê,ËÉ±È }œÑPìÚn¡b$Æ*¶ÿ;Y¦åz.Kqöpì’Ö«Ýš&k¶'}3=õÝ]CWETØr+î<ù6©—Ä¿È[·«`PáféNnº"KÑï2„8 4 :K)Ÿ%˜¿f¾ !;á…äöôµNîõ1ÞÇ.¾¢ì>,Ù¶ªfœ e•ÓúGCUy¤i©j?(ÍòÞ&¦aÎÚØô´¸X>¨å Ìö;¦As‡5+C‹ôIÑóÄÝÀIÒþYëê%F•z9¬GþøGï<\á”x›y:(‚Žâ†®H+²_†0—‰ô‚ækòÉ•7ÉL C0=æ`™!á»oŪ1à@³2¾¼$"uZª±J™Ž¨-P(Œ-h´’\t‚AÙôgßóew!O÷n²¢§d«xYs°ÐúÑÀ˲1+Ïb†f·!BE‚Íǰåjz˜ äE¯ÞŠä2O££’ º—:€Ô: ¶ôã0}ŠDlìrŠÆ Ôq G5­Œx¸‘dûþ bFÿPK;j´~l#~6FÉ'½Ì$!c°ª//Ï Sîìó"''CŒÞÛl\š¦‰ïmpà?èOù JüY¥ûÒÍÏŠ d ûD&¨`´z¹›ÝŠ<ÙaR-U¬Ä]ÆejþsÉàG¢ ŒZ:‘ÎZ* ­YÌ2LUZV¯P9|°™1I UäýÐó¾9§”Ÿœ qypgl Ðrvú ùÀæÒãDÆr66b’É&0Ñúˆ½YÏ¢Šg@ÿåfõiZ{H>rÒ9CPó˜ëŽ­ì×`s›RŒôCªê®÷ *=JI¿Üæ“hÂ_ ñW5tõÓ!øö©Ą̈{8÷X³4Îz†ê4þ•²*2¶Ë²áÚÚ¦Dposÿ+¥`T&ˆÃ"ƽˆÄˆ<ÌÃà¢x·l%¸âvßq¶?åÕR±kÈ ?†8-”C=à?|lÊ|8–þò˜vÝö½õi€bûÂü˜³›T±>‡Ô;×$qø¥Q1Õ–Û¨ÊT ?9ìœ2¯O/½öbar§ðÑ×ñ€œ È=LÕ˜-~]ï«~@9±ÅÓo È F ±S> ¤ÏV|ÜŒË;¾o_:’ñ†-ݹÓ~Šþ©­<³¥ãÉ /ÜÐ)Û©÷u®i9¼BU p‘׎2Þ3ý¶¾•ÂÏZ8a~× Jèi€ÚÞr$cÎsòx8p¹EôÓb§gmC¦ñÎI3Ä~æö;1V®©ýX.a×J|p “! úÍÉéëfû·„׌«‘PÞ<®}Ç›v›W3âÉÛ õØz66$iZ|ºôÌO9œàÝ\û¾*2m“a™Êa"eœ¯ôõVh‘,Â~os+gÊ•J xÉš„öOjM‘Æï1ØŠÑe¸GódÂ/>œŒ¯šÕ+")ŸDLB›Õ²Qæå/=ŒK_YfX –™áMÐ>˜\€ MdGM¨ÃXF öÓ¿aæp¡¼Û¬¼‡ìbˆ# )9²ðzG¯þ¶ ØA–µDZùÌËþÜÀ jx{,¬÷é…}€P8†áÌW…¦Þ-×-~ƒ¬°Î ت‚1Čŗøö|â)q ‘„ÃNë¼&~äâ¸qC—ÂËî=ŒætJ9*Rl6>™Pµˆð¶Ù8 Ù;ÍûZÄœï…ø´è¦F˜ŸuåîaÐo“Щbõ1 Êd‹†F>¤gáÐ…@@áeJæzÄò䊱œï®ydHüW^òmo_ÌMLíý§çÄJM7d~ˆ* ~b@ö|µiøkã¢U²…rëKTDÝë† “ÿjIì~¥‹"mävrn=›E DeLÓ³ùk%µ À±Š HñV-ôä>$ËYÞÎU¦Ê/Ã~¡2D¥à8‡ðºe¹ñ°\c󈣨Ž_yŒ®žŽÁ?OŒ®Ê#Ú,"àqÀêW,.â8ñ»Æ“Ì'”wR‡ gôT‹–Þ$[ˆö¼ŽR¯]6º›!QžsÒ?é'ÎSïIaãîð3mB^v ø|/ýð¶’ž7]iz.ªŸìôí9­fÕ“Ïp›©h%Ý=ò ÓÂôb÷@•Î!JòåUÁ‘0àãü!ØLœŽ/ðÐjå›\ßY(æÛ†(3NùA”ƒ.È(§Æÿ×âT˜Ó›^'c¥´=ë¶ÿ —>?xå´æ³¼žšêDÒ#ؼU’úLο÷̨CÚÇ®¾95¸w)LUovÌ àbòlzã€K®ïª9A%kÓ— ®ƒé¶dÿîE+6þ igØÑ÷¦Æ%ÖÐ Ý3 +ν‹€ ù—ßö¶E`b´Çyø¾tª±aq„Z¢V7«^é¤Öcìûs SnºÌ!¬•Ìl™ÊEÆ’ Óç®´³bV©JJ¹«h?Ï7ˆâ´P‚m!b§aDõOug(…PcŸ|.ÊÌw@ÇXÆóû‘½vfö¶XuĨ¬fÞ±óÅí³àÛÅ3âÅ“¡z2Á]BŠ“j„ÆÜ˜„ÚwËnг— Û¦ÿÕP:m™Ûè<݉y¯ì :º¢§¦Ðø‚pà@ð̨‚j‰£ÎÖÆäÊÐÿ@9ÒãïÔÝ^nÃ4¯Iá‡^GZlNçóT€1†Ì’!Ì–•Ê™õ'ÅâÆËk+–Ó¢øV§+-: V¡ÃÒš¶ä0ÓtûÀz:Ñ Ø«\»ß-¨…õÿo° M¿ÕuÏš…ª0Èhy ?6o ¬0ƒk—¾åC|~©}íëR”/á5Öf]4~jIÈ,]çs·ìí ¨\Ú4Á÷Äj‹®¬æÍÂ÷÷Ü>Äÿ‚ê>î¾›Œ›ñÒñ?2ýÛÛ}H®¬[ cx ‡>5ª¤9ÓˆNצàÎë[ÃiŸ|Ò&ú+¢žÅ“;k¢\ºó탅zˆ½ Ä~ÊYÐI7 ן`´ñèé Óò<‡Ž ã$6Sê$b^Þ7kÿ@yöðo[ýålµ*‰Ý’„aî’çw]¢¹n0Ù¯×Q糖¨C‚AlðåÆz¸rVÀÿ‚rÜ&»FXu ÄR€¤•Ê¢j¶ŸÜ$/„ýCÝ@b+ÉÊ7Wì·2bTÏÈXàë”Äw„ŒßrV?ÀT:¡µcɶ|M68ÊtBûé?è©ÇÁM¢(lQßQbS[5C²쇠g×V{$~üι¢{‹A˜K””  [GœËªid>‹IÖxdzà çͤ'ñßÜÇaí,ú ZRCØIíY£SๅƒÕ>t<'«ÀÏ{ÇŦ/C‘ß½$(­=dôq¼¬+áç;WO¥®•„_€¼ ³¢DBüÏv}ð¦&ï@DÂþ¹9)'Í OÛ±´î¶¬ß’^ƒjúù8¤qؼ µ (h,Iôi÷ÉaòÑž…Hú5NÌcå\Þ;ÿ„“|ÝdÁÕ*ñ0›Ç€°8„u»–ˆ1~UÇïxÌÃxsûà6Ü%çi)¬/1Õ{¿pk‹™aÑPñ¿Çê*.º¤•â&Ûw“Ÿ6€òƒàz‹•!ÿÄPÂ5öIÕ‰Yæ|ˆHÓ@Tü—ÛÚÀLrg•€+Ó'¦/:Øø†ËúÒK~é!p¾Q”…Gj’À՟ß…r®eU«…1X]Ó7!ÈÊCV¶3ŽØo¡;ºp_M,4®7 tÜdáED…œ¡ Q®#i[o±É»k>ñæ£áw`=J!ê'ö¡™!±P¤\ޏ†J¸Ç½’ÏwƒæDSz¤§ä|í:æOV ƒ†®GÇ„f/>fŽÍÖ…dá8IÂÞ--Ú5UT5a·:Y”ĺ=kº’ŸŠ“2ùkf¾ "ÄWûÜÙÇæ2’˜‘)õð"Ô|ËдŸŽü>ýE¨É?‹ú½yÏpóâwf#Ÿau@fÓtFy<`÷Ðɉ¾EW°IãT‡ÿ‹Y² ¨2\¢ýeËSsÎ"ôú<Å’SòÐÅ5!ÒÒ%8Ò{«9, ÒnØÙò*V|+ ùqÅɼ³Ù%{êå‡ñ|1a¿†Z!Y¡qÕGE–ì !óâ?.un☀¯ä¦2bâ`ñE”ir·ƒ-Ý's(üÙ»&C"©çÝóþ”–^¶ß2’k’ug”ºÂHoôÅÊ\ŒTâæ2b‡¶ IÿÖÀã´™rù‡ž“MR…]@j{JÍ'Ô’Mþ©ó’jZA&›c7ξ еÀ}è–vjíT.Ú‰*|!õøõ'ùˆì½'ÚX>¶ÝfŒ ݨ‚§Ýžš–³¢Â»¹îÀ¿¿c õY‹bi@@0ÂÁ`ãú¤J˜,)hjL24ülj¹ÐÒj—N³:žóà™àô¿Ñù )ÈB„fžªC»|S`þ’oAîî[Ô”± [ÙÐ,=)sŸÖsiGz¹ÝÞ†ý€i×r (ø¢ó;/;^Êóæß%Í®ùÖ¥yô+}\|"(ËýQ~ß÷Q( ÃP"ÝLçAC/\µ+“LpÕvÝúê‡ÃÁ4ÄNÁ¾:7\݇dˆÑw+á'чRбÌ{3«bЦDg÷¢­¿ÎW‘3=½æÅ€×V Ü2ü¡rÁöòiB´µhn˜OÆc¦‚-š1£€ˆkZ̽›K†¡¹l‘~ZÓ×&Ò!šàáåY®JèõŽ[BeŒÅÏ´†#GÅ“èd¹û:™c(±–Oò+£ÑºÔ‰‰/ªþ*ÉFêhÅ“ÕÁ rS{¬6rÈÐPôTÝNl/1e˰tvB¯ã¯ðË\œÇ.¶¤™Šôå¿CºÃBxÕäþVcó…Óu‡»å/#¾!ÌmÜ>xƠئs1CѸ@êÁh cHM=}k[±FB`2G*ƒÊÆ24EM"Œ Xk¬´äê ?¬u*ø–WIºÎ¨2s›¹'ž?×kì¢G£xöÆOø9ñò!œU%tˆ š §xD)Ù~g¾¢ºÀ­&ùxËj þ·¿¢-ݱSr‹ÁaWÍ“ÐP›¾cÚr_ú|1Ž xfbH©f0síhóê8EýëP-t¡>LøRÚÆ¢±Æ SÉuç”dÇ¢#g_”"ÕuÝ †µùUö;¥ÿKýätùÏG<½føÞHÆoû¤4•_`¡…À…ü¨C—˜è©.ŽuÜ÷1ÝÅ1~Èœ ± ¶$OÊo*HîŒâ†Êê{ H(€n$]»ª«‰™ÁÞsAôt€_!j÷‡šID× ×sNA †èCÈ›^‡ŽM–…œðÿ‡‹o‰JF†i÷xqg¥éOÐHÕµ òP…YÝ@TLmPb®Š~1w¯‡{âžéƽۋŒìCƒsÎCpßÈ9ó2š¯yÞɰ4b@Nî)@óƒ©Ë:67ÚwÈû*Nª¸À±E(Ÿ?°4Jý y(rÇ"h©»Wè?¾‹ÃÍ(‰…û¸!»Ë´B¶A|âùm‹F6Aíž—QFs„ʉ¸o­NT¸E.ðÎbáÉÌ^ÆdÐv–¼ßC´BJÛ%dûq? |có¬gp{øïõÖÙÓì „ˆ C«úâRÙµD}2·…Bü™€¤h2ëê3fê­k^H¸3Æ|žÝ@&å¡ [ÇF}#_¹ÆÜî®&i|¤‚K)trM&ŠDÜoÌ÷ËYi6yç^ó´Û+)& (g¹ÎÎgnl‚­3ê˜À¿šÔ¥¸çêPÑÒKv[lÄ áÙFt¢<û-wÈÛ0Üö>‡LÁϹJØÙS=9YW¢1%À#ãslï¨r “ ÃÉ ‡HÞk þM´Us™OÀãæ‘$“m£kÇ$äø¹Ådóá,á?&処 üš‘ÄŵxÀwâ§ŒMæ’ÌS¦p1€NÈaÔxÇ[Qzê;,³ô?Eþ«Huý·¢>¾<Ý ÿîšWDøÈ@Œ½m-öóºWbo^{™ ÇU%5>˜àÁÁ½[¨:P¾ÂUE"_*dÈGáü¶¶60¨+;Ic" ýéÇsóq.#ÈjØx€O¬êÛZeFÉ[®;È̳ð°öá¬-y+·êx½J `ó¨/—Œý²pú"bÌÍB“œô²œè¼’†ûÁ[~ÎÓ©,m{ùÓÀ(íDÙKºÀnˆœñAê LB·0Õ-”/‰š3|ìèã%’¼eK ýÕèkDGê3î»VäÄü*šÜVçØmÝÛl)“ÃÊ’7#>ÿ!ßÌO»MÏ»•TE(‚2êUCâHs`zÒ4\8~ï]b#siP x{lj¼`²ù…@ J€,lU)a59Ÿ¥•Ê%ãøËâÊrØœpŠ`p® ý•”:c>eZÆCÃåj;†]c`Ñs©m+5«¸£l.ÿßše'‹ ˆ^Íø£Šá¢$ªm7Qÿjë½²ƒFLIµDK¤÷ÒÙw ígLXÕ…ñZ–>’ƒ”žÜÒãæ:Æ‚añ†p“¹ìÐy¦Dñ¹¨Tg.™÷D@¦KàØÓzaÍwbübecÎÕ{ÌØ`hÛtƒ§ü2Q÷iº¿ö0C´­¦ßà-áÃŽ¸¡Æ&€œk5½Áêš'ÌŒsš·‚rÈˈ}›_ãñ8Ï RÜ;.®îª!å¶­QS$îi+v"×.Œ2 3Û ¥+•OÉÇ=.ÿ6¬.¢ÖF&ªœ[€j,¹ê¶Ÿk¶=DZ 6ç`Ð$LrmÇ’Ó˜eX‰í‡‹é´àzß7´#ì|ß*†‡¡¦h÷´ˆ{E)[Œ/®ë½ìTºê›Œ"A(™ƒY»ÀÖÞYvÏçóté˜Óƽåaûp©oµJƳ3e"”œáó¡"†,‘” é å£mr<¹ÔhL¡.‚{P0@;Àq_»³ÒÑMÛ®Š¼{˜ ßMd’ƒ4ßü…àó.\¨Ç¿DëÎ0 ˦±óÔKn¸®–%Hqŧ'x©¼bÜ ¢]¸&ún'8ý@ІŽù:É,›}nGB·Fsœ:Sµº·gé*úG±1 £˜=]à/ªJ¯-7ô-ìÉ>\¢Éè\6‚Ç[Òé¢=C®Óà*äþ5ga?ÝΠMà­§Ñhª$qX:I°Äqô¨]C³)'; gˆEÞÔQërй(ý}l(İp+ãÜ÷ÔÐÚܲ+BØáT=úLÓbé•3”ÄnÇÁ?¢eG´ŠT×ðJ‰V9aœºœ=4JUŽ-i2ÆŽ­“Óg.å¼A’n…i†Á¸š™¡$‘'ÿHÔ‘)uSUÁ6T¾•¯»œôô¼Œ v} 3jQ%¬•:{}Q‘GáÝð^ÁBðK>4V‚Ó®N‰cNm¡µ%º«Þ«mšÄ‘_ØË‘Ö¤ÁÊ•œ–yá;–ß‚kVs—ñDŒ~¡öļ³ÁnÓ¿ÁªìÇÁð©k¸3ZA#FÖ:½6dB¨‘^ÎåÇŠì…”UƒèŽg®™fõzrá'¥­mÈïnÄíiÂ^|͘jCÌY QoK ^²ßn³¨ê§.aÆÌziËU 縅º»ñRšY‰ëgÀ"­<ÕäÚZýÂöð%¤ë¶àåÜãŠW".Ü‘êT rI$;L²€ÐIAj§¨‘K$†ŸMë¬å Ç=]ÜqXRÄ.?‹¸,}›­ø±Ú2"’½¬\hl¥ W²4Š$ŠùÀéÅÁÌ ™Å§¡Tsäã¼ÂaÙÚ¹ššÒ.F&½{·U²Q˜WXÞMôøé;ŠHÃf‰€±ùÝb²(ÇÀP…ìV]‚” ÏôßÐVÜ&8­^±Is»eÛVCÀìÓéK : Æp¼ñóæUÎîÚç<*«žë®¡ã+»ˆi-ž£* ;WôRú5wy˜óú‚g.E3³i·Ë”ÿ whtÐD?6Q1yÀ‡±´±¹5éBÐ%ï™8ÝIy ¨oóø]­KN~"XqßMd’ŽBÎ9•£ÕÊÈVg?dŠ:ßêÚNð²É “¨3ÛÇÊ  ,U›Ï6rVã|*õôß5'›ª!n™ëûè¬Ji¢ <¾*X'âËú¨Ó&™±Ý¾•뙄µRÞíõ-Ï/LcÈÎ*a'›4'ŒLîF§Dû5iH}M…âiqäsÍ?¦>€ÇP…¨¥MB>CKóE“ÖÓÃæÍ¹ñl Qšösi ˆCÇÕ@¿*?ÛIÑOíë˜ãwÙ¹ÝCÃl¯¡¶T„êþ ’ ÙÔ ‰+7äÕ ïD8Ó2°ñüùÄW[‚*„:¯°é6*²×…rˆ¸ 3'ƒ ƒìªZ–Sèb*(p¬OyºIמRMVŽ…´¦LY>a 6ë‘—‹°¹Šìæ`‚-H…ÈöÉ´h3ó:ÙÙãÌ®ÂY^ô‡¢}ϼi‡ZXß¿zVDÑkí·ÄÍÅVeþ@ìöOªïØt#QÄ>ö#Q\@ZSÛÏE™1˜ˆ ™Œ™á„gw‚t~¬¥ØÝÕ`k碖e¤O‘Ñ®Çî<ÝŸ~¨~»àW(ÛŽÜ#€h'Î,Ô œ­^ìêÈÓq¢m³©Œ÷ÓW< ðÙÂSýûp/÷ùÁB`YA­t¸¥ÅšöÒ‚ hñZw» ' $Š?y_¯•5î·1PÖSó¯>²±€¾"›~ç67rÖ}Rjµ\êÝ·²M{ûþ‰³Ñnj… ¥ªAb!L'´[ĦÛiáÉäK"í{IY—ãcëL¤y;sÒªÐÇ$ï¤Þ7JïÔ³'§:Òüö@'Ÿrh•ìôqlŠA‚½eΡî;T´G(^GoR’Eb4‘j«©éÖ˦–è_©‚¹äÏxs)Hg«¡ L↎ë×Ì•Ü#?Ä»(!ji ç$K’H©·e¾k€>Î}*þ|Ø.G²ã^e¦}µ\U„ûê×ûè!¸KÜw˜˜!]eêhìÆk)E4{Q8û·!åW¡Lûwì°D¸¨–ƒƒäcÝòr%¦Îho‡–ÉeÁýà}ئ|ÁfÞêÿÃL‰ÔDÁÊ2ókÚKÏø1û-¢úAÛ`š^€÷DTÔ¡¨Bϳ^¥k<œÌÕ½¡e¦¦ÕG—jˆpaˆ9¤Ú€ABªÙáÁëѸ²wùyÒÀžÚö/ŠÛå‹9нþü™v5YÅ~Ï¿/Æ…¨Qu\†Ë'ªÄÜŽ‰']qà—U‰i×2©/f¶’çºsJ¼µÜ!—é÷±êï¨Ê¬‹UŒ5ê« Ä®g}3~8äA;Û0\²ýwEݶ™†_+\M§ã6ío‰ôcôF– .-↿€«åå¢îoŽKÍ cÏ,ºÄÔdï™é CElez‡nÂöc`jg-¤v£ðÏ29˜è>uÐqûcÄ«ï7gm£†>{eF‘›‡he¿wˆHñead8­‹Œ×ÇnП·oë{1Sò¢ sm¯¡Å›­¼2G/ÐúÃåHëª „VW=Rç µ+¢øÝˆË4Cnžd'n’VL3²C56¼íЀ-p–̘*;ËBnàÂÛyOâÈ2 ü`²‚op(ë«^Pï×ZµÙø—ã^ÈÞ‹¡Ï‡Œ{ÙòO£Yõp¯?Êç3fnåR픲Ku?’¹ö°6¯^ñ·€ebùâ K`®BøNé—cI0_Xàü Êuµ¡;!ªÐŠsäjŒ.–S‹[ï¼WóSZád1¤#"Ùf›ÈŒ¸™Ücb)pÄvÜ€„úx@=ØRŠN¦ruÿþ†T< áÐ>mmd «ÿ˜sqÏY¾ß5+þ= =Aªœëû½;ßÒñCcÂâ·òVH_¬.Ý!péi £ŒÃs÷ZÜ»öv±VMÉ1Âø]®S,¥F}rõ#‘>ì, …®»²†±É4¨§·«¢-˃ªÇöÜE±îó5§+4ÝV‰7'£¦d¯‚ã17èõÜ+ÙÌÉBÚL0{eTy>•ÿYŽ#ú!C£Ü`Z½v¼ $çÃ9í2”£¹î(i¹Óá닦~:oK\³ªTÞ¸Vä*až°÷›^èqèZSÔrº×KyVI¨Íö€dà‹5Âk»”V‡~3ÿÚl%Y«‘w³Eű1)æŸVÿnƒ*æhðåxò¬•¥^“øÔƒl¢µ¿±I@±—9ÏoT€€`†ÓÙÕæ}ŽoP(ƒž÷¼ùOE¡G¿Æ‘ŒX™hó™ð¹¤»*b_<ï\¤ª¾ K  âFšòÌ^ô-Û=ØèG†/Àuù!(~ñïyÓŽu(¡® GètvŽ]óªB¶^ú¢öfZH¡î1âu.~¬»º.ÓÝ >DêÏ,Ø·¸©w²Þbö¦]‚M=Õ€_¦À÷ÒbÞù±ü²ÇfÇR5~Ù0KY ”6 E©væì~}ƒ*<,&”å`)I ë—ÔB9…à•`T¢Yù²AúL8¤Å¿±¾Ç͇ˆA9D†×5®÷B§xe7ó°úИ0›pëªÊÏÛ†}½¸Á³ÜÛv½£ñv­UÑõ‰¢&ÔßX­vŒ~‡ñ¥¨,6Ë À)"}ýz .‚eQfY¼dä"lþe@†\ÜüQ¨¾È%™ázþ,¡?`KEs{‘¤ˆÇƒÑ÷&Üyõãê¶i‹ínÚlȈLœ¥+Päí1‰ƒ]”Þpöˆ= ÀcÕ#·*þ¤Oà›ª3ï°üK-vz…EL "5éâL?:}ÕÐ>LX¾ZFÉ0ŒØ×"®9ª)ÿph7LÞ ¬ +-;TêµÐýÞ0û!¦Ùóíæ «”‡6M+vѵš:oñ0+ãv¤5áœWHš‰'4¡^¯Q¾³Ji—º!ÒØ]ma2q]sj»tš ºÝÉé¹€ÚÈkJ¦OÑ[M· hsS¹õéïA­7ºtoJ{4õ#Â_µ,r…_KG³|2 Q¶§ÞOƒÈ"‹é#Ö½í¿L§R œ>)¼°Ÿ®É,²—£#tÃêúôúhrg‚jòT sð?0K2žÄÚÎNŸ¥V¼¡€y‰ß¤•MA'ÝÑÓ<Äâ–ÅÊ?LǨÆJá(ÿjÂB¯ßjžÃ•˜_]•Ié’!y‰è/óMB‹.çÎ !C ×Äót3«iù6ú]TÅPïÁÓWp\˲]Œ…¡Á–s ]}nÙã*²ý¦¬È Âí1à͘`SØ­ÐbáòÓ¡Rð§"”ã‘9^")Q^§)ZÐÈ{ýÒ_©RR²V8ŠV6*AZ¡F(¾ƒ@ßð1ž5ØÖPu¯-¯çoê¶?Æ‚If»GtÅ]E‰‘‰X35÷©cSA ´d^ÿš°OO¥;|?.ô¹&ËŽæ^$¦W·2ùx)¸x÷C óZ…$XÌ$#þ¸ÝÏ2ÙB‘)Gg*F°:ÖŸvŽn)´¦<ÎS±t¶·þ¦¬B‰¶*)´–ëªÎ€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/_eb_____.pfb0000664000175000017500000010506113607302650022464 0ustar rptlabrptlab00000000000000€Z%!PS-AdobeFont-1.0: TimesNewRomanPS-BoldMT 001.002 %%CreationDate: Thu Feb 4 15:35:30 1999 %%VMusage: 31834 38770 %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype %% Corporation. All Rights Reserved. %% Times New Roman is a trademark of the Monotype Corporation, registered in the %% US Patent and Trademark Office and may be registered in certain other %% jurisdictions. 11 dict begin /FontInfo 10 dict dup begin /version (001.002) readonly def /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Times New Roman PS Bold) readonly def /FamilyName (Times New Roman PS) readonly def /Weight (Bold) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesNewRomanPS-BoldMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44337 def /FontBBox{-180 -250 1008 889}readonly def currentdict end currentfile eexec €¯‚„˜shˆÉÖÌ[L4¾ *rã‡Öç¥a¢}‚¡è»!y£ÔëòÜø[×RIWá!"µñ €™2aC':½ø6 ÞÆ@Ä5—MOÂ*ø²E·l¢(nbî-4BC@E×uûÝ[zŒ”@ßúF<5÷IÅ襼zõ ©¹.!“ôÈãÚ·%ìþƒˆ÷r+IXé…á^†òÜvËð oòÓà±h?œüÿ" ¾LÞ²ºÀ®ðÃ1A þCÛ”·3-]¿¥ÖÕYÕA¹°;èÍŒ‚ƒŸ÷ç*èbà·ñˆ‡µ]Á¯ùÚ[ Å¡ƒq—.:R3QRྠ¬÷ß¿ÕÙH*Ý/½qZ„AXîáqȤҵa9Ë?ºÖ˃ç¿ïØÊ»(%Z-¨æš3L¡‡¥+þq“P‚5äׯ=Rt.½8™÷r²sÓÜK÷&kÃ|ªbüøë Q©¡y$ÞÈðA>)pÒkýwA/¨}°ˆœ¤ê~©Œ8®¬ÉñªV+K±^ÒŠ{9 4¹¾D{ø%oZ–ÊõÊ,ú®œØçÿÏPÎL¿;`ŸçB?_Þ '½4†I1’9µ¿U‰plï|hVÖ§>È‘ÿ~Gµ5°®Y¬—Ø pUÙ{’1Фex„å®Ê wuÊÇá^ì0ȧþê›L3sfDÝF> rBai¬FÜB‰2<8¸4~ú<ÛŒl¡Á-Òºæ¬rC©|¾Ò­?èiPp9?94cÂchè÷3ÃvôQ¹& ÿmÈ'øë).QŒq³Œ{ù•v;géÔS²•‘<€1­lý7ä»7v#, ~žà਒çÌDÖ ÅkëaözùœÚXOPà’+éPöyw¥(Îc  ³ê5 ‚}ÆõÇQµ·*@•©h;Tò+–|9Í|Úå)¯¨%¿'ã¿e¥ ±]„œ8Ä/¤¼m:›ÆÛŠ­À”¥±ÏGƒ—á³o"¬ùš@:¢ŠyfX))¿Òl[œz¬Ð€™˜ñ0s0 î‚êvƒ œnvr;¥ÑŸÈž Ô8*µ„äµD K…ö¤Q²ÒÚ\˜ÊؾŸµî£?;· =\6ר×ÀõUó§ ¹øÚô§H Cøz(ä»òÂ&àÂFM•Š£TÖ?m°âæxÉ­ß ]U«&…%ô<Ÿ¨‰žAø8ÕzÿMÎÆº4ùÐÂöd‹ð£¯°CNxëGqI­;– ^(ß r»µôÝgÝx õ¸…³œ(;Yè>~ù!¦ä ìóæ?5©É.ö¢3­´ð-Ô³Ód·U ²ñÅ“Wò(ö’-¡P¥”Â4þ×·D7¸fÛtõyKÈuÇ”üD¨@'#õ!vjL±P|Þ¾YÔÐ ƒÞÖ‚DMEª m'ÀgAðöKáRF¨|æMw‘èY aVËiò'V&µƒÙ™ˆAa`yÅ“ª±0ìi#µÕðHõÅ•Ï'•ëròÇFïÆƒ’éìJåeÙÖy„“ÑT$åz¤ª–î˜.x·¬Ó–4ªè¶ëpÆ6Ãù@86‰II¿&AÈÃ]ZóiÃÁ o‹Âû³¿G­¯sµ°eE<¶ ç†^І,¥%Išö·Í’´’¾`’D=4µ„@Ó?²“ËFuYá2‹ÂéPÉZ[µ~ÂÍ6@åÇ9‹9èn¬“˜¾à;Xö†£ïåuvè Mz'«*ÔÃFWxÝ<ôC;xc»—ˆíì>%9Z'£v¦øaB}æQÞ« ÄüЧ¼s½uÂk8ÒÍä“f…PšJÎEGd™2V¨íï8e·çÂ[´1ŒŠþ˜Ÿå ‚Cm_„MÙ©ªw-Yð˜yc°0<1—"<˜¢G†÷½3fÿq–2„p˜E Íò¶ëGs7«6îÐe|ñ ÂiÇQ«,[a*GgKõl¤ìñ«H…ñÛŠ&V¬FòÉOÁ÷Ê ™ooÛC âW&[NMŠBŠGdþ×BË”ã¦ùñ*½|ãaù¹¬9Eëy¨Ç°šô„…ëASpØë òÀ”°]¦rÜ0×VìYqÏeto¬VŸ¤/µ–$înô¨µù”ôw»µ8¿ñBÚg)Èσ»ºoç!ËÓ +:ƒ£ ª,ßW¹üoLIéù'Í_‰ÞVó#±žøæ×jØ„áÞå9ˆq¬46ûʳ¸ÜÑZŠ"Ü­`äÏYÞµîüÌ^þ–)Ÿ{¼~Îûòmâ8Ñ/ƒ·€ÿ}ÅŒt£üs4°–ÝnŠß¬Ë1˜Þ¥":‘pÄ‚2 ßKf¼>àîÉ"(‰ìSžßÖ†.e¹ ryNkŸcÛuû ãëÞÏIyu %sy£Å­ 2cRú朚9ñ°@îµoc®vºÎÇ NŸü)¤º]ÂR`†Šq½ h쿸rYë¸x¸_.@`PŸT³ _Ï0õAWgíâ¿ûa­-³6€üsý±ÜíE.yo-qÔô¯øC‘œ Ÿ4³?~Eð1*O%ñõ‹¾ØM ®êŠ*XG‡”SkÕÝæ@ôþ iÛØŠ0;¤àŸÜ=\±GA7¶|šïFO½ØÜB›EDQ $°9ž—Æ[DZøý­D\ ¥Üä…2ŽÎþŠ©âö2Ì(žÒ úÌöSÍ­ÒÙÚ ÍC0ûë)ŒÃÄÝsé5ÿ ¢´Ù8Q2ÇoÉØô1ô €ôõ¤Ð7`&tš6þ±È Ó³WÕ€ybßcP(CÐä3BüíÊEšrÀŸ‰*²”°›8„ÏÖÊaÞYx]ö`~õ¬³’°BÈzþѸþMý̘àÑÄÕxGt6Î΀ |DÄ¿ÒÎvùâŽLœfý8Mï×dÒy5MYõøÅü{™ô}!g…éü¦Khåü.?q›ÇVŸLˆ)º„ó ŸNÁ¬¤ŸèB¿ËR¬’X4/+ÇÛÃÁ‹ÝQÌs‹"-Z+ö‡—_¦Ë^Þ”U€)rˆ–´@s¾bò„|”ø%â Z¸¡fcî.ºÄtäzÂÚÒÓ3„Ä:·;Ÿ9.L¶«\yG·yÓ¶u\ò­6·ò›±Ñ>3< òl1œ°¿Ü=< ÍÍ£‰†uþ¬Ð>ãµåÆ I5r‰N\œØQA»ZwlÇ+¶[ÿãù‚uÃi··÷<¦%ÁÙ߉µ¬ÜÉ1¥Ž8бk¶i‚)|MHJ£(MTh‡41ö!©É~¿1¨Ï-õ xh!c"Ê,Q!ïÀU9ɰ>oJtÙ"Æ¿n“ÓpT>‡ ·H/D”Ò…NZ…d%4¥ÁO(Qà'–sY<·ÜÖ‚‰Æ7 Ã8XißwƒÇ2t‚^ËÅÊ{ -~ŸÇä-'%fìÅ FãXÐË%ɱ`¬ÙÝïß 5BÌÜ”g.ã7s®³gà^7gj¨«­9J¬Ô+лOïÒžcCƒ‰&q±K0CŠ+ýA$÷É3M2–ÖmúæY¹jE7yÈwê¹Ï`aÖšl¶ñÔ©.|h.ý)6Á²ãªÙÝ‹ybÇ[K°øõÀlˆÂ»þz½í ”‡ðé“/ú£—«2´^¸æÁóÿ˜œ!XCÿÆóÍJççm¢6s~nµ} Ëc!”eX¶ªäg²dw ùÈD½ Ù|¤ó|uÒm;AÓ>7±wŸ/Âé§ÑÆe-¹ØûÊÜÎ="rõºäc@gTt|>(Ìàÿ Ahpó•‹ÓXÕEÈ=¨O%^©»¤ é»?Ÿ?WƒÛ*¤ølÕÜ‹bÑ–ÛJƒ{O½ŒgHˆ»¾[=dc‹m•$áøô®Î=«oŸOîÆ\„ø"†©úÌ®ž;Õ|Q,,eLÖòn¹»6¿û x̆E´Ü/…§ œ–?5yYW…Ì÷¾IŽÙ)}½Û·UÂÑë·˜¤LGˆÉ¿àYä­À¯Û‰ÍëƒÒÙ´nz/í¢\HíSÁü{g’„F< ÿït6œˆñªÐRiN¢¼:{¾Nž°°l6‚þüxf|P»Œ@S*qÛJ餄éåjÞÓªà¬3ŒZÊ}ÉûG1Üþh ˆv’Ûù¦y&2q‰á÷ŶÌ,òþªp`xˆöî§Ö7 B2¾y¾ë‡Uw†§œ²ˆ#÷—ã7§Á3¨ë?üõ´¥ iŽa.XîÊõòqØ[ª˜|T± ª×:[·õljÞÁ©Ýµ;÷OF¶§1£q¥!ÿðïæq#æ±ËGüd>¼þéhŸ@)Ò·^³Ùm ­çð|°K?åò’JÀXÞ$þQw‡`?"gþœÄ’8xkg2¡ók9·)^«šhi¡Ÿ (îm™LãΆOÎÙÀÌæd×_#•c/´Æ¿„eWšyì&l¸}Ž^X{ÑרMÜš;$ääÃ`ÒÝu3r#Z¸PÉcG yö´‡ôãÏaEn4þõý–›I•TOÖ§”fÖÂÎy³rc;‹ 1šFbæíj[¶9#©¸– >|.UÀºRª¦ß‹¦¥¹¬Ë0skTš3¢íj"Åš«ãa µ¼‰å›’Ÿ9"e!I™+º‰”5£Lê-]/)@í\ùe”6ÝFq9߬j\§þ:Ž#0ájúžk2ÆöÍ Ç­ ¹PÐéÒ²=êÓª¸)ÿ´Â.¥ä_A5Y(™C' ‘HB[«;Í[iê‰dMr 1? ¾\EM‹sxm® mqÞÀ|j|0Šë1¡síÚ­Y•Œ4ͨ(ž§Èfòv†Ðûã‹Ã¡r±ìBÛRÆ58n¬Êã |£ëE/’˜µëƒw0á <›$¡UóÖ]©&Æe}ìd¶„Ï) Œ‹øDZÊeÚ~@@‘[nE4ª%Ò&/C$šË¿ëj5ÄÀRªm¦t,¢xƒa+¬²ð©,Yô§Á¬¾°‘‘Æß§†óQ»a_ÅÇíRÀã/Yë&©“7Ä™õë t ¾xï öÔ«²¥*ÝöêžF‹·º%“©‹•1x\MžJ´Ý{X?éîÿ®À6un…zŽ%ð·÷Åü [îæiŒŽ î:: {)Ä ¨È^kEcŸ BP±l @lÿhñœ³Zó5ƒ<èù5uŽ¥ûÝÉ\ [Íe†¸‚ŸsQ[`QÑ#¼º&„Eûò$ TíYO-ñ‚8vOam0‡Ç€ÑÜmte}SþÝdäźM.ÁöBä‘ ¾Ö;nCᇋ`]Íç°õ“ãHX·0ÿŽYósÅÐ$#Sô"0%™Õ+]dÚ?ŽiñšEªK1¯ p3†WÒIã—,™Y¶†z=¹(F°­ž)ø°LÔÆÂZ t"€ùjÝf?¢*ÂÍŒ¬Õùù9R×û$_zûE2ëisR`ƒ{ª¸oÖ"Õú5z,ú´Œ~mêêf\]®ä²) Km‡úÚ„&±²ÏÕ~ý%îöy+PpB®( &H“e<† ~±§¢?€”2 üà|r½³øÐ5å¨Ô¬C^ˆSÅT†—å ‹“«£ÃôÍÕÜCè¥ñ'HÖùžG_¤¹=¦T¸Ã[¸}¢±‡oŸRü_)y²Gát¶5ÀN¶uGÏÁC OŠ•ñe2,6&ƒ`Oí{LKžCeT ßr¨bž-™V”ÝR]¯ë¨°o|iE!eaD•k`‰¸ûDˆ"TTÐÞy! .?ªÒœŠÞ¢°cŠç~㢠Á@%O©ÝÁx'xo Y£šUøŠ0Bä®Gê§92²äÛtcƒ‘;Ñ2Ö0$™ˆ3 ç48žc'd'h±|*¯¢Ž—ž"2O}¢ß‚^™!UnokCËV `M‚-KGþ]–…U÷»­¾’£o›t{(it^i©Èú±u%Ñm;›Îgæà=ªžˆ»¹º3;}3Gñï8%òŠ<¸²¬êÃZÌÝPã'.›´ä¬Vâ/h7êæ|T®m…{ÐÆ‹&Î%%é’ÕQE É€X¶Œ8•Þ'W'w£¸¹Ñ:vD`R­v%ë¾á~èÚgÙ¼dnF»áË•Jš¿U UìÔÀO¥¯&þíåU«ûo°¾ìøÝÚ½ÿõh#¿‚6ðæ¹B˜ÓR½ht:£g1íÚTM/á°úKAbÆß„„žµkH dg›3qFâJâ–8FŒFL7a”÷[S¯ái^ßô«*Ï|,öKwäRЗ Ï‰Xñ» ÏNˆ&®Mðæq Ec «äu„?Æ;õ—H÷ù”Ð7îèùô‡¾æ öhi %¶‘Ø®ä,‘u§»[*ÿÆ6sn©†D»²÷ÎamÉÂM§CI)ÍH—Ïu®Ð³K¿ãÞÛ{…6EĨÏ÷5Ó` þ–É8V4õçpO9ÔwôäPmE¿'&+”šÒ0Ã2~XÉýÆýìH*Ý~IJ(6Ô$’˜íe#ýÈ_d4ÉßìT'¯Fð¤Rêª †ÏûpsìlIŸÝwšE|:Í2à&ðÎ=LáLÔ†0 )¿oH­ß|ßÄËÿ´·bÜêýÄ?­l®:k«€\gx‰ô+À=¡²ê-[¯=`íäõÇŽv³ÁÈ:déþgÔ'_ÕS–²ÜI Ó̉Œm®$o=˜gK¼Öä`Q£#{(ÅêZ=—rý÷ œñ¦FÚôÂNf:a9„ô8æeB005=,L~fYÞ¨uè‡[ˆôOâb6b†T¿/=ˆ¤B5Ôˆ0ß+° mÖÄ }¼â¦×šžmr„ßfÁ´R:´ˆt.”@g’×ú¨f{ÖU÷R˜x~à àá¯i‡ÓVÎ0ŽÔɹEGÕÊ€|Íó¼Ah¨èu¦œºDfòª]íœO†ºÕÞòÀëºiÜÞƒÇÙÑ,cŸô…Á[u|·±2•-ü€?ÀI]Xfà]C~¨ºX­í„>=&$^}z^/¹³µ›VÀhaÜå=Þ}Â6u#¡5Dî™'€jëbS(úL¶sÍäš¡Uj®×¹åL@vVî3Hµº¼¦J¾.óï$Å eõ©èa>‘™o赃ØXÉ~ñ7›ñŽtB‰Û·¼G¹úI~3õ|S°ª‹ä–r؆+1W‚îì¨U_ï­§×HeâšÆqú§U ºyÈwí‹TÔÞ}hZy}·^Eæ“E¢dVkå­ t†hwï›!íBãwàâo:RÐïXê‘ì¬öN/t‰÷Â"³LD…f¨™wf/^q=Ué1ð¢V}o¶ýHköþR?Èç–(P 9°™[05óÚý™Yüó0"Œ©ï–,/‚s‚9¢æÈ"˜),M4Ry‘gŒ¸$Û)yŸ¡•u‡êýÑ¥aŠWBL‘X$©Ö>þ~,øl ÐÜ'úÞ|Õ÷. ‘§‹ð'¬„×ÍÕ:ʪ¸ê–>÷6Œ@Ü9¢OÐóå([×—jì*¼ñןGÅw©S{"ÑnfÖ k𔄨ç©â‹ »оD“òÔK#տĭ6ÙšÞ%0YÈxàéA–|ª9ûÃîXÁ–7.ì|Â;€Ç­8;ÖšW@*7 ½âLO†,¶Ìß)~@:Ð]¤(æ P9Z­_#c%^r'ìŠ|[Ø"Ž=ÀM;ýó‚}ôä©è·ž¦ùrAM|JÛcTv ²“®TòÌàCا^^˜æ^ã×R¿âúËñ×`&ï⹌Vƒ÷¹üN…¢„yâ~³h˜0™A››ðáG‡ï®™MåæW^¯I·Äå¶|F®u*%›ÉPÈzuNÇÎ録…>æŒÏÇcº{uì–\39wpM2A‰í³Ž¾°-Ë÷›ô³_Ï"›Eb•:çÕN-sEðdÑ©ÅG+JyÕ"ûáú/»%„^ª‹þŸ•;ðÂê Š‹d:¦DiXHMö×Všÿû¼—½¶œMƒixÝ€$Öö­¯ZM2Šg*¯M?@”åiÕ.½Îmß—a{T‡ðîD§¼/ûjüµp')…+:/&jÊ,Û(‚ÎqRœ7]m›"º‚¶ç?!è¢oî(ö*‡K;«”Ø—¦è^!f¿†aÃM8L1vÜ\lÛóÄ9‡}o¥ÁQïë7–Ð_É`uYœ(Pá8ôñl~þ¤Â@È”-¿Fn7+’[¶07½Ïw@±uå4ÛAu` ©!¿F3mŠë_™õÌ: 1ל{pŪ½4‹u‡w娻LèùÀˆfo°LƒûŽòˆÒÀ0kÅœoòºóŸ*{Õ¬ Õoì"ÈÌéaõœ -·$` t¸™p;â/zOå³áÏ-…¸ô§¹L~1¶º8y ýG×·ñ¡¢=ïÂä,EÞM02ö· K“§Ã7K´é¼ÉŸž£âÒÆ®-qº+ãê5:.>¶|Š“ð U¶×ëʨÇâ¦o‘gãc,ƒ¯!äýa7罺ƒ{‰„^éÏÆ€açƒ œÞ1œœÈ…/½¸˜Qƒ™ÓÒÒö ø†+œ9(-c#fM» eålÒo’^Ý ÃMQ|„àÃçÚÂdáöú¡ê›Ù4ÔniSô 6C‹6à}íê c»Dna{]½ûÜEÛø8l ’±–ò‘5øéÖ<~\&é¤4ñÖ{QC Ìf4ÞqòÍ< _gÈd” Mþ¯søBO—«>ʼnf˜ JYe«¿ŸsÅ]6l”NðèöÕ&ß}ŒK_ëuÔ<¶Þûf=\¾‹£çö¥•d‹gvH*Áa™l†æˆ#‘YȵÓ>ô&?•>”4Ì^0Ö2üæ›OÍÛø`fÊ™wk[ì•!J¿³_Ïlà^ªElm/Jü "±¦ÊÉâîí[Kk7ûXŒ· I‹D{/ ŠÓóx´bøz¡2zëøè$y‚éQãÕ=õ›=3¤ž•X@ÖBK `­ âk˜Q?Þ@ÂÙÒXù—ê.-QP.¥w̹íqtCC2Þ³´Â©Q=æ„SÃôÑBJà""­TÖ5ÈÕD.;À<(ªááð>Îÿ,‰Aÿ­yÅbSFÔ`ؽ%AUŽ,â +ýŠ…‰…6_}‹nèxZ?ŽÝ2¶ h$½šÑèo^÷öAºA÷h¥T郞ùû¯Ë®êº¤ŽÝoÙ©mZŒÚÃã;?8Â>¸#­_ä– •á‡Å¿<÷Èô³ò9$¹á8lädµB6¨ ”™Í^*¥9mËHÕb•ÜŽ¬ f¹º~ Q™/ŒOXâ./‡¯©yÞ²4ËyCõ6ýŠ 0ˆ%+À5§.ŽVƒ8tâ5ktwMTÑz]sWò‰ ®¸KúO$÷¾H˜ý"è]·…˜pû(²ÀP³¼4’ÙxÕDGýM).^ß‹$ÐâÍÏ¡H^sL*Uþ¶Lš[¸Ý¿d0bx|ÔJNÉÃÆC—AvвË`ý5’òIj0„gÓÒ¥[Ð#‡©çôƒp÷Ê]Elóùù3øœŒ›b¥‰À„Õ^ºÐõ¼°Þ!EË*ÑLdßWO˜âlƶNh~“M} XËwSÆ[…ȃN_GØÏL”rÇö¹–Ipaó 99.5æ[ú‰ªÐŒøÉªsÑ$½è=5•·Z.ÅíÇ }EtéF€av×kÆd½Çÿ¦‡ÀmãÄç²GõŒŠÞ‡ªZ«ÝY¯'±+HçY¶Ì¿p‰„Ô—Û ™§æ_×gàaûu Iµ_/vŒÃå’Œ©Ï C÷ºØ_…Bcd“þט2-a c€Kp¯„Ê@WHWïŴ߉û?— 4P\¦L¾;ñš¦ÿNÁ„¤Ø›«Ùi¤Æ(`…?±yèF¿ß`Ùîï/˜Fââ'¾±@•G«á–PIJ}é¡<6aZx+8Y2#÷ä3¹z&»¬TSŒå/$•&˜­Îƒe"¶š‚kÆÒÒ9GNá:í4|W»OiЕO­âã¼õI®K VqW)×ç ºÞS{Vt}H½±õ?ûjïrì“»¦ú¦¶Gø-­ÿ· y›‡½—n4óí!¿vªñH¼#ùW¬€e (8øãr™îÙ#>ZøÚ=únÔy}É[™öø%À™æ#3£Ø¨‰±+8|èG„‰nÿ@v#‰•š³æsªZÅ8PŒeáVíJƒrN”–ü$«‘ÝuJã^heÁ”І (¯jQSXÕAŠŽ4Û9ÿ¡¾@vƒvbœ^¼ÐEþ¶“f{Ý_ÉÖÇd©×Å‘^  ´£ò´@rýŒ*,p¡š¯QKjÙNa¸ÎµÙ]ªC$øJ€—ä†Õ¥ƒïÙû×ëEÿ„̇%ï?nx*Ï¿_’ö‰ˆ“~± w?C $@”èQRRÛüÓózu±d$†p=Ã× R}£…—? ^q5vfv.# OƒDäÅ£›^ܹGÍ̪§_âåôÁÓ èq,œzà^\z­`g2^Nß¶±#×åÔ¹áÀsn³ 2¯™_ì@fçvb³… ©Õ»ôÉÓ:^›¯¦;w!,÷PÛ3ªÿœлYßcÝ寗UÚj¢0´YŽqJ2€?Ù¬rA^tH9êçNv)ýÆÉÂV`[¸"B­Š{÷©·˜÷ÓòÛðÚiÞU“ó^Õê²TîwúÁ]±R2mO{Ö[>‹¸ÔG¥ÝØÈ 1àle¼X­ë•öÜ >4hbâßå‘̵îÒ5‹ÍËÑõS÷ù‹hf‡žæ§qü¹:|%YȲKâ"E³¡F,\&íräO0ÁF5#º^º¿ŒO Z ª™#E‘àùÎß¿r墧IÓÔͪ²rõ¾¡Ãd¯_¥ ö_.ÍvÞ êhUõœM^LÁmqö=VÁ±²H•a«zeNL‘JâóV…`Nòq/V kH8û{Uªû=5íÞ8ÔÒåÀ)ý ÜB;¹ŒY˜ùáQ0}2ª2]è΂-/@}õÇZ+C&ÿûX¾·Í·Þ­"9¯™Lj—úWUOI÷Vìg‚t}N#`ºî*›HÑR“` 6ÎÉ‹?tõU½7R¤Ò6F$ÞW}ê&ù[/Ìø£WnP–“´Ÿ„0l”%ã÷ÇVÞ~í÷–9¡£ Gê×é(-qÝ!"ØìsRîíã¿&Ë_ì\.®CÆæ­ ‰$œŽ ÅHüáªHR¸KÁ‰} ·>¥çüC#5];½_Ä_ݸúgšíýVßÊ4F$ ´šR ˆqŒ¯îîí U¤É2 œž?edî¿`€³JìÒxûFý÷`\ÎÚ@šýPj°Ø5Š—Œ—”O˜%còXX UNt=7h“’zã“‹.ç ¼œ¶ò7ÁþŒŽnHðà|@åì\åôïŽn!¦½\øßLeOb³Z@K§Nê1Ï…ÃAt4Ç"mÖo”Õ9g*)'(0¯bÅ!%IçiN$ÁF¡¼Ôª˜ô£ú¥¼$0µH”M{&”¥×ý ŠvòMÔÖÈ2JÂbð1¼:¦Ë¼wÂ+&G´"†6 'þgðFo#ù ÙOÛO Ü¥T#ĦnãîHç’%Óf¬m`@ÅMGßä#ãVž3ú.Þo×þû,[J‚$§lÔÑD›6=¶6ÝØµ qpÈRd¥³#¶ŽYpÆ¥[7²ƒë¹6pÐmJa—/‰y¢¹d‰¶.,eϬåd%:€ÿHÏOäúµDC>éwúLÈ~NÃþ‘P¸®ÿ¢:ÜžÏFωÛQgìÜ ˜w¢…¡).€·lËDy8É ŠÕâ•,4·&&XðóIM/M² ·e žÏŽb½Éeø!†âÛb‡»s×u®PW~X ƒã‰œžr¡ÆŠ¢d\"g}Ì¡<9¦ PBáJåè¹=Ô7KHU¹ ÛÃ>Lqðœþ:'?ªÄݼŸ~ƒúuÜèyÄ I¹á9ES™«z6pÙg Šœˆ|èYÀ/xcF Yq‚|1(ÚÙò·8a&a¨ÔÝÇíU–Y3†8g K?,|¸5†J?ää·îëL8¬IŒæµ(ô!3XH_óá}!ôœpLžöU¢»´…*d(†<ðý¿\ ‹J§Ð}ƇÃv‰a²E ?ºÿ‰_äâ½ÔVÓ¯êÓßÈd•,$æ^ +bñ‚§ '¶Lô&¬7S.;9¸E(uÀìjàÃv‹•@V¶“ЗÌûð‰ÝP‰yÓA¤…¼zx{V˜çØQG°Ò $?tgm¶Â÷Æý$…*¹–ÅæÕfEûq,c·ßûÜ4 Ï{ª|ø&i™†´CÀÄøz€å;¶sà ç ¤ØV¸fqâVµHñ•^¢ˆ€üÎÞæy#üæ¡ôºë#×Ô;ñ)›Iµ¦V8¿C‰Ôvõ»¶LÇ=‚†_±+œcöŸZåLyŠ'Ûo¾X”#¹BØ%yÇÆ%š|. ËK¸OŒ··p‡ख‘sˆ"ºú0ËÇá:¼>sÞAPð¤Bì1¥Óp$±×å!F¥þ “DŒÍæ¨ÓÔ³lj¹ cÖ Uè²;™2(ËÁöÕé#qòÑ@,^z„ä  #ìÅijljï"Åú™ÚôLFçbœô”]ï?.ûÀ·4€vAš/Ðs®¾XS¥N!›“6é@Ds·zAl)ÐÑø)lØ¥ôˆƒ_k·e|ò£Æ»l “ѱE³Ò£uŒJ÷QgÀ°Ží£HcŸÃ ´ASçnZ5ôZœtdž ¢N¼/ɺ½ý^‚Í ¢Éå¾]¸zÅÓ¿p¼íH){.›ŽÂdކ¬?üRƒ¼æ!¿Gà\s19xòÓqI4¥ç'—L™ãdsÁý¶(:§,Ä6—ó«j}2íµJ¤-!Á¨öЏ€Ö–HôꙃÝõW>÷;å¸á¾U’`h„¿áÔ–þÛ»ÛÌyù߉F¶8ªEµà:m\3 :µò?àD?¹sòƒî3Ý䌗£‡ºêÌ‚ÿ%Š"‹\—ÚýÅsò>FNêRºÂåvà΃‡à]·ØQð8a)‡sÏX7F]Hrö°+Š…zš ÜùB·Ž¡Zúƒ«b-Mׄ9»~#ýï‡;ÔÈ5!£ZD/žDCš2ÌNÓUÝñÓàw1™dcœ«nëNñA‰ŒdZm çµ&õ©Gmô»Æ6|”QÅ|ÝXäʇ8ö\4~Gî5J/BOÈn‚þ}Tàü€©¯ÝŒÙEòß1~»‚ ¸‰~ëX,ãrIâÎØ—ñ0J/ΑÅYÚñ³©=[˜l„R¢´2P;tfb7ðUŠ H{ê)ØŒ.Rd\# I~f"律œÝèÀ—zÿUÈÃ4óÁÑm[¦¼‡¸åæIÚ)Ý-[â<@Äð2§MSþ‚‚ÊN¤Ö5‰ö¢­ÙŒ—ëÁ`9”'ñ# ¯aÅ“OSòÿJµÄ×^¿ª@ÌӼݖrr£‘ªÉ=Ñs1®4U×ͼu9ŽìÖSê¶/³ÂŒ„$™‹€ª·ˆdf?…!½&ÁÔD"³Ï\.¨5X¿ù/kY²]ˆðö`Hé/À²4¤—[UéML'¿fŒ”e€Ò<¤&Iò0Fìß[ ±ã‡Tš×÷îSªCGðèYF:ÀU"©Â À­ìvñþ˜à#Ù|q­£='MK€aø)nÇ»‘Ùh0¡D~Tß e  L)°iY•P³zñ™[}òî·pÔÐþ…%~˜JK—½Á‰ÝKTìç¬ËÙË›ÇNL,iéöUÀ¶v aWJÜ…‡Yú;:m˜öG·+ðàMOÇô„÷…B'À¬‘ 1´ò“c¥FzvwÈúç|qQYlØ¢|Ç–UUçkjÄÅÍúu{QãHBËq.ÀÒ9*­ˆÄÿšcÏræÓ§Ú—gúvõ¥ŠAÅgšBy~mën`ZªìVÄذõÿÏþË3>›n¯,ŒÑir¡tPñuÃH¦;ÕwîGÊ3¬°àÏ.”„â†ËªG´ì‘ Ù@– ÐÑB}0WQrê6\ #°øØÂ Våà}Þ.)Iö‡`"Çλ]?P·t¢]e^U­\^ægÔ.—ÊsO>ÏŠ:ߤgÍ}-6ÿà3'‰ñ‚`å9<QcGujc½]êé»@1_7ˆ#ÌÆA“¯Ò’â3j'ù<ìq|@GeûÂs±™³Ÿ-âŽ#ôý+×ÒOꜩgOûvÚ)ÿ€dœ|œ<Ýøøà#+B¸/·­¶¶è¹’CP"]£¬T]»ãY¦‰>Ýó!I㣵´ôp̧ÂAx BA°{Û¥”†¬#Y5¶çö]G@Ó3Q ŠO CqXÚ[/¼Wø`K³ÇúëöóŠýÉ牓¦ÓÃtr¦øáe=áÝfý9Úµ_Wó€ºæfY¹±7eTáÐ@.±ÇQ˜W4à ÷‘„V³/w3Ë<"ÚÕ+R Má֛FM–¾Údyušm;B¬€žÒ¦h6¦ÝøÆi@U‹#k1„)Ö|L¶þ7ßdì »òYþ!çÍ” ›s™Þ”+;pü-óCÅ‹iî ñx½Îš»aë  i}W*.4åÃw1i_=÷Æ)ˆzq$>[hôŽOßKê•y«XЬÉ&Õµ¶Ût§»A>|ed“/­ÑÝk-œ˜HC#¼þ RIý&˜‚„pEž~ š¥qìk]J¨¡l¯ÜSì±I¿2R‰d9†½¨ÚëSÿtSæE9;]>°ÏÿTö´Ï -“ò}®ëR¢¥e® Ï—¯HgòÓô¥÷¶òB'ú³´Cœn*Ú†¯Z  wàêô£PiÃZaºÇ?öH(ˆ¥¾eçQ’ŸŠ'õ©õèHøÞ¢¦j+8ŽÃ€3R¹mC9ÓƒYÊéÞ¼)n¯‰þªî¬@/§€ðˆ¡èb#¥m¾.ªÞÒéS‚ÙÌ÷RÉ+€Æ\+4i£à½¼ÞͶ95ÕŠ^òÙwÊy‡È;÷*’ýþ †È‡¨Ì3u‡ç{[×ÍÓR-d$ uGžÆk®µôm:D‡³@@|jtËÖùXqBïîienº‹_ áã€NG[.UÔ •ÿ¯9Õ茩çR™gð;Mô\¿& :2?‰¯1„U)­ŒÜÈ}ú‹EH= ÖÐû3…3_¥r—À%q-Õ4Î<¥8žG* œ˜@€«Ü96æءÀCêÀ<`§Ì“ /ïàIY$<õJ v‰1UREÓïi(ÏÒ©sš´÷àÿ˜³­^Ö/fÕ ?)±EìnÓä…¬«Â/ÈÛËÝú¢HâØ2q¼SÒ\£c“g²Fö%ÁYˆàd:†YßFb—õÍ !Ï+÷¹Š'éÉæàFäZW:Ïk;wIhŽP¦0K%?“«C9V•ìÚÖƒCq…ßHŒt¬=D9ž†|3}H¾ÍbÇ.øÉõšmt`á÷a@­ô'×÷ŸÖÁtHq!C~eÉE§™:¹TeËÕäý&ˆÅpGÁ¥ˆíÅ%ÃÈš•×ýä?Á¶®:üÚ¼ƒÇŽ£ƒ¶s­¥ƒOCÂRÉåÄïpm+#s¼Ø;sJdw´ÞÈ¿©tEîñ3Qp0²µo- )ëOžP®µpï5’>Ø?i¿„$¾¬4BèÊyXhálF®äuŒ²•†\‡—k†Ž»ÄB9+:XG–´iN¾Ø„Ç8œEif6JÑRŸE®½¢ 8‚Ê[)Mo S'—u>Özr²£=š(§7äcÈxÁ.’03Ýþ¶\ì¨iÆ,:}ëöÒ]ûàþ^B”$1cê¾A[ÜZ*Ó<‘/°ŸñSã?°=‹±}€ç;™\WÇõÜ8¿x„!Åw22´bÛãÐ0ï•8½o}I¦%»×—[†¢ÞhZ©ïÄAgHÖº–üo\¾.":dÂ÷ãålKF¡sQØÍ‚é5=êgb7Zþ˜qûØ)‹íÜzR 0/ŽL×÷IÉÿèÙŸàF]hA9ó'ÜJô¥Iœ·XzñÏHsaE‡8Iâv,£Wbî;†,0ØägÐy?Óì¬+`o×ð–Ð!Jµ[á’aÅ©wÚ<ã®óz -ÎÆ~;/è^gssˆ†½Xø*•Û/ئ“ÜÔc¾%ûZábc>4j/¦ _îîТ竛®%!{”üà«;ìFÀê9Ù'1ßšjŒ¼,!˨ۡg2T3ªl×÷ Â2-âÐt2Úû Ú–#òMüîtTƒµ´‡÷ó€|a£3ÛANõÍ/qö™Ê¢ª‹ZP÷øG»¶“¹Ý‡=-w YgØ% ú ià]ÕŠ&g-d9fÃü75ÎTÃL}ŠkÂ-f¬û·óè°—>äì 3U­^;è•(ÙW ÄUèÉì†.ÖÆcvSO˜½ÔÛ'Œ=Á[ˆ¯ªø.j M€PWÏ?¼jà=ÑF€_ã“íZ•õ".qÂãUÂ3"Èòj-­îÌD~ìg_Yý-ßåØ … -ÿAü| æâ+JŸT¾ë” x‰"³:dÂãoø.2wçE÷d{±/E¿¬ ‘Ý>Ëã°/˜Ecùà5lؙەsŒWAì~õ|ع1å…ÅÝ•qâÀNõNòs6BŽÌ`…‰æyÆvÊd¾EX\êSHÌ(•gž©£Mw d®[³浨ÜÛ”**á*™K£¤j<¸{7Æ VàvhæÙFútd.%"ÆR(ÆvØÕ¼°†îz¶¬©c?í•éFÛN¤9Ïé*_–³Å@ֱǜYôt+Ì·¾¡C¿Öb»?~3É—L±øíæÐó;é|=9ˆòª¥~ZYAg¿¥9ê¦ÉÝ€aT_MQf®›¢*µuDí=Ã]űÍáÂt}Û(ˉœqV‹ ïÉ]Å µçwjÿ»®®¸ÒøRü83MS¸µ“ÓÜ/øV¡# ÒĽb䊥nÍM´ˆ¦i¯Q°ÚP R…Aç¥4ø\.TòÀÆÜwþØŠP¶4ÔÇ4ó’ÔYæÎ‡ýµ´^·AÑszì&}óð1|òó é‡W@—Ëlz”Óúù>Gq–£ Èôþ–%jú)=k o†!øêMø5‘-8Ö¬¸$iÚ;76Ϙ” ½zw þµå‰ð|\ZKå¡Vì&^K(ÑôFiáÕi¿/=ˆ¤B5æb )àbÜðú ÿ§›«ƒs7€ÛV‘‚¸¼Có;š–×Á]ÿ¢]ÑçLoÖZ¨Ä'ûSx诘 M^ú\MãVÌØZJ“AvÚÝÔ£æm÷ÌÞÖ;OÃï¸FÈÔn4­@_5ŽÛ¸j•¶ª_6™u 4·î_Øùï¨Æ,G3XºÆ“3™<Ê!$W½RÇôxò4YÃz&ÉÝ! zF÷Ñv-­‡V{qRQp‹|ØS¨Þ³GúFq|†xOÎS×K½&¸º»qºnÀÑïõaéHÛë/rôÊUÉÄR­ˆ½ÒŠÊ îÕLne@ÿ«~çiÙ퀣²ºCjd—P ÒFŽÚµ²:pî$N¹¦„±íüše7ɰ™]°~¸²•QÍÆ7Š¥ÊaÝ¡|ÚÙ@¡.ó>ˆƺä[óBb4½_(Ë»Émàúˆ•]‹/++PN~cÃиˆ†·½¿rAU U¨ ’ë¼£ämhßæ¶g„ìAÿ)Ƚào `˜åÓb_i0¹š?Ø_íº1ë?¸Ô )°Îé!$òtáF3ïÌÒ,çô½GoÀsð¬5¸±ƒo~³Ó,|$‘QhFÐà´Þi7íѧüaƒ 1ÌVUÌà‰#I PzÙÿ÷ð—ë¶ûc¿QŽç¡ÅqóRÀw­În„ìè\4ÀòH)ò?•b‘ürî5$/‚5BºÙœ¼Û‘‹„³'"%5Ë•µ4ÚŸú¤¯…ÞÓ꬯™PYÒÍG‡pŽ`ßôNR'¦™hɰ£×VÂÊN?6F ®C'|7ªæõåÚÐU  „td[¿ââ¾Øs†)Ù_1uú!ß8ñ8°ÙG³ÖWwÒJòÚ3ÿF±*¯´tÌs4†¨Ì‘ìÆÉ‹+ʨ‹HÄ·öC §Qÿ™]¸xjn‘Ûx»²©‰$Çp0z›™ÎÁþZHÀ9jÃ$¥˜#ìÛx¤½ž`èNì»52û†þŽžóE›%œ=Õè ‡TÈÃØ~ž_ÁºÐ÷ö1cÀæÈ ê6–ÇÊ‹3ÞõÎ#q{zêw kæüøŠ[ •Ã3rwµe&"Öºj€ÓLñà+3C\×¢áÈØ"S¿6n¯Óß°‰ÒsbFÎе;|êâû1Mÿs±VãÈm×ù#¡=ct`G»›E¼ÊX½ˆÞòò65Zê$ð¡ÐáÅõÊÓ1„e¨Þ!$†I#ÒûhMžhþ¦×Y¯[à;·DòûJ_¦ Ér" Ê„eæ«þ× O®6NFb€嚌Ë?f0?W.šüé(z-nh¥PLö’šÁ棅ﺭ,'WÉmYÛR{Dk88)^kæâò.³ehW·—>iïÐ&‚xk€cbÔeWb§%íÂó)ôI «F«¿E»<ûeêÒÐÈ!D’éûµYkµ(.ÜÍóÔ q¬NÇïˆpþÞÿ g¨—hDº¶ L(¡×û¡'S'›®©;¼‰¬Zb/(“/âàÍddÉÿFÇSÌ,a$¾óh¸«øÏÊ…ê™þ»•˜z,§»K6‰‰­ËJΞQ¹‹lMºœöÎ ÷:€¿¬-²°lãÐXõe«!M:nN£cösTjwHòÂv>”ª'á_Oî}ξR¹£*ý>·ÉÛœ­û·:‡&}7V€—È®ž¸íП— Ï»Üê±)¤·,,ÊE[Ì×~0êÔÉ?M{<ܰb(A]vjpŽð£T…h+‡ƒ Du¹7%DÏ—4i^þ=>ö£õGçzpY±¿äŒÿB­3á¦òæ~‹Di‘ʃü>Ù3¤‘S˜½·Jò•UHöq‚¢¿—GZ˜Tú&r”!ñ­uò°|ïÞ@KÇ‘.àvåáÙwÜ}$üµ˜Ã ÍÍoù)ŸrŒ¶åE¤/ÎÇGïäû[”/žæ3Et€Yñè{^ØÇ#X×9¹"W.Ñu¾SÈ÷v3úoyž ¦À×<Ɔ©y2Ü•-X\ã‰bb:¯Kù}ýf ø:Z¸ç/òÌ(”AyB}ß¼2ñ\HHûYn®ØÄÐr³.’o ÒÀ#žãÞo¼çÔÛ…PDjó’ÕBv3ª*>–q;F¾Ç×Ô”f‚=ÊöŒøöصç]Ö&×`ưÎɰjSþõ®ÜÌDö ‰3­ÝÉgQ ŽAì[_Žçö§ÍT X8ê4°q:Õ4Ï<æ-š`gÎ%‘î·î[¥ñ>5ï—7îb‹ë†'ß*i¬]ó¹ Âþú8ÿ‚k"ÑݶOXÐj9­ÝšÉÕæÞòx\u“ä ÿ4Ç#øk*“×ÀY‡ãuïñå¸|‡ç!Ö²ß; m|p“jÊ;ZY¼}n ËdBÞ–X ÔÿŽ)þ•¦Ü”â"ãÀ¡òÛ2+]‚ˆLj<Óks5@¶nˆd¸lFš€8o¾#šê¶K œfl<5a¿õ·˜œüÑâw±hy‹&Ê“g=[°åz˜Ÿ(#øL¥8$ÄŽc«Š±£7¦(æíÑC ? eŒ²qM å}!”P i¤n§J:0¥Ï³ø_àÿŠó<¾Ëçb§57U‡øªÂAB!ûLV/e¾ën4xÑÈÅK©ê]ÞÕ²C\ôz¦éØDa°[ÍÓJŒÙÆŠF¯»ÑîXL1¾ï;ÐáŸÇçå>nQDhù9`&UD§ò¡Ù†óc¬u(„fn:'c™vàF£|þK/Þ÷7×,r¤,Âg4%kX8†ï³QÔD–‘ÀA&°<Äû€¸ÕœÌn8sŸÁV—,•Ëø±Hm•°ƒ½UB¶áw' À«®¥§‡EN×ÀÇV»tæ<©¢›* CÖF¬‘ÛÚq]ýø¼2 MÔбÀàGðC.Á_IŠ ðëŒõ—¦ÅºI¬ÚSOŠ3¦0å Ç U7-_·EwП Eì=—Óß÷8)ç3‘–àœýãŒh¥Af…‘AêßwܙۨËÙrý˽Ø–7øÆ ðâö©‹ÿþÓIü¬¡ÑâdÁÿ¾Ø’íŒ=±Ÿym£ÃÖCý冸ŸdsFpŽóKœ…eì±Æ¿Ï`­Ýž»¼§†:‰@vü%‹ MG“ñm*^#á^!/Á'›æ~=¬¤_O¤V©Ì®ô뜡.*¦ýìµëå%HØ´sÐÓV{3‰o­Ø'PUÏ”åRÆßÓî/\Vm¤&ì–2NmŸ#0O/Û$B òP{™¢Ž‰Ê\‡’\?}÷$Èÿ½]æ9oHwa]fÄ.]‡Ê±»· RL2¡M ?À¼Íº8¥Cé—´0p}>yæó¼FrTÎɯý)¶ä¬–T©äqeÚBäõül™Â&Â;„5–ÿÞ g {Í'hÊæ¼$sn•ÓmZÙvÁç[gTñ ¦!0óÔ»Öù¦ŸGEdfÛÖÀUÆ( ›e/ð¿o†£ŒHúŽÍË”+;ù÷xkâ‚®ºOT ÓÖYE­ÕJ8oвÎOà\'ßQóc4.Cdé†^EÀ-"ŸItNèòž'£ü‡?ñ1(0ÕäÙÙïèÊÀÈhŽí< ¢6™ù©ªçUÔÙKRyTpž¸`¾hí)ž¸tLè3GQïyÕHiI¨5ªôÜ$>õ*#(>ð9¦P„/mû[5u\ÎÛ8}@ “ênTe4Ðê9cw«Ã¢/Ãó\oGþ,Whâ¨lž ú½Y÷Jø°ÿ,µ4âíiìÝYDÑËà `HÀp2•Rý$ ÅWa-ÏÖ*8?MX‹“¤ÉÑ>¶²z"ÌÒºÑ/;À¥z¥›NGªkùö9òìŸÇ€øtàÙD pÎŽú.üA®&ŸÜÓwV÷>íc$LÍ8Acͪák ¼s)n·¿ÁHc’€øç¦—̲¡[U¬î^Å)I};³;@€§S©Â`ä˜`úpÕ‘³J‰ þ ÓûÀ^Ÿ3 }qÃÜÉ]ÙÏ·|úFg9¢  i­ò#42ô•ŸÔ„ãÍéDûËl\)™¢ Îë М´ÂbWi°~Šy K‹‹®#ÒÞç_«Xú­®‘nÛïoö X.kÂ)¦ÖÒ£ZnxBߌ†ðþºŸ²ä–\]C 5þ0€.š®WRí»"wj€Œ†ø:8”-£§qáñfÔ¯$‡‡‹‰§m\ :rË<ÈáÏR'ÿÔÖèQ‰A~cè`ŠÛòåœ_ýÂØNû\é-…ÖcéŠÃ;&æ¤ÌMaJ†•æÈ>(Іr`ßF/Äɧ¿!élh=ÓÏiÜâOާìÒ=ñ¶U¿Ûý×»íÂo—5‰Ê3§ó%jÁÛËrôŒX]ƒÅ¶1Çp®± ù6à5;îj¬©žÝ í›ú0á¾Ó}Íí¿¡ ŸK¯øÌaÀ¤î ƒ¸îRC4†þÅ"úÎð2P ñÛ —omñŠkx`â%’Ç?ö?¥ÎE¾7°;ž×"+&h Æe|wa7¸ê˜ô˜å Ñ]ÿˆ_îßè˜1dµfN¬Ü‚ßܹu Z”ë×ÑÙ,sˆr'óÑg´Ø2z ¥qÒ,ÀHÖ¾Í$ÇìRìiƒU”A·:½7ۉ׵ýöÅ?sʘcí骓¤=ú­ß²%dÏøD® >õã‚—Å:ï×é¥ôý%tÃ¥ú ø¬Ÿ;˜ g Sèô _³ö¼òÌ›©\W$‰£MÝÄ?ò:OýŠOûðz«oîühxQªÂ¢ëÑñqQ»ÌKÆ|>à T[Ë·º¤P}mb®C¦~$jñjì:4I2ý1®(•AÉqbºáïF)ó@Þ‡ÐQ^”Ü¢Ëó™MÓ_(Øäœl)¿Ø™Ð¤‰2 ÒBò’sœ“¥‹• G•V¤:?åõ=p~…Aµ4)*±ìŒó¶'«xMÞâë–oj[¥ŸÆ1ÌVÎNÝWÝUèI+¬€DAê~Ô^!À¦Á°GtxZW˜9¼Që(,Ðm^3MžmŠuÇzOËežÊÕîÁÀšòì«öK'`iÀÂIû¢®bD û@€ßv6´…cqb2¶°áW 3¬ÏÌKÓ¯Oû{j`UYk ‰V(ðïåI{˜§,ºÍ¸¦~(è>JT´i—Ñõy–›t~B35–þÍpþré;/CŽ…hØ…¤fÓ¾§ Ù·M‰Ý9iMz–³Ÿ·CäP§½:sýì~ªª ks¾nÊ>Š@~úµB'›Q«Ëûà4¯iÛZDÄà} —$W?u¤õWÚ÷cŸkzÁm}ài Ý¥5¸[0Ëó,´Ä ÎqœS¶U BË(mÏÖ¤ê\÷²œ*«nGüËqgHéªBÖ]gëõܯý“ˆç‡x%\B ²†ã÷{‚»Â$egœ¦2 ¢÷1ºñ+’Aˬ)ØÚ¦]ød®±ŒjèÕlÕ8ô¸¨YÔÓ ûH½˜ T»ïFÁ^~·ÕÌnѨÚâ°:šâD©¯93•(vLNؤ£ÖHXq=û\]œ,L Èšä†˜ 3ú”û|ª©ªƒb–OKÕT‹xžß`ðŽ I<8£YDôö)|#æ¬wÎûúmD“ì\,6Âßñâg‡W÷…@C›m“½Ë<(Û·×c•ïÞŠT(ø§ÜÕ›‹3·bN=+@ÑÊsaŽ0¿!]ºëI1ßy ×E*—°â]T4ãKçöŒºÜXX›®àb Ù{n²¿Û±e^V²,Vív×Ä¿ïm׃¬çÆä3ÞŠÙM‹cÁŽãÀ_|,}¤¸p|ïõ“zµÓD7-${5¼ÐÏ>ÄiøÛ8l04Y¬Ÿådö @ ‚Éü.Ò*œ›<ŒkÌ¥-S*Õ›ö‰¡öù舃>};‘fXâëjGcÎîRC‡Õ×2ÃäsϡƵgÉýÅCùi,h˜y1’ÓŒ[ z§^UýÆ®‡`êäÐñçèN5c{Lôy‚u¬‰/dⵟ³ùÖ=‚ÁoƒK×qªÖ£Ã×\.À‘[«ì@ê+CŽrÿÅ£Z¥¯WˆaJµûáL˜h·'ËW‹zùÜYô¿X>«(Ç}´õŸ¶ê֌۵KåfƒØJáé$à\$Í.nÞŒpE3û“…ÕAnü¼oÎ6Þw¥5ÅÔcß%<”W×ÜvR…"ÏÈKÙì:< Ð|á­@—R½™Ði•˜æV–©Pý@Ü—^<Õ,i„ _¡ø>u!>±«1Ð1žª$–ôŸçšÿ ?2*]ÊFrTEËtÁìGÛÏý Ó?T€úóogtJH4}‹·Éùô›amËPÂAHºU€€ärô9ð™BjC@ßôËËE8êJ¢)Ò(Ñã¼BFm·9ÙždR0:¯˜ÆÑPÁ1Prr:ádb22ˆ‘Fs!t*ømeU\ušG}«¼Ä¬P&€4áÃ?™#¢[_wLƒE>TnÿÞaÈÎrr‘çœj2G ãDsá YEuÐÄü+DkªÊ³™™ UË‘ôLG½€]%Òj–’„qÈÇ„¤î]¼†?¢qñ·Ó¸k°¹KAÙJ¼4Š;ïÃâ¿úxÖ½|Ž!G§]<µ}ACgÜhr‚ÕjÛVb#‹*¿tSô€QU=rlÛm„×|D °ÊHù DéXÃ%Jç¸àÔ _ë5cÙÆ .µ´àZJ!ÏÊrXó­„·›$]/°f¹¼¦31”fL~Cöv‘ö–M£s×¼évHúš ø›µ`Ýšó¸ßÃpû%i"¡B*z‡9Éž˜icgˆDhý[/’J˜ÃWIè§¾Fó€Û¹‡Âü«™êè~:`'£'ÉÊYD˾áÍv¡ð|ƒg‹³žzT¯»ý0õ`niùÔ]â] Ñ>lÂ}Jöd#<؃äw9}µªœB-wê-hD· €êÅh¼@†`8¾¯:('Ó>–½i4+¢t#B£öŸæ//³‰ÌO@‹o¦Fž0f²ÆKÙÞÔ)ÈP¾ Œueü»Ed\þ€ÐƒÒq´+zéE`[˜>  ŸÜßí–0vD¡k`ô%mheí[§Q‚õB„ Ýÿbè;mW¹*¬v\t® Wuç„Ux5|–j»$t¿øYöÿŠøA7åÀÐ/rPUp_„Ú«¦(Ã@¦ð®BÝîÌeʪõJ€¯ uêô!¼ÌéÔvò=ó\͉¢.vaÁ§õj¼ú¬÷e³ÅÚÏŠvκrÓfhK·QÊ¡á5`m8´ô§0§«Òï‡8¸çVI«ì ÂuÔ=µœJªø|ù¢줱§§ìáùä$‘åþwb©kÅÓÑŠÏùšÞ>Æ*f>ÿÌràWbƒÞ+Et>Vs»* ÖÝ]¯ÄŸ™«<%çôùðmBSA”Á¸%´Áo­2½[Ñ«b…Ác«”í&’Kéð+¸J%ëαò [wPgÖío %­Þ ¬·Hý½¢+³Ã½Euê¾)&ª..Ýtžm•%¯×ï5úe¦­e ³§ÒÚ5qCŠ&@Za‹êØ=£xžÜíâåÑÃQv ’zú—EL¸Âõk3ãÎ$³ÞPíÕ®,5tó´(U¯_:ëä' ¼q@=ÆÄ–ÎYJÅ LÆ¡nŸazH¬¯~Ä÷ 3ÿùBd}FÞµ‹ž‡?ß"<2“9ÒJ/›²U£ïü-††¿«g_vò^ê×›W¿k}.›ËÆ!‰Ë€­yvÏÕ•²±3…÷Ó”ݸfzRì„zu?Ñåžh«—8Fgª·ÓVÏ*ˆ!mRž¦%§š½"tòn©ÈeBœhbÆnÑ}Àøµû!ø—WäB•¢†7ž¸â(¨@è L õ€Wð2)±íyµÞn%ËÇà)‡ sdE¢Yíùëè+ÆÐýì K)SkäîM­ç:9­QOˆ´š_pª(¨s~{f\¨QVõÉéð¶"³'FWÐÚ®¡d÷(T$ó*ààüáyýù»hc©Yëó‚°q÷#?Þ(úêïM&û*q.µ†‡ó„q|Cˆ3‰ÆXÒ¢Ö»dÝCCÂ!d¾32-š,ÌÏ «˜à²àj„Á%6Rµµ´q®ü[‹´ž8y¿“wño‹s›bU²r~Ôlè#Äȃ ¢À¹[øQ½.³-¤îX;&±,aWGrT»kqÀÓ{¿4âÕÛpŽqœÙIr&3›`æ¡ÖÍQ«pzA" ­”’S_°1ŒÓÀj–dÝÃïÀû&­ÄVX÷>Fbê’q" z‡ÊË¢]&pŠ3Û™ž6üc€eŒ¡QŒ—*Š0ßéõ©’¼$pœ‡:s¸lÄìGŒ=ÛÆ‹©è©í´¥ó^n¿Ñ˜!ÀuÐÀ ˜Öâre—Á6›ƒåxÕTó¡–šHõ ^u’8áÜ;R©µ`÷¯žç™qy¡qÊ%ï¦IpeåQ=qáØÏQÑmþFKl ~æÍüùÂ0DÄЕ|hAÌGf¥)Æe¿`äؽy— ¼ <¡@bÏÀßÔ«Za,.ZZ:K mN@°z:.lgJ]ŒË¨rˆ{…ì ´­ f›×)°jè.€;åæÀkô=öRŒÔŸö é‘{º¼Ãí…/ÿù-6'j Ö ¬ˆeÊ U<2=Liiô¬ñv]¼t‘>ŒÃì8ttß<÷„Ú¿w „TàÐòÚ뙌J(G0í´ÐS% Ü›MÆeÉøîTÚïB-¼MÄF‹Q6µ5§„KgAó³nDž÷¸23+šÀH˜tYlŠC’¥\cP_–Dºã'o<ÜSK9”Y"7u+•ÐÌŽö'}÷ýß*ÜŽ:£Lx}LŽ\;úd âZK9¦i¾/r‡ ZÏwDñ˜Ï±ÜßSH 7»åM÷¦uèióƒ –´Ÿ}îJ5¬\ÒYË0e¸‡{ö…`ÉNû¢e6 iSØßèÜž%¬Y¾%'‰vîù@¾EÍ?BâßÔC)xh9Bzt×ãàéUìCëøR,·Ñ"4ðr#%m,HÓ Ç:áp,€”#^¼½ç'°ž0ÔÿøÉ˵ó?¨Œ¬:#Ï<K¼­S½ÿÒÙw™ð•åéÑ‘DN¨ ?n9òÃôn “°Ö¼¥`š+…“Ê e¹Q–m«h_z/p ºeÎ8Þ¤~»‹áÅ8¤[Wa*Šó¼ýFõe‘å3þ´gïµc:÷à™Îð­¡@•Fxyäø/ËÛzÜÀ]´±—0²Ð7{šK¯iŠc4™ô2}AmŽEÿ(ßå­¨eÑ¢%¨^‰Gdàz}8 `Å4•‘%:˜ÛD½–œïÿ}Ò6¤ïï'ᶉñè&ùç=SbCg: 5þE¡¢º¾xª·>ÈHµQt·œ]¬6z®MšÄéLJ`°g¶bpý¶»G´Љ«èÎSÀ¨  âZ9#xìÕ¤««>W ¹à†* ­ÚjF%ÝÜ&³‘q°•D™ÎÆXGA>ióÁsšú‘/k»KV” ˆ·êéBz^¼•V¤Ðç0½yØñ&äŠêX˜@¬Ïð“'·‘ƒ0gGR¦vÇ¥ì_1i7Ûoëhßñk[¿FxKÉôd±íd³Ø”ò›ó!ÃGqGêL –HDn£yšÉúÕjV }ߌ˜@¯¢“ãÈæ9žº1¿ïûÐÙ8U¦ÇEš°.á϶$(‘+ÜEœ1j.ºÆ8½úl 8î[ϼþã|V„®G†tîz©¨¹$’÷®ßµ-ɪ-žh¸=FDßÞ Á¤3Ý{XšH¡¯µá5è„&~hñÄág1oˆéáUž'¢16ñ™¶œVÌÛv¢Cl8R#ÄŒy³5eå+)Q Š9¸«XDU‡h¼Ìh¶í«í~BG Aý6xÒU¢û£»ÐóÝ®%-ËG<ÑŽjŸ–ðt¤˜,É‹q–Ù—D0Z¦e'xE¼´°RS@üy¥K‡ããSïéÝKÁe380,AµŠÖ(¼ey•B·ºÊ ì ÀE‹ò¿ª@æ÷[ á·ÝT­Tî‰ûp/µ½»ÐÊøYóÓCÁ©— \דyZa͵ùIY ²cÛo«»êÒÊäJsÛ¿¹¢¥¯5K.Kd~Óvy zïP§Qã© [Ô Q¤ŠSTâD_XÀ8¾æd|XUŒi¤›+FŽúfÎycgaW[þø¶Îîr8ƒŒqÓÅ„݉¬±ç(¶O*ÛÊ?èâ\Z˜Õ¤š0É”x[|Ê z&‰§µ[<ƒíh¼.¼É´3ºñF÷’TQˆ7O)L}ðÖIƒ‚w•d+ð|Å ]m¡3C½¸þÀœ'\ˆ4Qõ™A«©8[òèU’g¢$UT­˜ôñ¹³e4,Ì çõ0j$T×|V‚_bmî«^³ˆÏݹF+go5M®¯Ç•ÉI°£ Ó~i<ã„+‰`gùŠ{b‰bšÉ&?x¢È ˜èÐGvâüË ‹\s¿ðúü„'CÆ7µ«0±ºO¸Õ3aÊb°V©\éìØÀ†K´K(ÛœE޼„F‹unÛ*4õyzñ†§(ª|+Ø|þ˜ÓìÐho닭󅚳閻X:ï€ÔBþtA}Ÿ2§…0ªj‚ùA^#·£L )¡Á}¾äzõT?‹ñf ‘æý½¶Aðì €¯ºÎÕæ8?y·¡CM¦rG Naxq§¶ Žë?+h(öÕ°›Ù”Ízõ“PAÌ£™Ý6øëºÕŒºgKDY5Ê;i,ã[8Mê ²¯ê°‹{Œ¿ô3…‘ˆÀ™¸õЂ›î ÜpŸÃY.|i™v¹ÌŠ”ÂèßrÖŽØúfÀñ]a¸8Å8;A/”ÔÖ›o¶'˜´>Âôøt$}Èð¾¢ÒrHŠ¢!þzãžóæ`‘$äòZ,°¥°ô¯ w·Œ3‹ xnÚ6š¦,¤‹Á´R.®ºüÃi’U’ðùÑj03 l·)Öçº*x•ŠåÚ¢êæbN£ñKw‰À ¦…Q~q,m!¾U¯W K¤j}¬G빯#–®àeƒÜ`ù#´Aªœ‘ýg[9ƒØ~GÑr˜$LR Û…Ïec ©9°ÄÑ%`rµ0ziÎàú‡mÃ"t?üÀ [Ó"ŸžŽ <˜ QÈ#Šj_ÿ…•ƒÙkGNº²M€ƒˆûæø /”›kjˆY~0³"ïõvÅå³ìdgB' ½3üˆ`£ØuK‚è:,š[ªÆD¾†”P]Úƒíû£aÍÿŽì•$ê¢T¡ñܯøiÓGbPù¬ª^Ž“M™vì*zcè–#yH€|Ýwú†;w¢“¹Õ/˜u´ZNYê Üe*àÇ3vèû’Ê[¼L2P÷±àT°' hº{˜I¤\GèˆpÛSXFv'a[ðYð«®Þ-V†ÊN›ùíŠñ#ýW*ñêZ°÷v× ^~íÉ‘E o#ÒsÏóGï¡ÙÙÜ6í£†ñòÕht(¯µ"ò•«†Ñ}Ìþçí¤îdeÏJCЏ8Þš'3‰OØY±ž#ò>tPM=”!M%H‰šJuŸK ^eË'²lK+ÎÐO×WÖ#ÐäHkZ#4ÌqŸ\j×& /]¯¥ÄR‚ÿúzݸ)&P7æbLx«k.B.|Ä þ¼ÿùÞÕB­á[08}OÔ›fi\÷§ãòò± øS½Û¼r>ƒé¦ö©äŠšäcy~1åϤÖ.•x¿g#Îðß‘„x@,NÁ‹.óH£{QÌÌ pxþŸ™ îIv(® v§L¾îW¡4£ß©JnÍEy…íØ íâ@ŸÈT–¢Éž@Å€¹ 2I™jçhÊÊó ·9#ÈTÞc7+9ög|†Íõ­ò›of¹ï~å³å¢Ê¥Å!eCîá¢=òÃz,(GüÔ[enA3NmW™X¾qîãÿþ”ëè3>F¸]˜d ]~¦UÞ¯\øòQö)¶š_f”õŠ¡º«É¼´hŽÄD#Ù8õã ž€‚3-~œPy›ZOIRËåÑ+·P<éç$¿¨)q®³ue½¢X¾GÊ(äÕà@bì:.E"sŸRˆ&"‰=ÃÈÞŽóŒJ o&®¡Ië³Kh?}ý_ý]þBϪiÑ0–£¾+¦Š\¥Œþ8¥ö¼²%Ýeƒõ“äKEmé#K*é®\$ˆ””P"¦~ϬÛ]«ƒØ·×gM±ôaï`t´2•/`Ó÷•zN†cçmNHRq=AöÊàÁÃÁàMí_ÑüÿÑ÷Py^J7rªäÞ6›ŸóŸDÓBÕàõ~‰ñ6VÈIQ¼z–D7¢Ð¯OCYš®~…üd¸’>KG÷¦l\Ë„¿éVòEŽ¼Ú eG#Ðo‡2«w'|¢8–Ë´-²À‡¾(¨)ã4\–‰ÞzIàZ÷ËðP¡9Ýõ‚ËÏÞh5d\=Ÿ±Ê=å7ûeÖp¯Ò|æÛ°]m{~]ä¢<€+¿õªÂA¾+PÆ¿ïf^÷ý¡Ý(ÁONÞù{žÛ`cÅa5:+åºJÏ/¿Õ£N1a¥jý–‡J¦r( yk† ›Ëº‡.3Ù!÷|û>IiåúI†¯®Þž”àâÏ÷~D˜¶WÖ¦ /:5f®‘d*GÁ§ÍMÐoˆ®HµAL¢GˆÃEà¤Àc(içÁ @šé¸ÓN[l²ÀZãfãy Œ d\Œ[îh’Û÷í¹ÞœIX>AR×`¿Ø­ÅЦÐS ”¦ŸÉÈò+Ç”õ_ž C/0ð•<ß;A¸WïüœÉÆ3š¯µ'Þz^õØ3 ¹×7ñ¿½"Á)´H¬¢ô j+lry‰¾¾Q:>Ι¨\WBÁ97ïu,.,HÏÙZ±Õõ­Ì’|ô_æ8Ûhœ¹ñÝ‘=hÖ3ÓuÅ{b΀•…ßùþ±ÈJæ…ªSÔ ×s§#ëÈ4N´A.]Nz4WM3Ç¥@ª]hˆ½œå=ùÔD œ’ÑâÂRÆòòø OÎmýYvŒšl¡.‡,‰ñX´A þnëÈÆ¦ì•2H%¸‡“Ú"$Üt´-s vœÂÝòQêâJ²mènê÷ Ç̧õß²_̈ßóO+´[«>¬;“c2_P}üà¹Pï÷`oÎöc9“N …e ¹gJWÿ©~Eߢt°MÁ[¡u¦k `ד!ù0~íÇòÅèÁ,±upÒ3HZ`€QP …9ttM_ìRõ«öEßúBÖ¨î.U#±º=ûUܨ%A¹ö×ÄÑa­˜êŠ /Ä,ǽz5¥ôÚaù¾ó&{=¢ƒp0ˆ‘ÞqË¢Õc¤:µÎA¨M;Ä‘¬?ç£À¦:z4¸»Mñb‹ ¦Ì¬è‘±ÁÒ.PØ…`A˜'ålpù…†SÇ=‚†å¨!ݤÜÅ=–„rhÞ’¼ßP!}]Þ­Zpõ'ìúÆ‰Š  ‚ëΨŒv…VaÂëØ.E€_Mp;j¿è߉ïjA¨Å ‹í‹Qño»Mp×5ÄtB}=5»Þ£ d×=ãDÚ×^‹òC¼ãN%¬ÜM=W!IfÄÇx©ú‡·¬gÎÊÄ ›Ì·qɘ"[}hú¥›‰·³dúelRÍd¬N2õ„ç>ÀŸôÞrƒÝ_ûÍÍ€†àËþ3bÙ~‘}Üu~·'¢I¨ý$îÖ‚›ª¤~ˬò–µ,ᓇoë Ô%r  b‡ƒ4Û4,ÄåFد9Ó£•ÙšèåýÅà-fõÒ£¬x£3ƒ™™Zh,ãUôjI#!Ã^0•-®f|HD½I/Y.¦ÉDŒýèͤ‡ü_Mù& K €Tÿ¸ÚìÒ]•YHCãö3†óðØ£ XÂåT1p¤·n-êWrèyXtvO~rݼ9Gòb¶J­]/B¤Œ d1l#pœeìÀ¦n?ží’ÅÝíÀ5o!4 yDc ‚ô»3·KÕwÝ¢ëAO€ð—48ûœ—õ£w9ÀeŠõ˜(ߣ2B™j*;‡ïaÀŒ˜JüEœSÒ8{Yƾ¶IwOd$`^I%¢(ÇJ柆ٌ-xºÀ8c/4ðzpµ¼¾ä}D8ˆ£ÿÎÆJNÜ„Wb5À0wzà‘ê‡âÖ7§¶oZ˜lJÕymò ³ëýÉé鉸1žÁ‡\Oâèz OxJ`OÔa+PÔX.KEcƒy%ÑÎÙã5‚¦'³ã¾T»U|IHÕݶd’ÞT "åÓÕ„˜ºà»À°”2g‡,û²Ënà©}ÿnùÖê¼nu))cqÛ£~¥‡úàí ad U±Ÿ9öO0´¨,ÁTDuÓ ÿ„ÁªªSœÙ°sy¹w¯\«®ÂB‚‰ñhÆ‚ ´½9 Ð’™ït ²IDo™=Öó!ྯ•ð_ïÛ¿õ >×Ðbj^µÝT `Èïã  P¯Ž÷û »ŒÅ¾|uD 6CðGØúzKòÈ¥õ›zÚ !|íñ0&ßjt¢_ñÔmâxñ_ éQ¥’¢0‚I—ŸizôkåSh ä"màÚÊRÏÑ>®Ò^_Í)¢[,–IÚØ—ÙÓéóǞ³Bl'mÔó-’$\wg^ÕÇ(‡3]™*úÔÜ<ìàûßP‚¨UUª‰{8sÛÿõKàhC‘¢‚[s&®N)ú|¡ÿ GZä"¨ ®4FÌúH"ë¨\BÑBúÌbž´ÎÙ¶Ä×·k6½Ã&šYB¹&ÒÁŒcnNûa™N5Á²L<ÿÙ¦‚ZHWmiÖ:ï –siÅŒ¨Þ·SNÄÔ3¸œIâóü9}ògøÞΞ?×LanqÌÙ¢mÌ z†zRÇ>‰G5ùô(†28'¦5OÅsb¹Ñ›tù\¬EÑà.µ;lºÇšµñTÍy£j‰KVU¨·àQÀ:?:HÆå±øùC’n`¼"¨\3…MxÊäÄ}!àSáôµ±Ì =@ÛóPw@¿À–6tç àwƒiadmÄê·öº‚]Fiö³Ì†LGRF¤‡óÒ?ó(Ì 7}õúhœ ˜ÔkZƒ@ïëeÝÜ|ÛS µoüþ˜!>­ú p<Þ]hè /¥£RoÙ¯Ìu„›ëêv\†Ç®ü†eAfêøäO”/šwMgÉN†.Y¾J×è× ˜hs?5xä±ÊKX+Èk’A½çÒ£I%Ö´wE´KMOCåêO—ˆçÍÉZ@ µñ±7 Y]²8A¡eX¹.èçWˆµd>]Ös`aRkŽ!@)ÑH©ù,[T[‡MpÀI¸5[Á£Ó(³è„Ž=º+e…‡ªü1 Å¢½ýâÿã… P.Máx¾­ÛôÎT+ô ~ÙŒdøçÂû•ÃgP›ý¬ƒ¢›'1‚¿>•Ë™&9$ËaTVîZäǪoÆ©Hï·4Äsíˆ#åR8cQÿÁÌëî‚c+IõwRtçkÂŒµ˜~Ì–î^ª!ÆÒopü¼|{†zR7þ­sà îÜAuïzÿ– ¼\-ÌÓ¿ë»0I9?›À€/á a÷:mE’ÑkÌE¯‚õÊÄ-x©tÅ^MÚéØë`û%ˆË'á 1\ÕàÓ-±WhÐÔD‚Ë…Óû‹`®x;ˆBï¤ñ°¶YF™k4ͱ!—Vò€~tÀÞÔܲƒûå”O­ù=  ] /†žõFùûw¸)¾M.ºžþ =àaÅ:ÄÄë̳æ¹Í€¼ßEÁ¯l Zo»¨*H-]”{8ì¯Z¿` )í}Û…Z¡b›—ÙÃèÑ!•jxõ)E{\¼Ý&U\4k}*Cƒ5™åΔÈäü«]œ Ÿ=õ-7‰ýýÃù =¢ïкF{–ÉÌ·«|$¾'b>He×ãæ€y&€3’wÇ>f)*†–6ƒ;5e ð€½èS‚UU[GÔ‹áÙ‚ïJÔÜ·Xv“ëV:x\€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/_abi____.pfb0000664000175000017500000007642313607302650022503 0ustar rptlabrptlab00000000000000€Ì%!PS-AdobeFont-1.0: Arial-BoldItalicMT 001.001 %%CreationDate: Wed Jan 27 12:59:35 1999 %%VMusage: 29120 36056 %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. %% All Rights Reserved. %% Arial is a trademark of The Monotype Corporation, registered in the US Patent %% and Trademark Office and elsewhere. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) readonly def /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Arial MT Bold Italic) readonly def /FamilyName (Arial MT) readonly def /Weight (Bold) readonly def /isFixedPitch false def /ItalicAngle -12 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /Arial-BoldItalicMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44342 def /FontBBox{-248 -250 1079 944}readonly def currentdict end currentfile eexec €v(â8{Úè„Q§P c¬¹Wòå²5ÌÈIÿ‰gã .€_ÔyVæšÿÏÍmƒÄd0 ×Joz€]«µXÇÊ«<ºî@ ~“îÒ›ö}-L¬€{óu¡ž¨\%PFíÌu¸ëOÉÕ¿‚Ìvß XcP÷Øa"3åÁtÓ+/q¸I0“qú×çP7޳M6§:‡©÷®R BVN˜­Qj«Ã°¥Ò×c@THV·”j{kóŒ 3%c||l\OFϳ`dü¯¤†AC_« ~ƒÓ:Ë€®ká‚w¼ ó*ç Ûï¨&ŽÃjMµC•Â&$・°ÀAÐ)¾Ùl´ÚLyw P懮®¶AJÛðŸªÔv+xÕ³;†ý¦®\Õà¡@o.4‡‡û\®Z®¹ ÀZ'ÕÒ `gKÀ艋Ãz~ú'å5XÿÚª“Ž´ÌŒÏ{) É1cìÓtY­¯ÍXˆŸˆ†ò´W¾”¢sÀdœxV=a—¸ê€Ê´¼Ú1âi1²î"N˜*’þZÚ^V~ôÙ•L—ÌòlrˆJøß*ŽaN@ƒÝ\$¼ÃŒ(Úâa.º`ÐVÌ»»xbÒ¬b™À½mP³ —Et~ ²®aý`ø3àà &¶Ío¯GÖñò7Þ{þf?ê(mе ì+6Õ”ÆQøHÀ£ª:¢¢Ï¦üdî•¿œýýäf’^Ynr$¡±ò™Ô«swn%ÂÉâÁ’óTÞ0gä6Þn&ˆ>¢ˆ1á•£q©åBN6Q¨µ€\³^W%ÁøÜÜ‘ç|¶H°gð¨U¹Ûdùq{ÿo«{_¥Ì€-0™á¥ÿÇùÈõwE¤Øé³j?¨‹«;þ60 ¯9^† ªZt~ï`¼Ô«Æˆ`®3õ3ÏÎÁpd%“ƒþ°Žá†4Yò½sš 7—½¨–ê¼ÂCÝ‘Ž_åæ óöÔžf¿+ )—`ùiy{CF “;Ì)5Ó˜5•ÒK÷ÝÇ.Ë)»·ðÙó»gIð~;“ìÕ7üÒ&ÂìÁ ?Í”‚=ѬËwØq÷@9ìú¨âS²BçÊ$Cb±gý2­^‡QÈ-»– @?õ » j/ò -Â}|Ûlµ_’PÞb]Ôˆ-*¾ÕOŽoë5¶cò¼÷g„¬2ÿi­s§‰ZôáiQàòžÛÙå‘gî”ïŒkuk š!±Ç`«ÒÆY!¼%%'M÷‚nÛïJÒFC*àV¿ ¿j[ËÞ—ôÉ‚H ”b]ù–¯9cïßVΚ¬,„ )£UK•|Æo‡¥ýi2¡{6OŽ—ÚªžR¦ @ÈǴꋬÏÞn¶Ü`aËLN¦ÒüïLê44ú#îqµÔFiDÃ;WY`æmÁ£šââ ä¥^ëdûŒÕ8ÝAi„#HÞ?t‰ïƒ=€º{ZFƳ²*a=d¿;s&ݽ¦ ʈdºò½×4 ƒO&m{ÔùDâ“Üw“¢áß® ŸIðå…(ï òœFÚʾgk<~µ*ºnóDú¼ìVþ´šS‚½¨¢›ößKRzg”äè¡;Ž:û<~z<–í€Hp²`àûJEòkp|݉@%'@–£RhEs=,  9ú¤Ú‘@ƒ†²„ú:‹¶½@ÎкI@¤œØ\ªÇ°ÄãòÈCÔÅ/Ó®}¨y긽=F5Xî•ߌL#mL2 ‹ÚölÚʶ°e8ÂC~ŸGõÉ«EéÖ4‚ÌTK\¸à‘¸IT©°n™KØhKrãÒà%9ÿQ;‡.n‚Ã2]o)Œ–Av &Ôjs²®ÏDÀX0ZíÔ´iðpmÌ%ì¼ôÆDià ‹c¯*ˆjëy±s»2IVÎ ö;ãzs ÒPX(”@ëUîÚšäFô:3Âqe5²%Œúò šÉ³Ågë¢'r“ «%gŸô˜ë'W’,üY¦$í›g•pt™”» i4y½@°á¸š…j11áZv©„YCÎÞa¾ÄZïû—Ê yn,i+l±yG½’¼Ønhçíºƒ;/vÙÝéà¶H€ZºµòˆÈUÒîÛd5}2Qÿ £÷M¨q2’ôû÷Gq'—31'Yʲý‘i-þö¢ÂË9«wê(™c©óèaHÏq´,U·B‡Ýi4ž$Se06«ãjðMFÍáÿøÐI² 7øJÚ®hŠÏä´H‡¬+N€‘¼ 1P¹ÍA?e#fHÚ¾:ÔØ ÚÖÀÄ´ôÜæQSržjÑZ!<ôN©*¨" ¼ZµÛãFòß:MÙ¼qÎ ¾Üïá½1f\»—ÎfeœøÊ»C6Mƒãyùüj§Ê¯(¨¦Y˜n ~uÊô–LʉÖ窗ÙlO¡x䌓âÓ2¾¢#š)«3Fãa¯ÚQ¦ú¥Ò œtŒÊÚsÕÎþQ&¼¾ËÅÔêÿ³à£¡Æ–˜:%Äm§ óãzÞVg4Øb;ä3;ûá³'"ŸUJl…WWGÚr?å>”R8b H¾O~Xòqã¤9ÑlìUŒ€Z[bž7ã$/b¸$ß7’e*çˆA1A\³Ù èœáˆàÛ„ó‚m9ßLU2»~“A8YrºÝ^FZBU>ù4pôW­¿Ùïk–РRh¶³ß 5EJ{†«Œoa<0“„àǧ»è2ä,¥•òÞÓ5}J‰:ZèÜH ó5æ¦Àa&N¶ ô‡*<©d­§QR0­J] ù#SNî×r…©“Ý|Nå*ètÃÑz:µõ« ðÜQ[Ñ^šSR™q{!ËîÄ©\í¾myPˆh›<¸œ¤²òõj¡¢>æ ûÖbס„ELfÿOûž—®ÿù1£Ü¼Ù—dN¼»%½)Cëðœ*™ÂÞHÎ –¬rèæýµ}ÀĈJN°œú>ª¡Æ»xs7u¨*(Yî÷«vì=‹÷´í(µ†æÈi ˈhoåÎ6j·z°ÜÌû¥*TD0¬ ö¥9óañø= Öš«Ø<¨Ùé»Ð·ôï]Jö¸z+ãà¶;Ì bÊIB!íå]-h¾5B|­@ÙOƒ À_ÃEÍOÔ‡qy fúg˜Ÿ@‡ÄÀnñmª0zâlËÁ@=2ÍaAŒì‡sRyoârJNHÅGÛôKj© IG;§uÎþÖ‘75ɉþ¢ýM]ý)•îp|®ò¥ Ì)“M¬1c”þý «”,Öô>)B˜Æ€äHJIˆÿÛžÕ]‹|Ñ_‚ª£ŸÄ]eõÌM|6&Ê+á2OË_qš]Î7õ)ß”e{H„ocÆ&»Y|Üa¯xQA¢‰œ¿«MÍÇÅ·V+ R#30q²¨M‚5 9žà|õÏ# Höº¾Àv}Þ°Pº7M£Ðà\o7ŠèS…öh Fð•nÛ,š¤ m]Â?Z–¨­Ê¼L¨oì2ÎTˆgÖ\üÀ±×ìd%ð\û™ÖÝúfc–ú†Ç¯œaÑ@t”Uö‘å Ôj…Üâ”{gÏÓ¢³Rß³¿ÞzM C$¢A>`{gÝqZÞìÎYZÙç¯üiþ„ ~Q@Gä¾%â|DºD¢' %²ÖBb  »rÓ].úêîTÓvn¢ý’y›•w;©¡·Õ½PO§žÚ^¨–'Š…]jH ¥$<á: èú85470)$ëÆJ-\®nʱ9ÊbIdÉÖ×—‚ãæ« {¡j’X½xÍ0¥q-)‰ÞýT…rÐMÌéL°Š'€ e,D¾…ïhvxÁQ¨6¨y@°ˆr´¾¨Sïs?ß„%MíúØýRZÏ´£g@Ǧªp©ÀÈoÓh—‘æ¾Ñ¼¢KÏ%XÈGù÷èíå°èéL9ÁŠ&=ßLÌkIW íŸ* ì½Ó‹Ø`£.Óg†Ð]A™Hg eTê¼EÎŽÇ@Ÿykc#åFÄõu`%¼ûdC÷˜U-9·wEjEöþWúÙÝâ]—ʨ‰6A²lÖdovŸ|ÝaJºÐ¨ù Wsd{ÿpk'I `€ødÜ:ŸíûÜs Œt±a¨ýñkW¥i_!A‡ôÐÁ÷È#ñ™Îó¾ÆìíRJ•ÀÃWè[[úç¸÷ÈoùáÞýy8™°ÌÞä;4"þËüþXOÙíâˆwWî 쪹pÛýc»ù1"h ä’hDè²}9ðiuÿt—p  1ð•䯿þlÅ02[–Às„JÚHES…L~Û1Ù§u““rÍ4¯Á×_ºw:MgBC\’öãqÏúæÜÉæOê~ äÌXqÕ¶U{>Ù§ŸæýÊGµÖÄ—¼½jÙ1¤=`ôkOšSÊÀ’9´[Úcñfq`ÌβŸÌí&}z8[qèûDbÌ ‰ž‘–€Õ\1¥‡Û8ËìEFŒ¾òE½¿`Ÿ“}[™æVÂÛóVžskSYqâlˆnÁ™¢Ÿ‘žß$ょ¬|ÎÛ†Z› 4,\ä}76q)vEj‘tšÉص[§>½šRSÕàdÈd”Q_¸O_WiZ†òÞ:mQ]’èƒUë‚i»(]g¦0‚õtþÿ…H¦eH}bw®®ìÂreà Y'0éZ"IŒyË0óýì¸qŽ@%—Qý¦pÉ'(Z¸ ‹i¯@͈ðßϑր©>m8LZx•FŒÞâc1½ÄÝ`½#‹rå gÇN*þ §ô¢böØ}’L”­ÃùÆj‹¬ðp’=šS—];öÈsmñz…7YgëÊȵÁó¦ù4wÝ4`NÁ³:ý¿ oE›…þÿ:Ì„ðähšÜ8/¹Ñɇ‚ÇìÚ[€½{ÇsSCùðÚ_¥§%Pn`~¤å$,qhûòò;“Èh§K˜‚Rª†7¤çJlÒ< ê>À URhãÕ‡ËÐß4|$¥'A×ö$LEÅÄQÒ>Ó«ošêUæï–>­’åþº2ÝÐèd"@ëÓ=Ð(’râð'9êBNÜxä¢6ø5RúO@ï‡%¡»®lhbù·ÖšÄöü"z¥•µo¼ûVnUÜÀ]Ê…jר>ˆäõN€Nž0ëU)º Ö.ûàPÜpMsg |ïÚRòviÙtL—¦×G¿ÏFP¾/,½6-L%.™g¡9Üúþ÷¨6ñ”‚wyWQ鋿¦¨—%}äÁìÀN¤>˜‘ cyS ¶(f‘Ѷ.ô¼û b.w üâ+X~Ðê¶wïT>A΃g"þbgú¿i,ˆ|fÚ™•ÖWþÛj!ò>UWÂà«zh vðù 磞ìhB·„Z˜‚ ýðgX#:¹ ãÆÓŒÍŠ/?RtŽp´ÍÀiœË?¨ä( &3J'IÑy6ãD·æ‡a˜âS“sˆ¥Aó*„{ÛŽï.x¢4ú™ƒûßm‘fNUUNŒóåŠ;y?–Â9ÀèRÖKpæÕÇx¡Àœ{½ÿÇ¢”# vãsyEf7@`­¹;W P;ïÒ˜'è sR“r¬Üù˜ï(þ§‰‰@G»BB8ü-(Fa\qœcÍöÍp<¢Ÿð¾W$Ab¥Qñpòö‰Ñfh°¬‡Ž¦^¯´òwM»æL¨eîâàÁe£‚? [Øzd/_Jñâ6~FðR Ùs[WÝå`YU!â•`㩽ˆèÙ6–?”–¡u\®gçÃQ^ÝÌÛ!ho¾ç“T¾{àÄóší–rZ(¬nóF¾K,¾d9—‡!{ÌÌëfŒ´C´ÿ°Õ!¦\ÙŠ‘ i<ñò(»+A >ë}ëÝ"Þ…¯“K Ù°fl‚Œ•fµi¼[ú6 ©Y·@½tôóR¹AîEv÷ÂÛñ±í4*ô˜Ik¦t¶gOè -\Å.YFÁEM(‚DY gÔ(ž‡ÆÖ&R8úuU63¦ã<>mvˆQ…éûø÷n$vÕѬ•­2±·…Åü€gîD›9Vðï–g£”'ŒÄ›×5Qî3У>gÛQý=ó/[˜±>¶ù)É î@ª'#¦ÎpÒ:79v^~k¼ úõ6>+¨mPjÉØ³˜Ê¬@â0’ò—²3(æÀÓZà^NYrI\¢•íÊs ç¢\üËjIà€‰ð0¨°Ç1ƒÏ¥¸©A|ŸAmt†ÜúGH˜2 õ)i)Š>âïÉVû)8©÷i)[XkЋŠêÙüCÊ4>!ÑÐ3]QÐ~Æ*æ&®>›Ë™Z‹QØsîUÎ9™¿!s 3ˆíBS–IÏ Æˆ:O ñMÈè„Ìlõ„·x£; «:DžJÞ+sp^ Z Ž'ˆêK4åpå,õw,?ÂDêûËc¹úSBM~žZ»BØN‹ägYÞÑVè˜Ä›Fz o14·ó¡ ²yGÍý­Äí PÒ·ÕØÄ“f?|<ÓçÍR‡^¼f×èÞª“_Mû¥ZàšŠ< vx¸ÉçO›L7 ?ÎäBw¡åžŸ -nçzP$/@wF¹Ð,C+b\£"ŒXxÔ¢ª'uj8zY¼ê‡# ôAÅÛ˜_Ý!¨çÐŲá³B£°ŠÈÚkÄA‰ÒÚ µ¾ZˆjC«s©:&{`lV½ÏÖáBª ugà'*<üî)y–Æc/½AîVJÆ@ë´ /଱Äs´Wf? U“G*¢á;“h®½Ç¬jÒL"ï…„”b '¡-/ñ½AS9¾«_Ž:ß0ßòSFµõf]‹t³×éXH!Or-™5Ùݱ…‹^h ¬1F©0Ž¥Ùè™dé%Kn<¼@ð<l§•,äë.A:ñOO$˜f ‘x!æa÷C¶á-³µ?þ ©lÍ”)D18ÄÒÿƒ…F_î£Ø5-´Š«d´Í&ú…œ2_]ìá"wý/õ–RÙ0ØJÿ?ž¡¯ æŽŽ"a…òþ$ Åu÷#,†Ôv$yK ÛS¢LÕ8ðU±XvB˜¤FjDbœ|p6L ËЏT‘òH?€¨­)RüΡO“ùÐõ±¿ßµéü£éªœÀ¿¨d¡3ÀQ6ÌŽ ÄÝõ* òeSÍü‚:È-ñ¸ <ãæø&vavúFK³fœx[œ›úÑ7‚ô|šç%寋£ÒIGÍ"nÙÑ}Ò–M–sİ íiDéÄ×Ij|žæ4ñ÷pâŸSOËÁ z‡ãøŒT·'}̇~ÙÀúqÞáÔBÖë×í'œé•b·Pæ b–øT£}Uš‹%+H±¿N@ œ=™w«ÝÈ$p•ßÅ##l0} ›ØÒýõn™Ü¼ãí¤q³E!û h/ñ(à Ƣ<ÿ[Kã›8œ‡G+²ßÞÝÿwMá…XÑÕDA?€Cu$ä4á.¬ÿj´ðç¿eK4§¿»ë`|¤{Ÿl¬â •mFä ¥ÿ€{ü`ødT¯è)SG@Ø%Þ~ ÈLƒž=<éZ~ØRzËnß›©“šúØ@ÆŒ†¿åÁ…Ît½C€‘Ý®ÏòŽm™ì¤ÊâúµŽž¹“Õ*·ÄèéL9ÁŠ&4›d~ :F@ž’yÙ#wmú¥*•ž»Ù¸p¥;Ÿ¡Aî벼â«PÞà0MÉ*%¸Mió˜èê*#Äò—;¥žrÇp $餣#¼]$œJ;ŠapæF û»«`¬¦'CÑñ:øÒ³k&S±YI¨†¥ouÚ–ê%\| jlúëüÞ¥âZÀ±{JÝÕmî±øÕ×îµQ9È`¼rVwr¦—¾ ©H>ë}ÿ1ŒE¡>O,|à-\CÁ™ÆCÉç¶Í-)…ÀàÊ~ö5æ¦ÀÕÓ&o4DÐ=ö«{쎵JcR”6n¦7½c¶¶ˆÕÆ}†I¾«pD·Æœ~†âKìFZ†}ö{'Uµ•_J‚—–ÎKvªaoètÊHõ.XýAÛƒ9Ÿ§‡å$mh»‚MuüÅûóÉP#–™BÔÞô9”§â•;Ì”a­ÙdD—¢ŸÞ-¬/âBs[$l8ªô'Í·k{oŸZÀ[˜~p©;ŽeÁÕ"U$!´5Šîr70ƒDn¿Âff]‚ ‹^‰™"]6ÔÂÌ_àyœ¢ »f uèåØ}]²ýºü\¥ú¼'8r|¯EPKš¢í†ÉâŠ–ÏÆÍÙ¦[‚„v͛߾›(ZõÅrÝ€Íù7—ëѬÿôGñ‰újÚµ1‹µpëíœCFp&ÎùØ“}t‚×Ó…=¥LÇ¢ä¼,^úân0Nñ¶ÆõZ-µ ¦»½~ª2åÁTÙ Žr̬’U-mŒ[Ä4’h…`‹w›%É$àN€Éiì(Íß'JÈ€¡°).Oh9Ïu(k7]*¬mÆF´š†ÉËç.‚ëÃ0ŠÛzŠ4jþ’JÙ“¬äVj—Õ"¹AVEÄ‹·íP]‹kMÛ—ùen7Òª§ì<7Kàlø%š·d3HýfDføª 1ܸ­/=qx˜–Õ}Ók>r/ô0î‚9ÍÈ› f˜òÂ_a$€‰AåÄnÁ< fd›œè—ˆjæ]KåCëmðÙ°‰é({J¤QâA5´œšù«öjàò—ÐÍ’dhs•²t ~FïPp M…¦ZÌ~;ą̃VÆ%F Ýq{4{Z³–âë"â|Þ%CYgÐôè,ñÙˆAE­ܯ¹H‰c×öe>Ì~P[ á3ç“í#±dÅ¢Gà[ª|@¢ñî¸ ÆVðwXûúˆ6 &Hæ÷·÷Àñå0­ws3Y³ŒväRôRc¶ÂJ ë†É÷è™ *¢•ˆÃþeBGÅ$ˆIݶõ£ú^e_ÙD,)«¡Ãz\RZ2˜cR‹‰½W#ÇŒºÌ]ãŸਠŒ=È+x#gÁ)z”?öZÚðµ«Î+k\ËbXfYï?.ûÅ»¢§b‡Zbu®6¼ÉCeùh²w·×¥taKÖb—áùý2uèeÕ¿¢Ó^†¯dO7ð@¿™¯UÁ×y =}*]"/ñHbèIù ®ƒö](Û jp#6å;¢ æPr…ß»c•PCžòªÝ²…j¾«0`œ§ýrÖâÝÒ Ænø2—hF„t*þ¿Øk¤I÷›*¬Ær—=39ËFDùÞ÷G­’‰p9¤ xÍ$–Ÿ ç€î>¿,×%îPýgOæþiu›O4¹‘šÖëÜ6WEŸìx»@\D̰|¼zý‰uò?wwTTøWLæÌ %3·`c,„sÒÕW`‹Ä.\æòZxLkug°’ÓN½{K:(Ñ®©?Jfë´?> ¬®…øþè4Râyœ¶ÑË•“%3Í£ðHìQ¯nM­¶±ILÓÚ¯©,ÿ±ìG¾pǯ{žÉsY”Åá½Æ…EíY¨ŽÓ½â¶íÿc<Æ_øÀT¯¢Ì¶üW„ÀeÃ|‰ „!ßáþË}©i:~š¥—ä?Uy§Z º6v šUÓ,tvטdªZ%QÛ4]XEX7w¦Oåðµþ:B•‰Œ´dQº'žt'7­³áTç¤È´­gÿÖáMç8ßFÓÔ"n¿‡ ¨·öÏÈ^Ÿ[à« ÕÖ xðJÞÌ.Ù—ÂÀöòñQØa5î­÷ÀÑ&ãøíâeƒ­R#èMù± õÿ •‚i›8w›že9ñ®r‹ÛÓˆg&ü)ƒ§ÜHbÌ^ P*’³Dxjò”fÎS; Èe¸«ºÁÈ@Ñj×èÃf¶R¼?Y¹’2róC'ò¼œZ±pˆþó²ê¨7K³ ;ɤDÝEh-$Âø÷ $Y´9[¶ñÅü]X¾B¼û~uŽoEDÔ¿îËØ6H²ðü )jٟˆ±½@BQïÔ‹9M¶^Û‰º=v–Fÿ![T†p´Èh`ëâ 9íÁËgMGŒ+—>GŠ÷euë 醶¯²8”-š7Þ`XÕMÞC@òêÈÃL¼UË«ú>!²Tˆi”SF¬ß—L<Ñ´€PAw ÅÆdϾ¨©r˜£©·†¸gËõI,U9ïŽàÁÛ) Ú7ûÓ `Õ¢¦HáN\¹Uâk¹ÉVþ¼û¦yÍ=$]:ç᫼6ŽU5`£ZPÌ´±¢ŒX®e±gok®Ù;ÏT¨m`ËòRÍËP­OÙSü5ê£fò ÄD²?Ï!Ú«±ëtÇÎmÖ+ñaý!sxëÝ èÝ©ÛJ™­ÞÁQÜx ¨.&QóçÔ{Ž\¼sHÇ™E0ÔÒòš¾¨~º(¨L˜¦Å^ÍØÿbfc8‰Àñ®ü—â ‹Dè­ÞáùôƒÄÁ¿ëkD¬›X”’ s¤•)ÿo|;%;ÆWªN÷òÝ÷s´_æéŸï±Óåí^+ÍÜÌƒŠ 8Ìøù-M§ûÄEÅvÅ2A¥®/ UK`§æ&:ÍøJ6lÚŸ¶~>ðó¤ÜOi­ª±m Êl>ÚMD†A8 Æn漃¦€#ǯ¬Ô>Jíí rÓ»Y»Ñž—žgÑe5O„“ƒ@ñ.l÷ðE@‰°ã— 1ïË©ŠÐØý!ƒ›j®"ÛDÿÌã$6 f¦» 0ÆÀ/³–q£AL”ÀS Ýõoì[®ÈZ·9ëlsRP½DH9Aß»fGoÉu%ÑjWàþaõ#N‘úêÑKp╬¹Û%çmÃÙ §#çRIºm4üuÄ.W%AJ¬¥ÃÈú“;vºgãß­E cÿ¼¯ü°ÊúËÓˆª(Z¤“j9‹#; ³åäøLãô›‡¨©[rO/ÆýðÖ’ª×ÃkÝ~\‡¨šDf–(.ÜR©dúmci"ä¥|“_°»¿].¼}äl¿“ý ‘ÃÇŽðOÿ>Æ’qbühhúÑýÿ¬8»|äÌîÁãi"ÉjÖÙ…5^Là-€n£mŸ ÍqÉ÷í=ù³×ìt{l­)ìZ#˜hµ|˜D_ï‰IóLÙ|—êC`¨, ,®yÎ}vPb¥30ŽJ ÆMŸ¦’’'l¥gUoŽ~T0*éôJJ'¶%p6`’"qr¡nES/óÄ8ï±´on5ËpFˆ Ô:m° vö_+ˆCSZ]†Øc7ܰMû™ò<óaZ¿Å9¬!^°-GÑjG w5ŸPrtŽfáà{°qÄc7åSZ—ÊŸ2–{™™Œg9ÿ§'ó. šnc„;úwK7c^¾îÞaú€c'•=üÖ7N‘PüÜ›$,œ À–±„ÝUO ÙÎgÆãBî‰ûNáSºp®ðÓ¸3´€ý_LF4½'ë’¦E«Ä»"/ûã™n¨‘ Õþ<#‘3’ª|JüÄ jÑPwp^}úµÿµ0.×4¤ü!1îZ¶g5¥YÉ*H{ÕkœÚ}æ¾¹~‹k4^àaÚ.X¤ûqÁö½R™\ÐÉmA%ã8Sñç+|Kbñá¯K”ûØraT}ØŒ+y¨Ž£Qƒ·´8xžQ¨Ï”s)g¥©n’Òðò9Ô"ö$¥ŸâÛ˜çˆÎ0ïg§üëÍhÅŸŠJnBqbÙp–=ôº&v °ç˜`±G=ógS¤];×z×ÔEŸ‹Mšm,ÏÁü!ÿ>—)™g\º†Ô±V&‘¡:S“\dSä oá«6XªŠ²Ðà$£ ’-dL46î>¸QcÒÅÛCµÏã!/›kVE 9?@Ø ¬<5V]?¢uDrç„μÈjº%&þÏC•SÓL1õ1žÁÞlŽtÀ»âw)>Hƒ?I‡@>nK»%M¦?×Þ½’§º}ˆ£z; d{‡š5r}Ûj¦Rre0°Ë†÷|c~Ø9DýW%`í´í¨jOêm’ÿb‰1¶E;…:J¨ž,}°(ù¶G™¯é^b6˜Ñª†æ/£LŽUêlÀ\hPúˆ” Ù õ[CX’·&ö.Ö÷n¦ç}½%iØàˆðÚ‹«©ãws‘Ô‡ñ:OÁÆr6ÔWîóÉ6k½‚›Ç~boöÀ–´Éx)ñéKçYiבm|ÉÁÐø6ús„˜ à÷ÁÙRó¥¶«;‹/Œ}Ø‹n 6àm¬uÌ?y™_³ ãg¹ÞØ.±8íT&[ 8Ttý…r"Ú ã>_ƒc-:\Ž@NÕkMÿ_»_ïŽxõ\‰ƒ¬üfß“ëXcÁyËÃl?±Êă´!¥Ùö<þ½­› ¶ô‰‚˜ç“Ñ[4=“éÙ‰ª·€.D¸Ã)æ¼¼€r¿ çª}ëcµÄ>OhÍO:í‘Rå0 A”–C¸È3´£qß·e#W f+ÜR Ýö`¥ëp©C¡®pÆ·nõb\Y+ÏÉ„.#kç¹÷Êq@éS8¼í¾ÓNŒ±5‰G•J›rx¸PÈn„ØVå— Ž¦=!‚–w)ó®è éµYƨþ äô|U9ÜøKMÚjߟ’¨%bGBùÕ,Yæ/­wåc+;ƒI¼ãÚù=ä-q ä æúÝ"úóFž?*{˜h,n ÇK€Áo·zK>G¦"$’›‹‘D@]¸ôÉŽ¾_sãÅ30áÑ%G9s ý ²£(¤JÄÑ€ë`÷peŽo-ÿú$2we<ò.bc†¡ŸdbMùº Ë\É}02†WÏo>Ù*'M÷‚nÛ“;òÇŸ=ù쾈æóC&¿0Q£4~Th§+\ówFÉ‘ngœ™¶àyÝLëC¬Ì失ðcÊ€¼<dÍ;ÇTEž {àÂ_g ‚‚?•; 4ŽñÐQäÜö½Ð¥Ó¾<ýô¹Å³ ?òªzzߟó›eyá`âîVql8âO(÷îÌà [Y•<.øx-åX§„/¦`’éšM¯öi )u4o,ûŸþ¨ñÓ³€3’‡j¹™BôidØiN¾ÑhÍEYKX{>{à0©”tù=ZÎQ|FÖHÁ'0qRµäÔf4M)‚¨.™ö÷.ŒçC›(bŒ?„æâÄ<Á£_~ˆN-¨¬Á¸ÑêêäÔDý}wU”npQ=ÀŒd ÓÃwˆ[UÓv’rÚ“1ŽQàþÒ3á­À8/Ÿ÷M+öe`½•‹§ i{` -aê0û0…; Þ»4Ûš‚$ØF0×µ%{¬æ‚Þ‰Ë{:ñTKXµ¶Z'±Bùú¥7)ÐçZ±«ý3Æ+êLI^s™ùcÁ§o )¹`Z#D61±,—NÿT9™š9Ø@æ÷ÖS9ƒefM‚o@T+¯‘¦O¯cBEx×Â\Uè¢-F=%‘)4éÅÑ&U0àõ¬j8@w’Á{qiʃÌUÍ=ô>O@m © õ ¼«/‘´Ï6#-ŽH\×+µW{~ôðáÔT@ߎoK=4?ÿ‰R€ß<›Å&¸n 4û„Ê”¿üósŸf9£Âº­¿z‹­g¿íèpf Ÿ%ÙKxŒ…ÜO^è­VîuXÉ, ƒ Zôd{UhEð\Ç®°C畇úõš1N€X[¯³¨°›â¥_B…0ýƒß;ë&Ù!A^`åD»²žÈëÝ[m«NýãÖϱ٠+´’õ¿XlV¬EÚÄj„¸Œ¼eÂÈä*t*M·¡6ˆí×òÔtâ¿õó€”´OmZ¦A¬í}éÿhEeЋÀŸm_N¹yÐɵÞ-xUå7k°WÌd«G˾³¯M—à­4zÏ=*õ(¸½Q™~[‰‘ö ¹˜Ÿ’¼é‰BŒ¼‰‰jC´ÈÁ¥•˜ñZpéž_þ)l±A*S½-5fGð‰¼®‰,F5R‰Úð¨ E‚îé,¹xçcÆdÝàÌ[žÛ-N ´s<–¨Ê2'1ó’ÿ+Ó+ËÕ›Ï0Õ©À¯³3 Jã̽ó`ˆü§1ETÔ?Þn»ýÒ1Ûì3iÞÍÕ©¯™ŒÎTDkß+¯?"74Ôvÿ´JñgjSÓh¬’¢9±’ÖËÑvWŸ°—/Òü3§qL¬À5Þ#; _®Ž!K¤Ûn0…Žèµb}ºAwrr¼£Ž8µRýeÓƒñ¤ËrM„9!juªF¢ÎpkLs 8ö•öÇÞÿ ä"37¸‹`MÌìö…!l¶ ÖÒBDê¢å¬·¨(C€–~m=éÉ S #·2ûúg›ÝÅ>4(¿Ñ ƒÈrÊ#(‡UûéJ­šdäš|ÇÚñ߀&÷,îå¥E­Á{œÈ×Èᢵ÷mHŽ@Äα–‡w\ƒ5. =Žº×¹¥¨ýi,˜s§°Ã<äžZˆð·—„Ù›š#™ÃÆŸáÈKSÄ÷fOâr®—fé.<¯È|ñ¹l× oÿNÍãk/Uo•†8!`SdÇÕa……¾§ ©¦!xJ¡^c‰šnãÝ {_¾ÎW •L•~¸^©Fu³L-ãU°C/$y¶½;¬ýº¢‘S«ÊÔHÑ’‚'øÆ!ê#Ÿ­1bUÕâ ÄÞi}t\ V'@ÄÁ­g=UXvž½Øn®w¸$±ÐûêéRçð‰Þ¤’ÏQ|æÍ¿É¶Šˆd®FÔ„+¤¦²b ¿˜I¢o ½ã’屌PZh¬Tïa+v)µ£÷«o:ð„µæÒŸ"øH%A6&ìw01Yœ;„Š]A‹ôOx)B_ILyÃîfè’Êi¯¬£ZÀ",RÔ^S:@èþR_q— ÿiAWÓ÷éØW¿Ò¨eófÈ´A,œ°„¨{L¨|ؘKôãl¥Ìù®$ü?ù{ªÀ™e])Ç£dгžHº¯€Çô_¨âÐö2e„bçðLYð•ÅÏœ!›æã‡Gàãâ*ª‹c2ÔE€ç™ødni>ÀöÅ$Ýd“¼©YA£5îšÉÌÝÊíúß9\-?ýc{#»ºN:nÿf9³8ˆSqP»à³ª÷&…¼¦x{Α•»@؈u¹É°tžÙ™(ù€îp”að[jËPtO8yl“J/²Nœ£ñ³èC|þºú&Á|£ZDˆúÄ£áMüHè~ÇQÿÈ» °©–+ÌñG*¹NºuíW}Fr×­­–OEÓóŠx0yØ7Z ð褔0Ë£­Yº¾ëp.ºj¯¤" ¶†£f­d_‡cæqÒ¼2rɋޥ v¼yDdÁµTžÏ²e“©¯Û ºgD-öà t%ït5}º Qê M»1”²Cýv® <Óã¹)_(RG¬E=>Ÿ¤¯Ä¦Ó°ÕÈm<ÊØ¢Óë*«MS‹jil.ÉÙb X”…“E@oŠYXQ%²ßÂF½ì0¢'´*ºX<ïU {åçõoE5†»ˆ¶mx˜ÜõƒGu&Y,7÷–À[ÕWgrüˆ3»xAÁâM°ÂÙ¤Ép‡S [VF|mã7ñÌ ¨"þ¾ôûv‘vÈ£ÆQ 1Rœ“-Ò±ŽÐ×yº_ÂײW 2b˜©¥¬]~¤bºR*â%SÒ ðh›“±0Q»©Ï]´å2gk™EK³ÒÙPGqjõïÞµS¢ä‡‚äo“ìˆaþÌÙ!Óƒ:íÑõ/\œ‡7bXuCŽš5ÚÒK$#Ñî;^­f°óì" š›‡×LÏ‚ûÖ·zY¶ y מ72ŠÃàkÊYŸ`Ð:Ýœ¶édþû· fj×5FúkŽ!n•̺Mfà ŒŠ¬«æVKp¥ozO{/†mö§ ëÀz+hMtÑ#*xs ­Æ«†9p1t| Ð'zuƒCHÓ.––†V7)MVAò/gU¡æ&_h­Þ…ê}N=`4cmÄ€ív(²IË2ÌmMŒB$mœ¡A4MÜóWlë/PUн7«ú€î!4R§†ý\u{Vh*#ªá^@HžSÇæNHËêñ>¤ß]8úzO=–‘‰™ŠS&p±°jÏ3³!y\R±„ù7ÅjñknÒ$LAÓ+¦ªÀóŒ5®j”ˆÁ¬ÆEt;Õ™ Ã0®)׉¶a¾ScßQ0/xåbþ8ÍéKfÈø¢d°úFD±€«Ÿ¨Uäo„0:±WÊÙáŸ_(¦Ýæ4”PßYþ©XñÖñe•öƒå“ƒž±³§²b^ŒÆ4ï¿S²N2UxÌkýªÃX†ǹ{»<•q »ßÎI ófhOk6J™Ä£ÖòíŠw©ZêÂW¿\w»49zýž9‰”æa™ol×è¤V®±\ÒŽs­.h”È[ó©ï5ÚØvÄLG† þ{‰7ñ´º4¬3ú¯41†£K&ÅK(ªNfGgLUA©Tú‹ÞyȨ»Ëè2• )ùqqÛíA·Í]D®OŸt3a-¶:3à‰“ßQ†Ë&Kƒ¥ú³ !¿ !˜Û0,†@Ì¿ÿÉõˆVøæµùB`=¾ Bß‚¤`í³¼'Úo·xÿWÄéßLBbg»f ³,ôŸÜŠ*ÖSn‹d‰;î"æ˜þ) pÀŒçåü [Æ[rím*ñD ¸4â,võH,ð—Ùë ¯åØh´Á¨•ÑjìwÍÖ¨]p C ”é+#º‘ªåÏ!Ëuþ¹½7À²ºå±×ëâu¬¨Ÿo¦ï"tl¹à¡#/ùâEAïÂÄ€ðkªu/Wû‘ëŸ$îö=Ã`R5¥÷L”ÌõÆ.·¿Å)¡‘KÛC[ÔàÁi…[” #G·'}Rq‚Bú&Ýz‚Ïí%€JÆ7¨zécJ‹K+“& "¬Bù¤šfåë›Òæ;t!εtxÃśӞœãÕyz<õ&MàØ“{fŽžÂg`ä²pqtž˜8‡°âþnj¢‘8YS‰ä.Y 51Õ‡s[Ä€s³¦A¹à×QèÏQ¯æDÊ —ÿÐCü”á‘ãøš;œŠS©9Ý CÑ¿Hò)# zÐS?(µéNsÒÕŸ ½5 ªB²ÿ4Lª™l»¯P¤m ]ÖÚŠ/*/W«J®.j™ \ŒÉvGB!h‰Ðb†DH žcÅjŒ?ž|:œçÆû½"öXðó÷rxÒóT—8õ <1‹ZèÈöœ WÒÙ·–I Æz«€RZmŽ&vDeK@ñnÃüsÚëþämzæjœ^ Ó&ß0_ëR" d%·Ø\(ÓÒjíj©yœÈ„ð²S¿Xða`p-çŸÛüaàgå`¦¶gBx¸µNd_Qé„$Š`J“þä·Þ¸nj–0íÑe—7“Pï8Ö€­ãû5kY6týC²¦-œ)&%QÝ‘ ¥TXѦQùgµRƒEf“âE`“5@#JýÒ!ßj/¢`ËEñ¾ÎR«¤»›jÍ39ú÷e„òµ ¹ëFo†ŽL”`hÀ 5" b—›¸°@¥øÇ¸ŠtÁ«†Fì8‡›ý3{,) ö†:‘÷Þ[dºŸÚÑd«zÖ€ç3–ïÒˆõ+; Ú>°ôËMv@rôm|òÖ¿æž zÌæ‹¼ñVÞ]Ù>†¼§•u¥Eðj2d(v/ÙÕCÜ› [§!®òÑ ¨ p Fºú„ë²b‰iއô‰­ ÑoDÊaÇ„JÌßDk”<=(]ߥ°-·’n¢BÈB ¦Ð¸`ô–‘ÿ‡1uw7 Ôçáµ»³›­ï=¶²ö*ùœtTmž)M¥E;ãJ*ãZbÀܱöä´>úþH£‡£Ø¯jI8óŽáµâ]ùâ÷ÙFCdHJÞVóLº©MÆx¸×¨dÍÊžµW+1.ƒ"c÷RØúO§…4œ¼"͇Ìj,ÉllZrì;÷•h1±ù]©ñ£¾ÛÚº1ë×ÍL†óè©—ò[Îoÿ];!ç©;qÇôhº!døƒ×*À;F©ŠcðJ*ôX[¨Ðß.dF8¸6n͵çêÔ7˜¾æÿV)‘¡¬ÌIå[®Ià,£éu~ 2³lÿŽ8Dc¥½Ú÷¥ÇK“À½Ì§s’fE2h‘“„Ae‹Ólmà#šô]L„¥•—„þÓï-#ï´Ž­«å‰M„ÅhÛœÕs°Œ~-th‚˜ø:®»¨ÑA÷B`éI²¤)ÉŠlÂn¿úԲر2ØŠ’²†ç @âÉ´»–hî¯|s*!«C’àÒ>.Gîh¯œýê{½¶R.QN\î¬àî ¤ÁÚŸx•@2Ö‚A}ÍÈ]¤á£Á.—J)põ$ô:‚aÙÃ&¯¬‘»ÒKŸ§|7á&0ZÊ&­ÏðG¶_¿¥Ô.òc‚oú.—.YZhYª”$&X(*Yè!ËÊß)¦Ã—ç—Ì-ÞäG‹”¨ ëËvmCÃÖbõçÓP*’È·=ÖŸí–Å÷wé2¯×ì·o…¥BG¨Æ_)ðæ°—ÒEÅF–ƒDßæÓÉ£ÏYÙŒ¼ÙTEFüà ž/ÚÓ'›ÈšˆÞ(?4=ƒ ÏßÞü9Þ¶&BºxœkŒ‡„ó´ d µPBïäÌð‹$C‚vz`³ûn_ó 9ÝÜpÐ…jègÄÖ7–p¬ 9°s|Vj ‹Œ—¹A–{QçH•傊ø²L+$§õAr+™ëÿ6EÌÙKã§JsØ ”$j&œ‡u‡–„íBáswŒ‡•¨¸³?`¨ßXàýK¨‡pÜÛýÿ2oýºñ ñ«û}óØ–íæÈ ŠèΤ©RÐt¯ÚlM+C¦=¶.@5„è-דô0¹õãðbÜT¸€;±Îës’©++Ø5éÒÉjv»„Ín³œ¾°ˆ 5˜±„%Z!н·Ó<…³Ëü[1a™ªBJ›”y§|𠈆N3–e]ÖmÞËm‹àŸ¶vJ†úî_ƒü:bþñùÇÛíÎRûò ó±\á] AH«îÇPŸ€OF×¾7 G!H8k¹¬ô"À²O‘;,|ëì‰ø%“)ÍW@oÜï£ýØ¹ŽŸÁ7Çh¤µå÷-üÕ 9L¢@æVËû'ÑwÆUÆX¹l\^ûm¬ÅU†õq´&< vÿŸ¶„Åú„Y³V™˜Ð’…)Ĺ!Pt¾±ê~¨-‡cÖÛ"é« Zr¢¢²j‚ëá„’¸t‚Áî+^ÀÑHêõFêˆ+e?:Zâ=?~là„5ÉþìÈüóš\¿#-jX¥|¸^"l‘ç¥P¿±!æÍGϧ‹KUþyñ˜%}²]h,ø{t*ŽyCvÐø+V¢~6eü¥¿j¨ªrŸ^‹¯Œ…ÀÜ‘=u¾jXjTé»'P:/Þ.ʈ•óOœ1x $‹ëŽ÷¿©lý3½dñmÊœOÀ‡)Ú¹RA,mÑÔûwÇ«Ãl?R¨r§Ãü…mT‡ÆÅcuæžÁÖÕ±BÍcÀ+aˆ,ZŸ²Ùý$öhOœæfy÷µJÔ0&Uç‡ë¡HãùöŽnR.Ï eô©­µ>4ÌýÜtm˜tkàlÝÊ#ð¸ì Fˆëñ¨â$^ÕéíXùÖs1l' *éè9lpôöÝs”fœÙ¼Yi˜S~;¦I':€_(ø`K‘[v‰þ΄ƓŒk×óë,o@Ñ^‹u•Ccb #=A9—¡~”x5¹£1î; ¨¬;8Zê`oU‚úãTÔνfs†$l‹k2[|—BLÏf¥ûu6+)qûËëùØ”þYšŸ:³ž«ë± <ƒ|Þ-ùd`e±ëZq’-Yútǯ«³FB³ˆÙ5Vî… r¨)UɘÇÜ#F¢$}@ 0(›-×A5¯#¿˜bŸŠ4} lÅŸ¢ûɯü@CRæãÔº˜Ÿ¤$];º4ÂTiØì¹Jw‹¬êû)ÇanÜ”H¶˜WŒÿ¿ŠZÏ\z.1”•:±U*áj1>®€Zóð¬ yZåƒ:ι1ìS¿’þQ92-¯!’âŸj"'8&Ö‰‹¾Î.¸‰Á·Ó4·ni˧æJ“³ßcÀ¦í· & *x1÷k‡1ðwççÆ3iwYÜ"¯ñòu´¢EÀ²ÅB®ãlžu›ÃY³ýëurÃ÷½4‚S“Û‹hæWg¼ Û2ÃõPmÂ_XÙ'h·ëäžNè8®—‘ ©ÊaΊ›¯Ç´<[¿e*c"l!›?Cú˜ˆÇüNÖÎl‰üxõÚ’A0äF°†çË Ø==ã½Ò = œ/x¶í,Mm¶ì0‡BRiGs¬¢„ V!èŠ7ãAQ§+T%¥~þ¢mUƒbz&©cYUwÛäqCe™'&Hk½Ñ@¯E†üc¡ÐùÊh<= 5C\Ÿ@fYGðNw³éµ3;£×Û4Ôü+·-å_þ^Íéôíºù`&©Ð¢¬ùÍÕŽî×é$çC±Òô"(]| ;§2Mv£I«¨2xgðžLèP¼»;iëh-z°xx\ KëJežKÒµ‘þ¢Š¬™øÍaåvX‚æ›´;6/†’ CX§ùëF’Ù’Ð"0ä2寏 û`5Oøé¡8„Už­”Å\â™=;•¶VmhVIŠ÷²4M ™~Îä´äªŽËŒi™äÚú¶Ñù–1[eÜùÊÚØx¾Óoª)ý(àWÖ÷XŸiëɉɞ¦n¡´~‚U• }O ®|ìË6á€tL C²£ 6þ[e2é¦wKZ§óŠô“z'L/,ÜJëæ)«%Õëï“;å£ ï®Òã¢Ä‹£¢5˜aÍÎ0ÄÏUzÓ¤o¾Žj¯£* !*¼§§w…FÓÙ[) ›< Ë£NVZ¶‰‰zôÄð–ÓD6—ÔÙÒ7r#J~g¨"=9zÀ©buòe6ÇQb@G‘iXrD’°Y¢ÙK8w3â~ÆS‹)£ra1ÓœfÔ„{X3_X^O¦ ú 7f*yÌoÇ•ñ@|–!•òã{@—”˜Ôîß÷цb(5†Ìã.‡#òŠAc£‡ó%fú{@Þ¹¥X¿K.Ü â*³="l}Á”þ§l£<¢¹“¢bG¢æ69z3jZ¦ X§£uí+A™»“¿Á8ßDµ ÙiËb¸'ö:šã-ÎÒB °mv jpÈá¿–…~¨¾ P|#:½Ü‡Z§+-&A{zVZøš]H3œTùo¤†·§ `Ø\ Ûl6 "7§|2¬c-?DHÊyË¢¢uª0 ¿Q_`cXj4pyÁŸ¯eײ³H]y8’BÔC/IUÊŸíãkÛIŽ:„p´´îÏÚ†êÞÒQ/²>¥®¥@ÉU«ÓòI‹AvŽ9 ü-~!U#<^ȰßÏú†špÂiy\ÅÎ_TYÜ5Œu”†÷“ì’2®ÎÉ@À~Â*ãàr¾cÎÍEÑŠA¥ÁúœÐ´ÆŒ$§Åˆîo?2c@g>[˜)]>i|{û¸bý[fKƒ5Íêb̆þ`1áÙÝ&BeL0xŽuá%僰‡Þï{wïÖŒFèXÕì¬KI/°çÓzHK©Ÿíþ6t/6¾`h,Á'5MuœDxw)»õBjh’þKíVöB¸iÆò¶œDtMÌ2ŽàÉOç·º˜ "O‰²Í¤Ã†.ÃðcÙ°¡o·sñ•N£'µ2×EZdopa?WDtÒ ù‡þ:ß »Ÿæ Ÿ¨æ‚ß0Ú¾¥»ª9A3AòÕ*$ ¾7Úóà(]C·ïÕ1øu'Æ*™æþÍ*È'Wåä_Žp¤TÜ §õIß^ù A+MP>?m:ùD¨V:ê'߇E½R©ÌÔùtïfYEÎʪ‰ÐôаáI ñ¿s.=F5k¤w;uÅкBÐns Ë4˸pÓ«Ì^ûÂ=Õ™—¡"]WúF kgúDÏås¾ö.šYèÆéÜz€WF‘„)<Ш:lô¹f¾ß@±„ã×ÄEª¯†V¬ u*qó#Å=Ð?Q~!Ð:&Yl$JG^×!bCóú™E3œŽýYí >¼!T…­%`cû¼¯2Qú^få`Ø"Çé»ÌCÙµM[æ,ÎUò:–[Â`EÖSŸŸ¿´]3õÈcgNyÓ!Œd󟀂·ÄÌV…Ð_·ÌúZ¬„„ôdyoª×¼Ç££ )Sª)Ô Æ5J÷´Þ=_Èb!½Kkë~…gG+&gH®sýï-gÁˆ …«7÷A O:K}¿ fŠ ÄÊFÞ¾!HBRœ(H_j'ðøÉŽmÛ»ÈdI!éj°{!±!ÞûÁ8Ñ\Lz9¿}k2pÍWï’„IhŠeRë™’Ò›ý·MhqÐp5g<<ÈËÉPÅý‹"å!S4òÙÆÚùmÈEŠ…À¸Ñ¼ÍþÊ“r@ïÚ6” ÔÁý(®F×%ñ¸åPK?ª jšH€ß›Ðb†¢ØÜu#²Ø—T6YØ~ “ëhò ˜gfå£kÚketÛä“«'\áGaáDwgcœ_pìS)O —žý:/ÄÊ;9Ï;¡lœ“Ñž ­iþ½Ø10Í7ÐÝÁ¯¹º¢RiÄA¢^oï ÷¢œ*vª,ib’ôˆ[ ÉlQn’}À7oBPàËïݰ뎔ƒû–×`ã8\o“«ì¶T]º†è2‡$Tg¤´õÇqøâÅÒUnaÖ Dú@Ó7[<²Uù $lÛÚ‘‹ñyÖgkˆâÎ+æ½5>Ç«>ˆw%ù&Ö8‰G”VÛéú‰ëôƒ^ž:t=+&h†úå0ùOŠf¤Øƒ–/ो¬R¸8³ë›^ ¸D“Ÿ=;RZiÏ»v÷‘£É Aæ2é†jò‡ÛÔ‡´ðϯh»CqÆuê zhãÐÛð†öðå“m¨c5[#o:”jǶö Uû[ëyc&m æ"±ÓÆ—l¨CVZÆË]â¨bG±§3ý¨j}'1?yñ)]öm™W¸ª4€É>ðg±ðû<½Åñ+Ø6ür‰—m&t„ÿ·­Ü- ÛS›I4%%e eÕs99ˆzvUµ^ìéU›,7ùZz¶%ÒôØZ7éúÁf˜bû–ˆGî)Z÷z¿¶Õ¶)¿Òè-R,wI ÜÒR¼…Zfdб¦S«:¹Ð ¸DÐ[Æ^†j»îzÏ øíÚàHX/˜ÿ›1dL,"ÍY°¾2Q OV“«RÁoBõd™æSÛ/c3Ѩ—ze†>€ÎŽ0°ûÑ‹È_Ø)aorŸçi]Uï®ÆâjðSm0¼<í>ÉFy‹´8‰þèüˆKAXT,t¢Îá|oB8ZÓøNEJ[$¬úntÖ3|¯ë¹³DZ2ÁãèÝ(ý§û c4Q©•1ضEMEæU"Ö8©ÕWQD€ yƒŸbç­B54l¼‘ ”bÇî@þ‰W9máέӤv†‘ÍkCv8Ê>Iû2P`î]¯@[aMôŒÞÞ Ý'0«fxÅDgkö+—šsž9L§.åjQ)_Åen ä©«Ív@ŠúµæMVÔ>Ô€?Ø.½š×³{3gzüWg«¹¾íªJŸû¾$šG,ÐZÞËÚ%å ñk܃{˜V©ž9wwÐÈ#æç+¥(U‚ºMÚ EÐUXwª‘QÓÜ.µJbOÏÓ4a07pØï¨¦ %ýnG Ô†ËÞ¢Âk„0ÜŸ^«YØéh´î ðãã4}éÅ:ÓpmŠ9öDâ†öæaAUõßÇlj[z°ª–­X_‡e$)¯XTOã3zÝ»| ûÒ_H±Ï:hä–©:´œŠä f­p±ÓXéOWBΰuA,îe7ö›¯m8ɧ#ÌÛ‚fþ²M׿åZžaYÙ§Uëˆi"É(XÅ£¼vø­Ä$™î.xuA;ÙÝ;McW¿6°Ã­ÿÜÈÞ©¼¶¨%ù(‹Ë—ÌŸ¶Qod“٬˒¬IÙqëž¸Ææ°¾#er÷—~ÜÝ•ÛǨfÝà:¸Eu¹}ïE\Ù‡˜ë¾˜$‘¿Ïo<"êöMÆT‰]*î`ò&ñë?È·'`ÊJë|$ÙT¹à*ÕYŒÎââ3Ûî Ú¡ v¯á@<‡Ê€ùva9vNÝ¡‹ˆøÇÌ2ÿÓLPñVŰŸúú/´ºŠ8Ø /¤>‰¤^HÜX=h8ŽeÝS¶ùçò;MØ û=Ò·ugC§jJìÁ©óÀâug ÏZÅ:oKJ† —Í´éÕV¡ö./ "â€ÇíñFÜÙÇÃ]Ä<.)¥‹“ ¾/×-ä“ÙÂ/„®lÑG÷Þ©èå®P:Á÷ƪCÂz¦ç˱¾ °„%šƒƒØÓIùsµ‹•÷:ŒêÝè9jÄ“œ÷R‹DûI~E'ÖïY’ižG&²C1œ1ª. öýeûÐt;HN”0ª¢éi’øVJÞ…¿‰ºØ1LPNoU9òklìâÈHÙ¤?ÍìaxÙ2úTQŽyɺš ÇA9¡ç=ÔÅA«&ÎLn`vÊÓ_µ¶ÓÌVeE{Vç3dI§Zr‡»\:W>›©~îµu¨Æ®ˆÈG6ˆâU+§p›|Ó6žÜN;4[ƒC`¡ìO‡S¬~2ÅþƒÐ„m¦_¬Fq‡_ÜpL@@ìp°c¦!º$QiõÓ›‘Ëš@V‰rý2ÜV}aLöe¼.p_üxOýĺ5+y©Ã;MºÏzd´lùÚPr©MÑ¶Ι‰K‹H{ojÆîîBÏFU‚ÂŽ7­¢ß_€ôÔ™·‚ÄŒ¥y[j'B¯õ–__íz)Ê«e ÊySRüUöîoñm¶°Œc¹¡R”*Šû“h@9y WuMãÒÁS{…ú½Ïå$W>¢»“ÅΩ#YÇi&nY¯ïÒÕéˆÂ®Iұ霗À¶âÔJ0Ô÷“e®ÁË®G®NÇsÏß&NpÃt·Œðcbô S©þxº×PJLX–M„´ øóbXNw^šp€^%Ù²)°êíÑsÁmyt~=Bºbn‡¨†''Ðûì(÷IhIŸÉ wŸ§Î3Ï 2 s°„ˆÄä ÐÓMÇÈz¡ßLí’r裴c¿Mg˜žY\²«„3nÛ”JŸ&N¿òןÏR ÕÓÞu¸±Qé­œfE[e]7’a CG_{( ¿Í1+Q¢×«ßƒÐψ‹%¶½IµŠm˜ÌêåËçOƒH°0.~‡Íê< û`X÷ÆëÃà!7U²obYWiüÐk{ .-*_•µg!sHþ8ûÊô2 ›}Õ`çuÔ™ÎsËJ«KÖódÛå»a¾R|§i®o•wÚIîri÷]ÕTmb. öý`ï«ë¢ÚÕ¸±±ùæÚ`s†m¦ƒo)+úæ ±†·.¬«4ÿEƒ¹b+ß¾&Y‚-öA2 çGžÔ¢Çë$昑Ÿüœ=Ý'áq#ÑÊ“R®]muÚ÷6ã ‡"ÓÜ÷ ð­g´â`+Ϻš{­D”ÅåÓÆ¿5^¢Œ‰î“ÏtX¹pnõÅ—"úHh—â¿­Ö #sŽÅ„ïŠÙD`íAŒ|O£ègF6´¥¨ïƒ‡“pW]VÓ;È[¨T€>þ¿-*gõa^¢+vpÕ§£ † Þ€û ú{½Sd¬ òŽÈÒ¦øc™X\l®òôý5bWê(×cfž•²”="jx"H¿ôÌÑhÓ‚\“çT£2^ÔP@)ˆjºº,O܃äR³nÂBíé·¸’ÝLó®º(Žr™ˆ’xñ'eßCQz³ñ€Ž +ÅƒŽ¡ÅÒ²þ$’AR±…+±•Ó(TŸÅ Á× øQFI%}6ÑË׉[<”^Ç‹™Âbîe!t)IꩦTaâ§Vy}¿!ž$yçˆnÙØ%ÏÎCeÉ(…4ê  øsìùY)]ÈÜ5oMm"§Iî:Ëü ÊÓÙK€àżÓÜ@ã#2Êp›pËÛJ5¥Xê¯ÌQܲ÷ï}.°ÃN¾Cžª?žÜ3«G&juü¢¶÷Þ„½Ý²ïÃýßîuà*1Š<£Œ–³5¡^W„ ®^=!¤.z>[×5˜‹m¹(lHC'`lXp¦!?N]zºg°P‚ލ‚Ü8ë G?Yáò ¬Ò ŸÈ¬Ùã\ë‡Úe ðé@Õ8ègû“Sz\r.Òv¢_=²k5ÕÚäZ¢Ãâ{O”k 95œÝ&“ï™;,âJh!Ò3uU^¶„wQ‰È1°ŠÞI/³M ÃÈ¿s¯ Äbôk(ÿұψð(>‚jElr½Ëw>IMÜjr±ÇÄs2ÎàÄȺ4;[j,gØ›ì´1ÚÞÁŒd7¬kÄ…!¢¨ôü/V¶Æp/Ôx5ªù A ®¢vb^k°:+1@ÁÏÁ~V÷P+·\pŽÊ!B""}åyÓp¸yü¯ ©î`Tf‹ ¦¯=Á|"ÐÝèiºåå·=Q¼0w#U÷~—'U@ôQøMîa´š$©&µËb~$<Æ÷ºÁ<º³KÜÂeCɰ®ºO·[;þ‰˜³X BIÖ¦á˜ñ”@<ù íšò^I¾Ö)é804Q›ªŠ¨^™ÆÌžcõöÔÃÐóò?ÝCº<òy<Ä;Ó”@nÏi,ÌÅù¿tJ¤+u"Äž±~je¨!»Æ«Ï*†³äÖE*{.ÂJ»ÒBô嘘:ŒcкJlx6L^3—¬ÝEý¨MÿÒƒQZÊRmÕW€…Û©F;À„C!5ñ!5q¥ºmû3y›¨šq¦¼Å·@[#Q QZgÅ‘A˜10µ‚«/öìù‡1øTïÀj¹²áÀXÌVYI É´PþoãOpC~]JTc3iÄ %æ˜,ª¸ŸƒW¸ézðæÖȽÑ!Ü!ô+®ÿäR!þ¾Žtq²Y\÷%êNVZú(9ÉùáZLTˆ®w‡C¶¬T»éJëGI¥%Uªp¶ÅaŽwn:¾¤‚»çð³IrÝOÖ¬‹ÃWð‘µzo·œ¶¸d©¤Ä>0W£øóœ*Ÿõ=2¯¼Úƒfõda”ñ˜¦ª¹a9.¥¥ŠWæz–ÅnÍÁ_ ãîa‘"!k?„W~‡3k­ =»Ý;ÅFˆµtéG+hÌÓ§.­Ñ"ÝP‰Mi°´Zò´=uK3a!ãݾ oB¿L¥ÈQ¦§êAyz÷·\®1„Â7·ŸdL¿$¶¿|CyÒ¿˜¤ÜÒ%݉v²lÁ¼Æ ޱöl„“¬a?~(/Bxi°1H>–Ü™”Éì'^nõ~tc1”#è—Á̉RœPÏHDv§‘õÔç\¿oÐÚ|·I'µÉ„YØ«b†Í2p¡Úæ!Âà‰Ç(åÖè‚]Gq2 óáÁd`?®ÿ¤ÌlIA·¼FÒÀ|8¬ÃõWÜê¼ÊÃ'qö,”½ß«ò…>µd‹jôÚÅÀ‚ º&¡çP†ó8ïXˆ:,Ž!aê ˆ/vªÔcl°¤,9{8ð@“Óã °Mh{2áÂ@שâ%tnqüYKµ¥tÀAr·>üà,¬ú=Z8ìÒâ7ÍŸŒ{Õâ #m›ýí&Ï­ú˜¡”ç/¬QLŒ]í˜~a;»©Sfoè“~á›*Ú§»˜{Ê5_Ì¿dŒáÅRÙ–¹Š³ÅƒÆz5jCE»äi5I!Õe\.i i9úVý‰ë¼ÝhaŠBQ½ŽZÛ‡ÅöP³*u¦E%M4øe(9E=±ºæ]Ø­r¼á›H´']nô¬[Ôþ:­PkGR…„gãxú—œ´HŸU‚;¬¡öýôXùŒk½²Ç4jßõÖ¡+N‰­š…PNùÙ‹¿!™”WñÌ áÈ K 6ïºüVRW*r-sðeMï}õÁÖ91 }Àì?}áú«¤hCìþ.œ ˜÷FLí›ÅËÁâc1¥~­T7Ezh4HS!O/<U(ÁD½½¤ˆ#i"ÜÿÁK͈üªX„æpý-#…âDCÚ©w›°Ž1z1‰§”g2غ)dìLƒµÄ­H8_‘a"g$«DH$§eÝeÁ;myó:Éh1Ëàôn÷&QR {Oþ&@ô[d!5t“¬;ûˆ«a*Ö€:øš$aî4Óžß/m˾RW[J¥k\I>É¢j…pdh¾Ýd;V4k#ÆlÑltR¶N5>ä,wÈMÁaRœÎki’/ˆ©[«áu>gœŽ¨©pýqCäã–Ä™±1’Æq$µ«ž«WlÔ|ýcûù(„M‹*Í:·$ÆË!„¹?65%k5Á?)ÃHÀÚèÊØ½À³dõ8îz-„oU„Œ#ÔBʵ «_éaÔ?ƒûí—–0j4Ûøç8zØæ+ ú±+q¿ð,Ý‘ì>ñÀÆQp Wö°è°gÒ.Ó(Cåùë ïw!óŸï%1¸³ž]îÎ ¿Rj³9êÌß=ЮŽÌñ•ß©¼­K5§Âˆ%w4µXÿü@ò_N«CqzTµ\>ø$2øÑÂíÊ@iËmdvú°Å/!ó¿z ¢Épã#ÚÏVWß =¾eT½t¨ðøT=û¹ÒÖ;–â3èÏš„òW‘D®Ò«çŠsÄÆÐ%†yç¥IÃÌäI©™ Ü'NŠH ^®oQ'¹zðˆPxž×ÜÑäûÓ ½^"K4)]Ùn|{pPþš|ú¼2•_>RQýuÑçÿò—ÆÐhœÙÝ9@?ËEü—,w€$(®NñsX4©47üÊ ‹š—þj™ [Ï€)\ÿbøþ¤Ð„‡Ýok’uóohR$'õâgáøþ=85R¼Ydƒ¤NB…0B+ë¢.t{­ T(`²¿ÅâÖ[vÜjùíÝ©x‹ÐF±˜§¡c8RBù» ‡úP2êè~>Øyv* 9wW/‹çSxúÄj>E΀jFÕ¾¼ÆÿÑð8›l \Æÿ6ãYóä±1u .'çŸò .øbs1²e sï¿j1ºo é®×k ïš,t!'Ð^YŽ{ÂX†H$yÍp¾Ež'Ž}•‘h«µDÅ\H´}Me#`XM¯|OójN˜©;ÄUŽf&ð#é=â•*UÖïîðš&/zº¼Xs -ã¾þþ•†æ˜s_‰Ÿ~zîK~,æÃìõ;ò‰:Ö8J—Ö¢}Í‚f¬žÙzq›bDìZ€šíÑÙ¯¤‘?à¥ÍÂTÙ ó†"œ-’¥OnQ£àhèýŒZ§ðŠžs¿]¯Í‰_*0haÃX¿ñŠSÛg¯8¢¼sjU¥ŠÓõ;¤æ8§Ç„¥,³Ä¾ó7¯i|‹‹ ­ò{an%Ú r¡c!="ӆȺ÷Eœò’‚þP*ìã¹–H½…Vºû"ÙÓ™LûV 6­™™?¤¬(©¦Ø÷Ã-ØPð¸Ý´_Ðn9rN47.·a77š}ܱÚJ#¬Ä %Hó§„³fIá§ÓaUv/ σËÏ‘¿ûcsì 16ÍZ˜Ã,&ÅtÕãIKv£ÄV¦ˆXQ0dwŠë±¤@S Îú^o¢–œ’’Þ˃ãbA+1Z®–L9<@z 7Ø—×*<óX ô)õ Jèýèãïƒ ²yBRÞä“Äpݪ[¥à<u-bèÕŒNÄÎùû¢x‡÷Éî¸/e?[àEx_|Oؤ¿¦:ìóò)ðÚa§vÉ“–Ç—¢Ôërnpô¤kT&—ä1¶¬’l°0®>*u£Û1ùtUÕä—©ëZ ¸Ç³t°b¯<û7½Ýíó· Þ]§4>j:ò :%üÃNdeˆbŽž"ìÚŠ:@‡ÎFóÑ9€Ü$PÃÞÐ'ZPË÷¹-”:ÿM,‡`ÙNÙÄ»À¶hÞ›àQp®/¾Žo aã}÷ç²`1åéGí‘¡´·u‚«7ÜrDüLzSœ_õû¹5‹ŠK‡ºkPíƒØO [¡¹ä†èŠÇŽL%[.7Nï/1IzIÊa¦y„  »ŸfÔwΜ¢øÜaL]P3†Fñ! @“Ãø,ªÂÓV©‡ó-/+kvü_ H•<$ó}Ž0­ô´Ê²2ÐP´jÙžR‘-xßac`óXì©ÞPƒ‰v/I/ƒµþ}­~”"ÿÙøV|oS´#&Šðè~ÞåeàKOþ`ò ‰ZÛ,‹M†¾xTÿ]~{6‚J$WÙñ3±…Q–ühÅÈw˜¬…ãלËFý¼LzÄX} Âø®·I/_8Œ×CPmÈ}Ö>á)AHtÅÌî=Ç*[^O¥ %¨cä~Öý*³ínþ?‹¸5ßÑbÖ TPžÊ'wc<Çm‹¸&YÖ4¯‹;j„¬$)­®GIøRÙf¡É ~ÀH5ˆ4vC$˜µÌBÐè|¬=:”NæAdÙqa§Â/(¼¾æ¯øJ¹Tà vò8QÞÆã;mä⢑šÛÙeQ˜cË^ÌeÕª³?ŸˆŸ—»ü˜¢æãmk®`\[Qfur%×'ɯ¨#DQÌ=õD…$ÆöÇÎ÷¨.Z‰ÐÃÅäŸ×ÖŠ?y³nsNó{}T½ßÏNÊ*`¬ê¸Ê¹ð+ø\ Î,*+êàɉÖúäŸWVWÎ3y“ÌBŠ#Xn\t •HdAV)¾¦®Öô²½40VÀØä€cMS`oR_³O‹,ß,u¼¹Úñs_¤˜:ë¦E@6yPv~ì)ºXÌ©î ÒVâŽÖ÷ײ@ö0]'J} É@Ó‚¹y õ¸¾¸ñ7h¨ž8'5}s¢qÜs"·†:-¾pEȯ Šž Š—n×ø·/ÑPï1TkG¹‹C›68–ùÒ °wx€c£ÃR*’HT K"ÌTÒ0ip ÛGËŠ ö¹Õ•­ÕBO SÃõ¥¾,Vö4·&¢üGÎD$ízY¼"»À½2jH•^zªF…YÙ`7¶osB¨Ê²ÁåVpØ"ɬ<) ?5¬«e½ɘ„»‘žXEu/ÕŽnÊa3”"Çôñk‘jYn’³“S—µŽeÝÿæY³o&QøxU5ÕnMÝfä'&Ù÷ï{ÙMhü†ÆÂw[œ–¼€ ðf¬~™7Ž6ù{-l<ݜǻ+l0I³aûsî””3„©Ä~ÏX’ÝÅ”üQ3Iú*ýößaÙÖŹ0ÅKð·¦3Öžq¨&UذËü&Àˆ@ S„¡?~ŸÃÏÐQ÷õHæ‘t|¾o ;eÊ>žsZÔq±Œa™Ò§s õ¬l‚úçý Ñbà³ϵdªM¬•ƒÐ±öVõŠë¨°ËÁXÆî$­s­ÞSƒÜ¼§2‹{YQö?A#† —Šé¢»g‘‘LZÐî:Æo‡:"6ƒÍÝùþtƒúi=Ž!;tŠvI­æœa]‰‰JHæO)di—⹃h¨«áh*“Å]ÕŬîß3£_K1õ+;Ú„ÅÓ<ËhÚTEJRF†¹ãz6û§R±W¥‡å• „Z‚…âHüG—L ÖYL±f2ŒeÂs5uúÇuCŸ=]9L åù^˜­1dÁ€ÿ‰Ý-¿Bh4öØÖÓ‚9"¬È-Öô½Pu0MæêýWLÄÅBˆÕ¤ª£®Ѓ*¥˜¢-ÿÈ(c ªSœ/¥e‡éêÍ2˃ÜU“ä y¦·ŒçÍ „)†z)8NÞ5@«@t_}O‹8Ù£pu-š‚ÓL$§rBkÍ„iPõô“Š ·0SPu×hÒ˜ó;{È5¿ïo¡Í¹N93c ÉBÖ ­rñ²0Ãyã}ÙE¶>qß ‘»`Ck\# IªKhÅÜ+Û&IµoÈSXÛš¯©TE´ÌsTª5‡u$ŽÄ ¿ Ýo½ , ‡vbCyhÎ^CÑ[¨VfñKÚ¾‘vý±ç~w–èÏÿ~G¼lKWcsI”FŸ¡Êh/o>½Š¸ *ñ£ºúæUxš€n¾½A&xvïyÌõhêp5skÊé 4àñFéU·ãÉìç‡ãe6STÞãPkS¼c„‰ßQ&i»‚«+Å“^ØKœz<7LòIˆÈMüù¬xŽi›ªiì±2‡Ž‹}Žœ>ȳQ‰FgÇž®MZ¥«„ø½¸mÚ=¯#G샺8³ÕL8ûªMxÕbqE þ‰ÉñÞ(ð ð£©8j‚**¸Oíª)¢NiÄÄÆéHéwÇÿýèzªYŸñ¥ª_ÖØBQDXZ®`fû=ƒ§ˆ½á.L -sýñ€ÅV=4¦Ö[BëçëûQ‹ÅàÅîæÂC©#¥ˆª‹TÉÕáˆhOZº+vJ«nöîGÊGž°YC%!ÁðC1æalù«zä !9ðÎP™£¥kuî#©·¨±Z×'¨ÇÛl|ia ŧ©í(¼Z‚ø]ŒÎ»`U¤ÐÀoF¢ü–1x¾y³ïˆSüác£±Û  – å†Jè!•ë0Ť¢p‚M|bìUb#ŒÅ©ÁšŒ}á…Tw|…†ÔÏíДÿ!tw„oƒÑçñ*M’ãÞŽšn­sbcÛ©A4r#¦˜"EÕùýc(N…ÆÇ¥l9*> ÕÙ Ø3^Õ‹²µè#ežH¤­F‹=C$~_~W˜ÒÄ>eáí0W-È’>­ÀZ¨|öÅ~"¨³ÇvÜédóK,Òiäˆ^²‰à÷U¤€\Z8Fž¾ÕzÛ]~eñ¢ òq©ÓŒ˜bÃÓ7€ûpã£pY_ŸrTªªèž?qYI~Äݽ`H$Q—ð²Ä’³ÆS$´c‰™ÁÌ”"ëZ‘¶Qµ²rﳨx!˜ÌxµÍˆnC8†«Išt=™!q)RôÚ&zñXLÁ¹ˆHrØÌå?ž&¢¬èébÓô±â‚À0L©JÍ¿.i2Ú¸˜$”†{žK¶}Ø®^b…æ2BÁª4ù\üü(;D'Z´ø±Ìù—?ñT(w_£)'„ÑôìRqà Xeéèø–sYktsdQòKfñsúö¹ÿ®\ƒí™êðæëØoÝù,#¢cN¥* å².Ø)·«‘ö(R=jØwÍ_.ôÛoêý¡Qœ]´¢DñfáŒË‰Ï¯Í¬ðj0ÅÀ{¢nçäo C/*¨×*å¥äÞo^Ì22¥Øõ]" ïw`L,‘¾Î ÜÛÖ«9[ÜnoŠJÎvéHÖï]„½2ka·pN¬:0¥’%ÇÁçÅÿL6½½Ô/M…P¸:¨”AÕÅ&úNÜT'Ì÷åÁ˜0•<Ö©Ü“¼ª}ß©_Y“ËÐ’/!\¸¹ò]~0‚]±¿œc‹ñ`Y„ÞŒH ›©5â¤x "ÙÐuÙ–èw1ƒ?' –SÿÇÝûÙØ‹¨Xj ÿcuÑ¢!–ow Ç©BiÒNÿ…gE­õj³úf|ƒ’tÈ‘ÇQ1Iâ4éMŒ§ÿC1‚í+âÍi!ÚRÉõ²LBÎ2Ðh3•ç˜CyòcœŠ&ßAeƒ&{产Šõú5uŸò·ŸïøIiž`lÙ ÕµÕ^ö3*«äÓ$\Î=ÂS]Êhp?É8†?CÉ5öfd%¨ˆ‰¶_Î ‰ùàm¿åŽ^]꯾e±—å቞& 4a&[w»šü‡=»$-,å_ŠdÍÝ6‰ÝÌÚiþŸp5§¶øšT‘’kÔź9ê¶’ÇÑ™±žÚxß^P#¯4;{Ê•á¬ù7rek†mïÀlóhiÓ9¤ˆfÊ Ä‰£Ò•¼K§USìrðÂç7kù ÝWCÊŽv5 3òÌe(Z¥t=²EÄ[8]¡ãÊ’N<ó+FœépÛ]´r¸DëYP—t¸Õ r5Í8lK5dâQÌ­2ŸÁÁc;¢™»/by¾S… Tê¹7ß”g»@¼ª¯NkÜÖšü ‡=Ï: äü~UîrSìâk s^qïÕ)ë]4FÃÜýbj6š.¼=Žrh‰vÔä‘·eþãô´®†§6˜)Û©"Ú™Î8ð›£r´í宸QJdš¬ˆ]ÁKeJdæ_ùiбj¦# i&ô%¡/pJ»qö(+Ûa1-?=âÞø¯ùKN/š˜r1í¤ÍºgLUQ|ëqóäGÏèï.gþ^ç!&×âP6¯Gw`Î!¼({ÊÜ¿¡¾¾â”xqæ;?`™ ºÅêÉç›Å/c”öxwžèq@ͦ¡ä^Pu1`hrÃ1ëâ¶Ðëóë ßy×d~uÀ௴,=ÕYk‚³.Ÿnœ°3}V³š¼ð VŸax°ÔÌUñèY÷Ýhã!\Ѻºñtu£“{ZýcH–JÄX5`XW€ˆè0ä¼ÉÊ[;ÿ1C„ô¯ìz0AÖÔû™”¦€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/bitstream-vera-license.txt0000664000175000017500000001350213544671343025427 0ustar rptlabrptlab00000000000000Bitstream Vera Fonts Copyright The fonts have a generous copyright, allowing derivative works (as long as "Bitstream" or "Vera" are not in the names), and full redistribution (so long as they are not *sold* by themselves). They can be be bundled, redistributed and sold with any software. The fonts are distributed under the following copyright: Copyright ========= Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Copyright FAQ ============= 1. I don't understand the resale restriction... What gives? Bitstream is giving away these fonts, but wishes to ensure its competitors can't just drop the fonts as is into a font sale system and sell them as is. It seems fair that if Bitstream can't make money from the Bitstream Vera fonts, their competitors should not be able to do so either. You can sell the fonts as part of any software package, however. 2. I want to package these fonts separately for distribution and sale as part of a larger software package or system. Can I do so? Yes. A RPM or Debian package is a "larger software package" to begin with, and you aren't selling them independently by themselves. See 1. above. 3. Are derivative works allowed? Yes! 4. Can I change or add to the font(s)? Yes, but you must change the name(s) of the font(s). 5. Under what terms are derivative works allowed? You must change the name(s) of the fonts. This is to ensure the quality of the fonts, both to protect Bitstream and Gnome. We want to ensure that if an application has opened a font specifically of these names, it gets what it expects (though of course, using fontconfig, substitutions could still could have occurred during font opening). You must include the Bitstream copyright. Additional copyrights can be added, as per copyright law. Happy Font Hacking! 6. If I have improvements for Bitstream Vera, is it possible they might get adopted in future versions? Yes. The contract between the Gnome Foundation and Bitstream has provisions for working with Bitstream to ensure quality additions to the Bitstream Vera font family. Please contact us if you have such additions. Note, that in general, we will want such additions for the entire family, not just a single font, and that you'll have to keep both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add glyphs to the font, they must be stylistically in keeping with Vera's design. Vera cannot become a "ransom note" font. Jim Lyles will be providing a document describing the design elements used in Vera, as a guide and aid for people interested in contributing to Vera. 7. I want to sell a software package that uses these fonts: Can I do so? Sure. Bundle the fonts with your software and sell your software with the fonts. That is the intent of the copyright. 8. If applications have built the names "Bitstream Vera" into them, can I override this somehow to use fonts of my choosing? This depends on exact details of the software. Most open source systems and software (e.g., Gnome, KDE, etc.) are now converting to use fontconfig (see www.fontconfig.org) to handle font configuration, selection and substitution; it has provisions for overriding font names and subsituting alternatives. An example is provided by the supplied local.conf file, which chooses the family Bitstream Vera for "sans", "serif" and "monospace". Other software (e.g., the XFree86 core server) has other mechanisms for font substitution. reportlab-3.5.34/src/reportlab/fonts/_er_____.pfb0000664000175000017500000010506413607302650022507 0ustar rptlabrptlab00000000000000€J%!PS-AdobeFont-1.0: TimesNewRomanPSMT 001.002 %%CreationDate: Wed Feb 3 17:58:35 1999 %%VMusage: 31909 38845 %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype %% Corporation. All Rights Reserved. %% Times New Roman is a trademark of the Monotype Corporation, registered in the %% US Patent and Trademark Office and may be registered in certain other %% jurisdictions. 11 dict begin /FontInfo 10 dict dup begin /version (001.002) readonly def /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def /FullName (Times New Roman PS) readonly def /FamilyName (Times New Roman PS) readonly def /Weight (Roman) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesNewRomanPSMT def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] def /UniqueID 44335 def /FontBBox{-167 -250 1009 878}readonly def currentdict end currentfile eexec €‚ö«³Ä©éŠÝkÂg0©ÿß ¾P¼ö¡Åcv"“_àw;¨ö2<ÒÄQ«íÁ±½Xº›šz*®ðSöA{‹©¾vûr©çì¥r­*ßù‡Uâêû5Æoù¸A8‚ !Ú™-øÄK¸ÜõÝ›–Í À´…‹ÉزLÍRXK|¶¬Y„Øfxj•׺¡þPfóÀ† t¥£‘7×1k:sF„üGD °ÍÄKǼÔÀ4¬Õ“ÿ¡1‚#˜hm¼û¹T{p·xày7ˆ.#ï\àJŒë[d•™êzÙ±Ô.J³-¯úHA¹òþð6Zx<°Ô‰nM²Ûøˆ(ߊVÝÙŠÓ*øÞ¸Vî©5Èá&zZG ß=¹˜óBô™ú×ã#°J«a nj[ j=w×"ÀvAm¿ØÍžáï€Ôug=,*H Øó5('Å2eéd.!ï¿ã ËR tÊ| úšl帔zÌ«¥¿„qÂöw³ÑÂäÃÔi•™#®sCoi¯¾¡´½ì)Sa%‡1Ùœ±S—*p EÝÜH«×G#’#KdÛÚÖ-0y^à†/òU}Ü&åÆû¾ïÕØ•ÑgæwÉߚǚyÐÞnzY(ÿ•€’ ¬°­·?²Šþo&<ö!ó¬‡S,ïõ¨—sÝû?œ˜ ¬¶pÆdÎÊ(ß•œë6ÃxMs·'}4R'E¾¶K¿S¼ø{~Ò…G²Á ©º =EØbÝ;Þ9MÍ9ßWÙØ#¥®öI¸ŒÒ¤éÀ¯õþ×íe£»‡1¶PfØua„?ÈÑ5'öz·0ŠÊÆ4…£n.äÛtô´GúáEb}ÇÍ©n>ÇLì•„k»jkVþQ/ÉàŽ³"Jc³íöŒÌí–Éw;ãÜåaâê³à¾y$ĆÁû^&}ÄÙ¹{(¨´vf)/_\a3§"v!!…²¶‘ÒrFK„ypS¤ÆŽðŽM3Q’¢.…®ÊðE Ž’ÓÖUàCuþÔ²£¦ìm»oϱFf… 2o2¦6à И#t’_íìDn«ëmuo§#Åò50Ìt ·¨”fR®/yä>ø0‹UŒéþ¥YðØàx¢BAÔ¸iƒ§q£{x}Øo™µ´Wc«hçOåü—[Æsܦoô¸¼Óý7û§ïƒ ¶±(£¸”©SË‹NLÁëÁh§A‡èÉ,©øÚ°cS6 [FÈŒ—j ” ŽûÏÆ¬­tXô3J_ŠÚ2Av© „k飚×¼fþ…+”[©®|PóÀ6†žG˜‚¯¾H$¡º¸ìE?¯5EöF›×FžpÁn›!Æ/+~Š˜IÅ)m×Û”’%¹áÞàŽR0(öI:j$/oj‘U«õCÈ۠φï4¢xº¬n“È©1Ô£½`U™È†¬C 7 oŒï8ý½#Íë[ÎcÚ'G>¯q4Ë×íÃ0ö‚âe ’Ò…ø€þv„Œ6Ì2»sñ:`‰ãÍNŠÏG®î±ÞØ@…k[úÌ.2³êï*ÝdqÄŠ9e3´’nçââA×ð©©¿Rƒœä·Qwt aë‘Ñ$ŸåÕîXkÛÎú r)ñ”¸ÆIlušz]ø«ˆ“Ù/SÎŠÅÆPÁ:2|.Öä ‰ýïó<†)#õ¢Ø‹9ªàžˆô½;Ã@ao¢H/ÄYc™½ßµdøCÍSZá$Í{«;tÖ¨ïl—’ƒ¸;}&¿Ï[×îldké©ýìêtÊó¬Ä³½™7Ve)žÌ‰HKÖ4)Ì*ëUâ™d›<ÛžXp9ZÖ Â’f^p”j*óx|•*ÓCº1îËÕ ¬8Bì Lȳ"å›h(›Å¿5iâ®?¦Oí0ж£ÂA]Iƒ´ó!jš ›>:ñ^üi™K‡mîïU¸úTywy¤Ä-Ÿ?Ò£¸d"¡Òó‹0]âµo rIÓ})µ‰¦×ÚÍÏgàF ½1›Æ}0ëÔr¿é6¬à)CÊÜ^°À=ø’¼ðX“>‹èVIˆx ‘]Õnœ&$ÿ$Bóºº9Ýׇ^˜ß$ÜW‰—%ÂØ-Á5 Íârr=ŽÍ_Œo+Em¬³CÜá1ûÓãÀ:¤`•¹HB1ÉÜß ‰ü,iü£œ(æ2V›~Ä:Á¬sSL-¿Y+;µöM,0<\’ÆÌ­!jóÜ<ïä,26ËþŠ <é܃ž9¿ñ[7Ê< d±4,;逌\ãóu^²tïÌ_.I,\ ¢.d´g¥T6L~ŸÛµÒ,!šŸ4BâS@MC0à ù¯Í쟿ãf¨èå¯ÑÆ„PóVâ^®Ûýüf?¤„+j½—c¼'…¿ïŸÕ˜IÅRß­[a¡™ÓþzO…AGŠj¼¹z°(?¿H2¥àPçkü*jÜUDCªH]jWKØê—Ü®•ŠæYn¤e+±yŒìr:Wü»Öá9«‹œ® ×@œo™IØÕ™§BÂÁT¹,‚¶w¦*þN ¡õª×Âj¬ ð°€ ï·#þH½lWrYs¼óÔ±t¿»Bí-˼ìÄ©'Yå?žaéJ"Cѣöß~r¾ŸÈŽûûÎO~ar_Ë„RÚ¥ž,èAô QÓÔO žöɳ÷Ç«âgiQW®€8w3íN5e„hëgÎè›'wN‘|HaÚ÷z>EFùxEBÎÞl@ Aò&ÀòÂ% ßÙ!s”0XJ;:[Et;xÒƒæAaTåùúyäCledÂd–ñ/ÓÍú•×Ä¡á&#ÁKYëÏ׿«ÃÜù<0¨©•Ÿ5éV¯`GÛÂhLGŸ6p´¢Ô=€\™KïH)…Œ/.b©6 pÅ=hz|“R©kâCÛÐoù;ÔµmØòæ äÿɘњÃ]© s_î´ Ùè]!ì8<‚OÙÂPJ©Á^¹K¡­:žŠ[$}&pßÄûg6ÿ³b-4¬ Õ\…š z ¹8/æ/„–p¥ØÇxåÑ­©&X¶«¯õ°ã9!iI¼¿-¸¼Ã˜šKÂ`0)‰óµÏ¬×yQxuO–ÄÄ Â_‹ÐV‡~ fn鮦,ªª7œñ2´SÉ––7åȼ5/ñ#hR™”¦–' ï#"|dI~+ìŒIF¶¬–aS·í\ÛYÍo¶øvP.‚Ú¬®Ó#ÚPîx/ß­f ¸0“zUDjsª„ ·*~^÷²ø m¢QB±uÉX"9(Hdž,¾ƒ±6RjNʱ©‘Ö«A}‰¯‚û õçœ áµ£·–je²;1ºS†&PÚ܉³xVþUÿ7侨‚׿‰È nå P]á ñ¡•¾Â<ˆd¾«¨V(t’¥GÅ2)bHE{›«Ü½ÏßÕ¨ÔÏd\5ºš¡1‹iÂBœÏäZ‚1qÙ†æ¢$ù-Øÿ ´¼àf¶eíPS“ÄÉk¡=jG¸úS]ýŽZ¬ùž¡ ËÇ4Ø#é@´GWlÎ0ܟÕýke[-\ã˰5›‡”›lþsRæº)È4‘ÝPJܕǥ\Ã[XÄ06;:0άǰ .­ ò#=ñ c^ÐDð[¶uñó@»åŠ&K`*ÑÕ°P™g¤\Jû7{!ÙÜïã>6ùí“@) £*ÊrƒÕ‚Qm@‚äoÿH#-uæâãÑw}¤¢c0¸Š'"Ò¬@˜Ç˰‰_ïå)ηRz°÷Îu ©LæÓLÎsí“\9*ªhFVñ0h¼¦¬B @V¯Ä‚H±·Ýõ°H†«‘û£Ì¨K«óá‚8^)8J퉒’^Ä—´YŸWBè®W}»IŠb_%#|> àʎ7Þ§ ÀjÀù§–e‚£»ÿÍ|še½Ò;»hOŽ;ÒýÚ3QœGˆ|¤ü«l2Ì;ÎìÒ¢º!_›Äéé”&r¿LëòâËN³˜åªÖ;ÞüÌh̓úéOÏÉm¤¶L¦šZ>AoÚnr DX•Ƕe’.Ççæô0/¼.ÁÔô%8«>ô¼ØóFÖ@™ÓÄ:‚#eFÔr8&ÑŠ•œþ»~-¼®ÄþêIhÅ¡dj’©@fôW× -;ÿMG96¿;‘ øcóœFˆeÝÛ;CÏXl‚Ð[ü}U^Þúl’}²—q÷ÂÏp>åˆP!Òö¾ô§©TÙo‚Gò–IGsQt2Bà6‰€F3渔†ÆÒVü”Ë>l#VYzð0_oe¼²ÿòCbŠ¥I»y[Ù£‡Jt‘»¶ŠyˆB §‚ëþÚ$çÚ€£†¯O©½I  ÍH'z+òŠs´b ¥DÓ‚T"Üx—ãýé]Ö€»Ì–E·*›µ(­"£jÖ˜7%»¨E”OÚ¦í·ÌDGm…kDÛÁ¸ê2Ìñ4ÒàÖ„@˜ M ½ÂaD¦ÙS34:fÐ[Ã=-„|”3Jáò±”A ¢…@̘“Ñ%·»‡M%!Èæ'ã›r{üï¨ÑR(){b|.ÝA»®(H%P¶¥(YðŸ§Lºy¸à¾ çQ½xr[.¢½êa5rqÜ€(fø„çTPÜÅú¯OÛíé%}@@#Í¢$ÝÃ\oL¦U4ò±¶Àì´ûÀð¨% V- Æ›lÈ&7ÂÄ>n¦(?˜"à-þ"ƒMñ”v_§¿ áÍ@X»;y=WÐ"f?ºÝ ;Pû!\_¶¢‘Dó¤èm_8v–tEÚÊv—YÍA1Rùòb °(º¢hHñÍ€‘­kÔ©˜¿dðk\”K§ÊZôé) ›Nå;¼–€î ùšÚ—+;覜}rw޳YG‰°j7ÂA™ö]Œëüða|/8‹fsÁi ]Vo"à”ÅÍØ6õïaÍCB]ò›C'g–5ÜÛo0qôMc*øÁØ?ÓÏ[¾PÆày\ ²ßdÔqí…+ê=_ñsèÙVæ†fÑ]3Pæ½i˜VäDQÊö`^÷ûïþé2ÍÕ°ÌÃ-¼­Ðç¬Ü+æ‘qeôe¢Ywë=ˆJëšÌ諦WÍ঩â¡ÜóëŸò¼æx9%£Çû-¤?¢L—H¥0L|²¢Ëf›Ž3´n”†üµÝÌr¥Hã0yc¸Ð‡Ú2jÞÚ”ÖP)V̪{MdUiül’e“ÔàßÐÇÉz—ÀàMÅÃü–ý(T4kE½ïŸ€ _}Õ2ÈýÛÏPðïg‚ÀìÃo”'" ÇÝÿ±..ëoR‹˜_‡T¶!]?SœêAŠú\絃ïc®bŽ„¯‰3 p™àUöô¾§d)Ÿ½[-Ç -W áÓù^e)ì›IfP·F2õõ,T4{5›ë[µËª^¤úoÐcçÇ'ÃfQ€`Î Ö€|Z˜ÕÝ ?Æî*ƒ×_b#ÞzoP­’âÆJE‹ ÄÝõséiË]•¼²/2,sv•dã G ù.ëè!Ïà<ÿ¨‡ÄYy‹9ô>ÛWâ¯i>s#3ÿžÁÚæ“¨æìàéF¬2d¤‹x’ü!ƒà£[UÜ#㊑°u¸&S5ê^£q‚?…îZâ÷šYÀ¾b¤„]fÓÎ$q{·f>Â(ôÏÃØÉö¡Ê¾dä¹rIÀì°£Ð>ÕÔÚzi™!Í^¹£>í`w‰O Xá»Ú7Œ¯Ú3*ê±Jå¯ÿ?e¹{ÐY4‘¼[Mdå?ÙAÌíÿ¾æ…!¯Ï nƒ½€ô ,"),Âííù¦àC¨~kˆv*ÈޱæáúÂ:«p̶™.Ml}”÷“e•%§Ë’9õß$åhøR|;òóÄÝ\.6&´üµôh">‰ ÿÿ¥WÄCDb@õåIlÛùF›éöËxŽŽÀ£eN¬=z.! õKý…JV©Mï8½ÕºŠ¤ÃÇ ‚ªp‘½M'OÔ+Þ "…îÞÕÍrýÖcÚ¡hÞÉ–ˆ_D ìR>ûñqûäÚ syà)¾ÂWi†¾¢}P•€uPC5Jà‹†¦!ñÅÊVñžrOÆ ±ZªÐÇzìEüSÓlêܵ©bý ú£²ëÌÐÑÌWÍ”®Mi—¨dÕ«n¼ H6Â&™hT“­ ªÏ{„=#¹(0ïZ«$( /m£m98@Š“7¸¿ÉਙU-¼U§Å;žž¤ýØÎβš=£ËÆÑu¼Ù:·äZä=)é’¶½ˆ”,ßúL¾âJÀV×YÐmi³Øxu*fØ5-´Š«d´Ï#©Î‚®z•½éõ’ü>©¥Ñ±ç;Ô£›Ÿü³O á¹$|b22¡Ÿk„P3b%Ã:CêÎãƒÌ=G޶m¢{¼˜3 ysç²ßž_@Bë5T‹L…Á:õ.0¨³äÇ^÷ § îVèA$E–Ì2B¨ßÅi8G ›ˆÞÔ ë£ú£ è†ÑDZs¢|?"µ 4‹Ÿ÷Ý!tú ¼õÏ]—y1N0Ýî€ï*Ž4ÞïØèa cHëDpµ3çújH. ÿÔw‹ë&¥–KæâпcË"íþ¶Œ>=M«ej.×ZøŸ”’0:” ESáÕ×%6(i~Ån›ÏËx±ÂÅ!§žÀè’(GÇk“دwiµ‘÷©ìÄ4IØN…–4dX‰Ùâ1ƒ©½{èaâ>‰/ßæýQ]–ÓC’ÑBv*é8„ÈÖ.‹L«Pƒ¾ÁZÄ\ƒ¤úŒŠÞ$_¸ëj²v÷›'¹ñ…§z.z>Àùì²oµ‹»Þ\’óŒ 3e öÍn*±,”U6àUÆÄ£Îpð¤I[”Ö9¼¼Ý„¥mð!C‚Œ¸ë4¥´Ê–T”/OåË¥ŽýÙ‚½òoÞÿ̤5É\ž-õõ9äÄq†©âš=Í™Ð>bGêÚÅÜZØ·…Ú±Ÿ¯aVÔsäsmŒZí¼?}øçd[Àj'É•{öBÕhhV å\æ\YŽ¿ Æç¯ÈÁ•¸¤Ô}^Ö—[X0%—Ñ-:PPÞwxžIà¥âý{¶ÔÍ*£T;ðŠõWQVÚœ~}åÊU\å\I¤ªg T~€â¶nf–ô_÷¶ùf4*+JÅãJñŸbµÑ–l›´³¢|S,+µ\<†1â§ʨur£áW—Ìau†½ ûÒL£?¥ º¿:ãŠó ý$\¾o‘{àˆ4þ·"xEÑÉ•) Œu˜_O°Ë0{aUdeâýøŽ•[ï®r1ã .`‹öè«m£Æ…ãwX{¤z²²@Ìu‚€ËµûF.7ÝËÇQ5¨é+Uß÷G4=…‚Û ËD*¾]9‘*7áåýQyuj3i³0ÝÁì%¨¸ÿûG30BÄ;™xÌ—0XIXò Z Ž'°çº i#ŒqxŠö}Îeº¡¥ž?ÖËâ—' Ô£„邨†k.±V>$ÏP½ïן‡P #—”Õ :ñì#†ªáT€L÷teÙš8ÄAŸÐåé±Oâê}î1YxƒèÜ~ú‡»_8ý÷´ ›³Ä=¼-O•cøïID>÷”ÖP ûìKùߊ{Ѐ(Vª¤,öKwäRДò†Ú£Ó ašG­T¦sçèñdÊ´wVdn‡ GŒô“gmå^¡¡ˆ¼z²ó++òôv¬oY*€'­×W©E=φ %§eŽ‚ÊÃ3ذ0ÄwR”øUlxhfyâœçí¨Þ¥Þ,‘ÉäR ñ;=…oÃ+«\ÞÍ‹E´ã"œEú×Þr.߯‚tra1âíÉuQ±Ý€oSf|és 8Ù”ÜS£Å›ä¹?D¸‰LÂ;n‘“ú]‘±¡‡,úÊ㜜щ/¹%0O‚Zº¤ž&„üx¿3«pwÚ -duã=®×ÓÂRÀ.U tkÌM7ØeNgП˜¿rUZÛi¥ÁJ}–éÙmÕç›[/TðNØžÏ5=iP~ÿ¹c›ÐŸ–Õ™ZOsíí\Vc”µ2œÿŠ¢?-1®‡l6Xæ Ú´ÐËNσ¤õ–î@)0 £¿p„å!æ_ëÐó”+Ê»–†êÉÊ0³žî¯žü¢égYvË×·u¼ÃÕèó0„ÂY>m*i UÀb kÔUºš€‰H ÖŒñS8áè ¢cPÑN…“~ Ñ»¤K²ôÚìÙFÌ"Xæ$õëáW2Ý(TXFî•jð¾2 šLÀ¡Æ÷CÞŒv©hÒmk ï©"ð{±ðsŒº'÷4vETþæØúè¹{×Â3 šPÍo}e®q(,M®ï ùÃÚw1Ô}Ú±v¨Xžo‡Hð®àû7`,°sÖ1˯.Í›^Q÷D‡uüÇgXðµñ˜…˜êº;¨#H‰;µO{sf`9*ì½`£H?*+¶£˜é8´ÜKdªGÕÕPç%þ° ¾7?+  »h—3O\\D5äè²F1©ï¯†-.O3nÔ‡(Ü8«´ÓÏÀ‰~ÜV?á[èùîCc7Šq}¸-AãÕáæKåt–ImÑ­¡V‰EéñèíFjMó_Œ¡<ïJ‹«^^¾¹(˜rE&õS¶¨å]Œ yAŽ¡¢#'Ÿ’¬‰#F¹|ÑúÉ-ÔFsŠÕòøR)2ýÊa„;úws¹ÅrL„‚Ç›¶QRaÈ]Jo6Q|#U­Oé´ÙÄÐä ¨lÏÛÑç¨À%ûàò±X®±°÷ ´;¢·þµV›2Çi4-ïQlêB^ÞÄEže¨Iû£xÜs{Ï”c„xx¤ÝQ¯ÃtûÝ㠌簬:8íW²CNþ#‚`Tt¶ñF¢=J[+„œOIà£Ü䎸G ­È …4¶8gÔ[ºþ‹Æê>ãD%÷ä‰îóVfõ<¸? € }‘=|MxPŸ»‰œ€º‘g..™0”âkÖ:ºI©—æÔçR౨‰ÍëÃkñ”õ§²”Áçù|C¥‹J†ÁnÅÑ2¬E7µ÷ùs(äKÏ»X—?EOÎAÕt©ÀÜúh—Zÿ_Ú£ý,J­;•5yTËÄš‡Hh^fP5Kb9/i œþ…ÃÌ=‡¡36÷Aÿ=¢u"pßõ»z²83âïOm<¸ Nƒ_×+C˜9­1žñý8šäå nŒ+V¬¿Ö–p×ü¾Ó)úP{;Yí~òˆŒŠš÷õ?U€>²l÷°³¶„‚2–(Wkm6¾O°?$:áÒAÈYírÙ»³f¨M¨,TPžÂEŽN+sú[óH¤š°j‚â JÝ@aRsì&>l»’«™÷c’„ÔÂñ œ´ïu°ÉÑkAò]Kñ Æ%ᙬ}tŒöµ ÿqR†\NãÕ׌¥j¾ÊO}æá½=)fçA÷ß=>y *T6ײ°e1d&[پꕨ]è‡ÞD^‹oËô¯iX °±¨Äœ¤íË«b©ï™º±ëÃéZÝ?·ìŽ`C–ï„þ@®þBi=}H_•!`h.4Q qtñï[‰H/àùchTÏj°ZWmñ'ªÀ?¥S3dz’EJþ/O°ˆ ¶Ô¾½4"s}ðè³Õªc¶LíÆû}J°¡q¸®u*%›ÉPË‹ààw7ùµpauªBPu "û¶V½+¸‘hÕŠé…hU5 wÊPUS踿ªáŠ8·†"à¡eÐD/áDjZÏÒF¸»-zÿ ×çʯDßÓGݽ–@ F;||Åí®\Äž¢*uØX¡7×N)eàIøÀ’7%ÿs^L¯ÕåÌß6¡,á%hù|ß:ý5bžœN†Ò¡ØÒg/… 5Ä»qˆã(%®ÆTL>uÔˆ0TÚ“#*‘ö0x»n¶¦ªffáR/2ÂÝûQ•¡ ³˜_ô•+™0ËŒÉ×`Vå†'ã:Ç>ŽqÛ»@^'öpÛ³CBõgží™>q᯸¦ 5òmWºažµX«±.X¬ ‹A£¡¯†z38 bü%õúoþöˆŸ­,sc9Š<Ì´z—„B¹18®Þ§‘&¬<‰­Éò™zð³ß´ÆÜÐcè†UùJ•:¢RþnåtigoèÖ}‹ÃþöäˆÖGÀÄÇ& ¼àýŽ q¦Ù-&ÿÓÊ(y”!je£·Se)èHUì”=%!Ñ®yoÙ²! ž7—Žˆ³ùJ¿|ñuÇV4+Óó«,íýþ‹r½xÁMo©›ÜqV ÛehÛðç‰úÝÿ¼Gˆ*\ö—®4doë@xõÛjú…­eD±ø@³:æÝCÓ¸a+´1‰ÎÖ½TïµEñ—È%O1™Zåù,7ßpöîâatO…´í¹Ã37[&$›¢b´¾9õëň“‚`»fudŸ6a—­ }”´m×a>îŒÆ™u¸þ†ÜN„_`µ;=! vMØL•7Z`2ûxä•Pм¨Q_†_@A¹.¥Öfjí¸ÛÒ2"1NÿMLýz_ÑÄLA‹,&¦õ¬hã`;}ØFõ*36·äx\,Yz +ZY;Ÿe‹I'óÆWPÝßÞÐÞüÆ=]I?SO =õåºr*Ã&õø‰~ïQ«¦¨‡¡|ùúW<ÜIø¿Ïø"óî[Õ±bÇý‘Tb˜ˬ2$êI`ãk"‘÷&óúèÒwAE’¨h†~ÿÜN»³{—G©²n= n˯TŽýQ/¡õÌÉTl1—NO^nåN´m3¦÷ÁJ‰ÁÌäô>³`G‰øƒ‚ŸâÞ48ã–H–NõË5'xÓ$>æµã¸Ý{Íà·o /ÿ½lúNYRˆ+ÖØÛáÿˆ$oчª÷€ébÎm]O„]uГ@µ®èÍá(ªžÉ% Ž}^Ö—[X0&K õøD0òŽ™%Åoéµeò­®¥¼Æ˜A”®JL)=q&S0·¦š®×$ʽ’¾Î•v·Åyÿ±j#dvþ'¾í[Ÿò2Ô+fä׿‹ 0þ`|Ÿ‘Î!9Xp2)uŠ BÌH{«'‰ÛâË'Ué„Ú*€ahRÔ®ž-ñ"ØV+™{M6€Y2(:ñYZ¯kD“óiŠw|龨ãƒÖÜ^?,¸­‹Ïe”.YYªžÒõÅ쬎UÞç6¥Šï¬K[ÿä9»‚È™IàN©žd$ôoiŽwü';Ž^L ÀåÔÙ|~ø‰¨ùü¬/Mçu³13ļ>†ýY_Mᮥå'# —UVÈ;T!ú¥1ÃeÔhs±§;èOÚC¥—j9;IRâ «»gßIyÛ\¦ÇðЯn¸_lYðÿµ˜…÷ôØjÚ‡ºîv4Ú!ñË©A‡êØOÁÛ|; %îa”'œb]:×wŠU~М-6æµSz^ÄÉ4Où¦HÚ•£qj¡[r|jOE6 …™©ϾG ÛB7.”’­I§"ÜLE:‘dl£@ßøÿKZ}MPq¼SaBû^fßXvÁƒó4qó™7¶%ö)a*öä1ߦGÁ«]9œC~tU^ɧµ¤x—ƒäû¦!Ï'¯Ú”Á˜äzFÕ꿯­D5 FŸ•2Ûö稤ªó¦„ئy}õmF½@n5úv—ÀCÁýy³¯òÚó¥äÁk—§x—S•<õ4ðëTãxqƋ׾@Z8>¼áË|+9,÷!^ óû åùÈ ´C­=/èê{š§Ä÷ž l³„®Ròå}ôÚ¡Åò¯{ÿ ÎbbMò46 ‰?—㌿™×Ù°{yŽjîÿ¨¼`sMÒgɧ[‰¡ñ:ñ]5Pöγ’cy9 Š5,–Ѷ¼f×SÊÅ#5&h=©ê˯~ýÆ5aÎ|È$O! ‘F’b.èKÓlÅ… èMxÏÊ·©çÕ7uìÛ0ì@æ¶LñµÓ“8RÐTå;r”¸>ûxò…² Eø:C0T00¿W/øxóÃwOb:ž©\ß"†8£5ÏFkƒg)±­àŒ4¨²•ü\G§鱆7Õf¡>\p^ÒñôVÃÑoÛÄNÌn“>!ðñ¯ˆ°üöö†)[ú}jA—§çÙ:ªÅÒ Ã*‰ MìXçÒ"qˆM÷”a>ó'œ-ÐóÒ]œÅ³U«´ÃÈç;# $]£~L~A#Ù^‰ÅÀ/ÌÔ²FJ]‘´Û&7ŸÖñådPÝrìˆF(“(àŸ¿ŠµužgµniÀ*t¬½|ZÚÄÈ`Ë äíÿ!kQJâ>vM¼.“¼9¦•ªôç›í¡¢ ÷X±á¶9GJKÐ4ãøq@Crç‰èðÉi-¾™j¨–“¢vù» <5)Ȉò?þnòwpbUiÕÝÞS”!@ƒy¼ ˆ ‰$íyøÖYâ(e”ÛÔÔ“Ruò§±«Á¸‡þ<%.6´Ñ¤¢Át6 j2cФbNŽ›ÇdøIQܺí‹ø¡>ÄZÎ-Ò)÷©ÄGë~Ä“p‰2"ƒk n›Fãñ;}øê›O¸'›±lÓ¬·ö>¥3Íc8>9ŽU%ô>ª"|à/ûM¶Ú‘CÔB&éq?_ejÙþ<O&Ë”yÌ÷gÓʰDÞh2˜TqŠßjëÃrš# M ß}Dz&¶p"RàuRŒ {yÝ:Ã)ÚdÕ¡ ?JÿçRë?æ”Ç÷©ýàèŠÈPÅÈQ2{Þ¨EâåŽà­$Ow ÍâVŠ®zyнu}åC¯`¸ }{†R’ð3ÑE© í^Ý<…Ø¢ÂS³Ç¢5ðëËÿ*ÁŸš8ckÏW%6ÔoFZB=;w"´‹,ñ¡Þ9 £=¡þÂYêP€ê,äišÓ9%ÕðWJ´’ïM<ìÑuýŒïâ{Û.Ë“tpÕ«àý}Ë…F«Õ3šèç‹÷»7Õ˜Ò­ø*ï5o#Äö¢MÙI-n™É€&ÓD˜_¨ZIJ¦·þ’/Ek$w5îÇßõ"Ðï™DѧÐ#ÃMö“"Ø(Àð4Å™K­]nUTdc2 ƒ+ƒLì4M)x¯:ºLHü®Ü×Ðk›gÅ— ÖÉPê¿þUŸt›eV·•Ë`’7a³tGØúyIøèáBÁžÒbqôt`wÝŸÒՔÊ=È kùïsÌÍK%&a«ç\¶é½#œåÈeú­úKñuÊ(±°Isþ°³ŒÙ éÛLÐ cÿ¹l(اEk %òjë…ëxÇ‚5Ã~œ~ÛÛi˜ž’vh $´(jÚ®ž†ZÚŸ€¬ÞKä|tJ>§UÃTÂzâË{Ï»jÐÇ ŠÀÛ!éc¹P@%ˆ \>Í.Ÿ¶vž–Zdò«2:sέ¦2Þ­1vÜRÜÕa}ÏBî­{±Qz<Èþ㟪äc VE˜Óù.Zv´ã²^ëšY0†QŠ+軋’µBRhQÐ/¹kôð‹[9\± “üU&Ž¥´¦¹ö‘SH”¯¬ ’T×c×9‘³ÒŠfyçÉ*“Ç|˜ØhÔvÐ°å ®XK ’‡¶¬ˆ“÷“0ÿö¡Òó‹0]ãmê|ÅV†¬BènÞ4ƒ²U¦Œ‚ ð1_Èñn W¶“—lòÕØËØ±ë¯°ëî*}øn]A~à×åTfº?—-øÄ ž mØJÉoÀ'f{áá¹ÙºJAÒÜ^Y|L(¤D ã×Kvÿñçjå_ý ÅÀÛ*æ ì60*·|'ÔØUòHºŽZkâÁq%û%É„W¬gÕwC€ý¹±ŽÑSüÊ÷´éÚÑ{¬ujª°ñ²ù/mð´*6Ö U/æˆhijvÅ-¬“¤rŠTòkÏÛ9…ÔþÓààuG›:°zFBõéeýôžûF}0lg¢Aè{ •Uôòt04ŸSJ'ž’ÜFz’ü­ÍoCM ÖE†Ø*m:†UVv8øáÁbZ+ÝÈàF~}œè•ÉQún·«²ƒqŽ ö¬j/O”Š®­âçáx­I÷§JI£ÞeŸ}ÚŸ  r‚?/Tµ Ä£C¿ìñ†Sz‘:Ç13j™®õŒffP;0àƼA1j1"öDøn@Mð#器´É^ä—SúU°3ž>X59žÏ³wÉæzçZCÈê¸ñÿ1«{T=·|(ÐùY°lÇ1€Ž>ÿÈM§‹#š¦öC& @\É3=䨴ºˆgä †Ìƒg¶wŽy/BT¬¶‹ë Q“hü;éüˆÀËNýR4Ž$@XC{ËS%~¡ûçïáWÓh<ñc*¤BÜêÐ20GÑ~»‰Ê@ÜŽ;Hp •Ñ÷H1þ¨û(æ¯"Ø¡0Ò¡3v*½äöq2€6ð«íÂb:7ÁÚŸÑdÈÁ|Å©æ¯ ýì²·S¢±¢Àú4 ð-±#·$~2Þ÷ՏТTö}ר¦ùºa|k³†õÓåu¯¿uoù1=€õ9ŽÃ+ØýtÞé‰fum*ÇÂÕ¥úe`9ƒhÅW´øÅ-À¤UÿÈŸ&ú+*æô6Ã’©á!Ýð­¯çp´KÞ>a0ËìB«ß§Xžñ’‚îŸßÚòœñ,žÐsã$æ___Eš†Fxwõ†3w7 ‘“€Æê±í~ÇÅÜ…[lƒ’šÌ»æeÆÐfò[lØ«ÊrÙ‘±†uøéϱÅÉø,ÂËŒP‡ª-º ¶ž7düB|‚m™T(Ÿ ÐðGYQ‚ñ· b0ñᓞ1-4à!²6ðsµÈÞ‚V¬ÏRŒ¤²‚ïá–V#åãâB&Nñ.g€gSùIøÌ˸§l¢ŒlhiEõíz–Z륜.êw‹÷$;7Yð¨tÃ)ó!ËÁ·.<Žšþ"Åź£¿îoüg¯ïŒ™ÚªLm8$ã3ÃØmŒ’KË$öìê !+ÃÆÛ刭­°xüÍÛÓÛÂ*±0¥ðáqœÆ‡³z®é7¼g$ŒV\£س`í|…A°ÎK¶C¢Œßòó÷l圴¿÷ ÇÕ¬Ì3”§Š«<­=ù¬@{öyGËîéröÐ ø…E,B›5j¥þLKÁñý§ë‚às‰ “þÕ@Þá0تº&^0ÿä¼ùL”ý‡úûf8[úÐF†©]}¬#3ðkô÷jˆbeÛåfLdKT“z¥ý4Ã}wãµ÷Rû˜çÔáûìX¡4¡ŸŠ~œÀr¥j#îÅÙ\úí3ž«kzÜCMÀð¦8ˆÖA«ÛV³ùgÖ´û›<ÂQ 4±ËTŽãù7³µleÚ)àÉ·?•›z[ª~‹ê°Uuý[ô3öY_¼‰¿ƒ>¸U–¯áQÑ"¶z}w³Ä;ýÀ$ yeǬ»è²Wùû»2ÖR5sä8’‰M¨e>×j ý³¾fÓIÐÔ =…s‚“CÚ'W È0±wŸ/ÿâ.­šMûúw¦wFˆãÔKÔX¬'þè÷ñÛò\¹–RN dq,WÆŽ+©ºwì\TÅØ„AJ›’ åY ©ÛbúnÞ4OR>ø4Ó©«#!’ó§ÇQ¨>d¿f%V¦`ö´v®žÉ¢CQ>„$ð? 1 x'¶Þ\/“±ž†bÒ°ÉR¾'À9Û5ˆý´t8æ ¢™,Œ¹p®CèÌndÒ˜ɞúL‚èÅ"öü߯¶Íw•ØÅ£z·¤áiŒŒ0Æb*”FÒFQH Ü(˜‚>‡IU0vÂÊ-Y¥}.a©†˜…«}ÉÖÀ~^EèKÐCßÂdˆŸYIœŽqfêÊ€Kמî_HõvOæ¢ï q'¦¡I~m™­Þ~îú6C>Øa4v¢s㥘&3Í&#Ê`üºÄø¹z{ÎCÍU)æÁ=MJƒ¬&Ý%8ƒ±K7bµµ«Z¶u?3û¦™†\§ÒÏõlŽß4)vƒƒÅ_Š„Ûwšm©e|\&ôg$¾7ªgQ Eˆozåy¡ì¹^ƒ×‚|ÅKÍ6ˆ0ú¸4ġ䒔¥ºêgÁÌ9õŸ_,Ùòn¤7{™÷eóÚñ­G6Ãl ïX,ñ8PŒjí¼á€Qž`lQê¸}òCy$nÕUd}Ĉ±ªú3™A»v¨*®Aw&;È‚-YÙr;Œ©f” Gk j´#Á9ôïnTøÂnØxŽôŸ¦z§)”‡¢-ê&eXcl$¸ºRôíÐü6“À×U¤bH†aÓœp×TÅy¨†Â›Y7(*÷p}4F®ø‘ùjâM2‰ï6l`=œ-Í¡2î~Ý­ÔUÈhý1«cÖ†ÜÑî— åS½Ã4ž‰sŸN Œd¯ÇÍ—°<Qdï°\wR\¤§Gˆ›3á‰süÒ„¬Ô\,Çœy¿Ÿ½ °c œ•«a©]Ëœd~Ãù?då1û߆õIÙK^hqU¬ø`Á†¦©ž÷†æÌòu¤ÜQÏ•ý”ÑÝÇéÛ@žë²î!dè½KfK°6:Œ*Ä(‰_œﻼó†ê©™D½i“źº³­ò?69›=þÃoU \ÈFQžPì@pa=(øWkhÐ%PÕÜáK,n€b`©Šï¡,z Ÿ 5ìÀ¨‹ #t]Py¹øË †pg¼„É{>óæw©ãÂÀgŒy B ò<Q1&D9ÍÇ3õP÷(ã ª›À˜"$úØ“TOZ)Eíéô÷ôÈ.ýûwrÞn¢ˆÝ•Ī›~#¯BPwø0뺛adî 1ªÀÞ§’ŒίZxÊ~.Çhèz¸Ãƒ9_&îo?¤Æ?4’ŠÆÛ¾ªkßÎ,¢®n´éþÎTˆcâ|™ª_(ÁŒƒëVœ×Þ™®Ž¼IÀú¯¬Û,@4楄Dt­æ“ïÔÅÅ@³B.†6‡s­ Bø<…oôÀÂõ〠… Ê×+O©c«Š Ip«:·Ó tá‹"·¾ºMTGg㊔› 7³t©.Ô¹ÞïÀŸwŠ0tºèFìÚ 1þ)‘Ìì^δ—µ…²rk;âŸv™TèèãÃK!Mæ³϶Þ9Èi X*®zü©~P+Xd‚%=Ó-—\6‹Ö©‘BؘLÀŸl=ÐO¶¢,†ðž_Eöç‘@Z&¡¦{ü{f©~^G‡ºÈŬC}r`v¿.¿ŽÀ¦8ï£@-%.$G(}JfÉGú÷¼€ÙVv¼sR+´UëÒPšÌÈ|@מêfwਧA‘èö—}È{¯¦e({ÊÀÌ[}îGäob؆RR"_Þ è0ÙÇ#ÐÌÍMÛ¸èÿ࡟$ §š,u¥ŠnsFÁut7Â’]Q×…oŒÑ@kç^㊕U³&y´+DÁlÞÖ>!]#×–«-Âlÿƒ´~Z5Á»xkLùt6°‰K¦é6ÀÔõ6¨lÀ})†²;,!•#Òü¿Bù,Á %Ò]È£Z[ ;B‘Gçö lj­¡:».”‡©bYf-“d½ô€ôRX2e˜ÿŒës iÐÄza:×q½® 1>e"ð±÷°2óéöÞµ9†sʃ´e„*AÆ+(^¸cÌÁ4=]×15?Ì®Ÿ€ÕaÇ$БdÓœïÕsÕ;Pް±7zÒjzÉ5*IúDvg•fsYjþížï%ï?@Ãál­)*Õÿ¸×n}™TI”™~k£S#ø’nŸwYäšö0Q<.ô·â¨ ó¶¶Ñw6@L·+o9°…§÷Á{˜k+b(Ú¼÷’UuUIgð,™²aA+P›Þ„;Ôyð0¸^d.Dñu’‰3&„ž7àŽ+Ó~¾­4fÛ%ñФwÏ0œÒu‡v×ï¥z.ÝÕƒºL[à~ Wå®H…ü˜Laø‚ {¬ŒŽä‘mp'ܶÙ)Âî:W­0G¤¥LФ$ÜÔ¬žZГVÜ$jLÝ[JêO '€Ÿu—eb”i"$˜®s}»ÒWŠ•Dò?”ê Zå GèÕ…ZàõzÈÑB]íblÍòǰÕOH&I¬UÓ½]Õk4ªæAÍSª5N jvbïÿ¾Œyã·/{ TÒb~Y\Óî*"xJÇŸ†K þ ŒZ>bžšL·Æ qøQ¿(¦Ûö¿mÑš»¥20E¸Î÷N4L6uIre©`š@©`¶Úà«6C?Ì7sÈqS@#zëŸ!‰NÏáÕØÎ@ù7ÈÛ[Kœ°Z!%œ9,u=Ç­‡Ò¾ Æö-(€+*l¯ òÏýg‰w&Ä3<ÙÆÇ#xУª¦2d†¾œ+Æ^kè$¸g¦å—xËW LSªYdäccy ÷ëžøªçSLÈÏÏaoÖ1‹œ1LÌó1 `_ª%.l!¾LâCÈqÉÒmzíîù<­î'pæàt•С±Ëdh÷î¯>CùãÕÏ$¤DÆ[‹Ä¥6¥ ß‹{}l[Å„韖,ZHëÑþ8>K;Ÿ 7¼µ¢=·ûANe!£>ó!¶Uê.™]éTRÂMÅ¡{Ú½>Øó˜¤2…Àý ¡Ð2yÅÉåµëÝÛdUªR;²˜ÃmŸLf©¶€+, ߤ;Ô—6ÙÖ9KEÏ)Ä€{ΡL‰èà¨2£Æ;Z &ž'4·.UW2…k‚=ÝSzAÎŽ,"ôÈÉ€È^C Oxm\„„>gSÀæ*Qþc­®éºŸÚ§ªUÚ;_û?˜}ÑLVNq䨰·ÖCk¦mÙ'Y=p­ÇÉ 2}LõNÁD?mk8÷‹á^êx3Âõ¼1y^ñ½È¬¦hÆà—yd®lkÝÝÑÁ ‘Hb¥t<–ÔBãØñbé“9Ø©ðóË©—ÙDÚ—9^¥Ž I蛥òKq$WrÒ gømgvòøíAö¼ãê-ôä:¡û\,îâcVHˆûàLžÛÍIQ'`½~ß3 שïˆo?æmêlÇŽoßHÚÏxq“ãü>fƒì¬fÊÜ«Jü‡ø‰ôy§jL‚A"Ô#pá8ÑFžâǨ6÷Û\ÂFU¹Ky>¿‘^ÜÔàe$‚Ð{ÄFÕ·PÈ¢žPä‰0ˆl‘2 Þø9þêZPÅÉ’u±Èÿœ0eäóä¨t²d¼áE¼ÅwpXË[+óˆRQƒ&|Æí’cÃ@Âf›¶?écð‰ëMç)nKð˜pF@Y÷¸¥ùyl`©y„qÛö¼bŒw[><»â+†ŒÂM”$ñez‡À²æ1`†^(êï¤@.ÏŸ§µ{ã;¼¬‹ŸCc éœ”œ»0>Ó<ŽGo…I=Wj R$™{®!±êýe†[éìµÑ·ç샦uK1Èg§QX^rDjÒü{ êÝèàc¹ßöm64¾4/¤È&µ2ç¨Scýöžýuö…7V¾Y&›Q!%)^…}휙ìÒzÑXÕüß—C™â䃚“á’r*‘Ž€£1ŽjÄJœ <èùêtGÝ·v-]·ŒT>Š?nmjH³¡„&Ãj´‰ •\ã­ßKLž7´­ºÍ°\?…ž”—í L:ƒ¸¸çñƒ—U{$ç”ÐD˜] –†UâÚ½|iÄ’%ÝÍŽ2ã~\=Suв•¿óouø¯”Ÿòß@“f/¥)œfp§¢•¿½Æ’ ù©c)ÙàNƒoü*R¨ÞêRÖÌ%é/øäž½K¹q€Ó&2Ùãáë zœ!Xø±#?y䪊 e‘L!ç¬&ÎcÕ3ƒ>ÀrÊõèpžË|Šÿåþóç;.Ú«¦!&¢V6ñ¥¬kk£¿U‡&ôããûu?Å =nÒVäZŒiÁ×á¶d%Mi£ýb ‹›ÅXS²(½Ò€å çPâˆPÑÒ0Ú˜ <»Ü$€Iöçá~ÊÊ_ƒNU¨Ã’7¯ý/©‰ýVV»‘Ø“ 拟;C\Ë×Ý+šö†Ur±.ƒ~ìW‰ù(\N°ie½eâÄÿÅ\›¢`´£ÍË#TÞî?TÕ'ÈBeà2 ¼ÂàóÓ^fÄûÄ67”ævÀb·Í«Hn~E?;²“ªXG3ßj¶—Ó=˽ÏÏ¿ñBƒÌ¯à>ò—mÈŽ¶ð;¨Wàüº'Ý‚RQ±É†³í¼Uw²£{R…7¤P­ßºˆd;ø'¬Ÿ s]…òÆ–aªßUõÿ¥·˜ã“x¶§Èð‚¦úˆÔ k ý-I¸Ó=²ÍåPÙGnõ7 á•gÊX©9M-…“õ/ä®b§¤¿Öüû ¦é|ª¹Î}÷hñ T”5x<™3GôÅÅyÿRnðg+U,?'s³j¸ ûFÍŽbHIW>õöº“´¿¢§ÏE°Çná±[ä׊õÿÇÂ6øÜ’~'.`ò¸ÛSRƒ1˜\:úÆù;![#eF3ÅÙøÄòîã?­Äó'Äð´q®ü£Sâ’‰Ÿ+«®i*½ÌŸ¡‘¨Ðß6w&Øù£åˆZ)ð»ùC]Ö ”JO¯„ ou»¦8ÖSËÎ>>lõŽ¿vÑ–0ªøJi¨:^˜@~^ã+]%›1Iüë­Ëà—šI\ƒdvAö<øÓKã +pÑe·¶ncäÆö`!òÞÐï6±}gUâ/q¥½j®?úéË[”<˜æE–L8›®DIåÖ—›ŸW¿øZ謂® ‚#‡ä˶þ‹f)Gßý!ÎLƒöþ¿,h÷P0Åü$•RÑ@¦xÃØ Yã0Öˆ›X‘ù`‡Èšì…Ø".¶"TvIªFÒhb7ŽÇ°ëËŒ·®Û:ê$’Q¸Ü@Þð¥ÂºÎV)§i5ˆÊÁŽõ fÿn”ÙæÙï—Ï›Q,A›ábÍO´Ì4ØœãC@ 5_Üá\k [JÏŸjã››‘‰A¯#†åsÓøÑ[‘)/P¶ÿ"2Pœ8Ûš¾À™{_h¿ëÒ((¤Ö×£vµÂeXf¢›ï›„n ¥®¯˜Q%вâLPÙK'(lV<Ä6_ð<úÆÍ™{_û½Š#R«ïƒ|f{ºh‡@=ç þ¦œöîN!&IY «zô½ ŽÝ~€w¬Â¢ü\åEÅ–[G˜cþ>­X ¹(Tš¤èí¯ÒëW…, ̰í´|aE‰‹Ž~J’÷ï}O0RT56ë/e\é‰_-Â>·¼ÂõêPÃi'¥K€®hëÏ܆ÒDà²#Òô>_ÑX£¬œa:ÛÚLJzÊm‹ƒô–¾ÇAN&,ÖÜ|înµœÞàT3 ˆ¾…íúEVàÙœ‘ŸÅ.dU`1Áí^ÿ'´òéüÖ 1üZ{¹ÌQ>i×lü›£½w°.·¬ÎÓËT¾é%)µƒ-}és¸¾5Ëö‹Á¬ål©÷C éIîüÜè&‹°7î‹›´»Ÿ%,&”n÷…lråœÎÆý9öZH$nûàÁµ ù©›âQ0T‘ë…øV}WÇHWVX³§®Ín­œÎ×^±•¯x‡æÒ&ÒN)Š üŽùK›C<“,=IÀ-Aý²„Ì\LÙÙ—D¸³‡þ|&Ù¾5ñ%7xNâg›ÓÄ3>4u­Jôç`^'„/)+H~z—²‡ö8^(\ÒY·?Ñ'3­4ßöj•Ûã‚ֈ/nÞ5­`ŸÂ;H;pHcL]¹Óû³³ýø*1,%G‘-¸«uïMK©~‘OÓÖ©w³¤¿µ5ŸTù‚ÐRUzPªH“Xjô|ÝØw啬Y¬Ü›±Á~ݾ;2·Ÿø—6 RTþR~;¤xü¦·ˆÁ ’µ­×„‰Â>ÛkW­Ž«¤ƒÅ]ºO(4 ¬µß stÕç—«äVíõ÷kް¦?O:„„H·žëéÄŽ²­óŸ nK„{ºÜ Ã6Á$„ôôH/nUoMÒ1$zzÊ…ý›L]ùüT–‘x]°æ+nTlHî›èËŒ;ßñŒìcD}ñ«ÉYïIXÚdeƧAçűgã@N¼©´‚¡[‰¯-vú°RÔzæËìçõ: ô$}Z1¶ç`½R­ç/Ì+öu™îí-iöŒ.*£Å”ˆ4EZÚg Üúæ9ñÎ,X5A§–?L ½æwzð‡¡HTiÄe]_4”7çYh¬Uù’þhš„œw~Ïzý˜7C·'Iª›&Ïá%âàî»ÇóIK[Ä`Ų¶>‘¯*ëÁ5Ó7,fÖOÅ † zQçª>:úmþ±Î€4¢¥Pò)š6#¦·Ý:Zv.cÆc}Š1S-Ïv¨ÐM6®aW¿ðOû‰àùëCuصÅ.<¥N²ŒÚLVÛoh‚QÔìòoþp9M8tÙÙw®öb´o¼´‰0CÅM² á‹k$‘u(Jú"•9È;&ÐÓͼL›N²ãT@une,t-&‰‘Cм¤ß Œü%þļllú!6]]sðaA¤“£»Ï¢7sIÍ Z8i|TF"ãZ7K!Lþ0…ÓÛJ„ódJý>Ksðý/»Ü‘j•Åö˜¨’Dt¯3ï},‘³ˆá¼ Wx[}€G4ž¦Î '#!@òÉ]©¥ƒ‘7·¦ï]#`wŸ¹ä{ñåæ Þ<‚ĉ\Í®\^Us¯˜©œ8%Õ-/³“®I¶»øÎInb¨ŽQÔož¸v6IIŸ›ÌX×îC¨ÉÝÉ×.â Y8pW9çC¦¼Øf9øg­÷£]zù™/Õ) ‚{éÔþ,ï$[ºÖ&Q†_‚ëh…§D«7ÝžÀðªç «u?žà"ò“hâ½í^SáíåL¬`+¶¿)Ó}ïñjƒ¦~e| ²Aìž,î†ééÝHÞÀè•ë‚MŒî­Ì¿À-@›™µ²³ Øè~üž¾®b¸ãD½D¨ß ’¨u¾>ù%™¼Ñ•ºÜµéa}ìÜüòª:YX\7X,~}Ÿvî7Ct²¶ŠŠ#Ù:‚Ò¦ZÂÈÅÜÑ×øÅ]™;—¿šˆ,®ål6øˆBògUÄŠž¬Q R]eS “ˆ²NÁ» ™¦|‘{°ÆÐø˰ߣnên,(S ‹¡ì³|³,êcP”lØüB ‘ÛªÚM³äÝ}|ë\MáÃU¹ÍÔ¤˜(9/óÅ”÷«sM–¤1Q`—•ùµ#f1­}ЙÖü˜ø¿ã4sè¥ ‰E¥VX§I†c²îÀc€e«7î\ñKK•¾4_P©úçê$ááMCªªS‹°AXXÖðzIÛ[=È´gC¬‡É…£€…ÔÙÒl…б{*ðÜI–›ZEsÇ¿0xº jÔi8ŽýšÉan·Å³ô®à†¾sözh‘Žǹ!,çSŠ“,™¤H,žÕ9ÿî~ñŒ&«Ò žà•€ØâØÂmc±¯Ì™ž”"„cWÍ]ÞϺÁ%©ÝðvWó bÞÓÞÝ(Ãæ¼ûí9äVúÃ6EŸÍ~È„½l< ö.g óñjz–1’ÜrÝSÔ†Á™ìºî(…‘c@n=w÷3=ö±@~u'u9ØÈºF%IŽˆU_¹lcQÈu)dî6'0-œBõžØëpQB¡«æh~ ;r•öÕ'74s”ÎīǞ´mŸ]î*V‘çñð³”år,aÉŠA¶ß¨j&•sN ¶lPßÖ– “àt ì„òG€ýÀ5w憵"¹Æxc"•~ª¢QÀW}Ÿ%Jœ‡î ªno%_}C!Ûɼò;ޥЍ½õ{®¦Jcz xÀÙÑ=Ž‚ªyee'ήӔ7g¶ÆEÉùH.5‹Èwé_0òÎça Uòû;À(Ó8´qcÃP€4¹«Þ†±Ä‚DSÁÓyÛ²V ;¡'î—°É8J\ò´uYu;ÙA.‹EHß„€’Щh¸§z£Be¹ˆ¡Íñ§rŸq_»§²DA$j£,à„!û¿žT]ŠW*<@–W9Ôöª…è ÇÉF4„œ5îg ÿù‡éÔÉN•ÖãÔ²P¬{çÈ ôRK-Bñê(°mrén»¸/? ÙC>*)‹`™;ÍÏ[€ÿ»F÷c8¡Î–nRwlåµ(þ!qKÓ/†°éI¿ú©Ò‡+°@îŽÌ-t¸oÓ—jáÔœ“ÏÔ ö> XÓ=™Ôƒ¸”D7¢ ÔeXÂêÂ:Ä+å‡;¯@päȪª/%‚äżºYñÁ]¶‘ø ¹Œ¤²y{´Ot¤ºaP e^ÚŒ6[—_ؼ|¶¡M Ü^­šu»¯Çð»Û´G¿:¬o¶fo½òKvÎã›4«†_ÚNY“_„d¬‚í^gÕ¤©?_ewœý|Ü]¦:ZÇv¹þñJ2°Ù˃§å¾Ãw ,™Ù/Qª þ©ÆÐ"U®¾öa_w¥Ë²‰æ¤XãÆ»cçêë6ªÖÈ#þ…H¨ÎÒbß+zÊ5ÑœNŽ¿¼uC·i±ÿí`1Nb'à“ï—…ÎËJZ+›ÁS×+LOJFOy¦nËPïï2]»š2]£1‰«>Ñ:êÏm.x K>ºîÙÊ'¦ñƒøÞN>µ~Öåì„qüœ–©‚§bÏ>$bŠ“UEýIõ‹÷”ü»f‡ã·+9ï°öõY@¸”î­‰—*™Fc¢rNŒ‘­«Üµ´y¡î²cˆ>,Øð«ø½äÄ ºö_]Nƒ‰òäO£YYVð¬8tÎýDeÁIáw¼—cüÿyF>$LæÆâ|÷ªÃ*çÀ¹Êðk÷íÐÓ\¹á|%YÛþW# .&›sOVt¢ü`yÆ#Á¦WíÔi×Ñó¶6r|#Žò£{5Hé?Æ«‹:àßÇ?+QªújDrfÛº:±C#†U†NQ·QSÄF{.Cõ¨Êjõ’ßunåõˆ,À”)Ï—RÆo3vxU48QÙ®§ž1W¥&)¶eê2 4µ^ªjMœEPÜ'ÞÂ^J‹W]æ›øêF}ÙñÀ¯IÍùj¹Ðú»¾JG¾…M{§ûß×·8åddWCgxDôŒB¢H%þ'À,É”¬O=›[?€cìâ~O݉Â3RG1 m{kô‰ ˆ«jw¸—+&~^©±p%ìŸÆÊÉýqúSó¹y}kŽ!13_cµµŸêû*Xþ-Y¡ø`f“˜Eä/ÊABÒs8Бèé»ÿzÕµÕ šW—Mé©ôuF¶d0YÏì½·K^_Cç˜u·ONÞÞ8A…ôóÞŽkÑш>W¼zÀöIzHàûër¹×7e>½(µ¼õÁ Ñé%ÊYæ( ==¿@bò4Ÿøãx]x¤SCeÐL€ϰ­AI˜›Q ÃÕ2[%Ð@ cÓþ ØŸDâ¯ïx¤Ïr•g•ò2„‘ ßE“f&¡:º*5:DœÓL¡M/ÊHþ½/>‘Á´¸VÀMÔ ùÝzX”ð¦é#aÒíM(-«Ý_—\㯉køe¿ÃÂñ7…ó­„ ¼Äp§3 è¿Uýư# K˜×4 .b2ÕS£y€ÑC"Ñø4xv™mÞžþ3¹!ZLv*qÙž×µ•ê8»ÈýÀå­íbAמm(A7H9.™Û0ETFŒ2Î>~¶ Ÿ­—ÛÇ-ÜCbGÈÆêãqô}‡Ÿ¿k„€=‹Ø‡ö΢·MçD©iÿ˜GL†…³ËíëN(Ø}üzªÛWe©ûˆPdvfÄMÇ¥£ý~6ÒD/ÞßB”nÕBñ_uE?&RtK’J71¿žÏkî¤PòÐßÒŽµ—ÄQ{íôˆª±µ¢5!Þ‹¡!öû€¿d+Q¾>ðÄ"Ь2ƒIzjÀÅïÄV½€î.y&Öç}ÿG¡)²äŒ­ò£Z»G¬Ž[í. ­&¼Ë}<ó†@Çy(Ðð/³½ûr, ˆÙÐôÿ[%QÔ}ÿ0‚mÒPý°U¿!ìq·L,Gÿ%¬íLÁGü&hæ€è?-$Á³1õþÜ–ªQ@´{T¯v8ßwBâ‚5î´9A’Mm§^6€åJ‚}bŒMÚª>GêÃ{ø*\R®õöøÐUÔ+7¥ ÈDÉ~óx¢EêY òÙhbÏÅ ¼Z¿¯æ¥Ø®íÞ ¸ŸÑP«k9˜±ÂYã+ƒêC¤”Þ²·áôyWh{φzAÜä³Ç;`àùL¼BlÆIáøÂæµ_‰e:Á°xÎùˆ¡)îÿ$œåÑÔ®ÃÇœ`¦¥ˆ¯±\t¢0$Ó¡ÒzRf­(wRîKZåÐŒŠ»[íËf3ýÊqò¶ ™tmŠ2K— BÝE›fÑcx€¨^m«jª£‚DÞ }VûH¬6±GÎT’ €¤¤,_C­p¹å7–ŸPhœ(?„ò¦´&ÂÕæ•,(#Ònû¬Ð#uNÓµOŸ›!¡ÉËB„Û‘Tæ@²×‚MžD =Û‘Oæ=”ì‰0:©ú÷˜…s—Ú£!V—hŸ„‹Õ„9iih,÷ó°û]9·9’Œ>3vˆëoŒ‹B¼rt† +b>o5‘ë|ÖhnøÔ> ôqýˆ@òèXÿzàÒø!¾ø¤  º/Å#I±÷ÇÌAüÚ*i¢QUÖÿéɬȪù3§(”æq47¡âDHÏÅ€™B¦W…¬§½yÇ#– pÍ¢KˆkG؇˜÷Ú…”“ –Åð¹Cdé†^^}Mª¼EV«©€ÕáèoM‚ly-|ÁÁ¶aªŒ%ÀûÄMTAíñC…–!qæsul–Ú;9ØÜ”K&šAV& –µ…¿¸àãüm:›ƒ¯vƒrx±8Z+NåÔÉÃäë(ãŠýV¹6UбƔ‚ï¯ÞÌæ´¦«pRÅó(Ôà+8Þéð*²þ*–Ä8!Q3eÈoú[¶b<¸ B„!È.öø}(OjÄXÑõÚ+{Cv/ÀÚ£/@&,“ÖBi·)ßàâhZäÿ즥)]ˆà„ÚÅØ N/Õ©e›„´+Jï…Î,â×.ùãv‡(ô%PIóà`yk@ÔæTJ°%3Ú£ ¹FœGht¨½ ÇÝM°!#,*<|äÚeⶃàÕ©ÛÂ1“Ñ íD3¦Âk¼Å­!‚iSÐÂò©›´*"JûŽàJ ŠJø‹—DXXÚà|Øä¨ÉÕ.:Ý7êågÔ6í)à[Wþ  }™ ÔÁ·‘‰ÚeˆÝœ°d"œs½Nÿ\4q„K¦¿P¾<–4vÞJÄ.`)íE‹Š<;ÒBÚ™MuМ½8ag!ofÓðO!+ö¨ƒGƇä+±±n’æÈcè'^ÔÈÝàÖ¿&FÉÝYÉ–ˆS|è¢Z}êb'Œ*9þM0Áz#³3’ØDÛøÐ”ºÄùEý3Ì›²RBuÓ'±H»rîyÐpùMÛ“¥’—¿ë~!ÙþGéáNjÀ`lÝæñšOvP\Ù2v[RÇÔ( ÿÙ®>ú«‡·s¦„üw‚Ê€óœò¡Þ›Î„¹†g!‰æš2ô½çûqjñoÌgDÉÌŸ%ŸÛgÙÒ6ÅÕHo@¶’ОݱþR£7@" ŠåÅk³ïÞ»}<~TŽ`¾“ Ú}pˆZÄ $'žj™ýƒB,¡(¸ ÒðdŽ‹Àœ;Šƒ3¶¥ÅZ ÀïRˆòâ¯×vaKò|,õBÜ;AŽáàf­rÚ(fûßá£,p‰MLÑl|Ø‘ˆL56t&úà$¸Öæ+ñÉê.Dc%Æ}ï)¤uæ Œ oë~’¹iš2[µ~Óù:+/GåÄq¤¾@@Áq‚œ°ŠZ·go—4sݛրof';P É«ØeÏMå×µ ÀÆ!*ë¸i_Ð(Y~V1Ôanñ}h8Jb91–Üúc˜·"«éú¬;ÿ·ÛÒ~¥(ÿ95'½ñúPXi]©Ça.בQÉùbœR“ ©ów"ÓË 9ÝÜ çWŠ,'”Ñæ qþ[ç«ÞY¢Öe•ÊRÁ`©¤Ï±S¼'¡,R „7`¦f‹Â™Y\LÉ=Áˆ$e0†êˆè¹’Ï&Ÿ‹TǶ.’à çvÇBHr^ýX?Î|[_‚ª…xÕ¥l†>®‹ËEŒö®…%òUš4Ù1{ÒnJghžç4pR ©¿ƒsð ]µ`Si·®ð“,PŠISÊ Yr+tÏÆoð±Eg Öœ Ûb‰Þ²ÐªÓ@غ%ÛÓ¿ÆŸ:Ј^ÉD-ª‚çËŠuܲ/óS2mqy”´™qAz««dî«Jˆø=NÕG,‹‰èœÛrþ ³â2Äõ· +%kÍŽ©ïö×úkU¢a¾™¬Ì–[?cè?m=êãƒÐïn¾T¿Æ“¿<š{+³ ¬0«Rëɘ)3 å/ÄéžJ—ÓÆŠ—ñ¶•çP0ê\˪€¢)|@HgÖ`@=8L<ïT¿oÑ)Ó1߯]˜A‚{GAÀÝ:ö ÑHÔ—Ÿä„Ž¿p'ªhœ´Ï‰)‘Ñ.½G{~ú“éôWÛ“ØrîFU©y¯2Õ4<8èJ¥ž‘ö ÜN±kA*7”ÊЗ-§á—l64Á¨¸°Áw6ÆLô—÷5h¾KK¦[̪Z‡«“Uôy®”'iyÑY#½C”U”ÜUŒ³Ñ³lýÐÿfD-C1IëD}ŸPÙr! ~¥•üæ!œÒz—ê8K}Õg~'›` IÙv)Ä¢™4ïj¯Íý ýøçW‹7T%BcnØÉhí™|çw)'ýL%J>nhg/cýèy èpÂ{ t¯5¹[mÍ%Э{ÙX@Œ«ƒo/ôãU¹4¬ ª`òéâäžxü-¥cÛ³nõ-žä¬°ÂòÓZʪi%›ïÀtXVZqÀ+‚®À$¡_Ò€g#>•.›#ÂgÐ-^šW±a ŽìIw™RpÁòÿèé™ïæ4@c›–ø0$G$†ñ ìu!åÈ$ú\´KªÓü1[z1;½±yøÈn)k¤Œ– p©NÜðþö]’dÎS½ÇƒÑõy$2ª(œ@7¸áeÉ—ˆŸÜ¬ë½?šo¼x-üü|#{ðí+W£W-¿çx“%’1ä=¼²äÉ\µeE<¶‘Ý»›‚¿biïࢩ‰ÊÖõXm|,ÛÞö³,^ç±²7Cïa_çìÕêtÖ[š þ~c›ÄY$¯ë¨{)-)·íï¿j1ºK(Ð9ëÍñ {I.–¨"€¬ÿ)ÄdPسº¼Rq óaTúýÐJæ#· Åã‡<»à® 4 ¯Ñ™;«¬⣛€ìê2K;Åâ›j©L¯c¶ð™Sµu¢3B*ïÅVøÓŽ£fhŠu~Jòq¬[ãö)?`¾„ö9泸Sþ†4óðoÞüNj½‚Vò£m²8ׄÍZ#üâ˸bQœæåõ–d´sÀxxƒ»Â4êDÝä7¾ªØ9 Õ³ÊÃ<7º`k{£E¡ãk ýµÐ½«‰=2k8¼{²{pÄ)„dM.“<ò”!Ù;ZÆ>¹dˆ˜¦hž=z©[Ë 3îHô[©¢Þæ,-èfá˰ßÏÅ)G)RîYÖ³7ÆC8(ÎÆgùk ¥7²õ*Mõf±™õ5RÝŸÓ0!ðZˇؔÝgX–œ@“So2¿»wƒ+YÆ:&Fñ?ïÔÈÈuÖN»j°G †$À:´úÃøç§iz( ¬Ïcwõ4LVºëº5Oœ<pÉÂ00«¤(íÅ]XæúÓÁäx Dð7bZËž¢å=ÖΑÊÊ4¦h°üèZ²°_nñî7sHðÕy’.e ™ÛI‚Àr¿jGЖ1Üî¬Ìu½MYš$»|Žº<ÕVFxq_Ï7™‡¥à$äU¾S¹/âÁJPãì¶©8A;áæÉ¹mÉ/ðàKŠÃAÃé>u KÊ ¤)W7Û,¦”¤š_ÑØrq)³ûÈÁɈۙÚ{X­‰¯Õ¿«ºË‰ÔØÎ¦Âÿ¶‹££~ß)†Vv‚K¤¶Ša°íéC†cy7Ø<‘K ÖT]Ž1ƒ2˺-^åÀrÜ:$3£ÒµÄÁeŽ\»4€W]ª  AÐ|d¢ƒñ$£S{NÑå Sy>4g&,…:¤¡~éH„ŽßŽ; ¨°i¢‹«œ¬V fËs¥‚únt¹Ð<¶"$‘¤ÁЫ~ï>˜Ö%¨æ¬ÿ¬™T·§‰—lJ‡)°ìø ¯~_­¥HG4Ö=i0fi:½ƒ;šÙA/£ ‰KÙ™n”Dà• ¬»qkã[°vÆõ±ÊG^9ÕZ“ü¾uxÍÁ o\¾j×à•ÜÞÙðï„¢éJ¬v¾#–ém>¡Ö|ýeêÇ öÌÖJ_§wîÁ4ÚA*ÙoyÌ;Ì»Œ§q²»ú=ã÷ŽT…ÏÁ[D˜Ÿ+?f—oÙ]ÔôÙ­3ïQî±ã· ß¶ãUâµB]6. ehCdOqË*.ñÍ9¿R“ôùÝZ'Çj±d[ý> P2º‡V»—| G×WÖ#í¢oV1– ÉÛz‘8ŽŒm{EÄRöÔ˜™-Q¤6b¼²êé'­šø€7\ Щþƒb'Ä…cHËÇàÓ©eÈ“çñœ%àŒÎKxDž=4°ŠúA&5Í–/»€ÊAYuû¯sú;GGÓ2§³`ÉW Ïþ¹ðc¼\ê=ÝQC9ö@v4H)_Æš¡é²­Ôá{ímÌ4fª•­}õŠúí•‹^!VxÂÀ™?F¬IÇqx{A×¹ØN¯˜V ¤°M 9¨—’7³Ÿ•±"µÖ徕-S¶V…È^d}àCúø[b,ËFHÞ[[ºý¤®éö˜@pÎŒU~Ð/à::Ô©í'ziUGƒœ=l½¶6#éH5ˆ4vnmÙ2ô•ý±@Tíâ 6m^„؃Ð7 W/çRÁ²#>ð›«Ö+{¬¢ˆåœ¶ü¥÷C„ãáVtj÷.Ú&®Ü•zóÈR?Q_týæíÔ PNQ'mÀöK•…î‚`g„°ñ·‘ß:’ i‹F2‡²~NSÖâÖ±Ó9*oqºn_«w‹0ÄŠR8Rޱ=lsXÛdÖHª ÍÃÄ䇶|xI¬ñXÞ4'>¤¬® ‰i÷ÅŒÛ>ŽüÙLfnX~cÀ ~.DWÈòý¹Â%’_ÌI€IK¦KŒÆc‹]Tsg&Ô0ÓT‡ìî˜]þ©òçº)‰B+”ñó‡W`ÿé†ö>ÛïÈôb@=ˆà¾\kËlpGÒ~'¤…ŒÔOý'þªÅÆå#¦‰HÉN‹K–üy³/WkxS%]™ö+AÁÒs:•Øâô÷ú‹ã¦8(¨ýׂs¨wù =Ì0ÞAïIcÿþ«}Sfíæµ“ÌNô ̽‡ àð¸°âªf×ì`%ë¢1º"«ç#\Ô<ÂÖB)ÂúràÀ~ñ[HqsÓºuj’cý¸©YÍö4eÑóF)±£ÊñæbQUð˦òL‘ãÍ÷sáØU¶uÔ¸Ý^Hb¶Ú½ºáŸ>ÜV¹Þ¾•[•…š¯d!á†oÍÚX{—íö¬¥÷n–ùʧ«á§L"š æ}c&ë‚}‰âô·¤;‰7ÜþÖÉ~»¿Â õâ óÙ\ì»—Ùù´óf’âl ÜÔærõ-þQŒ0ÛfeA>`ÒRÛz{ž”l,Ìr³‡ '§H2Wüp¹ù¬@OÀ;›Ë#’µ[ÖÛx˜½+Íæ…Ú®³y3ÉñÐz½…¼<ƹ[än ÖCÞ:/QkJï_ŒŒ6.G¯Ê4笢îÅWQ&‹^¹PÑQ¦úúKØ CeÿŽ\¾3+¹3ó–F~iÂíùæìW3d*(ùª¯Øi¥‹ Jše<„ÿ‡/ƒgüŽr¬çWxYóŠtæð C g*FLX·A¢¸Û[…Ï0™5ZÇÉP-ìi¶ñÿÜ£¸‰ó¢3mŒC”?ú¢eå…jS<þo:7ÖZcD CD¼÷óíÃÛ0í”]6IÇ€d&U=}þZÝ¥$ûG1º¤f„lÔàÛ¬d\Ç-ú„Ìõã•V®ÍQoóPu²È¦VfÿZ^òó±»ÿJØ:5¤.–îu¿x™¶øÌŽñ¿Ü´"t†ÐÆ“Ž'"îvÑÓ[%×+H þ1(&õÚQÆS•´›¯‡Ì)ñ5ºßó‰°Cµ YDãö™W€0›£3Ï8Bxô‘äLÚkzô{ò££‡U´ÿô]‘°ªí -B†°Ä5¯0‹-Cmä9mm#â³v†®u'^rÈ6"¢Ò~­‹ÚŽYÖfÜ„ŠàM­—+­A+Té-ísÿ‰Í£Ž£oç%þAÊ Y»Ò×âµ çqD*¤Á>Åϳ<̱:-@qò<µ‡šŠ¤ã?e€;fISÄS%6¾a¾ñúÁzH—âp&ªNºd‹ƒ¬ƒñqª,ùWdפ|)Ë~ê?Ñpñ@J‰þ›Ê—Ä zøEéùkš}6ˆ0XÒ±Á &Öº3«’ÞQ¬0"•ÍWŽ ô)ÚÚ†ÀâX6R½pt)È\õYñœ,l6Ïu—ߎ³Í„"QZõúìÐ/B\>¡­‰îþà蜎.zwþ;Ê—ÅO¼w;¶i¢m‚>÷æðïÏ×Ê}æ„=¢?ï¦]Qþ_%ŠíüG2y†…ýÿ,$º“«*1éÊOõ^²<ÔPÓ_l\¬Áù ·“;Ì.G9ÿçS,Ïÿ¼ø‡$\ zIH×+àr¾cÎÚ•Ÿ+;¬Ü»D££XSÍ*‡ç”ÿË`O¸¸sÝoâŵ#6¿Áµ½2zZñ‚€{ e³#‡ …œdöš¶`Ök `ˆ~|H¸«öRlTò’‰ÛnÏ’îœh÷Ìpª¨å&kbºÀõ×Ô 4æÊ?Ý[pRêMR¶×Å›`\̶ÿ®:±ŠÂ¥3Öß‹{LáåUƒÄ´Nü`àj„°H33ï4•²(e =ŠÍ€Õ) ܼ\^¸Š¿ŠDfì“>™×Ñ!:¸LÍRÈ©€âˆ¨ßÙÔõ ‡[)gÕÛIâ›ÛàH‡w¶Õ|XjdzżËHïÁÓHÇÞ×NùºŽ‰ú^pŠÈä"šÂ¡0ÌÍøÁé±âþÛ X¶´V7²‚('ïï$UZ•*]±’ 2|NºVè"ÿg½Ôi'„áÎÒÓíŽìŽÜ4ô¨³oVHm‘A¦ALÕúöƒÜ£)úŸ³Hûé%÷äÆŸ0d»ø!¢ˆ^ ú%µ“¯î™im±´íºá ¾Ù…êM2µ¾¥Îc«“ˆs:Û1ña뵓<xÇI®õp x •7JYH « ÷pª£Q|F¢èðUÝC o@‡Äžhz…Bs£ÊÙ ÅÂ/T®£ 4 3.Ç‚‚ºÚ™>wÆÚŸƒîÉÏS%i³QD—ƒ=jœÔýPzðüމùaÿ¦zÔ—xšÞežT&0Џ»&wë°Ýb"£©‹¹&rЗØõ;±ŸÃ‰áK_Õ ÞúŸ>:ÿÉl+D!èpi.øÆ„7ǧÂíN ŸôŠ$@ÓßZ\Z T„2Ó—;ø$)¸ÅŠp“ÊCÔFi¤¦žK£MÙR¦®1¿óaû£ƒR·—ŠégµÝ=ɬ¶B"| †_r‚I(Ôb‡rs èä”Í­¨:ïŽdˆ^PN—u^îå4`Ë÷îøé\DÇúgdÌõ3£0º=¥E[â&Œ÷ŸÎ8 è“ =­ /™ k‘Ø—ybଌ\¢ôr‹ü눅§yàÓËúÕjut{7ý§‘ „Í&æš¿„ïÅ;àã„ݵEÀ¤WË(™!T}·Óëà­g0½t.´!m"î€OF_Ä*»æ+ó‰ÿvôP;«?ñËÈxE0‹8Â>Y »'¼à&¦ŠõXžŽÿo[ìÏùÉÊ—w*>Âæ8j«•••ÊAÜŽi#É(ÄŽ Ò¼‚"ë ÉsTÕ“øàžñ4~Ǫa–÷ÏÙKlyŒSø”ì¢ÚïªíZÃPk†f¿¨‹kVÐ °–[šåàæç÷Íõ‘6ÆßÃýÙ7 áÓJ`Hzcñ…íĆ‹<7û‡4–Îö#ëa¡ì»--ZÎ`œ žˆÇ[Þw7ΘOÌR¾ü—MÙð4ÆM¥Öë6Cµ ?|(7ÅÒéòAÅRT޼‹·#˜HÂIžÉ} Qó ¬" nݺ©e’÷hº]_ —]è«îŽGrz =|Œ ›ƒ²ÿÑ)‰M3@ª€¹ÿm ÞÞ~ð×¹†pe¹£Q‹Vn˜–âÿ|×ù7ªtêÅí@­È'=8ÜIT"ÞZ†c4Â+Gn†˜ÉÆ&w JºwèX nÔÇÄ}è¯=]d -¡Hðªjž‰$ÄË‹Md™³ß[ SƒÜU¿}`Ĉ¼¿£Ç̸½š«õª #½¦À,bä³ñx6-)ƒ-!ÛÕÐнg²ulœ…B|µÜÕþ™œæî¨‘—¦@$²àdK†^ö§Ñ+@i 0ÚV¥aýœQèFê3žiQ«ËÆÿa°¿ÒªEj0‹lìÝÑwâ.`RõžLy]5š‘˜˜|œF#ÕoulRJÛ¹U®ÛÜOáÇ#M¹ ,_€ã{S=@Ñë£ÿW{ØÇéœü=ÚîGïÒä(VìqµXîxRtíR *ØšÜñc¨—›$¯ÄÓµ“vÇê¦}ž‘.’c†LzAKÔ t¦Ýó`Ž»ì$4D|~ƒµ%°ñ¬£II\œ¤qAò‹^ËŽêúkxQC’ «1îß´°¢D=~ÿ¬„û©v³1ñ • Ò+aâÆÊ¬ÙÕ½˜·®àñØÄA½G°ZŽ‘.•!(ÉÇËtú,ÌÄrÏß´¥);¤xÏ"°ÕÀsª´y=ð³ß&(sÏ…áÈ”Ÿ\sÖ&E Í„7LJRQ®ÇY ôæÚš¦Cè9#› =Õ¸Ó(´Wè'Xm;” ¤è¾kZ‚ªðê¡Û©U_Hø·2êFvýÓLo˜¾H¾46+Õ¨7ËŽktƒ„Úa±hã«‹ŽSj%9ÜÀwF™—lˆú±¸iæ ¡ ™çkÉ1Í<0ºè­((Ç9åöäý,ù>¨¸ËÒ/jZPÕû‡”zM½ùw76?D€D»²„ãw{1*—ï°ÔWêª1É<ÅÓãnA¯0·ïWcúÚ Vzî>ÆKãEdBÒl´²ÚŒJsêi8¥6ªM¾±Ïàý0öû*5ÿýÏÔ³:¸~6‰„±ƒås«4í"6îŒ*Åy™2¹t$Ä÷‡9b7;j06¯t_JŸ­Q”gñ4öå¨ßS¦έáÆò©‡|fè[ªµ_¡~|&‚~FØÍ™œÉÏ䆆 #¥vÃ:yÄI2Ð&Á‘Îeaú,`gT¨Òµø´òàhp­P'ÌÔá.Ë»«pÃq$o®!eœjQô4—r’VÞ|LÒ†¦%½f£12Ö”~O®ÓcµZ-8ö±ú%Œ(²ùì°²°O™M³SÖýR2a¢-$Jƒ¾,§cyî?û6¯© ld2þÅÚÈCLzçÔÚqÜéï¿<%y¸¾Ž’´'dÒA)˜ã¡c!sâZ½´¯J%µOr ‚!¹hµßÂ,Ñ^—êÀ(A¥…1*? ž4%;ja'Ñé[y§ZkWXõBS}…Žª>?Åšß:yMLI uœq"h ¯ÃÕôûi•ܯaØWˆâ·Ôò«Ñzl9]ØWƒ)<ø¡)Á×?þÜZh!²çl›lÎȴ!ò“–¢Òtñnaä`BÁ7þ÷sBçgbg0à}ýÄYí‚As72Ù RÑÅùSºc(pô‹s´:’µ× ®*:‰;†—é,ua“lNøÚ Ð$Õü(?âÇõEûæ‚B¹ZÅOÆ “CvÏ÷Y\èø$Éäa·7.2ÝâPî­Ò‡–rAº»w~F1ÙÕ“ÂjбÂåÊæúZc¸¨k~p€7Š‚z_ºÀލ¤Ï;‡u™½m!ª75éìz4UöÞ’pñ„ófÿƒìé ÿT (œ¤yZ{rÊA’…Ò_ÛÞNþÑéS«]:gÙuð’æj|oº‚S²;]s~œCS€¦Rq(Ûz®¾©Ÿ|UÛ˜õÒ¢‘–üs”s/lm,˜F#„QB“3Þ_ªÇ0YÊØ¾[¡0‹&pUæPD%YŸX»[I/Ïõ4©1„í >^Xŵ~ÒØ¹Òüö ôáMµµ?1AõUíoâŸ6.ø `DB¡­&/|1zoÈäO]Rªeþ“t‡€«/©uINql­œ~“ÊAb;HÞ½?IãŒÃŒÝVøŒÆI¨va¦wO€»–ޱɾ·yͪ˜É¥8™_Ð9å  ~Ÿ[Šã*4îü€1Iñ zå%ïBþ7‰zP=^·/Ÿ¢=Ý̵4ÝT9jEó-öÜŸÎÛÁj‹^±¹A /?¥ù°€°¤±.öˆ¶Ù!Wv5Ugö*ÒÔtgfq¦Ax S½é¥oýk$“µÝxW<Òž[–¨ª‚¼úÏØ)Í–†¶ Ìß\‚Óãtë–Q T¾M³•€7“»yè%¦ —ætÙèþ,ïÀ£Ð»÷º—é-Yî3'åÔ˜})»€Ó)È‹Á(¯nÈkí±,P÷=tÚ÷K¡,H~E9èb–Lªé·ì×ò%?¾Jñ¢¶Ém,zñ²Í‚ݢòø6üD¦®>¹ïЯnÙ½ ›P¢•=í6\çÇ‘nŸ2¾ÌdBç9Š·Ö”¯žlúN½]@7ÈzUh‰£9ôQ.§@XÜ— 8‡›´†T&½Ù{ê1‹;’À¹Ð•7¯€ÆÊ… ¾’´$gG¤îÞc9Uª‡¨;í|öÉóMƒ¦Y%XÖÍdê-Æ8 žDƒÔ8ËUù_´ Ùûÿ(Ju’3èÌ™\fA¼]0øîÌ~ÊÛü+)(t|[tžM4Šv"+P- lRi/±º‡@瀃,ÂWÐNšöW׫ dk‘ŽkU*ã yÍXO(Ÿ'¯µMüp>Ï›®nËëõ!ㆠ7R£ÀÙ2wVˆ'Ý^PpDǼÅ]Ê]1«H’ 8gÔ{™D··‚9º´`‚[ ѫֻ:¨Ìm˜÷A¶ÝUDO¨ŽP ú¼•ºõ˜!û¨ t–3 ¨8—™_$`Õ¸=Ô¥’‹fwOa–à?†•cÜ™‹BX$ôŠ÷¾ì¸[¨lÊD‰¯jÍ\ŸÛ7‡z#¹ÏM, d²~ðNk¶{ 3NæÔQ…¬!I•´™þ¶TÊm·{çòŽAâÁЬYøzeíàó2ÁË5Ñå|½3‚¤U£ªIÐçÄ‘¾W¼£¥"¯ýÕ­dE%ûq°½&/jÓ{òÂê£æëÕkI£0òµ×´›–M)±ž¡OÅ ){Iª“"“àx•Ë_Ù^>ÈŽèLÖ•·bÝdpä ÷7¢i¶×XÚÙ\1ŠXµͽÅØ ÍOÄÅõ}åùzDiÖ#ÿwóκޕS4ë¸çQ/6ñÍÂ}"øâMFØU\Ûã›JãgvÕb5OS±Û —1Q,…– ÁTͧˆlHóü¬*˨ s÷=!±Ð‰Ëat]E2br¿ F*®–“.\ u-ñC-(&ß>%h º™Ú±<í?t4 ÎW ÓA’Ó•iòÑ0 ÿ„" ½c¢¥g1¢úž³VÓZ浆r"q§X¼ów>Ø»ºïòH Z¾Æ\?lž\qqŠr»^iî*—äB +¶#Þ„_ ZE¤ZWØh¡šÛŸ3¨!ìoŒÜ«ÎÌV¾WnI,uõÏW§CLÏ!c¾ªW«65"a =`a 1ç9­]òªHÀcq”}oRH–Îsïùã>nK—=V¹N+ ÙóÛ¥ùÖUr—@ÍFD÷q-V:A B#§ß!:‰«„ç­cƒ»¦â»¶TùoŒö:ÇÚìùè5è ÓÒ-F&>~ am¸ºAõ÷R¬Yþ¢ 9ŠÓÊEèëšIi§¾³¸Ûò.Õ‘þoL¶^.ËVå=¢à· ^SˆÛT^£÷Õ‡i{Ÿüm:ÂPQeüô{}¦)Ù<ÆLÄ Æd“¼•¯IRcmŸa0ü˜(®R‹]€A·;÷;THa߆ Ý{=YGVÐ7>iCÕAs£)ò÷Ä“¶sr¸8r,8µ÷èÔ'dÇX$ÏÑda“ÉË´ ‹arMiã { Õ³ËhS ly×»¿4¼pfkÀZYã½Ê‰/tŠ+5Ñ™PÙd6?m,ØÀ(Ÿl®ð÷€~Q͹ Ï¹!Dý¦ÝÐäÑø ú:­#nSh¿ÊCÒM^š×¤¾*~’M—Èä¬úÖøKí˰ça÷Rɰ*ÍŠéI,‡ZÕTèãó±^ñ–áñ=À0®òƒìŸiÍs4aÝR‘/=Cš< ä–‚2'°] ·d'3¼tnòú0ƒnˆËÍcÕ¶q2š2}vžê-¤ôÀ²UÒ=‘ñ «ßgŸþ~”q:–€ÂRذz×4†ˆ¸OèÉ‘Ti¼L>4¹˜–^&M.T•TúæŒ޽^u뎅熹+ý ¤ß¢øEËô õXp„|;õQó]¶¡ŒBóä>Aÿ1ñŽÂ+ÂÆgEÒ!¼0ª½Dmôà{¦Û¾°ÙLæerk¨®¸ÑV—cÌ+]øp3öÒQ8ëÍÀÊÿ®f‘­BTÅÁä FÏã«1 ÒÙõh¯˜pN"} ¨¶ò$ ú }PØi*¯•Þ°=ð”Èñž¦–TՔƸßüëMÆïõÙŒüŸW›Ieÿ¶š{׌X\n½ðßQØ­4ŸLÿ@b&wª¾ ë+Ö܈©êqª܆@á°i\+­|p’Œ ‚•X±{|ÀóÞsŸnÓ%m{»gÍ£ˆ±û­Ÿ††yùŸÈKìÂX(á"šº³ß«8ϑŶYñMcËh„˜UGé(,ÐwÌ›j™Ÿ>•>=Ý9¬ÏëŸÓ(îƒ9Ñ"OeI«…GH/di]¸å¶gI-¦R´:¼y\føG“N!k Ї%©´Gµ¸6ÐMŸµaÚ:ZæÖæDgk ø#"£9Y,tJ½&Ílu ››¡Û¹a¢++ ¤7|ΊKK"sy…(Y§s&€3Hº0&8â G—gPå|‹<o$ÑæÚÑ*üñXL•‡cý[»¾þàBÐÆæäÖ#ÃD¹úà§K°‹3ØD~e †@ïæ®…AØ1H4p¦-´ñS9K×S»¸‚²ÃÒ‡ž2IIzýò‹Ò£Ð·ërG`W…0¡KÑ©@!Ö€œùJú.®i–Þ³ùØ×‡<ž'AÊ[@žÎ½Ëв¶n/ØWfË+Ð'Émiý¸Ÿ¾ÚîCܰ²/ÍUÒ4Òpë´¿ÈÅÙ n‡½ºH JºF©Çæbg*uÒ¼&L$Ðz*¬ ŠÈ`ÒöÝŠYÿòÃ~´°K¥7XÁ±2Àw­ìè³sŽ(X>•Þ×£ã)¿ÌùD[L€dv` Í"Ù¢G ¨hó(úÙ Jk¹ˆE¸x‹lH2LŽ ËÈØ‚\ÿ Ið(ðHG‚s?Û¶çø ¤ÄŒ}ʳòu2f0:|s¬‰ƒ“™íCÆE@S{FœäÕ ú„©Eˆ†cÏ( Úv*0t²î”.‹;E›™¦ðSK?»„h¤æ_íA…JbÞßdD2ÿ庩Nö&ðÕfÒI9òKÉÏ­(¥ð¬ OÖ„d4ób¾Ârî3´TÛmÓh›}©9ló>NIëG³Ûùf‰Ê$ò£ÎZl‘;ŸLÊfQFÏ!@ñï_þc©¼‘pq‚¸/ÓßÔËø™RÛÔ¸ Ù,Räî²A$¸ÿÀsP´6ÄÑé*T Ãaþ|g 4[-wù’»37)š uºKF7z<ˆ½’]Çþ,Ã+¢Øb§˜Á—Tß¾KsÜOŸýÚsÑs |§io‚oź’Ýîc7Q=dQp4+óôýâQÞPä1R,÷n¢ê)äèA’n%À·a<&f«½Ö`«œ¹›è$É®¸O"jé¿Ø• ­µÀq%ÀdDmCԎÃïP”Bv¢ša¤ovRŠÄ7åµþ<|úFŽ[ŽýÃù¨·-J¨eÆÄ $á ¿u{I·b‘Ò‡3g¦´;°0Ãèù]‘/P¢’^ïøÕ¡44òaA àŒbô@ưeq{¸ ;¶_pÊsáwÖ'‘|rAõBÃ̪Ž+sâE¤õ†³o½¤$0Ü}hïbÀnß àÙü¦¨šJ˜¥Æ×¾È»@ÊÛˆ9}¿OL²Gô€È?3œ S¸)Î&¡tì³/^+ ùÕ˜Œ6g‚o|¡s•9¸ù‰?zÇv®LÕÂG·rô±ðLquXÆå)œLÜR—¥—ôù°˜éI¡”& t=>1B#¦#ÚãŒ?8³ÅŽ…ž…$&~ñ,î»±s—ðI$èÄ;áæ‚ž sðSš\Unh/m-31×\2z5ø³ª•'—1Q,“ ·vmN Éy¾Úˆ»l½^P)bd€Ëc9ÅáQó= Ñq°c{ùˆêË‘¬Ì‚þËÓÈî.ùŸX4¡á&ñ{õŽV\”‚àÆë:‡£¯dn…µ$ðhoÈ=îSð\BBs@gY\0dÅærbC@"Lý&VNÊÛ•ýþÑ€tsïòeeÙ®ž}Ú$›€&ND÷œÉùUpT‡°”ö$!}ÒnyŸ løù4Ìê˜vô:NâÆHüð†”$R”4œEifpEr2ô:yÚ@8+b£´déiÜÀf !D0—*îL{ΟJ•7ÊSÃ¾Ž…æ9a\{ãg‘I\s~³»¹ë¹ îŸ%"ç_c»X“âQØ{ÁDô‰îÇ~Õ·»*Y\Á!‹Ý:ÁÂÚ‘Ò|ÜmЛ¬'J65¨E©ûW€Pù¶¼ašVëxG§óB­¨Pn; ô‚×ÿ¶7³­±%LNýJϬ\ò³O݇(ºLÖ˜ÂMíúKW8Éöí_6B+ä©m±;ÞQÄ‘Š1ÅtV\ü1÷úùî ±Fމ„­ùœl¸Ã˜{ÊË —«¾.*_ÓÞEÙŸû¿ã¼î~-üÌIö±Á5ÝÔô~‘‡lÃ"Ý:®•…8#»Š8R»¼ç…Îe› @ĘݚŠfEÝ+̓ýA`Còs¢â}”¨‰X Äî¾Î°¿¾PRÍÌîôËTìǦg“!(ŠŽaê- XGÊ‚Òb‹èx ñN»÷¤ÁwãtR.Áªé q0'íßq˜L|ƒø4ýÿC˜¼"l ŠÍ§sÀò<´wè~°Þ“=nÚ„ûMèU1ˆŠuÓ™¾r˜ïO¸ø ÈÖ\ñº‰CªAÙ[5}™zrñõ0x?Œ¾ô{f/vAO¾›œñ#c©} Á´:òQÍámÊÎ`š.WËxkóŠ§ÖŽ[ª >£L¾juï±§ÿòšyÁç{K†ýå+çëDöÿåjò6y[ÀEïHXDÕRd ²íKêÄÇ#Œ³¹æåˆek Eù “oýh׉`\·Ã¯íJÂ×^^î–eE"²ºéÎ~Ë1ó–Š-Íf¸Þ‰ô‰Ó^ÙNqÍ }¶ÈËbL†œÏ¸ ¡£fþþ 7F©µõ~“^ ƒ,ºŠõ¯‰!ÒØvº˜Ýá³]ÛÅ«'ªs\ÎÐoo øVXßÒMfOÿÒ@fH! ›åâÊ;—“9yå&ðß81ùhé§ ±_Í@*neâ´Å*ˆb"ô¿{C®$bT«Ä¬Ù"O ß“ü~+“è¥ímàlšJÒ3<íH¶sgÂþqóQ*Ê&/2¢ uªW–U¶WjÕü™76én/ä ƒÛÂ?ÚOÏ…[~Påû‰_…L˜ ŠBc:ýãlþ–Jpì"@nåÔÃA)£É¬›•\´^¤ÈHáüâ·á%*¢M G=o®¾rKüðÝó$= .ÎÆ›ª4°`8é)•©v¤‰¹Ã!©$šÒÛ@:$•³Õ‘}»Èž­}bÉ‘Q˜÷Óö ª/š2RàÂWâ&Û¹Á]y‹òÃ¦Ôø»¹ô¡Qù5º<ºÛ—ús¼§ó@TL¸ÐƒÇ/²ÍÜý¦KÄ¢'¼è¢Y äYçs@q\ÔfZV·j4ø•´ƒV^ä.sâÇyÏ \űývZió"‰ÜÀÝöÖ%ÞEOXW &Qo»øRœ03Bj¯°íÁ}çôR½šcŽî4“Hl8ª¨Mµ´÷EÊ/prp¬/ЦP¬Å,<Ál™zW®”‰Û!â2f3f£äj(œ3ä¸pÈÔÏ»Qx¢aÓ†?+Êoråm…Z6a‰;¨‰m¥_õ » ȬÃõМ¯lF(gwìè ©2³ÜFâKŸ9ÆçnΈ®ÜD4×…™Ð 9#œ¢÷ªâ0,ºTµj·Ô¯ÊMxOÇzAÆÅ(€¸m/¹ûÑt1¹D„ÑÕQÝuÝ´¶A–È%6ƒ ™ÿ@U>\ÛjÅïh„î*ßÈ#iálþÇ:ªfx2["³ì­|¯1™ø®–yµWiå Gà ª#f§+"T³Ÿ¿e xìЧprŸï Ç“m…Ø9Àg«C²Ñ0<Òç:1 ÐòÎÅ4/ÆÁÛ‹Ô2¯¡žÝP<¦…ø|’5ˆï©ÊßcL"6vJU5Z´toˆ´,i¢ÙÜŒ@OUðU)ÆxÎ]Iꀼž@ŒE½v]-xA.ihJcU@P©kVÁV‡è_‹‰¢mÄűú^ãCúHÛGzüSüýnš öz¶Bâ¬ØÞ½á:xä¼Ëä1ß¾Ûº‚ÐRîÂKý%¶÷(Pé[WÕ)üW@\TÀâ>ZŒël,†H¥G Ǹ¬¹~‚Ì÷Ú.t ^æíèÙ÷ýýŽöD‡K'ëúnõ­±B¢ù+­@úÆþúÿBá«ü»æ Úå6Mnǵ2ò̕Б¢À8Ê­èàYrüëå5#:¬ðœÓ]…D2 ™ÊlA”Žhcœä3ªÏ5S2éÃ-U¸EŒGµÔpé‰:ÍÓ_ô„NtÜRñY»z϶BäH‹ô@¡bñU“D. P¡¹0CÅz£é–/žDá]¡ý“šô;*r˧K½Ì®±:xvÁüE¾l € Ù¹ áßžIW (n£ù½…½èû™;Õ>%:j§‡¥ÍÞñÀ)*l ›ÓÓdSÃj¸Œef×®y½ŒôÙ̺‹º(ŸIbkMeïÔ“×ñ ¼ G“ˆ7ßuÐ͈Þ©¿ÒtÍî×p憃)ÔõK|{ñI¨ë—h©Üt©Ð<*øG^Íšuä6äyF_÷†Ua9G§‹Ø ÑWDôÅÑŽŽPǹQ ^£óO1uS|鈕Gs´…ð­2z DåáàGGÉ *›©‡ÅNvÜoN×gc÷—í|úo©)­ |<ÒtØ(Öÿ,FÚ1)”½¢zj…ÑíŸ!€}ôòûá~²‚p “~2ä¥óµš$MðËÌaûÚ῜.ä¨ÏÇ6w<Êp.0º_µhxª ƲX,ôôeÄ óu¶cÉõSdü¬*ü¥vÑ.&² жCöBݤG"j¯‡9qUª|ÝœMïåƒdpùò:ÁÒ Ñ']ÝœŠV šêAP$é¸ÒXCÚAÉ-˜_NO¹ÑUʤÀKaá—+"`OÔ•É:˜%ˆiëÙšD6N߆[aÒf½´Ëô›ÖRkž¯fmlú¦«R¥#ø¶ðÔ20.NÖÞ¬Hº‰ñ«¿t+^Œ»ÀÊ*¯Ûò¹j¼j1ú¿–ªü€Õ\®æêjî‘o`äÚVâ¨ÿ?cé4õìhw.û³C.iùïé2"®, âÎ02Χ$„˜VýKع©µ« õEØ­’…ˆ–p«YŸkµXÝåÒ\xâ¾ ¥L2ó9•³e½¦¢“I«ÿ|QoZ\øÀÎ#<¥èrñ…ÿU›Ác£Yx³ˆ"5Þ£/<6 ëÞι©^a ÿö=¬ÿ+avf»#3lªŒ±u†™€¬‘ª“óD_ƒ‡=ªÆ(B‚q=¢&ûm“lV¸ ûz@üû ?³ä¶ìÜA- ¡¥Êˆ4noiÿ­!tÕ¥/‚_Ù½««Nb¾íÏ ÚVÈx }‡4·õ¬q‡‰k¹7ðB§æ/Ûd£áÀÊO—žhŒz,†}@(Äè57-¨N´o”ß"Ö,µžàl)é7FŒã± ÖßÎ ?ÉÁ¹E¯waZêJ垃Tï˜Þ WäЮ¨®}Ð ÈÔnpLyî‹’K0´viÝ#×hmhJ9V®¸ámÎáÑ*VpqŽ¥A×\iñ§3€(è{yR@$r/¹Ï “ƒšåï|}Eï³ãEoH‹œuSEšd¡ãO'Æ…÷$éKµßåaÉVª`SD¬aÔ†&ƽéîZdXœÙŽi/}x¢ÍRÒ”b¹®´)8UXpb´ ðŒƒ¤·ðK°ÌÇ2|äF¡¤Ú–ÿžHYU'¸zÙߤ0.DÄÒéÒ|}„+Y·ˆàyˆK ßù;¦†Ï@ˆ½/„f=–_‡\“xV÷ÍäÙrÖõWFêܨ¦dú½n ÎíÁð©A\ÄjÔ”pp&ª‰:°«‘Œ–r:ýíÊ$V¡¨,üéæq°œãúÚyÔW¢ eû­¶èâÉ…ÂÅ&èJ40tý¤…€÷ð²ÁP5”«áš˜ùó«!ËMB–¨,Œt«6bÝU`#%Ü”ÊsÅ¿Žò4T^; ÖAz%KMèû.Õ jù>*{M'üúuMŸ‹ k,–Œ“qöt¨8\# óÁ4¹©ƒ½g" ,q;£¶[ê²nõ/zŸò¸ù˜îî* ‹7^y±Û ©½[dÆÁÈzô$;ûïã;äX›1Ï”30Þ¾cj_ˆ5ï¤ärÙ¢úþÆš¨ƒ³@WyYiR¯;H¬òø9Ú%ÌžÄH)!JüÁ1RºŒo4inf7dít×”P1‘õ+¿p?˜¨ýì§ìKƒø†îƒfcYØ·U òñk‹V™µi¦8?ÖöhÇÑ;“fó«Ÿ!ýR-L ¡À[(/ôîÊd[ÔV¡”õ–+^Â+£1¤>[½4m§bm3‡NÖkWO§yÎb8Û'ºZ¤Ý °¿)ƒÿÃÐ>Ôtü‰S$Ö±I·¡ÃŒôùs< —"{¨‘+ýä~C§ KÍbÙ~>&_®óºï(ðO£€ÖHBK™†)Rµ°±%\qÐ3íh›uv %ˆå2‚“ﺿ¸.W!¾Êÿ®Ï«åEy<óMž>QT£ à"°…Á©p˜‡^Y_›MüÝXÚ‚Þc1¤åïÙoÍ̆œëÇ–&žÞPùXüEB¸¨:? nÔå"w %6o\1ñ³wãkçaTå0ÚÞØ¯å$ÍiâÉüÊ­Í€®ú³ò%¾*zãxþÑ`9”žQ+-0ÍEš˜ŸÉ ˆ: +û=l hAox^Á{+°Ø'‚ÇÉZ+ÖGjÑJª¼÷*Æ[Ì×ôRÛ‰]qúsU ˆgH@\…oÁ– ¢hLŸ—è]¬…R¿š¸ ßÓì}-w©ÖJߎ'œãÛ]°†ƒô£Ž+å npãúÔt¥àÃå°\lÝ;©64@ã½1â$PÑ¥õÿ®cáÚ&+Y¸s…@ø‘+àrÆœ4­Þ÷˜xñ‘ Ž×¡Çé[ïú2ƒÅmŽƒˆ»ðJþ¼Œ=ÖÈ6ÙÃ’F0þ\xnùŸe2¼ø3 Nš^Ä.ìõªÊ<µ¯f_PeŠ_S«jG€¨Ú5フ~$¬žÝp‚(Šs …õÂ¥U ãeš§,ZZÌr¼è±»~^xÈGk5Nו’öÓfú¹´aI׺[ @¿Ã Ù‚ÔYH7¤ZÜJ;܎ר/MËÕôæØ¥ð¡šøZQ,rEÖ¸ýÇðú|Ú î¬iå€I“ÝNÇf]„ +aUi¤[6çó7#v”õJ,¶F×èÏ |¥A](5'Ü6«ò9hFz,±‰^Âæc¼V;4RÀd'G¯ñtx4†…·{?)â³G6Ææ[Œ‹ÿ8é,pò:X¬ýÿS£Tq‚ƒå&Œâë ÑQq.ÝPŽ$£‚W5C]ôH3‡ ™{ßÃE“<ÍaŒ¿aAÖlw5èñg8®–0›4»7¡V_”Ipëûïdrj v8}»]ÑKXýr?tNäóX¸´„^L;¥êYy¨Ê4%PüÓR8àyæ\Š~Ð9ªUc÷Ú'n߯o‘†r¦t Êu  ²Æ{ÛlŽ"´½uö8 –ûZ“•)“ÛöOü³°m;,|#H±˜š»lE¿DšÖ·ÅšlßüÔ-sëö´yï¼ý©¥½H,õn»¡©var¬ñfà*½ õx¦n=þ)匭â7™>ºþ£hÊàÀ1†ž­ò"š ‚Š3C °KGù’óuíF¦úsÈ}³ò ©\©Ï¬÷Ñ)l;Áèô‚HêE:O$ZÊ”Ïp™sðI&ÉÉŒ"WÕú¯¯¨çj™à&%U˜™ýs?§¶ù}uåôKGé³ÚhnÄÅhh n`v:0y¼Ë¸ó¡ù O÷խ͸@½xS?¯Ñubw¶¬+Ôqí•'$(±-=—œ˜ýNN~çÒŽ%½{ )܆wÑœzâ>AW‰kãT¥<؆y7íR`‘äN›%›=/`Ñ3jZöÇ“«Ú¯-ôe85פƒú<•ow&YoÍVÑu\ý $ùÂ}•œÙìæ¢+)ìvú©µ“ˆ)µu‹ÏëàT.£ò…0±¨Kgj¦ð¨wBÁ,K®æ®o<Òñð­{V8×e7$EⲂ³;¡I‚AÍ"€T?ÕP”nÓuuL| ñtšÆ è,–Îéøé}¸yø$s‹np‹%LAcÐSI d|r‹ºHRШ(Ö'+¶­Îú;¿ÎC‹›ù’^èu{™Úüày¯?ø†\sòºl0MÁnñ #b²1–d~Ñ‘Oƒ:¡×k#×? aƒZ n¡§Lš›q„x※FidH ‰‹‚J'ð¨l€oƒn½¶¹Ã¾Ž…æ9aWþE¹àc¶Ä»ZVüx ¦~ø©²ô‡b·Á3îá€r­ÆæÕ¨¨W®Ãmó¢O±4õËù ¤kuØ ¹ôá¼ÕÑ©ñÑèv¯Âýî7F&ð¦ƒ#¢&´{'˜Ñ¸XÎ _ú%”{]ßâèôo¼ä9+¾M×öX@'aËû$Ÿ£!﫬r¨Ã9JŒeægýàOH>gx8B¹ZÅ4‘eÄq9:t‚{ŸÐ{Þ¼Ö‹[ué4Ü4ˆÃ¤ÞN -¹ ”øD{à° Vu~À ©üªx|£¶¦TF”b& ¤ò,)áWÆ:‹KÜõcÑûzî($,]5bÈ[Åѯӊ‚üÂðeÁéCäqÇŒ®W=ð ê µ¼‘Ú»ÃWÂîVêÝÎu†X´é×ð@¤šbZXdÈ®txOá¡ðjJˆˆx¶óK#šØ[¯®¨¯r’è KÍ»§ŠˆÁ@DAX¶…ØýÓ³ˆc"!\<ÚèH§ ɦÉèR3Á•ñ½ íØ½m7ë¥tQAÌ @Éø9GþÔ¯ ºf\Þ~>œŒ—ü-ùdäN”îqÉ\•›U|kVqÓ_ˆm!¥“¾ñWoòç€vJš Ðx«×š€ŠÆèÌ((Á/m¡@ØÍê>ƒzÐ.³`2í µAo.Ì÷âª\€,=‡×2raÇÖЃ#8«ö‹àˆ„fI‰‘þ?/³‚é,5î9œ.˜7†Ò=³¬ËÑ•zHâUòlæÈxŽÙÓ²uf²Ï“2¨å8OŠóD°©­¹cÕî!;s¯kò7ø¸s’:íî_€¡cx2§ãìîñ©å‰œ @Ü¢zeÀ"ú:r¿Žr0 -[çØ‹ãF+ Bý ÃÖ~fîÖÔ„ |x+6«ÚÍJÜ’ñýP eµwœ¦)êËg¬šOÅ<äŠ}ªNqh¿2ñØÁi+¨É~, ‚…,@¤^‹@·ý“<œu4_>¦Br5ß5ØlMÇœ_ÌMù}yËROyé-RÞ ”Ђ»†ÏŸ5™g!t#Ô¨º¸…¿/óåJøøÃðÁD¨/«6b²LH ‘ìV–åã%¨ìåçö‹ŽKR!Ǽ˜[O_ç;i°«Ør[4!#µ¥cV¯ £ˆ‡íS:ôçQ%[ȰӨ¡ì ß–y±'äéÑ–ØxùÒ òRíßõG£4n¾ZÿçèÇI/ìúUH1€“¡!IZóÿ ö_­J)-f¡ðÔ¿[~ñP6Äd‡\¯9w€‹7J©$:› ¼½”µ÷ìÖ³›ÅÉFï÷Õ|gTþËék ¥7¡'»qkžäƒ ¾É†o«/áT#iÄ«°5ÚcÞ±²SÛ³)NØ­ÖüIepÄt¾½Ê#n¿cæ*Î/nŽÁ¤‰»cë~ÿÊÖȲ+IQ¹Ù(0xnX¹ŒeÚòüÛ«[Ð6ޑб¢u⃠ñŠt°fÚYðÛºD #©ÄµŠÙ}›Œ–Æ`3Sj¶ÜAõžÊõ‚>†ï[8Û5Å’dUÓ Ç!F¤EÚ$þé¡Um}[GÄvÐRÕT›ïÌ Äwa~&l?Áø9Vysî:QŸÀøáZqñÌQ+è’¿æyÅJV±#©âËÅ&3̉¹@ω—E¯.'Ó»› +ÜD±wnàCøû}À:}_5•öߘt÷I¼Æßx(œ™ãp÷ëD†Q®ÕòÍçVÓÞ,/húX[‡2â\ÏÌÖÃ0:¦ˆf>VƯtÕLçTؾïl<=’)×…Ú³¾Q7ÐoÖ;úP•Aòùl^àf!…éFë,º¼çOgWsR@› f¼%”„ã?W-SÐä½_:œäÒü/1¼³âÕÄ›q?XœXz[í„ßÀ´$™"lêwɆåöÛ.ßÎZWžTIý̲{]U¨ U$³µ°‹—Ê ²ƒVÿ5ÎAþõ|U®^ +¹ð'.Òw÷«.rû` ‡/djØy.²VA`…cŠÜ+ì–í5ÍæFÁz:œ¸w= ö=^+ßÖâŠÓî1AS|ˆnVÄ‘Ü÷13ºE™u<›^¤öýtZrŒ1³5*Ø„Å?’JªX"˜ÚPY†*u©¤Ÿ´fã’ãÖÙÿ]¤2l×RÓÛ™bŠ'Íš^]²íh8ýÈxÎ*u%Ò”çýÕÌ2(8ªÒðNßÅglžOª!ž>’RW/w§¡­-ãJrum¬A¼ XiA«Gʵ åÜž‹Fv¡§œw“øSÔ…ík|J¥peÐÇXFB¥”5•ÇœjY•q:BN@hX›ÏKnªæþÐD|qÍêÿ´(Ÿdj°|-Ò5\"•¬:ÙÙÄ~ £5Á 6]…âÄ›³œ}Þ S‹¬lô.Í6˜_l‚WçF÷8"»‚L®7=/¸dGVs±>µbŠGþTFÁù!"|ÐH°P[´'/¤í’ûŠR—·¤‡»=[=âåÍûEAß-Ì®©•cóÑÐúà UaÈÛ‹…›,‚Xе׽]9²üžlèõÖ!…Dž–ˆ`¡€dû^@OuP‘[9`Ö’znp¼s}Ë/´dI¢ô@”üר˟$žçåÙ¹Û£­}$§y6XÙ4Ç3~\¦ïH®:ÌXCC—¢§ñ‚cQ¯TS}Åâ•“°¸JÇÛ¨-Iiö­0Ù`éX$»óÁ¼ýÿWÜ€ø,Ÿá¼kÑWä°\võªN˜dL]› j¹>«LJM{Õµ÷„àÂ|ý„' u|&?6…1ÓTeôÕgOŸÚÿ§aŠød¹“¿leËÊR*ÂqPò‚È\¬ª<¢=;ýÔ>|I£&¦ô.‘f˜³&RÛ£/Fž¡Í†iŽÎö®¼*yzäY2¢³úkë#N”Sèö ¾‹©ôþÍ/0 U袚>ý–»',.u;S„=XýH"@¶&CëìBIzùLbf^‹¸cf&v`T·€Ý ¥Ý@Jƒ’`™qRÙowPâcôÚ”t ÈVÝ´R?5 –Sh"ƒ™Ë”“ m–_›&® j$ÔÖJ%(-<êS1„ÎϤâÝÈäN8ñd•C,_oõÿ/&‰1<0W’&߸¡¼DÇo a²ä¢5ª®¸däm¿*Ïå)ÆÜÈa%ÉN=o3¢Þø‡áý‚ńזÀXðz¶O‚S #4ÿÚ|í»ŽÓ÷ÁÙ²0\c\å>ç{,å¡ü#›LqNNቧí)·æ¬Y5;®X³Ö&ﯧjTÅn§œÊ«œž)§».k[é<ÌÚÊè¾|;‰9"J´ÏqÃHìy|Øð€sU‘ ÏoKï&øØ_u;'’åc™XqG¹R8Àyÿå6~cÜZ×"ƒ5 ²v†(%wÚoÔ7Uó–Œ[Gëµò"òÚX[_†f,Æn´‹w O¦zû€h6@7‚…ýÅ‘(ŠóÐjdœÛär‘N£ÅúcXÈÄ[Å Cv¶­Bôõœî›{Ž Ái J·ÐÏgE­tuŸ.Ù„*¼gŠš–*#éÈ ¤iÔq‹éXSÕ#O´0Á^ô†¦LH>pÝ\pYÌheÕˆÓ¦£²uö;ÓÀê®FY¸mÒç/錵ËH`É›éàÞtK‡ªüm!£m$›ˆÆ^:¬ØìÅΙdÏ=EàÿøyÈ’I¸ˆÊØçˆØuåŒ#ÝÀÒÚ¥-zQ€Ç“)®%…‚]jóŸÅ´Å –®|—ËFRˆÀBæ}|ñ ôjóÈ+àª,âš"×wÉ*õ'ez˜¯sÌŒ¯ÚÛ™öÚNµà^)a°ªç³ ÒR1o Ÿ[dë[*Ûïí\t!Ê™ý ’¬d;käYƒÌʤläg‰<&i*ÏÝ St¬ÜŒØ…)¬^ P©P(˜}¬È+@V?Ð:ü1#gÂýD”;$íÜ£IÝ¥w­FÿqjC#{ÖÊ$ÞÎݲ¤ gº&pzF¯ä;ï[=ya€ï]ã’;ÇÃö”wÈ$Ð=¶P'¶7’œc… þ,í«\§ß7ã4Ú£­;s¢ÚU;Ž˜ª dÇͰzïŸà¯¶¯[0š ,‰Ù€ÞÓ#!™k¬¶m½ó$pÖ´‘5ýÃEÝ2œMý ø¹Õ°@Ï——·1G˜"£¯Çy,;®ÈBÖú‚_õ~Ýë­dª2L§ ÇçVN¥skt.Ù] XÑ­µ3C¿E˜UzÉO€E„õŠì²þô–¶ôKÁÙþ“8úiòhÖÖЦ|ñ.崴·[Tuo»óý¸â³Ïð„yÞ #ÒÂñg½iOF}ú¡Xòš›»=ƒ<51¾–Ôê™DíÍ^Dé(3•¾þr(ÃÄ%¬”„£›L¦Ò„¾Y2ª=‘½zrÇÞ»‰©´Gµ¸6Ò2I‚lÄÁ—÷ÛöÌÕ |R’žc“=> ïÄhs ï JÌ?È£A Ž´¬'hû£CDZøÙüÄY·012 da¹Œ+PV¶Ql!nï–”‚9žtÕ¸ä(ÌýªÊÕ%ql„ø‡op­ÿúÚ6/©Dá~ƒÿ=£îÙkXÙlj…F},É´Ä$íAw‰˜í€Ï¾Ìg¨[C÷—B,ý¦Õ”°Xçp1Áƒ¾ÁZÄ\ƒ¤ Pá[Sû\ÏÅŒ¾&깯ŠõôWHy¸ç‡Âœ¿äß`º2·~m¡ ü³?.ѶÆxƒ¦§Š™ àð{牠ZÖÊŒ)¢{Š6¹ì8è$=ñ€áñ¯šrÇt/† ¡HØ«t¼™ÁgDªrîbŸÝ5h€ü/ÙIÿ)؈HLÛo¡ØúQ*zcÏ%6ÜA Þã~ü zƒÉ9ïñб®%Éó"1°G½æÐÉ«Ãô‘šqð‘ó ÓÉŠ+ÖÏwto/L£‘±ÕÄÄŒaKð¼ù†kvŽŠ¬RUá/x•kî4fé†-ãP.ü=™ N§!†7’HYcÃQ³[‡”è%H“]­_\ð?˜®’n¨‰}»ç‰É»°Ry {?£ $&¼À–Ö×Ñ©zHy¦ÔxªAÒâŽ[ Æ‘pÓŒ©Ÿ^HÞõŸÂm˜ˆy)Ms 0èÑ›…R² =ÇÓÊcŠOš6Žg¸ç‘£bè̼çóþˆr# jLg­~vÁ( ØqÏ@—³'¨3Hbî¥_(€äH &Ðs,‚Ê+€êɈ‘‰„{SP¯N£ ’SgU¤6‰Ò%qßZ^¬vŒ>ØÀ¸8Æ_ßt]äd‚fzÛòl‰A¨Û2¨Ý;>!ÐxO¥JãTsïwkÍåÁeiÿÍm.Î?Ǥ^‘ö¤f,ñÁÛªw¬¡ÙO\¸q¦3›Šr#NÏ¥UŠ5ÐVüMÊ+M-ÁXŸr€ê!2óÄpå`ý\—ÒÏh bçÓÐ9¦¡™ÏÃV8 *ðåB8©¸@Æ®+ ´Ã×’ÿ<>çzÀò72ríø^˜ÞÑÕ-²œÔ$ø~L×ÈìZ¨– sèbû¾ó&=tƇÛº kù<[rìç¨"QÈšÝêB6&Ð,ó“x“½o±-eÅ¢×1»o4 Ç&â¶îš(ös›O× L²9lý–ÃD•…÷ÞΊ}·¨=UOï¥ùú”·'WY½7ëÁƒdݧ²ô3½7ÓM”-FHŒ}»Ñ7Ígbh‰ù;”˜ R ±¤øŽL” jsNñ=OÀ®ÌƒðÞWI·‚=…ÉÙ°·Ú¼'n"úB‚qÁÿÖX̼0»)#x ëMÃIôßqÓ2á íPC#¦¾žÝݽ ¶' ë‹-Ì›1£Ý™ fŽL÷›²æ“wÛ<ß1÷ýñÆÍd8ÑÊØšOEuþSÒf*·”†MPàh<â‰.™˜®â<Œ“|è%è (Á¦é ôð+¾Ç}‹ÕÐ5â^yl¸R’ñ=³ÐÏû3%`Ò™ÏÜÊ,UL6êO“èaIfÒçéwå€Öå+€‰Ò‰ä”ÔÌÆ™«;<ÔY;üÞ·þ2¤öI‘[ôÝ«çˆà5rÜ»HþÄö;(¦bOcÐ8Úü*v/ˆKXY2‘õ÷JI¾òb\Ië„[ÕéOÞ²oþñ2¥4M5í -½ÔT·¤ß‚=Ü)³à‰ÉÄJÅ\R(˜Õ!üÔaÞÀôðÕ«ºyøÖÆM*q7+äŠHäL¾Ã#" ‘F’sH¶ÃÌXÓײ¥?tú}úØ„5½4h gÉcû¡C$<§ä~œZòÈÌ{ÓäGÀw v0ÏZtõ×á0Bkº‰ÞÒ£·B¸öxTY>q“$ã?œ.·OíWé3±K#ªÄ±§É$oZÉÂpõíÂXÔS¢œ´Õü¢²Ò$õ‡‰b>ÂYq³ö.¸tÑ{ÛF"‚fñÔÛÀêø2rn‚~»…ÙƒáµO|oÖì‡B<¨ ž)Øë{ÀèP©S6ÚÀ̶4mx…b/y_lùµ‚Ô‡·öÿ?™šŠMå#óƒ½×I;†ê-Àq‹ÆÅ·²tápŽPÑðZÞÊí§C @Çw ¶f¡Öø×•xôB ¼¶Âß›HYàè4”eƒ7_/÷EÊ@Ù·š ™wV†`í Â0?.ߣè)¶ L—Iß AB.A¿¦3·ùì$Ñ5Q¼ÿx~.=ªOõMïz·ÑÀ…OAè>ÒhÐIüày(³´®rqÕÒñ9ßäÃÁé5w,–ÑçPu•zƒéô`ûÛh£‹Hæ-›G´¦ÄßÁ7-|õçª<K8ˆ­°‘v² “BJ§cRh߇|ÃÈû6 Ôiè¨rUjÌK”X°ùþgs[d™Y«Ê¬a¦LÀ 비 ‰Vׂîvÿaî ú½Ÿî$¢šú¨%ÉlODhBot]jÄ^±ßÝüÆÝË vA„=îè,ÊUbwÀ^·ÄÿÈ9zØàÖ 4EH»µcgïÊfZ´b±Ḇ†(Iê8™f¤—jä°3y¶Qk ¸gú”Tn´Fe[í¬î±õU>:ŒèÉÐøB) £húmž(—ï½éç‡a©cANí~è ǘ¦Aò ¡N’œÁ©¿9î­8 mÁ{É–ûï‹iç÷Œ˜8Å­lFÜÝdhZ®Â-Ú×mà›¯Ü#Y[²ãuÿfõ²A'Â1ÌxÙ4ýïÑ@x£¬B  +×*§™irÊXô"®…kúrûÊÕoYQ# ö1$[`8êE‘GïÁùªjŸk¡öxq‘fÃsV_= $Ú¾‘^اŒÏÙΨØö1%hëËÎJK§ýZBÐ:ÆjEÆYÔ0~ë]TFõ@zYSˆFn0? 䊦|£Y«×¯Z¸FƘËV³Ož…Ýa0‘u~yL ±»Ò7å¥Díõ×bûÏ©ƒ"ØTM7"%:°Õs+m4ûE”80 úâ‡/“M¢N=™1ÒQM^–oÑ8 ˆ4 ª¹uî/(+~è?ǵ”&F‘¯oZq*IH®ù^gÖš!ª{‘FM% Þ ìÐÃZÙåS’>‘­^t¥#Îñõ é’íÊŨ¦¬J³x%ìÚ FZöÛ¡æÝ˜y¥Z1®áÇï‘M(S¨O—î*ûŽ`-2Ó€@lóñ’V2l @œ…;ûOKùßÛIpŒ&1¯ÐTZTµ¿¶_¶&ÖõQæˆ$¢Í"ö†F1UÄ>&Ç ÄØ•jÂöO‚»RlÅÂÀ‘Æ5ž±:`(ž¿¸?N·swÄL|ýC“0îé~É;ÿ®&â†ÌRÈ¿P¥ˆ’ˆž:â`åÈü;äÜûƒ?Ñ¥ azk—’ÓÏýb¯bXXô‘–)°è1-¢gâ¦<þ“3L³¾E…a”ïý@S²Õ<øQ!y§Ckå–¯‘éäÚéjš ö+`DŸÑ¶)RÔªJÛDà‘=ETs‹K~‚™³1KÖ¯<ôX9­¸f.´â3(*K/—¿·Ú‰Ž•÷t÷ŠÎo7M3Ýa,Ò5{ .ˆ²¾(!‘µ&ìÜ Üþ\µOÓ‘P‚'øeC,H3A“nwdj¼kc\¶=˜ÿHSzéˆz_i|,µ@ð©†cíÝ6EVÌìº|‰‚lËâsƒŒlËcÍ“õtz{ïkŸ*ãÌñ)+«™=¾‰Å@è2ð®-OæQ‡î®%0‚CQ®gÚ‚:¶–‰Ýt ”Ô^èVx‹J¼JŸÀan0Ò<Æß,Ó†LkhPH“QO˜ÜÑ@™&Ú’ìÇ€?mÈGn àpɇjNͳ`uÆObd¨Â+ít{oööì kG¢ êˆk»Ãç5G6êYñ ~ûÎÖzu3[.zòE;±•{<wÑ—gÐj&MD¿óÝ,—…aÜæUl´M-v&k½“¯·çÅpå—îgáÄ_ャ¶Çb‡¼Lï.ÄZ©—w€b‚eA¨¬_B3ÉOöñ®sIeåv îþ´¢¬±#twœªŠé<9ø×Vž’+Ñ·Š[!xqaÿ‡òít’fcÂ’5h|¾« "Äoˆ3¹\.}C_O0enÊÿS‹õË$$…‡cÀ¤›gD?‹¹Å>[¸ÈÐ]; UGf…¼JãŽÊ?d)J‹ÙyÐቕ$8_Œ_BUè–‡Ÿa{å Ë0–4P#¿ÿzêFÐóÆ\‹ÄÓ÷ÁvL60êúÈ)ÃvTnjbkê?æ6°{ß!ùäú»5eDQuÚ7^éJ7Ç.¿„E‘65¸—«°HyK¨Ï ¡c»UH޵T§g×÷0Î7›½ß)ŸïEl£C?å¿,TûR[  œÞ“¼Ú$7Sè ¯Ë‘l‡@ª#«íè²ú¿ý’Â];ö ]Egˆá;W0é©÷å V„é‚Y»'´²«;~3¯ILª~•ðÄ€E%QŒø—£üBÇ1èGO”2² ”uø ×G¸cm)Hh ­!3«]–¤ Ô½"®p#¶ÞðèJcð7¬>rîqÞ312=Z9àãÈŸ—æÊuÖ<«-;œÏÓfB Xbo9Qš24E&¹HÚ¤GW¤$,¼R([ú)D’YŸîa¯Ë¡uu¼d€Ñfwi†Ÿºâóÿ/í·²ôÍŸ°.c¢‰*ndN–Ù¦†?jÖĈE…@Òu}}¼"3Åå¨F¬ ¡í[å‰áwì%4” ¢…tN—%ø(°?nÈebÊIXiÍëóu…?Žû·KÚ“|¦-Ïxr5Ìš'Y3â i…`KŸá÷ó’43DýÎ}%iî6|Áøê[G-ä©Ú9ÄœÓ0K¾¼sÖ;rUÅ›‹xhÁx±üý»xŽ-5õ«­!Pˆ-…‹ŒÏ.aiàun3ÃzéåV4Í2²éx\óyGqÕ°ë¹…XÄ¢ùjO8MÌOu¦_„,qŸN¤°^oÑR¾Dy_Ð.è+®ûÈåéâŒÕ¶ëf$—j)Ûˆm£ñ|ïjhëºçVOî+¡¬åK¨@þù‰ÆÃМ ¢´Cg,éBtpíåÀ‘?6´}fvŠ+weQ×{ò*;—›èÔߢŠ}Ê|t.âyÉ¿Jj–ÒÒ`Ðg…¹`´É“–‹•‹£p¾ \„÷²[Œ 6 DWX‡nË´u»¾ªáOÁ¯º¤Žè smÐ' E4!äÌ)4gª³›­ì.¢«ËlÈÑFÃ.ý ÞùôK¬…'ºæ ð°Ò¬ÕÊ%¿ØÆ¸‹ÊtÝ[¬,œ»v¹ZXXÇÛÔ,=-`‘> -éH+0”!”qê°Í™ðhý•R\V&†Å#ÃnášÈÆÈ„|Úw²ÇÇj<Ä.ó—„Bxš…~iíijÛ ÏgìÊAE¢ŸAÆ*ŽÙl•.#öc©­ÒQ„ôl}ïãØñ?[Ϥ•‘2ÙÁë'$)¢÷kgž‡þ“(R»ÍÁ´ H×ú¢7‘öxnó+BD¨½„Á–Žg“¢MÜ[(i)7±§Hð¸ÕÓÈïÊÕ¤Ù« ¨/®Em¯±Ä>¤³)ܨZ/ï©· ¤AïD‹Ÿ_‹,P¬î2"À !rÿlP‚í Ô_\hxûî(øWWŽdZŸŸÓ’”©F9ŸÕ_Ñ’}̉ÿ—l‰‰D¦¶<4sœgèÞ¼Ñïc¦ÖÆgмß}Ö#Ü-ãјÒ×j5«=²°ºRÝÐú6»ò0}‹ã¬cƒˆ”ÿë ÌÊ^HãÁÕÈpȵ¾9Dâ½'r…qyvïן‡P #™vN¡&É Ê'Ö™ŠA.™¡)™ÐM¤8ã:“$µ¼‡žqNµ€Z ¥«L/Ij¸Œëï,Xrn µa ,1’½¿2`§\«,þ÷½j\GÅ7L¨*d,ð໸è¢Ê6ÓÚ·¿dæ‰ë=çél¿è{é r#3ïÿAóÑÝùf'÷ä…›áßÖ‰ô#·Œ}Ä*4_ð…Éã>odÃ¥¥^Æx†ýüèou]Ý€óÒ&†ÛÚ§^à£Á|’RÕ£­–õÍd[ÔËÚ“–ó@Py©ïìs›‹V¥Ÿl„>l{ó†ìzž)Ù8»ò Ú*Bn(=£îÙkXÑê`½9äÜ#ú½Ïê½;WPC\rÓ{0TYÃH VŒëÏmÌ’J-¢Ü[ç‚+ìÏé‚Âq `wcó•ähˆuˆŠx{¢óÚ!DûäR;¹‹¾¢û˪Çi§MÀó_ƒ†rÇ´Ñ!$,1³èh™sZ:©{_ÂÛ"„º˜Øiø¡¦ž›«Š:Ìë†ÛšädÈjt§5£áf6çµhµÏŸnŸæƒ ͡͡b äRãy¤]DVSçD?X6eô ‚q¥½£§üÙNØ5ðL̼º‘ÎÊß7Êgû7è÷ à³ eá3²5 fèKÔ×'|ˆÂŸæ^qv?5ÅJÄ@këe“ªìÿã'ñ©Ú64œ€¡<ãðÊýe‘R˜šü(áånP¾Bs ýÎ@íèþ ˆE­ m¸k®Ç„ùk¿´÷ ’Ò¯Wt”Þ°N£Zź¢õÜ¡m¸˜–å5‡‰Ü¿MÓÁf—P·õyÏ-³ïåÙ„ÏÁáè·ËQŽtD@m™×õ, WVÈ£ÖÙÂ{¬’+sH0+ü}é”ÔýNƒ¾ÛNƒ”‚È|Õ;}KïÈ;%1ßA‘:°»ZÌäñ: ùÈzƒÖ/?‚¼|§¾C óI+Š>"Ž(ö²B¢´á/í¥BÉã£lñ$)$õ¤T°¦E—u]~%C×l­ÝN;~™«6FMvÔxýˆ¼0OàL<%j `Ð:ió*sæéd ªU6Sµþ¤Ï^Á¥»¥'’ ¨¹ažvÀ;ý–Ýiø:“Õ2 9,0Ôã¾¶¬ãùH"Ìï° N9Zd3ïe"Eúð»–ÐMP“Ú5y“7rŒ–¨—¸73fà%þYaX¸G*&àŠ²Ÿ€DƒtjÅ”"‘äzW ¶›ë.ÆÍŽ¿×¹M(}ùæ R…{¬J¯«ŽÕù t`DŸ8U5‡SÈ‡Ö 7²ÒT0Ųý» @­,Wáèä%*ç#hê@\îŵٸ¬¢ýXù¡•’ˆÿµq2H|ÿØ&_š]ÒdN?aÔ[f8Êw*M˜¿¹C‹¤KÎ ¿û°Ûß‚ðꓟZ%±ÂPÜ.PFå§1Ò}¢~®¹zÑè„€_vªR£²_ÓÂ&Z%öÎä Îîk}˾× ÒÉ8™¹ªÃÿ] 7ù!Êù¼ ŸZA•6Z…7®ïe D^Qã½$*JtˆÊ¾Gœ—“`¹âêÚíxÊlËqqš´–f¥¾˜‹^„æ§*äéÛ‹m?¯dô˜y¦zŒ%K3r Y¬'NöS XJ4Ü=D:hQã(CƒZäÅãîNÌn½À„ü)»œ$éH1OýKØ%žý±¸•I#}⥴‚K,5‹°ÆéJÙ6Ðr»GËÐ˱Ð~X[ÖxÔîTëIx8Òüå|Ä2-A˜š¡D8Â{Y0d$0gn®`êÊ7n@Ù¹ÒZ-‚V¹ß{ÓW³ ÎIñ»fˆ1üZæÃˆAhõoF#f æu5¨ÌýÁ7ðs¢y‘°¶™É<TÿpnWŠk`5á²PkíÞ “¸§ûFUguR±·Ôºtpž”<‹ÛŒú ÌfR4Ùvj_'“1¯ì&‘ÍÖR| ‘„ý—L„N†Q”€e)„BzÝ5 N‘±}ŒsgqEa.CpT6‹ÎD»c†ÕwßV±Ô«alÎõïàŽáØšÆðîÙ©\œùüÅ\ b7öq³y@?•"ª¡E1_D{ H´}ÏFíõèáuÜÉ)H®í9q¤$—b¬‹’³Ñ¦ßµFYcA¼n¹øÊ^&ûPý1ú]Á~£n÷ò¨×žþ¸Y”ï`¤€¤Æn0 jl¬ñÄW·Q¨œü<Í|»ïà`xÎf1¹#ˆ$wø?½˜Y`PJûosef®SÌyüð?ñ<}V•( º°µ`¿|Ƹª‹øâ®~§ÂØ[‡½ 9z&‚áÖ‚4³[íã:ã9ú`Ç^å@ï²-»š‹¯D\+cM¿’y Š:Îß…¾9 Œ]f®Í¢@ys¹[¸r¢"•ɼxi”R÷öA-Ç´¾ãKV žiX85פƒú<{¬ÐÓ » vm&®¨W‰´QÊÆÁï™Ð¥†•¡æäÿON†ÆŸ™TG'ïS“Óÿ ð˜®[¨äøªqèôÿèV3JUÛa–´ƒ½ì¨ŠMÑQfÜ-•v¯g÷ãIz×ó\_xd>/¬AnÞ‡&f ‹ô3yþÅ‚»Î÷ÿþcr©±¸fðz©¦çêˆ>ªŠ›ùî!‰ûˆÎ7CEè^“oa Æ>‰I@𠼦¹sÄÉsynÈŸŠã5¾êú »l)ó­ë æúÏÙëÿáóšñŸtY€ÊN4=ŒCbV8¾8ÿ¿óÏ)U?àz}F{ÿzeÿŠÙ’MB)aãºÇÃðé=³ÝÙ\&<üU¹#®ú“Ãð¥5\Qc35´¿_€æ!óûf¨<†Î­lü.Ï`ƒÞkZèÙ½I¥+²Rêk–æ}Ôà|„`Ÿ}<_Þö–¢•·‰ TŽÝÙžœI®1®Ä½&S‘XgK)ú¨±¥¢ž3Ƴ}µBbÄ„à“™ÆñÂ/&LlbbÉp”Ý<«˜žõÜT##~×ã$-“Fy‡Ï®žíÂ:cçØI G¨*A÷‘1í_$ÄÊWÔ¿Š03;îV”QÊÿ+ò¢O÷7 ‚8Wƒ¦eÁ¡ñF÷}‡ ÿ"7î¾¶}J÷Ìn§W "YSÅÑä(ú’…òí(Ú09qËsͬcÉTXÖ™ôb]Zôó*pü°JƒÁÍ=î e£zµ°ëÏi6O jÌ5÷DO'Léþ0èÿËÌôr%ÂS­ÂYµúßL›Ffõ·|ÙC6Ù?3ì}Ëz•p« CìÇHö¹(À‘äfCiߨQøÀ{tŽã}È$Âí·[üwÀŽáò,ùîøc%³Üü|%ÝZÎ6¤C––:"C<‹–ìÞ jº÷ÜJtŒ3¢«ø”nK3—ç”C¤‰ô³¬A\ÄjÔ”pp&ªhSÚ©6”.š^ ë™—U²s{-³×>PÜÀ 5ª]K>²„©`ˆÓBn u‰4§%$?Ï_ËÆÅ¥Qç—}6”Æ–ÂØŸE Hö¨2i„e³Þ.ª*³Ž| ¢Ùþ|eߨ†o€´É¬Ãðâòݳên‚µEä@ƒNzÈ”ÿo 7>ÈîàÀ­C#”|óНýð±fÔ—)EÛ´ö©=yd¼Eÿ;^Æ~¨!éäì©‹D°œŸ;‚ §CP"ndP#„‡Í©ÑÒT)ÊL5* U£ŠO¼É[&í;"fÊ[yïI ¯ ¦×˜mç4ËŸI·-Ëäm\¼Èz[k)én?h›¹2LP ü¤Zp çÚƒX>bÇ’ÐÒÞrŽÚP™´ÀïßQ ŸêgæIªÆLCÔ:¤ÑMØ|—·MYèÙõý—ÜØ€¤zct‡ôÄZÑ$»Væ4­ÊDLn™Ž“/'à5 ¢Fo¸ûèý$_Ž`ÀtÆÁ%$ä‡ÙFú<`AZ ñRÓ<ÅÂhSH¨&ëÀÍ­çÎôúV#·3&Ê@ ô¦¥†¦IÓ”›‚<»<%zOŒ5wAÿðdŒ̉X*z™ŸÕÝ™Ò+K–ë \@É!…ó¼³›Ì몳WúÄØv!}……ù‚>:xS0äDw—Û(±>¬6Ò8’„ŽÕov‘Å騥;L=>=Cï" ²»IÁ©$–Vv=ZšrFFU£Òt¼òXT•ßÇ«ï…/ÅübaÕâ^FNˆ½ð¬ZÛ¤gºa]‡ë,T Î[œ-o€×î¬byIØ`ƒ¤Ûü4Ç€ˆ+j¥OÖfðAèrn .¬Qþ†â¬8ÿO#=}V,”¿uSu´§—¼Ð\-Ã0gÓÛs/òe®áæÜÁ£nú˜‰à…σVôRý6øõ&Ógê10öŽk½Ê6ê=fÂÙ—¬b`cE#š Ìe4÷1¾Æ_ôÏG"%t\ÐÓÓž”®ûµ<é¥ïS&„˜jtÀF>H±¨v‚Ž9؈MhðÊ·õ·­T#¶ä~ø|-¯ú¥t™’Úœ µ3‰8³AÌH@IÖvbµúÿ\lš¿}·X¹d[+õÐ5 ª)"ʉ9f|‡âl)á´Ñ¾Gµóv¸&دÁÐÞƒ]À»½¢†¿yå°c—ÁM;®ª¤–ÿ”ÜHt­ I¹€ÃÞs žs–ƒR»hìÉOŠá Áo{S‘’â_†ç¿'}(B"^±pkY¯ 1e/ºßNØAý^0S[,Ešƒd‰˜&eÀK “M Eµ$Él&Áì«´ûÝÌi`v5p»u S; UÇq¸5¹ÁÞ˜GÚË®µvÛ¦Tx‘‘`&io4hl@Ö– ¬4H »9kg¸NËé<öcÿ…š-›y‘Áå"$h@ߟ¿QPØgÁUü¼+*¸Áã.à½:ý§—ñ–öw킟\ˆÍÈwâW Ï —ö¸­ÐIÃ’Qþ©im‘Ê‘„i¼H‰m¼iÖ%]ÜÑî(3§6´Å¿ÊºíôéàxÒËU®os#%­ÏͯäŠc%ÁÔæˆÅ]õØäºÛ$¹0>ðýd«Æ‹’fÁHa…FŠ-† 7(ÐOÖøÉ>©ÀÚ[B%Áu[߇²èUCfžúÖó«Ô}}f|¯…Ä¥2ù‡»R\}P8¥–“AkgX¦HðèÚÙ}Ho±»÷¸;®&žd½û ]g*¤@ˆ›DÍmʡ˾\ÝÞ¾×r¤¹ÙÄé­\ÏÇÖ­Ârk u£0£äz3`µ6¯½b:Ï…äaiÔU^w`.^9{Ðf($ó\¸,©{ÉB£$*D´°umFÞRA CøI¶¶xÀl“Lb[´ã«¢w3‡ þtʼUœ‰†XÆó뿘Á´Åz¡EMø_ÀËÿ¿äÌØ ŒÚæ’Oà ÈDÏ0ñ~|;_——Ã’—бûݶÕÅ7B”E÷×ÚG/ðFp׿q–Æ£X†ã6îÁJ€iáj–‰.÷‚º¤ÉT›'ç]ìCJD–BÅÕ-—„íÈ%]³O1’ÊÂð‰à5 ®2ߦ:ØÜ¼ŸÏ“]À¼€Š©ëì’Ís¬½•B@ê©2ȹ€ò²Þ bØ!‹ã°•4A¡Ÿ¾ô`°ÐkôØLâÏò§zxÎ/ôëTfo·çhÊ]]\æÇ¦ ï Œ³Xüéõ0åùÓ„CÃZgÀf]çÙ©ç®Ä%:Î¥T0¥gÓ¬ØÇW¥q؇tÕ¼: !c{k9›fåײÈ|g[ŽÐ«cqôZ*Ë*zæ&E·Dl½ø´9íŽã7/÷Ñ~ââ´¼«Ä·Ž\osƒei>r ¿ÂAGÁÌ †äÒ¨G¾«‹å÷ªø¿bö#¥N£É€„^(hÇU•´œš¯eƒ»Î¾C›¤üã^5t¼Ý 'ÉZÉ?a 3Ä¥ùˆ^Ì ‘°ˆÖ93C–ÂVA7Á  ×Ô<¸/ƒ'É:09µ~´Wp¸Œ¨„¤Ì©!óÊUA³ì‹b‡ÖV´ùúeEjçm†öÛ6e¼Ø 5®þDÜÊõ.XQ ýf;?.НÚÔýº'Ó ÓòXÕ«temø¿rEÃNu9‘ÉD¡+Å) Âïɧ<8ÆþÙiw33ȾÙQQ¡;!ÐÕ×ÿ ÄÓº’±²üü+@’¢žddD‰©¦žŒ ²²`w ´hn!jF†8n{È@+ K…þ¼•>à0²ž:œ%8€nR—Z†u;¾ T3,®uú™Çšþ¸ÍŸrÛãɬÈŒ­U‹ÌÏÆ9ð Üî/3FW4=vÉA‚bƒysÆÈ±•„zB9gMÿR;;0”Û$²œ%Ûí¼©óÆdœ E"Ü;X*páRó"FåëbÑE¥’?‰Ï5'›ÐöÓ×RL¾e±—åâÙäž Û¦j¿² ¤ð °îq4Ò<ÏLè‘Lg–K†Í5i®Eý¢4cÓï±ýkØãߥHh^ÊÂÜ¢êVŒ²"²fåãXfŒ’qÌFÊþáÌÑ·@X'GîˆÈúB†,é%Á/© ¬¸pøä¼0z>A92CÜ Ü›‹æ{26ø1ôŒÔ\ípõ÷[q:¤ ¾ü“° °"ø§/(HHŽbžä1¨à«êõÔ$³÷fÖNÚÞ@«À³~è}5Ø ZpµÔ¡pu%ˆKÈ;PYbU‡oZ-ž¦…D.뢵1úS…?K)¿4åµOõÀV?«X§ÔÜ•dZ9&É™õ’C­uôâ|ˆÃÓ€Û8”Ñ&²“1¶§æÑÖø‰1Sè7¡SNhª=Í{+PõŽŸssyÞ¦ßø&VÜÌ|£eÝ]Ç~'Î £ô\ü¦„1·~i&Ø–Ñç8H‡õÍÒ–‡3+; Èjv®ñ‚âDY0¡FÉŠ¿™F¿«ËH*Ü£!nÞEvÛ÷lüÒü'|gÃf 1«¥{ÄöêÂ+œ›v:4„ªkw¨­"¨ —ŽpÛ»rŽ5Y¼£åß„Ök.¥i ¸â·ÀëŠY]AVî;hädo8U÷Ý«XÓóâÝö–ÈúÏìÒXÿáþåæXã #]R”Rfïqqj{æwü|/8ÊDµ6…È%ÅÖexz‹õŸðê¦]zBý+í‰ùœ•Á¦ÅÒÙ>WJC€€å‚,'þv1ÆûLþ‚É©ÌO݉%£¸£ò@%j3VrºÁéÅ—0LpYLhÁn²éÜ%‹köËžd°^)ff*F„èKj°¤X U;™Àgs¼ù.?A þÝR !ѳÕ"è:;7b®jœàÈ£Î@91Iñ»é NL¬Ñ=çr‹ù†US 3Ê6—­ÐSÅçdÞ2~eâ–o_`´9Ê V¦9«7!¥ù8 m[ûº´æu-ê—à*eM»دû Œ"®p›q5*ŠŠRPW¢œ)¸wO¥*F#7B­Ý{i‘‹¢ì ò²ŒŽuç³HÜ©¶ÏŒ[ãb»óØòs¼Ô”DOò³bœˆ•Üœî–Ôko4ÑqÃ\­»Ñ÷”:h“=Ú*lJ¦FàŒ©Ñù—ìï^µéBs®‹p³–þ³ 6ÜÑdÞØ“R~Êr\ð kbó½´xÍwxeÆhÓ–›[(òqØ÷ï{ã¬'ªÍG=A§°{àA½Ö^a¬J“5}ìÐ@çÕBȸA"¼«I'ƒËCÄ<êÏ7ÉÜ=yÁ Þ‘‡¡Tï›Îwú¸—„kwì¹öEîOßÇ› † YáGM}ÀMÇ4TP~+B¥ðu) bpàž¸$JÒ®¨­u +Voõ|.Ž–{æý»=—‰®}Ξá/§¶}Û#éÏ¿¾àãWr‰¡b(ĘÈ=VØUZH­,ï|æ;RiñdŸÂÈFÅS>ÂÞC<ÍbRî´¤ç8•zm%õE­…ÿtÄþ °ÒÀ_E¹æÎP|ÈôhI n6@ÄúÏ8–ËHÆ_Ë‹%b¨?†uù¹!Ôú˜{(Øs¯ &Û e,žÃËͰœ\ÂtS ³P½ûQA%$0ì”޹¹gþ'Œ?ÎÒ‘=HR1ó­}¡*øl0ý•_èÿ&Ë7°_وذdˆœˆ‡÷SãÛG6èÆß+ ÞgRàè531hèó]•žÁ£¤?›œ*Óã•—"“LlèÓ ‚ò›nÜÂàåó•ÀW ¨ºy´Ÿÿ‚An4BVO¤s$ùœ,o ùçÉ7Í;È¡­‘Aÿû› ŧ‹™S<‹hÙV º³Û#$½-øwXpëÿîëý{Xv]( úùûÀ‰€÷ ¶*Üw<ÓÿN¿ ¡K¹ºJƒ½Ù^ ˜$ 6ÒȸŸ:Êk¨y˜#ê|\Ð,ôÇžôo!æ!˜³å‘fO íZ‰t3× ÎÞK G{Æ×žˆÒ{LÀ©^³Ê·*i•¶ÉiºDÝœ×ÿž%a¦úwÞv÷ú^LÊÉbd×t@ù—;îÈ“†2q[‡çªõg$]$¦¿.è9<(©Æ¦ñ3…X7V“¦ö&WuA¼‚LPœMùÿ‰èxŽTû[þDµÆ>ä# mŠŠe»£ÁF‚.ãQãý€ø 6âˆÚLÖÒ¡ê!nyåa¬I(6Y™•ÀÆ, EýCcÆqÛÃ4˜ Ÿê výp =© .lZ.̃“ˆ°…3I§•AÓÛ¦JìR  ÒR߇ÈÉ3¶ F*n‘nÔ~!Ñ3BÏëÆØ?ú|äÞoiŽ0>E¾úíù5õO¢¯ñCÙ˜hXnK,îœöú×lo»‚SË<Á¯æ¯ü¼í†›Ë%2b­ 2Éfœ¢IÑ^ŒN§c%FàhK󄑪Áš»>¨hxßIٞ¯XÄh©1ƒ†Ü¼žb'‘Ø`˜ï âÕ6¯‡U&kÔï_b~ÕLî“4‚¹Ø$xm‡oý³aç<%Cö¹M;§ƒ >±®ãêÙÎÑUîî%W,‹ßÃ$êpôQ£+8ñÓ”ÂicdÃ{t4NýY&ÃÃ3 ð"ñßßË6;}Ýds«INd 7iDyuÿ£¾°hôä‚ý\A¹vCXý~¼O‹Ó€ß†ûmŽt Ü“B»r¦–~á’° Æ)ÄœnY’§XòT:þîc–1»þÖ<Ü>i®v»Í^J-r¾F-L“s¥µ-ßð— h âà]† ïMÄ5R2"h äMùíø éæ'Mw´áu«$ÊAhï÷ž4Š0ÛZ—ï<µ¹1N^FMó*Áv )úQÑ xØ.åE`ˆÁ,IEJu²*éödª,ÿÿ¤¥ždLÈÒ ÿE†»F £CÁÅíUA濪@fµ^M¢ø0cÞ-vìw„Y–ce#gšSjíÆãUrÎÏ0»Ô_¬²ÆIJ&;š;Ôú—ÄÜ ¤gj/¢ŽEWpAÇd×™˜ËÜOB˜v­d ^Ý”g7páèþùíã¸è]/ lô›±—Àˆž2]8u=;·¬,¦²aç"BH„aŽ¡ }¤ÇŽix²ŸI ôWõÙ.2ï׉Æg—|ëJWèšÎS²EŶÌjͳIÕùK»}î~JhºÃ+:\ňS7ë?ŒëBZâÈwb­žkóV ¸™e0o¾Þ×3¬£ÂóÂÑgu¼BNûø"9’]—4OERRúšS7¬½ ޏšºö“Ë•b;š9…ß}yãrÐE\3~?Úê¦ÿ¤ñˆ†ŽTÑ[Os¼®èPëdÆ]§N±r-B Òd•|”z8DËäŽm󯣟܆g¤ÊÅá=S{¦À¿U7sÑ,¬qõA˜\‰/ðœ"¥©÷"ˈÕÎVq*3pì<þÙ\÷]—zX™“JëƒT$`ÿyY…ôóʇ‹!¥ùH´—äï«Ö‘˜ãŽ¢9 »I-) ¢ܶ ¿àInÝDçD·žöYV‡¨RŠÜ#|·Æ)Gò,uû ¦VI×ðÝpD?µ…í» *sÖ4Kº„šÙóFÆQõìæsJ:Ø"H!“wP ծ娱Ö鑟¹ÌëùÝ32p°»Ã^ú{…—ˆìwðÅdŸð šÕnïŽxŸºbhPüÀ°¹«§{f1Y€\ %Îa<ôD‡;DºŽ‚®ÎýÃÁ¢í ŒÝZ•µIFéX RÉv#Î¥Üb(è^¤ÿÚH?zÜÔ½FÅœÒy¡ø®…¯8O,:Ú•ï6ÍåG °“©°;Q['ê×gº¾1ÍCU¡ÀÅ~*R¦°ws°zݦ3Daë=²–XŠÔ[²?Žô&·ÕmC˜ë5!‰ÞÊ8þ1Ûp!Æf~vñC hÓVޝSÊ™/Œ¿Ç°H°SaɈö«ñæf¾•ÁßÓ]»˜2 O%¼¯iøCr ¥x "Gé±è‰W^°LÉR5‡e» *ݦϻÉ4ËLÑ]ªðZ>üÞÀ2Áu#Ì/ËGáì#'ì…©$S>Š"5ï€íÛàX3ôd6³á~lÔüZRBXôˆùOyuµ ä)Šnî,ø#Bcî3,ë [B‹PŽ/P&¼ÜF˜‰v[·4ÒçVz()'Þæc»Ž~ÏXáHI|.8öP©HgœO¢o~«¼]ì—ؘ ãÐ, n[߃Uò¼ W”OÙ´§Æ<Œ~ 4èð@ÈxÅÒý>m+Lâ’iÎŽ^ë5‚ YQ›¶Bì«(õ 2·º[Á4xÊ„>EÜ&AW'›ÀwnÊ-Ϻ«ÕêŸmÜ(±Ëw[Ö gÓ¡e*÷€()4ÚîoCýצ!$°%F¡_ÙYÌ^i®¯E¯F„úìýù·z„Xq|ÒÅ!Û¨¹Ð ‰÷uñj»󉸽ӘRU·Ãa}è÷-8ö¶óMóTB°ð_£îŒý°¿‘mzðì™FaÔ² ÇYa½~º”82Þa€8-UÙ¾ß _#Œ.<÷«U‚³¨yÙç6OŸh¹¨‰>QÕÌžgúuÕ¿é°[x½“y’àŒ¥NrjÒ² »kƒ+‚–6‡×?¡')f™„ŽHd7Ñ•aŽõË•Sâ èn‡l2ýQá;6$%‡jÓX‡?82ƒâê¨Kw=>„ù­+EÿXÇ ´Ú·<)e·½˜¾Z½Ïÿ£~Ÿh÷®€^x—Óàä6ì|Óˆú\"¬'Ǻ_gd:®,\D–'ô¶™È+Ó•‹ó7u±$RDÞª0TV N¦Ùb~=8cƒ ¿ ÅÀ Ay·£ÖOk¡øµvìûLÅ“±€¿`ŒéìHÊO`¤þçŠ÷9çóØâlÛó4ýB_€ác8Äè‡$Ýß‹E¬LÛÝ8‰ñý¤®y2îuYì—$¨¾0/le†è0¯ÀºÀÿ "%ŒÂ@(Y¼ÕäHÅÕa1UüDx8'åÔ(ŸÏhªiíz÷~Ÿ*CøEyA‰âB*ÂN ¥4c~ëWâ`…¡T…HgÚv3È%Dþ­ˆwo‘õKvôó(Õ˜W@Ë[xÞ`iûýHÛs:Ø(oÙÎy¾JÅÂú3ø°Äš”'ž"?œÆ¨;âgqxª b¨zî)Lú7ªá¨Z»æ/o/‘ëó±ýèVØWÀs[¶ý"Ä$§[kâõsƳSá~±š‰Ž ün{W ?n‡ a+ ¿…¥¥Ê~íц6þØ›âý±œ“5wŽŠ˜Þö©ªÏ_ãâCx§¢ŸK8ZHÄY¼äqÖún1=àèñ4;Þ:_ig§ÃYdzDƒGÛ‡lD·Ó߆1Ò2’©Ç…¼‹ô4*I(D¼õ^Ù,3Ò±=”bM C¼´ªL+ug‡|ë¯Ãð|ÚUò׳MŽ;ó³8E6mZ+9Ì€ ›Ü¿ôÏüfÖžd3Ôeà‘E˜™ã$¡mPN‹sbC«¤¢Ѐ b,3œëÔaÁlWÌ9z|¤ÏÀŸÊ•ñPnê)é1+Y8…#yç±ú4"ºZ-åI CAɲª¥»ZŶ:5Âï¨ßZàMyôèê»Âpe7Î3@˜_ ý† Û|vMãe55—ÊÔW §ÈC*ǧÖ_§D°˜Œa¬¬êÓltÇ”çܳ® sâÙ¨ÒgX³—:;*ô§n“A‹y‡j±ëòš@íÚÁÔÚ!üßmÃ9zöH+B½¶9òËŠöŸ¯B±/®ìöî=”Y¦Öêd"$N.|¡¥~‹z—¤Yw‰ù?›Ê¿³~ÿ δ€°,^µS®/€þXÎö ^ŒG~]î.Ü{N„±•~¨Ë«GÚ§ìQÕæýY´ˆãXçÔLìƒÆ‚iQ´AV˜Ø,";ÁJ[P‘˜_”¶+º!—i=†Ù|ç sDFÅK¡³v²ç î£$¯buÓ'å­5I†öìS$”Wƒåô“¾Óª“b³æÿS"éëËÊÆ‡Póé{ó X$†Ð¿íË3½ÞB8°“žÓÔ…®¥dN\qIÑ"Ka”Ûeðàš]Ö`ι–‹m G}ªåó^'Ñ|7bzª‚º‘!SÆë]·™¯@ú‹ (> Gª-½Îª°2@Äq斋Ƴÿ:¥ð:ç‹ X”<Å]».i|Š*€¤»þ ÷C'Â5øµÅ*>ÍA÷”ÄLRvFŒTù¡ÕJPÇéèÕÆ„¼Tfî¼ËN9þô¢JÓ%ö…Ž7#ÑÓÆ$•#Ì`lSB(¿Gâ­£Òv@ab’—àÂeÙ_aŒyðÀ÷†›— ½~…:îö]kÕ˜ 6÷¹=îi?öíu”ˆJïDƧk@’!õ ºÇsò×&uñð_ör¤üϼeŸ¹11Œ°/hYxΗàÅÀïx qa$É›ùçà솂ʚ15~‰ü­£–Á?]òÁL>3”y¥<¬ü N,dÑÓœs{²L&$>Ö'q¹dôx[a«ækÉ;³t ì…¹è6É;€Q~&:7.f¹ ë­W•±írÞhS+t¢E¯‰K¹M§¯­hS‹½äßK¡ÚùbÏê>U7÷Nø_ôôÑJÒϾ}è ÅyG ¨^*ÕÐoãÐïU†4/ ^,Ò½Zîò+4K&zÍPËpZI»yuü!?Ô®áGô(ÒÎÚÛ5‹ö¼QFîð„•¥ÀæÈ¿±¨kç‰O„¡vp܆›­Á2%¸ɶÐdQ6sûSƒ+ZFhCöAòjö8Dý|ÏC¨0™3c>BÓùéûxt¯ŽîØ"g*K98[æå_rgšá§ïÄZÁdè€Ê”Ú¬[R[JVkÔ\É©E‹u™¦AnÃÉÂ3˜Ð1ˆŽóÔ©>rC”% S5ìM¿Yfž¡ÿa÷W~á\ôn´¨B›9ó61 Ÿ#žX·G¯Ãl—1µ¿ Þa|‡+ÅI±?Óà×­OЄ–?.sq[•¸p ¬zõ—¾%×<À¯r¾6ÖÜÖÈþîP¯Æ6uù‡Ø¿]Ø\b¢±5ʈ#Î(’ws9ý˜Õ“~¡_Lt„_š,‹b=‹>uç*W奕®‹–#~ÝEOà˜åÄQ;Dx·Â\ë„Û#ªÆ³Ùet„¿g²RHì®M{‹€Ôþ›îw®_6MÐéë“÷2B``©&ÐG+Ú=ÿÛ¯±€/¿!ïå[—UŸ±)ÌË›JîI§™Š§¡hçÏÁ2xЩ‘rßD+7ÙþŒïÐ/ìäUnå|ò‘°fzqh€™<þ³ªøhX§ðqÈÄ1‚/¼0 UŸbj`Ëú"Î*Oˆù˜ ­¿‹ 6C(= ôƒ{3šyà‘zõøwEç}« À8tM©È»ók`Ì’©˜›ßwIŒˆ¦Ä"4æór-íB:vå»F<ßX+@â’ª±ðÄI36­ô·ê·pâ¦*cïf&ÑUèe ?Ô­Û9! EåÖrïöv¾´È¡ óBH1©Ó4¨#ŸÉ§'ú“:³DªFr¸©–?öÕ¿>[¥Ðß÷t*1Ç—šDo,•)æ²!yb œwò  ö9JÙ ›Ò–íïºÏW'|êÄåh5-$ÂÀ8IGr²d´užH¬ë=þ„õcöLá¦;Ô´Å£¹TÕ'#í;š#ÚœõN¼ÂJ‘Ó¯GDh´#UMÙg¤²á9ÿ ¼ò(Ç-ENàmʃ¾kí‰*°Ç”?¾j÷ßJNPIm±EWÏ‚4̧´¤&]v‘Ä ÌVË)ŒÓì4fN(L=hÀëÃ]“'Rô6=ñx ¹Ë¨Ê¦ñº€°óÁb9LÈå,´É„|Úw²ÇÇjmÿ’¼½U=á¹jŽªÕï3˜Ý»ýUÁØ®¦°Û¬§E‡£À‘L®ÃWŠ¢÷|ìtÇØÔˆR-‚ °Gôp6ÓÆ»ÁÒ÷>d‚‰‹îˆ-ÄÔôzêÌ ±A²úç;êEž’%áóËúo½Á±Lp7Ãv3Ð$%VL›%ÖôØ8Ögëú-$|V5-âÃÑ> G¯ï¬aó†_ýu!¢]Öž7.cÆ™b‘ÍNõ†ÁçÏI§ôÈ¡úO;“;6Ð}®˜½g^¦ø÷$a2x# S§å>>GÙgyêMÍsn/I\ù™{·NDšŠK>7Nû\ý9}Ïtô>ó1hqÒÕ{%ÿüK¾ê'ÊËšXN¾k÷ŠñZÚEHºß-*oª°¡é ÷©È UQ›2'¿ ,Ih£«’Èñür¸"ñ¤¶tÆm) À<èk[&)ÉRÕ¬¢rŽ‹x„ ²:Ûíf!õ˜¦rœÄ³øøQ’¼áн²érJ5ü/fl9š>O ÄXû.‹ÄZH êpËe¥ÎxÝn’ö%Rn6i­{ »þµÍÄk—Ôk9ˆOPB;×mЇ™ccž/­ýqWoåÔ)ôÖ¡É廨É-vÿ5Ù.0÷©åŽúÆn`Þ uIp`ü0:)øW!ö{„««Š ðÜmB˜Ú­¿249àÚGRð]ǹ;ýHÆ=Ý¿3íµTÿ¾,j´Âɽ‚Žð"­øj´y:XÇq8Âý¡,0†'êI,Š£»ÿüÄ«°:ÔcPÇ]¬”á8Mñõõõb‡ÜÝêÿ+ÏQ$­èßerÊ œMÚd~“\€Ïh†7‡R¨í˜Y$Ô効ó¡?uy£è .@˜oI\'ŽjtM-Âμ”ÉÇßþ¼À)ºïûh{…ßú´3ò`Úÿ?dÏMkW¤£˜¨@¹…—\wИ‰Ë‚ïZIÅCôßJ3`DLöà —–!û¨P:Þ¢‰»ð:ÝÝ^ÔJ5™}­¹ta½=ò[”-cᣠƒØ˜ì)ÕzÌ}îyãë+Ž×J3×÷—ˆ&Ô“ ?¼Ùºy`.<Ó´ø…ÉXVŸ ð+R罟œ§àúÝÝõ¶¹gÙké#(‚–©te;&Tf´g—+pûpHonGsú¨#=…ð» + Khbu|ã½—Ó1¸V8;x + é,L=Ãée³.v¤<]JAärÄ9òÉx(*DDCd–åÑNFj‹\ë'FÉ«Û(E¡û7ù}>;6•1ãÆ¥©+Т·Ò,€æ7¸z#+á´•ñÒ&û¸GWµºGÈÊX¹uÅ. ¯üšv„QwÀî“Íïªþªôuãt†[—ÁOlWRÍÏ¥áô`#UÁ(n(Ç*>§CTj³äRKÅ)ý ªFáñSTÎv%mÕµQoBãöLÚ+Ó’ü_¯@J—¤]CÝ¾Õø£ÄWš’Û+&DÁÑk±ãÛ±•uMgÝâ¿â·ªRš"u°w/KÎq‡Eƒ“à2O®„o÷/”] žÑ1Od²Ï ýz÷j²Pe%O« }MgÅû kðâÀ1ýÄÛ¢¥å(9"À>ï Åà~•h‰h⟟¦šoÖPÊY¹rÐX(v¨Ì43=õäcmf±È‰w35RÛx¶Ò5–‹³f å%iJ`Nˆô½h ¾3‹CÑ—:%X3XÄÌ¢‹s¨ñ½µ‚!0 ÐZà©Û>ô9mf"ê¢a×uBñ{ˆJ[-~…x·®&é/ 0 ø¹ÜÕSfïdÅ\bN×~YmF%rêdyvHÜñ²]iqús{:ž;…é¶*q/,=ë‘«=¿»rvVæÁõC—4³œµ>8 ê* ÐG~}ÏMXh;­‰)Ó´?á3-¸«h1 Plȱ |Oät·2É®›Áå›Ô4hÅö‹†ô€7ÎmØ€oKk;`Üû¡V’ÚaX…!Ø«þÝ|¹jITÀȬt<¹ÚÛûnéŽ^ÎÓý¢o|‹Õdt³äÂù<2è¹"p‹ÆVÄÄÜ1çê4FG¦ÁT÷Mþ%ŠTc:]“F+s…¶=¸¿ª£Ýôi‚HumÙk Ò]†øEUEó—øÎui п÷ó‹FŸÉ`úÉ£(îÖû*Vô¹ÅÕæ(A½lTŸcêZS´Ž<½Ÿž&© Jë@-Ö< ߨ“Öà óí°3ÌŸ…xè i¬:ÎRؾ£¶âÕ‰ãr&ÍÎŒH3Iso^q:hæ÷2PÒ·M,´&ôþ¢\‰9‘]ýsŒ¡Åjp¡Ã½qƒRÅͺ¤÷Ý”¾{†z\fâ*cQÏU®P¼Ñ ƒ1^ÛüUµÐ{{!øæqôº†­ÜŒK*1kw\2R‘îf èxÏ» êrAyG;c7iõzdéÁÕœ ¼V+lD»ž%ý˜¥'’Æ¢N.ŽvIÉŽùCìO˜óæn_Rráp;xÁÁh’9®Ö¬êT[ím><4: îÆGÃg¼°l¡ §¦PŸã'(ØÇœôÊ7ÈĤ@–—ê¡U¹+ݥŕ=é…«.Jëüºnú—Ëm€Rs®<˜¾ú‰wV³˜ Ù÷ûµ?ŒÏu \€¿ÝwvšäAŒ¦žÀÀ õ€ø-y]T»9+c¯ÖØÛaæ0ùêî‘î¯- (zÀJÙ…nûr\rü–Dr:9±¡p'iD(S`½"—W €UÒ>|Õ_$Yµ¾CIwGÀüv[ºŸog‚zÖ˜ â2ö§^¨É‹›“ð²ŒÜÿ²Ï×öÇ)ÇǧSkÆT*ÎgìAÆcj‚-+Ó¨[záu¶ C+³D9±,UÈa§/€áµÅúËxüâÄ‚†QèQÙ:ÂL RËøóTÒcŶëMùøÈ>f¢áÈ<¥²íèðÊ÷÷0•‰§ØÞƒ;ŠU¡–ž'•ªM¸?ôè°Vôbü˜3!…ózýýžVñé¥DÃjÝh ¦¢Þƒvxgž%·QQÇl'sŒ‡4s‚§Õ ¼ó$qqiØR× P kƒú|ºýOg<-®Û‘Í«EÊ÷”ù2H4³Ä°ôéÛz<«›0JC¢d2¹ðãŽÊ&öPq‚¸MB–ûYµYPo­L­ç–5Ä•}Ÿ"1ƒ!› %©cd#ÍzBHuk>#f¼/ƒ‰RP'†ë§l¹yv±$8ßéßxŒÀkÊ>­"ÃdZ±òÑçK\íÓ]’:‡3¾Çš·MßC ¨RÜ@ÚÁÒ2WW>á2=[‹Ã|Ò¤|ÀLúW1ŸiˆÛHš–éÞùËã! jí-@t…À3«Â±ãw6J®ÂÃfr‡¤¢\D˜fÚî(¶±HCGðȽ¬ñÑ~‹žSùV€àFuQŒ:ƒ‚âT{—–öê•«FØ£Vq"Ê%¿&N ;åéͲ¨A`*V$31a3Ýä-C7¬.~¢+¦Š˜¡£-´Ž´íób‹Ç5xAK›G‹‰ˆ¨å=§2Œ‰:SÖy-¿ÐÅ î¥1}1UÆSÊŠpbù ™Ï-èËç4ŠÛ€Ý$Ë2(õsôœøoÂW2dsÙ çi ‡Š˜$÷YqQ±ÔmPª'sŸ¥—óЦøU¬˜u=OM»°s{K›%» 7;˜Q¥"s¥®3=Ãhÿü5ÿC‘ÓºÇ2‘ÜqÍ °Ê»¬ 'eÔL5³°0*’ÏOT&`ùBãÕʳÎ[‚©Ñ<=¦|ÖTÊV,­¿"UY»­pÑÊHã©ÖÜÑ€§-êÄG²AdJÛñò‘~9— u³ÛÑŒt… â16UÏOõÆGQÉ+Î8:¼EÕ(=wËÒ‰§/Ç[÷Žͨ„S·ÇÂØä:/ñ?‚¿]N!¡\C‹Q1$†bwÃfÄ=’á–Vç4^Æ­0K¾ˆlŒë$~5jl3¼Oø½¥ºPþÁ£Îä8x÷¿ì·KSpÅàX§Ý‘@ó9bðX¶èì«ÊLµ­XÐ}Òä¥e¶•  ù•;JŸëºZ§1ÚÃ~ 7Š“/بMLSÚôªÜHüÜÉÐk0:=¦Ÿ{þEÊÚ°ˆyfÁB yixÅT9½þßùÒm¢\¬Œ#q g¦ÀîÔÅÖ¨M]ÈóëóÐÄFÿ\š;nZoØÃJ‹^ø^&u2ÌÌ‘£æ_`Ï´opÑ@9H võrœx³^gÚß6kà5R‰ˆE ¶(cWàÛDÖ±£ìâ) ¡´ñ|BpU_˜/`:{Ó(•6U,žw'â—ž3Ä\>Düd½}oãV|wï€!{fÇ%³Þ6@tïŽ`:°ë ¾S—²X¯*ÖN)Ë¢t†;æFW‰‰hWÍÚÊàT‹t4j†÷7Ž&…"¨‡Ìœd6áj=ŽWV»ÕZnÿÛÖv';<ÙrNç†<4 @ÔZÒ üÙ¢XŠ¡{_oöÕ`ÝòÜtº(/_²Áãš«jonÒmÜ©@‡bÐZ2'¡ÄÝR+—CÞ±Ñ‡Éø°Äl/%'tÙH0Eѳ·Íûb!IÓÙËwÅ·¹i˜TÚ&V#D6ÔA¶—Œp°àNèï^šÇDÀhÚ̱tNm®C$eóU¸²1Ùm‰[|vªïù©ËYê§nLãŒOh¤&ØV–‡?( ûgÌ<&’'²~âýCç&†}iíƒ1»¨ŠKÈFÊþ-žXu8½)DŒ“–›Õ|7Ô¬\üuyÃ;»ù¢œÃŠÆ)-ÔRñ"­çgå1{2¯q=](¸È䉘ãYºµšŒÒC bóg›úÍ™%po›d;ö67ÃÌüÌÂ;ï]Ñ™× ·í˜Q8øâyOJ½óg8ÙJ½O·”8>\0ceÈQL6Íoé¡Òm=]éñðë£<(ÖtžX™­ ¥$NÉù,›÷•î U?´™$Ý<£P»zβÍÈDÖ¯X?\ŲäºÉrMºÊbfM”‰ÂáóY¬‹ãAÁ‡…î‚¶»ø°Åó%$wo Я>7q'R9ÅMDËä»áFì4›™òèR¯¹ú_d|®|øÀñ<rVµ³·žâ^rb~#Sy$êe˜~~ùÁ.ĺNú¶qû« ‘º0Ê\hPk`Ĩ›®5J8¯…E¸ÖÊ-3Ä4Š[Ç!d[#ËpÂj ë^{C¹~ëCäè2fî‘=VšƒB~~v‘É8:ý#4ҧ—rÅ="âZÒ¢¥³‡TNhþLÄ÷§ÆÉL@:‰CÃCëòÔüù’£¹ÑtËL¿6þ,Ç»¨Åµs¸¨jˆ À¾¬¹òk]s’䡎÷ûˆ\Ù>ƒ7¶.¹ úÎkcìëx×–œ-¶7Aù‚ìÏ­xçÝWjžlÐÆ)é0++h¯n7søê¶8ƒÔYù_KµXnÛÔ6ó[%ÑÎr5ï·4…îsç©ÄÏÃU§«RôšÁz„à0-Ô'v‰]¥ò2ªÌ¨ÝÈ“í^•c¦ÊB¦Rߪ^äþéùOûü£îݼrʵúqñÚ‘Ò™¬š¤IÒq€úßÜCE€¼< ¾[A$I6ôßóR+ŸË´üH—m‚fîØ†9Ó‰ø™©9‡¾C\oä¶ ÂhÆ5`𧉲?à'0¿…«s¼ô³ò‘MKƒ´çÜæb¨ÖîËÍœ ÜÁî¹GR”^öÑRq —ß" ã¬k …BÏ«eU8U0ûp¨‘§ž©®—3}üB{Mo&½mP åXºû»@‘P£óe÷ ªÝƹ¨Y1á‘Úv¹°m©e]µhÛï¡àÚ$9åýH«PýcÖ³³ÞŠîÄD¶ó-)háðrŒLÿŸÉ‚Ù²”š w©öoƒõ§x^ xì¥Z#'‚¶Ðmn!±&>oœ9äî_™¿Dg)òi§—Ò£.#ËUùE‚w±!'P°#S‚¿aF½³-¦ªMÉH7Q%ö|_Ôé·Eðä+WáKÏœ^‚‹M™¬ÑL‚n%ç)y&“õÖc› Ž/?ÙÔˆjò$Õw/Øæ_n¤S "˼‚/g¶¢~§D]ü,ÄÿÑ;¦‹ŽN*oŠË&“r:0$nC^qºh2_@©¸È :õw¥Â j¹ÊšV0`ëƒ (0à݇…@Gó•Y)ÄýϪfÖyŒm ®cÎhKžÔ³f|E^Îlyü­Î\Nû'°–±*ã>P2$VÏ?°'l±ž  ©Éƒ“$ÍX q…ੇKCúrT>4͇´jžm.wSF¶¤Œ&½#›mWf±ah3*ï<»Ûò ia1Í@”‘úoD/‹»¤ËP,´ÄƒÕnu¶”g›š<©gŒ|5ŒY)âÐqxåƒü©ùÍ'Cù5®ÎŽ˜Yj]˜1•éiàÈd½h[¥û­o|?ܪ­9jàë·` á¶ßé§ì]²{kŠ÷©IšÝ;E\¾f@„Ð++UÖ¹IE4/@F`† 944óóD„­fY"Þ<8ÀªòiVԥذŽ7#‡'U›)¿ÅsWWƒÇ¿NþÁçIᚌmŽÍä!pÈH$LÑyŽV5…ÈA†qöŠÿ– †ó¾9zê!/%•å“’„Úÿf“EÈs¦8zÚüwË.¾<η•ÜsÆ$ÀŒôc¤UöÓüëÆ2µCWå)£‘B¨ÁÚ öùW ѨÉ5”qãU 5ÇM_áÒÐÆGõÜTv©Ý¦5êI.jCÀ½!¼*“Ç:ß?ü]ôrÔÄæ$¨FŽÚãæõ²ûËÍšŒ"áHxÂóqXÒ»m^nýƒÄó÷4IÄɈê`m·¥í8K‡Ú+I:2D¤’ö÷áAU?Ý [Y$аžP©0ñ{ÖÔS¢ã¼gî`Q¹nöcÊžùt¥ÿ…Zw]ãþÌýwÁøþM^¹Ç'ΣVœÆÝ!»@·~ÔF‹{®pBOÈÖ©spe­úC@Æ3qÎT(ÝXêdÅÀ’õBÓ0û%€LŠj} mæÇ|^³`kàûpÜjýÎX7Ž~R8<‹5saá]\'PÉ/ðA .,Ûµü UœLðãŽl¾Ùzã4×âUƒð}3„ó oyfm·ëtNµØ/ šXDhg Bzü¥Óˆ[¿úF²ÌÓ§‘Ø¿ÿÔà’@¤z¾±„ÖºÕ‡ÁéÚÚü­9±9œóÒ`u}¹ªí•­ÔÑ ô™§éÿFI1¢ óGáTׂ*%é"ðþ…†$*lÎ3 ÉÃCì²áBùP L:ŸMK+¼ìOy 9ßÿzb¨èãZ'°Þb–×kGáÖÔ!—ØY÷~€FŠIÌÐ\Þ„—™nÍÈ­á£rcÆ„6Y£•~P oܦ7’ïe5uÕçcNšËxuA0½6Jp¶ÔsT©2@‹pEsÙ.ŸíoMC±b&FØ ’º~³»ÄzÖzJ,*‹©çhæ(¶ŸË„RbÉA8å®@rm@á¶›ïV(߉pŒ,>Yû‚ðâWŽc8 ?„I1´¡iY4ÌÊ r*†OQ'‚C ŽÆŠQ% IeþŸ’ÅáË, & Õ§ë©óÎZº+š‘½ÃÆ£Ñ8KΈ xWhU»y%ô]2*/î÷2UÕ ÇÄuI(úïIž­˜Ô|ÒÚµ÷à*nr3A]òž\› pCîX%ØNˆá{£èZÎQlÐHÖ#ä¶„3X!Ø·  ­¶ÝÙ¯{©öM°— g { †Jr=榶:o«åQ„‹î#öÒ¥^X4È4detÏiÃã‹kEµ¤‹)¥ýå6ÆsPOºx(†½MrC¹uIБsG#wQ•Hþņq?SêÔ@.yëÏÕ’SǸíÜ-ü³"&_‚™þ60ûò2ãû´M½‰bšüùß0æ^ñV¢d?ŠxÇEvGï`¹52B!:ñÅ”±šõËÙd$¶‹ |àx)„vjï{Á_©ÿM¹:)´<ÔB†Gkâ£ÉïsîAqo;ˆ#tþÌÒÅúqðá7r(QÍB@@S´Qá‹;<2G@«©ùc­Ë÷l†r´)dù(E“uDÈ+—¦Ä"4ÒN•±¡j¤˜ó:A¦f‡‹ ýãæ†Jl*¸“öÏ8÷”°|ÙzµÛ¼Â¸Z"nY ±ôÆg)eºÒÆÙwÃù/J©Â¸KçL“´uÛ2ÕäÞÂ~êŸcËÙ¦(=e?ÖÄW^—h½"”â&ûê$pø6W¹eCQ$E{¾„E «òÒí~n;Ê¢Vù8+@ö­¸oºãˆ‰Ý+Å4 ‡[µù“÷·`ö¦¥Ë©}&«¹-#*Ø ˆŽüJË»ºŒ4v-h;yHJkp«õ¦9of€Bî0+Uþ(ÿãzÎ`8ðrÛ‹AHòrÊì¹^?Æx ²1rhIL¶ÓsÛ¹‰gÇV,´¾ûsÉÚç¢h®ù[øwòR(ÐK„¥ vÇMÙç ·4ØÔ[u‘…©h¾½kÓ…3„Ì~ ŠG€Ä „6ýÌE[Žê¸žš¾š¨›®›‘Ç à¨Õâ†M¥·\¬@VGD2ž·f±="~ÿ8ðB6N›ßÔÌòoúêc65¢¢2ü½)ÂõCBäó/Ø ›¾$s‡¿£=›…éÔ¡g-Ъ#cË™jóüÄÊVÀí4&Û±·¬&Îø×=ËÎøÇ”ÏW!^5nñÎ0¹&“qC¢Ú9ªªÝ‘I!ký¡ÍçVÅ}˜P${掾xÉ×­“O¶ÖnhæKÁÕ K+ÁE\ ï]Ct;ln²„Ò!°„kág5¿~^ÊŒ ¤Ü°=šTÔWàØ®ck•>ÛMq\®Žy”àøÌh̸ʻÐÑ4(Œ#±ÎIÔøñIêœ[ÐÍ ºˆ! Âôcò[6mãï2eOП^´µWI5âÎ.([º¤e¹S”n‘ÑBÕ… Ñ1'ÞzÇÀ0|m}ŠC è"VÎÿëÕÉÿƒgþaþÔRõ§|®>¤Î\gµßA¨„š¨"žåé¥$ ¦ÿ Ìç’1Ë ø­Ç6Då°ŠÚcÜ5@ªP[§—.§‚ ž}r?Ø"¹¡Æ00C¸Y¢ûêUZÓ\‰ÍÄÅÙhlÏÆÉ›Y´#h×ë¿SuãF®RÏ2•½fåYAàUK9í*;&äÀQ}|åÆè9&F}JåjщjmBo#¦ÛðK2€E'’ÊÎÂûß”º8T æÜe=ì#ò¶¤â„U`ž¦qWÓ‹^/å¥jå¸Ïqáêo1Jòºµ§?²º•Ûݼ•¦x'7ƒyÆ=tÅu,M0ÜŠ¤v8¿4ƒ¢ÁŸ.U(±¸|üÛˆdÃWá-¥Öé ŒLЯýÿ’ÖáÇäÏþÓ¤¶’eÜ“¾ËÑ›AôÔcˆ‹é®9“A&Kÿ%½¶O¤Âç7*Ư"ÌwÏ_û¶XÃ{^qªƒ T¥@H,©eE6¥"]_BâÉ÷Ó‹Ñfq@K3\¿ö8Ë®¸|¿1¬š¡°4™(æîaV èiՖÿdzEøólU‘.5=Xô–IÞeQ)…n½™y…·ïè·aÂIžÉ} ‰´ür2Á°¿¾PRÍÌîÑ"—Š€t/ÏÄmòúÄÊÁe·j×7ÄÉ/ö}çhXç¾eAˆy×J>|ø̼å×â¾›fÇšû\S3¸õÒ&ÇéøÊæl±ve˜¾[†<Ãü8›9r˜Ü¾Ì5 ”«d½€©Q÷‡7¥__áyûD£çdɾƒÜùÞN%ÿº™†DólþÆä®#ºPÒ%0Ü ˜Â 1*Õ< —¢”`<®§˜’ò|ºYh¤PM¨CŽHýš‰M¦·8Y’»ù{¿+À«ø¡šÂ·ÌëqöèÌ™™Žÿ–» ˜‚~lƒâ°¾w¬L±n&˜ËŸõ[Bùé§#Žá¸Þ«tg%³“¯B kKWeÂS‰¿-Mˆº°ÌL,ï`Š·_É7/ÐQÄʹ=¶”ì{³jUÚž˜‰áƒ~õ´[n˜èñ5þÃ@Åq®ÁŒ’HæŠjYçSæMºh÷”šçs™1’hS·4pk² g‡ûÎQX§z ‡›Ì ¥?ÙÁuIC¢YHaY8Ì«”JK…ÕK7¡•l6‚I‡^ ªWÄ‘z„S»S;ó¶ç™ð^$e(AˈÈgXôEH¯ ®•P†y쇕ôScmÅ 9IåOWCZGP7@–Øñsa瓾[ôp‹©1.7%?ŸQä^HmqxºûA®YrÄ*–{ ïÃDœÝ#WA½\A‹¸$.ÏW~¨Ûä¿ô9dâ’ CÑ’½MÚ’(<ìML ¦$þã‡Û-ucŒ(à@Ê¡SÔ´éì8G ÷íý))q|“`WZkò@šï7áqE¶qVXz ÷¸´Jm^<0Êo>ü1 ˜`vfµ"XŒ¦ã ï™jqg h5‚ ý¿°¸q? ÃŰYD¯ÿ°Ó&èÎM^¹äì%n&unZè¼ˆé˜æ7屨\TI}/œ•…ÚÔ0é+™†–¢·™ 6VÄäbô îB·Q½0{égXŽpvbzÀf·)ΔWªfÌ~®uÚB±úÖ—q]FåíËî¿&xD'ÿl:Ãbë/›W “«Á-—,yZ£ÏÀøÚRmc Ìši÷;Gç·…ÀÔNFâ¼;0Xûc÷ø¦|Ss¢è+YÕ>6LˆWÁ§|¾«¦ašúµ¾Ô-0›¥MÅ35m•ðÚÝ<2_½víºðä~ö*H™h¨+Àñ‚Ý6+ªB¦þ÷é;"{’|¼«ßÝà>ð-MðmüD¢Ú8§nV[ýª³ƒbšNn±É±‰“Öˆ§Ö…*ØV4þº0VàŽN¼Q‹#sŸÈH'í<Ü)ÔÍÏÆþˆÛT_ô¨Õƒ¥ Òi4Lú±¡cIÃ7þ¶ïЪ5.…~õìØšäÉÀÇF¢4E;ðã‰Ru'-p]’³êà68Þ%«?úeÐuE­wÔ”ÆÚ¥ã<èm8X /åÕUã ›Ç΋ŧ(¯û]5®ìþrE‡ˆÓÂðú¡ÅKÄGþ.9·äZ?ŠaÁ€È^CqÎúÒÅÖ¿ç¥õ úã“ S7á%h÷óFLϺ´f(d.mRëP‹ 衤«d½1õ—½I›}í\GáQ*µr"2îScœWk¡±K¡ÎŒH ò²`{«ÃeRŽø3~A %Ù]Ã8[ʤ‚Ck%?-cþÂr 0´I?Xp/¦Q{uÝs-07 ¾Èø#òõïò}('yl/O¡Î‹Ê²uøƒ*dr3ó“Cc é給7 ywk¦Gïcq)ãÎõ¡> x¡q‡'Ð&sŽEK±ßÈÎÂn*𡱴8·øÒÿõ{Û“±«¸Öœ^Aªâ o‹Æm¹+ª„a¥›‘!gGÆèHU«5ÆÄzÿèïHë ²?ß5ß„>b}%zCÿ{6nÁS›ë”.‰u3sî½F-Zö1ócÔšöÉdŸ öwñ¥F-UEQ¡ÿkEopÂ+°b9xÿä0G›Ìq!X;iv®øÔCõñŸaS´Ê÷/dÂñòºº´>¼Ø‰%Ó—¾¿º]Àpûêí½.|P-#]÷®Ì/ Ï"xÛY»)HgÀ‡áö¢!¢ªª—Û¿|§õ‡õ\üV–$ìÜÖV[tÙì…/â²ßÝxi£Ô»kò”¬UhEÌ–hŸNöD…§rHÙ6œ'.J¨O'ñ L4^K™_ Õ¦ð"ÂåÄZ%ˆÎçúa½X¹â½¦p‰Z°Mf=žG;ã½ôî™ü€0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark €reportlab-3.5.34/src/reportlab/fonts/VeraIt.ttf0000664000175000017500000017430413544671343022242 0ustar rptlabrptlab00000000000000OS/2´Zô-â¨VPCLT í^ã6cmap¤Ãè ÇXXcvt °hfpgmçjñÄ$‹gaspø€ glyf¨ë¼Æ%¢:hdmxhH6ã8HheadhŽ…tøŒ6hheaiàâ„$hmtx vl³Ê°0kern¥^§™ÓŒÖloca=c‘Ñpmaxp@äâd nameöJRýpost´O/»ÎàŽprep’‘" „ ::N:: Ua0·v   z t ¥ &   A 6  6   O 2 g `  ‘ 0¿ & ™Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera Sans ObliqueRelease 1.10BitstreamVeraSans-ObliqueCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.comCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera Sans ObliqueRelease 1.10BitstreamVeraSans-ObliqueCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.com#/¸Ë¸ÁªÇÇ 77R¾‰-˦‡Ù´œ997Óy…¨Ë\¸H/ٓ˸¸{PfÇÍššo˸ðºƒÕ˜ËHöƒTšsÕ þ+¤´œœb-ÕÕÕð{T¤¸Ӹ˦Ãìé Ó\qbœ¨…#¨H99`ƒš```{wœ`ªÅ{PÍf¼fwÍ;…‰{ÕÍJ/œœ}5oo®²-–{öƒTfœföqÍD)fs¸€@ÿ±þ°%¯2®–­¬s¬2«þª%©¨%§–¦ú¥ú¤þ£:¢þ¡2 ŸS –ŸMAŸSž2œ–› šþ™˜}—»–þ”MA”}“þ’‘G’}‘GþŽþþŒþ‹þЉŠþ‰ˆ2‡þ„ƒþ‚þþ€þþ~þ}K%}d|þ{zy»zþyx]y»y€xw%x]x@w%vþu–tdsrq%rdqpq%poMAoún@ÿþmþlþkji:jdiK%i:hN hgfg2feddMAd–cþba bþa `_`d_^_^] \[ \þ[ ZMAZ–YXY(XWúVU»VþUT]U»U€TS%T]T@S%RþQP.QþP.ON ON MK%MALK%LþKJK%JIþHGHþGFþEþDþCB}CþB}Aþ@ú?ú>ú<6B<þ;È:6B:S9þ@p8}76B6-6B5þ4þ3:2ú0 /þ-þ,þ+-+1*))#('&'d&% %2$ $}#:#þ" "»!!    ¸ÿÀ@š  @:––%d%%A%þþúþþþ:–  }    þ:–þ-:-  @¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °³EDY!-,°%E`D-,KSX°%°%EDY!!-,ED-fþ–f¤@ ±±D/ÄÔì1ÔìÔì0!%!!füsüåþ–øòr)¢Õ @-   :HF ÔäôÄÀ991/äüÌ0KSXíííí9Y"K° TK° T[K°T[K°T[X½ @ ÿÀ878Y3 #3#ÅÊZ¢2qË1ÍÕýqþ›eý¸þŪéÕ@IFüüÜì1ô<ì20#!#oª$ªÕýÕ+ýÕ+/¾N@4L L    ÔÌ91/<Ô<<ü<<Ô<<Ä2ì220!3!!!!#!#!7!!7!!!h$i gP'þ°RT$þ©h gþÛg¡hþ¶%JTþ°'Pf8þÝT%¾þaŸþašþ²™þbžþbž™NšŸýÇþ²DþÓ /`@9 $ KOM+* K#M-*',+ -#$*  '0ÔìÔìÀÀ9991/<ÄÄÄ2üÄîÆî2öî90%6654&'&&'#&&'7&&54$773X‹¢fs„–_l""V§OT¸Áþâí;d;tÌS"\ÈjX½¬á/d,Z«‘gT\Z€dFOìµ.2þU¬‡¯å þÓ-/*¸>DÈ$•~¦æééºÿãßð #/3O@,W*WRW!W*R1$Q0V40-2 '  ' - 4ÔììÔììîî991ä2ô<äìîöîî0"&54324&#"3264&#"326"&5432#ሟ躈ŸèHNMp~QKk‚\LMoQKk€ÿˆžçºˆç›û. Óñ˜Ø ³™ÖþõÛij­\d¾ý¾kjí]d¾þò˜Ø °™×þó ùó `ÿããð 3û@T// ///:0 /& Z&%Y)Z"VQ 0/&, % 3,3  4ôìÄÔìî999991/ÄäöîöÎî9990KSXíí9í9í9Y"²]@X *: ItˆŽ–• œ     % & %&+)*%*&6 9%9&6/KIkxu/‰ŠŠžšš]] 326#'#"$547.5467>32.#">7ÇþVy}«Ž^·n-“gÑüjjô…Ýþù¹¶.+EÐxNžQ#K•F|›&E—KjXÆgšA[Ÿþølþò‹SUÚ´št._6Dz2RZ$$¶/1d,VXýøOÍzŪoÕ@ IFüì1ôì0#oªÕýÕ+žþòj @ \   ÔüÄ9991üÌ0#&5jþ÷þûLL \Zþµý­þìžþÉ™¬Eœ)G#ÿþòN !@\ ÔÄì9991üÌ04'3 KL \ZþëþìþòKSž7™­þ¾œþÖýµþà=JÃðN@,  ] ] V    Ô<ä2Ü<ä2991ôÔ<ì2Äì2990%#'%%73%Ãþ™g:þ°rþ°:gþ™:PrPßÂÃbËþ‡yËbÃÂcËyþ‡ËÙÛ #@ `  Üü<ü<ì1/Ô<ü<Ä0!!#!5!®-ýÓ¨ýÓ-ýÓªýÓ-ª-ÿ‹þ†@:bHÔäÄÀ1üì0KSXíí9Y"K° TK° T[X½@ÿÀ878Y@%%55FFVV ]K°TX½€ÿ€878Y73#¸Ó!ãþ¬þÀ@\ߘƒ?@ cÔÌ991Ôì0K°TX½@ÿÀ878Y@ __oo]!!}ýヤw{þQ@:HÔäÀ91/ì0KSXííY"K° TK° T[K°T[X½@ÿÀ878Y73#¨Ó1ÓþþÿjÿBjÕ.@:FÔÄÀ91ôÌ0KSXÉÉY"3#¸²ü±±Õùmfÿã°ð#D@d dV Q$! $ôìÔì1äôìî0K° TK° T[K° T[X½$@$$ÿÀ878Y2#"547>"3267654&Ë×e[]û˜ÄÖg\\÷†L‰7\murPˆ7[kuðþòýÀþ…––›û¾}•–œ QO„þuÐ¥©QOƒ‹Ñ¥©dáÕ T@* :ddFd   ÔÔÄÀ99991/ì2ôìÔì0KSXíí2Y"7!7%3!!…Jßþ‹#sËþþI ü£ª}H®HúÕª˜ð›@,:eY dVd ÔÔì999991/ìôìôì990KSXí9íY"K° TX½@ÿÀ878Y@( ,,eyuxy '4Ucv]] !!7>54&#"7>32°ý{É#ü7!¢‡qˆn_è„%|â`ÄïrÑýרªBu±]azDAÈ12ЩrÏÿã“ð+–@+ d!KXd+KX(dVQ!g,!  "+ %,ÔÔìÔì991ìäôìôìîöîî90K° TX½,@,,ÿÀ878YK° TK°T[K°T[X½,ÿÀ,,@878Y@aff*a++]]>32#"&'732654&+732654&#"DnÏdÆè·¡~vslRä•^Àc%^¿dÅõœ‘®¸¦¿Œ`Él° °”‘Ð&$˜}xÒL:9%%¿43Ë¢hq¤˜‚^g))%…Õ È@;   : d F   ÔÔäÀ991/äÔ<ì290KSXííííÉÉY"K° TK° T[K°T[K°T[K°T[K°T[X½ÿÀ@878Y@$:  +*) :89 6 f yu ˆ… š– ]]33##!7 !qþ¿Õ!ÕCÉDý^'7ýfþÕü3¨þ `Ãüã)ÿã¦Õ ‰@6  :dKOddFQ!   !ÔÔìÀ9991ÄäôìîöîþÄ90KSXíí2Y"K° TK°T[K°T[X½!ÿÀ!!@878Y!>32#"&'732654&#"¦ý–H._1Ïð{qPç‰Z¼g%\¹^Ãÿ§–O«Z‘Õ¨þÞ¾…ô\@E ¼--ê°‚%%îÿã¼ð *½@# d dk K hj(VQ+ "+ôìÔìÀÀ91äôìôìåîî90K° TX½+@++ÿÀ878Y@`z{J J JJ*Z Z ZZ*j j jj*z z zyz*Š Š ŠŠ*™ ™ ™™*© © ©©*¹ ¹ ¹¹*É É ÉÉ*Ù Ù ÙÙ*é é éé*-]]4&#"326.#">32#"5476$32¬‚p›ÓrœÑ":–UÏû>IÁp·ÙkfFºiÎîmbg%±N˜)“ï°„•õ:¸&(þüþëUWÓ²’û_AFäÔ‰˜ž¾Õ@:dFÔÌÄ991/ôì0KSXííY"K° TX½@ÿÀ878YK° TK°T[K°T[X½ÿÀ@878Y@ ')Zhxy]!#!þüªÞ'ýÕVú+Dÿã¾ð /c@#$d dd*VQg0$' -'!0ÔÄìÔìÄîî991ìäôìîî990K° TK° T[K°T[X½0ÿÀ00@878Y4&#"3264&#"326#"&5467.54$32ž€œË›„ÉgŒt‰±‹sв‰qxþÀý×þÚ¯in-çÁóµÅq»r†¶D_tštdzŸñ+®{ÏþôÓ° ù"$—lµóŘ„ÏZÿã˜ð*œ@("K"d kjh(dVQ+% +ÜìÔì91äôìæþõîî90K° TX½+@++ÿÀ878YK° TK°T[K°T[K°T[K°T[K°T[X½+ÿÀ++@878Y@FFFdddd•••• ]?32#"&5467>32#"&32654&#"Z%:”UÏý>JÃp¶×jgF¸hÏðobhþܲM™Ç„p›Ò‚r›Ò!¸&(UYÓ²’û^BFþùãÓþv˜žª••ój #k@(:HlHÔäÔäÀ91/ìôì0KSXííííY"K° TK°T[X½@ÿÀ878Y3#3#9Ó1ÓlÓ2Ó#þýÙþÿ## ¡@.   :HbHl   ÔäÄÔäÀ991äüìî0KSXíí9ííY"²]´]K° TK° T[K°T[X½ @ ÿÀ878Y@%%55FFVV ]73#3#´Ó#á¿Ó1Óþ¬þÀ@ÑþÙ^Û¦M@*````:nmüì291ôì90KSXííííY" 5Ûûøúþðþ‘þ“¶ѦÑÙ`Û¢@ ``ü<Ä21ÔìÔì0!!!!Ùúþúþ¢¨ðªÙ^Û¦O@+````:nmü<ì91ôì90KSXííííY"55Ùúþð¶þ/¦þ/¶müð! @F  : K!NZHV  !"ÔÔÔì9991/äüÌþôî9990KSXííí9íY"K° TX½"@""ÿÀ878Y@ t t ttt]%#7>32#7>?>54&#"þ1Ë1fËj¡ºkyhT8¾NojTDm`PÅhþþþ98–g´bTB^\{š^ƒ\YFj9LVGBwþžš 4@Z@3 5"!4;or!o%5o ro%.A>  !"4811(AÔÄüìîî991ÔÄüüÄìþÄýî2ÅÆ990%#"&543273654!"!267# 476$3 "32654&åE¡W“Á)Ç\‘'±äþ¶þú²þ´‘¢]ú‰R‡þÇ¥þ¾þUѼ‹h½A¥þiþÄÅreŽÀsîJLƘÜIPGƒý0Ñé'}r†þ ¸þûþ«W]rfi¬Gᥙr~þ†þäþÙþwúßœp~ä¦fyÿ“ìÕ £@@    :Z F   ÔÌ91/<äÔì90KSXííííííííY"²]@$‰ *HIHGWhgwˆ]]3#!# !òåÓ>ý`ÓÕ¨þ]$Õú+þý7Õ l@<:ZZFZs    !ôäÔìÔì9991/ììôìî90KSXííííY"!2!!!2654&#!2654&#ZÒг‘||þ³þßýñTjE·Æƒ‘ÍX-¡µz†ÕœÑž„áþúÉýݨ™vlfþ>Œ|aYVÿãðS@ ZetZVQ   ôÄì9991äôìôìîÖÆ0K° TK°T[X½ ÿÀ @878Y²o!].#"32$7# 476$32)`×}«þý^32.#"326^Nþ´…þÆŸþçþÃÁªkþ›Œu)Zò‰Ÿò_Q]ÖÔjÆß‡¦ýoIO8ç¡‹WUGG×^cylþÛ˜ÑÓ-7ÍÕ }@D     :ZsF    ôäôä9991/<ä2üì0KSXííííííííY"3!3#!#ZËwÝwËþÝË‹ý#‹ËÕýœdú+Çý97%Õ2@:FôäÀ91/ä0KSXííY"3#ZËþÝËÕú+þ°þf!Õ K@&  : ZvF    ÔÌ9991äüì990KSXí9íY"3##73267VËþñ5ûâP!?‡Œ%Õú“þñ󪚾7ÇÕ ó@G     :F    ôäÌ991/<ä290KSXííííííííY"²]@j$%#675HXkixxš  &&%'787=<IGFYX\[hfbbzxx~~…‡‰”$]]3! ##ZË{ ü‰‰öý¬ËÕý‹uý7üô×ý)7úÕ9@:ZFôäÌ9991/äì0KSXííY"3!!XËÿ×!ü^ÕúÓ¨7°Õ @Q     : F    ôäôä9991/<Ää290KSXííííííííY"²]@‚  )70 JC x‹‡‡ ˜Ÿ”• ­¯&)(') 2547 5 DGJCI F XYWhfw‹‡‡ˆ‡ ‡ –™”™¦ª£*]]!!## #Z/®B7þÝÄþý¶Å¾þÅÕüîú+üúß7ÅÕ Ó@@  :F   ôäôôÄ999991/<ä2990KSXííííííY"²]@P' ?6H[jŠ„ ")&5:=7IWY_ hkwŠˆ†‡­©¯ ]]!3!#ZœúÅþÝþïþeúÅÕûú+úøRÿãúð#P@ ZZVQ$  $ôìôì1äôìî0²0%]K°TK° T[K°T[K°T[X½$ÿÀ$$@878Y"32$7>54& 476$3 ¦¦þ^54&ã þèþÄyl}9½<þ¶þöËâ¦þ^>OO]]``¯¯]!!#!yï ýëÿËýðÕªúÕ+wÿã´Õ³@<     : ZQ F   ÔìÀÀ9991ä2ôì99990KSXíí9í9íY"@!     4 4 4 4 4 444]K° TX½@ÿÀ878Y²]332673!"$5467=˰ š•Á×.°Ë´;þ¶þáàþû Õüu=OŠÔï‹ü\þÒþàáÁ#W2 ðÕ„@&:FÔÌ91/ä290KSXííííY"²]@0*(8GGXWgieyywˆª©¨h†©]]!33¦þúÆÙÕÜü¡Õúüú+Å)Õ  @I      : F    ÔÌ91/<ä2290KSXííííííííY"² ]@‚ ()& ;;3 KF Š € Ÿ™Ÿ   ')$)+*(- & * 6756 6 8 KGCH G VV gihg g yx„‡ˆ†… „ —™›ª¨§1]]333##ÅÄH3áJ-ÍýhþEýÑþÕû öû öú+Ýû#ÿ¨ Õ M@I    : F    ÄÀ91/<ä290KSXííííííííY"²]@ )+) :8; IJI YZhhh y€Œ–—¨   ''()())& ( 8::665 5 8 FFGGD F H YYXT T X ffehfggfe e f zzzyu u ‡†‹‰‡‚ •——™˜Ÿ Ÿ ¤¨«¯ ¯ I]]3 3 # #ÌÏìý™sËþÓýßëºÕýåý7üôuý‹#hÕ¯@7:F ÔÄÄÀ9991/ä290KSXííííííY"²]@:(9IIZY{yŒ™——¨©$5Vjƒ“’§¦¨ ]]3 3#Ùãý[ŠÊ‰Õýšfüòý9ÇÿÓ Õ P@:ZFZ   ÔÌ91/ìôì0KSXííY"²x]@ „‰§¨w]]!!!7! ”û{¸ û=…üwÕšûoªš‘Rþò\Q@!:oo\ÔÄÔÄÖÆ991üìÔì0KSXííY"²ˆ]²Œ]!#3!´¨ïþÕïþXùü®ÿBÕ0@:FÔÄÀ91ôÌ0KSXÉÉY"#XÁ¨ÃÕùm“ÿ²þò¼D@ :oo\ÔÄÔÄÖÆ991üìÔì0KSXííY"!73#7¼þžþXï+íøÞÙ¨ÛÕ@ FÜÌ91ôÌ290##¼ÉþHþHÉÕýÓ‹þu-ÿìþþ¬¶oÔÌ1Ôì0!5ûØþ¬…ðfk¶ÔÌ91ÔÌ0K° TK°T[X½ÿÀ@878YK° TK° T[K°T[K°T[K°T[X½@ÿÀ878Y@ DDUgv†]#JÑšüfþŠvTÿã`{ +@d  #"$!)*(+:+(!!o (LK{LzQ +"! % %#% ",ôìÔì99991/Ääôüôìîî99990KSXíí9í9í9í9í9Y"²0]@.<<O[[jjzz‹‰ 2C@TPd`tpƒ€ ]]K°TX½,ÿÀ,,@878Y@¥        ! " #¥$ + ]#7#"&54$)7>54&#"7>32#"3267L}¸"QÏ·9 ‘ƒZ½d hÇ]ÆÏ ѸâÙob–à$ýªdc¯‰Ää1Yc..ª''¬¤!Y~yXd×´Jÿã²%²@M  $#$#"$# !#$#$#%$$#:! L LQz$\""#% !#$$%#$&ôäÔì999991/ìäôìî990KSXíí9í9íí9í9Y"²`']K°TX½&ÿÀ&&@878Y²Ÿ']4&#"3267>>32#"&'#3ö…uU•7:CƒsW”89FýÄDÍp¬ËwnH¼gm 2!¸/¸¬‘¤SOSÛmŠQORÚm\ièÆ¢þÐvNTdcª^ÿãJ{K@KN LKNLzQ  " ôÄì9991äôüôìþôî0K°TX½ ÿÀ @878Y.#"3267#"&547>32J%B•PXŸ6V^—šL«]#P©Yßð}{Tâ†Nš5¶00>9Wê}—”..¶!!ßÏ®%uPR#^ÿã%«@L   : L LQ z\%"&ôìÔä999991/ìäôìî990KSXí9ííí9í9í9Y"²`']K°TX½&ÿÀ&&@878Y%#"&547>323#3267>54&#"XJÊ{¨ÃvpJºfl¥-x¹þѹýèƒtV“8;DƒsW–5:E¨adåǦ-wOShabùì°‘¢SQTÜk‹œRMSÜ^ÿã‘{ &@$o KNL |L!zQ' $ #$#"'ôìÔì99991äôìäþôîî0²p(]K°TX½'ÿÀ''@878Y@,oooolo o o o$o%o&ŠŠ™™šš]]>54&#"!3267#"&547>32Ù{‰Ò65ü¨«œxÖ\#cÓméû}yN×y¾á ”"zŽ­Ÿ&,‹˜64¶((ßͯ-vJPäÀ.i‹Ó§@<      : o}\~      ÔÄÌ991/ä2üìî2990KSXí9íííY"K° TK° T[K° T[K° T[K°T[K°T[K°T[K°T[X½@ÿÀ878Y#"!!##737>3Ó°d[/þѾ¹¿°°&¿Í™Oicü/ÑNÆ BþVÅ{.Á@X"#!-.,   :#,K L#Lz,L~ )"/ôÄì99991/ääìôìþÕî99990KSXí9íí9í9í9í9Y"²`0]K°TX½/ÿÀ//@878Y!"&'7326?#"&547>3274&#"32Å¿7þÉþùa¦H"D˜V¯á$MÌvªÃvkG½gq¨) \€vI„/LUy¯ê`ü+þãþè³,*¿³TX\áÅ›)sLRi`®þeˆ”:4Vé|Š”=H‡µ@M   :  Lz\   '%$ôäÔì99991/<ìôì99990KSXíí9í9ííí9Y"²0]²`]K°TX½ÿÀ@878Y²Ÿ]#>54&#"#3>32uƒ¹ƒ j_”Ù y¸/¸wFÚx”£ ¤ý\/HT^Ȧý“ýœ^m ‘$RH/q@*:c\~(%$ôÄôäÀ9991/äüì0KSXííííY"²@ ]K°TX½ÿÀ@878Y3#3#w¸-¸'¸Û¸éËû ÿþV7µ@A : c }~\   (ÔÔä...À9991ìäôìî9990KSXíí9ííY"K° TK° T[X½@ÿÀ878Y@////PPPP```` ]3+732673#)¸Ý%0-­vE/l[3¸-¸`ûŒ¿GCHœZ (éHå á@H))     :~\   % $ ôäÌ9991/<ìä90KSXííííííííY"²]@>6STThi€“ ::@ XXWWiljyyy…Ž‰Šš]]K°TX½ ÿÀ @878Y33 ##w¸°wïý@ßþ"j¸üu×ýèý¸#ýÝH/U@:\%$ôäÀ91/ì0KSXííY"²@]²`]K°TX½ÿÀ@878Y3#w¸þѸùìH?{+ô@s    : # L& z~  #) # '#')$,ôÄÔììÔì99999991/<<äô<ì2990KSXíí9í9ííí9íí9Y"²0-]¶@-`-p-]K°TX½,ÿÀ,,@878Y#>54&#"#>54&#"#3>32>32/ƒ¸dZ†Ò{¸ƒdXˆÒ{¸Û¸#KÉszTÝ{¤ý\ž+>ZdÉ¡ýž%?[eÉ¡ý`®bg€rv|¦˜!OH‡{µ@M   :  Lz~   '*$ôäÔì99991/<äôì99990KSXíí9í9ííí9Y"²0]²`]K°TX½ÿÀ@878Y²Ÿ]#>54&#"#3>32uƒ¹ƒ j_”Ö!{¸Ù¸%MØw”£ ¤ý\/HT^Å©ý“`°aj ‘$R^ÿã‡{ ?@LL zQ! "!ôìÔì1äôìî0K°TX½!ÿÀ!!@878Y²p"]"&5467>323254&#"ÅåO?côš¿ëN?bôþy¹ó‚~h¢@/3óÒzýV†€îÀ…þøW†€˘—Cø‘”acJ¾ÿúþV¶{%È@O  $#$$#"$# !#$#$#%$$#:! LLzQ"$~&"&% !#$$%#&ÔäÔì999991äääôìî990KSXíí9í9íí9í9Y"K° TK° T[K°T[K°T[K°T[X½&@&&ÿÀ878Y¶`'p'Ÿ']4&#"3267>>32#"&'#3ø€xR•:9D€vW•59FýÆJÉ{¬¾voJºgw¢(s¸-¸²“œTPOànŒ—RNRÞiadá˦þÓwOScbý® ^þZÇ{"²@L  :LL zQ~#%"#ôìÔä999991äääôìî990KSXí9ííí9í9í9Y"²`$]²€$]K°TX½#ÿÀ##@878Y%#"&547>3273#3254&#"VJÉzªÁwoH»g| $ ¹þÕ¹þ:|u®öwW”7:C¨adåÉ¢.xNTbc¨ùüR”›Mî™QNRÜH´{©@4       : Lz ~   $ôÄÌ991/äôìÔÌ990KSXíí9í9íY"²O]@ T ][__]]K°TX½@ÿÀ878Y@@@@@@@@@P ].#"#3>32‘H)“Ü$q¸Û¸#IËs:¶ß»ýÅ`®ahÿã{(Â@?      :  KOLKOL&zQ)  #)ÔìÔìÀÀ9991äôüôìþõî990KSXí9í9Y"K° TK°T[K°T[X½)@))ÿÀ878Y@( //)X X X X XX ))99JJYY]].#"#"&'732654/.54$32#I¢V‘§Â;¸{þååYÄv$eÄZ‡©Þ?Œ‚ ç[­?®((cUc53pa²à"$¾46tY`;%y^³Òƒbž¦@>  : o~ }  ÄÀ991/ìô<Äì2990KSXíííí9Y"²]@ gyy]K° TK° T[K°T[K° T[X½@ÿÀ878Y!;#"&5467#733bþ‘wMUº°¤¡wœ™>¸=`ý ". @:š€‚7!`>þÂuÿã¶`Ã@L    :  LQ ~  'ÔìÔÄ99991/ä2ôì99990KSXíí9í9ííí9Y"K° TK° T[K° T[K°T[K°T[K°T[X½@ÿÀ878Y²`]332673#7#"&546‰ƒ¹ƒ h_”Ø!{¸Ù¸%N×y“¤ ¼¤ýc1FU]È©lû °bk¡Z“Õ`¹@'++++:~ÔÌ91/ä290KSXííííY"²]@,x…€%75IIgftsu‡‰‹]]K° TK° T[K° T[K°T[K°T[K°T[X½@ÿÀ878Y´0]33#“äÃýƒø`üH¸û ®` x@J++     + + : ~    ÔÌ91/<ä2290KSXííííííííY"² ]@˜5 ED ST gdvt ‚‡ € “    ,&( ) $ 6=768 3 6 LHJJII H F [XZYZX feeddf` f v{zyv v ‰Œ‰‡ † Š ˆ ›˜››• š =]]K°TK° T[K°T[X½ @ ÿÀ878Y@.«¥¡   ¸¿²² ° ° §¦¨§¤ © ¶·¶² · ]]333##®¶/¢Õ>¸þ×7þTÙ`ü{…ü{…û  ü`ÿËÍ` ‰@H++ + +  +  +++: ~   ÔÌ91/<ä290KSXííííííííY"²]@Ô*)&'%&)) ) + :865579 ; JIGEEGI J VVUVXW ffffefg f f vuvuuw v ‰‡„‡† ‡ Š •–˜—’–— ¥¥ ··J   &+)& 6886 FIIF Xihh wx Œ‰… š™– ¸È]]K° TK°T[K°T[K°T[X½ @ ÿÀ878Y² ] ## 3Íýþ;Óíþdß'þÛÓ×w`ýÛýżþDNþk•ÿÍþVÓ`2@F +  ++ +  + + :  } ~ ÔÌ991ä2ôì9990KSXííííí9íY"²]@f& 7 F v w v † “ &$$)9 9 98I I H Hwwwx x v v yyŠ‹ ‰ „ „ ‰ ˆ–––– ” ” – *]]K° TK° T[K°T[K°T[K°T[X½@ÿÀ878YK°TX½ÿÀ@878Y+7326?33ü€¡}‘jMlC9øÃºÁh×kšTzk7ü¦ZÿúX` @++:o~o   ÔÌ91/ìôì0KSXííY"²x]@…‡Š‘™xw‹ƒ]]K° TK°T[K°T[K°T[X½ @ ÿÀ878Y!!!7!îj!üµ¸üs!Kýk`¨üÛ“¨%øþ²×4@f -.-..-    : 5'- )'.)o'oo'\5)(54.  $-5ÄÀÀÀ9991üÄìÔìî99999990KSXí9í9í9í9Y"²]@K      % % % %%5 5 5 55H H H HHK K!K"K#K$K%Z Z!Z"Z#Z$Z%%]#";#"&546?47654&+7326?>7>3×Mˆ^3 yoIQ/UaNG¼¢- bq=> /G7.Š…O–ü ‘gKB&ô5?9m{ D%ë 2-UK“m—ô{'"þ®·€Ôì1üÌ0#®ªøþ²î4®@f -.-..-    :-5)  )'.'o)o)o\54.  5)('*(5ÄÀÀÀ991üìÄÔìî99999990KSXí9í9í9í9Y"732677667&&546776654&##73233#"#Nˆ^3!xoIP/UaNJ»£- bq>>~5F5/Š…þ²O–ü ‘fL@&ó"2@9l{D'ë 1-VJ“n–ô~&"ÙÓÛ1#@ `` ÔÄ1ÔüÔìÀ990#"'&'&'&#"56632326Ûi³an’ ›^X¬bi³an“ ›^V©1²OD;>MS²OE<>Lÿÿÿ“ìN'$Ùuÿ“ìm !Ú@P !  !   : Z S " !"ÔÔÔÄÔÄ999991/<ÄäÔìÆ9990KSXííííííííY"² ]@8 & 9MW‰  ( 98HGHW[YXX!gww Š ˆ‰]]4&#"326.54632#!# !üY?@WW@?YþÅ69 rr¡IEÓ>ý`ÓÕ¨þ]$Z?YWA?XXœ%qEr¡¡rOz$ú“þýÿÿVþuð'&Ýÿÿ7 k'( uÿÿ7Å^'1þuÿÿRÿãúN'2Tuÿÿwÿã´N'8úuÿÿTÿã‘f'DdÿÿTÿã`f'DCdÿÿTÿã`f'D×dÿÿTÿã`'DŽdÿÿTÿã7'DØdÿÿTÿã`'DÜdÿÿ^þuJ{'FÝwÿÿ^ÿãœf'Hoÿÿ^ÿã‘f'HCoÿÿ^ÿã‘f'H×oÿÿ^ÿã‘'HŽoÿÿH+f'ÖþþÿÿHf'ÖCþþÿÿHÏf'Ö×þþÿÿHð'ÖŽþþÿÿH¤7'Q؉ÿÿ^ÿã f'Rsÿÿ^ÿã‡f'RCsÿÿ^ÿã‡f'R×sÿÿ^ÿã‡'RŽsÿÿ^ÿãŽ7'RØsÿÿuÿã¶f'Xjÿÿuÿã¶f'XCjÿÿuÿã¶f'X×jÿÿuÿã¶'XŽjVÿ;Õ Y@.:L F   ÔÄÀ99991äôÔ<ì20KSXííííY"3!!#!7!5®Poþ’Ù°Ùþ‘pÕþ\™û£]™Ãu=ð  @‚ƒ‚ V ,-,Üìüì1ôìüì0"32654&'2#"&546PnnPPnoO@v+..¹†‡´¸ooPOmmOOp1.-rB„·´‡†º˜þÇ–!¤@[     ! : K NKNLL LLzQ"!    "ÔìÀÀÀ91ä2ô<ììÄÆîþôîõî0KSXÉ9ÉÉÉ9É9É9Y"&&'667#&&5%3ö²ðz€+I>#/|Y¨B”S#A’M54&#"#=& Ů٢È*01wRþêÚLŒ?A‹G|š/N3aCÔ­qd… Û¹qÅÞº“=%‡a(H%'^ƒP¬à¤r[-NC+RoC~Ê%NZˆ†û“åÍ/8L`@6EBC?2‡H0‡9JCˆ 9ˆ‡† ‡$HE301BKL?gwyVpMIßÑ`3þœDåÍ/IC@&=‰>:ŠAˆ$1‰04ŠGˆ‡†$‡ 73D=00*/D0/JÜÌüìþí2î1/îöþýîÖîýîÖî02#"$'&5476$"32676654&'&&&&#"3267#"&54632˜mmllmmþù˜˜þùmmllmm˜ƒâ^^``^^⃄ã^]]^\^ã§B‚B•§«›@zBC‰FØûûØIˆÍnmmþúš˜þûmmnnmm˜šmmng^^^å‚ã^^__^]⃅ã]^^õ! ¯Ÿ®"ôÐÑò'“FÕ >@!  ‡ F 4 4 545ÔäüäÔìÔì91ô<<ì2Ô<<Ä903#######5J®¤ªqÃ7ËrqËrÉÕÿý¾äþÑ/þB^þä^î-f…µÔÌ1ÔÌ0K° TK°T[X½ÿÀ@878YK° TK°T[K° T[K°T[K°T[X½@ÿÀ878YK° TX½€ÿ€878Y@VV……••¥¥]3#fÇþqšfþˆyFòš@‹ÔÜÔÌ99991Ô<ì20K° TK° T[K°T[K°T[K°T[X½@ÿÀ878YK° TK° T[X½@ÿÀ878Y@"@@@@QQQQOOOOPPPP]]3#%3# Í)Ë®Ë'ËÊÊÊÙ'ÛÝ>@" Œ` Œ `  Ü<Ä291Ô<Ì2ü<ìþ<ì990!!!!!'7!5!7!Ù}®/þHÃ{üúþþ}®þÕ¶Ãý‡¢;fÕ¨ðªþÇfÓªðÿ¤ôÕ»@L  : ZZZZF Zs  ÔÄ91/<ìÄìôììîî0KSXííííííííY"²]@-   GIIIGWXgfwuwwy†††] !%!!!!!!#¤þÊšÏ!ýXÈ!ý8iø!ü>IýòëÍ“7üðžªþFªýãªþÕÿºÿ¾y 7@B78(&# )562'#Z2Z#V2Q8',(68),  &,5 (,7,  8ôìôì.À99999991äôìîÀÀ999990@$7754709 &5&5' )765]]K° TK°T[K°T[K°T[X½8ÿÀ88@878Y@>IJ J7YZ d j gu { w…‰)˜– —D6C7WS6S7`6`7w q6q7…6…7”6”7]].#" 32$7>54&.5476$327#"&''Ç-’b¥ÿ\>A Éüu3“c¤[>? ûŠ''zm}9½‚ÒTËZÑ((vp€þ˽‹ÙLÜZÓ<=¢¢mîr-W,Ñü²DC£¡pëz8]üÁP¤U¦P‡ššMMÁcÆI©b±þµ‡œ˜TRËcÝÝÏî /<@- !$'!!0 $*0ÔÄÔÄ99991ÔÄÔÄÀ999032654&#"&&#"326#"&546326632#"&“1†Te€vYR…Ä1…UfvYR†F^ˆº§†_™HDža†¼§†^•/XZ‡ie†‡7XX„je†ˆ‡ߦ¯Ø~ŠŠƒá§¯ÖwÙÛ .@`  `   Ô<ì2ü<ì21/ìÔ<ìü<ì0!!#!5!!!®-ýÓ¨ýÓ-ýÓúþþ}ªþ}ƒªƒû¦ªÙÛ¨ T@.````:Žm`  ü<ì2291/ìôì90KSXííííY" 5!!Ûü@Àúþúþúþøþëþî²pªoüªÙÛ¨ V@/````:Žm`  ü<<ì291/ìôì90KSXííííY"55!5ÙúþÁAúþø°þ‘ªþ²ýǪª\bÕå@]  :    F    ÔÄÀ9991/ä2Ô<ì2Ô<ì290KSXííííííííY"²]@85ESww€  &&&::GFWUT``v vuuŠ]]!#!7!7'!7!33!!!bþeXËXþ`¡ 6þ³ ̾ðÂþRþ¸q šÇþ9Ç{3›{JýD¼ý¶{›3ÿåþV¼`&š@X   &#$"% : % L"Q ~'&'  %%'ÔäÀÀ9991ä2äô<ì990KSXíí9í9íí9íY"3326733267#"&5#"&'-¹ˆum”¶ ¸§ # ,P&BK8›i]‹lþV ýG4]d¨¨ü£  ”TJPNVFý×hÿçÁ-)6@'! '!’* $$*ÔÌÜÌ9991äÌÜÌÎÎ9906654&#"#"&54632#"&54324&#"32ôIH7$$0e´ÖþßÕ˜ËÝ¢e‚ WOmVPmmW£Kƒt,>bþÊþùþ±þFØ£Æ[àt}þþÏt{þw;Á [@    ÔÄ91ÄÔÌÎ990@.UPQVPb`g`e`tppupx V pp]]!! !!5 7êüA ýJïúÞÕýIÁÁý3ýÀ•!ãœþwqÁ@•”“77ÔìÔì1üìì20!#!#œÕðý ïÁø¶}ùƒÿáÿðª/#i@1 ˜—"–’ $ #" #8#$ÔÔÔì9999991/<äôì22î9990@ ]]#3267#"&5467!##"#>3!‡¶i/7.%7vy"PþºÂµÃ)6<  ¥y‘þJ\:1fd.¡xüo‘@E¦}/þú%&@ ™ ™š€& 9:9&Üìüì1üìÜäÞä026732#"&'&&#"#"&546327j ¾ÊPd@7*8  k½ÄOeD=!0 þú°l9¼TA6?&#Hý•Ánþ!þbSA8?SRÕ‘ð +/r@@ " œ.œ,#ž" œ,›œ&V0 .- )/,0 #";);0ÔìÔì9999991ôìüÄÌìÄôîîî99990"326?#7#"&5463356654&#"76632!!RŽLAs¢X•:™`kƒçж]dF‘IO˜D–™üܱýPPKS;F‡{=þ@pABzdŒŸFA""|x7ý¦{RÕ²ð 4@œ œ›œ V;;ÔìÔì99991ôìüìÜì04&#"3262#"&546766!!cat©c\z¨§”±þöË–¯&%>Ðþw±ýPœnsÖ—mvÓð¬Üþâ´šD…?jvü`{NÏç@@"  V   =<= < ÔììÔììÀÀ9991/<ì2ôì0%!5654#"!5!&5! Ïý¨±ÆþøØØþ÷Dzý¨?ž‘1/Ž¡²²²aLÊð"þÝïÊþ´a²²‹*¸>ŠþwþËÂþØTÿãœ{ >I@T5>3*# I?>?o3o$K#NF L' K>{;L| z-'Q3JI@C54?  >3 C8*? #$ ?C0"JôìÔìÔì9999999991Ää2ô<äü<ôìþ<ôîîî99990@2; ; K K \ \ k k { { ‹ ‹ 3=0>D=@>T=P>c=`>t=p>ƒ=€> ]]K°TX½JÿÀJJ@878Y@,oooolo ooooo¥1 2 3 4 ? @ A¥B–"™#]]>54&#">32>32!3267#"&'#"&54$)7>54&#"#"3267ãŽ|‰Ò6üñhÇ]º-Và„¾â ü¨«œx×["dÓm¨ã8fÜ„®Á9 ‘ƒZ½df¸âÙob–à$”"zŽ­Ÿš''Z\Z\äÀ.i<&,‹˜64¶((sqvn¤”Ää1Yc..þ°yXd×´ÿãÿ¢ú¸ '1é@B'2")( ,%" ,&",L"Lz"Q2/&2 )( / /% /' "2ôÄìÔìÀ99999991äôìîÀÀ99999990@DJ H EGV%U&X)kkg%b&f's&w'p3†I I FFU VWWY(fh%uvx%y&y'y)]]K°TX½2ÿÀ22@878Y·• ™(˜)]].#".5467>327#"&'' 324&…%]:ºðO?bóœW”:¢V¬O>aóžW“9¬VÞýŸ'[;½ïš#"þ¿ú/)1~KzÿV†€43¤V¬7}D|þýV†€54ªT3ýž%#G'&LÿåfÕ!½@I  : !HK!NZQF" ! $"ôìÔÔÄ9991äôüôìþÌ9990KSXííí9íY"K°TX½"ÿÀ""@878Y@#dddddddz y zzzz]73#"&546?>?33267d2Ê1gÊk¡¹kxgU9¾NnkTCm_QÄh×þþû98–g´bTD^Z{š^ƒ\YFj9LVGB®œÕ k@/ :HF   ÔÄôäÀ99991/ôüÌ0KSXí9íííY"²]´]!#3#73yËZ¢1pÊ1Íeþ›HþÙÛ^@ `ÜÔì1ÔÄì0!#!Ù¨û¦^ýÁ•=ÿ×} *@    ÔÌ91ÔÌÄ903##'%\½sý®BþÁ}}`ùºs-Pbý;ÿÑþVò#Ž@P !    :  M¡ ooM¡o!\$  $ $ÔÌ991Ä2äüìôìîî2õî99990KSXí9ííí9Y"&&#"!!#"&'73267!7!6632ò&P,`r<>þÃ9º­J{74a/am"‰þê?%Ê©.cå™z„þÉý…þéÙž!!‰¦­J¿»ÙÛô;?@.9*-" *`19`"` `<-<Ô<Ä21ÔìÔìÜüÔìÀ9999990#"'&'&'&#"56632326#"'&'&'&#"56632326Ûi³an’ ›^X¬bi³an“ ›^V©gi³an’ ›^X¬bi³an“ ›^V©o³NE;=LT³NE;=KÚ²OE;=LS²NE;=Kÿú`Á@ÔÌ91/ÄÌ90!3!¬þ^DýïàCúšîûÄú?q# 1@  ¢l   ÔÔÔÌ991ô<ì299077´'þžü%þ}â'þü%þ}#Éþòþöµ¢R¢Éþòþöµ¢Ro# 1@ ¢ l   ÔÜÔÌ991ô<ì2990%77779'cü'ü'`ú%É ´þ^Rþ^É ´þ^R…ßþ v@:    :H     ÔÄÔÄÔÄÀ999991/<<ì220KSXííííííY"73#%3#%3#¶Ó1Ó‡Ó1Óý…Ó1Óþþþþþþÿÿÿ“ìk'$Ùuÿÿÿ“ð^'$ÙuÿÿRÿãú^'2Tu^‰Õ #‹@9    :ZZ F Zs  #  $ôìÀÀÀ91/ìì2ôì2î0KSXííííY"K°TK° T[K°T[K°T[X½$ÿÀ$$@878Y#";!!!!!"&'&5476$3ºx¦þýW…Šý÷1°!ýXÇ!ý9hø!û¾¢±N¹¬{^á+LInþÓµËÑ+ªþFªýãª#F¼Ñt‡ba^ÿãß{(2A¸@9 /) )o K N6L|32>32'>54&#"3254&#"Çü¨ªœxÙ[%cÒm¡æ/e燿ëLBcôš‚Ç6còŽ¿á ¬{ŠÑ7üŒ¹óh¢@/32‹˜64¶')ncihîÀ‰X†€ulpqäÀ.iT"zŽ­Ÿå˜—@ù“”acJ¾ÿòéy@ o£ÔÌ991üì0!!üyÿòéy@ oÔÌ991Ôì0!!øy é+Õ —@1     :b F   ÔÄÄÔÄÄ991ô<ì20KSXíí9íí9Y"@1     *** * ::: : III I YYY Y ]#73#73ßÓ#áwÓ#áé­?þÁ­­?þÁé3Õ —@.     : bF    ÔÄÄÔÄÄÀ91ô<ì20KSXíí9íí9Y"² ]@1    %%% % 666 6 FFF F UUU U ]3#%3#ÇÓ#ႼÓ#áÕ¬þÀ@¬¬þÀ@ é‘ÕT@:bFÔÄÄ91ôì0KSXíí9Y"@  **99IIYY ]#73ßÓ#áé­?þÁéšÕV@:bFÔÄÄÀ1ôì0KSXíí9Y"²]@%%66FFVV ]3#ÇÓ!ã‚Õ¬þÀ@Ù–Ûo )@¤¤` > ÜÔ<ü<Ä1ÔÄüÄîî03#3#!!ßööööýúúþoöþõAªþ#îu"@ÔÌ91ÔÌ990 úþþôþ þ üÏüÇ9%ûÛûÓ-ÿÿÿÍþVÓ'\Ž^ÿÿhN'<uýçÿãmð_@:QVÔÄÀ1ää0KSXÉÉY"²]@) %86EYViexuuˆ…„™›˜]3#º³û/µðùó^R¼²#/ƒ@I -'! - -L¥¦'L¥!0 *$0* $ $?@*?0Üäìôäì9999999991ÔäìôäìÀ9999999907'#"&''7&&5467'766324&#"326{ÏrÎ%$&(ÑrÏ;t=:x=ÏqÏ%%&&ÏsÏ7t@?s9ÏqÏ(&%%ÏsÎ>v:@t8ÎsÏ'%$þ|pššprœ´#@ ¢lÔÌ91ôì907´%þœü%þ}#Éþòþöµ¢R´#@ ¢lÔÌ91ôì90777'dü#ƒÉ ´þ^R‹!ç@b  : o }c\~  (%ÔÄÔÔôä9991/<ä22ü<ììî2990KSXí9íííííííY"K° TK° T[K° T[K°T[K°T[K°T[X½@ÿÀ878Y¶__€]3#3#'#"!!##737>3»Û¹/¹-¹h°d[/þѾ¹¿°°&¿Í`û éé™Oicü/ÑNÆ ‹!Ô@J   : o }\ ~    %ÔÄÜä9991/<ä2üìî2990KSXí9íííííY"K° TK° T[K° T[K°T[K°T[K°T[X½@ÿÀ878Y@ ````` ` € ]!#!"!!##737>%üþѹþ¶d[/þѾ¹¿°°&¾ùì{Oicü/ÑNÇŸÿÝÿ;Õ†@I       :LL  F   ÔÄ.À999991äôÄ2Ô<î2î20KSXííííííY"%!#!7!!7!3!!!jþ’R°Rþ‘nkþ‘oR°Rpþ‘jnßþ\¤š™¤þ\™ýáéHîF/@:HÔäÀ91Ôì0KSXííY"3#Ó2ÓFþÿ‹þ4@:bHÔÄÄÀ1üì0KSXíí9Y"73#¸Ó#áþ¬þÀ@ÿ%þ ]@.     : bH    ÔÄÄÔÄÄÀ91ü<ì20KSXíí9íí9Y"73#%3#¸Ó#á¼Ó#áþ¬þÀ@¬¬þÀ@ºÿã ð #/;GKd@83W-WR'W9WBRI<QHVLHE0J*6 ?  $ !0 ? E* ! LÔììÔììÄîîþîî991ä2ô<<ä2ì2îöîî20"&54324&#"326"&54324&#"3264&#"326"&5432#s‰žç»‡çHMMo~PKkønˆŸèºˆŸèHNMp~QKk‚\LMoQKk€ÿˆžçºˆç›û. Ó²˜Ø °™×þóÛkjí]d¾£±˜Ø ³™ÖþõÛij­\d¾ý¾kjí]d¾þò˜Ø °™×þó ùó ÿÿÿ“ìm'$Ùuÿÿ7 m'( uÿÿÿ“ìk'$Ùuÿÿ7 N'( uÿÿ7 k'( uÿÿ7k',ÿ;uÿÿ7m',ÿ;uÿÿ7"N',ÿ;uÿÿ7Vk',ÿ;uÿÿRÿãúk'2TuÿÿRÿãúm'2TuÿÿRÿãúk'2Tuÿÿwÿã´k'8úuÿÿwÿã´m'8úuÿÿwÿã´k'8úuHÛ`O@:~$ôÄÀ91/ä0KSXííY"²@]K°TX½ÿÀ@878Y3##¸Û¸`û RîÑfd@ ÔÌ91ÔÌ290K° TK°T[X½ÿÀ@878YK° TK° T[K° T[K°T[K°T[X½@ÿÀ878Y3#'#‘”¬‹ê‹fþˆííP7ö@  ‚‚ ÔÌ91Ô<üÔ<ì99990K° TK° T[X½ÿÀ@878Y@  ]]K° TK° T[K° T[K°T[X½@ÿÀ878Y@!    ]K° TX½€ÿ€878YK°TK°T[X½@ÿÀ878Y'.'"#>322673#"&¢- '3}[%@/ &1}\&BZ7IR‰‘7GT‰‘}bðöd@ oÔÌ991Ôì0K° TK° T[K° T[K° T[K°T[K°T[X½@ÿÀ878YK°TK°T[X½@ÿÀ878Y!!šVýªö”š)H•@ ¨§ ÔÌÔÌ91ô<Ôì90K° TX½ÿÀ@878YK° TK° T[K° T[K° T[K°T[K°T[X½@ÿÀ878YK°TK°T[K°T[K°T[X½@ÿÀ878Y332673#"&546œrTVUnt ¾’€„HDCIM‹”};D/‡@:ÄÀ991ÔÌ0KSXÉÉY"K° TK° T[K° T[K° T[K°T[K°T[X½@ÿÀ878Y@OOPPUU]]K° TX½@ÿÀ878Y3#dË'Í̬áÑ Õ@  © ÔÌÔÌ1ÔÌôÌ0K° TK° T[X½ÿÀ@878Y@   ]K° TK° T[K°T[K°T[K°T[X½@ÿÀ878Y@I44400044 4 444000444OOKKKKK K O O O KKKKKKO$]K° TX½€ÿ€878Y#"&546324&#"326ÑŸtsŸŸstŸ{WABUUBCUôs  stžžt@WUBBVVdþu#&@  ª  ÔÄÜÄ991/ÔüÄ90!#"&'732654&'Ý$"“€+V+'O*32''%'3%.#"3254&øDEOKTõÆìRLXò‹:(|þ¡ G‹Ù`P#þÇ+W,Êþƒ¶ôufÝvˆýdt|ëÃxìet|´k^aÌ‘m_bþdþÓïŠCôDlÿÿhk'<uÿÿÿÍþVÓf'\^7žÕ q@= :Z Z­F  ôäÔì999991/ôüìÔì0KSXííííííY"!#3!232654&#DÿBË#Ë3 ÌÖþÄþqmþ¬¹|rRþ®Õþø¾·öþðÕýѯ¥hsÿúþV¶%Ä@L  $#$#"$# !#$#$#%$$#:! L LQz"$\&"&% !#$$#&ÔÄÔì999991ìÄäôìî990KSXíí9í9íí9í9Y"K° TK° T[K°T[K°T[K°T[X½&@&&ÿÀ878Y¶`'p'Ÿ']4&#"3267>>32#"&'#3ø€xR•:9D€vW•59FýÆJÉ{¬¾voJºgw¢(s¸}¸²“œTPOànŒ—RNRÞiadá˦þÓwOScbý®¾Ù-Û×¶`ÔÄ1Ôì0!!Ùúþת?œÅ …@M `  ````` ` ` :   Ô<Ì291Ô<Ì290KSXííííííííY" '7œþ7Éwþ5þ5vÈþ8vËËLþ5þ7yËþ5yÉËyþ5ˇœÇß ‚@/ AA:œ œ ®œV     ÔÄÀ9991ôììÔìî20KSXíí2Y"²]@  //??OO__]3?33!œÌwåæ‘Íý× c)t'ý+nJœðÕ@/AA:œœ œ®V CÔÔì9991ôììÔìî990KSXí9íY"²]@ )),,]K° TK° T[K°T[K°T[K°T[K°T[K°T[K°T[X½@ÿÀ878Y@#699FOOLLLLFYYjjzz] !!7>54&#"7>32“þ¹ý–¦;:TF7„SLˆ@{™@BþÌrnT.V(6C"${rY>q!òð(k@* œœ¯œ(œ¯%œ®V) (C "C)ÔÔìÔì991ôììôìîÆöîî90@(     ]]>32#"&'732654&+732654&#"×S~7}–raKP߸@‚@5p?{‹abV\fsRR8|=ÍiVMr^Hžy\R>?lH@55ÿÿ‡ÿãªð'ð'¼5 ‹ýdÿÿ‡ÿãŸð'ð'¼5ñ‹ýdÿÿ!ÿãªð'ò'¼5 ‹ýdÿÿ\ÿãÍm'* 'uÿÿBþVÅH'JÚ‹ÿÿ7`P', ÿ;uÿÿ þuÓð'6Ýdÿÿþu{'VÝÿÿVÿãk'&-uÿÿ^ÿã¤f'FwÿÿVÿãm'&-uÿÿ^ÿãf'Fàw^ÿãœ-Ú@i'&(% !"#$  :(°(L LQ z\%%".ôìÔäÀ999991/ìäôìîý<î2990KSXíí9í9íííí9í9Y"²`/]K°TX½.ÿÀ..@878Y%#"&547>32!7!733##3267>54&#"XJÊ{¨ÃvpJºfl¥-CþºF¹ššù¹ýèƒtV“8;DƒsW–5:E¨adåǦ-wOShaR{••{úü°‘¢SQTÜk‹œRMSÜ\ߘƒ@ cÔÌ991Ôì0!!}ýヤéHîF/@:HÔäÀ91Ôì0KSXííY"3#Ó2ÓFþÿÙÿãÛð+Œ@> ZetZ)% # )VQ,,%$#   &$,ÔÄÄÄüÄÄ9999999991ääÔ<Ì2ì2îöîîÖÆî20@o o ooooooo o! ].#"!!!!3267#"#73>7#7332Û!S§`ØG5þ ¼7þw Ÿ—mÀf'^Æaßþù Æ7‘ ­8—a@äg¹bÕe^ÃÀ{2f7{ÃÂV`ï34${7g1{GoçÙ²@‹ÔÜÔÌ99991Ô<ì20@"@@@@PPPPOOOO____]]K°TK°T[K°T[K° T[X½@ÿÀ878YK°TK°T[X½@ÿÀ878YK°TK°T[X½ÿÀ@878Y3#%3#–Ì)Ê®Ê&ËÙËËËîÕöµÔÄ1ÔÄ0@   ]K° TK° T[K° T[K°T[X½@ÿÀ878Y@ ]K° TX½ÿÀ@878Y@(**)66GGWW //]]K°TX½@ÿÀ878Y@ffŠŠœœ¯¯]3#ÏþÍžöþøLén@ W WÔÄ91Ô<üÔ<ì9990K°TK°T[X½@ÿÀ878YK°TK° T[X½@ÿÀ878Y/&#"#>3232673#"&¨#+&"6}#{U#=$ &'9 }!}\79 32mn 6.mnÑîöˆ¶ÔÄ91ÔÄ0K° TX½ÿÀ@878Y@ //]]K°TX½@ÿÀ878YK° TK°T[X½@ÿÀ878Y@ tt†ˆŠ‡]#‡”Œ¾öþøRîÍø@ ÔÄ91Ô<Ä90K° TK° T[K° T[K° T[X½ÿÀ@878Y@     ]K°TX½@ÿÀ878YK°TK°T[X½@ÿÀ878Y3#'#Xמ‡ŒÑ—øþö²²‘î øc@ ÔÄ91ÔÄ290@//// ]K° TX½ÿÀ@878YK°TX½@ÿÀ878Y#373Õž†‹Ñ—î ²²Tœß Ò@*A  A  A :œ  ®V     ÔÔÄÀ99991ôüÔ<ì290KSXíííY"K° TK° T[K° T[K° T[K°T[K°T[K°T[X½@ÿÀ878Y@)+/--/ / 6Fy¬]K°TK°T[K°T[K°T[X½€ÿ€878Y !33##7!7Zþw7R¦j‰‰%%þ`bþaýämººƒ…øø O@ ¨ ÔÌÔÌ1ÔüÄ20K°TK°T[X½@ÿÀ878YK°TX½ÿÀ@878Y332673#"&…w NLVlw"¸€yŒø=67?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßà>: ~ÿ1BSax~’ÇÝ©À & 0 : ¬!""""+"H"e%Êûÿÿ   0AR^x}’ÆØ©À  0 9 ¬!""""+"H"`%ÊûÿÿÿãÿõÿØÿ ÿ^ÿCÿhÿüöüÛà–à…àVßjÞqÞ_Úï¿8ôüúúü (B¬£„…½–熎‹©¤ŠÙƒ“ñò—ˆÃÝðžªóôõ¢­ÉÇ®bcdËeÈÊÏÌÍÎèfÒÐѯgï‘ÕÓÔhêì‰jikmln oqprsutvwéxzy{}|¸¡~€ëíºýþÿøÖùúãä×àÚÛÜßØÞ²³¶·Ä´µÅ‚‡«˜¨š™î¼¥’”•Íf‹‹5¢®Å´Dšº=`3Åžÿ=´Ù‹ã\‹w²ÿjfd%)¾DZ²j²´Ù´Ù´Ù?üwyÿ“}7–V)77š73\7\7\þ°?7u7ç7ü7LRÓ7LT7 ãXÛwy éÅ{ÿ¨ã{ÿÓR²®ÿ²´Ùÿì…çTJf^^ì^Ñ‹BH9H9ÿ¢H9HËHHå^ÿú^JH+#ƒu¼“‹®¼ÿ˼ÿÍ3ÿúø²´Ùyÿ“yÿ“–V7ü7LRÛwçTçTçTçTçTçTf^ì^ì^ì^ì^9H9H9H9HHå^å^å^å^å^uuuuVØ1¸3  `'y´ÙËÿ¤LÿºªÝ´Ù´Ù´Ù\ÿå#hdœ¶ÿá+/ÅRÅRNöTåÿã?L5®´Ù=ÿÑ´ÙZÿúðð…yÿ“yÿ“LR^9^ÿòÿò% %‹ ‹´Ùô¼ÿÍãVýç^33+‹+‹ÿÝ‹é‹% ͺyÿ“7yÿ“77\7\7\7\7LRLRLRÛwÛwÛw9HRP}š;¬dÉšÿ×L# +{ÿÓ3ÿú²3å\ã¼ÿÍÝ7ÿú´Ù´5‡5J5!Á‡Á‡Á!3\B\7 +–Vf^–Vf^^ã\‹éÿÙoLÑR‘5T…1ÿõÿ+   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóõôöøùúûüýþÿ     sfthyphenperiodcenteredEuroc6459c6460c6461c6462c6463c6466c6467c6468c6469""""zƒýÎæF“½=r—ô8±<À9Û0© 9 ‚ é % F  Ÿ | Ü * r ´1‹²ñ‡µcçO¤-§0ZþÄ3t±Ø1G‹ZðHÛ_׃ VÔ`™WÝ2Ô f Ü!{!ú"‡"÷#Ñ$µ%m%Å&”&«'O'‘'ž(E(R(_(l(y(†(“( (­(º(Ç(Ô(á(î(û)))")/)<)I)V)c)p)})Š)—)¤)±)¾)Ë**M*Þ+O+ò,,f-8-Þ.o.´//f/«0411v1­1ô2:2Ý3h3Ã4 4/44í5o5½67 7Ó8i8¶8Ò99…9þ:$:a::ñ:ñ:þ; ;;›)>6>C>? ?0?R?÷@‹@öAAEAŽB4BABNB[BhBuB‚BBœB©B¶BÃBÐBÝBêB÷C,CpDDYDÂEE¤EØF.FoF³GGSG`GmGzG‡GªHHÄHÑHÞI@IàIöJZJ³KIKºKËKÜKíKúLLL!L.L;LHLULbMM0MUMâNON¾O"OuOÎPP˜PÚQÒv Ä7ÿk9ÿ­:ÿÜ;ÿ·<ÿk»ÿkêÿk$&$&$&$&$7ÿk$9ÿš$:ÿÜ$µþð$·þð%ÿÜ%<ÿÜ%»ÿÜ%êÿÜ&6&&µÿÓ&·ÿÓ&ã&&ù&)þø)ÿ)þø)ÿ·)ÿ·)$ÿˆ)Xÿ­)bÿˆ)~ÿ­)ÿ­)€ÿ­)ÿ­)­ÿˆ)®ÿˆ)Çÿˆ)Éÿˆ.ÿ2.&ÿÉ.2ÿÉ.8ÿÜ.Dÿ·.Hÿ·.Rÿ·.XÿÉ.\ÿÉ.dÿÉ.gÿÉ.hÿÜ.iÿ·.jÿ·.kÿ·.lÿ·.mÿ·.nÿ·.pÿ·.qÿ·.rÿ·.sÿ·.yÿ·.zÿ·.{ÿ·.|ÿ·.}ÿ·.~ÿÉ.ÿÉ.€ÿÉ.ÿÉ.‘ÿÉ. ÿÜ.¡ÿ¤.¯ÿÉ.°ÿÉ.±ÿ¤.ºÿÉ.ÐÿÉ.ÑÿÉ.ÒÿÉ.ÓÿÜ.ÔÿÜ.ÕÿÜ.ëÿÉ.ûÿÉ.ýÿÉ/ÿa/2ÿÁ/7ÿu/9ÿk/:ÿ­/<ÿ</\ÿ·/gÿÁ/‘ÿÁ/¯ÿÁ/°ÿÁ/´ÿD/µþ/¶ÿD/·þ/ºÿ·/»ÿ</ÐÿÁ/ÑÿÁ/ÒÿÁ/êÿ</ëÿ·2ÿ­2ÿ­2&2&2;ÿÉ3þæ3ÿ3þæ3ÿÜ3ÿÜ3$ÿš3bÿš3­ÿš3®ÿš3Çÿš3Éÿš4&66ÿ·6ãÿ·6ùÿ·7ÿ 7þÜ7ÿ 7ÿD7ÿD7$ÿD7Dÿ)7Fÿ7Hÿ7Rÿ7Uÿa7Vÿ 7Xÿ27ZÿY7\ÿN7bÿD7iÿ)7jÿ)7kÿ)7lÿ)7mÿ)7nÿ)7oÿ7pÿ7qÿ7rÿ7sÿ7yÿ7zÿ7{ÿ7|ÿ7}ÿ7~ÿ27ÿ27€ÿ27ÿ27 ÿ7¡ÿ7­ÿD7®ÿD7±ÿ7ºÿN7ÇÿD7ÉÿD7äÿ 7ëÿN7úÿ 7üÿ7þÿ9ÿ9ÿN9ÿ9ÿÉ9ÿÉ9$ÿu9Dÿ}9Hÿˆ9Rÿˆ9XÿÜ9bÿu9iÿ}9jÿ}9kÿ}9lÿ}9mÿ}9nÿ}9pÿˆ9qÿˆ9rÿˆ9sÿˆ9yÿˆ9zÿˆ9{ÿˆ9|ÿˆ9}ÿˆ9~ÿÜ9ÿÜ9€ÿÜ9ÿÜ9 ÿk9¡ÿˆ9­ÿu9®ÿu9±ÿˆ9Çÿu9Éÿu:ÿY:ÿa:ÿY:$ÿš:Dÿ:UÿÜ:bÿš:iÿ:jÿ:kÿ:lÿ:mÿ:nÿ: ÿ:­ÿš:®ÿš:µÿÜ:·ÿÜ:Çÿš:Éÿš;ÿD;&ÿÜ;2ÿ·;dÿÜ;gÿ·;‘ÿÜ;¯ÿ·;°ÿÉ;Ðÿ·;Ñÿ·;Òÿ·;ûÿÜ;ýÿÜ<þø<þæ<þø<ÿN<ÿN<$ÿa<&ÿÜ<2ÿÜ<DÿD<Hÿ<LÿÜ<Rÿ<XÿD<bÿa<dÿÜ<gÿÜ<iÿD<jÿD<kÿD<lÿD<mÿD<nÿD<pÿ<qÿ<rÿ<sÿ<yÿ<zÿ<{ÿ<|ÿ<}ÿ<~ÿD<ÿD<€ÿD<ÿD<‘ÿÜ< ÿD<¡ÿ<­ÿa<®ÿa<¯ÿÜ<°ÿÜ<±ÿ<´ÿÓ<¶ÿÓ<Çÿa<Éÿa<ÐÿÜ<ÑÿÜ<ÒÿÜ<ûÿÜ<ýÿÜ=ÿšIÿÜIÿÜIÿÜI´Iµ^I¶I·^UÿDUÿUÿDYÿYYÿYZÿ}Zÿ}\ÿa\ÿ·\ÿab&b&b&b&b7ÿkb9ÿšb:ÿÜbµþðb·þðd6&dµÿÓd·ÿÓdã&dù&gÿ­gÿ­g&g&g;ÿÉÿÜ‘ÿ­‘&‘ÿ­‘&‘&‘;ÿÜ­&­&­&­&­7ÿk­9ÿš­:ÿÜ­µþð­·þð®&®&®&®&®7ÿk®9ÿš®:ÿÜ®µþð®·þð¯ÿ­¯ÿ­¯&¯&¯;ÿÉ´$ÿ ´9K´</´bÿ ´þÓ´­ÿ ´®ÿ ´»/´Çÿ ´Éÿ ´ê/¶$ÿ ¶9K¶</¶bÿ ¶þÓ¶­ÿ ¶®ÿ ¶»/¶Çÿ ¶Éÿ ¶ê/ºÿaºÿ·ºÿa»þø»þæ»þø»ÿN»ÿN»$ÿa»&ÿÜ»2ÿÜ»DÿD»Hÿ»LÿÜ»Rÿ»XÿD»bÿa»dÿÜ»gÿÜ»iÿD»jÿD»kÿD»lÿD»mÿD»nÿD»pÿ»qÿ»rÿ»sÿ»yÿ»zÿ»{ÿ»|ÿ»}ÿ»~ÿD»ÿD»€ÿD»ÿD»‘ÿÜ» ÿD»¡ÿ»­ÿa»®ÿa»¯ÿÜ»°ÿÜ»±ÿ»´ÿÓ»¶ÿÓ»Çÿa»Éÿa»ÐÿÜ»ÑÿÜ»ÒÿÜ»ûÿÜ»ýÿÜÄ&ÿ·Ä2ÿ·Ä4ÿ·Ä7ÿÄ9þøÄ:ÿkÄ<þ­ÄIÿ·ÄYÿÄZÿ·Ä\ÿ¤Ädÿ·Ägÿ·Ä‘ÿÉįÿ·Ä°ÿ·Äºÿ¤Ä»þ­ÄÀÿ·ÄÁÿ·ÄÐÿ·ÄÑÿ·ÄÒÿ·Äêþ­Äëÿ¤Äûÿ·Äýÿ·Å&ÿ·Å2ÿ·Å4ÿ·Å7ÿÅ9þøÅ:ÿkÅ<þ­ÅIÿ·ÅYÿkÅZÿ·Å\ÿÅdÿ·Ågÿ·Å‘ÿÉůÿ·Å°ÿ·ÅºÿÅ»þ­ÅÀÿ·ÅÁÿ·ÅÐÿ·ÅÑÿ·ÅÒÿ·Åêþ­ÅëÿÅûÿ·Åýÿ·Ç&Ç&Ç&Ç&Ç7ÿkÇ9ÿšÇ:ÿÜǵþðÇ·þðÉ&É&É&É&É7ÿkÉ9ÿšÉ:ÿÜɵþðÉ·þðÐÿ­Ðÿ­Ð&Ð&Ð;ÿÉÑÿ­Ñÿ­Ñ&Ñ&Ñ;ÿÉÒÿ­Òÿ­Ò&Ò&Ò;ÿÉáÿaá2ÿÁá7ÿuá9ÿká:ÿ­á<ÿ<á\ÿ·ágÿÁá‘ÿÁá¯ÿÁá°ÿÁá´ÿDáµþá¶ÿDá·þáºÿ·á»ÿ<áÐÿÁáÑÿÁáÒÿÁáêÿ<áëÿ·ã6ÿ·ããÿ·ãùÿ·åÿšè&êþøêþæêþøêÿNêÿNê$ÿaê&ÿÜê2ÿÜêDÿDêHÿêLÿÜêRÿêXÿDêbÿaêdÿÜêgÿÜêiÿDêjÿDêkÿDêlÿDêmÿDênÿDêpÿêqÿêrÿêsÿêyÿêzÿê{ÿê|ÿê}ÿê~ÿDêÿDê€ÿDêÿDê‘ÿÜê ÿDê¡ÿê­ÿaê®ÿaê¯ÿÜê°ÿÜê±ÿê´ÿÓê¶ÿÓêÇÿaêÉÿaêÐÿÜêÑÿÜêÒÿÜêûÿÜêýÿÜëÿaëÿ·ëÿaìÿkìKìÿkù6ÿ·ùãÿ·ùùÿ·û6&ûµÿÓû·ÿÓûã&ûù&ý6&ýµÿÓý·ÿÓýã&ýù& MH@ mþ Íýçýé  GÌþBGÌSf  €¯ JBits ûþšmãB²‹`#cÕVeraSansObÿÿÿÿ6ÿÿþ628I00@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              "                      "       #                       #     $               $    &              &    ÿÿÿð_<õº²Vúº¼”aýçþ mreportlab-3.5.34/src/reportlab/fonts/VeraBI.ttf0000664000175000017500000017335013544671343022160 0ustar rptlabrptlab00000000000000OS/2µ†÷GàÌVPCLT-´ôá$6cmap¤Ãè ½Xcvt sã…4Âfpgmç—ñÄ&d‹gaspö¤ glyfWkG»&ð–hdmx':ïá\HheadÝ®ÄËö°6hheal’à¨$hmtxz€W–ÀX,kernöì É$dlocaÿ<%XÇ maxpJDàˆ name2i+èpostø–xúÄ„†prep|餖 øk:: N : : Zf0À  – ƒ t ® & "  J @ " @ "  b : z ` . ¬ 0Ú & ´Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera Sans Bold ObliqueRelease 1.10BitstreamVeraSans-BoldObliqueCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.comCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved.Bitstream Vera Sans Bold ObliqueRelease 1.10BitstreamVeraSans-BoldObliqueCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.http://www.bitstream.com#/f3f¼é=ú;+ffTì}Íf¼ºå+–\9×//uüÍÙ“¸šì¸LfLššDDÍš;ËËÕÕP¬¬w /X²#öö/55ç3˜ÑXfåòsÕƒ+ÕÃá×åj-ÕÕð¨jìáÕ!føì¦ø#^Í`lj켺3B3\šáfy```{ìøÍÝÕj\{šÝ®º…®šXîššÑÍšPËË‹‹ðL`¨Á%Á!J–Jƒ7{ɨÁÁÁÁ–ì}3˜ÑXÍy9œbœ“¸¸s¸€@ÿÞþÝÜÛÚ:ÛþÚ:ÙdØ»×þÖÕÔþÓþÒþÑþÐþÏÎÏþÎËÊ}ËþÊ}ÉÈŒÉþÉÀÈÇYÈŒÈ€ÇÆ&ÇYÇ@Æ&ÅþÄúÃþÂúÁ Á€Àþ¿ú¾}½>¼þº¹,ºþ¹,¸þ·¶G·}¶Gµú´þ³þ²þ±»°þ¯®þ­¬ ­þ¬ ¬@«ª «2ª ©ú¨Y¨þ§ú¦ú¥Y¥þ¤þ£þ¢ú¡ ¡d ŸhŸdž@ÿ%žú%œYœú›š›š™š™˜— ˜ — –•%–ú•Y•%”“”&“’“’‘Y‘Ž»þŽ]޻ހŒ%]@Œ%‹þŠd‰X‰þˆ‡†:‡ú†t†:…„…2„ƒ„ƒ‚ƒ‚ ‚ €Y€þþ~}|þ{þzþyxwvtvúutuútYtsYs}rþq&pþoþnþm @ÿlþkjkþjj@ihiúhYhgYgúf\ feþdc»dþcb]c»c€bW%b]b@aþ`_.`þ_.^Y^]\ ] \ [Y[KZYZþYXYXW%VþUþTþSþRþQþPO%P–O%NMþLþKþJúIúH H@FE¦FþE¦DCDúCC@BdB@A}@þ?>,>,=ú<þ;þ:þ94 928þ7265 6@ÿþ5 5@43 4 3 2þ11}0/0d//.þ-ú,+,K++**K)()(' (' &%$%2$#"#"!%!ú   2@   @:–%dþdþ:–%:þþ%K  þ þ  –  @úd:@  @¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °àEDY!-,°%E`D-,KSX°%°%EDY!!-,ED-fþ–f¤@ ÞÞQ/ÄÔì1ÔìÔì0!%!!füsüåþ–øòr)Õ Y@.   :UTS ÔäôÄÀ991/äüì0KSXíííí9Y"!!!!°iqƒþþlhEþ—ÕýÃþ^¢ýÌþœÃªhÕ@VSüüÜì1ô<ì20###híËíÕýÕ+ýÕ+…=¾P@6 Z Z W   ôÌ91/<ä2Ô<<ì22Ô<<ì220!!!3!!!!#!#!7!!7!þøF+`aÝa)5þ×E)6þÙ`Ý`þø`ß`þã5Fþå5`hþîhþþÕþî×þþ×Õ7þÓ !(/v@C# ")^] ^][* [!*)#"&- !&-& - & 0ÔìÔìÀÀ9999991/<Äì2ÔÄüôìõî9990#&&'&&54$773&&'6654&T¢;Ú]1`Ùx=Ò¿+ÿ,¡+e¼X1?¿w9ÕÍþÓþî3TdA§7ckIþÓ-+&7=7¡Çõ åã"þ%/þà$¢†Üú DQ=07þ³þãVK39qÿã“ð '3M@+e .e"a(ee a`d4+%   1  + %4ÔìÄüìîþî991ä2ô<ììîþîî0"32654&'2#"&54#3!2#"&54"32654&Vo=>Wn? ½þ÷Ö½ ü±õÓõûkœ¾þõÖ½ ·Vn==Wn?h¨…WW¨‡UW¨«Œàþê­ÞüÓ ¬ŒßþêªÞ¨©„XYªˆTX9ÿãð&0@[   0'0%&$''0:0' - -iYf!gd` '*$ * 0$* 1ôÄìÔìî999991/Æäöîöîî99990KSXí9í9í9íY"²]@`  * 9 K K'[ \'bm n'   &0' ' +'+0;';0III H H'J0ZZ\ \ \\#X'honki i l0$]] >7!!'#"$5467.54$32.#"3267m)>Z7+ŸxþJTvì{õþÖ¿É.ï[¿e5WžOVd<óPS˜r54&#"6$32ú‰7ûÄ8{hmpe_ê“@ˆ€ä þðþåßP¤MRZKN=21Ū’ðÌÿãð(i@,s ^ x s ^xsw#d`)   & /ÔìÔì9991äôäüôìþõîî90K° TK° T[X½)ÿÀ))@878Y!"&'32654&+732654&#">32Çq~þwþ¨‚ëh9YÒi©Å–—™1¢·yUÈl7våpýÿ±%žsøþá%%)49kYYøraLP,* ¨¦•ÇÿþÕ ¡@;         : uS    ÔÔäÀ991/äÔ<ì290KSXííííÉÉY"K° TK° T[K° T[K° T[X½ÿÀ@878Y·K]] !!3#!!Lýíšo¶¹Õ5Õ5þ“6ý`Aýš®üRþéþðJÿã'Õ’@9:^]]sys vS `  ÔÔìÀ9991äôìîöþäõî90KSXíí9Y"K° TK° T[K° T[K° T[X½ÿÀ@878Y!!>32!"&'32654&#"j½7ýv-,_0åþrþ«}ìt;oÑlž¾|TÃtÕþåç ѹþÚþ§12/HD¥†`q+-fÿáHî 'r@! ^ ]sss%d`(  (ÔìÔìÀÀ91äôìîÖîõî90K° TX½(ÿÀ((@878Y@```` ` ` `````` ]"32654&.#">32!"476$32år’ZPq“X6V¢QºæN¥]¸êþ—þäÿþè|pxGÌ^²á¼”Yc¹`fÍþì,,ȵ31Ú©þìþŸ!Ìs†  Õ3@:vSÔÌÄ991/ôì0KSXííY"!!!'f-üÁþý<ÕÛûº-ÿãFð #/t@$ *ssw$sd`0- ' -!0ÔÄìÔìÔìî991äôìäîî990K° TK° T[K° T[K°T[K°T[K°T[X½0ÿÀ00@878Y"32654&%.54$!2!"$546"32654&°ufXwœgþ²lkM&쵨ztþ™þÇ÷þíÓ3f{YIf{YœŸtSauSb-eËè° ŽÊ-/žyæþôŰŸïwbDTwbESTÿá7î'€@ ^]s s "sd`(%% (ÔìÔì91äôìÄîîõî90K° TX½(ÿÀ((@878YK°TX½(@((ÿÀ878Y@o o o ooo$o%o&o' ]73267#"&5!2#"&2654&#"T5W¢QºæM¤]·êiÿ|qxþ»Ì_´r’WQq•X!-+ȵ31Ú©aþßþøËþ‡ í¼“[bºŒ`fT–`N@(:TzTÔäÔäÀ91/ìôì0KSXííííY"!!!!-iJþ—ChLþ˜`þ}þ¦þ}ÿ¸þÝ–` Z@.   :TpTz   ÔäÄÔäÀ991äüìî0KSXíí9ííY"!#!! h;þÀÕ¬ÉiJþ—ƒþÏþ‹uþ}Ù=ÛÇ@|{ÔÄ291ôì90 5Ûü<ÄúþÍþ´þ¶úÏìÏÙ'ÛÛ@ o}oÔ<Ä21Ôìüì0!!!!ÙúþúþÛëÜíÙ=ÛÇ@|{Ô<Ä91ôì9055ÙúþÅÍúþ1ìþ1úJÕoð!€@I !:!  Y]iUTd  ! "ÄÔì999991/äüìþôî9990KSXí9íííY"!!!766776654&#"6632hFþ˜Ëþ—WƒJOHQLPÉs>ÒaÂÜj€LP9dþœø1P}f:=j69=CB:*(«•w¼f<>M+\þ j  L]@5IM-.* LF~*1~!=WM -.L C'7MÔììÜìî991ôììÔìü<<Äì2ÄîÄ9990"32654&#"&543273654!"!267#"&'&5476$32!"#"&' j˜QMj”P'-–Z¤ÅS}Ë…—Ëþ·þùÄþ¯v\`Kvçhm’þ⎇úbŒ‘xr’›í¦oirþgþ´!Ò‘TXÉ’V^ýÕKS½§ÝBTE…ýK¿Õ˜nþøŽþóþ«WSžbbRMl>ɰH‰°½]\Yï‚þÅþvÿ{‡Õ ž@A     : uS   ÔÌ91/<äÔì90KSXííííííííY"²]@  + / ? ¿ ¿   + ) †]]!!!!!îý¬”þuL¸þ’þ‘ZþðÕú+?+˜Õ h@::€…€S €   !ôäÔìÔì9991/ìôìôì90KSXííííY"2654&##2654&##!!! 3gtQL×>e„ŽbeãL¬bkþ™þ»ý#A ÿ–“h[;>þÄýs~vKHþy•nñþñÕœ£‰ÏJÿãËðJ@ uu d` ôìÀÀ991äôüÄþÄ990@  ))]]%# 476$32.#"3267ÙŠþrþÓþ˜roƒqÕtêy>`ÂoçþÈÀ©eãF12J³=ƒš¦78þËIDþœþõ¬ÄIN+JÕ@@!  :‡ S‡   ôäÔì9991/ìôì0KSXííY"3 4&#! !!˜³Š :ÍÊþ/•""`ab§—„þ£þ–þj²üq.®²#EQQç’Ëþ™zm\+\Õ T@/    :‡…‡S‡    ôäÀ91/ìôìôì0KSXííííY"!!!!!!N9ýs6g:ýšB¢7ûÛÕþÝþêþÝþªþÝ+\Õ O@+    :‡…‡S  ôäÀ91/ôìôì0KSXííííY"!!!!!N9ýs6g:ýš{þÕþÝþêþÝý‡Jÿã9ð h@6  : €uu d`!  !ôìÔÄ2991Ääôìîî99990KSXí9íY"%# 476$32&&# 3267#!s’þƳþÂþ”rqŠwñ†„;zévþþþ¼½¬8p99ë1VoGECµ=ƒ ž87þËGFþ¨þò³Æ"+‡Õ u@A     :‡…S    ôäôä91/<ô<ôì0KSXííííííííY"!!!!!!No8nþÝþ{ýÉ{þÕýÇ9ú+yý‡+ÏÕ6@:SôäÀ91/ä0KSXííY"²]!!NþÝþÕú+þ¬þfÏÕ g@%  : ‡S    ÔÌ9991äÔì990KSXí9íY"K° TK°T[X½ @ ÿÀ878Y!!#3267Nþú:þ­þ¾N9  :S  ôäôôÄ9991/<ä2990KSXííííÉÉY"²]² ]!!!!N®VÉlþÝþRþªÈþ“Õûö ú+ ûöJÿãƒð ;@ uud`! !ôìôì1äôìî0K°TX½!ÿÀ!!@878Y4&#"3267> # 476$쟗Èþñžs³?ø qÈRn{ojaé*kþÏþðåþ‘4Ÿ—Èþñžs³?=Qû·EŸ›þµþõþÆþ'lþºœ°¸þ™þò¬¾a_[ä+{Õ@H    : u u S      ôäÔÄì99991/<ôìÔì9990KSXíííííí9Y"²]´ ]2654&+ !!2!.#ðƒ‡]dŸL3oþ#9öþÈ«Nh'þp"a\?zvJEþþöýËÕ¸³µêƒþXsoSÿãRð'@;    : ˆuˆu%d`( " "(ÔìÔìÀÀ99991äôüôÄþõÆ90KSXí9í9Y"²]@Œ9 9 9 9 9 99999 9!I I I I I IIIII I!YZ Z Z Z Z ZZZZZ Z!m m m m m mkkmmmmm m!y y y y y yyyyyy y!< )```` ]].#"!"$'32654&/.54!2R>qÜi¡GožÆ¹þþÉ‘þá‰=…ûz„¥J}®ªe.yÿ¦þÄ87ZP39'2½–óþÚ65EMLlT7= '+º”é%büÕ`@:‡SÔôÄÔÄÆ991/öî20KSXííY"K° TK° T[K°T[X½@ÿÀ878Y!!!!œ`9þêþêþÕþÝûN²‹ÿãTÕg@:     : ‡` S  ÄÀ91ä2ôì90KSXíí9í9íY"!3267!! $5467N® ihŒ–$®®Aþ•þ®þ÷þì Õü‚0Jba»üþ¶þ×ãØ$Y;œ¸Õq@':SÔÌ91/ä290KSXííííY"²]@%5)76 ]]!!!œn·jüµþ5Õû¤\ú+Û %Õ @J        : S    ÔÌ91/<ä2290KSXííííííííY"K°TX½ @ ÿÀ878Y@j       / / ? ? O O YYY Œ      &%#' 637 0 BB UZVPP €€€€€† ‚ !]]!!!!!Ûd.Õn1Åý}þL2þþBÕûÃ=ûÃ=ú+oû‘ÿ˜Õ ¿@I   :  S   ÄÀ91/<ä290KSXííííííííY"² ]@4  -$ <2 LC    '$' * 79 : DHG ]] !! !!ønþyóþKþaŸþž‰æ™¢ôý ôþ þ×þ+ÕyÕx@5:S  ÄÀ991/ä290KSXííííííY"²]@  D]]!!!þ¼½ýyþyÕý×)üšý‘oÿËìÕ 9@:‡S‡   ÔÌ91/ìôì0KSXííY"!!!7!è0ü8%:úì-ËýÕîü<þÝîÄÿìþòºF@":‰l‰kÔäÔÄÖÆ991üìüì0KSXííY"!!!!Nl-þêþó-ý–áú á‘ÿB5Õ@ SÔÄÀ91ôÌ03XÇÞÆ¾“ùmÿÇþò–@@:‰l‰kÔÄÔôÔÄ991üìüì0KSXííY"!7!!7!3ý”+ þç+mþòá`áϨåÕ@ SÔÌ91ôÌ290##ÕñþfþgòÕýÓ-þÓ-ÿìþÿµÔÌ1ÔÌ0!ûØáþþ îøf2@ ‹ŠÔÌ91ôì0K° TK°T[X½ÿÀ@878Y#'ÑÅþÙfþˆx#ÿãã{ +ó@c        : "  –”g#‘"g&`  )#"),ÔÄìÄ9991/äôüôìîöî99990KSXíí9í9í9í9í9Y"²;"]@83!0"C!@"S!P"c!`"”!"¤! "´!°"5":#:$K#K$[#[$k#k$›#›$«#«$ ]]"326?%!7#"&54$!37>54&#">32¢†‰QGn”ƒ}þšXÄsŸ»K8Ó}{oÐa6pë~ùò øSQ=F…y)‡ý¦d_¥ŒÖã BC..«¯"Q?ÿãj Œ@K  : ii`k    !  ôäÔì9991/ìäôìî990KSXíí9í9íí9í9Y""32654&!!6632#"&?НcX‡°_þ.!þ™.huR´k½ÜMH[åƒs¡wÿÌ\iûÄfký+¢ý¨b]ðÏôd~‚]Lÿã¦{3@‘ ˜ i‘˜i`  ôÄì9991äôüôìþôî0&&#"3267# $5476$32¦9HŒC¯ÞŠ~T¢I7Y´[þøþãibm¸U¨=þÜ02ë·u21þÛíÚ‰gqnJÿãË Œ@K  : ii` k    ! ôìÔä9991/ìäôìî990KSXí9ííí9í9í9Y"%2654&#"!!7#"&54676632uŠ­aWˆ°_ÓtiþÑþ—!R´k½ÜMH[åƒs¡çþÍ]hûÄfkÕXùì¢b]ðÏôd~‚]Jÿã{'H@(œ ‘ ˜g›$g`( ' !  (ôìÔÄì99991äôìäþôîî90!3267# $54676$32%6654&#" üºƒƒqûŠ7ƒþý†þúþã[Wg¯ã þ¢`Ri“'9mlDCþê0/òÝ€ñdx|òÍ(Yo  P^spfR©@<      : igkz     ÔÄÀ991/ä2üìî2990KSXí9íííY"K° TK°T[K°T[K°T[K°T[K°T[X½@ÿÀ878Y@ ``pp]#"!!!#37>3R/ÅKE /1þѨþ˜¨±2°%êØë7COÿü `Nº¬)þFuy+¤@Y+* )'&(  :& &‘˜g i zž&i)#! ,ôÄì99991/ìääôìþõî99990KSXí9íí9í9í9í9Y"%#"&546766327!!"&'3267"32654&XV²i¾ÝMHXäƒv¡7i½:þ„þ®hÁ^5UªY²¿!T„¯^Zƒ°^¾b\õÔqãdy\c¦ü3þÓþà !65˜¦î´fkí±hm?;@L   :  Ÿk  %#  ôäôì9991/<ìôì99990KSXíí9í9ííí9Y"²0]!>54&#"!!>32)…þ™q GAoŸlþ™.hucÈm›¨ ªýVH9O@F­™ýÙý¨a^¢“ N?ÕX@(:¡zk  ôÄôäÀ91/ìôì0KSXííííY"² ]²o ]!!!!hÛþ™.h9þ—`û þÜþúþFÕ •@:     : ¡gžz k   ÔÔä...ÀÀ9991ìäôìí990KSXíí9ííY"K° TK° T[X½@ÿÀ878Y´o]!+73267!!h×.ûÕ²-?e]+h9þ—`û´ëãë[ˆþÜ?º ¾@A      :zk   ôäÔÄ91/<ìä90KSXííííÉÉííY"²]@<     )EQXcwpvz—§  *ESdpus§ ]]!! !!mh¤ã¦ýuÙþgþ•^þ™üµ—ýúý¦ãþ?Õ6@:k  ôäÀ91/ì0KSXííY"²]!!mhþÑþ™ùì?ß{+ÿ@x !    "#$# !$#(')&$#%$$#:!  &$ Ÿ)$z" %"!$  &$ %% $# ,ôÄÔüÔì99999991/<<äô<ì299990KSXíí9í9ííí9íí9Y"²]@#     /-]>32!7654&#"!>54&#"!!>32SÓr–­ …þ—q?6glþ—s >7c•lþ™Úh!T¾gt¦¦gn¥M1ýVH|#7@©ýÙHKM8?¯—ýÙ`¤_`w?;{“@N   :  Ÿz  %#& ôäôì9991/<äôì99990KSXíí9í9ííí9Y"²0]!>54&#"!!>32)…þ™q GAoŸlþ™Úh!cÈm›¨ ªýVH9O@F­™ýÙ`¤a^¢“ NJÿã5{ )@ii ` !)! ôìôì1äôìî0²p]"32654&2#"$54676$‹´a]‹´a@úZVfþê«÷þã\Vd{üÃjoýÄinþÛïcvxþÛ~ñdtxÿìþVj{–@M:ii`¢z !   ÜäÔì9991äääôìî990KSXíí9í9íí9í9Y"²0!]%!!>32#"&"32654&Çsþ˜-h!R´k½ÜMH[åƒs¡AНcX‡°_¢ý´ ¤b]ðÏôd~‚]7ÿÌ\iûÄfkJþVu{‘@N:ii`¢z  ! ôìÔä9991äääôìî990KSXí9ííí9í9í9Y"7!!#"&546766322654&#"îiþÓþ—sP´k½ÜMH[åƒs¡þ¿Š­aWˆ°_¼¤ùöLb]ðÏôd~‚]üÉþÍ]hûÄfk?\{’@6       : ‡ z   & ôäÌ91/äôüÄ9990KSXíí9í9íY"² ]@#    @@@@@@``````].#"!!>32%Z4‰µ fþ™Úh'GÕ‚0!/°¦ýü`Àjqÿã{{'¯@9    : ‘˜g‘˜g%`(  ,*"(ÔìÔìÀÀ99991äôüôìþõî90KSXí9í9Y"K° TK°T[K° T[X½(@((ÿÀ878Y@i j j jjj j!````o)vv]].#"!"&'32654&/.54$!2{5iÐ]js@^AÙ®þÎþísð}6aÝtqr@dAÀ¤sß=þê2473$ .‘ÃÛ$$9:64$( (œŠ»ÊXž¢@>  : iz i  ÄÀ9991/Äìô<ì2990KSXíííí9Y"K° TK° T[K°T[K°T[K°T[K° T[X½@ÿÀ878Y²)]!!;!"&5467#3á=n3þ’\=H¹3þÓ¢ª\°1²>žþÂÿþ& .(ÿˆ€@!Û>{ÿãs`Ü@M    :  Ÿ` z &%ÔìÔä9991/ä2ôì99990KSXíí9í9ííí9Y"K° TK° T[K° T[K° T[K° T[K°T[K°T[K°T[K°T[K°T[K°T[X½@ÿÀ878Y²0]!3267!!7#"&546‹ƒgq FAo lgÙþ—!\Êp™¨´¬ý¹9P?F¬™'û ¤a`¢”#Nm`¢@&:zÔÌ91/ä290KSXííííY"K° TK°T[K°T[K°T[K°T[K°T[K° T[K° T[K° T[X½@ÿÀ878Y@€€FVffj‰‰]]!!!J‘¦kýnþ…`üòû ²j` Ð@F     : z    ÔÌ91/<ä2290KSXííííÉÉÉÉY"K°TK°T[K°T[K° T[X½ @ ÿÀ878Y@(I   %% GHF W fh xty ]]!!!!!²J'R)P`þþ„%þªþ`üþýû üþÿ¬^` ÿ@I     : z    ÌÀ91/<ä290KSXííííííííY"K°TK°T[K°T[K° T[K° T[X½ @ ÿÀ878Y@N  (%)+ 1GJ €  ((')+* 65GEGFG G G kch i € ]] !! !!Åþ×t¦#…þ8þ‹°þ¾þ{=#þ´LýßýÁbþžþF`Ç@C :  gžz   /Ì91ä2ôì9990KSXííííí9íY"K° TK°T[K°T[K°T[K°T[K°T[K° T[K° T[X½@ÿÀ878Y@   H]]!!+7326?‡Ršý;wÊ Ù%qXa&!`üøû6Ïë;J<ÿî°` x@,,:izi   ÔÌ91/ìôì0KSXííY"K°TK°T[K°T[K°T[K°T[X½ @ ÿÀ878Y@)&/ ]]!!!7!ßÑ1ýFC1ü/¼ýÕ`úýšÿúfÙþ²Z0³@g0/.-,+* $%&'() "!# : 1 #)*‰‰‰k110-*)&#   1ÔÄÄ99999991üìÔìÔì99999990KSXí9í9í9í9Y"#"&546776654&##7326776633#"3+Ú³µ%[u@->ƒ'%éÛÙ+F‹g!vrPJ Qtmá{{<(Á7XHßt–ÍÁ¯áWަœZMC(¦.0C4þç¶Ôì1ÔÌ0#çãøZþ²Ù0¼@l+,+0,,+ :+1''%,'‰%‰/‰k1'&0  /0+",%(&01ÔÄÄÀÀÀ9999991üìÔìÔì99999990KSXí9í9í9í9Y"32677667&&546776654&##73233#"##…FŒg!wsPL !QtC+Û³³']t?-=ƒ%%êÛÙmY¦›ZND-¦*2D3áz{="Í6XHßu–ÀÁ°Ù²ÛR#@ o oÔÄ1ÔìÜìÀ990#"'&'&'&#"56632326Ûj³`k›^X¬bk²`k›^V©RôPE:=MSôPE:=Kÿÿÿ{‡k'$Duÿ{‡m !Ó@P!!    ! !:! u W " !  "ÔÔÔÄÔÄ99991/<ÄäÔÄî9990KSXííííííííY"²]@2!!!-!9!?!Y!‹!º!¿! ! !(* +!‰!¹! ]]32654&#"!!!.54632!M66MN56Mhþ’+ý¬”þu9§vu§ý‹‘ZP6MM66MMÖúPþð²%M,u¨¨u0MüL?ÿÿJþoËð'&Ý–ÿÿ+\k'(uÿÿ+‡m'1uuÿÿJÿãƒk'2¼uÿÿ‹ÿãTk'8muÿÿ#ÿãf'D´ÿÿ#ÿããf'DC´ÿÿ#ÿããf'D×´ÿÿ#ÿãã1'DŽ´ÿÿ#ÿãã9'DØ´ÿÿ#ÿãã'DÜ´ÿÿLþo¦{'FÝçÿÿJÿã3f'HãÿÿJÿãf'HCãÿÿJÿãf'H×ãÿÿJÿã1'HŽãÿÿ?Ãf'Öÿsÿÿ?f'ÖCÿsÿÿ?Pf'Ö×ÿsÿÿ?R1'ÖŽÿsÿÿ?;9'QØÙÿÿJÿã5f'RÁÿÿJÿã5f'RCÁÿÿJÿã5f'R×ÁÿÿJÿã51'RŽÁÿÿJÿã59'RØÁÿÿ{ÿãsf'XÙÿÿ{ÿãsf'XCÙÿÿ{ÿãsf'X×Ùÿÿ{ÿãs1'XŽÙNÿ;Õ [@0:¥£S ¤   ÔÄÀ9991ä2ôìî20KSXííííY"!!!!!7!çJJ!-þßÑþ·Ïþß-#ÕþƒîûÑ/î²dLþ @¦§¦  -.-Ôìüì1Ôìüì0"32654&'2#"&546HdcIHdeGBz0/11-0|D¿Á\dHHbcGHd¢3/0xDCy-03¿Á‰þÇá˜"a@8  ‘˜ ‘˜ i i #   #ÔìÀÀÀ991ÄôìÄÆüôîõî99990&&##667#&&5%3åf{94p9K‡@ €YŸG8HœU7¢7Éçl(7¢7D’X.Ñ€Jm5þÜ20ýh10þÛþâ"é¶#’"#þá‡ð}@E  :^] gsd s  ÔÄÀ99991/Ä2ì2ôìî2õî990KSXí9íííY"&&#"!!!!3#737$!2‡7;ŒG}Œ!u-þ‰@3û•4á?À-Â!4.\°ºþâ%({…ªïþºþö Fïªùÿ¼ÿ=ôð3?‚@F@1:4%  $+¨¨1d@$7! =%+.47! :=(!11.=070.(@ÔÄìÔìÄîîÀÀÀ99999991ÄôìþÅÅ99990&&#"#"&'732654&''&&5467&&54$326654&ô+Z=P^19Z¯€š“96þæìT´_0f =Ma0O‡wp“42ÝS¬þ!PUa£PXr¶ã(&=22)N—o{¾:$X6¢Çí++?0/%=6“f{¿;)\5œÉýƒY>=V@[8=]'‘ö`·© 2Ôì1Ôì04676632#"&'&&'535‚IIƒ245633ƒJI‚326úJ‚235624IJƒ336633ƒ˜ÿ;ÓÕ c@.  :S  ÔÔÄÔÄÀ99991Ä2ôÄÌ0KSXÉÉÉÉ9Y"!###&&54Ëþ¸¾+½þÓ¼¤¨¶9ÕùfùùN¸”×?ÿãT7ª@^&% %&%67734257:5,& % 2gg2gk`667&%)"/ 57) ,/), "/, 7 8ôÔÄìÔìî9999999991/äþîþÕî990KSXí9íí9í9Y"6$!2#"&'732654&''&&54676654&#"!*5âë—²f =TNþêäN—J18o4Rd.M=C<·­ROfu×þ™ZàÚ°ª0I]H7H+;‹[ÁïôL=(A7+/e?ŠÆ1CFkpû´åÍ 4Lb@8-*+'®0®!«¦5­ ¦2+«A'*,$0-+$!1837$4-;6-34GMÔììüìüìî299991/ì2îþîüîÖî9990"32676654&'&&#32654&'2#'&&###2#"$'&5476$yÐWWWWWVÑy{ÎWWWWWXϲ##NOM+°®i`)Goåk&: Õ1˜mmllmmþù˜˜þùmmllmm3WWWÏzyÏWVVUWWÏyzÏWXVþÙÏ5442ŠwyVpP:ÝÕNAþœD7nmmþúš˜þûmmnnmm˜šmmnåÍ1IH@(  ¯¯«¦2­&¦«>7,- 486 -9DJÔììüì2ìî1/ìîþîüþÅþÄ990&&#"3267#"&54632'"32676654&'&&'2#"$'&5476$+9o9q~r@s.Aƒ>ÓþþÓE€îyÐWWWWWVÑy{ÎWWWWWXÏy˜mmllmmþù˜˜þùmmllmmf×%#€rs~$#ÕêÂÃé·WWWÏzyÏWVVUWWÏyzÏWXVšnmmþúš˜þûmmnnmm˜šmmn'“RÕ v@>  :  ® S ;: : ;:ÔìäÔìÔìä91ô<<ì2Ô<<Ä9990KSXÉÉÉÉY"73#######5ww㪉L‰¬q®¬¬Õããý¾µÿþKBþM³ÑîPf\·‹ŠÔÌ1ôì0K° TK°T[X½ÿÀ@878YK° TK° T[X½@ÿÀ878Y@ ))<<LL]!#+%þJÉfþˆ7;ß1u@ÔÜÔÌ99991Ô<Ì20K° TK° T[X½@ÿÀ878Y@*    0000 ////????]]3#%3#fî1ì½ë1ë1öööÙÿöÛ =@!   o} o  Ô<Ä291Ô<ì2ü<ì2.À990!3!!!'7#5!7!Ùü•‘ëþ^®Püêü–’쨰ý¨Û1}´ëÜíþϲíÜÿ`“Õž@M  :‡ u‡ …S ‡ ÄÀ91/<Äìôäìîî90KSXííííííííY"²]@ %%] !!!!!!!!!Ùþ‰ywþ´9ýs5f9ý™A¡7ûÛDþÙþÕýžbþÝþêþÝþªþÝ^þ¢ÿ ÿ²++ (6@D(76) ,&# ,'#,u#ud#`72'76) 2 2&(2 7ôìÔì.À99999991äôìîÀÀ99999990@‘             ! . / 0 1 2 3 4 5 6@@@@@@@@@@@@@@ @!@.@/@0@1@2@3@4@5@6PPPPPPPPPPPPPP P!P.P/P0P1P2P3P4P5P6H].#".5476$32%#"&''3267>54'&'¬(zRÊþóþ¹**nkaé”éXfþþ--oj‚þœç“ì\üf{'zNs³?a_\åt5úé /B@#  $'!±-²±!°0 $<*<0ÔìÔì99991üìü<ìÀ999032654&#"&&#"326#"&546326632#"&¼+vIZqgLHwþñ+tKZqfMGz©DŸa‹Æ¯ŒZ™cGž_ŒÅ¯Œ[–1CDeOMeeCCdOMeia‚~ó³¼êq„~ò´½ënÙÛ .@³o³  o = = Ô<ì2ü<ì21/ìÔ<ìü<ì0!!#!5!!!Ñ ýöîýö ýöúþþžìþžbìbûêîÙÛ¨ '@  o ´ Ô<Ä2291/äüÌ90%!55ÛúþüúþîîîÆÑÑóPëNÙÛ¨ '@ o´  Ô<<Ä291/äüÄ907!!55%Ùúþúþîî´ôþ²ëþ°óÑ  Õ’@S  : µ µ  S    ÔÄÀ9991/ä2Ô<ü<Ô<ì290KSXííííííY"!!!7!7'!7!!!!!!þ:RþƒRþA'½þo%#×pÕþH%%þh;Æ þ` ÂLLÀþ ôýåÀLLÿÉþT\`&š@W   &#$"% : % Ÿ"`¢ z'&%  'ÜôÔÄ999991ä2äô<ì990KSXíí9í9íí9íY"!3267!3267#"&'#"&'7-hVRfxh‘'29b-Xc>—XJ]`þT ýu(INpu‹ý# úLROO/0þ;ÿçR)8@'! '!·* $$*ÔÌÜÌ9991äÌÜÌÎÎ9906654&#"#"&54632#"&54324&#"32þ;'#ÂS0@ºÒõþ»ÿ¶êï³e‹ID`IFa~¬qº9WzºC2Eqþ¾þèþ¨þGé·Ë Uór|þïÒtx)þw“Á 0@  ¹¹¸  ÔÄÜÄÄ91Äüìî990!!!!5Bü’lý’¥ú–ºý_Áþ÷ý{ýNþö¬²–þw²Á@»º¸??ÔìÔì1üìì20!!!!–þ¨ý”þ¨Áø¶)ù×ÿÝJD/@    ÔÌ991/<ÔÌ22990#!#!#"663J'°šþá˜î—þá˜7: Õ¼ÙDàüœdüœd>DÇœ3þ‹°,:@ *#¾½¿ ¾½¼- *(&  @A @-Üìüì991üììüìì9026732#"&54&#"#"&54632jcãìi‚RA@Ae '&>ÄkTF54&#"7>32/'üÑ\”p>5T‚VøB—e}‹÷óMLX®U#b¯KºÃ=ÈÄ9F,4qXTþ@}LFod› ,.##´€z3^u\ð b@à ÂÄÀÄd   DD ÔìÔì99991ôìüìüì0@,@@@OOOPPP___ JJJEEEXXX ]]2#"&54!!"32654&Ï·ÖþÙó¶Ú*þ©7&üÈXc‚FCc‚Gðµ™Ûþó·—ÙüMÈѹLP¸ŽKQ7îå>@  ËÉÅ  GFG F ÔììÔììÀÀ9991/<ì2üì990!!654&#"!!&5! Ë#ýŸ~„˲±Ë„~ýŸ#~zx89xzÿ#V¥Ëééˤþ÷UþÝy¤9yþ‡þǤþê#ÿã{ @JÔ@T7@5= ,&A Aœ–5&‘%˜"g5”) ‘@G=g›/)`KJAD76 ,:%&D5:@ 2:D2KÔìÔìÔÌ999999999991ä2ô<äü<ôìæþ<ôîîî999990@6; ; K K [ [ k k ­ ­ 2?0@B?@@R?P@b?`@’?@¤? @´?°@]]"326?>32>32!3267#"&'#"&54$!37>54&#">54&#"¢†‰QGn”ýÕußh•Ä9_Õ‚ß ü¼ƒƒpù‹5ƒþû‡­ìBu÷ŠªÀK<Í|xrÏ^¼aQi•%øSQ=F…y)JIMMIôÉ-\/9mlCDþê0/ghif¢Øã BC..‡  P^toÿÝÿššÇ$+{@@$,+%("(#(ii`,+#, %+ +" $+!! ,ôìÔì.À999999991äôìîÀÀ99999990&&#"&&54676$327#"&''3267‰E-Œ© þ×''[Wd¬h¬DÀa·))ZVeþç©m¯DÁ`E/«JïÖþø;‰L~ïduw..¨o¢;ŠOïctz12¬pøÙLÿåçÕ!‡@M !!!:UT Y] i` S"  !  "ôìÔÔä999991äôüôìþí9990KSXííí9íY"!3267#"&54677667%!!h VƒKPFPLPËr=Ó`ÃÝjLS8Žþ—FhÝ3P{f<=h69=DAþÆ*(«•w¼fK“Á@Ÿ/Î91/îî90!!!Éþºþ#-3úmVüªÁú?}‰Á' 4@     ÔÄÔÄ991Ô<Ì29077Á2þ¦+þZ%L1þ¦+þZ%'üåÞßqºsüåÞßqºu‡¶' 4@     ÄÔÄÆ991Ô<Ì29077%%77%%7u1Xÿ+¤#L1Xþþ-¤#‡þåÞßþºþþåÞßþº^ƒ y@=    :T     ÔäÔäÔäÀ999991/<<ì220KSXííííííY"!!!!!!%hKþ—ýÑhKþ—BhLþ˜ƒþ}ƒþ}ƒþ}ÿÿÿ{‡k'$Duÿÿÿ{‡m'$DuÿÿJÿãƒm'2¼uV ;Õ !€@8    :‡…‡ S ‡  !  "ôìÀÀÀ91/ì2ôì2ôì0KSXííííY"²]@ ## #0#`#p#€# ]#";!!!!!!# 476$3ôiŒÐLq‰ñÿkh9ýu8g9ý™A£9ûy7þ…þ`ìЀ;Ͳ/1Jú‡·­²þÝþêþÝþªþÝ.ò›zIFJÿão{ 3?j@:+( œ ‘˜g:i ›g4i.(`@ 1 +=1=17!" @ôìÔìÔÌ99999991ä2ô<ììäîþôîî99906654&#"!3267#"&'#"$54676$326632"32654&`Ri—%# üºƒƒpüŠ7ƒþüˆ›È:ZÖ‰ûþá[Ue¬ŒË@^ä‰ß ú‹´a]‹´aª  P^un¤9mlDCþê0/NRRNýÜñcuwQQQQôÉ(]BüÃjoýÄinÿðö²@ ÏqÔÌ991ôì0!! 3ü²þþÿðö²@ ÏqÔÌ991ôì0!! 3ø²þþçX7Õ f@4     :Ð S   H  ÔäÄôôÄ991ô<ì20KSXíí9íí9Y"!3!3Xþ¬7'Õ¨ý¬þ¬:'ÕªX`þ þã`þ –XåÕ b@2     : ÐS H  ÔäÄôÄäÀ91ô<ì20KSXíí9íí9Y"!#!#‘T7þÙÕ¨þT8þ×Ô©Õþãþ `þãþ `çXÕ9@:ÐSÔÄä91ôì0KSXíí9Y"!3;þ¬:'ÕªX`þ –XËÕ5@:ÐSÔÄäÀ1ôì0KSXíí9Y"!#wT8þ×Ô©Õþãþ `ÙVÛ® *@ÑÑ on IJI Ô<ìü<ì1ôÄüÔìî0!!!!!!Á3þÍ3þÍþúþ‹þËXþËìþ#îuv@A:ÔÄ91ÜÌ990KSXÉÉÉÉÉÉÉÉY" úþþôþ þ üÏüÇ9%ûÛûÓ-ÿÿþF1'\Žœÿÿyk'<uýÇÿãð¶dÔÌ1äÄ0#3þ¼õÓõ J=ÏÅ#/@H ! ! $ÓÒ!Ô*Ó Ò00   'LKM-L K0Üìì2üìì29999991Ôìì2üìì2À999990'7&&5467'766327'#"&72654&#"²Ï™ÏÑ™Ï0l=6l9ϘÏÏšÏ.j?:l¦[€\[€~ ÏšÏ1k??l.ÍšÏÏšÏ7n6?i/ϙζ\\\]~}‰×'@ÔÌ91ÔÌ907×1þ¦+þZ%'üåÞßqºN‡¦'@ ÔÌ91ÔÌ99077%%7N1Xÿ+¤#‡þåÞßþºfbÜ@c  : i¡ gkz  &N&Ôäüäôä991/<ä22ü<ìíî2990KSXí9íííííííY"K° TK°T[K°T[K°T[X½@ÿÀ878Yµ?]]!!!!#"!!!#37>3úh9þ˜hÛþš…/ÅKE /1þѨþ˜¨±2°%êØþÜû ë7COÿü `Nº¬fb´@L   : i gk z    N&Ôäüä991/<ä2üìî2990KSXí9íííííY"K° TK°T[K°T[K°T[X½@ÿÀ878Y´?]!!!"!!!#37>?#þÑþšþþ“KE /1þѨþ˜¨±2°%êùì)7COÿü `Nº¬ÿÇÿ;Õ€@F       : X £¥¤S       ÔÄ.À9999991äô<ì2þÖ<î20KSXííííííY"!!!!!!!7!!7!çJJ!-þÝX#/þßJþµIþà/!Xþß-!Õþƒîþ<îþƒ}îÄî¬`‰/@:TÔäÀ91Ôì0KSXííY"!!øhLþ˜‰þ}ÿºÿðƒ5@:ÐTÔÄäÀ1üì0KSXíí9Y"!#œT8þ×Õªƒþãþ `ÿºÿ ƒ b@2     : ÐT H  ÔäÄôÄäÀ91ü<ì20KSXíí9íí9Y"!#!#¶T7þÙÕ¨þT8þ×Õªƒþãþ `þãþ `qÿã 5ð #/3?Kb@7 eFe:a@e2e$a0*`42dL1C=3'!    - ! 'I 7 'C =LÔìÄüìÅîþîîþî991ä2ô<<ì2ì2îþîî202#"&54"32654&!"32654&'2#"&54#3!2#"&54"32654& Ûœ¾þö×½ ·Vn=>Wm>ü$Vo=>Wn? ½þ÷Ö½ ü±õÓõûkœ¾þõÖ½ ·Vn==Wn?«Œßþé­Þ¨¨…WW¨‡UW¨…WW¨‡UW¨«Œàþê­ÞüÓ ¬ŒßþêªÞ¨©„XYªˆTXÿÿÿ{‡k'$Duÿÿ+\k'(uÿÿÿ{‡k'$Duÿÿ+\k'(uÿÿ+\k'(uÿÿ+•k',ÿ¶uÿÿ+…k',ÿ¶uÿÿ+‰k',ÿ¶uÿÿ+Ïk',ÿ¶uÿÿJÿãƒk'2¼uÿÿJÿãƒk'2¼uÿÿJÿãƒk'2¼uÿÿ‹ÿãTk'8muÿÿ‹ÿãTk'8muÿÿ‹ÿãTk'8mu?`0@:z& ôäÀ91/ä0KSXííY"!!hÛþ™`û ÙîÝf8@ ‹ŠÔÌ991ôì290K° TK°T[X½ÿÀ@878Y!#'#!¶²œñÅfþˆáá9Š@"  ÕÖÕ Š ÔÌ91ôìüì999999990K° TK°T[X½ÿÀ@878Y@(         (]]'&'&#"#>3232673#"&{1&"4 Œƒ^$C%5"&4 ‹‚^"<T%E<‰“+C>ˆ”=XÙ,·ÔÌ991ÔÌ0K° TX½@ÿÀ878Y!!bw%ý‰¼TøFo@  ÔÌÔÌ91Ô<ÔÌ90K° TX½@ÿÀ878YK° TX½ÿÀ@878Y@   ]332673#"&546WŽVPQh˜"ÍœŒF AFGIš|yé;-1K@ ÄÀ991ÔÌ0K° TK° T[X½@ÿÀ878Y@  00//??]]!!1þí1öyײ @@Ò×Ò  KKÔìÔì1Ôìüì0K° TK° T[K°T[X½ÿÀ@878Y#"&546324&#"326²¥wx¥¥xw¥‡TABTUAATôx¥¥xx¤¤xATTAAUT-þo#@   ÔÌÄÄ991/ÔÌÔÌ0!#"&'732654&'Ë%"—‰1a3(Q&BL4X*hs œ9/E7%îf…@ ŠÔÜÔÌ1ô<Ì20K° TK° T[X½ÿÀ@878YK° TK°T[X½ÿÀ@878Y@-   0000@@@@]3#3#úþÉ®búþ¨®fþˆxþˆ–þoF@@  ÔÄÀÀ991/ÔÌÔÌ0@IIIIYYYYiiii ]!33267#"&5463ŽG41-%R+9Z'joJJP"&˜ EBA~5î9fP@ ‹ŠÔÌ991ô<ì90K° TK°T[X½ÿÀ@878YK° TX½@ÿÀ878Y!373ðþü·°œôÄîxããÿÑÓÕ `@6    : ‡S    Ôä.À9991/äì90KSXííííY"!%!!'%šeTiþ N¢7ûÛb h=Õýü—ÒÜþiþÝöJׇÿò¦ ›@1: k   Ôä.À9991/ì90KSXííííY"K°TK°T[K°T[K°T[K°T[K°T[K° T[K° T[X½ @ ÿÀ878Y´ / ]!7!'%˜hf¨dþÀ•þ—u‹` ýüNË‘üþVDˇÿÿÿãRk'6uÿÿÿã›f'VàbÿÿÿËìk'=!uÿÿÿî°f']àTþ¢ç˜@ Ô<ì21ÄÔÄÆ0##çããã˜ý öüý öÿümÕ p@:    :€…‡ S‡      ôäÔì.9999991/ìôìô<ì20KSXííííY"²!]3#3 4&#! )#3¸9ö3öF‰;ÏËþ0•""`ad©—„þ£þ•þk}Í3ͲþÕþüþ /®²#EQQè‘Éþ˜{m\ƒJÿãm,¯@c*+,+)(),,+&'&#$#%$$#'(&%&(#$#(( !"(:,+*)&%$#'"'i i`'k-*+,) %$'&#" + !! -ôìÔìÀ9999991ìÄôìî9990KSXí9íííÉÉÉÉY"&&#"32654'4#"$5!2''%'!%¾4f4Œ£d^Œ´õ@A[Weþé«ñþßl%1W$—þ#T‰`R#þ¬ç¼žmsýÆ (j\Ôt‚ódtxúÍ] ×l^Ætj^ÿÿyk'<uÿÿþFf'\œ+Õj@: :u uS  ôäÔì9991/äÔìÔì0KSXííííííY"!32##!32654&#N+öë WSYù¸ö9þBP̈‘ebÕß׿uÑOVNþÙáþ\‚zRVÿìþVj‘@L:ii`¢k  !  ÜÄÔì999991ìääôìî990KSXíí9í9íí9í9Y"%!!6632#"&"32654&Çsþ˜huR´k½ÜMH[åƒs¡AНcX‡°_¢ý´¾ý¨b]ðÏôd~‚]7ÿÌ\iûÄfkÙ Ûø·onÔÄ1ôì0!!Ùúþøì)´Û /@   Ô<Ì291Ô<Ì290 '7´þN²¨þNþN¨²þN¨²²3þNþP¨°þP¨°²¨þN²‰œ)ß …@0 OO:Ø Ø Ùb     ÔÄÀ9991ôìÔìî290KSXíí2Y"²]@   ))99JMMJJ]3?33!¨ÍféôÛ…Ïý9 4 1ýZ\œsðc@! Ø ÛÙdPÔÔì9991ôìüÄî9990@ 55YY…•••¥¥¥ –¦¸·]]!!7>54&#"7>32¨y!ý\nPNA:D“G$S•E•ŸlxD¨™ :c*(..,ºmdO•TRjð(t@- # Û ÛÛÙÜ#d)   PP& )ÔÔìÔì9991ôììüÄþÅî9990@        (°°°°°°]#"&'732654&+732654&#"7>32šKNêØP‘>!:w54&#"7>32#33?33!Dv ý^nQMB9D–G%S”F• lwû=õÓõùmÍféôÛ…Ïý¨¨š :a))0/,»mdO”Tþ— ýI 4 1ýZZÿãÓð(+6:@r*6,6)+),,6)O*)-2-+O2-4O2-3O22-: #)* .*Ø0Û ÛÛÙÜ9#d40,Ù7`2*)43+5:.120/-8   /-PP& 25- ;ÄÔÄÄÖîÔîÀ9999991/äîÄ2ö<îîþÄþÅîî299990KSXííííÉÉY"² (]@:)+*,(.9+:,9.Y)Y+i)i+         '[)l)°°°°°°]]#"&'732654&+732654&#"7>32 333##7!7#3¢LOéÙQ’>#:w3232673#"&j1!$4 ‰ƒ_%A#5$'5 Šƒ]&@!% @8€Š) =:€Š`îøö:¶ÔÄ91ÔÄ0K° TX½ÿÀ@878Y@ //]#h²æöþøçîÏöG@ ÔÄ991Ô<Ä90K° TX½ÿÀ@878Y@/// ]!#'#Û\˜ª¤ç³öþø¡¡3î öM@ ÔÄ991ÔÄ290K° TX½ÿÀ@878Y@//// ]!373þ£‰¬”ç²î¢¢Nîéö3@  ÔÌÔÌ1ÔÜÄ290K° TX½ÿÀ@878Y332673#"&5N QOHj™'Æ”ˆ’ö<7=6‡‡}ß!ö>@ ÄÀ991ÔÄ0K° TX½ÿÀ@878Y@ 0000]]!!/þíöö  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßà>: ~ÿ1BSax~’ÇÝ©À & 0 : ¬!""""+"H"e%Êûÿÿ   0AR^x}’ÆØ©À  0 9 ¬!""""+"H"`%ÊûÿÿÿãÿõÿØÿ ÿ^ÿCÿhÿüöüÛà–à…àVßjÞqÞ_Úï¿8ôüúúü (B¬£„…½–熎‹©¤ŠÙƒ“ñò—ˆÃÝðžªóôõ¢­ÉÇ®bcdËeÈÊÏÌÍÎèfÒÐѯgï‘ÕÓÔhêì‰jikmln oqprsutvwéxzy{}|¸¡~€ëíºýþÿøÖùúãä×àÚÛÜßØÞ²³¶·Ä´µÅ‚‡«˜¨š™î¼¥’”•ÍfÉɦ+Ñ…‘7qú9s螨ÿÉ/)´Ù ÿºR3 ^ìÿ;‘J‘X‘‘‘ÿþ‘‘f‘ ‘-‘T3T3ÿ¸´Ù´Ù´Ù¤Õ\1ÿ{+ßJ¤+w+w+‘J²+ú+úþ¬3++ö+²+ÍJÝ+ÍJ)+Ãub‹1œÓÛ+ÿ˜ËÍÿ˨ÿì쑨ÿÇ´Ïÿì f#º?¾LºJmJ{fº)²?¾?¾þúR?¾?V?²?JºÿìºJò?ÃÓX²{7d²)ÿ¬7¨ÿî²Ùì²Z´Ù1ÿ{1ÿ{ßJw+²+ÍJ‹f#f#f#f#f#f#¾LmJmJmJmJ¾?¾?¾?¾?²?JJJJJ²{²{²{²{N²‘‰‘ÿ¼'˜Á?'Ñ7´Ù®ÿ`Íÿ ªÃ´Ù´Ù´Ù‘ ãÿÉZ;¾)L–'ÿÝá3ƒXƒ^'7b#ÿݤL¦´ÙVL‘ÿé´Ù“3}3u^‘1ÿ{1ÿ{ÍJ VVÁJÿÃÿÃ'ç'– ç –´Ùô7ËVýÇJL}LNLfLfÿÇ ¬ ÿº'ÿº ¢q1ÿ{w+1ÿ{w+w+ú+ú+ú+ú+ÍJÍJÍJ‹‹‹¾?Ù=Téy-%–5HÿÑÿòÃÃÍÿ˨ÿîìÃÿüJË7ð+ºÿì´Ù´‰\R…‰…‰…Z‘Jº)ú+ÃÃßJ¾LßJ¾LºJR3 ¬‘ÿ¬+Ñ`ç3Nßÿõÿ   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóõôöøùúûüýþÿ    sfthyphenperiodcenteredEuroc6459c6460c6461c6462c6463c6466c6467c6468""""iŒò€øÏçEޏåÿ%J¡öbÕGÃ>lðq¯ö  < _ Ù  ì Y ° ÿ F ‡ õ M w Æm¤EŸøKÄ?H¨õ™n¤Üö+Mc‹Iĉígÿu¸$¡Ë‘NÎL·NÍhÎ W ÷!{!Ð"q"‡#,#n#{$ $-$:$G$T$a$n${$ˆ$•$¢$¯$¼$É$Ö$ã$ð$ý% %%$%1%>%K%X%e%r%%Œ%™%¦%ï&.&Ÿ''°'â(3(Ü)„**w*´++E+Á,¥- -D-s- ..§//8/[/•/õ0â1D1›2t2û3x3Á3Ý4+4¬5'5L5‰5Å6!6!6.6;6H6Å7Z7v7’7ä848c88Á99"9/9E9Î9ñ::µ;:;£;É;ö>u>™>ï?#?i?œ?õ@6@p@ÁA+A8AEARA_A‚AõB–B£B°CCC¥CÞD8D”E EÅF{G`GmGzG‡G”G¡G®G»GÈGÕHpHŠH°I5IqI¡J J6JlJ¥JÚK`ã R7þÓ9ÿk:ÿ¤;ÿ2<þ­»þ­êþ­$&$&$&$&$&ÿÁ$2ÿÁ$7ÿ<$8ÿ¤$9ÿu$:ÿ$<ÿ$FÿÁ$GÿÁ$Wÿ$Yÿ$Zÿ¤$\ÿk$dÿÁ$gÿÁ$hÿ¤$oÿÁ$‘ÿÁ$¯ÿÁ$°ÿÁ$µÿ$·ÿ$ºÿk$»ÿ$Äh$Åh$ÐÿÁ$ÑÿÁ$ÒÿÁ$Óÿ¤$Ôÿ¤$Õÿ¤$êÿ$ëÿk$ûÿÁ$üÿÁ$ýÿÁ$þÿÁ$ÿÿÁ%9ÿ­%:ÿ%<ÿ%»ÿ%êÿ&6ÿ·&ãÿ·&ùÿ·'&'<ÿa'»ÿa'ÄÿÜ'ÅÿÜ'êÿa)þD)ÿš)þ<)ÿ)ÿ)$þø)Dÿ)Hÿa)Rÿa)Uÿ)Xÿ<)\ÿD)bþø)iÿ)jÿ)kÿ)lÿ)mÿ)nÿ)pÿa)qÿa)rÿa)sÿa)yÿa)zÿa){ÿa)|ÿa)}ÿa)~ÿ<)ÿ<)€ÿ<)ÿ<) ÿ)¡ÿa)­þø)®þø)±ÿa)·ÿÜ)ºÿD)Äþ<)Åþ<)Çþø)Éþø)ëÿD*7ÿÜ*<ÿ­*»ÿ­*êÿ­.ÿ.&ÿ}.2ÿ}.8ÿ·.:ÿÉ.Hÿ.Rÿ.Xÿ.\ÿ2.dÿ}.gÿ}.hÿ·.pÿ.qÿ.rÿ.sÿ.yÿ.zÿ.{ÿ.|ÿ.}ÿ.~ÿ.ÿ.€ÿ.ÿ.‘ÿÉ.¡ÿ.¯ÿ}.°ÿN.±ÿ.ºÿ2.Ä&.Å&.Ðÿ}.Ñÿ}.Òÿ}.Óÿ·.Ôÿ·.Õÿ·.ëÿ2.ûÿ}.ýÿ}/2ÿ·/7þ­/8ÿ/9þæ/:ÿN/<þÁ/\ÿ/gÿ·/hÿ/‘ÿ·/¯ÿ·/°ÿ·/µýð/·þ/ºÿ/»þÁ/Ðÿ·/Ñÿ·/Òÿ·/Óÿ/Ôÿ/Õÿ/êþÁ/ëÿ2ÿÓ2&2ÿÓ29ÿ·2;ÿ·2<ÿk2»ÿk2êÿk3ýð3ÿÜ3ýð3$ÿD3Dÿ}3HÿÉ3UÿÁ3Vÿ·3Xÿ·3bÿD3iÿ}3jÿ}3kÿ}3lÿ}3mÿ}3nÿ}3pÿÉ3qÿÉ3rÿÉ3sÿÉ3~ÿ·3ÿ·3€ÿ·3ÿ·3 ÿ}3­ÿD3®ÿD3µ&3·93Äþa3Åþa3ÇÿD3ÉÿD3äÿ·3úÿ·4&5&5&57ÿ¤5<ÿD5Hÿš5Rÿš5Xÿ5\ÿ}5pÿš5qÿš5rÿš5sÿš5yÿš5zÿš5{ÿš5|ÿš5}ÿš5~ÿ5ÿ5€ÿ5ÿ5¡ÿš5±ÿš5ºÿ}5»ÿD5êÿD5ëÿ}66ÿ·6ãÿ·6ùÿ·7þ·7þÓ7þ¤7ÿ7ÿ7$ÿa77/7Dÿ 7Fþø7Hþø7Rþø7Uÿ7Vÿ 7Xþø7Zþæ7\þ­7bÿa7iÿ 7jÿ 7kÿ 7lÿ 7mÿ 7nÿ 7oþø7pþø7qþø7rþø7sþø7yþø7zþø7{þø7|þø7}þø7~þø7þø7€þø7þø7 ÿ 7¡þø7­ÿa7®ÿa7±þø7ºþ­7ÄþÓ7ÅþÓ7Çÿa7Éÿa7äÿ 7ëþ­7úÿ 7üþø7þþø8$ÿ¤8bÿ¤8­ÿ¤8®ÿ¤8Çÿ¤8Éÿ¤9þÁ9ÿk9þÁ9ÿ¤9ÿ¤9$ÿu92ÿÜ9Dÿa9Hÿk9LÿÜ9Rÿk9Xÿk9bÿu9gÿÜ9iÿa9jÿa9kÿa9lÿa9mÿa9nÿa9pÿk9qÿk9rÿk9sÿk9yÿk9zÿk9{ÿk9|ÿk9}ÿk9~ÿk9ÿk9€ÿk9ÿk9‘ÿÜ9 ÿa9¡ÿk9­ÿu9®ÿu9¯ÿÜ9°ÿÓ9±ÿk9Äþð9Åþð9Çÿu9Éÿu9ÐÿÜ9ÑÿÜ9ÒÿÜ:ÿN:ÿ¤:ÿN:ÿÁ:ÿÁ:$ÿ·:Dÿu:Hÿ}:Rÿ:Uÿˆ:bÿ·:iÿu:jÿu:kÿu:lÿu:mÿu:nÿu:pÿ}:qÿ}:rÿ}:sÿ}:yÿ:zÿ:{ÿ:|ÿ:}ÿ: ÿu:¡ÿ:­ÿ·:®ÿ·:±ÿ:Çÿ·:Éÿ·;ÿ ;&ÿ·;2ÿ·;Hÿ};dÿ·;gÿ·;pÿ};qÿ};rÿ};sÿ};‘ÿ·;¯ÿ·;°ÿ;Ðÿ·;Ñÿ·;Òÿ·;ûÿ·;ýÿ·<þ­<þÓ<þ­<ÿN<ÿN<$ÿ<<&ÿ·<2ÿ·<Dÿ <Hþø<Rþø<Xÿ<bÿ<<dÿ·<gÿ·<iÿ <jÿ <kÿ <lÿ <mÿ <nÿ <pþø<qþø<rþø<sþø<yþø<zþø<{þø<|þø<}þø<~ÿ<ÿ<€ÿ<ÿ<‘ÿ·< ÿ <¡þø<­ÿ<<®ÿ<<¯ÿ·<°ÿˆ<±þø<Äþˆ<Åþk<Çÿ<<Éÿ<<Ðÿ·<Ñÿ·<Òÿ·<ûÿ·<ýÿ·=ÿkD\ÿÁDºÿÁDëÿÁIÿIÿÜIÿIµVI·NHÿ·NRÿ·Npÿ·Nqÿ·Nrÿ·Nsÿ·Nyÿ·Nzÿ·N{ÿ·N|ÿ·N}ÿ·N¡ÿÓN±ÿ·UþÓUþÜUµ&U·VYÿYYÿYZÿ}Zÿ}\ÿa\ÿDb&b&b&b&b&ÿÁb2ÿÁb7ÿ<b8ÿ¤b9ÿub:ÿb<ÿbFÿÁbGÿÁbWÿbYÿbZÿ¤b\ÿkbdÿÁbgÿÁbhÿ¤boÿÁb‘ÿÁb¯ÿÁb°ÿÁbµÿb·ÿbºÿkb»ÿbÄhbÅhbÐÿÁbÑÿÁbÒÿÁbÓÿ¤bÔÿ¤bÕÿ¤bêÿbëÿkbûÿÁbüÿÁbýÿÁbþÿÁbÿÿÁd6ÿ·dãÿ·dùÿ·gÿÓg&gÿÓg9ÿ·g;ÿ·g<ÿkg»ÿkgêÿkh$ÿ¤hbÿ¤h­ÿ¤h®ÿ¤hÇÿ¤hÉÿ¤i\ÿÁiºÿÁiëÿÁj\ÿÁjºÿÁjëÿÁk\ÿÁkºÿÁkëÿÁl\ÿÁlºÿÁlëÿÁm\ÿÁmºÿÁmëÿÁn\ÿÁnºÿÁnëÿÁÿÜ‘ÿÓ‘&‘ÿÓ‘$ÿÜ‘9ÿÜ‘;ÿ·‘<ÿÜ‘bÿÜ‘­ÿÜ‘®ÿÜ‘»ÿÜ‘ÇÿÜ‘ÉÿÜ‘êÿÜ­&­&­&­&­&ÿÁ­2ÿÁ­7ÿ<­8ÿ¤­9ÿu­:ÿ­<ÿ­FÿÁ­GÿÁ­Wÿ­Yÿ­Zÿ¤­\ÿk­dÿÁ­gÿÁ­hÿ¤­oÿÁ­‘ÿÁ­¯ÿÁ­°ÿÁ­µÿ­·ÿ­ºÿk­»ÿ­Äh­Åh­ÐÿÁ­ÑÿÁ­ÒÿÁ­Óÿ¤­Ôÿ¤­Õÿ¤­êÿ­ëÿk­ûÿÁ­üÿÁ­ýÿÁ­þÿÁ­ÿÿÁ®&®&®&®&®&ÿÁ®2ÿÁ®7ÿ<®8ÿ¤®9ÿu®:ÿ®<ÿ®FÿÁ®GÿÁ®Wÿ®Yÿ®Zÿ¤®\ÿk®dÿÁ®gÿÁ®hÿ¤®oÿÁ®‘ÿÁ®¯ÿÁ®°ÿÁ®µÿ®·ÿ®ºÿk®»ÿ®Äh®Åh®ÐÿÁ®ÑÿÁ®ÒÿÁ®Óÿ¤®Ôÿ¤®Õÿ¤®êÿ®ëÿk®ûÿÁ®üÿÁ®ýÿÁ®þÿÁ®ÿÿÁ¯ÿÓ¯&¯ÿÓ¯9ÿ·¯;ÿ·¯<ÿk¯»ÿk¯êÿk´$þø´-ÿ¤´<&´bþø´þÓ´­þø´®þø´»&´Çþø´Éþø´ê&¶$þð¶-ÿ¤¶9&¶<K¶bþð¶þø¶­þð¶®þð¶»K¶Çþð¶Éþð¶êKºÿaºÿD»þ­»þÓ»þ­»ÿN»ÿN»$ÿ<»&ÿ·»2ÿ·»Dÿ »Hþø»Rþø»Xÿ»bÿ<»dÿ·»gÿ·»iÿ »jÿ »kÿ »lÿ »mÿ »nÿ »pþø»qþø»rþø»sþø»yþø»zþø»{þø»|þø»}þø»~ÿ»ÿ»€ÿ»ÿ»‘ÿ·» ÿ »¡þø»­ÿ<»®ÿ<»¯ÿ·»°ÿˆ»±þø»Äþˆ»Åþk»Çÿ<»Éÿ<»Ðÿ·»Ñÿ·»Òÿ·»ûÿ·»ýÿ·Ä7þ<Ä9þ­Ä:ÿÄ<þaÄ»þaÄêþaÅ7þ<Å9þ­Å:ÿÅ<þaÅ»þaÅêþaÇ&Ç&Ç&Ç&Ç&ÿÁÇ2ÿÁÇ7ÿ<Ç8ÿ¤Ç9ÿuÇ:ÿÇ<ÿÇFÿÁÇGÿÁÇWÿÇYÿÇZÿ¤Ç\ÿkÇdÿÁÇgÿÁÇhÿ¤ÇoÿÁÇ‘ÿÁǯÿÁǰÿÁǵÿÇ·ÿǺÿkÇ»ÿÇÄhÇÅhÇÐÿÁÇÑÿÁÇÒÿÁÇÓÿ¤ÇÔÿ¤ÇÕÿ¤ÇêÿÇëÿkÇûÿÁÇüÿÁÇýÿÁÇþÿÁÇÿÿÁÉ&É&É&É&É&ÿÁÉ2ÿÁÉ7ÿ<É8ÿ¤É9ÿuÉ:ÿÉ<ÿÉFÿÁÉGÿÁÉWÿÉYÿÉZÿ¤É\ÿkÉdÿÁÉgÿÁÉhÿ¤ÉoÿÁÉ‘ÿÁɯÿÁɰÿÁɵÿÉ·ÿɺÿkÉ»ÿÉÄhÉÅhÉÐÿÁÉÑÿÁÉÒÿÁÉÓÿ¤ÉÔÿ¤ÉÕÿ¤ÉêÿÉëÿkÉûÿÁÉüÿÁÉýÿÁÉþÿÁÉÿÿÁÐÿÓÐ&ÐÿÓÐ9ÿ·Ð;ÿ·Ð<ÿkлÿkÐêÿkÑÿÓÑ&ÑÿÓÑ9ÿ·Ñ;ÿ·Ñ<ÿkÑ»ÿkÑêÿkÒÿÓÒ&ÒÿÓÒ9ÿ·Ò;ÿ·Ò<ÿkÒ»ÿkÒêÿkÓ$ÿ¤Óbÿ¤Ó­ÿ¤Ó®ÿ¤ÓÇÿ¤ÓÉÿ¤Ô$ÿ¤Ôbÿ¤Ô­ÿ¤Ô®ÿ¤ÔÇÿ¤ÔÉÿ¤Õ$ÿ¤Õbÿ¤Õ­ÿ¤Õ®ÿ¤ÕÇÿ¤ÕÉÿ¤á2ÿ·á7þ­á8ÿ·á9þæá:ÿaá<þÁá\ÿágÿ·áhÿ·á‘ÿ·á¯ÿ·á°ÿ·áµþøá·þøáºÿá»þÁáÐÿ·áÑÿ·áÒÿ·áÓÿ·áÔÿ·áÕÿ·áêþÁáëÿã6ÿ·ããÿ·ãùÿ·åÿkè&è<ÿaè»ÿaèÄÿÜèÅÿÜèêÿaêþ­êþÓêþ­êÿNêÿNê$ÿ<ê&ÿ·ê2ÿ·êDÿ êHþøêRþøêXÿêbÿ<êdÿ·êgÿ·êiÿ êjÿ êkÿ êlÿ êmÿ ênÿ êpþøêqþøêrþøêsþøêyþøêzþøê{þøê|þøê}þøê~ÿêÿê€ÿêÿê‘ÿ·ê ÿ ê¡þøê­ÿ<ê®ÿ<ê¯ÿ·ê°ÿˆê±þøêÄþˆêÅþkêÇÿ<êÉÿ<êÐÿ·êÑÿ·êÒÿ·êûÿ·êýÿ·ëÿaëÿDö7ÿÜö<ÿ­ö»ÿ­öêÿ­ù6ÿ·ùãÿ·ùùÿ·û6ÿ·ûãÿ·ûùÿ·ý6ÿ·ýãÿ·ýùÿ· MI@kmþ ¢ýÇýÇ 5 •¼GÌþBGÌSf  €¯ JBits! ûþšmãB´É`#cÕVeraSansBdObÿÿÿÿ6ÿÿþ628J00@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              !                        !        #                     #        $                       $        &                       &        '                   '       )             !   )       ÿÿ"Õ°_<õººëºÂiYýÇþ 5mreportlab-3.5.34/src/reportlab/fonts/callig15.afm0000664000175000017500000002017613607302650022404 0ustar rptlabrptlab00000000000000StartFontMetrics 2.0 Comment Generated by FontForge 20110222 Comment Creation Date: Sun Oct 16 04:57:33 2011 FontName CALLIG15 FullName CALLIG15 FamilyName CALLIG15 Weight Medium Notice (Copyright 1992 Peter Vanroose, 1999 S. Dachian) Comment You may freely use, modify and/or distribute this file, as long as this copyright notice is retained ItalicAngle 0 IsFixedPitch false UnderlinePosition -67 UnderlineThickness 33 Version 001.000 EncodingScheme FontSpecific FontBBox -294 -257 1566 839 CapHeight 634 XHeight 226 Ascender 452 Descender -221 StartCharMetrics 168 C 0 ; WX 143 ; N grave ; B 30 744 113 831 ; C 1 ; WX 144 ; N acute ; B 30 239 114 319 ; C 2 ; WX 153 ; N circumflex ; B 164 239 348 319 ; C 3 ; WX 140 ; N tilde ; B 167 239 306 278 ; C 4 ; WX 170 ; N dieresis ; B 30 239 139 289 ; C 6 ; WX 118 ; N ring ; B 195 239 296 335 ; C 8 ; WX 158 ; N breve ; B 176 249 360 330 ; C 10 ; WX 59 ; N dotaccent ; B 208 287 253 332 ; C 14 ; WX 142 ; N guilsinglleft ; B 70 0 195 187 ; C 15 ; WX 142 ; N guilsinglright ; B 63 0 190 182 ; C 16 ; WX 165 ; N quotedblleft ; B 400 580 587 664 ; C 17 ; WX 164 ; N quotedblright ; B 387 580 573 664 ; C 18 ; WX 170 ; N quotedblbase ; B -17 -46 169 40 ; C 19 ; WX 230 ; N guillemotleft ; B 69 0 289 187 ; C 20 ; WX 231 ; N guillemotright ; B 63 0 283 187 ; C 22 ; WX 1099 ; N emdash ; B 58 90 1187 141 ; C 28 ; WX 336 ; N fi ; B -187 -231 626 523 ; C 29 ; WX 394 ; N fl ; B -188 -231 811 523 ; C 33 ; WX 206 ; N exclam ; B 40 -7 392 341 ; C 34 ; WX 193 ; N quotedbl ; B 425 557 563 664 ; C 35 ; WX 188 ; N numbersign ; B 68 -7 241 190 ; C 36 ; WX 559 ; N dollar ; B 151 -83 759 666 ; C 37 ; WX 388 ; N percent ; B 132 -7 460 328 ; C 38 ; WX 379 ; N ampersand ; B -83 -223 473 296 ; C 39 ; WX 78 ; N quoteright ; B 388 580 485 664 ; C 40 ; WX 191 ; N parenleft ; B 57 -7 484 459 ; C 41 ; WX 193 ; N parenright ; B -2 -7 427 457 ; C 42 ; WX 239 ; N asterisk ; B 373 465 603 665 ; C 44 ; WX 129 ; N comma ; B 21 -25 119 60 ; C 45 ; WX 140 ; N hyphen ; B 68 80 192 115 ; C 46 ; WX 141 ; N period ; B 40 -7 101 55 ; C 47 ; WX 149 ; N slash ; B 12 -7 350 329 ; C 48 ; WX 298 ; N zero ; B 82 -7 439 323 ; C 49 ; WX 244 ; N one ; B 80 0 437 330 ; C 50 ; WX 318 ; N two ; B 30 -9 398 326 ; C 51 ; WX 312 ; N three ; B 60 -7 459 340 ; C 52 ; WX 333 ; N four ; B 84 0 419 334 ; C 53 ; WX 296 ; N five ; B 58 -6 479 331 ; C 54 ; WX 279 ; N six ; B 80 -7 446 335 ; C 55 ; WX 302 ; N seven ; B 89 1 483 331 ; C 56 ; WX 294 ; N eight ; B 78 -7 438 328 ; C 57 ; WX 269 ; N nine ; B 36 -7 402 328 ; C 58 ; WX 142 ; N colon ; B 40 -7 215 175 ; C 59 ; WX 119 ; N semicolon ; B 0 -25 188 174 ; C 63 ; WX 274 ; N question ; B 27 -7 415 305 ; C 65 ; WX 789 ; N A ; B 85 -6 1286 666 ; C 66 ; WX 884 ; N B ; B 160 -7 1179 674 ; C 67 ; WX 774 ; N C ; B 323 -7 1124 663 ; C 68 ; WX 888 ; N D ; B 202 -6 1128 659 ; C 69 ; WX 723 ; N E ; B 337 -7 1027 703 ; C 70 ; WX 673 ; N F ; B 72 -6 1242 666 ; C 71 ; WX 943 ; N G ; B 306 -210 1255 669 ; C 72 ; WX 795 ; N H ; B 135 -7 1304 660 ; C 73 ; WX 599 ; N I ; B 71 -7 1102 651 ; C 74 ; WX 365 ; N J ; B -120 -257 870 651 ; C 75 ; WX 792 ; N K ; B 85 -7 1339 656 ; C 76 ; WX 736 ; N L ; B 83 -6 1167 671 ; C 77 ; WX 799 ; N M ; B 55 -7 1184 669 ; C 78 ; WX 933 ; N N ; B 75 -6 1474 656 ; C 79 ; WX 586 ; N O ; B 136 -7 934 668 ; C 80 ; WX 766 ; N P ; B 132 -7 1110 655 ; C 81 ; WX 602 ; N Q ; B 135 -9 949 643 ; C 82 ; WX 866 ; N R ; B 162 -7 1125 668 ; C 83 ; WX 704 ; N S ; B 122 -7 1126 667 ; C 84 ; WX 628 ; N T ; B 72 -7 1243 668 ; C 85 ; WX 765 ; N U ; B 316 -4 1155 654 ; C 86 ; WX 815 ; N V ; B 353 -7 1363 677 ; C 87 ; WX 1025 ; N W ; B 355 -10 1566 659 ; C 88 ; WX 664 ; N X ; B 62 -6 1181 662 ; C 89 ; WX 692 ; N Y ; B 260 -7 1080 645 ; C 90 ; WX 679 ; N Z ; B 159 -7 1009 634 ; C 91 ; WX 590 ; N bracketleft ; B 30 -1 558 464 ; C 93 ; WX 623 ; N bracketright ; B 30 -1 591 467 ; C 94 ; WX 373 ; N asciicircum ; B 30 448 342 664 ; C 95 ; WX 1032 ; N underscore ; B 0 -100 1028 -47 ; C 96 ; WX 76 ; N quoteleft ; B 400 580 498 664 ; C 97 ; WX 293 ; N a ; B 45 -5 358 193 ; C 98 ; WX 291 ; N b ; B 62 -7 615 533 ; C 99 ; WX 190 ; N c ; B 46 -6 257 195 ; C 100 ; WX 299 ; N d ; B 42 -7 616 452 ; C 101 ; WX 195 ; N e ; B 41 -7 261 191 ; C 102 ; WX 216 ; N f ; B -181 -231 632 523 ; C 103 ; WX 296 ; N g ; B -145 -229 362 197 ; C 104 ; WX 352 ; N h ; B 28 -6 636 520 ; C 105 ; WX 150 ; N i ; B 41 -7 331 332 ; C 106 ; WX 156 ; N j ; B -294 -228 317 331 ; C 107 ; WX 315 ; N k ; B 36 0 630 534 ; C 108 ; WX 189 ; N l ; B 64 -7 608 523 ; C 109 ; WX 525 ; N m ; B 57 0 589 196 ; C 110 ; WX 361 ; N n ; B 59 -1 426 193 ; C 111 ; WX 218 ; N o ; B 41 -7 283 191 ; C 112 ; WX 332 ; N p ; B -208 -225 397 322 ; C 113 ; WX 284 ; N q ; B -82 -217 357 193 ; C 114 ; WX 214 ; N r ; B 63 -7 279 228 ; C 115 ; WX 165 ; N s ; B 12 -7 227 243 ; C 116 ; WX 186 ; N t ; B 60 -6 360 335 ; C 117 ; WX 310 ; N u ; B 41 -7 375 190 ; C 118 ; WX 305 ; N v ; B 64 -7 373 193 ; C 119 ; WX 460 ; N w ; B 64 -7 524 202 ; C 120 ; WX 274 ; N x ; B 30 -7 339 195 ; C 121 ; WX 351 ; N y ; B -89 -222 415 190 ; C 122 ; WX 289 ; N z ; B 64 -12 354 192 ; C 123 ; WX 312 ; N braceleft ; B 40 1 490 464 ; C 125 ; WX 532 ; N braceright ; B 40 -1 490 461 ; C 126 ; WX 402 ; N asciitilde ; B 30 192 371 307 ; C 127 ; WX 140 ; N sfthyphen ; B 68 80 192 115 ; C 152 ; WX 740 ; N Ydieresis ; B 260 -7 1080 794 ; C 184 ; WX 358 ; N ydieresis ; B -82 -222 423 299 ; C 189 ; WX 158 ; N exclamdown ; B -86 -141 266 206 ; C 190 ; WX 265 ; N questiondown ; B -15 -106 373 206 ; C 191 ; WX 773 ; N sterling ; B 67 -10 1003 480 ; C 192 ; WX 787 ; N Agrave ; B 83 -6 1334 826 ; C 193 ; WX 792 ; N Aacute ; B 88 -6 1340 824 ; C 194 ; WX 789 ; N Acircumflex ; B 85 -6 1357 824 ; C 195 ; WX 791 ; N Atilde ; B 86 -6 1318 783 ; C 196 ; WX 793 ; N Adieresis ; B 88 -6 1319 794 ; C 197 ; WX 792 ; N Aring ; B 86 -6 1326 839 ; C 198 ; WX 1226 ; N AE ; B 77 -6 1554 679 ; C 199 ; WX 780 ; N Ccedilla ; B 314 -115 1131 663 ; C 200 ; WX 684 ; N Egrave ; B 335 -7 1025 831 ; C 201 ; WX 685 ; N Eacute ; B 336 -7 1029 824 ; C 202 ; WX 681 ; N Ecircumflex ; B 334 -7 1084 824 ; C 203 ; WX 682 ; N Edieresis ; B 335 -7 1025 794 ; C 204 ; WX 597 ; N Igrave ; B 68 -7 1099 831 ; C 205 ; WX 598 ; N Iacute ; B 69 -7 1100 824 ; C 206 ; WX 597 ; N Icircumflex ; B 68 -7 1114 824 ; C 207 ; WX 597 ; N Idieresis ; B 68 -7 1099 794 ; C 209 ; WX 1112 ; N Ntilde ; B 73 -6 1472 783 ; C 210 ; WX 586 ; N Ograve ; B 135 -7 933 831 ; C 211 ; WX 586 ; N Oacute ; B 136 -7 934 824 ; C 212 ; WX 586 ; N Ocircumflex ; B 136 -7 937 824 ; C 213 ; WX 587 ; N Otilde ; B 136 -7 934 783 ; C 214 ; WX 586 ; N Odieresis ; B 135 -7 933 794 ; C 215 ; WX 1306 ; N OE ; B 73 -7 1234 704 ; C 216 ; WX 608 ; N Oslash ; B 132 -7 954 699 ; C 217 ; WX 764 ; N Ugrave ; B 316 -4 1155 831 ; C 218 ; WX 765 ; N Uacute ; B 316 -4 1155 824 ; C 219 ; WX 764 ; N Ucircumflex ; B 316 -4 1155 824 ; C 220 ; WX 764 ; N Udieresis ; B 316 -4 1155 794 ; C 224 ; WX 295 ; N agrave ; B 47 -5 360 326 ; C 225 ; WX 296 ; N aacute ; B 48 -5 362 319 ; C 226 ; WX 295 ; N acircumflex ; B 47 -5 416 319 ; C 227 ; WX 295 ; N atilde ; B 47 -5 372 278 ; C 228 ; WX 295 ; N adieresis ; B 47 -5 360 289 ; C 229 ; WX 296 ; N aring ; B 45 -5 367 335 ; C 230 ; WX 357 ; N ae ; B 43 -6 422 193 ; C 231 ; WX 200 ; N ccedilla ; B -64 -129 265 200 ; C 232 ; WX 198 ; N egrave ; B 43 -7 263 326 ; C 233 ; WX 199 ; N eacute ; B 44 -7 280 319 ; C 234 ; WX 198 ; N ecircumflex ; B 43 -7 333 319 ; C 235 ; WX 197 ; N edieresis ; B 43 -7 273 289 ; C 236 ; WX 151 ; N igrave ; B 42 -7 221 326 ; C 237 ; WX 150 ; N iacute ; B 41 -7 259 319 ; C 238 ; WX 150 ; N icircumflex ; B 41 -7 318 319 ; C 239 ; WX 150 ; N idieresis ; B 41 -7 246 289 ; C 241 ; WX 362 ; N ntilde ; B 58 -1 425 278 ; C 242 ; WX 220 ; N ograve ; B 43 -7 285 326 ; C 243 ; WX 220 ; N oacute ; B 43 -7 288 319 ; C 244 ; WX 220 ; N ocircumflex ; B 43 -7 359 319 ; C 245 ; WX 220 ; N otilde ; B 43 -7 296 278 ; C 246 ; WX 220 ; N odieresis ; B 43 -7 292 289 ; C 247 ; WX 359 ; N oe ; B 41 -7 426 193 ; C 248 ; WX 219 ; N oslash ; B 35 -24 288 204 ; C 249 ; WX 309 ; N ugrave ; B 40 -7 374 326 ; C 250 ; WX 310 ; N uacute ; B 41 -7 375 319 ; C 251 ; WX 309 ; N ucircumflex ; B 41 -7 406 319 ; C 252 ; WX 308 ; N udieresis ; B 40 -7 374 289 ; C 255 ; WX 689 ; N germandbls ; B 27 -106 656 502 ; EndCharMetrics EndFontMetrics reportlab-3.5.34/src/reportlab/fonts/DarkGarden.sfd0000664000175000017500000176672213544671343023045 0ustar rptlabrptlab00000000000000SplineFontDB: 1.0 FontName: DarkGardenMK FullName: Dark Garden FamilyName: Dark Garden Weight: Medium Copyright: Copyright (C) 1999, 2000, 2004 Michal Kosmulski \n\n\nThis font is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis font is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this font; if not, write to the Free Software\nFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\nAs a special exception, if you create a document which uses\nthis font, and embed this font or unaltered portions of this font into\nthe document, this font does not by itself cause the resulting\ndocument to be covered by the GNU General Public License. This\nexception does not however invalidate any other reasons why the\ndocument might be covered by the GNU General Public License. If you\nmodify this font, you may extend this exception to your version of the\nfont, but you are not obligated to do so. If you do not wish to do so,\ndelete this exception statement from your version.\n Version: 1.1 ItalicAngle: 0 UnderlinePosition: -420 UnderlineWidth: 80 Ascent: 1638 Descent: 410 Order2: 1 NeedsXUIDChange: 1 FSType: 0 PfmFamily: 81 TTFWeight: 500 TTFWidth: 5 Panose: 2 11 6 3 5 6 0 0 2 4 LineGap: 0 VLineGap: 0 OS2TypoAscent: 2311 OS2TypoDescent: -708 OS2WinAscent: 2311 OS2WinDescent: 708 ScriptLang: 1 1 latn 1 dflt LangName: 1033 "" "" "Regular" "DarkGarden (Michal Kosmulski)" "" "" "" "" "Micha+AUIA Kosmulski" "Micha+AUIA Kosmulski" Encoding: unicode UnicodeInterp: none DisplaySize: -48 AntiAlias: 1 FitToEm: 1 WinInfo: 64 16 4 TeXData: 1 10485760 0 524288 262144 174762 810240 -1048576 174762 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 BeginChars: 65538 86 StartChar: .notdef Encoding: 0 -1 0 Width: 2048 Flags: MW VStem: 2 1085<0 1821> Fore 2 0 m 1,0,-1 2 1821 l 0,1,-1 1087 1821 l 0,2,-1 1087 0 l 0,3,-1 2 0 l 1,0,-1 EndSplineSet EndChar StartChar: glyph1 Encoding: 1 -1 1 Width: 0 Flags: W EndChar StartChar: glyph2 Encoding: 2 -1 2 Width: 2048 Flags: W EndChar StartChar: space Encoding: 32 32 3 Width: 1024 Flags: W EndChar StartChar: comma Encoding: 44 44 6 Width: 267 Flags: HMW HStem: -1.6875 173.812<6.75 231.188> VStem: 120.938 110.25<-133.875 -1.6875> Fore 40.5 -154.125 m 1,0,1 96.75 -106.875 96.75 -106.875 106.875 -77.625 c 0,2,3 117 -48.375 117 -48.375 117 -37.125 c 0,4,5 123.75 -4.5 123.75 -4.5 91.125 -4.5 c 0,6,7 58.5 -4.5 58.5 -4.5 54 -2.25 c 0,8,9 4.5 11.25 4.5 11.25 2.25 81 c 0,10,11 -1.125 133.875 -1.125 133.875 6.75 172.125 c 0,12,13 24.75 208.125 24.75 208.125 48.375 208.125 c 0,14,15 116.999 208.125 116.999 208.125 158.062 214.875 c 0,16,17 179.095 214.82 l 0,18,19 205.824 209.75 205.824 209.75 223.875 177.75 c 0,20,-1 248.062 129.938 l 0,21,22 251.423 123.475 251.423 123.475 251.338 108.103 c 0,23,24 251.239 90.0244 251.239 90.0244 246.375 59.625 c 0,25,-1 231.188 -1.6875 l 0,26,27 219.376 -49.4989 219.376 -49.4989 191.25 -88.875 c 0,28,29 164.25 -119.25 164.25 -119.25 120.938 -133.875 c 0,30,31 77.625 -148.5 77.625 -148.5 40.5 -154.125 c 1,0,1 EndSplineSet EndChar StartChar: hyphen Encoding: 45 45 7 Width: 1252 Flags: HMW HStem: 843.75 163.5<206.75 1005.5> Fore 379.25 809.25 m 1,0,1 319.25 789.75 319.25 789.75 266 800.25 c 0,2,3 212.75 810.75 212.75 810.75 212.75 866.25 c 0,4,-1 261.5 836.25 l 0,5,6 310.25 806.25 310.25 806.25 323.75 890.25 c 0,7,8 326.75 932.25 326.75 932.25 268.25 938.25 c 0,9,10 209.75 944.25 209.75 944.25 155.75 932.25 c 0,11,12 122.75 911.25 122.75 911.25 120.5 863.25 c 0,13,14 118.25 815.25 118.25 815.25 118.25 807.75 c 0,15,16 74.75 891.75 74.75 891.75 111.5 943.5 c 0,17,18 148.25 995.25 148.25 995.25 206.75 1007.25 c 0,19,20 344.75 1016.25 344.75 1016.25 464 972 c 0,21,22 583.25 927.75 583.25 927.75 718.25 927.75 c 0,23,24 764.75 932.25 764.75 932.25 821.75 932.25 c 0,25,26 878.75 932.25 878.75 932.25 889.25 966.75 c 0,27,28 884.75 1011.75 884.75 1011.75 844.25 1002.75 c 0,29,30 803.75 993.75 803.75 993.75 782.75 972.75 c 0,31,32 794.75 1005.75 794.75 1005.75 812.75 1033.5 c 0,33,34 830.75 1061.25 830.75 1061.25 878.75 1062.75 c 0,35,36 934.25 1047.75 934.25 1047.75 950.75 1032.75 c 0,37,38 967.25 1017.75 967.25 1017.75 982.25 969.75 c 0,39,40 982.25 936.75 982.25 936.75 998.75 915 c 0,41,42 1015.25 893.25 1015.25 893.25 1082.75 906.75 c 0,43,44 1121.75 921.75 1121.75 921.75 1145.75 947.25 c 0,45,46 1139.75 927.75 1139.75 927.75 1123.25 897.75 c 0,47,48 1106.75 867.75 1106.75 867.75 1079.75 854.25 c 0,49,-1 1079.75 854.25 l 0,50,-1 1079.75 854.25 l 0,51,52 1066.25 840.75 1066.25 840.75 1005.5 843.75 c 0,53,54 944.75 846.75 944.75 846.75 929.75 846.75 c 0,55,56 872.75 855.75 872.75 855.75 831.5 858 c 0,57,58 790.25 860.25 790.25 860.25 736.25 842.25 c 0,59,60 668.75 824.25 668.75 824.25 693.5 791.25 c 0,61,62 718.25 758.25 718.25 758.25 784.25 815.25 c 0,63,64 772.25 789.75 772.25 789.75 747.5 762 c 0,65,66 722.75 734.25 722.75 734.25 613.25 755.25 c 0,67,68 523.25 777.75 523.25 777.75 497.75 791.25 c 0,69,70 472.25 804.75 472.25 804.75 379.25 809.25 c 1,0,1 EndSplineSet KernsSLIF: 90 -260 0 0 122 -208 0 0 88 -182 0 0 120 -156 0 0 89 -130 0 0 121 -104 0 0 87 -182 0 0 119 -182 0 0 84 -286 0 0 116 -273 0 0 83 -234 0 0 115 -156 0 0 65 -234 0 0 97 -234 0 0 EndChar StartChar: period Encoding: 46 46 5 Width: 270 Flags: HMW HStem: 57.9375 152.438<9 235.688> Fore 142.875 2.25 m 0,0,1 103.5 -1.125 103.5 -1.125 92.25 14.625 c 0,2,3 81 29.25 81 29.25 63 34.875 c 0,4,5 6.75 51.75 6.75 51.75 4.5 120.375 c 0,6,7 0 172.125 0 172.125 9 210.375 c 0,8,9 27 246.375 27 246.375 50.625 246.375 c 0,10,11 119.249 246.375 119.249 246.375 160.312 253.125 c 0,12,13 181.345 253.07 l 0,14,15 208.074 248 208.074 248 226.125 216 c 0,16,-1 250.312 168.188 l 0,17,18 253.673 161.725 253.673 161.725 253.588 146.353 c 0,19,20 253.489 128.274 253.489 128.274 248.625 97.875 c 0,21,22 245.249 84.3705 245.249 84.3705 235.688 57.9375 c 0,23,24 226.126 31.5004 226.126 31.5004 214.875 24.75 c 0,25,26 180 4.5 180 4.5 142.875 2.25 c 0,0,1 EndSplineSet EndChar StartChar: colon Encoding: 58 58 34 Width: 384 Flags: HMW HStem: 23.625 211.5<86.625 239.062> 678.75 191.25<108.75 288.75> Fore 108.75 870 m 1,0,1 166.125 930.75 166.125 930.75 202.125 909.938 c 0,2,3 238.125 889.125 238.125 889.125 295.5 832.875 c 0,4,5 325.875 802.5 325.875 802.5 325.312 754.125 c 0,6,7 324.75 705.75 324.75 705.75 288.75 678.75 c 0,8,9 211.125 621.375 211.125 621.375 189.75 618 c 0,10,11 168.375 614.625 168.375 614.625 131.25 636 c 0,12,13 80.625 663 80.625 663 75 680.438 c 0,14,15 69.375 697.875 69.375 697.875 68.25 731.625 c 0,16,17 64.875 775.5 64.875 775.5 67.6875 803.062 c 0,18,19 70.5 830.625 70.5 830.625 108.75 870 c 0,20,-1 108.75 870 l 1,0,1 86.625 235.125 m 0,16,17 95.625 275.625 95.625 275.625 164.25 279 c 0,18,19 232.875 282.375 232.875 282.375 252 271.125 c 0,20,21 273.375 257.625 273.375 257.625 289.688 189.562 c 0,22,23 301.323 141.017 301.323 141.017 301.225 117.366 c 0,24,25 301.185 107.859 301.185 107.859 299.25 102.375 c 0,26,27 273.375 34.875 273.375 34.875 239.062 23.625 c 0,28,29 204.749 12.375 204.749 12.375 160.875 12.375 c 0,30,31 145.124 12.375 145.124 12.375 128.812 39.9375 c 0,32,33 112.499 67.5003 112.499 67.5003 95.625 75.375 c 0,34,35 68.625 86.625 68.625 86.625 73.125 142.875 c 0,36,37 77.625 199.125 77.625 199.125 86.625 235.125 c 0,16,17 EndSplineSet EndChar StartChar: semicolon Encoding: 59 59 35 Width: 384 Flags: HMW HStem: 45 132.75<91.125 303.75> 738 180<118.875 291> VStem: 154.125 149.625<-200.25 45> Fore 118.875 918 m 1,0,1 177.375 977.625 177.375 977.625 212.25 957.375 c 0,2,3 247.125 937.125 247.125 937.125 305.625 880.875 c 0,4,5 366.375 821.25 366.375 821.25 291 738 c 0,6,7 238.125 679.5 238.125 679.5 230.25 678.938 c 0,8,9 222.375 678.375 222.375 678.375 141.375 682.875 c 0,10,11 82.875 686.25 82.875 686.25 81.1875 716.062 c 0,12,13 79.5 745.875 79.5 745.875 77.25 779.625 c 0,14,15 73.875 823.5 73.875 823.5 77.25 850.5 c 0,16,17 80.625 877.5 80.625 877.5 118.875 918 c 0,18,-1 118.875 918 l 1,0,1 91.125 177.75 m 0,15,16 100.125 218.251 100.125 218.251 169.312 222.188 c 0,17,18 225.136 222.126 l 0,19,20 247.88 220.056 247.88 220.056 257.625 213.75 c 0,21,22 278.999 200.25 278.999 200.25 293.062 133.312 c 0,23,24 307.125 66.375 307.125 66.375 303.75 45 c 0,25,26 292.5 -19.125 292.5 -19.125 246.938 -110.25 c 0,27,28 202.357 -199.411 202.357 -199.411 154.125 -200.25 c 0,29,30 201.375 -173.25 201.375 -173.25 201.375 -86.625 c 0,31,32 201.375 0 201.375 0 174.375 6.75 c 0,33,34 140.074 9.61226 l 0,35,36 138.95 9.59327 138.95 9.59327 137.812 9.5625 c 0,37,38 113.206 12.6329 l 0,39,40 106.394 14.6566 106.394 14.6566 100.125 18 c 0,41,42 73.125 30.375 73.125 30.375 77.625 85.5 c 0,43,44 82.125 140.625 82.125 140.625 91.125 177.75 c 0,15,16 EndSplineSet EndChar StartChar: A Encoding: 65 65 55 Width: 1447 Flags: W Fore 1268 -330 m 1,0,1 1304.01 -261.985 1304.01 -261.985 1321 -184 c 0,2,3 1324.46 -150.427 l 0,4,5 1323.49 -92.1465 1323.49 -92.1465 1272 -43 c 0,6,7 1221.01 4.9888 1221.01 4.9888 1171 38 c 0,8,9 1121.01 71 1121.01 71 1066 52 c 0,10,11 1028.99 38 1028.99 38 1019.5 -17 c 0,12,13 1010.01 -72 1010.01 -72 1006 -72 c 0,14,15 965 9 965 9 1013.5 102 c 0,16,17 1059.21 189.663 1059.21 189.663 1059.17 266.65 c 0,18,19 1059.17 271.346 1059.17 271.346 1059 276 c 0,20,21 1053 434.993 1053 434.993 1006 491.5 c 0,22,23 959.002 547.999 959.002 547.999 895 573 c 0,24,25 861.093 585.849 861.093 585.849 831.581 585.768 c 0,26,27 778.406 585.622 778.406 585.622 739.5 543.5 c 0,28,29 679.002 478.002 679.002 478.002 616 450 c 0,30,31 577 432 577 432 533.5 448.5 c 0,32,33 490 465 490 465 487 510 c 0,34,35 532 492 532 492 543.5 499.5 c 0,36,37 555 507 555 507 558 514 c 0,38,39 579 558 579 558 530 570 c 0,40,41 424 595 424 595 383 514 c 0,42,43 347 446 347 446 318.5 347 c 0,44,45 290 248 290 248 328 164 c 0,46,47 336.295 144.644 336.295 144.644 336.228 116.448 c 0,48,49 336.198 103.856 336.198 103.856 334.5 89.5 c 0,50,51 328.999 42.9997 328.999 42.9997 283 27 c 0,52,53 302 105 302 105 245 98 c 0,54,55 188 91 188 91 157 57 c 0,56,57 89.0005 -17 89.0005 -17 55 -80 c 0,58,59 21 -143 21 -143 33 -233 c 0,60,61 7.11917 -206.16 7.11917 -206.16 6.9652 -142.109 c 0,62,63 6.95854 -139.339 6.95854 -139.339 7 -136.5 c 0,64,65 8 -67.9999 8 -67.9999 27 -36 c 0,66,67 60 22 60 22 93.5 73.5 c 0,68,69 126.999 124.999 126.999 124.999 128 188 c 0,70,71 128 227 128 227 100 243 c 0,72,73 89.0676 246.192 l 0,74,75 81.8899 245.118 81.8899 245.118 81.7695 231.241 c 0,76,77 87 197 l 0,78,79 60.9999 218 60.9999 218 60.5 237 c 0,80,81 63 272 l 0,82,83 105 461 105 461 237.5 625 c 0,84,85 370.001 789.001 370.001 789.001 396 894 c 0,86,87 431.998 1045.99 431.998 1045.99 450 1180 c 0,88,89 458 1246.01 458 1246.01 501 1303.5 c 0,90,91 526.01 1336.94 526.01 1336.94 555.08 1337.06 c 0,92,93 575.989 1337.15 575.989 1337.15 599 1320 c 0,94,95 545 1309.01 545 1309.01 543 1280.5 c 0,96,97 541 1252 541 1252 552 1240 c 0,98,99 570.499 1217.04 570.499 1217.04 589 1216.86 c 0,100,101 599.5 1216.76 599.5 1216.76 610 1224 c 0,102,103 666.003 1261.01 666.003 1261.01 702.5 1381 c 0,104,105 739 1501 739 1501 737 1567 c 0,106,107 734 1633 734 1633 690 1672 c 0,108,109 669.348 1690.31 669.348 1690.31 646.491 1690.32 c 0,110,111 620.654 1690.35 620.654 1690.35 592 1667 c 0,112,113 628 1758.99 628 1758.99 682.5 1745 c 0,114,115 737 1731.01 737 1731.01 792.5 1671.5 c 0,116,117 848.023 1611.97 848.023 1611.97 896 1539 c 0,118,119 944 1465.99 944 1465.99 966 1440 c 0,120,121 1000.99 1397.01 1000.99 1397.01 1047 1369 c 0,122,123 1092.99 1341 1092.99 1341 1112 1302 c 0,124,125 1127.05 1269.26 1127.05 1269.26 1127.11 1243.37 c 0,126,127 1127.19 1210.74 1127.19 1210.74 1103.5 1189 c 0,128,129 1081.08 1168.42 1081.08 1168.42 1054.61 1168.45 c 0,130,131 1030.93 1168.47 1030.93 1168.47 1004 1185 c 0,132,133 1024.39 1186.95 l 0,134,135 1038.73 1191.67 1038.73 1191.67 1040 1207 c 0,136,137 1040 1232 1040 1232 1000.5 1252 c 0,138,139 992.466 1256.07 992.466 1256.07 986.066 1256.04 c 0,140,141 961 1255.93 961 1255.93 961 1193 c 0,142,143 961 1164.99 961 1164.99 974 1131.5 c 0,144,145 987 1098.01 987 1098.01 995 1082 c 0,146,147 1018.3 1023.02 1018.3 1023.02 1032.59 1022.63 c 0,148,149 1036.22 1022.53 1036.22 1022.53 1039.27 1026.22 c 0,150,151 1040.7 1027.94 1040.7 1027.94 1042 1030.5 c 0,152,153 1057 1060.01 1057 1060.01 1039 1080 c 0,154,155 1077.99 1080 1077.99 1080 1091 1030.5 c 0,156,157 1104 981.019 1104 981.019 1104 968 c 0,158,159 1104 893.057 1104 893.057 1094.5 786.5 c 0,160,161 1092.76 724.816 l 0,162,163 1095.42 659.144 1095.42 659.144 1119 612 c 0,164,165 1129.97 589.052 1129.97 589.052 1171 527.5 c 0,166,167 1211.99 466.005 1211.99 466.005 1230 456 c 0,168,169 1251.99 443.008 1251.99 443.008 1272.5 399.5 c 0,170,171 1278.45 386.871 1278.45 386.871 1278.38 375.043 c 0,172,173 1278.2 346.131 1278.2 346.131 1242 322 c 0,174,175 1248.76 340.824 1248.76 340.824 1248.69 354.457 c 0,176,177 1248.53 387.176 1248.53 387.176 1209 390 c 0,178,179 1180.02 387.742 l 0,180,181 1171.73 385.453 1171.73 385.453 1169 380 c 0,182,183 1166.86 361.224 l 0,184,185 1167.14 356.858 1167.14 356.858 1168 352 c 0,186,187 1183 234.001 1183 234.001 1270 167 c 0,188,189 1357.01 99.9952 1357.01 99.9952 1368 -1 c 0,190,191 1372.17 -39.7089 1372.17 -39.7089 1372.1 -75.0335 c 0,192,193 1371.98 -132.791 1371.98 -132.791 1360.5 -181.5 c 0,194,195 1342.01 -259.987 1342.01 -259.987 1268 -330 c 1,0,1 701 705 m 0,116,117 736.5 753 l 0,118,119 755 778 755 778 776 793 c 0,120,121 839 831 839 831 860 763 c 0,122,123 831.214 778.397 831.214 778.397 813.857 778.333 c 0,124,125 805.285 778.302 805.285 778.302 799.5 774.5 c 0,126,127 790.855 768.819 790.855 768.819 790.629 758.624 c 0,128,129 794.49 742.017 l 0,130,131 796.315 737.74 796.315 737.74 799 733 c 0,132,133 827 679 827 679 877 735 c 0,134,135 927 791 927 791 912 878 c 0,136,137 904.001 918.996 904.001 918.996 851 1051 c 0,138,139 798 1183 798 1183 759 1150 c 0,140,141 734.385 1130 734.385 1130 734.326 1102.31 c 0,142,143 734.308 1094 734.308 1094 736.5 1085 c 0,144,145 746 1046 746 1046 750 1010 c 0,146,147 756 938 756 938 726 869.5 c 0,148,149 696 801 696 801 585 843 c 0,150,151 616 840 616 840 661 864.5 c 0,152,153 706 889 706 889 654 934 c 0,154,155 635 949 635 949 610.5 934.5 c 0,156,157 585.998 919.998 585.998 919.998 571 901 c 0,158,159 531.263 848.664 531.263 848.664 530.978 805.134 c 0,160,161 530.881 790.211 530.881 790.211 535.419 776.324 c 0,162,163 544.962 747.125 544.962 747.125 575 722.5 c 0,164,165 661 652 661 652 701 705 c 0,116,117 EndSplineSet KernsSLIF: 67 -52 0 0 99 -130 0 0 77 -104 0 0 109 -78 0 0 104 -130 0 0 72 -104 0 0 45 -169 0 0 115 -286 0 0 83 -247 0 0 121 -299 0 0 89 -257 0 0 116 -299 0 0 84 -299 0 0 118 -65 0 0 119 -230 0 0 86 -50 0 0 87 -193 0 0 EndChar StartChar: B Encoding: 66 66 16 Width: 1278 Flags: HMW HStem: 48 189<429.6 747.3> 726 257<422.4 754.5> 1447 200<399 696> 1549 111<30 212.7> VStem: 246 153<-28 1647> Fore 502 218 m 1,0,1 561.4 216.556 l 0,2,3 622.601 219 622.601 219 691 237 c 0,4,5 793.6 264 793.6 264 865.6 297 c 0,6,7 926.8 324 926.8 324 994 397 c 0,8,9 1036 442.625 1036 442.625 1036.28 481.219 c 0,10,11 1036.38 494.855 1036.38 494.855 1031.27 507.613 c 0,12,13 1027.71 516.52 1027.71 516.52 1021.6 525 c 0,14,15 1007.2 544 1007.2 544 977.2 551.5 c 0,16,17 947.2 559 947.2 559 923.2 535 c 0,18,19 907.6 519 907.6 519 914.2 492 c 0,20,21 920.8 465 920.8 465 962.8 448 c 0,22,23 930.4 424 930.4 424 872.8 455.5 c 0,24,25 815.2 487 815.2 487 824.8 540 c 0,26,27 834.4 599 834.4 599 892 634.5 c 0,28,29 949.6 670 949.6 670 930.4 721 c 0,30,31 914.8 760 914.8 760 828.4 789 c 0,32,33 742 818 742 818 659.2 824 c 0,34,35 583.6 829 583.6 829 518.2 821 c 0,36,37 452.8 813 452.8 813 422.8 749 c 0,38,39 397.6 699 397.6 699 394 644 c 0,40,41 392.642 563.434 l 0,42,43 393.092 550.121 393.092 550.121 394 537 c 0,44,45 394 505 394 505 425.8 479 c 0,46,47 441.204 466.405 441.204 466.405 461.255 466.482 c 0,48,49 482.596 466.563 482.596 466.563 509.2 481 c 0,50,51 563.2 511 563.2 511 547 549.5 c 0,52,53 530.8 588 530.8 588 487.6 600 c 0,54,55 535.6 628 535.6 628 587.2 607 c 0,56,57 641.417 584.409 641.417 584.409 641.743 534.874 c 0,58,59 641.778 529.59 641.778 529.59 641.2 524 c 0,60,61 635.2 466 635.2 466 600.4 434 c 0,62,63 568 404 568 404 494.8 354.5 c 0,64,65 421.6 305 421.6 305 432.4 260 c 0,66,67 439.6 222.999 439.6 222.999 502 218 c 0,68,-1 502 218 l 1,0,1 407.399 1024 m 1,44,45 440.211 988.385 440.211 988.385 494.485 988.133 c 0,46,47 515.008 988.038 515.008 988.038 538.6 993 c 0,48,49 710.352 1029.12 710.352 1029.12 715 1040 c 0,50,-1 855 1160 l 0,51,52 892.587 1216.39 892.587 1216.39 895 1340 c 0,53,54 891.78 1368.18 l 0,55,56 877.492 1424.08 877.492 1424.08 800.199 1467 c 0,57,58 718.469 1511.32 718.469 1511.32 663.365 1511.34 c 0,59,60 653.779 1511.34 653.779 1511.34 645 1510 c 0,61,62 624.821 1506.71 624.821 1506.71 624.832 1481.94 c 0,63,64 624.843 1459.52 624.843 1459.52 641.399 1419.5 c 0,65,66 656.36 1382.55 656.36 1382.55 656.399 1347.14 c 0,67,68 656.445 1304.45 656.445 1304.45 634.8 1264 c 0,69,70 577.198 1157.99 577.198 1157.99 480 1165 c 0,71,72 542.913 1179.56 542.913 1179.56 543.048 1262.94 c 0,73,74 543.052 1265.44 543.052 1265.44 543 1268 c 0,75,76 541.199 1356 541.199 1356 471.6 1356 c 0,77,78 412.814 1356 412.814 1356 390 1175 c 0,79,80 385.232 1137.17 385.232 1137.17 385.253 1108.14 c 0,81,82 385.299 1045.82 385.299 1045.82 407.399 1024 c 0,83,-1 407.399 1024 l 1,44,45 329 42.5 m 145,-1,-1 217.398 -13.5 l 0,45,46 189.653 -11.4947 l 0,47,48 152.289 -3.04026 152.289 -3.04026 148.549 38.5 c 0,49,50 143.6 93.5001 143.6 93.5001 170.6 138.5 c 0,51,52 171.034 92.1899 l 0,53,54 175.03 55.9341 175.03 55.9341 193.049 55.9206 c 0,55,56 196.817 55.9177 196.817 55.9177 201.199 57.5 c 0,57,58 237.199 70.5001 237.199 70.5001 243.049 146 c 0,59,60 245.057 225.875 l 0,61,62 244.13 266.908 244.13 266.908 239.449 311.5 c 0,63,64 230 401.5 230 401.5 212.449 482.5 c 0,65,66 194.897 563.5 194.897 563.5 185.898 586.5 c 0,67,68 148.1 672.5 148.1 672.5 131 707 c 0,69,70 109.776 749.815 109.776 749.815 62.5996 814.5 c 0,71,72 25.0875 865.935 25.0875 865.935 25.0878 930.344 c 0,73,74 25.0878 938.566 25.0878 938.566 25.6992 947 c 0,75,76 31.099 1021.51 31.099 1021.51 84.1992 1062.5 c 0,77,78 105.439 1078.95 105.439 1078.95 132.197 1079.03 c 0,79,80 142.86 1079.06 142.86 1079.06 154.398 1076.5 c 0,81,82 194.898 1067.5 194.898 1067.5 199.398 984.5 c 0,83,84 181.495 1010.2 181.495 1010.2 153.067 1010.13 c 0,85,86 147.206 1010.11 147.206 1010.11 140.898 1009 c 0,87,88 108.919 1003.37 108.919 1003.37 108.71 956.798 c 0,89,90 108.678 949.633 108.678 949.633 109.398 941.5 c 0,91,92 113.898 888.5 113.898 888.5 153.5 887 c 0,93,94 177.527 889.565 l 0,95,96 198.558 895.607 198.558 895.607 209.299 915.5 c 0,97,98 244.941 978.864 244.941 978.864 244.85 1117 c 0,99,100 244.398 1254.51 244.398 1254.51 239 1337.5 c 0,101,102 234.5 1398.51 234.5 1398.51 214.699 1474 c 0,103,104 197.487 1539.63 197.487 1539.63 136.544 1539.54 c 0,105,106 125.889 1539.52 125.889 1539.52 113.898 1537.5 c 0,107,108 53.5987 1527.32 53.5987 1527.32 53.5019 1477.59 c 0,109,110 53.4845 1468.68 53.4845 1468.68 55.3984 1458.5 c 0,111,112 67.9981 1391.51 67.9981 1391.51 95 1387.5 c 0,113,114 71.1185 1384.55 l 0,115,116 33.5813 1386.31 33.5813 1386.31 9.04883 1432 c 0,117,118 -9.05229 1465.71 -9.05229 1465.71 -9.0989 1503.43 c 0,119,120 -9.13456 1532.29 -9.13456 1532.29 1.39844 1563.5 c 0,121,122 48.8936 1701.35 48.8936 1701.35 184.1 1674.5 c 0,123,-1 277.25 1656 l 0,124,125 288.387 1652.52 288.387 1652.52 303.567 1652.53 c 0,126,127 337.485 1652.56 337.485 1652.56 391.6 1670 c 0,128,129 439.6 1686.01 439.6 1686.01 478.6 1730 c 0,130,131 517.645 1774.05 517.645 1774.05 550 1807 c 0,132,133 571.608 1830 571.608 1830 616.6 1849.5 c 0,134,135 661.6 1869 661.6 1869 701.2 1863 c 0,136,137 757.593 1855.01 757.593 1855.01 810.4 1807 c 0,138,139 844.491 1776.01 844.491 1776.01 844.565 1732.09 c 0,140,141 844.604 1708.46 844.604 1708.46 834.4 1680 c 0,142,143 826.002 1712.99 826.002 1712.99 757 1759 c 0,144,145 732.891 1775.07 732.891 1775.07 713.659 1775.14 c 0,146,147 686.315 1775.24 686.315 1775.24 668.833 1742.98 c 0,148,149 664.282 1734.59 664.282 1734.59 660.4 1724 c 0,150,151 659.954 1711.82 l 0,152,153 668.693 1677.46 668.693 1677.46 782.8 1621.5 c 0,154,155 918.4 1555.01 918.4 1555.01 954.4 1515 c 0,156,157 1044.4 1411.99 1044.4 1411.99 1061.8 1300 c 0,158,159 1069.05 1253.31 1069.05 1253.31 1068.98 1209.14 c 0,160,161 1068.86 1141.63 1068.86 1141.63 1051.6 1080 c 0,162,163 1043.2 1049.99 1043.2 1049.99 997 1004.5 c 0,164,165 964.388 972.382 964.388 972.382 932.075 972.403 c 0,166,167 918.612 972.412 918.612 972.412 905.2 978 c 0,168,169 938.8 1012.99 938.8 1012.99 905.2 1026 c 0,170,171 886.612 1029.18 l 0,172,173 869.691 1027.82 869.691 1027.82 865.6 1006 c 0,174,175 857.2 961 857.2 961 951.4 850 c 0,176,177 1046.91 737.47 1046.91 737.47 1080.4 784 c 0,178,179 1098.4 809 1098.4 809 1080.4 844 c 0,180,181 1062.4 879 1062.4 879 1025.2 906 c 0,182,183 1133.2 903 1133.2 903 1181.2 815.5 c 0,184,185 1229.2 728 1229.2 728 1231.6 695 c 0,186,187 1235.2 629 1235.2 629 1196.2 526 c 0,188,189 1157.2 423 1157.2 423 1157.2 339 c 0,190,191 1157.2 237.999 1157.2 237.999 1142.8 158 c 0,192,193 1128.4 78.0005 1128.4 78.0005 1085.2 27 c 0,194,195 1033.6 -33 1033.6 -33 947.2 -50 c 0,196,197 904 -59 904 -59 830.2 -52 c 0,198,199 756.4 -45 756.4 -45 725.2 -20 c 0,200,201 780.4 -32 780.4 -32 833.2 -4.5 c 0,202,203 887.95 24.0156 887.95 24.0156 856 71 c 0,204,205 835.6 101 835.6 101 731.2 97 c 0,206,207 626.8 92.9999 626.8 92.9999 584.8 90 c 0,208,-1 450.4 79.5 l 0,209,210 396.73 69.5341 396.73 69.5341 329 42.5 c 145,-1,-1 EndSplineSet EndChar StartChar: C Encoding: 67 67 9 Width: 1268 Flags: W Fore 47 1225 m 0,0,1 49.4717 1250.42 l 0,2,3 59.182 1290.3 59.182 1290.3 105 1339.5 c 0,4,5 139.698 1376.76 139.698 1376.76 170.189 1376.97 c 0,6,7 184.334 1377.07 184.334 1377.07 197.574 1369.19 c 0,8,9 205.969 1364.2 205.969 1364.2 214 1356 c 0,10,11 161.521 1347.64 161.521 1347.64 161.103 1310.92 c 0,12,13 165.255 1287.2 l 0,14,15 165.612 1286.11 165.612 1286.11 166 1285 c 0,16,17 173.846 1261.46 173.846 1261.46 188.296 1261.14 c 0,18,19 201.91 1265.14 l 0,20,21 214.659 1272.25 214.659 1272.25 231 1292 c 0,22,23 279.011 1350.02 279.011 1350.02 288 1369 c 0,24,25 316.999 1432 316.999 1432 325.5 1494 c 0,26,27 334.002 1556.01 334.002 1556.01 375 1609 c 0,28,29 407.609 1651.5 407.609 1651.5 461 1651.5 c 0,30,31 513.998 1651.01 513.998 1651.01 527 1612 c 0,32,33 477.134 1610.54 477.134 1610.54 476.205 1594.01 c 0,34,35 479.67 1583.33 l 0,36,37 480.687 1581.71 480.687 1581.71 482 1580 c 0,38,39 503 1550 503 1550 539 1571 c 0,40,41 575.016 1592.01 575.016 1592.01 592 1608 c 0,42,43 625.211 1639.88 625.211 1639.88 625.553 1659.63 c 0,44,45 622.289 1671.21 l 0,46,47 620.426 1674.05 620.426 1674.05 617.5 1676.5 c 0,48,49 605.555 1686.5 605.555 1686.5 590.873 1686.63 c 0,50,51 579.546 1686.73 579.546 1686.73 566.589 1680.95 c 0,52,53 561.901 1678.86 561.901 1678.86 557 1676 c 0,54,55 561.001 1724.01 561.001 1724.01 599 1730.5 c 0,56,57 631.988 1732.53 l 0,58,59 649.19 1731.37 649.19 1731.37 663 1725 c 0,60,61 774.955 1671.02 774.955 1671.02 848.5 1627 c 0,62,63 922.028 1582.99 922.028 1582.99 944 1574 c 0,64,65 980.724 1556.52 980.724 1556.52 1013.99 1556.61 c 0,66,67 1018.78 1556.62 1018.78 1556.62 1023.5 1557 c 0,68,69 1065.63 1556.28 l 0,70,71 1085.75 1554.21 1085.75 1554.21 1108 1549 c 0,72,73 1133.01 1543 1133.01 1543 1141 1509 c 0,74,75 1144.76 1476.5 l 0,76,77 1144.64 1459.48 1144.64 1459.48 1140 1443 c 0,78,79 1100.54 1480.38 1100.54 1480.38 1075.21 1480.38 c 0,80,81 1063.96 1480.38 1063.96 1480.38 1055.5 1473 c 0,82,83 1028 1449 1028 1449 1027 1379 c 0,84,85 1025.99 1342.76 1025.99 1342.76 1023.5 1308 c 0,86,87 1024.8 1274.25 l 0,88,89 1027.4 1257.24 1027.4 1257.24 1034 1241 c 0,90,91 1056.99 1187 1056.99 1187 1104 1173.5 c 0,92,93 1150.99 1160 1150.99 1160 1208 1157 c 0,94,95 1193.22 1128.26 1193.22 1128.26 1142.36 1128.18 c 0,96,97 1131.28 1128.16 1131.28 1128.16 1118.5 1129.5 c 0,98,99 1046.99 1137 1046.99 1137 1024 1155 c 0,100,101 960.474 1201.53 960.474 1201.53 960.191 1248.45 c 0,102,103 960.158 1253.97 960.158 1253.97 961 1259.5 c 0,104,105 961.658 1293.31 l 0,106,107 957.59 1340.52 957.59 1340.52 929 1412 c 0,108,109 904.002 1471.99 904.002 1471.99 828.5 1485 c 0,110,111 753 1498.01 753 1498.01 702 1440 c 0,112,113 663 1395 663 1395 633 1335 c 0,114,115 603.007 1275.01 603.007 1275.01 567 1229 c 0,116,117 553 1211 553 1211 495 1212.5 c 0,118,119 442.472 1213.86 442.472 1213.86 441.617 1243.51 c 0,120,121 441.528 1246.6 441.528 1246.6 442 1250 c 0,122,123 476 1233.01 476 1233.01 508 1254.5 c 0,124,125 538.826 1275.21 538.826 1275.21 539 1309 c 0,126,127 538.026 1346.98 538.026 1346.98 516 1347.5 c 0,128,129 494.008 1347.01 494.008 1347.01 476 1335 c 0,130,131 422.998 1299 422.998 1299 400 1269 c 0,132,133 376.997 1239 376.997 1239 363 1178 c 0,134,135 350.291 1125.16 350.291 1125.16 350.334 1075.45 c 0,136,137 350.354 1050.84 350.354 1050.84 353.5 1027 c 0,138,-1 373 875 l 0,139,140 377 833 377 833 392.5 790.5 c 0,141,142 408 748 408 748 402 708 c 0,143,144 384 597 384 597 276 601 c 0,145,146 297 615 297 615 321 643.5 c 0,147,148 345 672 345 672 327 704 c 0,149,150 317.431 720.586 317.431 720.586 296.467 720.691 c 0,151,152 284.569 720.75 284.569 720.75 269 715.5 c 0,153,154 226 701 226 701 222 674 c 0,155,156 203.999 574.997 203.999 574.997 203.5 494 c 0,157,158 207.196 446.84 l 0,159,160 216.755 387.21 216.755 387.21 251 323 c 0,161,162 274 279 274 279 310 272.5 c 0,163,164 325.021 273.259 l 0,165,166 349.347 280.951 349.347 280.951 361 333 c 0,167,168 367 358 367 358 360.5 370.5 c 0,169,170 354.013 382.975 354.013 382.975 340 408 c 0,171,172 364 402 364 402 386 395.5 c 0,173,174 408 389 408 389 420 365 c 0,175,176 444 317 444 317 448 270 c 0,177,178 452.001 223 452.001 223 469 172 c 0,179,180 485.999 112 485.999 112 527 100 c 0,181,182 549.843 92.7319 549.843 92.7319 568.743 92.6397 c 0,183,184 589.209 92.5398 589.209 92.5398 605.053 100.853 c 0,185,186 630.948 114.44 630.948 114.44 644.5 150.5 c 0,187,188 674 228.999 674 228.999 713 284 c 0,189,190 728 306 728 306 758.5 303 c 0,191,192 789 300 789 300 807 272 c 0,193,194 822.48 247.06 822.48 247.06 822.428 228.037 c 0,195,196 822.42 224.94 822.42 224.94 822 222 c 0,197,198 806.151 230.453 806.151 230.453 792.255 230.533 c 0,199,200 779.849 230.604 779.849 230.604 769 224 c 0,201,202 756.895 216.632 756.895 216.632 756.701 206.493 c 0,203,204 760.654 193.505 l 0,205,206 762.764 189.883 762.764 189.883 766 186 c 0,207,208 778.697 169.395 778.697 169.395 794.376 169.248 c 0,209,210 804.891 169.149 804.891 169.149 816.746 176.451 c 0,211,212 823.411 180.556 823.411 180.556 830.5 187 c 0,213,214 869 221.999 869 221.999 872 275 c 0,215,216 875 343 875 343 864 401 c 0,217,218 853.002 458.994 853.002 458.994 830 527 c 0,219,220 819 558 819 558 829.5 632 c 0,221,222 840 706 840 706 877 760 c 0,223,224 871 705 871 705 863.5 649.5 c 0,225,226 856 594 856 594 874 540 c 0,227,228 887.006 500.985 887.006 500.985 903 460.5 c 0,229,230 919 420 919 420 937 388 c 0,231,232 967.999 333.002 967.999 333.002 997 302 c 0,233,234 1020.46 276.921 1020.46 276.921 1064.21 276.712 c 0,235,236 1074.54 276.663 1074.54 276.663 1086 278 c 0,237,238 1110.37 280.089 1110.37 280.089 1110.5 306.429 c 0,239,240 1110.55 317.912 1110.55 317.912 1106 334 c 0,241,242 1118.66 334.754 l 0,243,244 1131.52 331.594 1131.52 331.594 1143 312 c 0,245,246 1157.23 287.716 1157.23 287.716 1157.45 273.956 c 0,247,248 1157.49 271.279 1157.49 271.279 1157 269 c 0,249,250 1148 226.995 1148 226.995 1130.5 212 c 0,251,252 1112.99 197 1112.99 197 1075 185 c 0,253,254 1046.42 174.52 1046.42 174.52 1011.5 174.5 c 0,255,256 978 174.999 978 174.999 951 161 c 0,257,258 914 141.001 914 141.001 909.5 67 c 0,259,260 905 -6.99995 905 -6.99995 884 -48 c 0,261,262 861 -91.0001 861 -91.0001 795 -104 c 0,263,264 769 -108.999 769 -108.999 721.5 -100 c 0,265,266 674 -91 674 -91 675 -49 c 0,267,268 706 -76 706 -76 748 -55 c 0,269,270 771 -41 771 -41 760.5 -12 c 0,271,272 750 17 750 17 728 23 c 0,273,274 701 27 701 27 672 20 c 0,275,276 643 12.9999 643 12.9999 618 4 c 0,277,278 510.997 -35.0014 510.997 -35.0014 450.5 -65 c 0,279,280 390 -95 390 -95 288 -50 c 0,281,282 255.001 -35.0002 255.001 -35.0002 248 19 c 0,283,284 240.999 73 240.999 73 266 90 c 0,285,286 268.764 57.7708 l 0,287,288 273.271 37.2823 273.271 37.2823 285 23.5 c 0,289,290 305 -3.8147e-06 305 -3.8147e-06 326 18 c 0,291,292 351 42 351 42 330 84.5 c 0,293,294 309 126.999 309 126.999 270 170 c 0,295,296 231.004 212.997 231.004 212.997 189 247 c 0,297,298 147 281 147 281 132 287 c 0,299,300 90.8733 273.479 90.8733 273.479 90.2146 252.658 c 0,301,302 93.6925 239.052 l 0,303,304 99.219 228.316 99.219 228.316 113.5 216 c 0,305,306 168.001 168.999 168.001 168.999 208 167 c 0,307,308 164.966 164.347 l 0,309,310 113.852 166.12 113.852 166.12 87.5 195 c 0,311,312 51 235.001 51 235.001 27 291 c 0,313,314 -18 394 -18 394 7 532 c 0,315,316 21 601 21 601 58.5 666.5 c 0,317,318 96 732 96 732 100 804 c 0,319,320 104.001 909 104.001 909 77.5 1014 c 0,321,322 50.9998 1119 50.9998 1119 47 1225 c 0,0,1 EndSplineSet KernsSLIF: 83 -143 0 0 115 -130 0 0 65 -65 0 0 97 -91 0 0 EndChar StartChar: D Encoding: 68 68 59 Width: 1497 Flags: HMW VStem: 205 177.5<-118.5 1622> Fore 365 -163 m 1,0,1 416.469 -202.888 416.469 -202.888 460.901 -203.041 c 0,2,3 485.532 -203.126 485.532 -203.126 508 -191 c 0,4,5 571 -156.999 571 -156.999 570 -140 c 0,6,7 568.069 -103.299 568.069 -103.299 511.5 -103 c 0,8,9 454.994 -104.001 454.994 -104.001 382.5 -118.5 c 0,10,11 309.985 -133.004 309.985 -133.004 241 -149.5 c 0,12,13 187.813 -162.219 187.813 -162.219 159.581 -162.162 c 0,14,15 151.188 -162.146 151.188 -162.146 145 -161 c 0,16,17 87.0002 -150.001 87.0002 -150.001 36.5 -93.5 c 0,18,19 -14 -37 -14 -37 31 65 c 0,20,21 32 -35 32 -35 80 -60.5 c 0,22,23 106.871 -74.7751 106.871 -74.7751 136.405 -74.7912 c 0,24,25 159.629 -74.8038 159.629 -74.8038 184.5 -66 c 0,26,27 241 -46.0003 241 -46.0003 287.5 5 c 0,28,29 334 56 334 56 334 110 c 0,30,31 334 134.001 334 134.001 303 181 c 0,32,33 272 227.999 272 227.999 240 223 c 0,34,35 200.921 216.053 200.921 216.053 200.681 163.856 c 0,36,37 200.645 155.947 200.645 155.947 201.5 147 c 0,38,39 207.999 79.0005 207.999 79.0005 242 55 c 0,40,41 198 57 198 57 186 69.5 c 0,42,43 173.999 82.0008 173.999 82.0008 166 102 c 0,44,45 146.175 148.259 146.175 148.259 146.18 200.646 c 0,46,47 146.186 259.24 146.186 259.24 171 325.5 c 0,48,49 217.997 450.995 217.997 450.995 255 533 c 0,50,51 281 592 281 592 288.5 644.5 c 0,52,53 296 697 296 697 284 804 c 0,54,55 272 905.001 272 905.001 200.5 994 c 0,56,57 129.006 1082.99 129.006 1082.99 113 1136 c 0,58,59 105.918 1159.37 105.918 1159.37 105.92 1182.3 c 0,60,61 105.924 1224.13 105.924 1224.13 129.5 1264.5 c 0,62,63 159.568 1315.99 159.568 1315.99 217.121 1316.24 c 0,64,65 229.432 1316.29 229.432 1316.29 243 1314 c 0,66,67 217.999 1303.01 217.999 1303.01 202.5 1270.5 c 0,68,69 197.239 1259.47 197.239 1259.47 197.22 1249.64 c 0,70,71 197.184 1230.54 197.184 1230.54 217 1216 c 0,72,73 229.554 1206.32 229.554 1206.32 239.508 1206.15 c 0,74,75 250.481 1209.35 l 0,76,77 269.179 1221.62 269.179 1221.62 275 1281 c 0,78,79 280.343 1335.49 280.343 1335.49 280.262 1373.43 c 0,80,81 280.192 1406.51 280.192 1406.51 276 1427 c 0,82,83 265.002 1483.99 265.002 1483.99 241 1527 c 0,84,85 216.996 1570.01 216.996 1570.01 205 1622 c 0,86,87 198.585 1647.66 198.585 1647.66 198.623 1675.88 c 0,88,89 198.661 1704.84 198.661 1704.84 205.5 1736.5 c 0,90,91 218.999 1799 218.999 1799 263 1838 c 0,92,93 292.994 1866 292.994 1866 351 1867.5 c 0,94,95 385.17 1864.86 l 0,96,97 415.91 1858.47 415.91 1858.47 430 1837 c 0,98,99 440 1820.01 440 1820.01 448 1802.5 c 0,100,101 451.449 1794.95 451.449 1794.95 451.366 1783.78 c 0,102,103 451.257 1769.05 451.257 1769.05 445 1748 c 0,104,105 439 1775 439 1775 383 1796 c 0,106,107 370.726 1800.6 370.726 1800.6 360.326 1800.69 c 0,108,109 348.764 1800.79 348.764 1800.79 339.517 1795.3 c 0,110,111 319.131 1783.21 319.131 1783.21 310 1744 c 0,112,113 296 1690 296 1690 342.5 1657 c 0,114,115 389.022 1623.98 389.022 1623.98 438 1601 c 0,116,117 481.975 1580.01 481.975 1580.01 619 1544.5 c 0,118,119 667.085 1532.04 667.085 1532.04 700.019 1532.08 c 0,120,121 760.914 1532.16 760.914 1532.16 770 1575 c 0,122,123 774.3 1598.65 774.3 1598.65 774.32 1618.05 c 0,124,125 774.385 1679.86 774.385 1679.86 731 1698.5 c 0,126,127 703.091 1710.49 703.091 1710.49 679.502 1710.62 c 0,128,129 662.09 1710.72 662.09 1710.72 647.03 1704.36 c 0,130,131 635 1698 l 0,132,133 635 1743 635 1743 670 1758.5 c 0,134,135 704.999 1773.99 704.999 1773.99 713 1775 c 0,136,137 760 1774.5 l 0,138,139 802.004 1770.17 802.004 1770.17 824 1750.5 c 0,140,141 857.006 1720.99 857.006 1720.99 872 1694 c 0,142,143 896.002 1649 896.002 1649 913.5 1585 c 0,144,145 930.999 1521 930.999 1521 973 1494 c 0,146,147 1042 1450.01 1042 1450.01 1072 1440 c 0,148,149 1102 1429.99 1102 1429.99 1177 1419 c 0,150,151 1282.99 1403 1282.99 1403 1308 1317 c 0,152,153 1313.32 1295.3 1313.32 1295.3 1313.3 1276.45 c 0,154,155 1313.22 1206.7 1313.22 1206.7 1240 1176 c 0,156,157 1260.26 1204.06 1260.26 1204.06 1260.48 1235.14 c 0,158,159 1260.55 1243.95 1260.55 1243.95 1259 1253 c 0,160,161 1252.76 1289.51 1252.76 1289.51 1206.87 1289.54 c 0,162,163 1201.23 1289.55 1201.23 1289.55 1195 1289 c 0,164,165 1174.85 1287.11 1174.85 1287.11 1174.92 1260.84 c 0,166,167 1174.96 1245.39 1174.96 1245.39 1182 1221.5 c 0,168,169 1201.02 1156.95 1201.02 1156.95 1214 1130 c 0,170,171 1274.01 1003.97 1274.01 1003.97 1353 887 c 0,172,173 1432 770.008 1432 770.008 1438 703 c 0,174,175 1437.29 667.063 l 0,176,177 1429.48 607.261 1429.48 607.261 1377 554 c 0,178,179 1359 536 1359 536 1318.5 532.5 c 0,180,181 1285.16 533.1 l 0,182,183 1266.74 535.756 1266.74 535.756 1253 544 c 0,184,185 1292 544 1292 544 1311.5 575 c 0,186,187 1320.25 588.918 1320.25 588.918 1320.44 600.216 c 0,188,189 1317.5 612.987 l 0,190,191 1314.39 618.996 1314.39 618.996 1308 624 c 0,192,193 1266 653 1266 653 1237.5 607.5 c 0,194,195 1209 562 1209 562 1200 535 c 0,196,197 1198.96 531.908 1198.96 531.908 1180 489.5 c 0,198,199 1161.01 447.043 1161.01 447.043 1144.5 396.5 c 0,200,201 1128 346 1128 346 1123.5 303.5 c 0,202,203 1124.19 278.807 l 0,204,205 1128.4 260.303 1128.4 260.303 1146 259 c 0,206,207 1188 255 1188 255 1203 276 c 0,208,209 1218.01 297.013 1218.01 297.013 1232 339 c 0,210,211 1252.93 293.919 1252.93 293.919 1253.12 259.927 c 0,212,213 1253.22 242.802 1253.22 242.802 1248.05 228.491 c 0,214,215 1244.37 218.279 1244.37 218.279 1238 209.5 c 0,216,217 1205 164 1205 164 1175 152 c 0,218,219 1085 115.002 1085 115.002 1029.5 103.5 c 0,220,221 974 91.9999 974 91.9999 930.5 75.5 c 0,222,223 887 59 887 59 844.5 22.5 c 0,224,225 801.998 -14.0021 801.998 -14.0021 740 -103 c 0,226,227 619.211 -271.373 619.211 -271.373 522.285 -271.438 c 0,228,229 513.29 -271.444 513.29 -271.444 504.5 -270 c 0,230,231 401 -253 401 -253 365 -163 c 1,0,1 725 192 m 0,122,123 749 216 749 216 794.5 272 c 0,124,125 840 328 840 328 855 355 c 0,126,127 879.999 397.998 879.999 397.998 888.5 438.5 c 0,128,129 897 479 897 479 906 529 c 0,130,131 922 613 922 613 979 629.5 c 0,132,133 1000.57 635.743 1000.57 635.743 1016.41 635.759 c 0,134,135 1042.44 635.784 1042.44 635.784 1053 619 c 0,136,137 1002 619 1002 619 984 586 c 0,138,139 966 553 966 553 977 538 c 0,140,141 989.486 518.904 989.486 518.904 1004.74 518.755 c 0,142,143 1015.01 518.656 1015.01 518.656 1026.55 527.159 c 0,144,145 1044.5 540.4 1044.5 540.4 1065.5 574.5 c 0,146,147 1120 663.009 1120 663.009 1126 744 c 0,148,149 1130.99 817 1130.99 817 1094.5 950.5 c 0,150,151 1066.07 1054.48 1066.07 1054.48 1021.56 1054.42 c 0,152,153 1008.93 1054.4 1008.93 1054.4 995 1046 c 0,154,155 975.667 1034 975.667 1034 975.667 1018 c 0,156,157 975.667 1010 975.667 1010 980.5 1001 c 0,158,159 995.002 973.998 995.002 973.998 1038 962 c 0,160,161 954 929 954 929 929.5 1003.5 c 0,162,163 904.996 1078.02 904.996 1078.02 894 1138 c 0,164,165 876.999 1227 876.999 1227 805.5 1282.5 c 0,166,167 734 1338 734 1338 651.5 1350 c 0,168,169 605.665 1352.79 l 0,170,171 548.883 1351.23 548.883 1351.23 498 1324 c 0,172,173 427.002 1286.01 427.002 1286.01 412 1188 c 0,174,175 405 1146 405 1146 419.5 1117.5 c 0,176,177 434 1089 434 1089 470 1098 c 0,178,179 485 1101.75 485 1101.75 485.375 1115.63 c 0,180,181 484 1126 l 0,182,183 477.997 1149.01 477.997 1149.01 454 1166 c 0,184,185 479.875 1167.62 l 0,186,187 516.252 1164.25 516.252 1164.25 538 1126 c 0,188,189 546.998 1108 546.998 1108 553 1077.5 c 0,190,191 553.751 1052.78 l 0,192,193 551.262 1032.3 551.262 1032.3 539 1009 c 0,194,195 458.999 855.998 458.999 855.998 437.5 671.5 c 0,196,197 416 487 416 487 428 407 c 0,198,199 445 284 445 284 488.5 279.5 c 0,200,201 532 275 532 275 539 318 c 0,202,203 538.454 335.091 l 0,204,205 531.345 359 531.345 359 484 359 c 0,206,207 490 374 490 374 509.5 376 c 0,208,209 529 378 529 378 541 381 c 0,210,211 567.678 382.442 l 0,212,213 608.823 378.097 608.823 378.097 618.5 327 c 0,214,215 630.999 261.003 630.999 261.003 643 220 c 0,216,217 652 181 652 181 678 176.5 c 0,218,219 697.181 176.647 l 0,220,221 712.042 179.66 712.042 179.66 725 192 c 0,122,123 EndSplineSet KernsSLIF: 90 -182 0 0 122 -143 0 0 97 -207 0 0 65 -150 0 0 EndChar StartChar: E Encoding: 69 69 53 Width: 1257 Flags: HMW HStem: 47 32.5<30 142.5> 89 202.5<224.5 921.5> 729 161<354 767> 1357 203<404 858> VStem: 117.5 176.5<365 1523> Fore 702 114 m 1,0,1 611.006 112.001 611.006 112.001 515.5 93.5 c 0,2,3 420 75.0001 420 75.0001 339 36 c 0,4,5 268 1.99995 268 1.99995 178.5 -13.5 c 0,6,7 88.9995 -29 88.9995 -29 30 47 c 0,8,9 -15 107 -15 107 15 159.5 c 0,10,11 40.0002 203.25 40.0002 203.25 98.3333 203.597 c 0,12,13 110 203.667 110 203.667 123 202 c 0,14,-1 82.5 186.5 l 0,15,16 64.901 179.851 64.901 179.851 64.7384 152.708 c 0,17,18 64.6931 145.149 64.6931 145.149 66 136 c 0,19,20 75 70 75 70 142.5 79.5 c 0,21,22 210 88.9999 210 88.9999 225 162 c 0,23,24 229.413 184.556 229.413 184.556 229.378 216.128 c 0,25,26 229.341 248.943 229.341 248.943 224.5 291.5 c 0,27,28 215.001 375 215.001 375 152 384 c 0,29,30 129.001 387 129.001 387 117.5 365 c 0,31,32 105.999 343 105.999 343 110 322 c 0,33,34 117.001 279 117.001 279 152 244 c 0,35,36 84.0005 262 84.0005 262 60 326 c 0,37,38 14 446 14 446 47.5 574 c 0,39,40 80.9999 702 80.9999 702 102 820 c 0,41,42 121.001 932.001 121.001 932.001 124.5 984 c 0,43,44 124.02 1053.51 l 0,45,46 121.855 1094.37 121.855 1094.37 116 1150 c 0,47,48 103.999 1246.01 103.999 1246.01 60.5 1348.5 c 0,49,50 17 1450.99 17 1450.99 22 1545 c 0,51,52 24 1585.01 24 1585.01 32 1606.5 c 0,53,54 40 1627.99 40 1627.99 71 1653 c 0,55,56 106.829 1682.31 106.829 1682.31 136.69 1682.29 c 0,57,58 180.171 1682.25 180.171 1682.25 211 1620 c 0,59,60 188.421 1640.26 188.421 1640.26 166.513 1640.58 c 0,61,62 147.914 1637.21 l 0,63,64 141.427 1634.75 141.427 1634.75 135 1630.5 c 0,65,66 110.758 1614.45 110.758 1614.45 110.555 1588.31 c 0,67,68 110.455 1575.46 110.455 1575.46 117 1558 c 0,69,70 135.515 1508.3 135.515 1508.3 195 1508 c 0,71,72 253.999 1509.01 253.999 1509.01 294 1523 c 0,73,74 395.012 1556 395.012 1556 501.5 1639.5 c 0,75,76 591.424 1710.01 591.424 1710.01 685.277 1710.28 c 0,77,78 702.572 1710.33 702.572 1710.33 720 1708 c 0,79,80 764 1702 764 1702 787.5 1661.5 c 0,81,82 811 1621 811 1621 787 1582 c 0,83,84 776.899 1645.98 776.899 1645.98 721.089 1646.53 c 0,85,86 698.5 1644.5 l 0,87,88 623.013 1631.18 623.013 1631.18 623 1584 c 0,89,90 623 1526.01 623 1526.01 680.99 1525.71 c 0,91,92 698 1525.62 698 1525.62 720 1530.5 c 0,93,94 817.381 1552.08 817.381 1552.08 858 1560 c 0,95,96 911.778 1569.96 911.778 1569.96 983.5 1580 c 0,97,98 1036.93 1583.69 l 0,99,100 1076.51 1583.35 1076.51 1583.35 1110 1573 c 0,101,102 1244.01 1531 1244.01 1531 1255 1399 c 0,103,104 1249 1432 1249 1432 1232 1452 c 0,105,106 1215.02 1471.98 1215.02 1471.98 1200 1485 c 0,107,108 1153.97 1523.47 1153.97 1523.47 1089.78 1523.48 c 0,109,110 1060.52 1523.48 1060.52 1523.48 1027.5 1515.5 c 0,111,112 921.99 1490 921.99 1490 863 1441 c 0,113,114 833.001 1415.01 833.001 1415.01 827.5 1379 c 0,115,116 828.033 1360.63 l 0,117,118 833.454 1337.82 833.454 1337.82 864 1324 c 0,119,120 869.974 1321.01 869.974 1321.01 888.5 1315.5 c 0,121,122 900.641 1311.89 900.641 1311.89 918.181 1311.94 c 0,123,124 927.351 1311.97 927.351 1311.97 938 1313 c 0,125,126 875 1259 875 1259 740 1322 c 0,127,128 605 1385 605 1385 514 1385 c 0,129,130 441.992 1383.99 441.992 1383.99 404 1357 c 0,131,132 378.16 1338.64 378.16 1338.64 378.214 1299.01 c 0,133,134 378.239 1280.81 378.239 1280.81 384 1257 c 0,135,136 393 1218 393 1218 423.5 1164 c 0,137,138 454 1110 454 1110 434 1071 c 0,139,140 409 1021.01 409 1021.01 358 1023 c 0,141,142 408 1083 408 1083 370 1108.5 c 0,143,144 353.553 1119.54 353.553 1119.54 338.791 1119.8 c 0,145,146 322.286 1116.51 l 0,147,148 312.191 1112.14 312.191 1112.14 303 1102 c 0,149,150 273.134 1069.54 273.134 1069.54 273.197 1022.74 c 0,151,152 273.231 997.463 273.231 997.463 282 968 c 0,153,154 307 884 307 884 385 891 c 0,155,156 455 897 455 897 507.5 911 c 0,157,158 559.99 924.997 559.99 924.997 623 948 c 0,159,160 702 976 702 976 804 940 c 0,161,162 906 904 906 904 884 793 c 0,163,164 876 837 876 837 846 869.5 c 0,165,166 816 902 816 902 767 890 c 0,167,168 726.999 879.999 726.999 879.999 705.5 844.5 c 0,169,170 684 809 684 809 677 773 c 0,171,172 658 674 658 674 626 610.5 c 0,173,174 604.458 567.752 604.458 567.752 542.58 567.831 c 0,175,176 512.542 567.869 512.542 567.869 473 578 c 0,177,178 561 602 561 602 561 645 c 0,179,180 561 720 561 720 485.5 729 c 0,181,182 447.32 733.551 447.32 733.551 414.125 733.499 c 0,183,184 381.68 733.449 381.68 733.449 354 729 c 0,185,186 284 717 284 717 283 654 c 0,187,188 280 600 280 600 315 596.5 c 0,189,190 328.846 598.578 l 0,191,192 344.765 606.4 344.765 606.4 344.877 641.401 c 0,193,194 344.905 649.899 344.905 649.899 344 660 c 0,195,196 392 607 392 607 391 573 c 0,197,198 389.999 514.999 389.999 514.999 357.5 484.5 c 0,199,200 325 454.001 325 454.001 325 410 c 0,201,202 325 332 325 332 369 336.5 c 0,203,204 413 341 413 341 471 370 c 0,205,206 529.005 399.002 529.005 399.002 585.5 422.5 c 0,207,208 606.644 431.295 606.644 431.295 623.377 431.196 c 0,209,210 651.356 431.031 651.356 431.031 667 406 c 0,211,212 677.588 389.235 677.588 389.235 677.666 368.967 c 0,213,214 677.676 366.265 677.676 366.265 677.5 363.5 c 0,215,216 676 340 676 340 652 333 c 0,217,218 652.989 347.212 l 0,219,220 650.646 358.106 650.646 358.106 635.616 358.287 c 0,221,222 630.147 358.352 630.147 358.352 623 357 c 0,223,224 563 343 563 343 603 291 c 0,225,226 630 254 630 254 697.5 254 c 0,227,228 765 254 765 254 800 275 c 0,229,230 851 305 851 305 888 352 c 0,231,232 925 399 925 399 976 426 c 0,233,234 993.321 434.66 993.321 434.66 1010.43 434.679 c 0,235,236 1046.68 434.717 1046.68 434.717 1082 396 c 0,237,238 1134.01 339 1134.01 339 1076 291 c 0,239,240 1101.99 369 1101.99 369 1025 361 c 0,241,242 967.999 353.999 967.999 353.999 961.5 300.5 c 0,243,244 960.341 260.536 l 0,245,246 962.497 231.61 962.497 231.61 974 208 c 0,247,248 998 157 998 157 1055 116.5 c 0,249,250 1112 76 1112 76 1148 34 c 0,251,252 1185 -7.99286 1185 -7.99286 1197 -81.5 c 0,253,254 1199.64 -120.957 l 0,255,256 1197.74 -168.802 1197.74 -168.802 1169 -204 c 0,257,258 1173.43 -171.487 1173.43 -171.487 1173.38 -146.126 c 0,259,260 1173.32 -120.019 1173.32 -120.019 1168.5 -101.5 c 0,261,262 1159.01 -65.0068 1159.01 -65.0068 1111 -17 c 0,263,264 1028.99 64.0016 1028.99 64.0016 921.5 89 c 0,265,266 814.002 114 814.002 114 702 114 c 1,0,1 EndSplineSet KernsSLIF: 83 -130 0 0 115 -130 0 0 EndChar StartChar: F Encoding: 70 70 8 Width: 1352 Flags: MW HStem: 705 181<397 741> 1396 225<414 1092> VStem: 110 217<38 1678> Fore 642 839 m 1,0,1 644 729 644 729 741 705 c 0,2,3 769.434 702.509 l 0,4,5 803.088 704.294 803.088 704.294 834.5 729 c 0,6,7 879 763 l 0,8,9 873 739 873 739 845.5 693 c 0,10,11 818 647 818 647 773 627 c 0,12,13 719 607 719 607 685.5 614.5 c 0,14,15 652 622 652 622 613 634 c 0,16,17 562 653 562 653 505.5 704 c 0,18,19 466.31 739.375 466.31 739.375 424.956 739.628 c 0,20,21 408.667 739.728 408.667 739.728 392.041 734.379 c 0,22,23 390.023 733.73 390.023 733.73 388 733 c 0,24,25 340 708 340 708 329.5 679.5 c 0,26,27 319 651 319 651 312 621 c 0,28,29 306 585 306 585 292 478 c 0,30,31 278 371 278 371 370 376 c 0,32,33 424 427 424 427 347 473 c 0,34,35 419 467 419 467 446 407 c 0,36,37 446 353 446 353 433.5 330 c 0,38,39 420.995 306.989 420.995 306.989 401 265 c 0,40,41 375.999 232 375.999 232 362 187.5 c 0,42,-1 346 137 l 0,43,44 324 87.0005 324 87.0005 327 38 c 0,45,46 327 -20 327 -20 350.5 -86.5 c 0,47,48 374.001 -153.001 374.001 -153.001 428 -195 c 0,49,50 365.001 -195 365.001 -195 323.5 -122.5 c 0,51,52 282.002 -50.0044 282.002 -50.0044 266 -3 c 0,53,54 256 75 256 75 228.5 101.5 c 0,55,56 201.001 128.001 201.001 128.001 170 137 c 0,57,58 165.999 137 165.999 137 132.5 129.5 c 0,59,60 99.0005 122 99.0005 122 101 62 c 0,61,-1 115.5 33.5 l 0,62,63 130.001 5 130.001 5 178 -5 c 0,64,65 150.278 -14.0397 150.278 -14.0397 128.549 -13.9998 c 0,66,67 114.222 -13.9735 114.222 -13.9735 102.5 -10 c 0,68,69 72.9999 4.76837e-06 72.9999 4.76837e-06 61 3 c 0,70,71 32 18 32 18 20 48.5 c 0,72,73 8 78.9999 8 78.9999 8 97 c 0,74,75 15.0001 179.999 15.0001 179.999 77 241 c 0,76,77 93.9998 251.999 93.9998 251.999 105 282 c 0,78,79 115.999 312 115.999 312 123 336 c 0,80,81 128.001 354.007 128.001 354.007 140.5 444.5 c 0,82,83 149 506.041 149 506.041 148.946 535.905 c 0,84,85 148.92 549.96 148.92 549.96 147 557 c 0,86,87 146.947 572.694 l 0,88,89 142.652 589.782 142.652 589.782 119 603 c 0,90,91 78.9999 606 78.9999 606 86.5 552.5 c 0,92,93 93.9998 499.001 93.9998 499.001 108 486 c 0,94,95 69 486 69 486 44 527 c 0,96,97 20 554 20 554 23 583 c 0,98,99 26 612 26 612 35 640 c 0,100,101 53 689 53 689 86 731.5 c 0,102,103 119 774 119 774 143 820 c 0,104,105 145.997 843.974 145.997 843.974 152.5 889 c 0,106,107 152.986 918.716 l 0,108,109 149.654 945.423 149.654 945.423 132 967 c 0,110,111 129 973 129 973 83 1040.5 c 0,112,113 38 1106.99 38 1106.99 37 1108 c 0,114,115 30.0021 1120 30.0021 1120 17 1176 c 0,116,117 9.22428 1209.49 9.22428 1209.49 9.31933 1241.2 c 0,118,119 9.38319 1262.5 9.38319 1262.5 13 1283 c 0,120,121 13 1311.99 13 1311.99 42.5 1349 c 0,122,123 70.2188 1383.77 70.2188 1383.77 104.576 1384.1 c 0,124,125 106.774 1384.12 106.774 1384.12 109 1384 c 0,126,127 82 1339 82 1339 95.5 1289.5 c 0,128,129 109 1240 109 1240 161 1252 c 0,130,131 176.009 1255 176.009 1255 193.5 1268 c 0,132,133 211.001 1281.01 211.001 1281.01 227 1329 c 0,134,135 236 1369.99 236 1369.99 233 1411.5 c 0,136,137 230.001 1452.99 230.001 1452.99 224 1495 c 0,138,139 215 1547.99 215 1547.99 149 1537 c 0,140,141 113 1516.15 113 1516.15 113 1499 c 0,142,143 114.998 1483 114.998 1483 130 1444 c 0,144,145 68.9998 1495 68.9998 1495 66 1559 c 0,146,147 66.2889 1594.43 l 0,148,149 72.286 1642.5 72.286 1642.5 110 1678 c 0,150,151 159.023 1705.71 159.023 1705.71 195.936 1705.91 c 0,152,153 210.973 1705.99 210.973 1705.99 224 1701.5 c 0,154,155 269 1686.01 269 1686.01 328 1658 c 0,156,-1 414 1621 l 0,157,158 452.534 1610.88 452.534 1610.88 492.001 1610.98 c 0,159,160 534.461 1611.08 534.461 1611.08 578 1623 c 0,161,162 662 1645.99 662 1645.99 743 1662 c 0,163,164 815 1672.01 815 1672.01 877.5 1668 c 0,165,166 940.046 1663.99 940.046 1663.99 1010 1652 c 0,167,168 1102.99 1608.01 1102.99 1608.01 1115 1592.5 c 0,169,-1 1148 1551 l 0,170,171 1128.02 1558.99 1128.02 1558.99 1114 1568.5 c 0,172,173 1099.99 1578.01 1099.99 1578.01 1070 1583 c 0,174,175 991 1583 991 1583 986 1543.5 c 0,176,177 981 1504 981 1504 972 1504 c 0,178,179 987.996 1452.01 987.996 1452.01 1008 1434.5 c 0,180,181 1027.99 1417 1027.99 1417 1092 1396 c 0,182,183 1224 1402 1224 1402 1237.5 1459.5 c 0,184,185 1251.02 1517.06 1251.02 1517.06 1288 1628 c 0,186,-1 1272.5 1524 l 0,187,188 1257.99 1426.99 1257.99 1426.99 1240 1409 c 0,189,190 1215.99 1375.99 1215.99 1375.99 1174.5 1356 c 0,191,192 1132.97 1335.99 1132.97 1335.99 1112 1334 c 0,193,194 1075.74 1331.76 l 0,195,196 1068.75 1331.8 1068.75 1331.8 1060.5 1332 c 0,197,198 1017.99 1333.01 1017.99 1333.01 1006 1345 c 0,199,200 979 1355.01 979 1355.01 957.5 1369 c 0,201,-1 913 1398 l 0,202,203 764 1482 764 1482 702.5 1477.5 c 0,204,205 640.987 1473 640.987 1473 496 1409 c 0,206,207 460 1383.99 460 1383.99 473.5 1352 c 0,208,209 487.002 1320 487.002 1320 518 1320 c 0,210,211 543.105 1321.01 543.105 1321.01 572.5 1325 c 0,212,213 602.002 1329.01 602.002 1329.01 626 1383 c 0,214,215 623 1369.01 623 1369.01 623.5 1336.5 c 0,216,217 620.162 1310.39 l 0,218,219 615.024 1291.76 615.024 1291.76 602 1274 c 0,220,221 521.986 1225.99 521.986 1225.99 436.5 1203 c 0,222,223 351.002 1180.01 351.002 1180.01 333 1058 c 0,224,225 329.412 1045.28 329.412 1045.28 329.388 1030.91 c 0,226,227 329.34 1001.22 329.34 1001.22 344.5 964.5 c 0,228,229 367 910 367 910 397 886 c 0,230,231 406.248 868.824 406.248 868.824 439.281 868.668 c 0,232,233 456.251 868.588 456.251 868.588 479.5 873 c 0,234,235 548 886 548 886 557 934 c 0,236,237 560 994 560 994 526 1001.5 c 0,238,239 492 1009 492 1009 457 991 c 0,240,241 475.004 1027.01 475.004 1027.01 505 1044 c 0,242,243 600 1080 600 1080 630 996 c 0,244,245 635 961 635 961 637.5 918 c 0,246,-1 642 839 l 1,0,1 EndSplineSet KernsSLIF: 116 -286 0 0 84 -169 0 0 45 -208 0 0 46 -234 0 0 44 -273 0 0 65 -491 0 0 97 -470 0 0 EndChar StartChar: G Encoding: 71 71 12 Width: 1278 Flags: W Fore 586 -123 m 0,0,1 512 -115.001 512 -115.001 398.5 -55.5 c 0,2,3 285.001 3.99925 285.001 3.99925 251 54 c 0,4,5 140.158 218.532 140.158 218.532 139.923 377.813 c 0,6,7 139.886 402.469 139.886 402.469 142.5 427 c 0,8,9 162 610 162 610 93 791 c 0,10,11 70.9999 847 70.9999 847 40 906.5 c 0,12,13 8.99995 966 8.99995 966 12 1002 c 0,14,15 17 1065 17 1065 57 1086 c 0,16,17 97.0001 1107 97.0001 1107 130 1095 c 0,18,19 112.083 1092.92 l 0,20,21 89.0771 1084.96 89.0771 1084.96 75.5 1049 c 0,22,23 70.7155 1036.33 70.7155 1036.33 70.5795 1026.33 c 0,24,25 73.8997 1010.88 l 0,26,27 81.7288 995.636 81.7288 995.636 108 991 c 0,28,29 192 975 192 975 163.5 1093.5 c 0,30,31 135.001 1212 135.001 1212 134 1245 c 0,32,33 127.998 1329.02 127.998 1329.02 125 1379.5 c 0,34,35 122 1430.01 122 1430.01 161 1516 c 0,36,37 180.003 1560 180.003 1560 240 1560 c 0,38,39 300.012 1560 300.012 1560 330 1547 c 0,40,41 279 1544 279 1544 259.5 1515.5 c 0,42,43 250.674 1502.6 250.674 1502.6 250.759 1491.65 c 0,44,45 250.863 1478.4 250.863 1478.4 264 1468 c 0,46,47 279.59 1455.3 279.59 1455.3 296.138 1455.14 c 0,48,49 306.108 1455.04 306.108 1455.04 316.425 1459.5 c 0,50,51 348.303 1473.27 348.303 1473.27 383.5 1530.5 c 0,52,53 430.286 1606.57 430.286 1606.57 430.388 1650.76 c 0,54,55 430.429 1668.43 430.429 1668.43 423 1681 c 0,56,57 405 1709.99 405 1709.99 376 1709.5 c 0,58,59 347.026 1709.01 347.026 1709.01 320 1698 c 0,60,61 293.003 1686 293.003 1686 277.5 1657 c 0,62,63 262 1628.01 262 1628.01 244 1600 c 0,64,65 242.736 1626.39 l 0,66,67 245.946 1664.86 245.946 1664.86 274.5 1724.5 c 0,68,69 314 1807 314 1807 381 1810 c 0,70,71 436.151 1813.01 436.151 1813.01 515.5 1820 c 0,72,73 595.113 1827.01 595.113 1827.01 640 1833 c 0,74,75 754 1848 754 1848 911 1809 c 0,76,77 1067.95 1770.01 1067.95 1770.01 1167 1743 c 0,78,79 1216.13 1728.55 1216.13 1728.55 1216.08 1665.83 c 0,80,81 1216.07 1663.45 1216.07 1663.45 1216 1661 c 0,82,83 1214.01 1594.01 1214.01 1594.01 1170 1566 c 0,84,85 1173.89 1576.83 1173.89 1576.83 1173.84 1587.2 c 0,86,87 1173.72 1614.17 1173.72 1614.17 1147 1638 c 0,88,89 1131.29 1652.01 1131.29 1652.01 1115.75 1652.32 c 0,90,91 1099.92 1649.06 l 0,92,93 1086.9 1643.41 1086.9 1643.41 1074 1628 c 0,94,95 1061.39 1613.19 1061.39 1613.19 1061.26 1591.32 c 0,96,97 1061.16 1575.07 1061.16 1575.07 1067.94 1554.92 c 0,98,99 1068.68 1552.73 1068.68 1552.73 1069.5 1550.5 c 0,100,-1 1100 1467 l 0,101,102 1130.03 1374.92 1130.03 1374.92 1152 1321 c 0,103,104 1160.8 1299.4 1160.8 1299.4 1160.8 1271.08 c 0,105,106 1160.8 1229.03 1160.8 1229.03 1141 1171 c 0,107,108 1119 1108.01 1119 1108.01 1067.5 1054.5 c 0,109,110 1016.01 1001 1016.01 1001 901 976 c 0,111,112 945.016 1009.01 945.016 1009.01 1008.5 1039.5 c 0,113,114 1068.86 1068.49 1068.86 1068.49 1069.13 1152.16 c 0,115,116 1069.15 1156.51 1069.15 1156.51 1069 1161 c 0,117,118 1066 1201 1066 1201 1016.5 1247.5 c 0,119,120 967 1294 967 1294 918 1273 c 0,121,122 867.288 1251.94 867.288 1251.94 866.93 1207.55 c 0,123,124 867 1203.5 l 0,125,126 868.999 1156 868.999 1156 887 1111 c 0,127,128 830 1150 830 1150 838.5 1231 c 0,129,130 847 1311.99 847 1311.99 876 1343 c 0,131,132 889.997 1358 889.997 1358 904 1387 c 0,133,134 914.347 1408.43 914.347 1408.43 914.315 1423.31 c 0,135,136 914.304 1428.57 914.304 1428.57 913 1433 c 0,137,138 901.003 1475.99 901.003 1475.99 839 1511.5 c 0,139,140 809.887 1528.17 809.887 1528.17 782.758 1528.19 c 0,141,142 752.113 1528.22 752.113 1528.22 724 1507 c 0,143,144 697 1486 697 1486 708 1436.5 c 0,145,146 718.999 1387 718.999 1387 720 1355 c 0,147,148 721 1269.01 721 1269.01 625 1256 c 0,149,150 604.735 1257.19 l 0,151,152 590.855 1260.5 590.855 1260.5 576 1270.5 c 0,153,154 549.997 1288.01 549.997 1288.01 542 1325 c 0,155,156 563.197 1315.63 563.197 1315.63 580.749 1315.5 c 0,157,158 593.765 1315.4 593.765 1315.4 604.776 1320.38 c 0,159,160 609.038 1322.31 609.038 1322.31 613 1325 c 0,161,162 641 1344.01 641 1344.01 623 1391 c 0,163,164 614 1412 614 1412 563.5 1424 c 0,165,166 540.067 1429.57 540.067 1429.57 521.906 1429.54 c 0,167,168 500.936 1429.5 500.936 1429.5 487 1422 c 0,169,170 421 1386 421 1386 401 1249 c 0,171,172 394.695 1205.81 394.695 1205.81 394.751 1169.67 c 0,173,174 394.872 1091.19 394.872 1091.19 425 1046 c 0,175,176 484.994 954.01 484.994 954.01 527 883 c 0,177,178 548.851 846.061 548.851 846.061 548.778 807.498 c 0,179,180 548.71 771.939 548.71 771.939 530 735 c 0,181,182 518 711 518 711 463 699 c 0,183,184 408 687 408 687 387 707 c 0,185,186 440 716 440 716 450 752 c 0,187,188 465 819 465 819 386 842 c 0,189,190 358.249 844.514 l 0,191,192 341.329 844.06 341.329 844.06 319 840 c 0,193,194 275 832 275 832 254 795 c 0,195,196 241.999 773.999 241.999 773.999 241.5 703 c 0,197,198 245.037 633.868 l 0,199,200 249.259 594.007 249.259 594.007 258.5 551.5 c 0,201,202 276 471 276 471 315 401 c 0,203,204 354 331 354 331 422 313 c 0,205,206 493 294 493 294 551.5 330 c 0,207,208 610 366 610 366 663 385 c 0,209,210 725.305 407.252 725.305 407.252 765.019 407.222 c 0,211,212 796.695 407.198 796.695 407.198 814 393 c 0,213,214 835.408 374.111 835.408 374.111 835.407 352.249 c 0,215,216 835.407 339.389 835.407 339.389 828 325.5 c 0,217,218 808 288 808 288 772 291 c 0,219,220 791.412 305.236 791.412 305.236 791.564 318.842 c 0,221,222 791.647 326.265 791.647 326.265 786 333.5 c 0,223,224 772.461 350.846 772.461 350.846 760 351 c 0,225,226 709 337 709 337 715.5 305.5 c 0,227,228 722 274 722 274 746 262 c 0,229,230 761.411 253.594 761.411 253.594 778.11 253.469 c 0,231,232 791.358 253.369 791.358 253.369 805.415 258.481 c 0,233,234 824.232 265.322 824.232 265.322 844.5 281.5 c 0,235,236 899 325 899 325 918 361 c 0,237,238 930 383 930 383 921 437 c 0,239,240 912 491 912 491 885 502 c 0,241,242 809.779 529.799 809.779 529.799 747.592 529.855 c 0,243,244 733.722 529.868 733.722 529.868 720.5 528.5 c 0,245,246 648 521 648 521 548 528 c 0,247,248 409 537 409 537 353 577 c 0,249,250 297 617 297 617 297 668 c 0,251,252 297 691 297 691 315.5 722 c 0,253,254 334 753 334 753 392 761 c 0,255,256 341 742 341 742 334 692.5 c 0,257,258 334.029 667.297 l 0,259,260 339.17 637.192 339.17 637.192 371 622 c 0,261,262 467 573 467 573 574 628 c 0,263,264 681 683 681 683 717 734 c 0,265,266 757 791 757 791 829 799.5 c 0,267,268 880.389 802.174 l 0,269,270 911.309 800.99 911.309 800.99 926 791 c 0,271,272 944 778 944 778 955 748 c 0,273,274 966 718 966 718 942 693 c 0,275,276 943 744 943 744 896.5 738.5 c 0,277,278 850 733 850 733 849 715 c 0,279,280 846 677 846 677 881 642.5 c 0,281,282 916 608 916 608 985 612 c 0,283,284 1048 615 1048 615 1120 580 c 0,285,286 1192 545 1192 545 1198 506 c 0,287,288 1198.65 470.761 l 0,289,290 1196.72 451.59 1196.72 451.59 1189.5 435 c 0,291,292 1176 404.001 1176 404.001 1138 403 c 0,293,294 1151.85 417.478 1151.85 417.478 1152.03 429.782 c 0,295,296 1152.12 436.49 1152.12 436.49 1147.5 443.5 c 0,297,298 1139.48 454.732 1139.48 454.732 1127.95 455.048 c 0,299,300 1114 452 l 0,301,302 1085.01 439 1085.01 439 1096 405.5 c 0,303,304 1107.01 371.953 1107.01 371.953 1113 345 c 0,305,306 1134 242.792 1134 242.792 1133.93 166.08 c 0,307,308 1133.9 133.199 1133.9 133.199 1130 105 c 0,309,310 1116.99 10.9955 1116.99 10.9955 1090 -10 c 0,311,312 1051 -40.0026 1051 -40.0026 994.5 -57 c 0,313,314 938 -73.9999 938 -73.9999 869 -34 c 0,315,316 845.649 -21.9218 845.649 -21.9218 845.639 20.6278 c 0,317,318 845.636 30.9221 845.636 30.9221 847 43 c 0,319,320 852 15 852 15 888 9 c 0,321,322 924 3 924 3 940 59 c 0,323,324 949 90.9999 949 90.9999 903.5 101 c 0,325,326 858 111.001 858 111.001 798.5 108.5 c 0,327,328 739 105.999 739 105.999 685 95.5 c 0,329,330 631 85 631 85 624 78 c 0,331,332 597 47 597 47 595.5 32 c 0,333,334 594 17 594 17 608 -31 c 0,335,336 623 -82 623 -82 686 -82 c 0,337,338 749 -82 749 -82 791 -47 c 0,339,340 761 -124 761 -124 677.5 -123.5 c 0,341,342 594 -123.001 594 -123.001 586 -123 c 0,0,1 EndSplineSet EndChar StartChar: H Encoding: 72 72 10 Width: 1352 Flags: HMW HStem: 699 320<465.5 883.5> VStem: 115.5 242.5<36.5 1488> 928 212<-51 1523> Fore 105.5 816.5 m 132,-1,0 36 880 36 880 19 967 c 0,1,2 14.9504 986.091 14.9504 986.091 15.0006 1004.26 c 0,3,4 15.124 1048.91 15.124 1048.91 40 1088 c 0,5,6 73.0086 1139.88 73.0086 1139.88 122.035 1140.15 c 0,7,8 124.99 1140.17 124.99 1140.17 128 1140 c 0,9,10 170 1137 170 1137 170 1095 c 0,11,12 156.052 1106.77 156.052 1106.77 143.148 1106.76 c 0,13,14 126.45 1106.74 126.45 1106.74 111.5 1087 c 0,15,16 97.7055 1068.78 97.7055 1068.78 97.5949 1049.75 c 0,17,18 97.496 1032.71 97.496 1032.71 109 1014 c 0,19,20 115.998 1001 115.998 1001 160.5 996.5 c 0,21,22 178.23 997.922 l 0,23,24 206.536 1006.49 206.536 1006.49 212 1058 c 0,25,26 222.998 1168.99 222.998 1168.99 239 1270.5 c 0,27,28 244.978 1308.42 244.978 1308.42 244.954 1336.5 c 0,29,30 244.913 1383.58 244.913 1383.58 228 1403 c 0,31,32 220.944 1410.45 220.944 1410.45 209.816 1410.6 c 0,33,34 189.949 1406.38 l 0,35,36 178.932 1402.1 178.932 1402.1 165.5 1393.5 c 0,37,38 142.118 1378.53 142.118 1378.53 141.789 1354.85 c 0,39,40 145.468 1333.76 l 0,41,42 149.976 1320.42 149.976 1320.42 160 1305 c 0,43,44 110.509 1338.17 110.509 1338.17 110.36 1375.64 c 0,45,46 110.26 1400.77 110.26 1400.77 132.369 1427.84 c 0,47,48 139.897 1437.06 139.897 1437.06 150 1446.5 c 0,49,50 233.996 1524.99 233.996 1524.99 267 1597 c 0,51,52 299.996 1670 299.996 1670 353.5 1734.5 c 0,53,54 407 1799 407 1799 500 1793 c 0,55,56 537.011 1779.99 537.011 1779.99 559.5 1762 c 0,57,58 582 1744 582 1744 597 1693 c 0,59,60 593.998 1713.01 593.998 1713.01 517.5 1749.5 c 0,61,62 500.595 1757.56 500.595 1757.56 484.643 1757.69 c 0,63,64 472.549 1757.79 472.549 1757.79 461.003 1753.33 c 0,65,66 418.855 1737.05 418.855 1737.05 384 1660 c 0,67,68 356.523 1601.82 356.523 1601.82 356.476 1525.34 c 0,69,70 356.465 1507.19 356.465 1507.19 358 1488 c 0,71,72 364 1398 364 1398 429 1310.5 c 0,73,74 477.324 1245.45 477.324 1245.45 477.562 1182.33 c 0,75,76 477.644 1160.55 477.644 1160.55 472 1139 c 0,77,78 464.998 1111.99 464.998 1111.99 417.5 1102.5 c 0,79,80 377.156 1097.63 l 0,81,82 363.646 1097.77 363.646 1097.77 358 1102 c 0,83,84 394 1106.99 394 1106.99 407 1129 c 0,85,86 420 1151 420 1151 420 1152 c 0,87,88 416.971 1176.71 l 0,89,90 409.979 1201.86 409.979 1201.86 387 1224.5 c 0,91,92 371.888 1239.39 371.888 1239.39 359.543 1239.36 c 0,93,94 344.11 1239.33 344.11 1239.33 333 1216 c 0,95,96 320 1189 320 1189 317 1122 c 0,97,98 314 1056 314 1056 314 1055 c 0,99,100 322.999 994.003 322.999 994.003 347.5 955.5 c 0,101,102 371.999 917.001 371.999 917.001 375 916 c 0,103,104 399 895 399 895 428 897.5 c 0,105,106 457 900 457 900 472 906 c 0,107,108 580 955.999 580 955.999 618 1003 c 0,109,110 649.772 1042.29 649.772 1042.29 713.695 1042.45 c 0,111,112 726.23 1042.48 726.23 1042.48 740 1041 c 0,113,114 769.004 1029 769.004 1029 783.5 1008.5 c 0,115,116 798 988 798 988 786 934 c 0,117,118 772 898 772 898 735 893 c 0,119,120 753 911 753 911 744.5 933.5 c 0,121,122 736 956 736 956 712 938 c 0,123,124 682.31 915.493 682.31 915.493 681.858 898.26 c 0,125,126 685.012 887.021 l 0,127,128 692.164 875.551 692.164 875.551 715.5 867 c 0,129,130 781 843 781 843 823 846 c 0,131,132 838 846 838 846 893 863 c 0,133,134 948 880 948 880 923 962 c 0,135,136 912.999 995.001 912.999 995.001 883.5 1019 c 0,137,138 854 1043 854 1043 851 1083 c 0,139,140 851.18 1119.3 l 0,141,142 855.8 1158.5 855.8 1158.5 881 1183 c 0,143,144 899.015 1200.01 899.015 1200.01 940.5 1211 c 0,145,146 964.418 1213.55 l 0,147,148 991.024 1211.78 991.024 1211.78 1012 1188 c 0,149,150 982.048 1185.47 l 0,151,152 938.654 1175.69 938.654 1175.69 931 1129 c 0,153,154 921 1067.99 921 1067.99 999 1051 c 0,155,156 1015.67 1050.34 l 0,157,158 1049.51 1057.23 1049.51 1057.23 1060.5 1137 c 0,159,160 1071.56 1217.31 1071.56 1217.31 1071.55 1255.32 c 0,161,162 1071.54 1263.69 1071.54 1263.69 1071 1270 c 0,163,164 1065 1317.02 1065 1317.02 1002.5 1406 c 0,165,166 940 1494.99 940 1494.99 928 1523 c 0,167,168 913.999 1551.01 913.999 1551.01 901.5 1616 c 0,169,170 899.156 1647.62 l 0,171,172 901.5 1693.75 901.5 1693.75 939 1732 c 0,173,174 965.005 1758 965.005 1758 1000.5 1759.5 c 0,175,176 1054.31 1757.68 l 0,177,178 1064.53 1756.61 1064.53 1756.61 1075 1755 c 0,179,180 1138 1744.99 1138 1744.99 1193 1697 c 0,181,182 1183.01 1697 1183.01 1697 1154 1711 c 0,183,184 1124.99 1725 1124.99 1725 1102 1725 c 0,185,186 1042.01 1725 1042.01 1725 1002 1697.5 c 0,187,188 972.596 1677.29 972.596 1677.29 972.372 1645.99 c 0,189,190 972.292 1634.72 972.292 1634.72 976 1622 c 0,191,192 1011 1494.87 1011 1494.87 1077.42 1494.19 c 0,193,194 1083.09 1494.13 1083.09 1494.13 1089 1495 c 0,195,196 1164 1505.99 1164 1505.99 1170 1527 c 0,197,198 1175.83 1549.08 1175.83 1549.08 1175.85 1567.34 c 0,199,200 1175.87 1592.92 1175.87 1592.92 1164.5 1611 c 0,201,202 1145.03 1641.96 1145.03 1641.96 1119 1672 c 0,203,204 1155 1672 1155 1672 1198.5 1617.5 c 0,205,206 1242 1563.01 1242 1563.01 1242 1530 c 0,207,208 1242 1458.02 1242 1458.02 1226.5 1372 c 0,209,210 1221.92 1346.59 1221.92 1346.59 1222.01 1316.99 c 0,211,212 1222.23 1246.41 1222.23 1246.41 1249 1152 c 0,213,214 1263.99 1099.03 1263.99 1099.03 1276 1049.5 c 0,215,216 1288 1000 1288 1000 1288 951 c 0,217,218 1288 925.992 1288 925.992 1263 891 c 0,219,220 1237.99 856 1237.99 856 1181 853 c 0,221,222 1181 854 1181 854 1215.5 880.5 c 0,223,224 1250 907 1250 907 1235 955 c 0,225,226 1223 970 1223 970 1200.5 959.5 c 0,227,228 1178.01 949.003 1178.01 949.003 1165 925 c 0,229,230 1153 903 1153 903 1142.5 844.5 c 0,231,232 1134.87 801.972 1134.87 801.972 1134.9 772.936 c 0,233,234 1134.91 762.016 1134.91 762.016 1136 753 c 0,235,236 1142 687.014 1142 687.014 1166.5 635 c 0,237,238 1191 582.981 1191 582.981 1200 539 c 0,239,240 1216.99 446 1216.99 446 1204.5 409 c 0,241,242 1192.01 372.012 1192.01 372.012 1177 353 c 0,243,244 1165 346.001 1165 346.001 1137.5 341 c 0,245,246 1115.12 340.89 l 0,247,248 1098.65 343.703 1098.65 343.703 1082 355 c 0,249,250 1129 359.001 1129 359.001 1142 378 c 0,251,-1 1149.5 410.5 l 0,252,253 1149.4 425.528 l 0,254,255 1143.56 444.551 1143.56 444.551 1105 449 c 0,256,257 1090.45 446.644 l 0,258,259 1076.15 440.772 1076.15 440.772 1061 421 c 0,260,261 1042.72 397.15 1042.72 397.15 1042.76 337.294 c 0,262,263 1042.77 321.845 1042.77 321.845 1044 304 c 0,264,265 1051.99 195 1051.99 195 1084.5 123 c 0,266,267 1117.01 51 1117.01 51 1140 -51 c 0,268,269 1152.45 -109.993 1152.45 -109.993 1152.38 -156.242 c 0,270,271 1152.21 -266.008 1152.21 -266.008 1081.5 -304 c 0,272,273 982.005 -358 982.005 -358 981 -358 c 0,274,275 948 -362 948 -362 901.5 -360.5 c 0,276,277 855 -359 855 -359 819 -330 c 0,278,279 852 -343 852 -343 896.5 -345 c 0,280,281 935.359 -343.042 l 0,282,283 957.07 -339.654 957.07 -339.654 976 -331 c 0,284,285 1035 -300.996 1035 -300.996 1071 -255.5 c 0,286,287 1086.62 -235.762 1086.62 -235.762 1086.8 -212.544 c 0,288,289 1086.9 -200.455 1086.9 -200.455 1082.82 -187.422 c 0,290,291 1076.66 -167.782 1076.66 -167.782 1061 -146 c 0,292,293 992 -51.0001 992 -51.0001 903 -31 c 0,294,295 814 -11 814 -11 793 6 c 0,296,297 732.585 56.9527 732.585 56.9527 732.57 111.614 c 0,298,299 732.564 132.048 732.564 132.048 741 153 c 0,300,301 770.744 226.878 770.744 226.878 814 227 c 0,302,303 846 224 846 224 876 185 c 0,304,305 857.344 193.955 857.344 193.955 843.281 194.139 c 0,306,307 828.019 191.183 l 0,308,309 815.839 185.689 815.839 185.689 809 170 c 0,310,311 785 113 785 113 838 98.5 c 0,312,313 891 83.9999 891 83.9999 891 106 c 0,314,315 903.199 124.977 903.199 124.977 903.227 166.688 c 0,316,317 903.239 186.524 903.239 186.524 900.5 211.5 c 0,318,319 891.999 289.006 891.999 289.006 886 323 c 0,320,321 831 412 831 412 787.5 416.5 c 0,322,323 744 421 744 421 716 452 c 0,324,325 672 498.001 672 498.001 669 527.5 c 0,326,327 666 557 666 557 678 593 c 0,328,329 700 659 700 659 766 632 c 0,330,331 746 620 746 620 739 595.5 c 0,332,333 732 571 732 571 765 574 c 0,334,335 798 577 798 577 825 590.5 c 0,336,337 852 604 852 604 844 646 c 0,338,339 825 745 825 745 684 751.5 c 0,340,341 543 758 543 758 498 734 c 0,342,343 481.002 713.002 481.002 713.002 465.5 699 c 0,344,345 459.145 693.26 459.145 693.26 459.094 675.417 c 0,346,347 459.02 649.739 459.02 649.739 472 599 c 0,348,349 478 574 478 574 486.5 528.5 c 0,350,351 487.651 503.031 l 0,352,353 484.37 476.319 484.37 476.319 460 461 c 0,354,355 434.294 445.021 434.294 445.021 398.454 444.97 c 0,356,357 382.705 444.947 382.705 444.947 365 448 c 0,358,359 401 454 401 454 423 491 c 0,360,361 445 528 445 528 391 537 c 0,362,363 375.319 535.564 l 0,364,365 361.023 530.93 361.023 530.93 348 514 c 0,366,367 328 488 328 488 328 458 c 0,368,369 330.048 395.957 l 0,370,371 337.072 324.887 337.072 324.887 366 269.5 c 0,372,373 407 191.001 407 191.001 398 127 c 0,374,375 391 82 391 82 375.5 71 c 0,376,377 360.001 60.0004 360.001 60.0004 328 53 c 0,378,379 336 77 336 77 343.5 92.5 c 0,380,381 351 107.999 351 107.999 330 127 c 0,382,383 321.857 133.786 321.857 133.786 311.873 133.895 c 0,384,385 307.143 133.946 307.143 133.946 302 132.5 c 0,386,387 286 128 286 128 277 125 c 0,388,389 231.23 107.948 231.23 107.948 230.966 58.6818 c 0,390,391 230.936 53.0513 230.936 53.0513 231.5 47 c 0,392,393 236.927 -11.2137 236.927 -11.2137 258 -28 c 0,394,395 281 -45 281 -45 318.5 -59.5 c 0,396,397 356 -74.0001 356 -74.0001 443 -45 c 0,398,-1 492.5 -13.5 l 0,399,400 542 18 542 18 587 123 c 0,401,402 552.999 9.99854 552.999 9.99854 486 -60 c 0,403,404 463 -82.9999 463 -82.9999 363 -111.5 c 0,405,406 333.213 -119.989 333.213 -119.989 304.491 -119.916 c 0,407,408 236.788 -119.745 236.788 -119.745 175 -72 c 0,409,410 117 -27.0004 117 -27.0004 115.5 36.5 c 0,411,412 114 99.9999 114 99.9999 117 118 c 0,413,414 121.001 160.001 121.001 160.001 167.5 263 c 0,415,416 214 366.001 214 366.001 214 376 c 0,417,418 214 397.991 214 397.991 220.5 508.5 c 0,419,420 221.507 585.118 l 0,421,422 219.117 635.948 219.117 635.948 207 662 c 0,423,424 175.001 752.999 175.001 752.999 105.5 816.5 c 132,-1,0 EndSplineSet KernsSLIF: 65 -91 0 0 EndChar StartChar: I Encoding: 73 73 51 Width: 582 Flags: HMW VStem: 256 244.5<240.5 1423> Fore 232 519 m 0,0,1 224.001 624.998 224.001 624.998 126 719 c 0,2,3 45.602 796.117 45.602 796.117 45.2953 885.347 c 0,4,5 45.2282 904.883 45.2282 904.883 49 925 c 0,6,7 63.999 1002.99 63.999 1002.99 117.5 1022 c 0,8,9 128.072 1025.76 128.072 1025.76 137.726 1025.68 c 0,10,11 176.928 1025.39 176.928 1025.39 201 962 c 0,12,-1 190 978 l 0,13,14 171.382 993.709 171.382 993.709 155.81 994.016 c 0,15,16 141.649 990.804 l 0,17,18 138.235 989.102 138.235 989.102 135 986.5 c 0,19,20 112.001 968 112.001 968 108 936.5 c 0,21,22 108.64 911.78 l 0,23,24 112 893.601 112 893.601 124 876.5 c 0,25,26 143.999 848 143.999 848 199 857 c 0,27,28 226 861 226 861 232 911 c 0,29,30 235.1 972.442 l 0,31,32 234.847 996.834 234.847 996.834 232.5 1023.5 c 0,33,34 227 1086 227 1086 213.5 1143 c 0,35,36 200 1200 200 1200 189 1218 c 0,37,38 124.986 1314.02 124.986 1314.02 83.5 1358 c 0,39,40 49.5783 1393.96 49.5783 1393.96 49.397 1447.97 c 0,41,42 49.3565 1460.04 49.3565 1460.04 51 1473 c 0,43,44 69.0007 1610 69.0007 1610 219 1646 c 0,45,46 145.001 1608.01 145.001 1608.01 126 1542.5 c 0,47,48 114.33 1502.27 114.33 1502.27 114.355 1474.3 c 0,49,50 114.371 1456.73 114.371 1456.73 119 1444 c 0,51,52 138.175 1413.96 138.175 1413.96 172.467 1413.74 c 0,53,54 187.822 1413.65 187.822 1413.65 206.21 1419.53 c 0,55,56 211.002 1421.06 211.002 1421.06 216 1423 c 0,57,58 282.992 1448.99 282.992 1448.99 296 1464 c 0,59,60 403 1587 403 1587 365 1725 c 0,61,62 327 1863 327 1863 152 1908 c 0,63,64 259 1908 259 1908 351 1815 c 0,65,66 443.001 1722 443.001 1722 455 1619 c 0,67,68 461 1534.99 461 1534.99 483.5 1458 c 0,69,70 505.993 1381.03 505.993 1381.03 524 1292 c 0,71,72 532 1247 532 1247 544 1211 c 0,73,74 554.285 1180.14 554.285 1180.14 554.286 1161.04 c 0,75,76 554.286 1157.86 554.286 1157.86 554 1155 c 0,77,78 546.001 1064 546.001 1064 450 1064 c 0,79,80 492.002 1097 492.002 1097 501.5 1152 c 0,81,82 501.656 1171.25 l 0,83,84 495.027 1204.71 495.027 1204.71 434.075 1205.07 c 0,85,86 430.622 1205.09 430.622 1205.09 427 1205 c 0,87,88 392 1206.99 392 1206.99 380.5 1160 c 0,89,90 369 1113.01 369 1113.01 369 1052.5 c 0,91,92 369 992.005 369 992.005 375.5 935.5 c 0,93,94 381.993 879.057 381.993 879.057 384 864 c 0,95,96 390 795 390 795 443 801 c 0,97,98 478.903 805.065 478.903 805.065 479.013 846.3 c 0,99,100 479.065 865.936 479.065 865.936 471 894 c 0,101,102 463 918 463 918 426 958 c 0,103,104 441 949 441 949 456 938.5 c 0,105,106 471 928 471 928 496 897 c 0,107,108 528.83 854.008 528.83 854.008 528.971 808.268 c 0,109,110 529.011 795.491 529.011 795.491 526.5 782.5 c 0,111,112 515 723 515 723 485 660 c 0,113,-1 425 532.5 l 0,114,115 395 468 395 468 400 404 c 0,116,117 407.001 308.999 407.001 308.999 460.5 240.5 c 0,118,119 514 172 514 172 517 82 c 0,120,121 519 10 519 10 455.5 -13 c 0,122,123 392 -36 392 -36 331 -34 c 0,124,125 409 -20 409 -20 407 52.5 c 0,126,127 405 124.999 405 124.999 321 131 c 0,128,129 291.816 129.369 l 0,130,131 231.611 117.594 231.611 117.594 231.312 32.2265 c 0,132,133 231.26 17.4636 231.26 17.4636 233 0.5 c 0,134,135 246.999 -135.998 246.999 -135.998 280 -188 c 0,136,137 328 -263 328 -263 391 -299.5 c 0,138,139 454 -336 454 -336 487 -366 c 0,140,141 427.995 -346.998 427.995 -346.998 394 -329.5 c 0,142,143 360.005 -312.002 360.005 -312.002 314 -283 c 0,144,145 314 -282 314 -282 276.5 -245 c 0,146,147 238.998 -207.997 238.998 -207.997 219 -168 c 0,148,149 174.999 -79.9963 174.999 -79.9963 161 11 c 0,150,151 157.704 57.9995 l 0,152,153 158.567 121.5 158.567 121.5 188.158 185 c 0,154,155 190.022 189 190.022 189 192 193 c 0,156,157 228 266.001 228 266.001 232.5 352.5 c 0,158,159 234.331 462.476 l 0,160,161 233.742 491.132 233.742 491.132 232 519 c 0,0,1 EndSplineSet EndChar StartChar: J Encoding: 74 74 63 Width: 1235 Flags: MW HStem: -181.5 278.5<390.5 1080> 1374 216<210.5 730> VStem: 262 128.5<-181.5 574> 753 279.5<121 1629> Fore 266 -186 m 0,0,1 224.001 -180 224.001 -180 177.5 -136 c 0,2,3 131 -92.0005 131 -92.0005 119 -17 c 0,4,5 153.477 -76.1043 153.477 -76.1043 181 -84 c 0,6,7 209.646 -85.7528 l 0,8,9 237.766 -83.402 237.766 -83.402 252.5 -62.5 c 0,10,11 274 -32 274 -32 274 11 c 0,12,13 274 74.0005 274 74.0005 219 127 c 0,14,15 194.8 150.32 194.8 150.32 182.216 150.408 c 0,16,17 168.769 150.502 168.769 150.502 168.586 124.068 c 0,18,19 168.551 119.018 168.551 119.018 169 113 c 0,20,21 171.948 59.931 171.948 59.931 224 55 c 0,22,23 206.644 34.5454 206.644 34.5454 187.56 34.4533 c 0,24,25 176.342 34.3991 176.342 34.3991 163.5 42 c 0,26,27 131.001 61.999 131.001 61.999 121 82 c 0,28,29 86.9999 146.001 86.9999 146.001 115 239 c 0,30,31 140.998 329.994 140.998 329.994 180.5 414 c 0,32,33 219.995 497.991 219.995 497.991 262 574 c 0,34,35 319 680 319 680 419 771.5 c 0,36,37 519 863 519 863 639 891 c 0,38,39 497 834 497 834 403.5 649 c 0,40,41 310 464 310 464 340 317 c 0,42,43 350 268 350 268 386.5 238 c 0,44,45 402.291 225.021 402.291 225.021 417.613 224.77 c 0,46,47 434.195 228.284 l 0,48,49 445.735 233.41 445.735 233.41 457 246 c 0,50,51 481 273 481 273 479.5 310.5 c 0,52,53 478 348 478 348 469 369 c 0,54,55 455 396 455 396 417 413 c 0,56,57 468 425 468 425 503.5 388.5 c 0,58,59 538.999 352.002 538.999 352.002 546 319 c 0,60,61 550 297 550 297 546 262 c 0,62,63 542 227.005 542 227.005 542 215 c 0,64,65 541.282 157.714 l 0,66,67 543.818 120.228 543.818 120.228 556 105 c 0,68,69 576 79.9999 576 79.9999 613 70 c 0,70,71 646 60 646 60 689 75.5 c 0,72,73 732 90.9999 732 90.9999 753 121 c 0,74,75 789 170.999 789 170.999 805.5 237.5 c 0,76,77 822 304 822 304 831 368 c 0,78,79 833.059 429.818 l 0,80,81 833.031 430.907 833.031 430.907 833 432 c 0,82,83 832 467 832 467 796 467 c 0,84,85 762 467 762 467 761 439.5 c 0,86,87 760 412 760 412 769 394 c 0,88,89 748 394 748 394 725.5 408.5 c 0,90,91 703 423 703 423 702 480 c 0,92,93 701 516 701 516 723.5 545 c 0,94,95 746 574 746 574 761 607 c 0,96,97 801 694 801 694 807.5 724 c 0,98,99 811.571 742.789 811.571 742.789 811.523 776.872 c 0,100,101 811.495 797.214 811.495 797.214 810 823 c 0,102,103 804 898 804 898 711 1003 c 0,104,105 664.04 1056.02 664.04 1056.02 663.74 1107 c 0,106,107 663.641 1123.83 663.641 1123.83 668.627 1140.44 c 0,108,109 678.449 1173.15 678.449 1173.15 708 1205 c 0,110,111 723 1221.99 723 1221.99 764.5 1218.5 c 0,112,113 806 1215.01 806 1215.01 815 1166 c 0,114,115 800.85 1174.76 800.85 1174.76 784.879 1174.89 c 0,116,117 777.153 1174.96 777.153 1174.96 769 1173 c 0,118,119 744 1167 744 1167 744 1149 c 0,120,121 744 1087.99 744 1087.99 782.5 1101 c 0,122,123 821.009 1114.01 821.009 1114.01 844 1135 c 0,124,125 871 1160.99 871 1160.99 876 1273 c 0,126,127 875.964 1349.1 l 0,128,129 872.849 1400.52 872.849 1400.52 860 1425 c 0,130,131 849.326 1445.59 849.326 1445.59 825.576 1445.54 c 0,132,133 818.173 1445.52 818.173 1445.52 809.5 1443.5 c 0,134,135 773 1434.99 773 1434.99 772 1417 c 0,136,137 768 1373.01 768 1373.01 798 1373.5 c 0,138,139 828 1373.99 828 1373.99 840 1384 c 0,140,141 838.397 1364.37 l 0,142,143 833.435 1347.78 833.435 1347.78 815.5 1338 c 0,144,145 793.685 1326.1 793.685 1326.1 779.113 1326.16 c 0,146,147 775.31 1326.17 775.31 1326.17 772 1327 c 0,148,149 715 1339 715 1339 678.5 1375 c 0,150,151 642.016 1410.98 642.016 1410.98 603 1436 c 0,152,153 556.039 1464.7 556.039 1464.7 506.748 1464.68 c 0,154,155 480.455 1464.68 480.455 1464.68 453.5 1456.5 c 0,156,157 375.96 1432.98 375.96 1432.98 334 1415 c 0,158,159 280.973 1391.99 280.973 1391.99 210.5 1374 c 0,160,161 146.8 1357.74 146.8 1357.74 121.868 1357.8 c 0,162,163 119.215 1357.81 119.215 1357.81 117 1358 c 0,164,165 18.9988 1365.01 18.9988 1365.01 8 1466.5 c 0,166,167 -3 1568.01 -3 1568.01 89 1594 c 0,168,169 66.0001 1576 66.0001 1576 44 1532.5 c 0,170,171 22 1489 22 1489 63 1447 c 0,172,173 85.4007 1423 85.4007 1423 118.04 1422.75 c 0,174,175 147.044 1426.67 l 0,176,177 163.949 1431.1 163.949 1431.1 183 1440.5 c 0,178,179 261 1479.01 261 1479.01 285 1517 c 0,180,181 327.531 1585.52 327.531 1585.52 327.879 1616.21 c 0,182,183 327.973 1624.48 327.973 1624.48 325 1630 c 0,184,185 311 1655.99 311 1655.99 281 1648 c 0,186,187 273.001 1646.01 273.001 1646.01 270 1629.5 c 0,188,189 270.92 1617.45 l 0,190,191 274.131 1609.04 274.131 1609.04 285 1603 c 0,192,193 268.51 1595.15 268.51 1595.15 254.565 1595 c 0,194,195 245.213 1594.91 245.213 1594.91 237.005 1598.27 c 0,196,197 226.275 1602.68 226.275 1602.68 217.5 1613 c 0,198,199 199.327 1634.38 199.327 1634.38 199.184 1669.47 c 0,200,201 199.126 1683.62 199.126 1683.62 202 1700 c 0,202,203 208 1739 208 1739 249.5 1751 c 0,204,205 291 1763 291 1763 311 1757 c 0,206,207 421.988 1725.01 421.988 1725.01 511.5 1660.5 c 0,208,209 601 1596 601 1596 730 1590 c 0,210,211 805.281 1589.97 l 0,212,213 827.921 1590.97 827.921 1590.97 854 1593 c 0,214,215 931 1599 931 1599 931 1659 c 0,216,217 931 1679.99 931 1679.99 896.5 1697.5 c 0,218,219 870.907 1710.49 870.907 1710.49 857.692 1710.53 c 0,220,221 853.097 1710.55 853.097 1710.55 850 1709 c 0,222,223 822.999 1692.99 822.999 1692.99 822.5 1675.5 c 0,224,225 822 1657.99 822 1657.99 824 1632 c 0,226,227 797.428 1640.59 797.428 1640.59 797.12 1672.1 c 0,228,229 797.034 1680.9 797.034 1680.9 799 1691.5 c 0,230,231 808.001 1740 808.001 1740 838 1755 c 0,232,233 861.517 1766.1 861.517 1766.1 891.215 1766.11 c 0,234,235 906.986 1766.12 906.986 1766.12 924.5 1763 c 0,236,237 974.999 1754 974.999 1754 991 1730 c 0,238,239 1028 1673.01 1028 1673.01 1032.5 1629 c 0,240,241 1036.27 1592.18 1036.27 1592.18 1036.18 1540.01 c 0,242,243 1036 1519 l 0,244,-1 1022.5 1335.5 l 0,245,246 1020.56 1260.23 l 0,247,248 1022.51 1199.19 1022.51 1199.19 1038 1165 c 0,249,250 1058 1119.98 1058 1119.98 1081.5 1083.5 c 0,251,-1 1125 1013 l 0,252,253 1149.01 966.986 1149.01 966.986 1163 858 c 0,254,255 1166.9 800.919 l 0,256,257 1166.23 743.613 1166.23 743.613 1141 731 c 0,258,259 1139.08 769.983 l 0,260,261 1132.48 813.66 1132.48 813.66 1105.5 848 c 0,262,263 1086.38 872.329 1086.38 872.329 1068.62 872.499 c 0,264,265 1058.42 872.597 1058.42 872.597 1048.66 864.714 c 0,266,267 1041.2 858.688 1041.2 858.688 1034 848 c 0,268,269 1013.01 817.011 1013.01 817.011 994 741 c 0,270,271 988.449 718.797 988.449 718.797 988.361 701.972 c 0,272,273 988.262 683.23 988.262 683.23 994.94 671.159 c 0,274,275 1002.79 656.972 1002.79 656.972 1020 652 c 0,276,277 1041.52 648.472 l 0,278,279 1063.24 649.314 1063.24 649.314 1068.5 673.5 c 0,280,281 1076 708 1076 708 1052 744 c 0,282,283 1084 744 1084 744 1102 704 c 0,284,285 1115.59 674.668 1115.59 674.668 1115.69 641.818 c 0,286,287 1115.78 607.006 1115.78 607.006 1100.73 568.244 c 0,288,289 1090.27 541.324 1090.27 541.324 1072.5 512.5 c 0,290,291 1005 403 1005 403 975 328 c 0,292,293 957 285 957 285 952 227.5 c 0,294,295 947 169.995 947 169.995 947 128 c 0,296,297 947 113 947 113 956.5 94 c 0,298,299 966 74.9999 966 74.9999 988 84 c 0,300,301 1020.91 98.9589 1020.91 98.9589 1020.81 124.823 c 0,302,303 1020.78 133.542 1020.78 133.542 1017 143.5 c 0,304,305 1002 183 1002 183 981 201 c 0,306,307 993.355 202.547 l 0,308,309 1012.86 199.6 1012.86 199.6 1041.5 166.5 c 0,310,311 1080 122.005 1080 122.005 1080 97 c 0,312,313 1080 56.9999 1080 56.9999 1066.5 -3 c 0,314,315 1053 -63 1053 -63 1008 -77 c 0,316,317 967 -89 967 -89 923.5 -86 c 0,318,319 880 -83 880 -83 838 -86 c 0,320,321 754 -96.0001 754 -96.0001 667.5 -104.5 c 0,322,323 580.997 -113.001 580.997 -113.001 506 -144 c 0,324,325 444 -168 444 -168 390.5 -181.5 c 0,326,327 337 -195 337 -195 266 -186 c 0,0,1 EndSplineSet EndChar StartChar: K Encoding: 75 75 13 Width: 1310 Flags: HMW VStem: 48 294<-13 1634> Fore 638 316 m 0,0,1 591 315 591 315 620 274 c 0,2,3 644.538 239.308 644.538 239.308 683.396 238.982 c 0,4,5 690.462 238.923 690.462 238.923 698 240 c 0,6,7 679.098 223.619 679.098 223.619 649.677 223.513 c 0,8,9 632.402 223.451 632.402 223.451 611.5 229 c 0,10,11 555.001 244 555.001 244 536 277 c 0,12,13 501 334 501 334 480 444 c 0,14,15 459 554 459 554 376 588 c 0,16,17 361 594 361 594 328.5 585.5 c 0,18,19 296.001 577 296.001 577 286 551 c 0,20,21 271 514 271 514 294.5 482 c 0,22,-1 342 415 l 0,23,24 369 370 369 370 374 303 c 0,25,26 373.24 263.147 l 0,27,28 368.196 223.29 368.196 223.29 345 196 c 0,29,30 344 200.001 344 200.001 342 245.5 c 0,31,32 340.55 278.486 340.55 278.486 312.624 278.424 c 0,33,34 300.363 278.397 300.363 278.397 283 272 c 0,35,36 264.001 265 264.001 265 255.5 165.5 c 0,37,38 246.999 66.0001 246.999 66.0001 290 66 c 0,39,40 329 66 329 66 323.5 89 c 0,41,42 318 111.999 318 111.999 304 127 c 0,43,44 361 109 361 109 366.5 63 c 0,45,46 372 17 372 17 342 -13 c 0,47,48 289.002 -63.9983 289.002 -63.9983 222.5 -104 c 0,49,50 156 -144.001 156 -144.001 156 -222 c 0,51,52 156 -296.001 156 -296.001 230.5 -329.5 c 0,53,54 300.803 -361.112 300.803 -361.112 396.485 -361.113 c 0,55,56 402.198 -361.113 402.198 -361.113 408 -361 c 0,57,58 348.507 -372.092 348.507 -372.092 301.95 -371.999 c 0,59,60 209.993 -371.816 209.993 -371.816 168.5 -328 c 0,61,62 107.913 -264.02 107.913 -264.02 98 -181 c 0,63,64 97.2541 -142.611 l 0,65,66 101.102 -94.0729 101.102 -94.0729 129 -44 c 0,67,68 167.999 25.9991 167.999 25.9991 169 95 c 0,69,70 169 157.001 169 157.001 144 198 c 0,71,72 135.64 212.08 135.64 212.08 124.957 213.576 c 0,73,74 111.932 211.149 l 0,75,76 103.533 207.148 103.533 207.148 94 197 c 0,77,78 62.9999 164 62.9999 164 112 113 c 0,79,80 73 102.001 73 102.001 47.5 132 c 0,81,82 38.9939 142.007 38.9939 142.007 21 180 c 0,83,84 4.00904 215.876 4.00904 215.876 35 283.5 c 0,85,86 54.7141 326.518 54.7141 326.518 77 381 c 0,87,88 109.344 460.071 109.344 460.071 111.5 491.5 c 0,89,90 119.119 602.598 119.119 602.598 121 605 c 0,91,92 123.409 606.637 123.409 606.637 123.374 613.538 c 0,93,94 123.309 626.595 123.309 626.595 114.5 658.5 c 0,95,96 93.5096 731.735 93.5096 731.735 48 800 c 0,97,98 36 818 36 818 32 867 c 0,99,100 28 916 28 916 67 942 c 0,101,102 58.6356 921.335 58.6356 921.335 58.6489 907.841 c 0,103,104 58.6678 888.725 58.6678 888.725 75.5 884 c 0,105,106 106 876 106 876 130 924 c 0,107,108 154.741 970.912 154.741 970.912 154.837 1000.58 c 0,109,110 154.848 1004.17 154.848 1004.17 154.5 1007.5 c 0,111,112 145.981 1070.48 145.981 1070.48 127 1074 c 0,113,114 105.667 1074.72 l 0,115,116 91.2499 1071.94 91.2499 1071.94 90.8002 1057.34 c 0,117,118 90.73 1055.06 90.73 1055.06 91 1052.5 c 0,119,120 94 1024 94 1024 106 1012 c 0,121,122 73.004 1012 73.004 1012 53.5 1036.5 c 0,123,124 34 1060.99 34 1060.99 34 1076 c 0,125,126 31 1122.99 31 1122.99 53 1185.5 c 0,127,128 75.0055 1248.02 75.0055 1248.02 88 1296 c 0,129,130 97.938 1333.68 97.938 1333.68 97.9311 1370.59 c 0,131,132 97.9214 1422.82 97.9214 1422.82 78 1473.5 c 0,133,134 44 1560.01 44 1560.01 48 1634 c 0,135,136 49.9995 1682.99 49.9995 1682.99 79.5 1717 c 0,137,138 99.8632 1740.47 99.8632 1740.47 129.045 1740.59 c 0,139,140 142.135 1740.65 142.135 1740.65 157 1736 c 0,141,142 110.002 1719.01 110.002 1719.01 102 1688.5 c 0,143,144 98.2452 1661.63 l 0,145,146 98.4527 1649.59 98.4527 1649.59 103 1641 c 0,147,148 122.999 1599 122.999 1599 169 1605 c 0,149,150 215.001 1611 215.001 1611 229 1641 c 0,151,152 244.674 1677.15 244.674 1677.15 244.693 1707.92 c 0,153,154 244.732 1773.36 244.732 1773.36 174 1814.5 c 0,155,156 69.9617 1875.02 69.9617 1875.02 36 1886 c 0,157,158 165.006 1859 165.006 1859 219 1802.5 c 0,159,160 273.003 1745.99 273.003 1745.99 287 1698 c 0,161,162 298.866 1655.73 298.866 1655.73 298.907 1618.68 c 0,163,164 298.921 1605.77 298.921 1605.77 297.5 1593.5 c 0,165,166 292.001 1546.01 292.001 1546.01 277 1488 c 0,167,168 266.593 1447.11 266.593 1447.11 266.685 1393.79 c 0,169,170 266.717 1375.39 266.717 1375.39 268 1355.5 c 0,171,172 272.58 1284.5 272.58 1284.5 328.353 1283.58 c 0,173,174 333.462 1283.5 333.462 1283.5 339 1284 c 0,175,176 402 1290 402 1290 393 1344 c 0,177,178 384 1398 384 1398 334 1410 c 0,179,180 359.97 1413.09 l 0,181,182 381.98 1412.55 381.98 1412.55 406.5 1402 c 0,183,184 445.998 1385.01 445.998 1385.01 455 1355 c 0,185,186 475 1280 475 1280 435.5 1215.5 c 0,187,188 398.21 1154.61 398.21 1154.61 394 1076 c 0,189,190 391.08 1021.49 391.08 1021.49 447 1046 c 0,191,192 520 1077.99 520 1077.99 595 1205 c 0,193,194 622 1250 622 1250 650 1371.5 c 0,195,196 677.466 1490.68 677.466 1490.68 718 1522 c 0,197,198 740 1538.99 740 1538.99 774.5 1547.5 c 0,199,200 799.731 1550.51 l 0,201,202 815.211 1549.79 815.211 1549.79 824 1541 c 0,203,204 755 1536.01 755 1536.01 755 1490 c 0,205,206 755 1458.99 755 1458.99 785 1466 c 0,207,208 875 1482.01 875 1482.01 883.5 1543.5 c 0,209,210 892.001 1605.01 892.001 1605.01 931 1655 c 0,211,212 958 1689.99 958 1689.99 1005.5 1685 c 0,213,214 1052.99 1680.01 1052.99 1680.01 1066 1658 c 0,215,216 1046.78 1662.27 1046.78 1662.27 1031.01 1662.3 c 0,217,218 987.727 1662.39 987.727 1662.39 970.5 1630.5 c 0,219,220 961.129 1613.15 961.129 1613.15 961.06 1596.68 c 0,221,222 960.961 1572.89 960.961 1572.89 982 1549 c 0,223,224 1006.17 1522.41 1006.17 1522.41 1048.2 1522.44 c 0,225,226 1058.33 1522.45 1058.33 1522.45 1069.5 1524 c 0,227,228 1126.99 1531.99 1126.99 1531.99 1174.5 1568 c 0,229,230 1222.01 1604 1222.01 1604 1242 1662.5 c 0,231,232 1248.19 1680.62 1248.19 1680.62 1248.15 1699.75 c 0,233,234 1248.06 1742.38 1248.06 1742.38 1217 1790 c 0,235,236 1275 1744 1275 1744 1278 1669 c 0,237,238 1275.94 1627.18 l 0,239,240 1268.9 1580.13 1268.9 1580.13 1240 1547 c 0,241,242 1216 1519 1216 1519 1155 1484.5 c 0,243,244 1093.98 1449.99 1093.98 1449.99 1031 1426 c 0,245,246 936.739 1390.05 936.739 1390.05 861 1257 c 0,247,248 824.002 1192.01 824.002 1192.01 803.5 1131 c 0,249,250 783.002 1070 783.002 1070 718 989 c 0,251,252 674.001 934.001 674.001 934.001 603 927 c 0,253,254 639 942 639 942 662 975.5 c 0,255,256 670.036 987.205 670.036 987.205 670.015 995.797 c 0,257,258 669.976 1011.8 669.976 1011.8 642 1017 c 0,259,260 621.612 1016.71 l 0,261,262 601.663 1012.85 601.663 1012.85 581.5 995 c 0,263,264 552.458 969.292 552.458 969.292 545 932 c 0,265,266 533 872 533 872 565.5 844.5 c 0,267,268 599.679 815.578 599.679 815.578 619 851 c 0,269,270 620.942 860.69 l 0,271,272 618.273 876.636 618.273 876.636 575 889 c 0,273,274 597.521 905.746 597.521 905.746 617.708 905.986 c 0,275,276 636.286 902.519 l 0,277,278 641.221 900.562 641.221 900.562 646 897.5 c 0,279,280 678 877 678 877 687 847 c 0,281,282 711 767 711 767 672 722 c 0,283,284 634.562 678.803 634.562 678.803 645 604 c 0,285,286 657 518 657 518 757.5 474.5 c 0,287,288 858 431 858 431 945 402 c 0,289,290 1041.01 369.999 1041.01 369.999 1070 311 c 0,291,292 1092.11 266.008 1092.11 266.008 1092.13 243.118 c 0,293,294 1092.14 235.987 1092.14 235.987 1090 231 c 0,295,296 1064.99 311.001 1064.99 311.001 991 328 c 0,297,298 956.966 331.206 l 0,299,300 912.173 329.667 912.173 329.667 900 291 c 0,301,302 897.698 271.598 l 0,303,304 900.902 224.978 900.902 224.978 985 168.5 c 0,305,306 1087 99.9995 1087 99.9995 1132 65 c 0,307,308 1174.01 30.9915 1174.01 30.9915 1210.5 -27.5 c 0,309,310 1239.73 -74.3571 1239.73 -74.3571 1239.78 -117.036 c 0,311,312 1239.79 -127.648 1239.79 -127.648 1238 -138 c 0,313,314 1209.34 -300.784 1209.34 -300.784 1045 -336 c 0,315,316 1025 -340.286 1025 -340.286 992.499 -340.235 c 0,317,318 979.5 -340.214 979.5 -340.214 964.5 -339.5 c 0,319,320 912 -337 912 -337 868 -322 c 0,321,322 880.727 -325.182 880.727 -325.182 912.893 -325.124 c 0,323,324 931.273 -325.091 931.273 -325.091 956 -324 c 0,325,326 1024 -321 1024 -321 1051 -309 c 0,327,328 1115 -279.003 1115 -279.003 1154 -208 c 0,329,330 1171.45 -176.237 1171.45 -176.237 1171.48 -142.472 c 0,331,332 1171.53 -100.763 1171.53 -100.763 1145 -56 c 0,333,334 1131.01 -32.0164 1131.01 -32.0164 1093 -0.5 c 0,335,336 1055.01 31 1055.01 31 1012 44 c 0,337,338 903 75.0001 903 75.0001 906 29 c 0,339,340 906 6.00005 906 6.00005 933.5 6 c 0,341,342 961 6 961 6 979 -1 c 0,343,344 937 -25 937 -25 890.5 -12.5 c 0,345,346 844 -4.76837e-06 844 -4.76837e-06 838 15 c 0,347,348 822.002 44.9949 822.002 44.9949 806 92 c 0,349,-1 782 172 l 0,350,351 772.999 202.002 772.999 202.002 725.5 259.5 c 0,352,353 679.085 315.686 679.085 315.686 638 316 c 0,0,1 EndSplineSet KernsSLIF: 111 -104 0 0 79 -52 0 0 115 -221 0 0 83 -208 0 0 103 -182 0 0 71 -78 0 0 99 -234 0 0 67 -143 0 0 EndChar StartChar: L Encoding: 76 76 65 Width: 1349 Flags: MW HStem: 5.5 212.5<394 867> VStem: 77 263<33 1557> Fore 81 187 m 1,0,1 95.8849 195.931 95.8849 195.931 113.845 196 c 0,2,3 138.115 196.092 138.115 196.092 168 180 c 0,4,5 135.47 181.975 l 0,6,7 106.046 179.89 106.046 179.89 86.5 162 c 0,8,9 56.9999 135 56.9999 135 75 99 c 0,10,11 87.3838 72.0972 87.3838 72.0972 106.059 71.9092 c 0,12,13 115.619 71.8129 115.619 71.8129 126.827 78.7173 c 0,14,15 144.998 89.91 144.998 89.91 167.5 119.5 c 0,16,17 205.326 169.241 205.326 169.241 205.362 225.545 c 0,18,19 205.386 263.76 205.386 263.76 188 305 c 0,20,21 168.819 348.157 168.819 348.157 146.118 348.141 c 0,22,23 135.681 348.134 135.681 348.134 124.5 339 c 0,24,25 110.569 327.62 110.569 327.62 110.42 313.007 c 0,26,27 110.325 303.613 110.325 303.613 115.924 292.882 c 0,28,29 123.812 277.767 123.812 277.767 143 260 c 0,30,31 66.9999 285 66.9999 285 64 377 c 0,32,33 61 446 61 446 93.5 520.5 c 0,34,35 125.999 594.997 125.999 594.997 142 665 c 0,36,37 158.584 741.182 158.584 741.182 158.516 811.993 c 0,38,39 158.453 877.817 158.453 877.817 144 939 c 0,40,41 129 1001 129 1001 109 1061 c 0,42,43 89.0001 1121 89.0001 1121 83 1190 c 0,44,45 85.4002 1207.77 l 0,46,47 89.192 1219.98 89.192 1219.98 98.5 1237 c 0,48,49 113.063 1263.62 113.063 1263.62 148.738 1263.94 c 0,50,51 155.94 1264.01 155.94 1264.01 164 1263 c 0,52,53 151.987 1262.88 l 0,54,55 137.206 1258.28 137.206 1258.28 125 1231 c 0,56,57 121 1222.06 121 1222.06 120.765 1215.44 c 0,58,59 123.205 1205.69 l 0,60,61 129.228 1196.59 129.228 1196.59 150.025 1196.62 c 0,62,63 154.213 1196.62 154.213 1196.62 159 1197 c 0,64,65 193.073 1199.62 193.073 1199.62 193.561 1233.92 c 0,66,67 193.632 1238.88 193.632 1238.88 193 1244.5 c 0,68,69 188.004 1288.98 188.004 1288.98 180 1342 c 0,70,71 168.003 1405.99 168.003 1405.99 142.5 1462.5 c 0,72,73 116.992 1519.02 116.992 1519.02 96 1579 c 0,74,75 90.8969 1591.93 90.8969 1591.93 90.9442 1607.29 c 0,76,77 91.0361 1637.08 91.0361 1637.08 110.5 1676 c 0,78,79 127.596 1710.19 127.596 1710.19 157.618 1710.13 c 0,80,81 179.407 1710.08 179.407 1710.08 208 1692 c 0,82,83 184.001 1692 184.001 1692 154.5 1675.5 c 0,84,85 133.787 1663.92 133.787 1663.92 133.533 1633.84 c 0,86,87 137 1605 l 0,88,89 148.796 1548.97 148.796 1548.97 196 1548.5 c 0,90,91 242.998 1548.99 242.998 1548.99 264 1609 c 0,92,93 272.991 1635.97 272.991 1635.97 273.066 1660.18 c 0,94,95 273.164 1691.87 273.164 1691.87 257.991 1718.82 c 0,96,97 240.916 1749.16 240.916 1749.16 204.5 1773.5 c 0,98,99 111.01 1836 111.01 1836 31 1848 c 0,100,101 98.7863 1845.34 l 0,102,103 181.869 1836.9 181.869 1836.9 234 1802.5 c 0,104,105 306.003 1754.99 306.003 1754.99 324 1710 c 0,106,107 354 1632 354 1632 340 1557 c 0,108,109 326 1482 326 1482 326 1409 c 0,110,111 329.503 1348.47 l 0,112,113 338.221 1276.68 338.221 1276.68 368.5 1193.5 c 0,114,115 412 1073.99 412 1073.99 345 1027 c 0,116,117 355.31 1043.14 355.31 1043.14 355.372 1059.38 c 0,118,119 355.448 1079.36 355.448 1079.36 340 1099.5 c 0,120,121 328.21 1114.87 328.21 1114.87 316.244 1115.25 c 0,122,123 304.078 1111.81 l 0,124,125 293.606 1105.55 293.606 1105.55 283 1088 c 0,126,127 268.001 1064 268.001 1064 262.5 975 c 0,128,129 263.074 928.003 l 0,130,131 268.216 880.218 268.216 880.218 295 864 c 0,132,133 304.791 858.066 304.791 858.066 312.778 857.81 c 0,134,135 323.721 860.607 l 0,136,137 334.485 867.085 334.485 867.085 340.5 888.5 c 0,138,139 353 933 353 933 317 972 c 0,140,141 358 972 358 972 376.5 918 c 0,142,143 395 864 395 864 374 823 c 0,144,145 363 801 363 801 348.5 704.5 c 0,146,147 334.001 608.009 334.001 608.009 330 500 c 0,148,149 330.05 399.127 l 0,150,151 332.138 349.53 332.138 349.53 338.5 305.5 c 0,152,153 350.999 219.001 350.999 219.001 394 218 c 0,154,155 419.375 220.375 l 0,156,157 455.75 229.75 455.75 229.75 482 274 c 0,158,159 514.832 329.345 514.832 329.345 585.501 329.254 c 0,160,161 590.168 329.248 590.168 329.248 595 329 c 0,162,163 628 326 628 326 647 296.5 c 0,164,165 662.048 273.136 662.048 273.136 662.042 247.577 c 0,166,167 662.04 240.864 662.04 240.864 661 234 c 0,168,169 640 285 640 285 592 281.5 c 0,170,171 544 278 544 278 559 218 c 0,172,173 562 200 562 200 599 188 c 0,174,175 609.533 184.584 609.533 184.584 625.171 184.652 c 0,176,177 664.468 184.825 664.468 184.825 736 207 c 0,178,179 792.993 224.998 792.993 224.998 906 266 c 0,180,181 1019 307 1019 307 1004 187 c 0,182,183 985.478 232.409 985.478 232.409 960.708 233.016 c 0,184,185 945.201 229.307 l 0,186,187 935.283 224.505 935.283 224.505 924.5 213.5 c 0,188,189 876 164 876 164 920 146 c 0,190,191 1049 93.0005 1049 93.0005 1151 165.5 c 0,192,193 1239.19 228.186 1239.19 228.186 1239.17 375.713 c 0,194,195 1239.17 398.817 1239.17 398.817 1237 424 c 0,196,197 1285 262 1285 262 1235.5 175 c 0,198,199 1186 87.9974 1186 87.9974 1087.5 49 c 0,200,201 988.995 9.99982 988.995 9.99982 867 5.5 c 0,202,203 745 1 745 1 648 5 c 0,204,205 588 8 588 8 517 22 c 0,206,207 446 36 446 36 341 8 c 0,208,209 291.986 -4.7862 291.986 -4.7862 239.44 -4.70537 c 0,210,211 218.014 -4.67242 218.014 -4.67242 196 -2.5 c 0,212,213 120.001 4.99989 120.001 4.99989 77 33 c 0,214,215 44 54 44 54 38 104 c 0,216,217 38.6834 129.312 l 0,218,219 44.988 162.747 44.988 162.747 81 187 c 1,0,1 EndSplineSet KernsSLIF: 116 -417 0 0 84 -417 0 0 89 -234 0 0 121 -234 0 0 105 -130 0 0 73 -143 0 0 45 -221 0 0 83 -234 0 0 119 -273 0 0 87 -286 0 0 EndChar StartChar: M Encoding: 77 77 14 Width: 1706 Flags: HMW VStem: 94 134<-53 110> 103 219.5<176.5 1679> 352.5 105.5<62.5 376> 1204 234<80 1735> 1320.5 117.5<-254 80> Fore 1191 -391 m 1,0,1 1254.99 -348.011 1254.99 -348.011 1320.5 -254 c 0,2,3 1378.85 -170.264 1378.85 -170.264 1378.87 -61.11 c 0,4,5 1378.87 -47.7462 1378.87 -47.7462 1378 -34 c 0,6,7 1375 5.9856 1375 5.9856 1352 60.5 c 0,8,9 1329.01 115 1329.01 115 1271 121 c 0,10,11 1236.18 118.355 l 0,12,13 1233.88 117.956 1233.88 117.956 1231.5 117.5 c 0,14,15 1208 113.001 1208 113.001 1202 95 c 0,16,17 1190.15 63.5722 1190.15 63.5722 1190.25 38.2553 c 0,18,19 1190.33 14.4222 1190.33 14.4222 1201 -4 c 0,20,21 1217.66 -32.7714 1217.66 -32.7714 1249.22 -32.8796 c 0,22,23 1259.34 -32.9143 1259.34 -32.9143 1271 -30 c 0,24,25 1254.04 -59.2158 1254.04 -59.2158 1207.32 -59.1209 c 0,26,27 1204.46 -59.1151 1204.46 -59.1151 1201.5 -59 c 0,28,29 1150.01 -57 1150.01 -57 1122 -27 c 0,30,31 1082.65 11.5429 1082.65 11.5429 1082.64 73.3058 c 0,32,33 1082.64 88.4541 1082.64 88.4541 1085 105 c 0,34,35 1098.01 201.049 1098.01 201.049 1129 292 c 0,36,37 1159.99 382.965 1159.99 382.965 1178 473 c 0,38,39 1190.02 533.081 1190.02 533.081 1210 677.5 c 0,40,41 1230 822.036 1230 822.036 1230 885 c 0,42,43 1230 933.068 1230 933.068 1224.5 1007.5 c 0,44,45 1219 1082 1219 1082 1165 1107 c 0,46,47 1145.79 1115.87 1145.79 1115.87 1125.63 1115.79 c 0,48,49 1091.2 1115.67 1091.2 1115.67 1054 1089.5 c 0,50,51 1014.77 1061.9 1014.77 1061.9 1014.45 1027.45 c 0,52,53 1018.33 1004.4 l 0,54,55 1020.54 997.811 1020.54 997.811 1024 991 c 0,56,57 1037.79 964.081 1037.79 964.081 1054.81 963.673 c 0,58,59 1068.33 967.252 l 0,60,61 1070.88 968.617 1070.88 968.617 1073.5 970.5 c 0,62,63 1101.99 990.995 1101.99 990.995 1112 1029 c 0,64,65 1134.99 955 1134.99 955 1094 895 c 0,66,67 1058 843.999 1058 843.999 976 836 c 0,68,69 893.995 828 893.995 828 830 828 c 0,70,71 769 828 769 828 740 797.5 c 0,72,73 710.999 766.999 710.999 766.999 709 736 c 0,74,75 706 698 706 698 723.5 653.5 c 0,76,77 741 609 741 609 768 595 c 0,78,79 855 548 855 548 890 574 c 0,80,81 925.001 600 925.001 600 936 631 c 0,82,83 943 595 943 595 916.5 562 c 0,84,85 890 529 890 529 869 526 c 0,86,87 790 509 790 509 758.5 527 c 0,88,89 727 545 727 545 700 574 c 0,90,91 640.999 634.001 640.999 634.001 622.5 739 c 0,92,93 604 844 604 844 603 915 c 0,94,95 601 959 601 959 577.5 1002.5 c 0,96,97 554 1046 554 1046 503 1049 c 0,98,99 469 1050.01 469 1050.01 470 1014.5 c 0,100,101 470.546 995.136 470.546 995.136 486.86 994.963 c 0,102,103 496.177 994.864 496.177 994.864 510.639 1001.02 c 0,104,105 517.277 1003.85 517.277 1003.85 525 1008 c 0,106,107 515 966 515 966 484 963.5 c 0,108,109 455.502 964.925 l 0,110,111 440.947 967.75 440.947 967.75 428 975 c 0,112,113 397.999 990 397.999 990 397.5 1036 c 0,114,115 400.858 1097.86 l 0,116,117 402.845 1115.12 402.845 1115.12 406 1133 c 0,118,119 408.23 1168.25 l 0,120,121 406.474 1196.11 406.474 1196.11 391 1209 c 0,122,123 377 1220.38 377 1220.38 365.042 1220.31 c 0,124,125 336 1220.15 336 1220.15 319 1152.5 c 0,126,127 295 1056.99 295 1056.99 295 999 c 0,128,129 295 826.001 295 826.001 348 638 c 0,130,131 364 575 364 575 402 506.5 c 0,132,133 440 438 440 438 458 376 c 0,134,135 480.369 294.514 480.369 294.514 480.4 228.983 c 0,136,137 480.408 212.486 480.408 212.486 479 197 c 0,138,139 467 54.9995 467 54.9995 376 26 c 0,140,141 292 -2 292 -2 265 54 c 0,142,143 303 41 303 41 352.5 62.5 c 0,144,145 399.923 83.0977 399.923 83.0977 400.077 129.854 c 0,146,147 400.084 131.902 400.084 131.902 400 134 c 0,148,149 396.484 183.929 396.484 183.929 359.587 184.653 c 0,150,151 334.74 180.746 l 0,152,153 328.882 179.009 328.882 179.009 322.5 176.5 c 0,154,155 250.001 148 250.001 148 228 110 c 0,156,157 192.001 48.0011 192.001 48.0011 185 -25 c 0,158,159 182.436 -88.491 l 0,160,161 183.31 -118.758 183.31 -118.758 189 -141 c 0,162,163 223.999 -293.999 223.999 -293.999 290 -361 c 0,164,165 356 -428 356 -428 425 -482 c 0,166,167 285 -455 285 -455 187.5 -325 c 0,168,169 93.943 -200.257 93.943 -200.257 93.8425 -64.4657 c 0,170,171 93.8382 -58.7428 93.8382 -58.7428 94 -53 c 0,172,173 97 43 97 43 146 140 c 0,174,175 195.001 237.001 195.001 237.001 209 333 c 0,176,177 214.998 371.988 214.998 371.988 227.5 438.5 c 0,178,179 230.901 474.219 l 0,180,181 230.041 510.432 230.041 510.432 207 523 c 0,182,183 191.903 530.839 191.903 530.839 180.346 530.839 c 0,184,185 152.097 530.839 152.097 530.839 145 484 c 0,186,187 143.091 450.184 l 0,188,189 145.56 415.36 145.56 415.36 171 409 c 0,190,191 97.0005 409 97.0005 409 90 474 c 0,192,193 82.9999 539 82.9999 539 90 588 c 0,194,195 96 634 96 634 127 686 c 0,196,197 158 738 158 738 164 783 c 0,198,199 168.088 814.428 168.088 814.428 167.998 844.615 c 0,200,201 167.736 932.573 167.736 932.573 132 1010 c 0,202,203 84.004 1113.99 84.004 1113.99 53 1222 c 0,204,205 22.9998 1322.01 22.9998 1322.01 20.5 1382 c 0,206,207 18 1442 18 1442 70 1544 c 0,208,209 89.997 1582.99 89.997 1582.99 126.5 1590 c 0,210,211 154.046 1592.08 l 0,212,213 168.318 1590.79 168.318 1590.79 175 1583 c 0,214,215 124.999 1578.99 124.999 1578.99 114.5 1508.5 c 0,216,217 112.6 1474.11 l 0,218,219 115.168 1439.36 115.168 1439.36 144 1436 c 0,220,221 173.178 1437.94 l 0,222,223 208.051 1445.24 208.051 1445.24 224 1477.5 c 0,224,225 246 1522 246 1522 252 1575 c 0,226,227 256.999 1620 256.999 1620 246 1672.5 c 0,228,229 236.506 1717.81 236.506 1717.81 172.622 1718.06 c 0,230,231 162.495 1718.09 162.495 1718.09 151 1717 c 0,232,233 128.007 1715.01 128.007 1715.01 115.5 1696.5 c 0,234,235 103.708 1679.05 103.708 1679.05 103 1679 c 0,236,237 105.806 1714.01 l 0,238,239 117.15 1769.34 117.15 1769.34 173.5 1784.5 c 0,240,241 189.642 1788.84 189.642 1788.84 205.164 1788.8 c 0,242,243 259.359 1788.64 259.359 1788.64 306 1735 c 0,244,245 363.005 1667.99 363.005 1667.99 396.5 1582.5 c 0,246,247 430 1497 430 1497 473 1428 c 0,248,-1 530 1343.5 l 0,249,250 566.99 1288.67 566.99 1288.67 595.556 1288.37 c 0,251,252 605.034 1288.27 605.034 1288.27 613.585 1294.17 c 0,253,254 618.977 1297.89 618.977 1297.89 624 1304 c 0,255,256 634.821 1316.98 634.821 1316.98 634.87 1331.28 c 0,257,258 634.933 1350.01 634.933 1350.01 616.5 1371 c 0,259,260 588.485 1402.9 588.485 1402.9 554.892 1402.84 c 0,261,262 549.517 1402.83 549.517 1402.83 544 1402 c 0,263,264 562.993 1424.95 562.993 1424.95 587.931 1425.04 c 0,265,266 594.509 1425.07 594.509 1425.07 601.5 1423.5 c 0,267,268 634.987 1416 634.987 1416 653 1405 c 0,269,270 689.001 1379.99 689.001 1379.99 694 1326 c 0,271,272 695.999 1271.01 695.999 1271.01 723.5 1217.5 c 0,273,274 742.767 1180.01 742.767 1180.01 771.12 1180.09 c 0,275,276 783.231 1180.12 783.231 1180.12 797 1187 c 0,277,278 839.999 1208 839.999 1208 857.5 1263.5 c 0,279,280 874.99 1318.97 874.99 1318.97 901 1389 c 0,281,282 937 1485 937 1485 1034.5 1600.5 c 0,283,284 1131.99 1715.99 1131.99 1715.99 1204 1735 c 0,285,286 1299.18 1758.55 1299.18 1758.55 1414.62 1758.51 c 0,287,288 1416.82 1758.51 1416.82 1758.51 1419 1758.5 c 0,289,290 1536.99 1758.01 1536.99 1758.01 1624 1696 c 0,291,292 1668.01 1662.99 1668.01 1662.99 1715 1607 c 0,293,294 1762 1551 1762 1551 1762 1486 c 0,295,296 1762 1451.98 1762 1451.98 1753.5 1420.5 c 0,297,298 1745 1389 1745 1389 1706 1367 c 0,299,300 1732.07 1398.62 1732.07 1398.62 1732.14 1440.1 c 0,301,302 1732.19 1473.38 1732.19 1473.38 1715.5 1513 c 0,303,304 1678 1602 1678 1602 1606 1635 c 0,305,306 1531.03 1668.99 1531.03 1668.99 1449.5 1673 c 0,307,308 1424.97 1670.67 l 0,309,310 1367.02 1655.35 1367.02 1655.35 1362 1544 c 0,311,312 1364.34 1517.8 l 0,313,314 1372.6 1483.53 1372.6 1483.53 1408 1448.5 c 0,315,316 1438.06 1418.76 1438.06 1418.76 1459.46 1418.54 c 0,317,318 1468.94 1418.44 1468.94 1418.44 1476.72 1424.14 c 0,319,320 1480.01 1426.55 1480.01 1426.55 1483 1430 c 0,321,322 1503.71 1453.3 1503.71 1453.3 1503.69 1471.35 c 0,323,324 1503.68 1481.2 1503.68 1481.2 1497.5 1489.5 c 0,325,326 1480.01 1512.99 1480.01 1512.99 1451 1523 c 0,327,328 1462.95 1538.93 1462.95 1538.93 1480.07 1538.84 c 0,329,330 1493.05 1538.77 1493.05 1538.77 1509 1529.5 c 0,331,332 1545.99 1508.01 1545.99 1508.01 1552 1497 c 0,333,334 1562.18 1474.09 1562.18 1474.09 1562.51 1446 c 0,335,336 1558.74 1407.05 l 0,337,338 1554 1387 l 0,339,340 1536 1321.99 1536 1321.99 1500 1278 c 0,341,342 1416.04 1176.16 1416.04 1176.16 1416.08 1061.63 c 0,343,344 1416.1 1028.84 1416.1 1028.84 1423 995 c 0,345,346 1444 887.992 1444 887.992 1476.5 845 c 0,347,348 1508.97 802.053 1508.97 802.053 1539 757 c 0,349,350 1602.07 662.786 1602.07 662.786 1602.09 561.896 c 0,351,352 1602.09 533.218 1602.09 533.218 1597 504 c 0,353,354 1589.99 464.981 1589.99 464.981 1573.5 427.5 c 0,355,356 1557 389.995 1557 389.995 1514 360 c 0,357,358 1503.02 353.01 1503.02 353.01 1475.5 342.5 c 0,359,360 1455.47 338.636 l 0,361,362 1439.99 338.866 1439.99 338.866 1427 350 c 0,363,364 1484 377 1484 377 1494.5 417.5 c 0,365,366 1501.7 445.258 1501.7 445.258 1501.61 472.323 c 0,367,368 1501.57 484.735 1501.57 484.735 1500 497 c 0,369,370 1497 524 1497 524 1451 525.5 c 0,371,372 1429 522.813 l 0,373,374 1401.07 514.148 1401.07 514.148 1390 478 c 0,375,376 1374.99 431.982 1374.99 431.982 1373 369.5 c 0,377,378 1371.01 307 1371.01 307 1379 259 c 0,379,380 1389.99 190.017 1389.99 190.017 1406.5 154 c 0,381,382 1423 118 1423 118 1438 80 c 0,383,384 1469.99 -7 1469.99 -7 1453 -101 c 0,385,386 1436.99 -185.011 1436.99 -185.011 1383 -266 c 0,387,388 1329 -347 1329 -347 1191 -391 c 1,0,1 EndSplineSet KernsSLIF: 65 -104 0 0 97 -104 0 0 105 78 0 0 EndChar StartChar: N Encoding: 78 78 49 Width: 1258 Flags: MW VStem: 112 207<77 1354> 762 258<69 1428.5> Fore 74 -62 m 1,0,1 41 43 41 43 64.5 150 c 0,2,3 87.9992 256.995 87.9992 256.995 108 359 c 0,4,5 138 521 138 521 61 677 c 0,6,7 -16 833 -16 833 17 954 c 0,8,9 20 965 20 965 44 986 c 0,10,11 68 1007 68 1007 101 992 c 0,12,13 9.00005 947 9.00005 947 77.5 905.5 c 0,14,15 146.001 864 146.001 864 146 964 c 0,16,17 146 1059 146 1059 129 1160 c 0,18,19 112 1261 112 1261 112 1354 c 0,20,21 114.761 1469.81 l 0,22,23 116.564 1501.21 116.564 1501.21 119.5 1533.5 c 0,24,25 128.001 1627 128.001 1627 184 1684 c 0,26,27 203.611 1704.22 203.611 1704.22 228.297 1704.54 c 0,28,29 251.074 1700.94 l 0,30,31 256.195 1699.33 256.195 1699.33 261.5 1697 c 0,32,33 307 1677 307 1677 307 1650 c 0,34,35 268.794 1682.55 268.794 1682.55 241.845 1682.8 c 0,36,37 231.258 1682.9 231.258 1682.9 221.5 1677.5 c 0,38,39 189.999 1659 189.999 1659 180.5 1611.5 c 0,40,41 176.467 1591.33 176.467 1591.33 176.489 1569.19 c 0,42,43 176.519 1539.16 176.519 1539.16 184 1505.5 c 0,44,45 196.999 1447.01 196.999 1447.01 233 1413 c 0,46,47 295.992 1350.01 295.992 1350.01 386 1314.5 c 0,48,49 476.011 1278.99 476.011 1278.99 519 1224 c 0,50,51 545.623 1187.93 545.623 1187.93 545.694 1151.12 c 0,52,53 545.706 1145.07 545.706 1145.07 545 1139 c 0,54,55 540.001 1096 540.001 1096 480 1066 c 0,56,-1 502 1105 l 0,57,58 514 1126 514 1126 506 1153 c 0,59,60 497 1178.99 497 1178.99 477.5 1184.5 c 0,61,62 464.262 1184.99 l 0,63,64 453.62 1182.33 453.62 1182.33 446 1169 c 0,65,66 437.906 1155.92 437.906 1155.92 437.953 1128.31 c 0,67,68 437.981 1111.58 437.981 1111.58 441 1089.5 c 0,69,70 449 1031 449 1031 469.5 969.5 c 0,71,72 490 908 490 908 517.5 862 c 0,73,74 541.915 821.159 541.915 821.159 565.149 820.52 c 0,75,76 568.084 820.439 568.084 820.439 571 821 c 0,77,78 643 833 643 833 617 883.5 c 0,79,80 591.001 933.999 591.001 933.999 559 960 c 0,81,82 673 931 673 931 681 835.5 c 0,83,84 689 740 689 740 689 645 c 0,85,86 689 567.999 689 567.999 744 530 c 0,87,88 757.572 520.623 757.572 520.623 768.89 520.563 c 0,89,90 787.453 520.463 787.453 520.463 799.956 545.418 c 0,91,92 810.726 566.914 810.726 566.914 817 607 c 0,93,94 826.998 675.985 826.998 675.985 832.5 743.5 c 0,95,96 838 811 838 811 819 882 c 0,97,98 808 921 808 921 781.5 974.5 c 0,99,100 755 1028.01 755 1028.01 755 1075 c 0,101,102 755 1120 755 1120 773 1156 c 0,103,104 789.176 1188.35 789.176 1188.35 831.992 1188.4 c 0,105,106 836.826 1188.41 836.826 1188.41 842 1188 c 0,107,108 822 1170 822 1170 807 1140 c 0,109,110 792 1110 792 1110 813 1092 c 0,111,112 823 1082.67 823 1082.67 831.5 1082.67 c 0,113,114 848.499 1082.67 848.499 1082.67 859.5 1120 c 0,115,116 876 1175.99 876 1175.99 876 1188 c 0,117,118 876 1262 876 1262 839 1314.5 c 0,119,120 802 1367 802 1367 794 1439 c 0,121,122 794.095 1471.9 l 0,123,124 800.447 1521.51 800.447 1521.51 845.5 1560.5 c 0,125,126 905 1611.99 905 1611.99 953 1535 c 0,127,128 919.238 1535.44 l 0,129,130 871.273 1529.7 871.273 1529.7 870.734 1481.68 c 0,131,132 870.688 1477.5 870.688 1477.5 871 1473 c 0,133,134 876 1401 876 1401 936 1401 c 0,135,136 989.994 1401 989.994 1401 1020 1428.5 c 0,137,138 1050 1455.99 1050 1455.99 1071 1499 c 0,139,140 1093.96 1545.56 1093.96 1545.56 1093.94 1612.45 c 0,141,142 1093.93 1650.44 1093.93 1650.44 1086.5 1695 c 0,143,144 1065.99 1818.01 1065.99 1818.01 1006 1877 c 0,145,146 1102.01 1814 1102.01 1814 1125 1699 c 0,147,148 1148 1583.97 1148 1583.97 1148 1560 c 0,149,150 1148 1485.01 1148 1485.01 1116 1422.5 c 0,151,152 1083.99 1359.96 1083.99 1359.96 1070 1297 c 0,153,154 1062.93 1266.38 1062.93 1266.38 1062.96 1238.99 c 0,155,156 1062.99 1196.62 1062.99 1196.62 1080 1162 c 0,157,158 1107.99 1105.03 1107.99 1105.03 1134 1043 c 0,159,160 1168.01 955 1168.01 955 1183.5 886 c 0,161,162 1198.99 817 1198.99 817 1083 760 c 0,163,-1 1113 802.5 l 0,164,165 1130 827.007 1130 827.007 1130 852 c 0,166,167 1130 892 1130 892 1104 892 c 0,168,169 1077.42 889.157 l 0,170,171 1028.81 876.802 1028.81 876.802 1024 811 c 0,172,173 1015 687 1015 687 1003 556.5 c 0,174,175 991 426 991 426 966 305 c 0,176,177 948 222.001 948 222.001 863 62 c 0,178,179 778 -98 778 -98 670 -79 c 0,180,181 720 -55 720 -55 736.5 -18.5 c 0,182,183 753 18 753 18 762 69 c 0,184,185 775 138 775 138 725.5 292.5 c 0,186,187 676 447 676 447 593 435 c 0,188,189 565 431 565 431 569 395 c 0,190,191 572.22 366.025 572.22 366.025 596.817 365.553 c 0,192,193 610 367 l 0,194,195 596.188 350 596.188 350 578.988 349.934 c 0,196,197 563.812 349.875 563.812 349.875 546 363 c 0,198,199 508 391 508 391 502 411 c 0,200,201 467 518.001 467 518.001 461 595 c 0,202,203 455 671.999 455 671.999 423 770 c 0,204,205 400 839 400 839 373 847 c 0,206,207 364.788 846.446 l 0,208,209 359.164 842.844 359.164 842.844 359.247 828.26 c 0,210,211 359.369 806.668 359.369 806.668 372 761 c 0,212,213 381.671 725.158 381.671 725.158 381.633 684.301 c 0,214,215 381.604 653.34 381.604 653.34 376 619.5 c 0,216,217 363 541 363 541 267 579 c 0,218,219 351 576 351 576 313.5 641.5 c 0,220,221 276 707 276 707 249 644 c 0,222,223 234.53 609.272 234.53 609.272 234.5 559 c 0,224,225 234.999 510.002 234.999 510.002 247 479 c 0,226,227 294.999 346.002 294.999 346.002 326.5 289.5 c 0,228,229 340.656 264.108 340.656 264.108 340.574 218.621 c 0,230,231 340.473 162.892 340.473 162.892 319 77 c 0,232,233 309 36 309 36 268 13 c 0,234,235 227.001 -9.99947 227.001 -9.99947 186 -20 c 0,236,237 230.999 2.99969 230.999 2.99969 250 78.5 c 0,238,239 253.611 106.897 l 0,240,241 252.175 152.133 252.175 152.133 189 152 c 0,242,243 144.001 150.001 144.001 150.001 131 95.5 c 0,244,245 117.999 41 117.999 41 118 -7 c 0,246,247 118 -142 118 -142 217.5 -203.5 c 0,248,249 317 -265 317 -265 431 -271 c 0,250,251 395.576 -276.239 395.576 -276.239 363.232 -276.188 c 0,252,253 265.925 -276.034 265.925 -276.034 196.5 -228 c 0,254,255 104 -164 104 -164 74 -62 c 1,0,1 EndSplineSet KernsSLIF: 65 -234 0 0 97 -208 0 0 EndChar StartChar: O Encoding: 79 79 47 Width: 1417 Flags: HW Fore 263 27 m 1,0,1 233 13.5 233 13.5 202 13.5 c 0,2,3 171 13.5 171 13.5 139 27 c 0,4,5 22 76.0001 22 76.0001 22 185 c 0,6,7 22 261.001 22 261.001 75 455 c 0,8,-1 147 721 l 0,9,10 153.999 750.993 153.999 750.993 158 796 c 0,11,12 156.573 817.294 l 0,13,14 149.813 841.812 149.813 841.812 117 844 c 0,15,16 89.2061 842.225 l 0,17,18 46.2343 832.476 46.2343 832.476 46.0801 776.017 c 0,19,20 46.0569 767.536 46.0569 767.536 47 758 c 0,21,22 19.3514 778.513 19.3514 778.513 19.1465 836.017 c 0,23,24 19.1216 842.987 19.1216 842.987 19.5 850.5 c 0,25,26 23 920 23 920 41.5 1005.5 c 0,27,28 60 1091 60 1091 83.5 1178 c 0,29,30 106.998 1264.99 106.998 1264.99 116 1324 c 0,31,32 128.001 1411.01 128.001 1411.01 174 1492.5 c 0,33,34 201.989 1542.09 201.989 1542.09 257.37 1542.25 c 0,35,36 289.993 1542.35 289.993 1542.35 332.12 1525.3 c 0,37,38 336.018 1523.72 336.018 1523.72 340 1522 c 0,39,40 232.57 1519.34 232.57 1519.34 231.558 1459.92 c 0,41,42 233 1444 l 0,43,44 246.622 1371.02 246.622 1371.02 295 1370 c 0,45,46 373.997 1370 373.997 1370 454 1495 c 0,47,48 502.516 1570.8 502.516 1570.8 502.485 1611.67 c 0,49,50 502.465 1638.19 502.465 1638.19 482 1650 c 0,51,52 451.482 1667.25 451.482 1667.25 427.613 1667.38 c 0,53,54 409.651 1667.48 409.651 1667.48 395.456 1657.88 c 0,55,56 385.869 1651.4 385.869 1651.4 378 1640.5 c 0,57,58 343 1592.01 343 1592.01 330 1567 c 0,59,60 325.922 1585.8 325.922 1585.8 325.899 1602.66 c 0,61,62 325.82 1660.2 325.82 1660.2 373 1695 c 0,63,64 427.818 1735.44 427.818 1735.44 511.724 1735.5 c 0,65,66 521.177 1735.51 521.177 1735.51 531 1735 c 0,67,68 630.999 1729 630.999 1729 758 1669 c 0,69,70 885.004 1609 885.004 1609 924 1539 c 0,71,-1 949.5 1479.5 l 0,72,73 970.969 1429.07 970.969 1429.07 999.5 1372.5 c 0,74,75 1027.99 1316.02 1027.99 1316.02 1060 1270.5 c 0,76,77 1089.79 1228.14 1089.79 1228.14 1118 1228 c 0,78,79 1188.94 1234.16 1188.94 1234.16 1189.13 1280.17 c 0,80,81 1189.18 1293.83 1189.18 1293.83 1183 1311 c 0,82,83 1156 1386.01 1156 1386.01 1090 1388 c 0,84,85 1116.63 1392.13 1116.63 1392.13 1138.87 1392.1 c 0,86,87 1224.37 1392 1224.37 1392 1245 1330.5 c 0,88,89 1260.02 1285.72 1260.02 1285.72 1260.02 1250.8 c 0,90,91 1260.03 1225.27 1260.03 1225.27 1252 1205 c 0,92,93 1227.01 1143.05 1227.01 1143.05 1162 963 c 0,94,95 1114.5 831.456 1114.5 831.456 1114.53 767.21 c 0,96,97 1114.54 743.538 1114.54 743.538 1121 729 c 0,98,99 1134.99 694 1134.99 694 1190 694.5 c 0,100,101 1245 695 1245 695 1257 742 c 0,102,103 1261.16 756.544 1261.16 756.544 1261.24 768.805 c 0,104,105 1261.34 782.452 1261.34 782.452 1256.4 793.271 c 0,106,107 1242.28 824.188 1242.28 824.188 1187 832 c 0,108,109 1197.02 844.659 1197.02 844.659 1221.79 844.798 c 0,110,111 1239.24 844.897 1239.24 844.897 1264.01 838.779 c 0,112,113 1270.74 837.119 1270.74 837.119 1278 835 c 0,114,115 1347.81 814.638 1347.81 814.638 1348.05 740.675 c 0,116,117 1348.06 738.365 1348.06 738.365 1348 736 c 0,118,119 1343.01 576.009 1343.01 576.009 1216.5 460.5 c 0,120,121 1090 344.992 1090 344.992 1030 216 c 0,122,123 1024.6 204.557 1024.6 204.557 1024.65 193.874 c 0,124,125 1024.76 170.939 1024.76 170.939 1050 151.5 c 0,126,127 1063.03 141.468 1063.03 141.468 1082.37 141.534 c 0,128,129 1117.97 141.656 1117.97 141.656 1175 176 c 0,130,131 1155.01 125 1155.01 125 1091 97 c 0,132,133 1026.98 68.9955 1026.98 68.9955 952.5 52.5 c 0,134,135 878 36 878 36 810.5 25.5 c 0,136,137 743 15 743 15 718 1 c 0,138,139 658 -32 658 -32 567 -58 c 0,140,141 522.468 -70.7233 522.468 -70.7233 476.5 -70.7546 c 0,142,143 428.532 -70.7873 428.532 -70.7873 379 -57 c 0,144,145 367 -53 367 -53 343.5 -37 c 0,146,147 320 -21 320 -21 315 11 c 0,148,149 368 -31 368 -31 410 -27 c 0,150,151 452 -23 452 -23 473 -1 c 0,152,153 497 25 497 25 456 54.5 c 0,154,155 415 84.0001 415 84.0001 353.5 106.5 c 0,156,157 292 129 292 129 233.5 138 c 0,158,159 189.68 141.609 l 0,160,161 170.8 140.934 170.8 140.934 166 134 c 0,162,163 152.476 114.369 152.476 114.369 152.56 97.6881 c 0,164,165 152.668 76.131 152.668 76.131 175.5 59.5 c 0,166,167 216 30 216 30 263 27 c 1,0,1 887 310 m 1,85,86 899 334 899 334 890.5 373 c 0,87,88 882 412 882 412 832 394 c 0,89,90 781 376 781 376 788 333 c 0,91,92 795 290 795 290 818 288 c 0,93,94 749 286 749 286 745 349 c 0,95,96 739 418 739 418 790 450.5 c 0,97,98 841 483 841 483 889 534 c 0,99,100 904 551 904 551 945 692.5 c 0,101,102 986 834 986 834 968 910 c 0,103,104 946 999 946 999 872.5 1038 c 0,105,106 799 1077 799 1077 799 1186 c 0,107,108 799 1200.99 799 1200.99 817 1212.5 c 0,109,110 826.229 1218.4 826.229 1218.4 836.25 1218.38 c 0,111,112 845.767 1218.36 845.767 1218.36 856 1213 c 0,113,114 840.205 1210.37 840.205 1210.37 839.81 1193.49 c 0,115,116 839.755 1191.13 839.755 1191.13 840 1188.5 c 0,117,118 842 1167.01 842 1167.01 860 1166 c 0,119,120 872.806 1168.21 l 0,121,122 884.747 1174.44 884.747 1174.44 884.653 1197.6 c 0,123,124 884.553 1222.09 884.553 1222.09 871 1265.5 c 0,125,126 839 1367.99 839 1367.99 736 1390 c 0,127,128 628 1412.99 628 1412.99 550.5 1369 c 0,129,130 473 1325.01 473 1325.01 473 1256 c 0,131,132 473 1230.99 473 1230.99 505 1214 c 0,133,134 525.872 1202.91 525.872 1202.91 548.866 1202.89 c 0,135,136 561.131 1202.87 561.131 1202.87 574 1206 c 0,137,138 603.86 1213.31 603.86 1213.31 604.012 1235.48 c 0,139,140 604.11 1249.69 604.11 1249.69 592 1270 c 0,141,142 628.292 1265.05 628.292 1265.05 628.527 1221.67 c 0,143,144 628.577 1212.45 628.577 1212.45 627 1201.5 c 0,145,146 618.002 1139.01 618.002 1139.01 585 1126 c 0,147,148 547.001 1111 547.001 1111 491 1102 c 0,149,150 435.018 1093 435.018 1093 388 1073 c 0,151,152 356.003 1059.01 356.003 1059.01 331 996 c 0,153,154 306 933 306 933 289.5 859 c 0,155,156 273 785 273 785 264.5 719 c 0,157,158 256 653 256 653 257 632 c 0,159,160 260 542 260 542 312.5 522.5 c 0,161,162 365 503 365 503 416 449 c 0,163,164 443 420 443 420 441 370.5 c 0,165,166 439 321 439 321 402 316 c 0,167,168 411.192 332.085 411.192 332.085 411.143 345.2 c 0,169,170 411.106 354.915 411.106 354.915 406 363 c 0,171,172 394 382 394 382 360 373 c 0,173,174 322 363 322 363 328.5 317.5 c 0,175,176 335 272 335 272 371 252 c 0,177,178 468.098 195.621 468.098 195.621 594.015 195.652 c 0,179,180 628.902 195.661 628.902 195.661 666 200 c 0,181,182 837 220 837 220 887 310 c 1,85,86 EndSplineSet KernsSLIF: 121 -78 0 0 89 -91 0 0 97 -156 0 0 65 -156 0 0 120 -156 0 0 88 -156 0 0 87 -234 0 0 116 -286 0 0 84 -365 0 0 EndChar StartChar: P Encoding: 80 80 61 Width: 1329 Flags: MW VStem: 197 325<73 1477> Fore 518 874 m 0,0,1 606 816 606 816 627 886 c 0,2,3 650 964 650 964 611 956.5 c 0,4,5 572 949 572 949 555 928 c 0,6,7 543 943 543 943 554.5 971.5 c 0,8,9 566 1000 566 1000 578 1012 c 0,10,11 627 1061.01 627 1061.01 677 1025.5 c 0,12,13 726.986 990.005 726.986 990.005 783 974 c 0,14,15 852 953 852 953 878.5 1050 c 0,16,17 905.001 1147.01 905.001 1147.01 910 1231 c 0,18,19 908.901 1282.34 l 0,20,21 904.241 1331.41 904.241 1331.41 886 1384.5 c 0,22,23 857.997 1466 857.997 1466 788 1505 c 0,24,25 746.02 1526.99 746.02 1526.99 701 1528 c 0,26,27 656 1529.01 656 1529.01 661 1453 c 0,28,29 663 1415 663 1415 696.5 1410.5 c 0,30,31 726.891 1410.32 l 0,32,33 746.742 1412.61 746.742 1412.61 768 1421 c 0,34,35 761.001 1388.01 761.001 1388.01 727 1373.5 c 0,36,37 705.194 1364.2 705.194 1364.2 689.55 1364.16 c 0,38,39 680.813 1364.13 680.813 1364.13 674 1367 c 0,40,41 603.995 1394 603.995 1394 569.5 1438.5 c 0,42,43 535.012 1482.99 535.012 1482.99 511 1493 c 0,44,45 487.022 1501.95 487.022 1501.95 468.037 1502.06 c 0,46,47 451.651 1502.15 451.651 1502.15 438.986 1495.66 c 0,48,49 425.329 1488.66 425.329 1488.66 416 1474 c 0,50,51 393 1439 393 1439 391.5 1350.5 c 0,52,53 394.035 1261.13 l 0,54,55 397.399 1214.16 397.399 1214.16 405 1165 c 0,56,57 419.999 1068 419.999 1068 449.5 984 c 0,58,59 479 900 479 900 518 874 c 0,0,1 235 -68 m 0,36,37 233.325 25.6653 l 0,38,39 237.033 178.49 237.033 178.49 283 327.5 c 0,40,41 319.793 446.772 319.793 446.772 319.734 573.376 c 0,42,43 319.697 653.229 319.697 653.229 305 736 c 0,44,45 288.001 824.999 288.001 824.999 232 888 c 0,46,47 176 951.001 176 951.001 164 1029 c 0,48,49 162.356 1058.78 l 0,50,51 163.651 1078.43 163.651 1078.43 170.5 1102 c 0,52,53 182.999 1145.01 182.999 1145.01 222 1150 c 0,54,55 205.412 1107.34 205.412 1107.34 205.203 1079.82 c 0,56,57 205.105 1067.02 205.105 1067.02 208.55 1057.49 c 0,58,59 216.453 1035.63 216.453 1035.63 243 1031 c 0,60,61 265.996 1030.34 l 0,62,63 303.391 1035.78 303.391 1035.78 312 1089 c 0,64,65 310.993 1137.94 l 0,66,67 308.867 1164.38 308.867 1164.38 304 1202 c 0,68,69 293.002 1286.99 293.002 1286.99 266 1363.5 c 0,70,71 239.003 1439.99 239.003 1439.99 197 1477 c 0,72,73 181.88 1490.32 181.88 1490.32 164.686 1490.29 c 0,74,75 134.121 1490.24 134.121 1490.24 97 1448 c 0,76,77 59.3301 1404.67 59.3301 1404.67 59.3529 1351.6 c 0,78,79 59.3544 1348.32 59.3544 1348.32 59.5 1345 c 0,80,81 62 1288 62 1288 83 1261 c 0,82,83 101 1237 101 1237 109 1222 c 0,84,85 117.003 1206.99 117.003 1206.99 141 1199 c 0,86,87 78 1208 78 1208 67.5 1221.5 c 0,88,89 56.9847 1235.02 56.9847 1235.02 33 1258 c 0,90,91 10.9999 1303 10.9999 1303 10 1340 c 0,92,93 12.5953 1401.58 l 0,94,95 13.6097 1411.57 13.6097 1411.57 15 1422 c 0,96,97 27.0018 1502.01 27.0018 1502.01 71 1555 c 0,98,99 176 1676.01 176 1676.01 269 1705 c 0,100,101 353.428 1731.32 353.428 1731.32 498.8 1731.28 c 0,102,103 513.581 1731.28 513.581 1731.28 529 1731 c 0,104,105 694.016 1728 694.016 1728 811 1689.5 c 0,106,107 928.032 1650.98 928.032 1650.98 1071 1557 c 0,108,109 1142.03 1508.98 1142.03 1508.98 1204 1436 c 0,110,111 1238.68 1395.16 1238.68 1395.16 1238.63 1344.64 c 0,112,113 1238.59 1304.83 1238.59 1304.83 1217 1259 c 0,114,115 1201 1225 1201 1225 1177.5 1206 c 0,116,117 1154.01 1187.01 1154.01 1187.01 1103 1183 c 0,118,119 1122 1215.99 1122 1215.99 1129.5 1250 c 0,120,121 1130.62 1272.67 l 0,122,123 1127.86 1294.49 1127.86 1294.49 1110 1315 c 0,124,125 1098.99 1326.01 1098.99 1326.01 1065.5 1334 c 0,126,127 1032.01 1341.99 1032.01 1341.99 1031 1289 c 0,128,129 1032.07 1159.01 l 0,130,131 1033.01 1135.15 1033.01 1135.15 1034.5 1111.5 c 0,132,133 1035.52 1032.62 l 0,134,135 1033.73 983.704 1033.73 983.704 1026 934 c 0,136,137 1017 876.978 1017 876.978 968 749.5 c 0,138,139 919 622 919 622 836 589 c 0,140,141 782 568 782 568 699.5 588 c 0,142,143 617 608 617 608 596 671 c 0,144,145 653 642 653 642 708 645 c 0,146,147 773 648 773 648 777 682 c 0,148,149 774.961 695.917 l 0,150,151 764.158 721.263 764.158 721.263 701 741 c 0,152,153 651 756 651 756 596 745.5 c 0,154,155 541 735 541 735 509 694 c 0,156,157 485.999 663.998 485.999 663.998 466 566 c 0,158,159 454.824 511.235 454.824 511.235 454.889 464.59 c 0,160,161 454.941 427.764 454.941 427.764 462 396 c 0,162,163 481.006 309.979 481.006 309.979 500.5 233 c 0,164,165 520.001 155.999 520.001 155.999 522 73 c 0,166,167 525 -94 525 -94 450 -233 c 0,168,169 423 -283 423 -283 341.5 -349 c 0,170,171 260.001 -415 260.001 -415 201 -415 c 0,172,173 287 -373 287 -373 379 -249.5 c 0,174,175 442.033 -164.885 442.033 -164.885 442.164 -90.362 c 0,176,177 442.224 -56.1152 442.224 -56.1152 429 -24 c 0,178,179 405 31 405 31 363 27.5 c 0,180,181 321 24 321 24 289 -18 c 0,182,183 268 -46 268 -46 275.5 -98.5 c 0,184,185 283 -151 283 -151 294 -175 c 0,186,187 239.001 -134.001 239.001 -134.001 235 -68 c 0,36,37 EndSplineSet KernsSLIF: 45 -208 0 0 46 -260 0 0 44 -286 0 0 116 -91 0 0 84 -195 0 0 321 -363 0 0 322 -363 0 0 65 -342 0 0 97 -363 0 0 EndChar StartChar: Q Encoding: 81 81 32 Width: 1255 Flags: W Fore 946 1665 m 1,0,1 972.261 1677.88 972.261 1677.88 999.749 1678 c 0,2,3 1023.34 1678.1 1023.34 1678.1 1047.83 1668.8 c 0,4,5 1052.4 1667.06 1052.4 1667.06 1057 1665 c 0,6,7 1162 1612.99 1162 1612.99 1162 1503 c 0,8,9 1162 1424.01 1162 1424.01 1114 1225 c 0,10,11 1066.03 1026.12 1066.03 1026.12 1050 953 c 0,12,13 1042.99 921 1042.99 921 1039.5 875 c 0,14,15 1036.01 829 1036.01 829 1077 826 c 0,16,17 1100.59 827.702 l 0,18,19 1139.62 837.667 1139.62 837.667 1139.65 898.428 c 0,20,21 1139.65 906.288 1139.65 906.288 1139 915 c 0,22,23 1170.9 877.5 1170.9 877.5 1171.01 822.931 c 0,24,25 1171.1 779.997 1171.1 779.997 1151.5 726.5 c 0,26,27 1107 605.014 1107 605.014 1107 504 c 0,28,29 1107 402.008 1107 402.008 1139 350.5 c 0,30,31 1170.99 299 1170.99 299 1163 239 c 0,32,33 1152.01 149.012 1152.01 149.012 1110 77.5 c 0,34,35 1086.04 36.7115 1086.04 36.7115 1040.93 36.4396 c 0,36,37 1024.38 36.3399 1024.38 36.3399 1005 41.6884 c 0,38,39 984.575 47.3221 984.575 47.3221 961 59 c 0,40,41 1067.99 61 1067.99 61 1055.5 138 c 0,42,43 1043.33 212.974 1043.33 212.974 1001 214 c 0,44,45 983 214 983 214 942 177.5 c 0,46,47 901 141.001 901 141.001 901 95 c 0,48,49 899 34 899 34 925 15 c 0,50,51 951 -4.00001 951 -4.00001 985 -23 c 0,52,53 1018.99 -41.9901 1018.99 -41.9901 1050 -81.5 c 0,54,55 1080.99 -120.985 1080.99 -120.985 1091 -223 c 0,56,57 1055 -129.996 1055 -129.996 979 -79.5 c 0,58,59 903 -29 903 -29 877 -98 c 0,60,61 859 -144.999 859 -144.999 956.5 -251 c 0,62,63 1054 -357 1054 -357 1183 -365 c 0,64,65 1121.24 -362.563 l 0,66,67 1028.23 -352.747 1028.23 -352.747 951.5 -305.5 c 0,68,69 850 -243 850 -243 782 -175 c 0,70,71 723.983 -116.983 723.983 -116.983 724 -55 c 0,72,73 725 6.00005 725 6.00005 698 16 c 0,74,75 684.054 21.1892 684.054 21.1892 671.37 21.1191 c 0,76,77 644.946 20.973 644.946 20.973 624 -2 c 0,78,79 593 -36 593 -36 522 -50 c 0,80,81 244 -101 244 -101 220 54 c 0,82,83 286 0 286 0 337 21 c 0,84,85 388 42 388 42 355 114 c 0,86,87 351.005 121.989 351.005 121.989 332 173.5 c 0,88,89 313 224.999 313 224.999 287 283 c 0,90,91 261 341 261 341 232.5 387.5 c 0,92,93 204.564 433.08 204.564 433.08 182 433 c 0,94,95 99.0005 424 99.0005 424 123 346.5 c 0,96,97 147 269 147 269 207 269 c 0,98,99 187.571 253.572 187.571 253.572 167.49 253.49 c 0,100,101 152.429 253.429 152.429 253.429 137 262 c 0,102,103 101 282 101 282 95 291 c 0,104,105 42 354 42 354 65 457 c 0,106,107 71 489 71 489 93.5 559 c 0,108,-1 138.5 705 l 0,109,110 160.999 780.995 160.999 780.995 175.5 848.5 c 0,111,112 190.001 916 190.001 916 180 944 c 0,113,114 166.999 979 166.999 979 117.5 979 c 0,115,116 68 979 68 979 58 932 c 0,117,118 39 851 39 851 120 839 c 0,119,120 102 815 102 815 39.5 836 c 0,121,122 -23 857 -23 857 -22 937 c 0,123,124 -17.9997 1101.01 -17.9997 1101.01 94.5 1220 c 0,125,126 206.996 1338.99 206.996 1338.99 261 1471 c 0,127,128 276 1507 276 1507 241 1522 c 0,129,130 206.001 1537 206.001 1537 154 1459 c 0,131,132 158.999 1543 158.999 1543 213.5 1582 c 0,133,134 268.01 1621.01 268.01 1621.01 335 1638 c 0,135,136 402.083 1655.02 402.083 1655.02 462.5 1663 c 0,137,138 522.996 1670.99 522.996 1670.99 540 1692 c 0,139,140 572 1732.01 572 1732.01 504 1761 c 0,141,142 482.218 1770.29 482.218 1770.29 461.258 1770.34 c 0,143,144 423.561 1770.44 423.561 1770.44 388.522 1740.68 c 0,145,146 382.218 1735.32 382.218 1735.32 376 1729 c 0,147,148 382.001 1806.01 382.001 1806.01 465.5 1821.5 c 0,149,150 549 1836.99 549 1836.99 587 1820 c 0,151,152 656 1787 656 1787 697 1740.5 c 0,153,154 738.065 1693.93 738.065 1693.93 756 1672 c 0,155,156 819.012 1591.99 819.012 1591.99 912.5 1554 c 0,157,158 958.669 1535.24 958.669 1535.24 988.622 1535.25 c 0,159,160 1019.33 1535.26 1019.33 1535.26 1033 1555 c 0,161,162 1046.31 1574.97 1046.31 1574.97 1046.33 1592.08 c 0,163,164 1046.36 1613.54 1046.36 1613.54 1025.5 1630.5 c 0,165,166 988 1660.99 988 1660.99 946 1665 c 0,167,-1 946 1665 l 1,0,1 735 1510 m 0,105,106 636 1511.01 636 1511.01 529.5 1478.5 c 0,107,108 422.998 1445.99 422.998 1445.99 389 1374 c 0,109,110 377 1350 377 1350 384.5 1309.5 c 0,111,112 389.617 1281.87 389.617 1281.87 412.654 1281.93 c 0,113,114 423.383 1281.96 423.383 1281.96 438 1288 c 0,115,116 476.322 1303.68 476.322 1303.68 476.716 1339.08 c 0,117,118 476.774 1344.32 476.774 1344.32 476 1350 c 0,119,120 469.999 1394 469.999 1394 451 1397 c 0,121,122 475.763 1394.05 l 0,123,124 512.154 1383.46 512.154 1383.46 516 1335 c 0,125,126 514.434 1298.61 l 0,127,128 507.433 1254.61 507.433 1254.61 474.5 1230 c 0,129,130 428.988 1195.99 428.988 1195.99 387 1145 c 0,131,132 371.997 1127 371.997 1127 332.5 980.5 c 0,133,134 304.311 875.949 304.311 875.949 304.388 806.797 c 0,135,136 304.418 779.049 304.418 779.049 309 757 c 0,137,138 328.001 664.999 328.001 664.999 402.5 593 c 0,139,140 477 521 477 521 477 410 c 0,141,142 477 395 477 395 460.5 382.5 c 0,143,144 444 370 444 370 426 382 c 0,145,146 441 385 441 385 439 407 c 0,147,148 437 429 437 429 422 431 c 0,149,150 383 434 383 434 376 361.5 c 0,151,152 369 289 369 289 435 243 c 0,153,154 476 213 476 213 527 201 c 0,155,156 578 189 578 189 608 204 c 0,157,158 667 229.999 667 229.999 656 285 c 0,159,160 645 340 645 340 582 376 c 0,161,162 678 371 678 371 691.5 318.5 c 0,163,164 705 266 705 266 768 262 c 0,165,166 807 259 807 259 826.5 295 c 0,167,168 846 331 846 331 846 349 c 0,169,170 846 373.999 846 373.999 817 391.5 c 0,171,172 797.184 403.458 797.184 403.458 776.433 403.509 c 0,173,174 766.817 403.533 766.817 403.533 757 401 c 0,175,176 729.121 393.121 729.121 393.121 728.791 370.55 c 0,177,178 732.807 350.482 l 0,179,180 735.501 343.222 735.501 343.222 740 335 c 0,181,182 706.857 339.971 706.857 339.971 706.668 384.761 c 0,183,184 706.629 394.028 706.629 394.028 708 405 c 0,185,186 716 469 716 469 746 483 c 0,187,188 779 498 779 498 846 517.5 c 0,189,190 913 537 913 537 937 598 c 0,191,192 961 661 961 661 940 875.5 c 0,193,194 919 1089.99 919 1089.99 810 1232 c 0,195,196 787.5 1260.13 787.5 1260.13 787.412 1305.83 c 0,197,198 787.406 1308.88 787.406 1308.88 787.5 1312 c 0,199,200 789 1362 789 1362 822 1368 c 0,201,202 813.495 1350.99 813.495 1350.99 813.349 1337.68 c 0,203,204 813.25 1328.63 813.25 1328.63 818 1319.5 c 0,205,206 825.334 1307.17 825.334 1307.17 841.555 1307.06 c 0,207,208 849.667 1307 849.667 1307 860 1310 c 0,209,210 893 1320.01 893 1320.01 893 1371 c 0,211,212 893 1421.99 893 1421.99 869 1450 c 0,213,214 845.986 1476.01 845.986 1476.01 805.5 1493 c 0,215,216 764.988 1510 764.988 1510 735 1510 c 0,105,106 EndSplineSet EndChar StartChar: R Encoding: 82 82 57 Width: 1327 Flags: MW VStem: 112 318<-13 1619> Fore 1128 -43 m 0,0,1 1125 20.0058 1125 20.0058 1077.5 71.5 c 0,2,3 1029.99 123.002 1029.99 123.002 969 136 c 0,4,5 942.51 137.844 l 0,6,7 911.739 135.321 911.739 135.321 893.5 108.5 c 0,8,9 868 71 868 71 903 37 c 0,10,11 933 7 933 7 951 20 c 0,12,13 969 33 969 33 987 57 c 0,14,15 1005 -25 1005 -25 930 -45 c 0,16,17 855 -65 855 -65 813 -4 c 0,18,19 780 44 780 44 770.5 108.5 c 0,20,21 761 173 761 173 745 227 c 0,22,23 716.999 318.002 716.999 318.002 642.5 454 c 0,24,25 568 590 568 590 472 611 c 0,26,27 436 617 436 617 386 598.5 c 0,28,29 337.069 580.396 337.069 580.396 337 505 c 0,30,31 337 368 337 368 381 245 c 0,32,33 425 122 425 122 416 -26 c 0,34,35 411.001 -102.999 411.001 -102.999 341.5 -186 c 0,36,37 272 -269.001 272 -269.001 200 -295 c 0,38,39 147.999 -313 147.999 -313 102 -320.5 c 0,40,41 55.9999 -328 55.9999 -328 -1 -319 c 0,42,43 64 -309 64 -309 138 -277 c 0,44,45 181.001 -256 181.001 -256 248.5 -196.5 c 0,46,47 316.001 -136.999 316.001 -136.999 321 -47 c 0,48,49 324 14 324 14 310 68 c 0,50,51 296 122 296 122 220 121 c 0,52,53 161.371 119.046 161.371 119.046 161 33.5 c 0,54,55 162.001 -52.0001 162.001 -52.0001 222 -74 c 0,56,57 185.921 -72.0319 l 0,58,59 160.223 -67.6052 160.223 -67.6052 146 -54 c 0,60,61 122.998 -31.9977 122.998 -31.9977 112 -13 c 0,62,63 87.1224 30.6532 87.1224 30.6532 87.0314 92.7034 c 0,64,65 86.9318 160.706 86.9318 160.706 116.602 250.804 c 0,66,67 117.536 253.642 117.536 253.642 118.5 256.5 c 0,68,69 177.998 432.992 177.998 432.992 200 529 c 0,70,71 213.298 586.794 213.298 586.794 213.255 619.738 c 0,72,73 213.214 651.206 213.214 651.206 201 660 c 0,74,75 189.636 668.182 189.636 668.182 179.512 668.306 c 0,76,77 171.681 668.402 171.681 668.402 164.591 663.676 c 0,78,79 160.683 661.07 160.683 661.07 157 657 c 0,80,81 138.001 636.001 138.001 636.001 135.5 602 c 0,82,83 136.939 576.347 l 0,84,85 140.286 561.572 140.286 561.572 150 553 c 0,86,87 81 556 81 556 73.5 615.5 c 0,88,89 66 675 66 675 75 710 c 0,90,91 88.9999 771 88.9999 771 129 837.5 c 0,92,93 168.998 903.996 168.998 903.996 185 966 c 0,94,95 209 1063.01 209 1063.01 200 1164 c 0,96,97 187.999 1302.01 187.999 1302.01 165.5 1448 c 0,98,99 161.539 1473.7 161.539 1473.7 161.56 1498.62 c 0,100,101 161.659 1615.3 161.659 1615.3 249 1715 c 0,102,103 332.004 1811.01 332.004 1811.01 498.5 1823.5 c 0,104,105 542.128 1823.16 l 0,106,107 666.124 1810.3 666.124 1810.3 673 1653 c 0,108,109 633 1746 633 1746 526 1740 c 0,110,111 429.612 1734.6 429.612 1734.6 428.979 1640.74 c 0,112,113 428.909 1630.41 428.909 1630.41 430 1619 c 0,114,115 433 1582 433 1582 480 1559.5 c 0,116,117 527.013 1536.99 527.013 1536.99 583 1530.5 c 0,118,119 634.872 1528.19 l 0,120,121 661.46 1529.07 661.46 1529.07 685.5 1534.5 c 0,122,123 732 1545 732 1545 734 1575 c 0,124,125 730.88 1592.46 l 0,126,127 720.662 1615.48 720.662 1615.48 677.121 1615.69 c 0,128,129 669.123 1615.73 669.123 1615.73 660 1615 c 0,130,131 696.965 1635.92 696.965 1635.92 737.127 1635.89 c 0,132,133 779.53 1635.87 779.53 1635.87 825.5 1612.5 c 0,134,135 914.997 1567.01 914.997 1567.01 949 1468 c 0,136,137 974.001 1390 974.001 1390 1011 1367.5 c 0,138,139 1047.99 1345.01 1047.99 1345.01 1111 1288 c 0,140,141 1137.99 1262.01 1137.99 1262.01 1149.5 1203.5 c 0,142,143 1150.82 1178.98 l 0,144,145 1146.53 1137.32 1146.53 1137.32 1095 1110 c 0,146,147 1121.6 1139.56 1121.6 1139.56 1121.65 1165.79 c 0,148,149 1121.68 1183.94 1121.68 1183.94 1109 1200.5 c 0,150,151 1088.51 1227.26 1088.51 1227.26 1070.66 1227.17 c 0,152,153 1061.48 1227.12 1061.48 1227.12 1053 1220 c 0,154,155 1037.03 1206.94 1037.03 1206.94 1036.99 1173.85 c 0,156,157 1036.94 1138.57 1036.94 1138.57 1055 1080.5 c 0,158,159 1089.99 968 1089.99 968 1064 859 c 0,160,161 1038.99 757 1038.99 757 945.5 742.5 c 0,162,163 852 728 852 728 813 764 c 0,164,165 854.001 765 854.001 765 885 788.5 c 0,166,167 916 812 916 812 907 857 c 0,168,169 892 927 892 927 809 855.5 c 0,170,171 726 784 726 784 738 710 c 0,172,173 744 666 744 666 803.5 620 c 0,174,175 863 574 863 574 887 593 c 0,176,177 897.886 601.165 897.886 601.165 898.107 612.144 c 0,178,179 894.131 627.135 l 0,180,181 892.791 629.758 892.791 629.758 891 632.5 c 0,182,183 875 657 875 657 833 657 c 0,184,185 837 687 837 687 889 687 c 0,186,187 941 687 941 687 967 659 c 0,188,189 1000 620 1000 620 991 539 c 0,190,191 982 458 982 458 982 408 c 0,192,193 982 300.001 982 300.001 1059 269.5 c 0,194,195 1135.99 239.001 1135.99 239.001 1191 158 c 0,196,197 1234 94.0096 1234 94.0096 1249 7.5 c 0,198,199 1257.42 -41.0666 1257.42 -41.0666 1257.33 -82.5396 c 0,200,201 1257.26 -114.933 1257.26 -114.933 1252 -143 c 0,202,203 1196.01 -418.993 1196.01 -418.993 985.5 -531 c 0,204,205 775.003 -642.999 775.003 -642.999 531 -677 c 0,206,207 771.001 -609.999 771.001 -609.999 956.5 -466.5 c 0,208,209 1128.86 -333.171 1128.86 -333.171 1128.98 -81.9849 c 0,210,211 1128.99 -62.8342 1128.99 -62.8342 1128 -43 c 0,0,1 596 909 m 0,125,126 622 881 622 881 659.5 894.5 c 0,127,128 697 908 697 908 739 937 c 0,129,130 788 971 788 971 817.5 1042.5 c 0,131,132 846.999 1114 846.999 1114 852.5 1183.5 c 0,133,134 853.032 1236.31 l 0,135,136 850.538 1272.97 850.538 1272.97 839.5 1302.5 c 0,137,138 824.154 1343.56 824.154 1343.56 789.89 1343.68 c 0,139,140 782.845 1343.71 782.845 1343.71 775 1342 c 0,141,142 736 1333 736 1333 732.5 1301.5 c 0,143,144 734.396 1286.82 l 0,145,146 743.097 1264.03 743.097 1264.03 788 1245 c 0,147,148 704 1231.99 704 1231.99 664.5 1276.5 c 0,149,150 625.002 1321 625.002 1321 584 1347 c 0,151,152 543.637 1371.84 543.637 1371.84 506.754 1372.04 c 0,153,154 488.577 1372.14 488.577 1372.14 471.246 1366.26 c 0,155,156 455.786 1361.01 455.786 1361.01 441 1351 c 0,157,158 376.004 1307.01 376.004 1307.01 346 1215 c 0,159,160 331 1171.01 331 1171.01 322 1032 c 0,161,162 313 893 313 893 394 878 c 0,163,164 420.822 875.578 l 0,165,166 464.908 878.309 464.908 878.309 465.305 934.977 c 0,167,168 465.342 940.254 465.342 940.254 465 946 c 0,169,170 461.845 983.859 461.845 983.859 419.498 984.392 c 0,171,172 394 982 l 0,173,174 395.633 992.939 l 0,175,176 401.858 1006 401.858 1006 429 1016 c 0,177,178 449.668 1023.61 449.668 1023.61 464.713 1023.54 c 0,179,180 477.334 1023.47 477.334 1023.47 486 1018 c 0,181,182 561 967 561 967 552.5 965.5 c 0,183,184 544 964 544 964 596 909 c 0,125,126 EndSplineSet KernsSLIF: 89 -143 0 0 121 -130 0 0 83 -208 0 0 71 -104 0 0 116 -286 0 0 84 -313 0 0 86 -22 0 0 87 -150 0 0 EndChar StartChar: S Encoding: 83 83 15 Width: 1364 Flags: HW Fore 598 -86 m 0,0,1 580 -78.0001 580 -78.0001 553.5 -52 c 0,2,3 531.24 -30.1606 531.24 -30.1606 531.206 -9.7312 c 0,4,5 531.2 -5.8401 531.2 -5.8401 532 -2 c 0,6,7 556.993 -17.9955 556.993 -17.9955 582 -36.5 c 0,8,9 594 -45.38 594 -45.38 606 -45.62 c 0,10,11 622 -42.1 l 0,12,13 627 -39.8 627 -39.8 632 -36 c 0,14,15 649.627 -22.339 649.627 -22.339 649.777 -9.26058 c 0,16,17 649.872 -0.893791 649.872 -0.893791 642.815 7.23458 c 0,18,19 635.87 15.2327 635.87 15.2327 622 23 c 0,20,21 572 51 572 51 493 79 c 0,22,-1 335.5 134 l 0,23,24 256.999 161 256.999 161 240 188 c 0,25,26 211.999 230 211.999 230 219 294.5 c 0,27,28 226 359 226 359 283 372 c 0,29,30 283.268 329.648 l 0,31,32 286.957 296.146 286.957 296.146 303 278.5 c 0,33,34 328 251 328 251 403 274 c 0,35,36 445 286 445 286 436.5 339 c 0,37,38 427.999 392.001 427.999 392.001 414 421 c 0,39,40 384 481 384 481 302.5 515.5 c 0,41,42 221.001 550 221.001 550 157 560 c 0,43,44 122.001 565 122.001 565 83.5 557.5 c 0,45,46 45 550 45 550 8 542 c 0,47,48 79 596 79 596 130.5 595.5 c 0,49,50 182.001 595 182.001 595 200 594 c 0,51,52 248 591 248 591 326.5 558 c 0,53,54 405 525 405 525 438 494 c 0,55,56 492.001 441.998 492.001 441.998 546 351 c 0,57,58 599.621 260.638 599.621 260.638 666 208 c 0,59,60 704 176.999 704 176.999 783 160 c 0,61,62 809.78 154.237 809.78 154.237 831.963 154.22 c 0,63,64 875.22 154.187 875.22 154.187 901 176 c 0,65,66 998 261.999 998 261.999 1013 374.5 c 0,67,68 1028 487 1028 487 992 570 c 0,69,70 974 612 974 612 893.5 669 c 0,71,72 813 726 813 726 754 729 c 0,73,74 721.157 727.957 l 0,75,76 684 721.514 684 721.514 684 688 c 0,77,78 684 637 684 637 705 625.5 c 0,79,-1 764 593 l 0,80,81 740.845 584.699 740.845 584.699 718.262 584.796 c 0,82,83 689.155 584.922 689.155 584.922 661 599 c 0,84,85 611 624 611 624 592 672 c 0,86,-1 546.5 782 l 0,87,88 510 870 510 870 460.5 963 c 0,89,90 411.009 1055.98 411.009 1055.98 356.5 1124.5 c 0,91,92 311.764 1180.73 311.764 1180.73 272.75 1180.69 c 0,93,94 264.239 1180.69 264.239 1180.69 256 1178 c 0,95,96 220.5 1166.49 220.5 1166.49 220.442 1108.94 c 0,97,98 220.439 1106.51 220.439 1106.51 220.5 1104 c 0,99,100 222 1041.99 222 1041.99 256 1034 c 0,101,102 231.657 1031.21 l 0,103,104 199.094 1032.81 199.094 1032.81 182 1067 c 0,105,106 159 1113.01 159 1113.01 159 1134 c 0,107,108 159 1199 159 1199 174 1247 c 0,109,110 189 1295 189 1295 213 1343 c 0,111,112 270.997 1462.99 270.997 1462.99 412.5 1566 c 0,113,114 554 1669.01 554 1669.01 611 1704 c 0,115,116 689.946 1749.97 689.946 1749.97 763 1779.5 c 0,117,118 836 1809.01 836 1809.01 1021 1775 c 0,119,120 1123.01 1755.99 1123.01 1755.99 1179 1697 c 0,121,122 1235 1638 1235 1638 1241 1590 c 0,123,124 1170.01 1684.01 1170.01 1684.01 1043 1644 c 0,125,126 1000.99 1630.99 1000.99 1630.99 980 1586.5 c 0,127,128 959 1541.99 959 1541.99 963 1495 c 0,129,130 972.959 1370.96 972.959 1370.96 1086.21 1370.29 c 0,131,132 1098.04 1370.22 1098.04 1370.22 1111 1371.5 c 0,133,134 1247.98 1385 1247.98 1385 1338 1414 c 0,135,136 1283 1338 1283 1338 1180 1315.5 c 0,137,138 1110.41 1300.3 1110.41 1300.3 1067.29 1300.39 c 0,139,140 1046.6 1300.43 1046.6 1300.43 1032 1304 c 0,141,142 943.012 1323.99 943.012 1323.99 902 1366.5 c 0,143,144 861 1408.99 861 1408.99 803 1461 c 0,145,146 761.569 1497.43 761.569 1497.43 707.898 1497.38 c 0,147,148 686.428 1497.36 686.428 1497.36 663 1491.5 c 0,149,150 580.997 1470.99 580.997 1470.99 545 1396 c 0,151,152 519 1340 519 1340 509.5 1233.5 c 0,153,154 508.766 1185.28 l 0,155,156 513.672 1116.51 513.672 1116.51 556 1084 c 0,157,158 651.097 1007.76 651.097 1007.76 701.05 1007.84 c 0,159,160 709.406 1007.85 709.406 1007.85 716.5 1010 c 0,161,162 766 1025 766 1025 839 1016 c 0,163,164 880 1010 880 1010 922 975 c 0,165,166 964 940 964 940 941 883 c 0,167,168 914 952 914 952 883 955.5 c 0,169,170 861.719 954.539 l 0,171,172 845.625 950.75 845.625 950.75 835 937 c 0,173,174 802 895 802 895 901.5 820 c 0,175,176 1001 745 1001 745 1040 733 c 0,177,178 1057.62 726.748 1057.62 726.748 1077.66 726.795 c 0,179,180 1092.88 726.831 1092.88 726.831 1109.5 730.5 c 0,181,182 1124.23 733.752 1124.23 733.752 1124.54 745.418 c 0,183,184 1120.41 761.043 l 0,185,186 1112.25 778.324 1112.25 778.324 1088 805 c 0,187,188 1169.99 797.002 1169.99 797.002 1178.5 720 c 0,189,190 1187.01 643 1187.01 643 1177 597 c 0,191,192 1168 559 1168 559 1154.5 451 c 0,193,194 1150.46 418.662 1150.46 418.662 1150.5 389.819 c 0,195,196 1150.58 322.343 1150.58 322.343 1173 274 c 0,197,198 1198 217.001 1198 217.001 1222.5 204 c 0,199,200 1247.01 190.994 1247.01 190.994 1261 104 c 0,201,202 1265.01 72.0001 1265.01 72.0001 1243 6.5 c 0,203,204 1220.99 -59.0006 1220.99 -59.0006 1146 -68 c 0,205,206 1159.01 -44 1159.01 -44 1198.5 14 c 0,207,208 1211.67 33.3338 1211.67 33.3338 1211.67 47.4445 c 0,209,210 1211.67 75.6671 1211.67 75.6671 1159 83 c 0,211,212 1127.99 86 1127.99 86 1099 43 c 0,213,214 1067 -5 l 0,215,216 1002.99 -102.001 1002.99 -102.001 853 -118.5 c 0,217,218 703 -135 703 -135 598 -86 c 0,0,1 EndSplineSet KernsSLIF: 69 52 0 0 101 39 0 0 83 -117 0 0 116 -182 0 0 84 -65 0 0 EndChar StartChar: T Encoding: 84 84 83 Width: 1699 Flags: MW HStem: 1371 258<399 1229> VStem: 705 217.5<139 1333> Fore 705 139 m 0,0,1 725.954 259.212 725.954 259.212 725.928 369.54 c 0,2,3 725.906 459.29 725.906 459.29 712 542.5 c 0,4,5 681 728 681 728 631 926 c 0,6,7 620 965 620 965 632 1042.5 c 0,8,9 643.026 1113.72 643.026 1113.72 696.275 1114.42 c 0,10,11 700.974 1114.49 700.974 1114.49 706 1114 c 0,12,13 697 1114 697 1114 684.5 1091.5 c 0,14,15 673.19 1071.14 673.19 1071.14 673 1060 c 0,16,17 675.939 1014.92 675.939 1014.92 711.5 1010 c 0,18,19 725.288 1011.93 l 0,20,21 744.108 1020.83 744.108 1020.83 744.233 1066.63 c 0,22,23 744.248 1072.06 744.248 1072.06 744 1078 c 0,24,25 743.001 1100.95 743.001 1100.95 742 1158.5 c 0,26,27 740.999 1216.01 740.999 1216.01 731.5 1272 c 0,28,29 722.001 1327.99 722.001 1327.99 700.5 1366.5 c 0,30,31 679 1405.01 679 1405.01 637 1392 c 0,32,33 622 1387.01 622 1387.01 530 1380 c 0,34,35 438 1372.99 438 1372.99 399 1371 c 0,36,37 356.557 1372.66 l 0,38,39 304.306 1379.74 304.306 1379.74 259.5 1412 c 0,40,41 218.599 1441.45 218.599 1441.45 218.597 1490.6 c 0,42,43 218.596 1516.55 218.596 1516.55 230 1548 c 0,44,45 230 1463.01 230 1463.01 275 1459 c 0,46,47 301.917 1458.98 l 0,48,49 336.366 1464.11 336.366 1464.11 336.475 1500.02 c 0,50,51 336.498 1507.58 336.498 1507.58 335 1516.5 c 0,52,53 324.001 1582 324.001 1582 287 1594 c 0,54,55 194 1622 194 1622 138 1627 c 0,56,57 106.672 1625.72 l 0,58,59 60.8195 1618.5 60.8195 1618.5 2 1581 c 0,60,61 24.9947 1632.99 24.9947 1632.99 83 1653.5 c 0,62,63 133.741 1671.44 133.741 1671.44 175.312 1671.38 c 0,64,65 181.25 1671.37 181.25 1671.37 187 1671 c 0,66,67 392.272 1652.98 392.272 1652.98 641 1626.5 c 0,68,69 817.488 1607.71 817.488 1607.71 957.858 1607.77 c 0,70,71 1015.48 1607.8 1015.48 1607.8 1067 1611 c 0,72,73 1160 1615.99 1160 1615.99 1229 1629 c 0,74,75 1270.13 1636.75 1270.13 1636.75 1317.67 1636.68 c 0,76,77 1349.86 1636.64 1349.86 1636.64 1385 1633 c 0,78,79 1485.29 1621 1485.29 1621 1485.65 1571.16 c 0,80,81 1485.72 1562.86 1485.72 1562.86 1483 1553.5 c 0,82,83 1467.25 1499.22 1467.25 1499.22 1464 1501 c 0,84,85 1459.01 1586.99 1459.01 1586.99 1387.5 1573 c 0,86,87 1316 1559.01 1316 1559.01 1307 1530 c 0,88,89 1302.26 1515.52 1302.26 1515.52 1302.17 1502.75 c 0,90,91 1302.07 1489.7 1302.07 1489.7 1306.81 1478.42 c 0,92,93 1315.06 1458.77 1315.06 1458.77 1338 1444.5 c 0,94,95 1387.01 1414.01 1387.01 1414.01 1450.5 1414.5 c 0,96,97 1513.99 1414.99 1513.99 1414.99 1566 1449.5 c 0,98,99 1608.59 1477.75 1608.59 1477.75 1608.92 1533.85 c 0,100,101 1608.99 1546.24 1608.99 1546.24 1607 1560 c 0,102,103 1611.51 1543.45 1611.51 1543.45 1611.5 1523.93 c 0,104,105 1611.47 1491.55 1611.47 1491.55 1599 1451 c 0,106,107 1579.01 1386.01 1579.01 1386.01 1484 1358 c 0,108,109 1393.64 1330.95 1393.64 1330.95 1315.57 1330.98 c 0,110,111 1249.36 1331 1249.36 1331 1192 1350.5 c 0,112,113 1067.01 1392.99 1067.01 1392.99 968 1394 c 0,114,115 923 1394 923 1394 922.5 1333 c 0,116,117 925.664 1227.25 l 0,118,119 926.274 1218.14 926.274 1218.14 927 1209 c 0,120,121 927 1208.01 927 1208.01 936 1130.5 c 0,122,123 944.999 1053.01 944.999 1053.01 1029 941 c 0,124,125 1068 889 1068 889 1047 764.5 c 0,126,127 1026 640 1026 640 928 653 c 0,128,129 992.426 653 992.426 653 992.628 741.926 c 0,130,131 992.648 751 992.648 751 992 761 c 0,132,133 985 869 985 869 935 827 c 0,134,135 899 797 899 797 892.5 771.5 c 0,136,137 886 746 886 746 891 671 c 0,138,139 901.999 494.004 901.999 494.004 941.5 392.5 c 0,140,141 975.036 306.325 975.036 306.325 975.054 132.577 c 0,142,143 975.057 101.673 975.057 101.673 974 68 c 0,144,145 968 -93.9994 968 -93.9994 861 -122 c 0,146,147 913.644 -62.4528 913.644 -62.4528 913.78 -24.1307 c 0,148,149 913.801 -18.048 913.801 -18.048 912.5 -12.5 c 0,150,151 903.001 27.9999 903.001 27.9999 869.5 34.5 c 0,152,153 836 41 836 41 801.5 11 c 0,154,155 767 -19 767 -19 779 -94 c 0,156,157 806 -273 806 -273 858.5 -319.5 c 0,158,159 911 -366 911 -366 944 -399 c 0,160,161 801 -369 801 -369 740.5 -184 c 0,162,163 697.607 -52.8381 697.607 -52.8381 697.69 54.6971 c 0,164,165 697.724 98.8389 697.724 98.8389 705 139 c 0,0,1 EndSplineSet KernsSLIF: 322 -391 0 0 321 -469 0 0 85 -117 0 0 117 -143 0 0 104 -234 0 0 72 -156 0 0 45 -300 0 0 46 -260 0 0 44 -260 0 0 243 -300 0 0 211 -208 0 0 115 -286 0 0 83 -260 0 0 111 -208 0 0 79 -143 0 0 65 -512 0 0 97 -512 0 0 EndChar StartChar: U Encoding: 85 85 68 Width: 1411 Flags: W Fore 46 241 m 0,0,1 -23 339 -23 339 50.5 416.5 c 0,2,3 124 494 124 494 164 494 c 0,4,5 118.001 458.001 118.001 458.001 103.5 368.5 c 0,6,7 88.9999 279 88.9999 279 192 310 c 0,8,9 222 319 222 319 232 422 c 0,10,11 237.34 477.005 237.34 477.005 237.262 527.732 c 0,12,13 237.194 571.994 237.194 571.994 233 613 c 0,14,15 224 705 224 705 177.5 757 c 0,16,17 164.022 772.073 164.022 772.073 155.879 772.61 c 0,18,19 149.279 769.765 l 0,20,21 143.401 762.964 143.401 762.964 143.449 740.018 c 0,22,23 148 688 l 0,24,25 64 754 64 754 96 903 c 0,26,27 119.323 1011.6 119.323 1011.6 119.273 1144.11 c 0,28,29 119.254 1193.4 119.254 1193.4 116 1246 c 0,30,31 113.225 1341.01 l 0,32,33 115.265 1478.14 115.265 1478.14 156 1561.5 c 0,34,35 209.993 1671.99 209.993 1671.99 280 1722.5 c 0,36,37 350 1773.01 350 1773.01 410 1781 c 0,38,39 469.016 1789 l 0,40,41 469 1789 l 0,42,43 388 1774 388 1774 314.5 1694.5 c 0,44,45 240.996 1615 240.996 1615 209 1527 c 0,46,47 191.706 1479.44 191.706 1479.44 191.644 1438.16 c 0,48,49 191.592 1403.06 191.592 1403.06 204 1372.5 c 0,50,51 226.472 1317.16 226.472 1317.16 314.735 1316.87 c 0,52,53 332.531 1316.82 332.531 1316.82 353 1319 c 0,54,55 435 1328 435 1328 409.5 1419.5 c 0,56,57 386.796 1500.97 386.796 1500.97 317.708 1501.18 c 0,58,59 309.205 1501.2 309.205 1501.2 300 1500 c 0,60,61 328.11 1504.8 328.11 1504.8 351.378 1504.8 c 0,62,63 458.89 1504.76 458.89 1504.76 463 1402 c 0,64,65 468 1277.01 468 1277.01 444 1246 c 0,66,67 350.001 1126 350.001 1126 344.5 922 c 0,68,69 339 718 339 718 348 571 c 0,70,71 354 470.999 354 470.999 395.5 365 c 0,72,73 437 259 437 259 527 295 c 0,74,75 563 309.063 563 309.063 562.93 332.617 c 0,76,77 562.875 350.937 562.875 350.937 541 375 c 0,78,79 491 430 491 430 466 364 c 0,80,81 451 427 451 427 493.5 441.5 c 0,82,83 536 456 536 456 560 449 c 0,84,85 659 416 659 416 654 337 c 0,86,87 649.001 258.004 649.001 258.004 643 233 c 0,88,89 640.623 210.278 l 0,90,91 643.022 170.739 643.022 170.739 693.5 141 c 0,92,93 710.928 130.733 710.928 130.733 732.042 130.759 c 0,94,95 789.073 130.83 789.073 130.83 873 206 c 0,96,97 891 222.001 891 222.001 931 287.5 c 0,98,99 970.999 352.998 970.999 352.998 997.5 431 c 0,100,101 1024.01 509 1024.01 509 1017 580 c 0,102,103 1009.99 651.002 1009.99 651.002 934 679 c 0,104,105 883 697 883 697 885.5 635.5 c 0,106,107 888 574 888 574 932 546 c 0,108,109 829 595 829 595 823 689 c 0,110,111 817 783 817 783 850.5 898.5 c 0,112,113 884.003 1014.01 884.003 1014.01 929.5 1137.5 c 0,114,115 975 1261 975 1261 975 1369 c 0,116,117 975 1384.99 975 1384.99 996.5 1507.5 c 0,118,119 1014.74 1611.48 1014.74 1611.48 1106.84 1612.07 c 0,120,121 1142 1609 l 0,122,123 1114 1609 1114 1609 1084 1578 c 0,124,125 1065.83 1559.22 1065.83 1559.22 1065.63 1537.15 c 0,126,127 1065.54 1526.11 1065.54 1526.11 1069.93 1514.25 c 0,128,129 1071.26 1510.66 1071.26 1510.66 1073 1507 c 0,130,131 1097.08 1458.24 1097.08 1458.24 1127.69 1458.04 c 0,132,133 1143.25 1457.94 1143.25 1457.94 1160.49 1470.39 c 0,134,135 1165.67 1474.13 1165.67 1474.13 1171 1479 c 0,136,137 1199.69 1504.1 1199.69 1504.1 1199.8 1560.46 c 0,138,139 1199.87 1598.4 1199.87 1598.4 1187 1650.5 c 0,140,141 1160.61 1757.3 1160.61 1757.3 1045.79 1757.66 c 0,142,143 1021.39 1757.73 1021.39 1757.73 993 1753 c 0,144,145 1034.65 1774 1034.65 1774 1074.09 1774.11 c 0,146,147 1108.32 1774.21 1108.32 1774.21 1140.89 1758.58 c 0,148,149 1178.03 1740.77 1178.03 1740.77 1213 1702.5 c 0,150,151 1266.02 1644.49 1266.02 1644.49 1266.13 1556.31 c 0,152,153 1266.23 1476.51 1266.23 1476.51 1223 1372 c 0,154,155 1187.02 1285.05 1187.02 1285.05 1145.5 1165.5 c 0,156,157 1104 1046.01 1104 1046.01 1101 977 c 0,158,159 1102.08 933.908 l 0,160,161 1108.46 884.297 1108.46 884.297 1140.5 864.5 c 0,162,163 1185.01 837 1185.01 837 1224.5 853.5 c 0,164,165 1264.01 870.005 1264.01 870.005 1270.5 923 c 0,166,167 1269.24 946.944 l 0,168,169 1259.55 992.592 1259.55 992.592 1196 1053 c 0,170,171 1338.99 1039.01 1338.99 1039.01 1341.5 918 c 0,172,173 1338.83 854.387 l 0,174,175 1329.25 760.063 1329.25 760.063 1286.5 653 c 0,176,177 1229.01 509 1229.01 509 1151.5 384.5 c 0,178,179 1073.98 259.972 1073.98 259.972 1059 241 c 0,180,181 1020.99 192.985 1020.99 192.985 991 128 c 0,182,183 961 63.0001 961 63.0001 1048 81 c 0,184,185 1093 90 1093 90 1088.5 126 c 0,186,187 1084 161.999 1084 161.999 1069 208 c 0,188,189 1143.1 168.331 1143.1 168.331 1143.53 96.7311 c 0,190,191 1139.54 60.7425 l 0,192,193 1137.87 53.0215 1137.87 53.0215 1135.5 45 c 0,194,195 1102.99 -65.0001 1102.99 -65.0001 1012 -66 c 0,196,197 578 -72 578 -72 336.5 49.5 c 0,198,199 94.9995 171 94.9995 171 46 241 c 0,0,1 EndSplineSet KernsSLIF: 116 -78 0 0 84 -65 0 0 88 -130 0 0 EndChar StartChar: V Encoding: 86 86 69 Width: 1266 Flags: W Fore 346 1049 m 1,0,1 445 1021 445 1021 449 940.5 c 0,2,3 450.299 842.065 l 0,4,5 449.624 820.845 449.624 820.845 448 802 c 0,6,7 442 735 442 735 432.5 682.5 c 0,8,9 431.139 654.738 l 0,10,11 434.544 623.651 434.544 623.651 463 608 c 0,12,13 498 588 498 588 514.5 635 c 0,14,15 531 682 531 682 536 749 c 0,16,17 540.231 805.7 540.231 805.7 540.166 859.521 c 0,18,19 540.154 869.308 540.154 869.308 540 879 c 0,20,21 539 942 539 942 539 954 c 0,22,23 539 1034.01 539 1034.01 544.5 1098.5 c 0,24,25 550 1163 550 1163 574 1239 c 0,26,27 590.997 1292.99 590.997 1292.99 629.5 1337.5 c 0,28,29 667.985 1381.99 667.985 1381.99 699 1398 c 0,30,31 713.755 1401.18 l 0,32,33 723.716 1400.86 723.716 1400.86 734 1394 c 0,34,35 752 1382 752 1382 752 1369 c 0,36,37 698 1397.99 698 1397.99 700 1322.5 c 0,38,39 702 1247 702 1247 733 1247 c 0,40,41 765.998 1247 765.998 1247 779.5 1279 c 0,42,43 793 1310.99 793 1310.99 793 1337 c 0,44,45 793 1433 793 1433 808.5 1505 c 0,46,47 823.997 1576.99 823.997 1576.99 850 1667 c 0,48,49 857.997 1696.99 857.997 1696.99 884.5 1729.5 c 0,50,51 911.003 1762.01 911.003 1762.01 927 1776 c 0,52,53 956 1801.01 956 1801.01 1012.5 1800 c 0,54,55 1069 1798.99 1069 1798.99 1076 1765 c 0,56,57 1057.04 1782.69 1057.04 1782.69 1033.2 1782.91 c 0,58,59 1009.58 1779.2 l 0,60,61 986.018 1771.95 986.018 1771.95 958.5 1750.5 c 0,62,63 915 1716.6 915 1716.6 914.88 1673.88 c 0,64,65 914.8 1645.4 914.8 1645.4 934 1613 c 0,66,67 951.778 1582.33 951.778 1582.33 978.643 1582.38 c 0,68,69 1012.23 1582.44 1012.23 1582.44 1060 1630.5 c 0,70,71 1146 1717.01 1146 1717.01 1158 1756 c 0,72,73 1179.24 1823.78 1179.24 1823.78 1179.24 1871.65 c 0,74,75 1179.24 1929.72 1179.24 1929.72 1148 1958.5 c 0,76,77 1091 2011 1091 2011 1074 2028 c 0,78,79 1142.02 1994.99 1142.02 1994.99 1174 1955 c 0,80,81 1206 1914.99 1206 1914.99 1206 1828 c 0,82,83 1206 1746.01 1206 1746.01 1164 1676 c 0,84,85 1122 1605.99 1122 1605.99 1076 1552 c 0,86,87 964.997 1423 964.997 1423 911 1267.5 c 0,88,89 857 1111.99 857 1111.99 854 945 c 0,90,91 853 915 853 915 856 832 c 0,92,93 859 749 859 749 852.5 655 c 0,94,95 846.001 561.005 846.001 561.005 824.5 478 c 0,96,97 803 395 803 395 754 365 c 0,98,99 793 446 793 446 792.5 514 c 0,100,101 792 582 792 582 750 613 c 0,102,103 675 665 675 665 637 563 c 0,104,105 599 461 599 461 589 409 c 0,106,107 571 325 571 325 559 244.5 c 0,108,109 547 163.999 547 163.999 642 168 c 0,110,111 651 168 651 168 666 188.5 c 0,112,113 681 209.001 681 209.001 675 238 c 0,114,115 666 281 666 281 604 292 c 0,116,117 629.82 313.633 629.82 313.633 653.449 313.839 c 0,118,119 663.68 313.928 663.68 313.928 673.5 310 c 0,120,121 706.001 296.999 706.001 296.999 724 266 c 0,122,123 744.16 227.514 744.16 227.514 744.167 188.094 c 0,124,125 744.171 162.987 744.171 162.987 736 137.5 c 0,126,127 715 71.9999 715 71.9999 681 52 c 0,128,-1 575 -7.5 l 0,129,130 530 -32 530 -32 530 -128 c 0,131,132 530 -264.001 530 -264.001 624.5 -318.5 c 0,133,134 719 -373 719 -373 839 -367 c 0,135,136 744 -397 744 -397 654.5 -374.5 c 0,137,138 565 -352 565 -352 530 -313 c 0,139,140 412 -179.999 412 -179.999 410.5 -4 c 0,141,142 409 171.999 409 171.999 320 295 c 0,143,144 304 316 304 316 265 333 c 0,145,146 226 350 226 350 211 297 c 0,147,148 185.001 208.001 185.001 208.001 274 186 c 0,149,150 239.736 185.285 l 0,151,152 218.405 187.152 218.405 187.152 195 194.5 c 0,153,154 152.001 208 152.001 208 124 277 c 0,155,156 106.733 319 106.733 319 106.78 364.267 c 0,157,158 106.834 416 106.834 416 129.5 472 c 0,159,160 172 577.001 172 577.001 172 669 c 0,161,162 172 813.002 172 813.002 124.5 942.5 c 0,163,164 76.9999 1071.99 76.9999 1071.99 48 1208 c 0,165,166 39 1248.01 39 1248.01 22.5 1335.5 c 0,167,168 8.49056 1409.79 8.49056 1409.79 8.53863 1491.66 c 0,169,170 8.54717 1506.21 8.54717 1506.21 9 1521 c 0,171,172 10.9999 1588.01 10.9999 1588.01 45 1680 c 0,173,174 79.004 1772.01 79.004 1772.01 133 1780 c 0,175,176 110.001 1747 110.001 1747 92.5 1700.5 c 0,177,178 78.865 1664.27 78.865 1664.27 78.8889 1635.02 c 0,179,180 78.8957 1626.73 78.8957 1626.73 80 1619 c 0,181,182 92.9678 1535.64 92.9678 1535.64 186.577 1535.49 c 0,183,184 194.034 1535.48 194.034 1535.48 202 1536 c 0,185,186 257 1539 257 1539 266 1632.5 c 0,187,188 270.261 1713.86 l 0,189,190 270.153 1752.18 270.153 1752.18 265 1780 c 0,191,192 258 1814.01 258 1814.01 223 1843 c 0,193,194 187.993 1872 187.993 1872 152 1878 c 0,195,196 193.862 1879.28 l 0,197,198 284.127 1872.85 284.127 1872.85 312.5 1779.5 c 0,199,200 347 1665.99 347 1665.99 338 1592 c 0,201,202 329.999 1541.99 329.999 1541.99 303.5 1446 c 0,203,204 277.002 1350.01 277.002 1350.01 267 1293 c 0,205,206 263.07 1274.13 263.07 1274.13 263.156 1218.51 c 0,207,208 263.179 1203.37 263.179 1203.37 263.5 1185.5 c 0,209,210 265 1102.01 265 1102.01 276 1018.5 c 0,211,212 286.999 935.003 286.999 935.003 310 881 c 0,213,214 333 827 333 827 372 863 c 0,215,216 415 902 415 902 399 960.5 c 0,217,218 382.999 1019 382.999 1019 346 1049 c 1,0,1 EndSplineSet KernsSLIF: 214 -193 0 0 246 -224 0 0 111 -195 0 0 79 -156 0 0 45 -208 0 0 46 -247 0 0 44 -247 0 0 73 -104 0 0 105 -182 0 0 97 -321 0 0 65 -270 0 0 EndChar StartChar: W Encoding: 87 87 11 Width: 2018 Flags: HW Fore 1198 -258 m 0,0,1 1141 -241.001 1141 -241.001 1105 -191 c 0,2,3 1068.99 -140.988 1068.99 -140.988 1055 -100 c 0,4,5 1028 -25 1028 -25 1011.5 75 c 0,6,7 995 175 995 175 962 235 c 0,8,9 914 318 914 318 882 324 c 0,10,11 850 330 850 330 808 271 c 0,12,13 777.835 228.58 777.835 228.58 777.883 126.621 c 0,14,15 777.885 120.42 777.885 120.42 778 114 c 0,16,17 780 1.99995 780 1.99995 814 -37 c 0,18,19 839 -67 839 -67 899 -79 c 0,20,21 848.175 -107.756 848.175 -107.756 793.772 -107.666 c 0,22,23 766.825 -107.622 766.825 -107.622 739 -100.5 c 0,24,25 655 -79.0001 655 -79.0001 620 -45 c 0,26,27 586 -12 586 -12 561.5 25.5 c 0,28,29 537 63 537 63 513 105 c 0,30,31 485.998 152.002 485.998 152.002 472.5 171.5 c 0,32,33 459 190.999 459 190.999 402 210 c 0,34,35 384.54 209.64 l 0,36,37 369.5 205 l 0,38,39 349.001 197.001 349.001 197.001 345 185 c 0,40,41 321 119 321 119 383 104 c 0,42,43 344 84.9999 344 84.9999 314 110 c 0,44,45 284 135.001 284 135.001 281 163 c 0,46,47 273.557 211.38 273.557 211.38 273.604 252.976 c 0,48,49 273.646 289.62 273.646 289.62 279.5 321 c 0,50,51 292 388 292 388 314 462 c 0,52,53 357.094 610.435 357.094 610.435 357.085 756.122 c 0,54,55 357.085 762.561 357.085 762.561 357 769 c 0,56,57 355 920.999 355 920.999 289 1064 c 0,58,59 254.025 1136.95 254.025 1136.95 214 1204 c 0,60,61 174 1271 174 1271 171 1359 c 0,62,63 171.789 1419.71 l 0,64,65 181.716 1538.68 181.716 1538.68 263 1546 c 0,66,67 291.179 1544.62 l 0,68,69 330 1536.43 330 1536.43 330 1490 c 0,70,71 306 1512.01 306 1512.01 271.5 1497.5 c 0,72,73 249.617 1488.3 249.617 1488.3 249.661 1455.57 c 0,74,75 249.686 1436.7 249.686 1436.7 257 1410 c 0,76,77 266.64 1374.41 266.64 1374.41 302.395 1374 c 0,78,79 330.5 1378 l 0,80,81 391 1394.01 391 1394.01 391 1442 c 0,82,83 389.999 1546 389.999 1546 327 1586.5 c 0,84,85 264 1627 264 1627 190 1627 c 0,86,87 89.9968 1627 89.9968 1627 57 1575 c 0,88,89 24 1522.99 24 1522.99 9 1497 c 0,90,91 19 1585.99 19 1585.99 67 1623 c 0,92,93 114.993 1660 114.993 1660 196 1666 c 0,94,95 240.049 1665.23 l 0,96,97 302.45 1658.55 302.45 1658.55 356 1619.5 c 0,98,99 428 1567 428 1567 456 1513 c 0,100,101 534 1360 534 1360 502 1271.5 c 0,102,103 470 1183 470 1183 460 1017 c 0,104,105 457 966 457 966 456 896.5 c 0,106,107 455 827 455 827 489 788 c 0,108,109 521 752 521 752 541.5 763.5 c 0,110,111 560.877 774.37 560.877 774.37 561 800 c 0,112,113 559.001 821.999 559.001 821.999 553.5 841 c 0,114,115 548 860 548 860 494 864 c 0,116,117 527.206 880.794 527.206 880.794 554.148 880.98 c 0,118,119 568.225 881.078 568.225 881.078 580.592 876.641 c 0,120,121 606.569 867.323 606.569 867.323 625 838 c 0,122,123 648.561 798.453 648.561 798.453 648.756 767.399 c 0,124,125 648.793 761.549 648.793 761.549 648 756 c 0,126,127 643 721 643 721 637 688 c 0,128,129 618 590 618 590 617.5 538 c 0,130,131 617 486 617 486 659 456 c 0,132,133 686 435 686 435 741 542.5 c 0,134,135 796 650 796 650 820 704 c 0,136,137 846 761 846 761 873 797.5 c 0,138,139 900 834 900 834 984 873 c 0,140,141 934 801 934 801 920.5 759 c 0,142,143 907 717 907 717 919 639 c 0,144,145 925 592.001 925 592.001 942 552.5 c 0,146,147 959 513 959 513 999 509 c 0,148,149 1027.6 508.97 l 0,150,151 1090.09 517.856 1090.09 517.856 1127 608.5 c 0,152,153 1172 719 1172 719 1178 779 c 0,154,155 1179.01 791 1179.01 791 1199 889 c 0,156,157 1218.99 987 1218.99 987 1175 987 c 0,158,159 1148 987 1148 987 1139 958.5 c 0,160,161 1130 930 1130 930 1151 911 c 0,162,163 1104.99 919 1104.99 919 1104.5 966 c 0,164,165 1104.01 1013 1104.01 1013 1115 1031 c 0,166,167 1151 1088 1151 1088 1203 1129.5 c 0,168,169 1255.02 1171.01 1255.02 1171.01 1287 1210 c 0,170,171 1335 1270 1335 1270 1348.5 1294 c 0,172,173 1362 1318 1362 1318 1383 1381 c 0,174,175 1399.89 1431.69 1399.89 1431.69 1439.5 1540 c 0,176,177 1478.99 1647.99 1478.99 1647.99 1529 1698 c 0,178,179 1572.99 1741.99 1572.99 1741.99 1607 1759.5 c 0,180,181 1627.24 1769.92 1627.24 1769.92 1653.15 1769.88 c 0,182,183 1670.76 1769.86 1670.76 1769.86 1691 1765 c 0,184,-1 1607 1716.5 l 0,185,186 1567 1694 1567 1694 1543 1631 c 0,187,188 1528.58 1595.35 1528.58 1595.35 1528.56 1547.03 c 0,189,190 1528.55 1531.66 1528.55 1531.66 1530 1515 c 0,191,192 1536 1446 1536 1446 1594 1440 c 0,193,194 1663 1432.01 1663 1432.01 1721.5 1474.5 c 0,195,196 1779.99 1516.99 1779.99 1516.99 1808 1580 c 0,197,198 1825.98 1621.95 1825.98 1621.95 1847.5 1662.5 c 0,199,200 1868.99 1703 1868.99 1703 1864 1805 c 0,201,202 1858 1913 1858 1913 1703 1994 c 0,203,204 1884.99 1955 1884.99 1955 1910 1785 c 0,205,206 1914.52 1754.1 1914.52 1754.1 1914.43 1721.43 c 0,207,208 1914.28 1667.39 1914.28 1667.39 1901.5 1608.5 c 0,209,210 1881 1514.01 1881 1514.01 1819 1444 c 0,211,212 1731 1344 1731 1344 1622 1262 c 0,213,214 1579.99 1230 1579.99 1230 1512 1140.5 c 0,215,216 1444.01 1050.99 1444.01 1050.99 1491 995 c 0,217,218 1503 980 1503 980 1533 987 c 0,219,220 1562.99 993.999 1562.99 993.999 1570 1021 c 0,221,222 1575.85 1043.49 1575.85 1043.49 1575.93 1057.9 c 0,223,224 1576.02 1075.5 1576.02 1075.5 1567.5 1081 c 0,225,-1 1530 1106 l 0,226,227 1561.81 1109.98 l 0,228,229 1606.38 1109.6 1606.38 1109.6 1617 1067.5 c 0,230,231 1624.51 1037.74 1624.51 1037.74 1624.54 1010.13 c 0,232,233 1624.56 986.259 1624.56 986.259 1619 964 c 0,234,235 1601 892 1601 892 1535 861 c 0,236,237 1469.01 830.005 1469.01 830.005 1417 786 c 0,238,239 1355.99 735 1355.99 735 1307.5 681 c 0,240,241 1259 626.993 1259 626.993 1247 548 c 0,242,243 1240.43 507.416 1240.43 507.416 1240.43 473.856 c 0,244,245 1240.44 420.581 1240.44 420.581 1257 385 c 0,246,-1 1322 239 l 0,247,248 1349.01 173.984 1349.01 173.984 1357 99.5 c 0,249,250 1356.76 63.9884 l 0,251,252 1349.8 2.65468 1349.8 2.65468 1299 -72 c 0,253,254 1299 -39.0261 1299 -39.0261 1313 33 c 0,255,256 1326.99 105 1326.99 105 1259 147 c 0,257,258 1243.74 155.902 1243.74 155.902 1229.44 156.01 c 0,259,260 1217.62 156.1 1217.62 156.1 1206.45 150.18 c 0,261,262 1188.64 140.736 1188.64 140.736 1172.5 116 c 0,263,264 1134 57.0082 1134 57.0082 1131 -57 c 0,265,266 1133.57 -92.4594 l 0,267,268 1139.35 -124.071 1139.35 -124.071 1157.5 -157.5 c 0,269,270 1186 -210.003 1186 -210.003 1232 -232 c 0,271,272 1277 -253.001 1277 -253.001 1373 -255 c 0,273,274 1341.01 -271 1341.01 -271 1289 -270 c 0,275,276 1237 -269 1237 -269 1198 -258 c 0,0,1 EndSplineSet KernsSLIF: 214 -180 0 0 246 -212 0 0 322 -469 0 0 321 -508 0 0 72 -260 0 0 104 -300 0 0 45 -234 0 0 46 -326 0 0 44 -364 0 0 115 -326 0 0 83 -260 0 0 105 -182 0 0 73 -91 0 0 243 -313 0 0 211 -365 0 0 111 -273 0 0 79 -221 0 0 196 -313 0 0 228 -270 0 0 261 -342 0 0 260 -342 0 0 97 -449 0 0 65 -398 0 0 EndChar StartChar: X Encoding: 88 88 29 Width: 1415 Flags: HW Fore 760 1490 m 0,0,1 714 1479.88 714 1479.88 713.706 1446.06 c 0,2,3 714 1440 l 0,4,5 718 1402.01 718 1402.01 718 1401 c 0,6,7 668 1425 668 1425 677 1494 c 0,8,9 684.998 1557.99 684.998 1557.99 760 1577 c 0,10,11 801.957 1587.98 801.957 1587.98 857.5 1609 c 0,12,13 913 1630 913 1630 949 1654 c 0,14,15 964.003 1663 964.003 1663 980 1697 c 0,16,17 995.999 1731 995.999 1731 1000 1751 c 0,18,19 1004.07 1771.56 1004.07 1771.56 1004.04 1788.43 c 0,20,21 1003.92 1854.44 1003.92 1854.44 941 1864 c 0,22,23 966.36 1866.94 l 0,24,25 988.032 1865.85 988.032 1865.85 1004.5 1851 c 0,26,27 1030 1828.01 1030 1828.01 1030 1798 c 0,28,29 1030 1772.94 1030 1772.94 1023 1683.5 c 0,30,31 1021.96 1629.04 l 0,32,33 1024.61 1594 1024.61 1594 1039 1594 c 0,34,35 1071 1594 1071 1594 1092 1637 c 0,36,37 1115.99 1692.98 1115.99 1692.98 1117 1744.5 c 0,38,39 1118.01 1796.02 1118.01 1796.02 1140 1845 c 0,40,41 1161.01 1890.01 1161.01 1890.01 1202.5 1920.5 c 0,42,43 1237.05 1945.88 1237.05 1945.88 1267.77 1945.99 c 0,44,45 1273.96 1946.01 1273.96 1946.01 1280 1945 c 0,46,47 1246.99 1934 1246.99 1934 1221 1903 c 0,48,49 1195 1871.99 1195 1871.99 1195 1851 c 0,50,51 1195 1802 1195 1802 1249 1802 c 0,52,53 1272 1802 1272 1802 1280.5 1824 c 0,54,55 1285.39 1836.65 1285.39 1836.65 1285.48 1847.98 c 0,56,57 1285.55 1856.35 1285.55 1856.35 1283 1864 c 0,58,59 1322 1859.99 1322 1859.99 1322 1811.5 c 0,60,61 1322 1762.99 1322 1762.99 1310 1743 c 0,62,63 1292 1713 1292 1713 1253 1672.5 c 0,64,65 1213.92 1631.92 1213.92 1631.92 1189 1609 c 0,66,-1 1070 1500 l 0,67,68 975.004 1414 975.004 1414 945 1346 c 0,69,70 928.994 1309.99 928.994 1309.99 891 1189 c 0,71,72 874.988 1138.01 874.988 1138.01 874.956 1101.76 c 0,73,74 874.912 1051.98 874.912 1051.98 905 1030 c 0,75,76 919.654 1018.16 919.654 1018.16 935.262 1018.24 c 0,77,78 947.346 1018.3 947.346 1018.3 960 1025.5 c 0,79,80 989.007 1042 989.007 1042 1001 1058 c 0,81,82 1029.99 1095.99 1029.99 1095.99 999.5 1122.5 c 0,83,84 969 1149.01 969 1149.01 947 1151 c 0,85,86 966.65 1157.25 966.65 1157.25 984.599 1157.22 c 0,87,88 1006.85 1157.19 1006.85 1157.19 1026.5 1147.5 c 0,89,90 1062 1130 1062 1130 1068 1110 c 0,91,92 1076.18 1081.05 1076.18 1081.05 1076.24 1057.88 c 0,93,94 1076.34 1019.14 1076.34 1019.14 1053.71 996.609 c 0,95,96 1046.89 989.817 1046.89 989.817 1038 984.5 c 0,97,98 981.995 950.994 981.995 950.994 928 898 c 0,99,100 874 844 874 844 871.5 803 c 0,101,102 869 762 869 762 875 720 c 0,103,104 884 659 884 659 935 574.5 c 0,105,106 986.02 489.967 986.02 489.967 1051.5 404.5 c 0,107,-1 1181 243 l 0,108,-1 1280 125 l 0,109,110 1306.99 91.0083 1306.99 91.0083 1326 11.5 c 0,111,112 1345.01 -68 1345.01 -68 1302 -109 c 0,113,114 1315.29 -83.1647 1315.29 -83.1647 1315.22 -54.808 c 0,115,116 1315.11 -6.33775 1315.11 -6.33775 1276 49.5 c 0,117,118 1214.01 137.998 1214.01 137.998 1155 149 c 0,119,120 1125.06 150.232 l 0,121,122 1088.17 146.304 1088.17 146.304 1077.5 111 c 0,123,124 1070.42 87.5735 1070.42 87.5735 1070.37 67.0018 c 0,125,126 1070.32 45.43 1070.32 45.43 1078 27 c 0,127,128 1121.01 -73 1121.01 -73 1192 -106.5 c 0,129,130 1263 -140 1263 -140 1331 -140.5 c 0,131,132 1395.74 -137.331 l 0,133,134 1424.13 -134.077 1424.13 -134.077 1448 -127.5 c 0,135,136 1479 -118.959 1479 -118.959 1490.39 -119.024 c 0,137,138 1497 -119.061 1497 -119.061 1497 -122 c 0,139,140 1387.98 -157.22 1387.98 -157.22 1301.63 -157.28 c 0,141,142 1233.52 -157.327 1233.52 -157.327 1179.5 -135.5 c 0,143,144 1057 -86.0024 1057 -86.0024 1009 38 c 0,145,146 980.998 110.003 980.998 110.003 940 229.5 c 0,147,148 899 349 899 349 868 352 c 0,149,150 804 358 804 358 804 299 c 0,151,152 804 263 804 263 821.5 256.5 c 0,153,154 833.616 252 833.616 252 844.533 252.053 c 0,155,156 849.385 252.077 849.385 252.077 854 253 c 0,157,158 835.564 229.6 835.564 229.6 815.619 229.581 c 0,159,160 807.436 229.573 807.436 229.573 799 233.5 c 0,161,162 770 247.001 770 247.001 758 272 c 0,163,164 731.999 325.002 731.999 325.002 727 386 c 0,165,166 722 447 722 447 722 518 c 0,167,168 722 542 722 542 711 588.5 c 0,169,170 700 635 700 635 667 639 c 0,171,172 590 648 590 648 536.5 513 c 0,173,174 499.347 419.251 499.347 419.251 499.087 386.264 c 0,175,176 498.992 374.272 498.992 374.272 506 369 c 0,177,178 527 361 527 361 548 384 c 0,179,180 572 408 572 408 537 446 c 0,181,182 558 446 558 446 574.5 422.5 c 0,183,184 591 399 591 399 591 378 c 0,185,186 591 338 591 338 558.5 289 c 0,187,188 526 240 526 240 485 229 c 0,189,190 431 215.001 431 215.001 385 185.5 c 0,191,192 339 155.999 339 155.999 327 100 c 0,193,194 313.005 37.0199 313.005 37.0199 297.5 -20 c 0,195,196 282 -77 282 -77 255 -114 c 0,197,198 243 -129 243 -129 201.5 -141 c 0,199,200 179.007 -147.504 179.007 -147.504 161.656 -147.545 c 0,201,202 146.992 -147.58 146.992 -147.58 136 -143 c 0,203,204 195 -134 195 -134 224 -81 c 0,205,206 242.001 -46.999 242.001 -46.999 242.5 20 c 0,207,208 242.999 87.0001 242.999 87.0001 187 87 c 0,209,210 124 87 124 87 90 12.5 c 0,211,212 55.9999 -62 55.9999 -62 56 -116 c 0,213,214 56 -207.001 56 -207.001 149 -254 c 0,215,216 80 -254 80 -254 48.5 -209 c 0,217,218 17 -164 17 -164 14 -116 c 0,219,220 3 2.00005 3 2.00005 77 106 c 0,221,222 112.997 157.997 112.997 157.997 232 284 c 0,223,224 351 410 351 410 349 463 c 0,225,226 347 495 347 495 306 495 c 0,227,228 284.978 495 284.978 495 284.5 472.5 c 0,229,230 284.999 450.002 284.999 450.002 293 440 c 0,231,232 269 433 269 433 245.5 460 c 0,233,234 221.999 487 221.999 487 247 535 c 0,235,236 267 574 267 574 325.5 608 c 0,237,238 384.003 642.002 384.003 642.002 417 673 c 0,239,240 450.002 704.002 450.002 704.002 490.5 765 c 0,241,242 531 826 531 826 531 877 c 0,243,244 531 910 531 910 503 924 c 0,245,246 475 938 475 938 448 938 c 0,247,248 379.456 935.397 379.456 935.397 378.665 895.53 c 0,249,250 380 882.5 l 0,251,252 391 830 391 830 421 830 c 0,253,254 369 821 369 821 328 845 c 0,255,256 287 869 287 869 287 926 c 0,257,258 287 970 287 970 312 1017.5 c 0,259,260 337.001 1065.01 337.001 1065.01 347 1104 c 0,261,262 355 1140 355 1140 355.5 1190 c 0,263,264 356 1239.99 356 1239.99 344 1274 c 0,265,266 319.003 1339.99 319.003 1339.99 266 1395 c 0,267,268 213 1450.01 213 1450.01 213 1535 c 0,269,270 213 1557.99 213 1557.99 237.5 1602.5 c 0,271,272 261.997 1647 261.997 1647 302 1647 c 0,273,274 263 1609.99 263 1609.99 263 1559 c 0,275,276 263 1544.99 263 1544.99 276 1522 c 0,277,278 289.003 1499 289.003 1499 310 1499 c 0,279,280 374 1499 374 1499 374 1562 c 0,281,282 374 1752.53 374 1752.53 219.724 1752.48 c 0,283,284 212.053 1752.47 212.053 1752.47 204 1752 c 0,285,286 247.833 1765.11 247.833 1765.11 282.611 1765.1 c 0,287,288 340.669 1765.08 340.669 1765.08 373.5 1728.5 c 0,289,290 426.001 1670 426.001 1670 448 1582 c 0,291,292 466 1505.99 466 1505.99 475.5 1424.5 c 0,293,294 485.001 1342.99 485.001 1342.99 506 1269 c 0,295,296 515.003 1235.99 515.003 1235.99 552 1178.5 c 0,297,298 581.04 1133.37 581.04 1133.37 613.156 1132.9 c 0,299,300 631 1136 l 0,301,302 680.005 1152.01 680.005 1152.01 722.5 1212 c 0,303,304 765 1272 765 1272 783 1320 c 0,305,306 789 1336.01 789 1336.01 801.5 1419 c 0,307,308 803.564 1454.98 l 0,309,310 800.907 1490.88 800.907 1490.88 773.555 1491.5 c 0,311,312 760 1490 l 0,0,1 EndSplineSet KernsSLIF: 45 -208 0 0 EndChar StartChar: Y Encoding: 89 89 17 Width: 1321 Flags: MW VStem: 406 327<-12 893> Fore 587 -427 m 1,0,1 650 -373 650 -373 691.5 -193 c 0,2,3 733 -13 733 -13 673 39 c 0,4,5 647 61 647 61 574 65.5 c 0,6,7 501 70 501 70 520 10 c 0,8,9 531 -25 531 -25 563.5 -31 c 0,10,11 591.368 -32.2583 l 0,12,13 609.425 -30.504 609.425 -30.504 627 -22 c 0,14,15 627 -68 627 -68 526 -76 c 0,16,17 425 -83.9999 425 -83.9999 406 -12 c 0,18,19 398.427 14.7027 398.427 14.7027 398.479 42.0412 c 0,20,21 398.558 83.2966 398.558 83.2966 416 126 c 0,22,23 445 197.002 445 197.002 469 265 c 0,24,25 474.004 280.013 474.004 280.013 489.5 337.5 c 0,26,27 505 395.003 505 395.003 515.5 458.5 c 0,28,29 525.179 517.032 525.179 517.032 525.086 565.366 c 0,30,31 525.078 569.468 525.078 569.468 525 573.5 c 0,32,33 524 625.001 524 625.001 496 630 c 0,34,35 473.874 629.028 l 0,36,37 461.395 626.368 461.395 626.368 448.5 619 c 0,38,39 425.042 605.596 425.042 605.596 425 572 c 0,40,41 425 548 425 548 473 539 c 0,42,43 435 526 435 526 387.5 534.5 c 0,44,45 340 543 340 543 324 580 c 0,46,47 317.399 594.852 317.399 594.852 317.497 610.957 c 0,48,49 317.697 643.648 317.697 643.648 345.5 681.5 c 0,50,51 387 738 387 738 398 783 c 0,52,53 404.119 810.154 404.119 810.154 404.095 837.382 c 0,54,55 404.056 881.345 404.056 881.345 388 925.5 c 0,56,57 362 997 362 997 319 1042 c 0,58,59 310.857 1049.71 310.857 1049.71 301.979 1049.9 c 0,60,61 289.326 1046.54 l 0,62,63 283.314 1043.31 283.314 1043.31 277 1037 c 0,64,65 263.787 1023.79 263.787 1023.79 263.445 1010.25 c 0,66,67 267.068 995.034 l 0,68,69 268.318 992.522 268.318 992.522 270 990 c 0,70,71 282 972 282 972 290.5 967 c 0,72,73 299 962 299 962 341 962 c 0,74,75 333.001 943 333.001 943 281.5 940 c 0,76,77 245.179 941.292 l 0,78,79 219.509 945.159 219.509 945.159 203 958 c 0,80,81 158 992 158 992 173 1067 c 0,82,83 188 1142 188 1142 188 1190 c 0,84,85 188 1298 188 1298 111 1360 c 0,86,87 34.0009 1421.99 34.0009 1421.99 19 1521 c 0,88,89 14.7895 1547.84 14.7895 1547.84 14.8726 1575.69 c 0,90,91 15.1051 1653.65 15.1051 1653.65 49 1739.5 c 0,92,93 94.9978 1856 94.9978 1856 234 1913 c 0,94,95 139.993 1851.99 139.993 1851.99 89.5 1755 c 0,96,97 39 1657.99 39 1657.99 84 1557 c 0,98,99 113.309 1491.05 113.309 1491.05 188.767 1490.96 c 0,100,101 195.689 1490.95 195.689 1490.95 203 1491.5 c 0,102,103 289.995 1497.99 289.995 1497.99 332 1546 c 0,104,105 346.769 1562.25 346.769 1562.25 346.875 1578.25 c 0,106,107 346.974 1593.24 346.974 1593.24 334.206 1608.02 c 0,108,109 332.918 1609.51 332.918 1609.51 331.5 1611 c 0,110,111 310.872 1632.64 310.872 1632.64 278.582 1632.79 c 0,112,113 263.126 1632.86 263.126 1632.86 245 1628 c 0,114,115 281 1653.99 281 1653.99 325.5 1653.5 c 0,116,117 369.993 1653.01 369.993 1653.01 392 1635 c 0,118,119 421.654 1608.64 421.654 1608.64 421.779 1569.91 c 0,120,121 421.843 1549.86 421.843 1549.86 414 1526.5 c 0,122,123 391.987 1460.93 391.987 1460.93 391.958 1414.16 c 0,124,125 391.957 1412.06 391.957 1412.06 392 1410 c 0,126,127 393 1358.01 393 1358.01 402.5 1279 c 0,128,129 411.998 1200.01 411.998 1200.01 433.5 1129.5 c 0,130,131 455.002 1058.99 455.002 1058.99 490.5 1016.5 c 0,132,133 526 974 526 974 580 997 c 0,134,135 623.004 1015 623.004 1015 668 1086.5 c 0,136,137 713.005 1158.01 713.005 1158.01 722 1192 c 0,138,139 722.967 1213.49 l 0,140,141 720.821 1232.68 720.821 1232.68 709.5 1259 c 0,142,143 697.668 1286.51 697.668 1286.51 678.264 1287.01 c 0,144,145 662.531 1283.53 l 0,146,147 658.396 1281.73 658.396 1281.73 654 1279 c 0,148,149 623 1259.99 623 1259.99 644 1238.5 c 0,150,151 665.005 1217 665.005 1217 689 1217 c 0,152,153 668.538 1203.36 668.538 1203.36 648.887 1203.12 c 0,154,155 628.401 1206.6 l 0,156,157 623.929 1208.19 623.929 1208.19 619.5 1210.5 c 0,158,159 586 1228.01 586 1228.01 580 1254 c 0,160,161 577.345 1283.47 l 0,162,163 580.493 1350.79 580.493 1350.79 672.5 1397 c 0,164,165 783.992 1452.99 783.992 1452.99 842 1519 c 0,166,167 883.993 1565.99 883.993 1565.99 911.5 1631 c 0,168,169 939.004 1696.01 939.004 1696.01 975 1747 c 0,170,-1 1009 1799 l 0,171,172 1034.59 1838.13 1034.59 1838.13 1076.6 1838.19 c 0,173,174 1090.41 1838.21 1090.41 1838.21 1106 1834 c 0,175,176 1048 1818 1048 1818 1029 1767.5 c 0,177,178 1023.79 1753.67 1023.79 1753.67 1023.77 1741.52 c 0,179,180 1023.69 1709.34 1023.69 1709.34 1060 1689 c 0,181,182 1070.52 1682.59 1070.52 1682.59 1083.77 1682.47 c 0,183,184 1107.18 1686.44 l 0,185,186 1112.9 1688.29 1112.9 1688.29 1119 1691 c 0,187,188 1155.02 1707.01 1155.02 1707.01 1164 1717 c 0,189,190 1211.36 1773.83 1211.36 1773.83 1211.75 1816.12 c 0,191,192 1208.36 1838.44 l 0,193,194 1199.16 1866.33 1199.16 1866.33 1165 1886.5 c 0,195,196 1070.99 1942.01 1070.99 1942.01 1047 1951 c 0,197,198 1137.99 1935 1137.99 1935 1181 1897 c 0,199,200 1223.99 1859.02 1223.99 1859.02 1227 1853 c 0,201,202 1246.97 1809.61 1246.97 1809.61 1247.02 1775.71 c 0,203,204 1247.05 1760.39 1247.05 1760.39 1243 1747 c 0,205,206 1229.99 1703.99 1229.99 1703.99 1186 1636 c 0,207,208 1142.01 1570.01 1142.01 1570.01 1043 1495 c 0,209,210 944 1420 944 1420 935 1345 c 0,211,212 926 1282 926 1282 945.5 1214.5 c 0,213,214 965 1147 965 1147 967 1084 c 0,215,216 967 1054 967 1054 943.5 963 c 0,217,218 920 872 920 872 815 866 c 0,219,220 857 879 857 879 883.5 956.5 c 0,221,222 889.484 974.001 889.484 974.001 889.681 987.55 c 0,223,224 886.68 1005.75 l 0,225,226 875.526 1034 875.526 1034 823 1034 c 0,227,228 771 1034 771 1034 752 980 c 0,229,230 733 926 733 926 733 893 c 0,231,232 733 811.001 733 811.001 801 798 c 0,233,234 834.18 791.758 834.18 791.758 860.508 791.83 c 0,235,236 914.319 791.977 914.319 791.977 939.5 818.5 c 0,237,238 960.695 840.826 960.695 840.826 960.646 863.631 c 0,239,240 960.608 881.174 960.608 881.174 948 899 c 0,241,242 978 896 978 896 989.5 866 c 0,243,244 1001 836 1001 836 997 821 c 0,245,246 961 701 961 701 866.5 644.5 c 0,247,248 772 588 772 588 736 460 c 0,249,250 723.002 415.009 723.002 415.009 713 360 c 0,251,252 703 305 703 305 703 257 c 0,253,254 703 207.999 703 207.999 723.5 154.5 c 0,255,256 744.007 100.984 744.007 100.984 763 57 c 0,257,258 807 -46.0001 807 -46.0001 731.5 -214 c 0,259,260 656 -382 656 -382 587 -427 c 1,0,1 EndSplineSet KernsSLIF: 79 -91 0 0 111 -182 0 0 321 -313 0 0 83 -260 0 0 45 -195 0 0 46 -234 0 0 44 -234 0 0 97 -427 0 0 65 -385 0 0 EndChar StartChar: Z Encoding: 90 90 30 Width: 1724 Flags: HMW HStem: 39.5 156<312 1458.5> 1435 135<408 1265> Fore 237 -220 m 0,0,1 177 -220 177 -220 153.5 -186 c 0,2,3 130.001 -152.001 130.001 -152.001 126 -106 c 0,4,5 124.999 -98.9995 124.999 -98.9995 130.5 -45 c 0,6,7 136.001 9.00019 136.001 9.00019 178 20 c 0,8,9 160 3.8147e-06 160 3.8147e-06 154 -37 c 0,10,11 153.534 -61.664 l 0,12,13 156.519 -80.2962 156.519 -80.2962 171 -91 c 0,14,15 195.849 -108.749 195.849 -108.749 220.619 -108.763 c 0,16,17 258.651 -108.785 258.651 -108.785 296.5 -67 c 0,18,19 359 2 359 2 350 74 c 0,20,21 341 140 341 140 312 195.5 c 0,22,23 284.062 248.969 284.062 248.969 283.967 326.1 c 0,24,25 283.963 329.032 283.963 329.032 284 332 c 0,26,27 284 367 284 367 308.5 416 c 0,28,29 332.999 464.999 332.999 464.999 375 475 c 0,30,31 386 478 386 478 412.5 479 c 0,32,33 439 480 439 480 445 464 c 0,34,35 421 479 421 479 380 457.5 c 0,36,37 339 436 339 436 336 411 c 0,38,39 333 384 333 384 340 349 c 0,40,41 347 314 347 314 386 314 c 0,42,43 433 314 433 314 491 438 c 0,44,45 549 562 549 562 561 604 c 0,46,47 588.999 708.994 588.999 708.994 597.5 802.5 c 0,48,49 606.002 896.013 606.002 896.013 622 989 c 0,50,51 626.002 1016.01 626.002 1016.01 642 1055.5 c 0,52,53 658 1094.99 658 1094.99 679 1114 c 0,54,55 732.993 1163 732.993 1163 790 1170.5 c 0,56,57 847 1178 847 1178 861 1157 c 0,58,59 839.005 1159.27 l 0,60,61 804.088 1157.18 804.088 1157.18 761.5 1121 c 0,62,63 729.029 1093.41 729.029 1093.41 728.761 1068.8 c 0,64,65 728.666 1060.01 728.666 1060.01 732.68 1051.59 c 0,66,67 736.981 1042.58 736.981 1042.58 746 1034 c 0,68,69 758.751 1021.72 758.751 1021.72 775.514 1021.82 c 0,70,71 794.252 1021.93 794.252 1021.93 818 1037.5 c 0,72,73 863 1067.01 863 1067.01 878 1087 c 0,74,-1 938.5 1169.5 l 0,75,76 971.986 1215.98 971.986 1215.98 996 1257 c 0,77,78 1019.99 1299.98 1019.99 1299.98 1034.5 1347 c 0,79,80 1037.69 1368.81 l 0,81,82 1036.86 1402.8 1036.86 1402.8 998 1431 c 0,83,84 953.018 1461.99 953.018 1461.99 882 1470.5 c 0,85,86 811.043 1479 811.043 1479 758 1479 c 0,87,88 637.993 1479 637.993 1479 585 1440.5 c 0,89,-1 461 1347 l 0,90,91 452 1341 452 1341 431.5 1324.5 c 0,92,93 411 1308 411 1308 399 1308 c 0,94,95 373 1306.01 373 1306.01 328.5 1318.5 c 0,96,97 284 1330.99 284 1330.99 273 1377 c 0,98,99 281.997 1358 281.997 1358 348.5 1347.5 c 0,100,101 370.966 1347.4 l 0,102,103 408.317 1354.47 408.317 1354.47 408.663 1416.16 c 0,104,105 408.713 1425.02 408.713 1425.02 408 1435 c 0,106,107 402.001 1507.99 402.001 1507.99 309.5 1513.5 c 0,108,109 225.463 1515.21 l 0,110,111 196.474 1514.14 196.474 1514.14 179 1510 c 0,112,113 52.0235 1476.53 52.0235 1476.53 51.5 1402.5 c 0,114,115 52 1292 l 0,116,117 29.2774 1353.48 29.2774 1353.48 29.1846 1400.28 c 0,118,119 29.0851 1450.43 29.0851 1450.43 54.9838 1483.72 c 0,120,121 59.1549 1489.08 59.1549 1489.08 64 1494 c 0,122,123 126.992 1558 126.992 1558 183 1576 c 0,124,125 251.935 1596.94 251.935 1596.94 326.223 1596.94 c 0,126,127 337.056 1596.94 337.056 1596.94 348 1596.5 c 0,128,129 433.929 1593.01 433.929 1593.01 515 1584 c 0,130,131 572 1578 572 1578 630.5 1582.5 c 0,132,133 673.739 1585.83 673.739 1585.83 674.092 1615.65 c 0,134,135 669.821 1637.75 l 0,136,137 669.427 1638.86 669.427 1638.86 669 1640 c 0,138,139 656.558 1671.11 656.558 1671.11 625.717 1671.15 c 0,140,141 611.944 1671.17 611.944 1671.17 594.5 1665 c 0,142,143 538.001 1645.01 538.001 1645.01 534 1629 c 0,144,145 532.47 1656.34 l 0,146,147 534.846 1679.14 534.846 1679.14 551 1694 c 0,148,149 576.009 1717 576.009 1717 597 1723 c 0,150,151 636 1732 636 1732 696 1727.5 c 0,152,153 755.989 1723 755.989 1723 794 1703 c 0,154,-1 917 1635.5 l 0,155,156 983.989 1598.01 983.989 1598.01 1039 1585 c 0,157,158 1102 1570 1102 1570 1150.5 1568.5 c 0,159,160 1260.41 1569.8 l 0,161,162 1262.69 1569.9 1262.69 1569.9 1265 1570 c 0,163,164 1349.93 1567.33 l 0,165,166 1365.77 1566.16 1365.77 1566.16 1382.5 1564.5 c 0,167,168 1447.99 1558.01 1447.99 1558.01 1490 1519 c 0,169,170 1518.99 1492 1518.99 1492 1521.5 1422.5 c 0,171,172 1519.34 1385.52 l 0,173,174 1512.2 1343.51 1512.2 1343.51 1483 1320 c 0,175,176 1461.18 1301.94 1461.18 1301.94 1419.52 1302 c 0,177,178 1405.83 1302.02 1405.83 1302.02 1390 1304 c 0,179,180 1421.01 1305.01 1421.01 1305.01 1454.5 1361.5 c 0,181,182 1468.24 1384.68 1468.24 1384.68 1468.27 1407.09 c 0,183,184 1468.31 1439.33 1468.31 1439.33 1440 1470 c 0,185,186 1427.39 1482.61 1427.39 1482.61 1405.3 1482.6 c 0,187,188 1387.11 1482.58 1387.11 1482.58 1362.5 1474 c 0,189,190 1308 1454.99 1308 1454.99 1290 1435 c 0,191,192 1215 1352.01 1215 1352.01 1139.5 1219.5 c 0,193,194 1064.02 1087.02 1064.02 1087.02 1018 985 c 0,195,196 988.999 918.996 988.999 918.996 972 828 c 0,197,198 955 737 955 737 946 665 c 0,199,200 935.001 593.002 935.001 593.002 894 557.5 c 0,201,202 853 522 853 522 760 561 c 0,203,204 793 555 793 555 837.5 579 c 0,205,206 882 603 882 603 864 663 c 0,207,208 853.377 695.377 853.377 695.377 831.749 695.891 c 0,209,210 814.459 692.007 l 0,211,212 798.784 685.202 798.784 685.202 779 666.5 c 0,213,214 715 606.001 715 606.001 712 568 c 0,215,216 706.001 503.007 706.001 503.007 703.5 387 c 0,217,218 706.084 344.04 l 0,219,220 718.324 266.367 718.324 266.367 787 248 c 0,221,222 835.997 235 835.997 235 897.5 226 c 0,223,224 959 217 959 217 1018 217 c 0,225,226 1110.99 217 1110.99 217 1154 286 c 0,227,228 1197.03 355.037 1197.03 355.037 1245 418 c 0,229,230 1311.58 504.619 1311.58 504.619 1367.71 504.744 c 0,231,232 1398.42 504.812 1398.42 504.812 1426 479 c 0,233,234 1498.75 410.917 1498.75 410.917 1499.3 379.363 c 0,235,236 1499.34 377.087 1499.34 377.087 1499 375 c 0,237,238 1482.01 402 1482.01 402 1418 425.5 c 0,239,240 1397.57 433 1397.57 433 1380.61 432.912 c 0,241,242 1344.43 432.724 1344.43 432.724 1324 398 c 0,243,244 1304 362.992 1304 362.992 1304 298 c 0,245,246 1304 260.996 1304 260.996 1348.5 222 c 0,247,248 1393.01 183 1393.01 183 1419 174 c 0,249,250 1456.01 159 1456.01 159 1509 141 c 0,251,252 1562.02 122.991 1562.02 122.991 1598 108 c 0,253,254 1669.01 77.9939 1669.01 77.9939 1713 17.5 c 0,255,256 1745.17 -26.7446 1745.17 -26.7446 1745.27 -73.9191 c 0,257,258 1745.3 -91.2615 1745.3 -91.2615 1741 -109 c 0,259,260 1722.99 -65.9799 1722.99 -65.9799 1692 -19.5 c 0,261,262 1660.99 27.0011 1660.99 27.0011 1582 35 c 0,263,264 1536.43 39.8826 1536.43 39.8826 1483.24 39.7986 c 0,265,266 1471.07 39.7794 1471.07 39.7794 1458.5 39.5 c 0,267,268 1390.99 37.9999 1390.99 37.9999 1335 24 c 0,269,270 1287 10.9999 1287 10.9999 1240.5 -17.5 c 0,271,272 1194 -46 1194 -46 1152 -63 c 0,273,274 1090.99 -86.0012 1090.99 -86.0012 1044.5 -92.5 c 0,275,276 998 -98.9999 998 -98.9999 964 -63 c 0,277,278 949 -48 949 -48 951.5 -26 c 0,279,280 954 -3.99995 954 -3.99995 962 1 c 0,281,282 969.999 -44 969.999 -44 999 -44 c 0,283,284 1042.99 -44 1042.99 -44 1050 -2 c 0,285,286 1048.42 12.7096 l 0,287,288 1038.21 37.5233 1038.21 37.5233 973.184 37.7045 c 0,289,290 961.698 37.7366 961.698 37.7366 948.5 37 c 0,291,292 841.002 31.0001 841.002 31.0001 828 29 c 0,293,294 699 6.99995 699 6.99995 604 -48.5 c 0,295,296 509 -104 509 -104 397 -161 c 0,297,-1 320 -198 l 0,298,299 274.001 -220 274.001 -220 237 -220 c 0,0,1 EndSplineSet KernsSLIF: 121 -117 0 0 89 -104 0 0 322 -182 0 0 321 -169 0 0 105 -52 0 0 73 -65 0 0 101 -65 0 0 98 -78 0 0 66 -78 0 0 45 -208 0 0 EndChar StartChar: a Encoding: 97 97 56 Width: 1254 Flags: W Fore 1101 -190 m 1,0,1 1130.99 -133.017 1130.99 -133.017 1145.5 -66.5 c 0,2,3 1160.01 -5.34058e-05 1160.01 -5.34058e-05 1105 52 c 0,4,5 1061.98 94.0183 1061.98 94.0183 1019 122 c 0,6,7 976 150.001 976 150.001 929 134 c 0,8,9 898.001 122 898.001 122 889.5 75 c 0,10,11 881 28 881 28 878 28 c 0,12,13 843 97 843 97 885 176 c 0,14,15 924.162 249.663 924.162 249.663 924.2 314.63 c 0,16,17 924.203 319.338 924.203 319.338 924 324 c 0,18,19 918 460 918 460 878 508 c 0,20,21 838 556 838 556 784 577 c 0,22,23 755.159 588.038 755.159 588.038 730.121 588.046 c 0,24,25 684.841 588.061 684.841 588.061 652 552 c 0,26,27 601 496 601 496 547 472 c 0,28,29 514 457 514 457 477.5 471 c 0,30,31 441 485 441 485 438 524 c 0,32,33 464.8 513.421 464.8 513.421 477.424 513.287 c 0,34,35 482.7 513.232 482.7 513.232 485.5 515 c 0,36,37 495 521 495 521 498 527 c 0,38,39 515 563 515 563 474 575 c 0,40,41 385 595 385 595 349 527 c 0,42,43 319 469 319 469 294.5 385 c 0,44,45 270 301 270 301 302 230 c 0,46,47 308.851 213.559 308.851 213.559 308.896 189.844 c 0,48,49 308.917 178.941 308.917 178.941 307.5 166.5 c 0,50,51 303 126.999 303 126.999 264 113 c 0,52,53 267.965 142.506 l 0,54,55 267.628 173.422 267.628 173.422 240.722 174.061 c 0,56,57 231.5 173.5 l 0,58,59 183 167 183 167 157 138 c 0,60,61 98.9995 73.9999 98.9995 73.9999 70 21 c 0,62,63 41 -32 41 -32 51 -108 c 0,64,65 27 -84 27 -84 28.5 -26.5 c 0,66,67 30 31 30 31 46 58 c 0,68,69 74.9999 109 74.9999 109 103 152.5 c 0,70,71 131.001 196 131.001 196 133 250 c 0,72,73 133 283 133 283 109 296.5 c 0,74,75 85 310 85 310 97 257 c 0,76,77 68.0001 282 68.0001 282 77 321 c 0,78,79 111.999 481 111.999 481 225.5 621 c 0,80,81 338.999 760.998 338.999 760.998 360 850 c 0,82,83 374.002 908.012 374.002 908.012 386 973.5 c 0,84,85 398.006 1039.04 398.006 1039.04 406 1093 c 0,86,87 412.001 1150.01 412.001 1150.01 448.5 1198.5 c 0,88,89 469.7 1226.67 469.7 1226.67 494.444 1226.67 c 0,90,91 512.299 1226.67 512.299 1226.67 532 1212 c 0,92,93 487 1203 487 1203 485.5 1178.5 c 0,94,95 484 1154.01 484 1154.01 493 1144 c 0,96,97 508.183 1124.39 508.183 1124.39 523.767 1124.39 c 0,98,99 532.816 1124.39 532.816 1124.39 542 1131 c 0,100,101 590 1162.99 590 1162.99 620.5 1264.5 c 0,102,103 650.032 1362.79 650.032 1362.79 650 1422 c 0,104,105 647 1478 647 1478 609.5 1511 c 0,106,107 591.999 1526.4 591.999 1526.4 572.867 1526.56 c 0,108,109 561.011 1526.65 561.011 1526.65 548.53 1520.9 c 0,110,111 537.988 1516.04 537.988 1516.04 527 1507 c 0,112,113 557 1585 557 1585 603.5 1573 c 0,114,115 650.006 1561 650.006 1561 697.5 1510.5 c 0,116,117 745 1459.99 745 1459.99 785.5 1398 c 0,118,119 826 1336.01 826 1336.01 844 1314 c 0,120,121 873.983 1277.02 873.983 1277.02 913.5 1253.5 c 0,122,123 953.003 1229.99 953.003 1229.99 969 1197 c 0,124,125 981.772 1169.25 981.772 1169.25 981.839 1147.23 c 0,126,127 981.924 1119.24 981.924 1119.24 961.5 1100.5 c 0,128,129 942.278 1082.86 942.278 1082.86 919.867 1082.83 c 0,130,131 899.721 1082.8 899.721 1082.8 877 1097 c 0,132,133 907 1097 907 1097 907 1116 c 0,134,135 907 1136.99 907 1136.99 873.5 1154.5 c 0,136,137 859.98 1158.04 l 0,138,139 840.37 1156.54 840.37 1156.54 840 1104 c 0,140,141 840 1080 840 1080 851.5 1052 c 0,142,-1 869 1010 l 0,143,144 896 941 896 941 908.5 966 c 0,145,146 921 991 921 991 906 1008 c 0,147,148 939 1008 939 1008 950.5 966 c 0,149,150 962 924 962 924 962 913 c 0,151,152 962 849 962 849 953.5 758.5 c 0,153,154 945 668 945 668 975 611 c 0,155,156 984 591 984 591 1019 539 c 0,157,158 1053.42 487.858 1053.42 487.858 1069 478 c 0,159,160 1087.99 466.009 1087.99 466.009 1105.5 429.5 c 0,161,162 1110.37 419.346 1110.37 419.346 1110.48 409.695 c 0,163,164 1110.57 401.279 1110.57 401.279 1107.05 393.244 c 0,165,166 1100.08 377.377 1100.08 377.377 1079 363 c 0,167,168 1084.24 378.447 1084.24 378.447 1084.46 389.787 c 0,169,170 1081.44 405.63 l 0,171,172 1074.39 420.005 1074.39 420.005 1051 421 c 0,173,174 1032.22 419.204 l 0,175,176 1015.67 414.069 1015.67 414.069 1015.63 395.11 c 0,177,178 1015.62 392.216 1015.62 392.216 1016 389 c 0,179,180 1028 288.996 1028 288.996 1102.5 232 c 0,181,182 1177 175.004 1177 175.004 1186 88 c 0,183,184 1189.26 21.1694 l 0,185,186 1188.68 -24.9163 1188.68 -24.9163 1179.5 -64 c 0,187,188 1164.01 -129.994 1164.01 -129.994 1101 -190 c 1,0,1 619 690 m 1,115,116 634 708 634 708 649.5 729.5 c 0,117,118 665 751 665 751 683 764 c 0,119,120 703.141 776.451 703.141 776.451 718.052 776.43 c 0,121,122 743.859 776.394 743.859 776.394 754 739 c 0,123,124 718 758 718 758 703 748 c 0,125,126 695.286 742.857 695.286 742.857 695.242 733.747 c 0,127,128 695.2 725.143 695.2 725.143 702 713 c 0,129,130 726 668 726 668 768.5 715 c 0,131,132 801.516 751.512 801.516 751.512 801.642 804.32 c 0,133,134 801.678 819.488 801.678 819.488 799 836 c 0,135,136 793 871 793 871 747 983 c 0,137,138 710.201 1072.6 710.201 1072.6 681.72 1073.24 c 0,139,140 670.911 1070.1 l 0,141,142 669.443 1069.18 669.443 1069.18 668 1068 c 0,143,144 641 1045.99 641 1045.99 649.5 1012.5 c 0,145,146 658 979 658 979 661 948 c 0,147,148 660.631 904.308 l 0,149,150 656.786 866.042 656.786 866.042 640.5 829 c 0,151,152 615 771 615 771 521 807 c 0,153,154 548 804 548 804 586 824.5 c 0,155,156 624 845 624 845 579 884 c 0,157,158 570.784 890.676 570.784 890.676 561.249 890.627 c 0,159,160 552.216 890.581 552.216 890.581 542 884.5 c 0,161,162 521 872 521 872 509 856 c 0,163,164 440 763 440 763 512.5 704 c 0,165,166 585 645 585 645 619 690 c 1,115,116 EndSplineSet KernsSLIF: 99 -130 0 0 109 -78 0 0 104 -117 0 0 45 -182 0 0 115 -208 0 0 121 -299 0 0 116 -342 0 0 118 -43 0 0 119 -221 0 0 EndChar StartChar: b Encoding: 98 98 18 Width: 1083 Flags: HMW HStem: 40.8 160.65<365.16 635.205> 617.1 218.45<359.04 641.325> 1229.95 170<339.15 591.6> 1316.65 94.35<25.5 180.795> VStem: 209.1 130.05<-23.8 1399.95> Fore 426.7 185.3 m 1,0,1 482.159 184.3 l 0,2,3 531.98 186.879 531.98 186.879 587.35 201.45 c 0,4,5 674.56 224.4 674.56 224.4 735.76 252.45 c 0,6,7 787.78 275.4 787.78 275.4 844.9 337.45 c 0,8,9 880.496 376.117 880.496 376.117 880.837 408.843 c 0,10,11 877.226 429.789 l 0,12,13 874.124 438.244 874.124 438.244 868.359 446.25 c 0,14,15 856.121 462.4 856.121 462.4 830.62 468.775 c 0,16,17 805.12 475.15 805.12 475.15 784.721 454.75 c 0,18,19 775.451 445.243 775.451 445.243 775.402 431.167 c 0,20,21 775.382 425.107 775.382 425.107 777.07 418.2 c 0,22,23 782.68 395.25 782.68 395.25 818.38 380.8 c 0,24,25 790.84 360.4 790.84 360.4 741.88 387.175 c 0,26,27 700.418 409.849 700.418 409.849 699.92 445.63 c 0,28,29 699.83 452.101 699.83 452.101 701.08 459 c 0,30,31 709.24 509.15 709.24 509.15 758.2 539.325 c 0,32,33 807.16 569.5 807.16 569.5 790.84 612.85 c 0,34,35 777.58 646 777.58 646 704.141 670.65 c 0,36,37 630.699 695.299 630.699 695.299 560.32 700.4 c 0,38,39 496.06 704.649 496.06 704.649 440.47 697.85 c 0,40,41 384.88 691.051 384.88 691.051 359.38 636.65 c 0,42,43 337.96 594.151 337.96 594.151 334.9 547.4 c 0,44,45 333.928 474.045 l 0,46,47 334.294 465.198 334.294 465.198 334.9 456.45 c 0,48,49 334.9 429.25 334.9 429.25 361.93 407.15 c 0,50,51 374.852 396.585 374.852 396.585 391.621 396.51 c 0,52,53 409.928 396.428 409.928 396.428 432.82 408.85 c 0,54,55 467.684 428.219 467.684 428.219 468.122 451.755 c 0,56,57 464.95 467.075 l 0,58,59 451.18 499.8 451.18 499.8 414.46 510 c 0,60,61 437.91 523.68 437.91 523.68 462.372 523.6 c 0,62,63 480.469 523.54 480.469 523.54 499.12 515.95 c 0,64,65 545.059 496.808 545.059 496.808 545.48 454.907 c 0,66,67 545.527 450.291 545.527 450.291 545.021 445.4 c 0,68,69 539.919 396.099 539.919 396.099 510.34 368.9 c 0,70,71 482.8 343.4 482.8 343.4 420.58 301.325 c 0,72,73 358.359 259.25 358.359 259.25 367.54 221 c 0,74,75 373.66 189.549 373.66 189.549 426.7 185.3 c 0,76,-1 426.7 185.3 l 1,0,1 346.289 870.4 m 1,44,45 374.387 839.903 374.387 839.903 420.997 839.912 c 0,46,47 438.15 839.915 438.15 839.915 457.81 844.05 c 0,48,49 603.802 874.755 603.802 874.755 607.75 884 c 0,50,-1 726.75 986 l 0,51,52 758.7 1033.93 758.7 1033.93 760.75 1139 c 0,53,54 757.517 1164.82 l 0,55,56 744.581 1211.19 744.581 1211.19 680.169 1246.95 c 0,57,58 610.978 1284.48 610.978 1284.48 564.236 1284.64 c 0,59,60 555.885 1284.66 555.885 1284.66 548.25 1283.5 c 0,61,62 515.57 1278.17 515.57 1278.17 545.189 1206.58 c 0,63,64 573.239 1137.3 573.239 1137.3 539.58 1074.4 c 0,65,66 493.969 990.462 493.969 990.462 419.145 989.885 c 0,67,68 413.651 989.843 413.651 989.843 408 990.25 c 0,69,70 461.193 1002.56 461.193 1002.56 461.588 1072.75 c 0,71,72 461.602 1075.24 461.602 1075.24 461.55 1077.8 c 0,73,74 460.02 1152.6 460.02 1152.6 400.859 1152.6 c 0,75,76 350.893 1152.6 350.893 1152.6 331.5 998.75 c 0,77,78 327.473 940.051 l 0,79,80 327.837 888.625 327.837 888.625 346.289 870.4 c 0,81,-1 346.289 870.4 l 1,44,45 279.65 36.125 m 145,-1,-1 184.789 -11.4746 l 0,45,46 159.502 -9.35944 l 0,47,48 129.359 -1.62558 129.359 -1.62558 126.267 32.7246 c 0,49,50 126.948 66.7202 l 0,51,52 130.7 93.8745 130.7 93.8745 145.01 117.725 c 0,53,54 140.419 37.8253 140.419 37.8253 171.02 48.875 c 0,55,56 201.62 59.9251 201.62 59.9251 206.592 124.1 c 0,57,58 211.563 188.275 211.563 188.275 203.532 264.775 c 0,59,60 195.5 341.275 195.5 341.275 180.582 410.125 c 0,61,62 165.665 478.973 165.665 478.973 158.014 498.525 c 0,63,64 125.887 571.621 125.887 571.621 111.35 600.95 c 0,65,66 93.3115 637.34 93.3115 637.34 53.21 692.325 c 0,67,68 21.4043 735.935 21.4043 735.935 21.3251 790.518 c 0,69,70 21.3148 797.641 21.3148 797.641 21.8447 804.95 c 0,71,72 26.4336 868.276 26.4336 868.276 71.5693 903.125 c 0,73,74 89.6215 917.105 89.6215 917.105 112.368 917.176 c 0,75,76 121.43 917.204 121.43 917.204 131.238 915.025 c 0,77,78 165.664 907.375 165.664 907.375 169.488 836.825 c 0,79,80 154.453 858.406 154.453 858.406 130.692 858.606 c 0,81,82 125.441 858.65 125.441 858.65 119.764 857.65 c 0,83,84 88.4003 852.125 88.4003 852.125 92.9883 800.275 c 0,85,86 96.8135 755.225 96.8135 755.225 130.475 753.95 c 0,87,88 152.528 756.629 l 0,89,90 169.195 762.046 169.195 762.046 177.904 778.175 c 0,91,92 208.147 831.941 208.147 831.941 208.122 949.45 c 0,93,94 207.738 1066.34 207.738 1066.34 203.15 1136.88 c 0,95,96 199.325 1188.72 199.325 1188.72 182.494 1252.9 c 0,97,98 167.916 1308.49 167.916 1308.49 116.417 1308.61 c 0,99,100 107.206 1308.63 107.206 1308.63 96.8135 1306.88 c 0,101,102 45.3775 1298.19 45.3775 1298.19 45.4768 1255.64 c 0,103,104 45.4942 1248.2 45.4942 1248.2 47.0889 1239.72 c 0,105,106 57.7988 1182.79 57.7988 1182.79 80.75 1179.38 c 0,107,108 59.2039 1176.94 l 0,109,110 28.1379 1179.12 28.1379 1179.12 7.69141 1217.2 c 0,111,112 -7.80302 1246.06 -7.80302 1246.06 -7.73372 1278.37 c 0,113,114 -7.68156 1302.69 -7.68156 1302.69 1.18848 1328.97 c 0,115,116 34.7996 1426.53 34.7996 1426.53 120.092 1427.05 c 0,117,118 156.484 1423.33 l 0,119,-1 235.662 1407.6 l 0,120,121 259.896 1404.67 l 0,122,123 288.348 1405.15 288.348 1405.15 332.859 1419.5 c 0,124,125 373.66 1433.1 373.66 1433.1 406.81 1470.5 c 0,126,127 440.005 1507.95 440.005 1507.95 467.5 1535.95 c 0,128,129 485.874 1555.51 485.874 1555.51 524.109 1572.08 c 0,130,131 553.312 1584.73 553.312 1584.73 579.849 1584.75 c 0,132,133 588.062 1584.76 588.062 1584.76 596.021 1583.55 c 0,134,135 643.954 1576.76 643.954 1576.76 688.84 1535.95 c 0,136,137 717.922 1509.51 717.922 1509.51 717.881 1472.01 c 0,138,139 717.858 1452.1 717.858 1452.1 709.24 1428 c 0,140,141 702.102 1456.04 702.102 1456.04 643.45 1495.15 c 0,142,143 623.166 1508.67 623.166 1508.67 606.944 1508.87 c 0,144,145 598.781 1508.97 598.781 1508.97 591.647 1505.69 c 0,146,147 572.968 1497.11 572.968 1497.11 561.34 1465.4 c 0,148,149 550.12 1434.8 550.12 1434.8 665.38 1378.28 c 0,150,151 780.658 1321.74 780.658 1321.74 811.24 1287.75 c 0,152,153 887.742 1200.19 887.742 1200.19 902.53 1105 c 0,154,155 908.699 1065.29 908.699 1065.29 908.628 1027.72 c 0,156,157 908.519 970.361 908.519 970.361 893.859 918 c 0,158,159 886.72 892.498 886.72 892.498 847.45 853.825 c 0,160,161 819.755 826.55 819.755 826.55 792.314 826.543 c 0,162,163 780.845 826.539 780.845 826.539 769.42 831.3 c 0,164,165 797.979 861.049 797.979 861.049 769.42 872.1 c 0,166,167 753.683 874.809 l 0,168,169 739.244 873.686 739.244 873.686 735.76 855.1 c 0,170,171 728.62 816.85 728.62 816.85 808.69 722.5 c 0,172,173 889.862 626.849 889.862 626.849 918.34 666.4 c 0,174,175 933.641 687.651 933.641 687.651 918.34 717.4 c 0,176,177 903.04 747.15 903.04 747.15 871.42 770.1 c 0,178,179 963.221 767.55 963.221 767.55 1004.02 693.175 c 0,180,181 1044.82 618.8 1044.82 618.8 1046.86 590.75 c 0,182,183 1044.78 549.144 l 0,184,185 1038.75 505.432 1038.75 505.432 1016.77 447.1 c 0,186,187 983.62 359.55 983.62 359.55 983.62 288.15 c 0,188,189 983.62 202.3 983.62 202.3 971.38 134.3 c 0,190,191 959.141 66.2997 959.141 66.2997 922.42 22.9502 c 0,192,193 878.56 -28.0498 878.56 -28.0498 805.12 -42.5 c 0,194,195 768.4 -50.1505 768.4 -50.1505 705.67 -44.2002 c 0,196,197 642.94 -38.25 642.94 -38.25 616.42 -17 c 0,198,199 647.676 -20.065 l 0,200,201 678.398 -19.3574 678.398 -19.3574 708.221 -3.8252 c 0,202,203 737.354 11.3484 737.354 11.3484 737.606 32.6744 c 0,204,205 737.702 40.8109 737.702 40.8109 733.594 49.8429 c 0,206,207 731.27 54.953 731.27 54.953 727.6 60.3496 c 0,208,209 710.26 85.8496 710.26 85.8496 621.521 82.4502 c 0,210,211 532.781 79.0499 532.781 79.0499 497.08 76.5 c 0,212,-1 382.84 67.5752 l 0,213,214 337.222 59.1049 337.222 59.1049 279.65 36.125 c 145,-1,-1 EndSplineSet EndChar StartChar: c Encoding: 99 99 19 Width: 1171 Flags: W Fore 130 1163 m 1,0,1 132.395 1186.83 l 0,2,3 140.998 1220.08 140.998 1220.08 178.5 1260.5 c 0,4,5 207.417 1291.66 207.417 1291.66 233.339 1292.09 c 0,6,7 251.453 1288.48 l 0,8,9 261.996 1284 261.996 1284 272 1274 c 0,10,11 226.25 1267.25 226.25 1267.25 226.063 1236.88 c 0,12,13 226 1226.75 226 1226.75 231 1214 c 0,14,15 238.091 1193.2 238.091 1193.2 250.769 1193.3 c 0,16,17 264.909 1193.4 264.909 1193.4 286 1219.5 c 0,18,19 325.995 1268.99 325.995 1268.99 334 1286 c 0,20,21 358.997 1338.99 358.997 1338.99 366 1392 c 0,22,23 373.001 1445 373.001 1445 409 1490 c 0,24,25 436.611 1525.5 436.611 1525.5 481.5 1525.5 c 0,26,27 525.998 1525.01 525.998 1525.01 538 1492 c 0,28,29 480 1492 480 1492 499 1465 c 0,30,31 509.578 1449.72 509.578 1449.72 524.471 1449.64 c 0,32,33 534.923 1449.58 534.923 1449.58 547.5 1457 c 0,34,35 577.986 1474.99 577.986 1474.99 593 1489 c 0,36,37 621.242 1516.57 621.242 1516.57 621.224 1533.29 c 0,38,39 621.216 1541.43 621.216 1541.43 614.5 1547 c 0,40,41 594 1563.99 594 1563.99 564 1547 c 0,42,43 567.001 1588.01 567.001 1588.01 599.5 1593 c 0,44,45 630.619 1594.13 l 0,46,47 643.508 1592.77 643.508 1592.77 654 1588 c 0,48,49 749.093 1541.95 749.093 1541.95 811.5 1505 c 0,50,51 874 1467.99 874 1467.99 892 1460 c 0,52,53 923.249 1445.25 923.249 1445.25 951.459 1445.18 c 0,54,55 955.764 1445.17 955.764 1445.17 960 1445.5 c 0,56,57 1000.05 1444.5 l 0,58,59 1015.33 1442.75 1015.33 1442.75 1032 1439 c 0,60,61 1053.01 1433 1053.01 1433 1059.5 1404.5 c 0,62,63 1065.99 1376 1065.99 1376 1058 1349 c 0,64,65 1024.88 1380.05 1024.88 1380.05 1003.65 1380.15 c 0,66,67 994.125 1380.2 994.125 1380.2 987 1374 c 0,68,69 964 1354.01 964 1354.01 963 1294 c 0,70,71 961.999 1263.98 961.999 1263.98 959.5 1234 c 0,72,73 957 1204 957 1204 969 1177 c 0,74,75 988.003 1130 988.003 1130 1028 1119.5 c 0,76,77 1068.01 1109 1068.01 1109 1116 1106 c 0,78,79 1103.78 1081.57 1103.78 1081.57 1061.37 1081.35 c 0,80,81 1051.72 1081.3 1051.72 1081.3 1040.5 1082.5 c 0,82,83 980.007 1088.99 980.007 1088.99 961 1104 c 0,84,85 906.204 1143.52 906.204 1143.52 905.876 1183.45 c 0,86,87 905.839 1187.97 905.839 1187.97 906.5 1192.5 c 0,88,89 906.604 1224.3 l 0,90,91 902.367 1263.58 902.367 1263.58 879 1322 c 0,92,93 857.998 1373.01 857.998 1373.01 794 1384 c 0,94,95 762.159 1385.67 l 0,96,97 718.588 1382.3 718.588 1382.3 686 1346 c 0,98,99 653.006 1308.01 653.006 1308.01 627.5 1257 c 0,100,101 602 1206 602 1206 572 1167 c 0,102,103 560.987 1152.31 560.987 1152.31 518.784 1152.37 c 0,104,105 515.018 1152.38 515.018 1152.38 511 1152.5 c 0,106,107 466.355 1153.87 466.355 1153.87 465.708 1179.72 c 0,108,109 465.644 1182.24 465.644 1182.24 466 1185 c 0,110,111 495 1170 495 1170 522 1188 c 0,112,113 547.852 1205.23 547.852 1205.23 548 1235 c 0,114,115 547.031 1266.97 547.031 1266.97 528.5 1267 c 0,116,117 509.991 1265.99 509.991 1265.99 495 1257 c 0,118,119 450.683 1226.47 450.683 1226.47 430 1200.5 c 0,120,121 409.998 1175 409.998 1175 398 1123 c 0,122,123 387.25 1077.98 387.25 1077.98 387.334 1035.68 c 0,124,125 387.375 1015.02 387.375 1015.02 390 995 c 0,126,-1 407 865 l 0,127,128 410 830 410 830 423.5 794 c 0,129,130 437 758 437 758 432 724 c 0,131,132 415.795 633.439 415.795 633.439 333.252 632.842 c 0,133,134 329.206 632.813 329.206 632.813 325 633 c 0,135,136 342 645 342 645 362.5 669 c 0,137,138 383 693 383 693 368 720 c 0,139,140 355 742 355 742 318.5 730 c 0,141,142 282 718 282 718 279 695 c 0,143,144 264 611 264 611 263 541.5 c 0,145,146 266.367 498.172 l 0,147,148 274.626 448.904 274.626 448.904 303 397 c 0,149,150 322.999 359.001 322.999 359.001 353.5 353.5 c 0,151,152 384 348 384 348 397 405 c 0,153,154 399.148 427.344 l 0,155,156 398.563 432.875 398.563 432.875 396.5 437 c 0,157,158 391 448 391 448 379 469 c 0,159,160 399.007 462.998 399.007 462.998 417.5 458 c 0,161,162 436 453 436 453 447 433 c 0,163,164 468 391 468 391 471 351 c 0,165,166 474 311.003 474 311.003 488 268 c 0,167,168 504 216 504 216 538 207 c 0,169,170 557.5 200.76 557.5 200.76 573.62 200.638 c 0,171,172 586.718 200.539 586.718 200.539 597.585 204.479 c 0,173,174 624.781 214.339 624.781 214.339 638 249.5 c 0,175,176 663 316 663 316 696 364 c 0,177,178 709 382 709 382 735 379.5 c 0,179,180 761 377 761 377 776 353 c 0,181,182 791 329 791 329 788 311 c 0,183,184 763 325 763 325 743.5 313 c 0,185,186 724 301 724 301 741 281 c 0,187,188 751.698 266.413 751.698 266.413 764.877 266.011 c 0,189,190 779.807 269.701 l 0,191,192 787.321 273.45 787.321 273.45 795.5 281 c 0,193,194 828 311 828 311 831 356 c 0,195,196 829.957 415.261 l 0,197,198 823.929 488.15 823.929 488.15 795 570 c 0,199,200 790.425 583.218 790.425 583.218 790.501 606.128 c 0,201,202 790.575 628.283 790.575 628.283 795 659.5 c 0,203,204 804 723 804 723 835 768 c 0,205,206 830.002 721.017 830.002 721.017 824 674 c 0,207,208 818 627 818 627 833 581 c 0,209,210 844 548 844 548 857.5 513.5 c 0,211,212 871 479 871 479 886 452 c 0,213,214 913 405 913 405 937.5 378.5 c 0,215,216 962 352 962 352 1013 358 c 0,217,218 1033.63 360.063 1033.63 360.063 1033.93 381.977 c 0,219,220 1030 406 l 0,221,222 1046.99 412 1046.99 412 1061.5 387.5 c 0,223,224 1073.22 367.704 1073.22 367.704 1073.51 356.063 c 0,225,226 1073.58 353.302 1073.58 353.302 1073 351 c 0,227,228 1062.99 299 1062.99 299 1004 279 c 0,229,230 978 270 978 270 949.5 270.5 c 0,231,232 921 271 921 271 898 259 c 0,233,234 867 242.001 867 242.001 863.5 178.5 c 0,235,236 860 115.001 860 115.001 842 81 c 0,237,238 821 43 821 43 766 33 c 0,239,240 744 28 744 28 703.5 36 c 0,241,242 663 44 663 44 664 80 c 0,243,244 691 55 691 55 725 75 c 0,245,246 745 85.9999 745 85.9999 736 111.5 c 0,247,248 727 137 727 137 708 141 c 0,249,250 679.592 141.611 l 0,251,252 652.565 138.87 652.565 138.87 616 125 c 0,253,254 525 90.9996 525 90.9996 473 65 c 0,255,256 421 39 421 39 335 79 c 0,257,258 306 91 306 91 300.5 137.5 c 0,259,260 300.225 168.721 l 0,261,262 303.157 189.438 303.157 189.438 316 198 c 0,263,264 316 161.999 316 161.999 332.5 142 c 0,265,266 341.348 131.275 341.348 131.275 350.627 130.902 c 0,267,268 361.932 134.19 l 0,269,270 364.451 135.734 364.451 135.734 367 138 c 0,271,272 381.21 150.918 381.21 150.918 381.339 168.895 c 0,273,274 381.439 182.643 381.439 182.643 373.303 199.348 c 0,275,276 359.136 228.439 359.136 228.439 320 266.5 c 0,277,278 229 355 229 355 202 366 c 0,279,280 166.426 353.951 166.426 353.951 166.407 335.647 c 0,281,282 166.393 322.049 166.393 322.049 186 305 c 0,283,284 231.999 265.001 231.999 265.001 267 264 c 0,285,286 196.001 254 196.001 254 165 288 c 0,287,288 134.001 321.999 134.001 321.999 113 369 c 0,289,290 87.6341 423.536 87.6341 423.536 87.6032 491.344 c 0,291,292 87.5854 530.464 87.5854 530.464 96 574 c 0,293,294 108 633 108 633 140 689 c 0,295,296 172 745 172 745 175 806 c 0,297,298 178 896 178 896 155.5 984.5 c 0,299,300 133 1073 133 1073 130 1163 c 1,0,1 EndSplineSet KernsSLIF: 115 -117 0 0 97 -104 0 0 EndChar StartChar: d Encoding: 100 100 60 Width: 1313 Flags: MW VStem: 197 151.5<8.5 1487> Fore 334 -30 m 1,0,1 377.834 -63.5206 377.834 -63.5206 415.436 -63.5899 c 0,2,3 436.165 -63.6281 436.165 -63.6281 455 -53.5 c 0,4,5 508 -25 508 -25 508 -10 c 0,6,7 506 21 506 21 458 20.5 c 0,8,9 410 20 410 20 348.5 8.5 c 0,10,11 287 -3 287 -3 228 -17.5 c 0,12,13 181.952 -28.8171 181.952 -28.8171 157.832 -28.8647 c 0,14,15 151.049 -28.8781 151.049 -28.8781 146 -28 c 0,16,17 98 -19 98 -19 54.5 29 c 0,18,19 11 77 11 77 50 164 c 0,20,21 51.0001 77.9999 51.0001 77.9999 91.5 56.5 c 0,22,23 132 35 132 35 180 52 c 0,24,25 227.999 68.9997 227.999 68.9997 268 112.5 c 0,26,27 308 155.999 308 155.999 308 203 c 0,28,29 308 222.999 308 222.999 281.5 263 c 0,30,31 257.972 298.514 257.972 298.514 234.05 298.555 c 0,32,33 231.028 298.561 231.028 298.561 228 298 c 0,34,35 193.875 292.75 193.875 292.75 193.82 247.688 c 0,36,37 193.812 241.25 193.812 241.25 194.5 234 c 0,38,39 200.001 175.999 200.001 175.999 229 156 c 0,40,41 191.999 157.001 191.999 157.001 181 168 c 0,42,43 170 179 170 179 164 196 c 0,44,45 147.605 234.879 147.605 234.879 147.667 279.024 c 0,46,47 147.737 329.122 147.737 329.122 169 386 c 0,48,49 209.007 493.016 209.007 493.016 240 562 c 0,50,51 262.001 612 262.001 612 268.5 657 c 0,52,53 270.99 707.825 l 0,54,55 270.407 743.335 270.407 743.335 265 792 c 0,56,57 254.001 877.999 254.001 877.999 193.5 953.5 c 0,58,59 133.003 1028.99 133.003 1028.99 120 1074 c 0,60,61 113.455 1094.73 113.455 1094.73 113.455 1114.93 c 0,62,63 113.455 1150.28 113.455 1150.28 133.5 1184 c 0,64,65 159.451 1227.66 159.451 1227.66 208.138 1227.89 c 0,66,67 218.549 1227.94 218.549 1227.94 230 1226 c 0,68,69 208.997 1217 208.997 1217 195.5 1189 c 0,70,71 190.804 1179.26 190.804 1179.26 190.888 1170.73 c 0,72,73 191.044 1154.74 191.044 1154.74 208 1143 c 0,74,75 219.174 1134.49 219.174 1134.49 227.907 1134.36 c 0,76,77 234.827 1134.26 234.827 1134.26 240.213 1139.43 c 0,78,79 253.577 1152.25 253.577 1152.25 257.5 1197.5 c 0,80,81 265 1284.01 265 1284.01 258 1322 c 0,82,83 248.999 1370.01 248.999 1370.01 228 1406.5 c 0,84,85 207.005 1442.99 207.005 1442.99 197 1487 c 0,86,87 191.696 1508.7 191.696 1508.7 191.74 1532.38 c 0,88,89 191.787 1557.8 191.787 1557.8 198 1585.5 c 0,90,91 209.999 1639 209.999 1639 247 1672 c 0,92,93 272.994 1695.99 272.994 1695.99 322 1697 c 0,94,95 353.127 1694.13 l 0,96,97 377.447 1688.33 377.447 1688.33 389 1671 c 0,98,99 398 1656 398 1656 404.5 1641 c 0,100,101 407.204 1623.97 l 0,102,103 406.891 1611.85 406.891 1611.85 402 1595 c 0,104,105 396 1617.99 396 1617.99 349 1635.5 c 0,106,107 302 1653.01 302 1653.01 287 1592 c 0,108,109 275 1545.01 275 1545.01 314.5 1517 c 0,110,111 353.959 1489.02 353.959 1489.02 396 1470 c 0,112,113 433.024 1451.99 433.024 1451.99 549.5 1421.5 c 0,114,115 589.846 1410.94 589.846 1410.94 617.657 1410.87 c 0,116,117 657.976 1410.77 657.976 1410.77 671.957 1432.72 c 0,118,119 676.18 1439.36 676.18 1439.36 678 1448 c 0,120,121 681.935 1486.52 l 0,122,123 681.575 1537.19 681.575 1537.19 645 1552.5 c 0,124,125 621.099 1562.5 621.099 1562.5 601.002 1562.63 c 0,126,127 584.9 1562.73 584.9 1562.73 571.241 1556.48 c 0,128,129 567.003 1554.55 567.003 1554.55 563 1552 c 0,130,131 563 1590.99 563 1590.99 593 1604 c 0,132,133 622.962 1616.99 622.962 1616.99 629 1618 c 0,134,135 695 1621 695 1621 723.5 1597 c 0,136,137 752 1573 752 1573 765 1549 c 0,138,139 785.996 1510.01 785.996 1510.01 800.5 1455.5 c 0,140,141 815 1401.01 815 1401.01 851 1379 c 0,142,143 908.983 1342.01 908.983 1342.01 934.5 1333 c 0,144,145 960 1324 960 1324 1024 1315 c 0,146,147 1112.99 1301.99 1112.99 1301.99 1135 1228 c 0,148,149 1140.22 1208.71 1140.22 1208.71 1140.13 1192.05 c 0,150,151 1139.85 1135.97 1139.85 1135.97 1078 1109 c 0,152,153 1094.92 1132.07 1094.92 1132.07 1094.98 1158.11 c 0,154,155 1095 1165.92 1095 1165.92 1093.5 1174 c 0,156,157 1087.84 1204.5 1087.84 1204.5 1050.65 1204.62 c 0,158,159 1045.17 1204.64 1045.17 1204.64 1039 1204 c 0,160,161 1022.33 1202.15 1022.33 1202.15 1022.05 1180.66 c 0,162,163 1026.65 1151.28 l 0,164,165 1027.28 1148.94 1027.28 1148.94 1028 1146.5 c 0,166,167 1044.01 1091.99 1044.01 1091.99 1056 1070 c 0,168,169 1105.98 963.021 1105.98 963.021 1173.5 863.5 c 0,170,171 1241.01 763.992 1241.01 763.992 1246 707 c 0,172,173 1244.58 673.304 l 0,174,175 1236.64 624.131 1236.64 624.131 1194 580 c 0,176,177 1179 565 1179 565 1144.5 562 c 0,178,179 1110 559 1110 559 1089 571 c 0,180,181 1122 571 1122 571 1138.5 597.5 c 0,182,183 1145.85 609.313 1145.85 609.313 1145.96 618.841 c 0,184,185 1146.05 627.748 1146.05 627.748 1139.81 634.659 c 0,186,187 1137.75 636.938 1137.75 636.938 1135 639 c 0,188,189 1121.36 648.356 1121.36 648.356 1109.39 648.29 c 0,190,191 1090.64 648.186 1090.64 648.186 1076 625 c 0,192,193 1052 587.002 1052 587.002 1043 564 c 0,194,195 1041.99 559.967 1041.99 559.967 997 446.5 c 0,196,197 974.979 390.957 974.979 390.957 974.75 361.637 c 0,198,199 974.65 348.854 974.65 348.854 978.693 341.055 c 0,200,201 984.326 330.189 984.326 330.189 998 329 c 0,202,203 1023.15 329.34 l 0,204,205 1039.03 332.237 1039.03 332.237 1046.5 343 c 0,206,207 1059 361.014 1059 361.014 1071 397 c 0,208,209 1088.77 358.229 1088.77 358.229 1088.85 329.175 c 0,210,211 1088.93 304.269 1088.93 304.269 1076 286.5 c 0,212,213 1048 248.001 1048 248.001 1022 238 c 0,214,215 869.999 176 869.999 176 814.5 173 c 0,216,217 759 170 759 170 652 20 c 0,218,219 541 -136 541 -136 452.5 -121 c 0,220,221 364 -106 364 -106 334 -30 c 1,0,1 640 273 m 0,118,119 660 292 660 292 698.5 340 c 0,120,121 737 388 737 388 751 411 c 0,122,123 772 447 772 447 779 481.5 c 0,124,-1 794 558 l 0,125,126 807 630 807 630 855.5 644 c 0,127,128 904 658 904 658 919 635 c 0,129,130 875 635 875 635 860 607 c 0,131,132 850.854 589.926 850.854 589.926 850.631 578.431 c 0,133,134 853.459 566.831 l 0,135,136 854 566 l 0,137,138 884 522 884 522 929.5 597.5 c 0,139,140 975 673 975 673 981 742 c 0,141,142 979.57 790.509 l 0,143,144 974.2 842.742 974.2 842.742 953.5 917 c 0,145,146 929.084 1004.59 929.084 1004.59 891.747 1005.06 c 0,147,148 875.211 1001.29 l 0,149,150 872.143 999.898 872.143 999.898 869 998 c 0,151,152 845 983 845 983 857 959.5 c 0,153,154 869 936 869 936 905 927 c 0,155,156 883.461 918.384 883.461 918.384 866.562 918.432 c 0,157,158 828.539 918.538 828.539 918.538 814 962.5 c 0,159,160 793.002 1025.99 793.002 1025.99 784 1077 c 0,161,162 769.001 1151.99 769.001 1151.99 708.5 1199.5 c 0,163,164 648 1247.01 648 1247.01 578 1256.5 c 0,165,166 508 1265.99 508 1265.99 447.5 1234 c 0,167,168 387.002 1202.01 387.002 1202.01 374 1119 c 0,169,170 372.342 1087.63 l 0,171,172 373.653 1071.46 373.653 1071.46 380 1058.5 c 0,173,174 392 1034.01 392 1034.01 423 1042 c 0,175,176 440 1046.01 440 1046.01 435.5 1066 c 0,177,178 430.999 1086 430.999 1086 410 1101 c 0,179,180 433.116 1101.63 l 0,181,182 462.692 1097.49 462.692 1097.49 481 1066 c 0,183,184 489 1051 489 1051 494 1025 c 0,185,186 494.287 1001.71 l 0,187,188 491.796 985.017 491.796 985.017 482 966 c 0,189,190 413.999 836.997 413.999 836.997 395.5 680 c 0,191,192 383.413 577.424 383.413 577.424 383.492 512.842 c 0,193,194 383.533 478.573 383.533 478.573 387 455 c 0,195,196 402 350 402 350 439 346.5 c 0,197,198 476 343 476 343 482 379 c 0,199,200 486 415 486 415 435 415 c 0,201,202 439 427 439 427 456 428.5 c 0,203,204 473.001 430 473.001 430 484 433 c 0,205,206 538 442 538 442 549 386.5 c 0,207,208 560 331 560 331 570 296 c 0,209,210 578 263 578 263 600 259 c 0,211,212 622 255 622 255 640 273 c 0,118,119 EndSplineSet KernsSLIF: 122 -91 0 0 97 -150 0 0 EndChar StartChar: e Encoding: 101 101 54 Width: 1080 Flags: HMW HStem: 142 27<40 136.5> 177.5 172<205.5 798> 722 137<316 666> 1260.15 167.854<365 744> VStem: 114.5 149.5<412 1397> Fore 611 199 m 0,0,1 532.994 197.999 532.994 197.999 452 182 c 0,2,3 370.998 165.999 370.998 165.999 302 133 c 0,4,5 242 103 242 103 166 89.5 c 0,6,7 89.9995 76 89.9995 76 40 142 c 0,8,9 16.5184 172.707 16.5184 172.707 16.6003 201.057 c 0,10,11 16.6544 219.793 16.6544 219.793 27 237.5 c 0,12,13 49.0431 275.228 49.0431 275.228 99.8393 275.219 c 0,14,15 108.956 275.217 108.956 275.217 119 274 c 0,16,-1 84 260.5 l 0,17,18 68.7059 254.765 68.7059 254.765 68.6159 232.948 c 0,19,20 68.5882 226.235 68.5882 226.235 70 218 c 0,21,22 77.7819 168.715 77.7819 168.715 121.824 168.025 c 0,23,24 136.5 169 l 0,25,26 194 177 194 177 206 240 c 0,27,28 209.42 259.054 209.42 259.054 209.379 285.629 c 0,29,30 209.336 313.444 209.336 313.444 205.5 349.5 c 0,31,32 198 420 198 420 144 428 c 0,33,34 130.002 426.996 l 0,35,36 120.296 423.593 120.296 423.593 114.5 412 c 0,37,38 105.001 393 105.001 393 108 376 c 0,39,40 114 339 114 339 144 310 c 0,41,42 85.9995 325 85.9995 325 65 379 c 0,43,44 26 481 26 481 54.5 590 c 0,45,46 83.0006 699.003 83.0006 699.003 101 799 c 0,47,48 117.001 895 117.001 895 120 939.5 c 0,49,50 123 984 123 984 113 1080 c 0,51,52 102.999 1161 102.999 1161 66 1248 c 0,53,54 32.5449 1326.66 32.5449 1326.66 32.6099 1399.61 c 0,55,56 32.6168 1407.34 32.6168 1407.34 33 1415 c 0,57,58 35.9995 1475.99 35.9995 1475.99 75 1507 c 0,59,60 104.849 1532.01 104.849 1532.01 129.979 1532.28 c 0,61,62 149.015 1528.68 l 0,63,64 174.29 1518.42 174.29 1518.42 194 1479 c 0,65,66 174.301 1496.91 174.301 1496.91 155.139 1496.82 c 0,67,68 142.197 1496.77 142.197 1496.77 129.5 1488.5 c 0,69,70 98 1467.99 98 1467.99 114 1427 c 0,71,72 129.519 1384.33 129.519 1384.33 180 1384 c 0,73,74 230.015 1385.01 230.015 1385.01 264 1397 c 0,75,76 349.99 1424 349.99 1424 440.5 1495 c 0,77,78 517.902 1555.72 517.902 1555.72 599.319 1555.73 c 0,79,80 613.102 1555.74 613.102 1555.74 627 1554 c 0,81,82 663.003 1548 663.003 1548 683.5 1514 c 0,83,84 693.597 1497.25 693.597 1497.25 693.627 1480.75 c 0,85,86 693.657 1463.75 693.657 1463.75 683 1447 c 0,87,88 675.449 1501.53 675.449 1501.53 628.135 1501.87 c 0,89,90 619.051 1501.93 619.051 1501.93 608.5 1500 c 0,91,92 543 1488 543 1488 544 1449 c 0,93,94 544 1398.96 544 1398.96 594.427 1399.05 c 0,95,96 608.5 1399.07 608.5 1399.07 626.5 1403 c 0,97,98 708.714 1420.94 708.714 1420.94 744 1428 c 0,99,100 789.909 1436.98 789.909 1436.98 850.5 1445.5 c 0,101,102 898.275 1448.51 l 0,103,104 930.453 1447.79 930.453 1447.79 958 1439 c 0,105,106 1070.99 1404.01 1070.99 1404.01 1081 1291 c 0,107,108 1073.99 1330 1073.99 1330 1034 1364 c 0,109,110 994.899 1396.93 994.899 1396.93 940.501 1397.15 c 0,111,112 916.073 1397.25 916.073 1397.25 887.5 1390.5 c 0,113,114 798.009 1369.01 798.009 1369.01 749 1327 c 0,115,116 721.998 1304.99 721.998 1304.99 717.5 1274 c 0,117,118 718.413 1256.86 l 0,119,120 723.722 1238.24 723.722 1238.24 749 1227 c 0,121,122 777 1215 777 1215 812 1218 c 0,123,124 787.164 1197.3 787.164 1197.3 749.528 1197.34 c 0,125,126 705.755 1197.38 705.755 1197.38 643.5 1226 c 0,127,128 528.99 1279 528.99 1279 452 1279 c 0,129,130 393.915 1279 393.915 1279 365 1260.15 c 0,131,132 336.453 1241.55 336.453 1241.55 336.306 1204.56 c 0,133,134 336.246 1189.34 336.246 1189.34 341 1171 c 0,135,136 348.997 1138.01 348.997 1138.01 374.5 1092 c 0,137,138 389.671 1064.63 389.671 1064.63 389.799 1041.87 c 0,139,140 389.886 1026.37 389.886 1026.37 383 1013 c 0,141,142 362.985 972.016 362.985 972.016 319 972 c 0,143,144 342.462 1000.49 342.462 1000.49 342.676 1019.78 c 0,145,146 342.77 1028.23 342.77 1028.23 338.391 1034.92 c 0,147,148 334.882 1040.28 334.882 1040.28 328.5 1044.5 c 0,149,150 314.406 1053.82 314.406 1053.82 301.912 1054.03 c 0,151,152 287.322 1050.91 l 0,153,154 279.271 1047.18 279.271 1047.18 272 1039 c 0,155,156 233 997 233 997 254 925.5 c 0,157,158 275 854 275 854 342 860 c 0,159,160 401 865 401 865 445.5 876.5 c 0,161,162 490 888 490 888 544 908 c 0,163,164 611 932 611 932 698 901.5 c 0,165,166 769.056 876.59 769.056 876.59 769.404 808.654 c 0,167,168 769.482 793.41 769.482 793.41 766 776 c 0,169,170 758.999 814.001 758.999 814.001 733.5 841.5 c 0,171,172 714.8 861.667 714.8 861.667 687.227 861.667 c 0,173,174 677.2 861.667 677.2 861.667 666 859 c 0,175,176 633 850 633 850 614.5 819.5 c 0,177,178 596 789 596 789 590 759 c 0,179,180 573 675 573 675 546.5 621 c 0,181,182 520 567 520 567 416 594 c 0,183,184 492 614 492 614 492 650 c 0,185,186 492 714 492 714 427.5 721.5 c 0,187,188 363 729 363 729 316 722 c 0,189,190 256.001 712 256.001 712 255 658 c 0,191,192 252 612 252 612 282 609 c 0,193,194 312 606 312 606 307 663 c 0,195,196 347 619 347 619 347 589 c 0,197,198 345.999 539.999 345.999 539.999 318 514 c 0,199,200 290 488 290 488 290 451 c 0,201,202 290 385 290 385 327.5 389 c 0,203,204 365 393 365 393 414.5 417 c 0,205,206 464 441 464 441 512 461 c 0,207,208 529.829 468.428 529.829 468.428 544.07 468.407 c 0,209,210 568.171 468.371 568.171 468.371 582 447 c 0,211,212 611 399 611 399 569 385 c 0,213,214 574 412 574 412 544 406 c 0,215,216 494 394 494 394 527 349 c 0,217,218 550 318 550 318 607 318 c 0,219,220 664 318 664 318 694 336 c 0,221,222 738 361 738 361 769 401.5 c 0,223,224 800 442 800 442 845 464 c 0,225,226 890 487 890 487 934 439 c 0,227,228 954.533 416.6 954.533 416.6 954.813 395.507 c 0,229,230 951.306 377.599 l 0,231,232 945.296 362.968 945.296 362.968 929 349 c 0,233,234 934.5 365.5 934.5 365.5 934.563 377.5 c 0,235,236 934.661 396.45 934.661 396.45 921.2 404.178 c 0,237,238 911.841 409.551 911.841 409.551 895.928 409.5 c 0,239,240 891.247 409.484 891.247 409.484 886 409 c 0,241,242 837.001 403 837.001 403 831.5 357.5 c 0,243,244 830.802 321.967 l 0,245,246 833.038 298.338 833.038 298.338 843 279 c 0,247,248 862.999 236.001 862.999 236.001 911 201.5 c 0,249,250 959 167 959 167 990 131 c 0,251,252 1021.99 93.9995 1021.99 93.9995 1032 32.5 c 0,253,254 1042.01 -29 1042.01 -29 1008 -71 c 0,255,256 1011.87 -21.0033 l 0,257,258 1011.65 -0.13516 1011.65 -0.13516 1007.5 15 c 0,259,260 998.993 46.0079 998.993 46.0079 959 87 c 0,261,262 888.999 156.001 888.999 156.001 798 177.5 c 0,263,264 706.997 199 706.997 199 611 199 c 0,0,1 EndSplineSet KernsSLIF: 115 -78 0 0 EndChar StartChar: f Encoding: 102 102 20 Width: 1155 Flags: HMW HStem: 714 154<374 666> 1301 192<389 965> VStem: 130 185<147 1541> Fore 582 828 m 1,0,1 584 733 584 733 666 714 c 0,2,3 708 705 708 705 746 735 c 0,4,5 784 765 784 765 784 764 c 0,6,7 778 743 778 743 755 704 c 0,8,9 732 665 732 665 694 648 c 0,10,11 647 631 647 631 619 637 c 0,12,13 591 643 591 643 558 654 c 0,14,15 515 670 515 670 466.5 713.5 c 0,16,17 418 757 418 757 366 739 c 0,18,19 325 717 325 717 316.5 692.5 c 0,20,21 308 668 308 668 302 643 c 0,22,23 297 613 297 613 285 522 c 0,24,25 273 431 273 431 351 435 c 0,26,27 369.915 452.305 369.915 452.305 370.366 468.962 c 0,28,29 367.282 483.295 l 0,30,31 359.337 500.505 359.337 500.505 331 517 c 0,32,33 391 513 391 513 416 461 c 0,34,35 416 416 416 416 405 396.5 c 0,36,37 393.995 376.989 393.995 376.989 377 341 c 0,38,39 356 312 356 312 344.5 274.5 c 0,40,41 332.999 236.998 332.999 236.998 331 232 c 0,42,43 314.682 193.354 314.682 193.354 314.591 158.394 c 0,44,45 314.576 152.647 314.576 152.647 315 147 c 0,46,47 315 96 315 96 334.5 40.5 c 0,48,49 354 -15 354 -15 400 -50 c 0,50,51 347 -50 347 -50 312 10.5 c 0,52,53 276.998 71.004 276.998 71.004 263 112 c 0,54,55 254 179 254 179 231 202 c 0,56,57 208.001 224.999 208.001 224.999 181 232 c 0,58,59 178.002 232 178.002 232 149.5 225.5 c 0,60,61 121.991 219.226 121.991 219.226 122 168 c 0,62,-1 135 143.5 l 0,63,64 148.001 119 148.001 119 188 110 c 0,65,66 149 96.0005 149 96.0005 123.5 105 c 0,67,68 98 114 98 114 89 118 c 0,69,70 64.9997 130 64.9997 130 54.5 156.5 c 0,71,72 44 183.001 44 183.001 44 198 c 0,73,74 49 267 49 267 102 320 c 0,75,76 117 329 117 329 126 354.5 c 0,77,78 135 380 135 380 141 401 c 0,79,80 145.001 416 145.001 416 156 493 c 0,81,82 166.999 570 166.999 570 162 588 c 0,83,84 166.001 613 166.001 613 138 628 c 0,85,86 103.999 631 103.999 631 110 585.5 c 0,87,88 116 540 116 540 128 528 c 0,89,90 95 528 95 528 74 563 c 0,91,92 54 587 54 587 56.5 611 c 0,93,94 59 635 59 635 66 659 c 0,95,96 81 701 81 701 109.5 737 c 0,97,98 138.001 773.002 138.001 773.002 158 812 c 0,99,-1 166 870.5 l 0,100,101 165.864 898.01 l 0,102,103 162.564 919.121 162.564 919.121 149 937 c 0,104,105 146 943 146 943 107 1000 c 0,106,107 69.0001 1055.99 69.0001 1055.99 68 1057 c 0,108,109 61.9965 1067.01 61.9965 1067.01 51.5 1114.5 c 0,110,111 45.1768 1143.11 45.1768 1143.11 45.2001 1170.08 c 0,112,113 45.2154 1187.89 45.2154 1187.89 48 1205 c 0,114,115 48 1230 48 1230 73 1261.5 c 0,116,117 97.1265 1291.9 97.1265 1291.9 130 1292 c 0,118,119 113.751 1265.6 113.751 1265.6 113.775 1238.05 c 0,120,121 113.786 1224.91 113.786 1224.91 117.5 1211.5 c 0,122,123 126.928 1177.48 126.928 1177.48 158.199 1177.4 c 0,124,125 165.072 1177.38 165.072 1177.38 173 1179 c 0,126,127 185.001 1181 185.001 1181 200.5 1192.5 c 0,128,129 215.999 1204.01 215.999 1204.01 229 1245 c 0,130,131 235.158 1271.18 235.158 1271.18 235.095 1298.23 c 0,132,133 235.076 1306.33 235.076 1306.33 234.5 1314.5 c 0,134,135 231.999 1350.02 231.999 1350.02 228 1386 c 0,136,137 221.477 1421.88 221.477 1421.88 182.376 1422.52 c 0,138,139 163 1421 l 0,140,141 133 1404.12 133 1404.12 132.5 1389 c 0,142,143 134.001 1375 134.001 1375 147 1342 c 0,144,145 95.9994 1385.01 95.9994 1385.01 93 1440 c 0,146,147 93.4391 1473.01 l 0,148,149 98.921 1513.54 98.921 1513.54 130 1541 c 0,150,151 171.776 1564.77 171.776 1564.77 203.429 1564.68 c 0,152,153 215.728 1564.64 215.728 1564.64 226.5 1561 c 0,154,155 264.999 1548 264.999 1548 316 1525 c 0,156,-1 389 1493 l 0,157,158 421.777 1484.32 421.777 1484.32 455.251 1484.36 c 0,159,160 491.223 1484.4 491.223 1484.4 528 1494.5 c 0,161,162 599.07 1514.02 599.07 1514.02 668 1528 c 0,163,164 710.819 1534.32 710.819 1534.32 749.674 1534.23 c 0,165,166 766.196 1534.19 766.196 1534.19 782 1533 c 0,167,168 835.112 1528.99 835.112 1528.99 895 1519 c 0,169,170 974.006 1481.99 974.006 1481.99 984.5 1468.5 c 0,171,-1 1013 1433 l 0,172,173 995 1439 995 1439 983.5 1448 c 0,174,175 972.008 1456.99 972.008 1456.99 946 1461 c 0,176,177 879.001 1461 879.001 1461 874.5 1427.5 c 0,178,179 869.999 1394 869.999 1394 863 1394 c 0,180,181 876.001 1349 876.001 1349 893.5 1334 c 0,182,183 911 1319 911 1319 965 1301 c 0,184,185 1077 1307 1077 1307 1088.5 1356 c 0,186,187 1100.02 1405.08 1100.02 1405.08 1131 1499 c 0,188,189 1130.03 1493.23 1130.03 1493.23 1118 1410.5 c 0,190,191 1106 1327.99 1106 1327.99 1090 1313 c 0,192,193 1070.01 1284.99 1070.01 1284.99 1034.5 1268 c 0,194,195 998.966 1250.99 998.966 1250.99 982 1249 c 0,196,197 975 1247.01 975 1247.01 938.5 1247.5 c 0,198,199 902 1247.99 902 1247.99 892 1258 c 0,200,201 868.998 1267 868.998 1267 850.5 1279 c 0,202,-1 813 1303 l 0,203,204 687 1373.99 687 1373.99 634 1370.5 c 0,205,206 581.013 1367.01 581.013 1367.01 458 1313 c 0,207,208 436.041 1297.63 436.041 1297.63 436.049 1278.77 c 0,209,210 436.052 1271.87 436.052 1271.87 439 1264.5 c 0,211,212 450.002 1237 450.002 1237 477 1237 c 0,213,214 498 1238.01 498 1238.01 523 1241.5 c 0,215,216 547.997 1244.99 547.997 1244.99 569 1290 c 0,217,218 566 1278 566 1278 566.5 1251 c 0,219,220 563.262 1227.75 l 0,221,222 558.754 1212.71 558.754 1212.71 548 1198 c 0,223,224 480.001 1158 480.001 1158 407.5 1138 c 0,225,226 335.001 1118.01 335.001 1118.01 320 1014 c 0,227,228 311 981 311 981 330 935 c 0,229,230 349.001 888.999 349.001 888.999 374 868 c 0,231,232 386 846 386 846 444 856.5 c 0,233,234 502 867 502 867 510 909 c 0,235,236 513 960 513 960 484 966.5 c 0,237,238 455 973 455 973 425 958 c 0,239,240 442 990 442 990 466 1003 c 0,241,242 489.104 1011.77 489.104 1011.77 507.76 1011.91 c 0,243,244 521.278 1012.01 521.278 1012.01 532.462 1007.57 c 0,245,246 558.618 997.189 558.618 997.189 572 962 c 0,247,248 576 932 576 932 578 895.5 c 0,249,250 579.994 859.099 579.994 859.099 582 828 c 1,0,1 EndSplineSet KernsSLIF: 116 -130 0 0 45 -156 0 0 46 -247 0 0 44 -260 0 0 97 -427 0 0 EndChar StartChar: g Encoding: 103 103 21 Width: 1125 Flags: HW Fore 531 22 m 0,0,1 468 28 468 28 371.5 79 c 0,2,3 275.001 130 275.001 130 247 174 c 0,4,5 152.809 313.125 152.809 313.125 152.707 448.145 c 0,6,7 152.69 469.373 152.69 469.373 155 490.5 c 0,8,9 158.749 561.265 l 0,10,11 158.332 681.08 158.332 681.08 112 800 c 0,12,13 92.9999 848 92.9999 848 67 898.5 c 0,14,15 41 949 41 949 44 979 c 0,16,17 48 1033 48 1033 82 1051 c 0,18,19 102.837 1062.03 102.837 1062.03 121.423 1062.17 c 0,20,21 133.16 1062.26 133.16 1062.26 144 1058 c 0,22,23 112.999 1059.99 112.999 1059.99 98 1019 c 0,24,25 94.0204 1008.12 94.0204 1008.12 94.0529 999.568 c 0,26,27 94.1429 975.877 94.1429 975.877 125 970 c 0,28,29 148.219 968.74 l 0,30,31 178.448 972.724 178.448 972.724 178.718 1012.41 c 0,32,33 174.332 1048.98 l 0,34,35 173.496 1052.89 173.496 1052.89 172.5 1057 c 0,36,37 148.001 1157.99 148.001 1157.99 147 1186 c 0,38,39 142.997 1257.03 142.997 1257.03 140 1300 c 0,40,41 142.052 1332.31 l 0,42,43 148.094 1367.54 148.094 1367.54 170 1416 c 0,44,45 186.001 1453.01 186.001 1453.01 237 1453.5 c 0,46,47 288 1453.99 288 1453.99 314 1443 c 0,48,49 270 1440 270 1440 253.5 1416 c 0,50,51 246.487 1405.8 246.487 1405.8 246.248 1397.05 c 0,52,53 249.324 1385.34 l 0,54,55 252.262 1380.37 252.262 1380.37 258 1376 c 0,56,57 303 1338.01 303 1338.01 359 1428.5 c 0,58,59 398.875 1492.94 398.875 1492.94 399.203 1530.76 c 0,60,61 399.299 1541.98 399.299 1541.98 395.92 1550.85 c 0,62,63 394.69 1554.08 394.69 1554.08 393 1557 c 0,64,65 377.944 1581.09 377.944 1581.09 349.102 1581.24 c 0,66,67 330.49 1581.34 330.49 1581.34 305 1571 c 0,68,69 281.994 1560.99 281.994 1560.99 269 1536 c 0,70,71 256.013 1511.02 256.013 1511.02 241 1487 c 0,72,73 239.456 1510.96 l 0,74,75 242.089 1543.47 242.089 1543.47 266.5 1593 c 0,76,77 300.997 1663 300.997 1663 358 1666 c 0,78,79 404.325 1669.02 404.325 1669.02 472 1674.5 c 0,80,81 540.002 1680.01 540.002 1680.01 578 1685 c 0,82,83 636.783 1688.22 l 0,84,85 712.691 1687.58 712.691 1687.58 807.5 1664.5 c 0,86,87 941 1631.99 941 1631.99 1025 1609 c 0,88,89 1068.99 1597 1068.99 1597 1067 1540 c 0,90,91 1065.01 1483.01 1065.01 1483.01 1027 1459 c 0,92,93 1030.32 1478.67 l 0,94,95 1029.52 1500.41 1029.52 1500.41 1008 1519.5 c 0,96,97 994.786 1531.22 994.786 1531.22 981.755 1531.41 c 0,98,99 966.92 1527.85 l 0,100,101 956.905 1522.89 956.905 1522.89 947 1511 c 0,102,103 935.923 1498.81 935.923 1498.81 935.889 1480.19 c 0,104,105 935.861 1465.19 935.861 1465.19 943 1446 c 0,106,107 959 1402.99 959 1402.99 968 1374 c 0,108,109 993.985 1296.05 993.985 1296.05 1012.5 1250.5 c 0,110,111 1019.83 1232.48 1019.83 1232.48 1019.86 1208.73 c 0,112,113 1019.91 1172.52 1019.91 1172.52 1003 1123 c 0,114,115 984.998 1068.99 984.998 1068.99 941 1023.5 c 0,116,117 897 978 897 978 799 957 c 0,118,119 836 986 836 986 890.5 1011.5 c 0,120,121 941.81 1035.51 941.81 1035.51 942.154 1105.16 c 0,122,123 942.176 1109.49 942.176 1109.49 942 1114 c 0,124,125 939.001 1147.99 939.001 1147.99 897 1188 c 0,126,127 868.002 1215.62 868.002 1215.62 839 1215.59 c 0,128,129 826 1215.57 826 1215.57 813 1210 c 0,130,131 770.269 1191.95 770.269 1191.95 769.918 1154.53 c 0,132,133 769.899 1152.54 769.899 1152.54 770 1150.5 c 0,134,135 772 1110 772 1110 787 1072 c 0,136,137 745.147 1100.77 745.147 1100.77 745.109 1156.53 c 0,138,139 745.103 1164.73 745.103 1164.73 746 1173.5 c 0,140,141 753 1242 753 1242 778 1269 c 0,142,143 790 1282.01 790 1282.01 801.5 1306.5 c 0,144,145 810.671 1326.03 810.671 1326.03 810.62 1339.53 c 0,146,147 810.608 1342.96 810.608 1342.96 810 1346 c 0,148,149 797.998 1382.01 797.998 1382.01 746 1412.5 c 0,150,151 694 1442.99 694 1442.99 649 1408 c 0,152,153 626 1390 626 1390 635 1348 c 0,154,155 644 1306 644 1306 645 1279 c 0,156,157 642.621 1251.41 l 0,158,159 630.999 1203.16 630.999 1203.16 565 1196 c 0,160,161 541.843 1195.8 l 0,162,163 505.619 1202.1 505.619 1202.1 494 1254 c 0,164,165 530 1237.99 530 1237.99 554 1254 c 0,166,167 568.571 1263.72 568.571 1263.72 568.767 1282.28 c 0,168,169 564.575 1305.54 l 0,170,171 563.85 1307.73 563.85 1307.73 563 1310 c 0,172,173 556.002 1327.99 556.002 1327.99 512.5 1338 c 0,174,175 492.91 1342.51 492.91 1342.51 477.678 1342.55 c 0,176,177 459.093 1342.6 459.093 1342.6 447 1336 c 0,178,179 390.999 1306 390.999 1306 374 1189.5 c 0,180,181 368.629 1152.69 368.629 1152.69 368.648 1121.92 c 0,182,183 368.69 1055.3 368.69 1055.3 394 1017 c 0,184,185 445 939 445 939 481 878.5 c 0,186,187 517 818 517 818 484 752 c 0,188,189 474 732 474 732 427 722 c 0,190,191 394.04 718.32 l 0,192,193 373.463 718.785 373.463 718.785 362 729 c 0,194,195 408 737 408 737 416 767 c 0,196,197 418.16 790.251 l 0,198,199 414.789 827.474 414.789 827.474 362 843 c 0,200,201 342 849 342 849 308 846.5 c 0,202,203 274.001 844 274.001 844 249 803 c 0,204,205 235.692 781.805 235.692 781.805 235.746 730.244 c 0,206,207 235.801 677.194 235.801 677.194 250 592 c 0,208,209 278 424 278 424 392 394 c 0,210,211 452 377 452 377 502 407.5 c 0,212,213 552.003 438.002 552.003 438.002 597 455 c 0,214,215 692 489 692 489 726 461 c 0,216,217 743.193 445.649 743.193 445.649 743.419 427.659 c 0,218,219 739.897 410.197 l 0,220,221 738.664 407.132 738.664 407.132 737 404 c 0,222,223 720 372 720 372 689 374 c 0,224,225 706.383 386.233 706.383 386.233 706.771 397.844 c 0,226,227 703.446 408.525 l 0,228,229 702 410.5 l 0,230,231 689.827 425.717 689.827 425.717 679 426 c 0,232,233 636 414 636 414 641.5 387.5 c 0,234,235 647 361 647 361 668 350 c 0,236,237 682.869 341.783 682.869 341.783 698.428 341.834 c 0,238,239 722.631 341.913 722.631 341.913 748.5 362 c 0,240,241 791.001 395.001 791.001 395.001 814 434 c 0,242,243 822.957 450.72 822.957 450.72 823 472.252 c 0,244,245 823.029 486.78 823.029 486.78 819 503.5 c 0,246,247 809 545 809 545 785 554 c 0,248,249 707 584 707 584 645.5 577 c 0,250,251 584 570 584 570 500 576 c 0,252,253 381.002 583.999 381.002 583.999 333 617.5 c 0,254,255 286.238 650.135 286.238 650.135 286 695 c 0,256,257 286 715 286 715 301.5 741.5 c 0,258,259 316.999 767.999 316.999 767.999 367 775 c 0,260,261 324 758 324 758 317.5 716 c 0,262,263 311 674 311 674 349 656 c 0,264,265 431 614 431 614 521.5 661 c 0,266,267 612 708 612 708 643 751 c 0,268,269 677 800 677 800 738 807 c 0,270,271 784.905 809.042 l 0,272,273 808.475 807.683 808.475 807.683 820 800 c 0,274,275 834.999 789.001 834.999 789.001 845 763 c 0,276,277 848.309 744.846 l 0,278,279 847.766 729.405 847.766 729.405 835 716 c 0,280,281 835 760 835 760 795.5 755 c 0,282,283 756 750 756 750 755 735 c 0,284,285 756.786 713.323 l 0,286,287 762.156 693.016 762.156 693.016 781.5 674 c 0,288,289 811 645 811 645 871 648 c 0,290,291 910.248 645.529 l 0,292,293 947.216 639.656 947.216 639.656 986.5 620.5 c 0,294,295 1047.01 590.994 1047.01 590.994 1052 558 c 0,296,297 1062.99 471 1062.99 471 1001 471 c 0,298,299 1019 489 1019 489 1008.5 504 c 0,300,301 998 519 998 519 980 512 c 0,302,303 956 500 956 500 964.5 472.5 c 0,304,305 973 445 973 445 979 421 c 0,306,307 1007 296 1007 296 995 216.5 c 0,308,309 983 137 983 137 959 119 c 0,310,311 926 92 926 92 878 77.5 c 0,312,313 830 62.9999 830 62.9999 772 97 c 0,314,315 752.299 108.492 752.299 108.492 752.139 146.266 c 0,316,317 752.105 154.507 752.105 154.507 753 164 c 0,318,319 757.001 139.999 757.001 139.999 788 135 c 0,320,321 803.325 136.102 l 0,322,323 822.734 142.8 822.734 142.8 833 178 c 0,324,325 833.161 192.353 l 0,326,327 828.613 207.514 828.613 207.514 801.5 213.5 c 0,328,329 763 222.001 763 222.001 712 219.5 c 0,330,331 660.992 216.999 660.992 216.999 615.5 208.5 c 0,332,333 569.999 199.999 569.999 199.999 564 194 c 0,334,335 540 166.999 540 166.999 539.5 154 c 0,336,337 545.209 121.479 l 0,338,339 547.604 112.321 547.604 112.321 551 101 c 0,340,341 563 56 563 56 616.5 56.5 c 0,342,343 670 57 670 57 706 87 c 0,344,345 679 21 679 21 608.5 21 c 0,346,347 538 21 538 21 531 22 c 0,0,1 EndSplineSet EndChar StartChar: h Encoding: 104 104 22 Width: 1191 Flags: HMW HStem: 703 272.5<432 788> VStem: 135 206<140 1374> 826 179<65 1404> Fore 127 803.5 m 128,-1,0 68.0001 857 68.0001 857 53 931 c 0,1,2 49.5493 964.928 l 0,3,4 50.165 1001.61 50.165 1001.61 70.5 1034 c 0,5,6 98.0227 1077.85 98.0227 1077.85 139.03 1078.18 c 0,7,8 141.981 1078.2 141.981 1078.2 145 1078 c 0,9,10 181 1075 181 1075 181 1040 c 0,11,12 169.272 1049.99 169.272 1049.99 158.394 1049.98 c 0,13,14 144.227 1049.97 144.227 1049.97 131.5 1033 c 0,15,16 109 1003 109 1003 130 971 c 0,17,18 136.001 959.999 136.001 959.999 173.5 956.5 c 0,19,20 189.848 958.247 l 0,21,22 212.456 966.35 212.456 966.35 217 1008 c 0,23,24 225.997 1101.98 225.997 1101.98 239.5 1188.5 c 0,25,26 244.674 1221.65 244.674 1221.65 244.634 1246.07 c 0,27,28 244.568 1285.35 244.568 1285.35 231 1302 c 0,29,30 225.057 1308.34 225.057 1308.34 215.502 1308.4 c 0,31,32 200.945 1308.49 200.945 1308.49 178 1294 c 0,33,34 157.734 1281.2 157.734 1281.2 157.662 1260.72 c 0,35,36 157.6 1242.8 157.6 1242.8 173 1219 c 0,37,38 130.636 1246.72 130.636 1246.72 130.124 1278.13 c 0,39,40 133.771 1297.81 l 0,41,42 141.244 1317.48 141.244 1317.48 164 1338.5 c 0,43,44 235.991 1404.99 235.991 1404.99 264 1467 c 0,45,46 292.005 1530.01 292.005 1530.01 337.5 1584.5 c 0,47,48 378.252 1633.31 378.252 1633.31 445.867 1633.59 c 0,49,50 453.751 1633.63 453.751 1633.63 462 1633 c 0,51,52 492.977 1622.01 492.977 1622.01 512.5 1606.5 c 0,53,54 532 1591.01 532 1591.01 544 1548 c 0,55,56 540.999 1565 540.999 1565 476 1596.5 c 0,57,58 461.045 1603.75 461.045 1603.75 446.989 1603.66 c 0,59,60 399.957 1603.38 399.957 1603.38 363 1521 c 0,61,62 335 1458 335 1458 341 1374 c 0,63,64 345.999 1298.01 345.999 1298.01 401 1223.5 c 0,65,66 456 1148.99 456 1148.99 438 1078 c 0,67,68 432 1055.01 432 1055.01 392 1046.5 c 0,69,70 356.819 1042.14 l 0,71,72 345.962 1042.39 345.962 1042.39 341 1046 c 0,73,74 372 1050.01 372 1050.01 383 1068.5 c 0,75,76 394 1087 394 1087 394 1089 c 0,77,78 391.033 1111.52 l 0,79,80 384.862 1131.96 384.862 1131.96 366 1150.5 c 0,81,82 337 1179 337 1179 319 1143 c 0,83,84 308 1120 308 1120 306 1063 c 0,85,86 304 1007.01 304 1007.01 304 1006 c 0,87,88 311.001 954.998 311.001 954.998 331.5 922 c 0,89,90 352 889 352 889 355 888 c 0,91,92 376 870 376 870 401 872 c 0,93,94 426 874 426 874 438 880 c 0,95,96 530 922 530 922 561.5 962 c 0,97,98 593 1002 593 1002 665 995 c 0,99,100 690 984 690 984 702.5 966.5 c 0,101,102 709.4 956.839 709.4 956.839 709.444 938.8 c 0,103,104 709.48 924.16 709.48 924.16 705 904 c 0,105,106 693 873 693 873 662 868 c 0,107,108 677 883 677 883 670 902.5 c 0,109,110 663 922 663 922 642 907 c 0,111,112 616.157 887.496 616.157 887.496 616.111 872.628 c 0,113,114 616.062 857.004 616.062 857.004 644.5 846.5 c 0,115,116 700 826 700 826 736 829 c 0,117,118 749 829 749 829 796 843 c 0,119,120 828.07 852.553 828.07 852.553 828.48 888.646 c 0,121,122 824.428 919.069 l 0,123,124 823.356 923.414 823.356 923.414 822 928 c 0,125,126 813 955 813 955 788 975.5 c 0,127,128 763 996 763 996 760 1030 c 0,129,130 761.054 1063.96 l 0,131,132 765.883 1095.56 765.883 1095.56 786 1115 c 0,133,134 801 1130 801 1130 836 1139 c 0,135,136 856.93 1140.92 l 0,137,138 879.097 1138.97 879.097 1138.97 897 1119 c 0,139,140 870.531 1116.71 l 0,141,142 834.782 1108.19 834.782 1108.19 828 1069 c 0,143,144 819 1016.99 819 1016.99 886 1003 c 0,145,146 901.604 1002.82 l 0,147,148 929.362 1010.06 929.362 1010.06 938.5 1076 c 0,149,150 947.659 1142.1 947.659 1142.1 947.621 1174.59 c 0,151,152 947.611 1182.89 947.611 1182.89 947 1189 c 0,153,154 941 1229.01 941 1229.01 888.5 1304.5 c 0,155,156 836.007 1379.99 836.007 1379.99 826 1404 c 0,157,158 814 1428 814 1428 803.5 1483.5 c 0,159,160 801.65 1512.46 l 0,161,162 804.299 1550.56 804.299 1550.56 835 1582 c 0,163,164 857.909 1604.91 857.909 1604.91 909.781 1604.88 c 0,165,166 928.085 1604.87 928.085 1604.87 950 1602 c 0,167,168 1004 1593 1004 1593 1051 1552 c 0,169,170 1042.01 1552 1042.01 1552 1017 1564 c 0,171,172 991.995 1576 991.995 1576 974 1576 c 0,173,174 922.993 1576 922.993 1576 888.5 1552.5 c 0,175,176 854 1528.99 854 1528.99 866 1488 c 0,177,178 895.617 1379.71 895.617 1379.71 952.652 1379.79 c 0,179,180 957.237 1379.79 957.237 1379.79 962 1380.5 c 0,181,182 1026 1389.99 1026 1389.99 1031 1408 c 0,183,184 1035.9 1426.38 1035.9 1426.38 1035.96 1441.59 c 0,185,186 1036.05 1463.62 1036.05 1463.62 1026 1479 c 0,187,188 1008.99 1505.02 1008.99 1505.02 988 1531 c 0,189,190 1019.01 1531 1019.01 1531 1055.5 1484.5 c 0,191,192 1092 1437.99 1092 1437.99 1092 1410 c 0,193,194 1092 1347.98 1092 1347.98 1079 1275 c 0,195,196 1075.15 1253.41 1075.15 1253.41 1075.25 1228.33 c 0,197,198 1075.46 1168.59 1075.46 1168.59 1098 1089 c 0,199,-1 1121 1002 l 0,200,201 1132 959.981 1132 959.981 1132 918 c 0,202,203 1132 897.007 1132 897.007 1110.5 867 c 0,204,205 1089.01 837 1089.01 837 1041 834 c 0,206,207 1041 835.996 1041 835.996 1070 858 c 0,208,209 1089.94 873.128 1089.94 873.128 1090.02 897.703 c 0,210,211 1090.06 908.876 1090.06 908.876 1086 922 c 0,212,213 1080.13 929.035 1080.13 929.035 1071.18 929.025 c 0,214,215 1064.86 929.017 1064.86 929.017 1057 925.5 c 0,216,217 1037.99 917 1037.99 917 1027 896 c 0,218,219 1017 877.014 1017 877.014 1008 827 c 0,220,221 999 777 999 777 1002 750 c 0,222,223 1008 693 1008 693 1029 649 c 0,224,225 1049.99 605.018 1049.99 605.018 1057 568 c 0,226,227 1065.62 522.606 1065.62 522.606 1065.65 492.89 c 0,228,229 1065.68 470.899 1065.68 470.899 1061 457.5 c 0,230,231 1050.01 426 1050.01 426 1037 410 c 0,232,233 1026.99 403.997 1026.99 403.997 1003.5 399.5 c 0,234,235 980 395 980 395 956 412 c 0,236,237 996 414 996 414 1007 431 c 0,238,-1 1013.5 458.5 l 0,239,240 1019.99 486 1019.99 486 976 492 c 0,241,242 958 493 958 493 938 468 c 0,243,244 918 443 918 443 924 368 c 0,245,246 930 275 930 275 958.5 213.5 c 0,247,248 987 152 987 152 1005 65 c 0,249,250 1015.71 15.0325 1015.71 15.0325 1015.71 -24.0976 c 0,251,252 1015.72 -116.534 1015.72 -116.534 956 -148.5 c 0,253,254 871.999 -194 871.999 -194 871 -194 c 0,255,256 807.664 -196.104 l 0,257,258 805.354 -196.059 805.354 -196.059 803 -196 c 0,259,260 762.999 -194.999 762.999 -194.999 733 -171 c 0,261,262 769.5 -185 769.5 -185 803 -185 c 0,263,264 836.5 -185 836.5 -185 867 -171 c 0,265,266 916 -147 916 -147 946.5 -108 c 0,267,268 977 -69 977 -69 938 -15 c 0,269,270 880 65 880 65 804.5 82 c 0,271,272 729 98.9999 729 98.9999 711 115 c 0,273,274 659.39 157.887 659.39 157.887 659.297 204.209 c 0,275,276 659.263 221.612 659.263 221.612 666.5 239.5 c 0,277,278 692.165 302.937 692.165 302.937 729 303 c 0,279,280 755 301 755 301 782 267 c 0,281,282 765.311 274.586 765.311 274.586 752.937 274.547 c 0,283,284 732.689 274.483 732.689 274.483 724 254 c 0,285,286 717.578 239.322 717.578 239.322 717.375 227.964 c 0,287,288 720.614 212.702 l 0,289,290 727.42 199.291 727.42 199.291 748.5 193.5 c 0,291,292 777.978 188.543 l 0,293,294 794 188.725 794 188.725 794 200 c 0,295,296 804.307 216.492 804.307 216.492 804.227 252.578 c 0,297,298 804.19 269.008 804.19 269.008 802 289.5 c 0,299,300 795 355 795 355 790 384 c 0,301,302 743 459 743 459 706 463 c 0,303,304 669 467 669 467 646 494 c 0,305,306 608 533 608 533 605 558 c 0,307,308 605.804 586.508 l 0,309,310 607.893 599.607 607.893 599.607 613 614 c 0,311,312 633 671 633 671 688 646 c 0,313,314 671 636.999 671 636.999 664.5 615.5 c 0,315,316 658 594 658 594 687 597 c 0,317,318 715 600 715 600 738 611.5 c 0,319,320 755.674 620.337 755.674 620.337 755.633 643.64 c 0,321,322 755.621 650.663 755.621 650.663 754 659 c 0,323,324 738 743 738 743 618 748.5 c 0,325,326 536.449 748.89 l 0,327,328 483.089 746.152 483.089 746.152 460 734 c 0,329,330 445 715 445 715 432 703 c 0,331,332 419 691 419 691 438 619 c 0,333,334 443 598 443 598 450 559 c 0,335,336 450.723 535.595 l 0,337,338 447.5 513.776 447.5 513.776 428 501 c 0,339,340 405.482 487.63 405.482 487.63 374.545 487.63 c 0,341,342 361.519 487.63 361.519 487.63 347 490 c 0,343,344 377 495 377 495 395.5 526.5 c 0,345,346 414 558 414 558 369 566 c 0,347,348 349 569 349 569 332.5 547 c 0,349,350 316 525 316 525 316 498 c 0,351,352 313 405 313 405 348 338.5 c 0,353,354 383 272 383 272 375 218 c 0,355,356 369 179 369 179 356 170 c 0,357,358 343 161.001 343 161.001 316 154 c 0,359,360 321.999 174.997 321.999 174.997 328.5 188 c 0,361,362 335 201.001 335 201.001 317 218 c 0,363,364 311.667 222.445 311.667 222.445 302.185 222.543 c 0,365,366 277.896 218.022 l 0,367,368 275.037 217.104 275.037 217.104 272 216 c 0,369,370 233.492 201.671 233.492 201.671 233.078 159.275 c 0,371,372 233.03 154.328 233.03 154.328 233.5 149 c 0,373,374 238 98 238 98 256 85 c 0,375,376 275.001 69.9993 275.001 69.9993 307.5 58 c 0,377,378 318.436 53.9621 318.436 53.9621 333.958 54.0004 c 0,379,380 364.564 54.0758 364.564 54.0758 413 70 c 0,381,-1 455 97 l 0,382,383 497 124 497 124 536 214 c 0,384,385 507.999 117.999 507.999 117.999 450 58 c 0,386,387 431 37 431 37 345.5 14 c 0,388,389 260 -8.99999 260 -8.99999 185 48 c 0,390,391 136.001 84.9993 136.001 84.9993 135 140 c 0,392,393 136 210 l 0,394,395 139 246.001 139 246.001 179 333 c 0,396,397 219 419.999 219 419.999 219 429 c 0,398,399 219 448.008 219 448.008 224.5 542 c 0,400,401 225.127 611.157 l 0,402,403 222.808 651.23 222.808 651.23 213 672 c 0,404,405 186 749.999 186 749.999 127 803.5 c 128,-1,0 EndSplineSet KernsSLIF: 97 -104 0 0 EndChar StartChar: i Encoding: 105 105 52 Width: 526 Flags: HMW VStem: 191.5 208.5<315 1320> Fore 205 552 m 0,0,1 199 642 199 642 115 721.5 c 0,2,3 31 801 31 801 50 897 c 0,4,5 62 963 62 963 107.5 979 c 0,6,7 126.311 982.037 l 0,8,9 158.637 980.476 158.637 980.476 179 928 c 0,10,-1 170 941 l 0,11,12 150.714 957.786 150.714 957.786 136.276 958.117 c 0,13,14 124.188 955.041 l 0,15,16 107.697 945.447 107.697 945.447 100 906 c 0,17,18 83.9999 824 83.9999 824 177 839 c 0,19,20 211.046 843.346 211.046 843.346 211.247 915.645 c 0,21,22 211.323 943.154 211.323 943.154 206.5 980.5 c 0,23,24 188.999 1116 188.999 1116 169 1146 c 0,25,26 113.997 1227 113.997 1227 78.5 1264.5 c 0,27,28 43 1302 43 1302 52 1362 c 0,29,30 65.9993 1475.99 65.9993 1475.99 194 1510 c 0,31,32 131 1477 131 1477 115 1421.5 c 0,33,34 105.515 1388.6 105.515 1388.6 105.519 1365.36 c 0,35,36 105.521 1349.4 105.521 1349.4 110 1338 c 0,37,38 126.105 1312.23 126.105 1312.23 155.28 1312.19 c 0,39,40 171.396 1312.17 171.396 1312.17 191.5 1320 c 0,41,42 248.008 1342.01 248.008 1342.01 260 1354 c 0,43,44 351 1459 351 1459 318.5 1576 c 0,45,46 285.999 1693 285.999 1693 138 1732 c 0,47,48 229.001 1732 229.001 1732 307.5 1652.5 c 0,49,50 386 1573 386 1573 395 1486 c 0,51,52 399.999 1414.01 399.999 1414.01 419.5 1348.5 c 0,53,54 439.003 1282.98 439.003 1282.98 454 1208 c 0,55,56 460.003 1169.99 460.003 1169.99 470.5 1139.5 c 0,57,58 480.116 1111.57 480.116 1111.57 480 1092 c 0,59,60 472 1015 472 1015 391 1015 c 0,61,62 426 1042 426 1042 434 1089 c 0,63,64 433.926 1106.55 l 0,65,66 427.642 1134.17 427.642 1134.17 377.246 1134.08 c 0,67,68 374.678 1134.08 374.678 1134.08 372 1134 c 0,69,70 313 1138.99 313 1138.99 322.5 1005 c 0,71,72 331.999 871.009 331.999 871.009 335 845 c 0,73,74 340 786 340 786 385 790.5 c 0,75,76 430 795 430 795 409 870 c 0,77,78 403 889 403 889 371 925 c 0,79,80 383 918 383 918 396 908.5 c 0,81,82 409 899 409 899 430 872 c 0,83,84 502 780 502 780 421 671 c 0,85,86 340 562 340 562 349 454 c 0,87,88 355 373 355 373 400 315 c 0,89,90 445 257 445 257 448 179 c 0,91,92 450 117.999 450 117.999 396 98 c 0,93,94 342 78.0001 342 78.0001 290 81 c 0,95,96 354.192 91.6986 354.192 91.6986 354.5 154 c 0,97,98 353 216 353 216 282 222 c 0,99,100 255.63 220.575 l 0,101,102 205.536 210.268 205.536 210.268 205.16 138.129 c 0,103,104 205.095 125.728 205.095 125.728 206.5 111.5 c 0,105,106 218.001 -5.00005 218.001 -5.00005 247 -50 c 0,107,108 286 -113 286 -113 340.5 -144.5 c 0,109,110 395.002 -176.002 395.002 -176.002 422 -201 c 0,111,112 371.997 -183.999 371.997 -183.999 343 -169.5 c 0,113,114 313.991 -154.995 313.991 -154.995 275 -130 c 0,115,116 275 -129 275 -129 243 -97.5 c 0,117,118 210.998 -65.998 210.998 -65.998 194 -32 c 0,119,120 157 40.9986 157 40.9986 145 119 c 0,121,122 142.267 162.201 l 0,123,124 143.819 218.362 143.819 218.362 172 274 c 0,125,126 202.001 337.001 202.001 337.001 205.5 410.5 c 0,127,128 206.608 515.08 l 0,129,130 206.074 533.739 206.074 533.739 205 552 c 0,0,1 EndSplineSet EndChar StartChar: j Encoding: 106 106 64 Width: 1080 Flags: MW HStem: -47.5 237.5<360.5 947> 1275.5 183.5<208 649> VStem: 252 108.5<-47.5 596> 669 237.5<211 1492.5> Fore 255 -50 m 0,0,1 219 -44 219 -44 180 -8 c 0,2,3 140.999 28.0006 140.999 28.0006 130 92 c 0,4,5 161.001 39 161.001 39 184 36 c 0,6,7 226 27 226 27 244 53 c 0,8,9 262 78.9999 262 78.9999 262 117 c 0,10,11 262 170.001 262 170.001 215.5 215.5 c 0,12,13 195.259 235.306 195.259 235.306 184.586 235.69 c 0,14,15 177.625 232.939 l 0,16,17 172.716 227.713 172.716 227.713 172.683 212.589 c 0,18,19 172.675 208.633 172.675 208.633 173 204 c 0,20,21 175.94 158.921 175.94 158.921 220 154 c 0,22,23 205.32 137.485 205.32 137.485 189.331 137.245 c 0,24,25 173.596 140.802 l 0,26,27 171.063 141.962 171.063 141.962 168.5 143.5 c 0,28,29 141 160 141 160 132 177 c 0,30,31 116.083 207.737 116.083 207.737 116.132 244.8 c 0,32,33 116.173 275.264 116.173 275.264 127 310 c 0,34,35 149.002 388.004 149.002 388.004 183 459.5 c 0,36,37 217.001 531 217.001 531 252 596 c 0,38,39 300 686 300 686 385 763.5 c 0,40,41 470 841 470 841 572 865 c 0,42,43 452 817 452 817 372 659 c 0,44,45 292 501 292 501 319 377 c 0,46,47 327 335 327 335 358 309.5 c 0,48,49 389 284 389 284 418 317 c 0,50,51 439 340 439 340 437 371.5 c 0,52,53 435 403 435 403 428 421 c 0,54,55 415 445 415 445 383 459 c 0,56,57 427 468 427 468 457 437.5 c 0,58,59 487 407 487 407 493 379 c 0,60,61 493.982 342.219 l 0,62,63 493.618 336.582 493.618 336.582 493 330.5 c 0,64,65 490 301 490 301 490 290 c 0,66,67 485 218 485 218 501.5 197 c 0,68,69 518 176 518 176 550 167 c 0,70,71 568.655 161.454 568.655 161.454 585.468 161.5 c 0,72,73 635.344 161.638 635.344 161.638 669 211 c 0,74,75 699 253 699 253 713.5 309.5 c 0,76,77 727.999 365.993 727.999 365.993 735 420 c 0,78,79 737.068 472.341 l 0,80,81 737.037 473.416 737.037 473.416 737 474.5 c 0,82,83 736 504 736 504 706 504 c 0,84,85 677 504 677 504 676 481 c 0,86,87 678.327 455.139 l 0,88,89 680.053 448.527 680.053 448.527 683 443 c 0,90,91 665 443 665 443 646 455 c 0,92,93 627 466.999 627 466.999 626 516 c 0,94,95 625 546 625 546 644 570.5 c 0,96,97 662.998 594.996 662.998 594.996 676 623 c 0,98,99 709.998 696.995 709.998 696.995 715.5 722.5 c 0,100,101 721 748 721 748 717 807 c 0,102,103 712 871 712 871 633 960 c 0,104,105 593.041 1005.01 593.041 1005.01 592.994 1048.5 c 0,106,107 592.948 1090.98 592.948 1090.98 631 1132 c 0,108,109 641.561 1144.18 641.561 1144.18 666.649 1144.16 c 0,110,111 672.436 1144.16 672.436 1144.16 679 1143.5 c 0,112,113 714 1140.01 714 1140.01 722 1098 c 0,114,115 704 1108.99 704 1108.99 683 1104 c 0,116,117 662 1099.01 662 1099.01 662 1084 c 0,118,119 662 1042.15 662 1042.15 683.378 1041.11 c 0,120,121 695 1043 l 0,122,123 727.992 1053.99 727.992 1053.99 746 1072 c 0,124,125 770 1094.01 770 1094.01 774 1189 c 0,126,127 773.549 1259.71 l 0,128,129 770.677 1299.08 770.677 1299.08 761 1319 c 0,130,131 752.033 1336.18 752.033 1336.18 732.184 1336.34 c 0,132,133 725.465 1336.4 725.465 1336.4 717.5 1334.5 c 0,134,135 686 1327 686 1327 685 1312 c 0,136,137 686.41 1290.57 l 0,138,139 690.959 1275 690.959 1275 707.5 1275 c 0,140,141 733 1275 733 1275 744 1284 c 0,142,143 742.032 1266.13 l 0,144,145 737.373 1252.41 737.373 1252.41 722.5 1244.5 c 0,146,147 704.631 1235 704.631 1235 692.267 1235.03 c 0,148,149 688.359 1235.04 688.359 1235.04 685 1236 c 0,150,151 637 1246.01 637 1246.01 605.5 1276.5 c 0,152,153 573.985 1307.01 573.985 1307.01 541 1328 c 0,154,155 501.957 1352.08 501.957 1352.08 460.364 1352.02 c 0,156,157 438.049 1351.98 438.049 1351.98 415 1345 c 0,158,159 349.045 1325.02 349.045 1325.02 313 1310 c 0,160,161 268 1290.99 268 1290.99 208 1275.5 c 0,162,163 154.836 1261.77 154.836 1261.77 133.861 1261.77 c 0,164,165 131.164 1261.77 131.164 1261.77 129 1262 c 0,166,167 44.9994 1268 44.9994 1268 35.5 1354.5 c 0,168,169 35.3657 1387.6 l 0,170,171 42.3818 1445.56 42.3818 1445.56 105 1463 c 0,172,173 85.0001 1448 85.0001 1448 66.5 1410.5 c 0,174,175 48 1373 48 1373 83 1337 c 0,176,177 101.794 1316.6 101.794 1316.6 129.668 1316.66 c 0,178,179 153.708 1316.72 153.708 1316.72 184.5 1332 c 0,180,181 250.996 1365 250.996 1365 271 1397 c 0,182,183 317 1470.99 317 1470.99 305.5 1493 c 0,184,185 296.454 1510.31 296.454 1510.31 278.433 1510.29 c 0,186,187 273.547 1510.28 273.547 1510.28 268 1509 c 0,188,189 262.002 1507.01 262.002 1507.01 259 1493 c 0,190,191 259.794 1481.77 l 0,192,193 262.522 1475.09 262.522 1475.09 271 1470 c 0,194,195 256.877 1463.14 256.877 1463.14 244.871 1463.2 c 0,196,197 227.122 1463.29 227.122 1463.29 214 1478.5 c 0,198,199 198.496 1496.47 198.496 1496.47 198.388 1526.11 c 0,200,201 198.342 1538.53 198.342 1538.53 201 1553 c 0,202,203 207.001 1586.01 207.001 1586.01 242 1595.5 c 0,204,205 266.917 1602.26 266.917 1602.26 282.695 1602.19 c 0,206,207 289.097 1602.16 289.097 1602.16 294 1601 c 0,208,209 387 1574 387 1574 463.5 1518.5 c 0,210,211 539.993 1463.01 539.993 1463.01 649 1459 c 0,212,213 689 1457.01 689 1457.01 755 1462 c 0,214,215 821 1466.99 821 1466.99 821 1518 c 0,216,217 821 1536 821 1536 791.5 1551 c 0,218,219 770.962 1561.44 770.962 1561.44 759.876 1561.71 c 0,220,221 752 1560 l 0,222,223 728.999 1546.99 728.999 1546.99 728.5 1532 c 0,224,225 730 1495 l 0,226,227 707.38 1502.02 707.38 1502.02 706.967 1528.51 c 0,228,229 708.5 1545 l 0,230,231 716 1585.99 716 1585.99 742 1599 c 0,232,233 772 1614 772 1614 815 1606.5 c 0,234,235 858 1599 858 1599 872 1578 c 0,236,237 903 1528.99 903 1528.99 906.5 1492.5 c 0,238,239 910 1456 910 1456 910 1399 c 0,240,-1 898.5 1243 l 0,241,242 896.911 1175.05 l 0,243,244 898.939 1126.57 898.939 1126.57 912 1098 c 0,245,246 927.997 1059.01 927.997 1059.01 948.5 1028 c 0,247,248 969.009 996.982 969.009 996.982 985 968 c 0,249,250 1005.99 929.012 1005.99 929.012 1017.5 836.5 c 0,251,252 1020.61 785.11 l 0,253,254 1019.37 739.187 1019.37 739.187 999 729 c 0,255,256 996.499 765.333 l 0,257,258 990.165 800.003 990.165 800.003 968.5 828 c 0,259,260 952.652 848.479 952.652 848.479 937.876 848.987 c 0,261,262 925.717 845.927 l 0,263,264 916.644 840.966 916.644 840.966 908 828 c 0,265,266 890 801 890 801 874 737 c 0,267,268 869.307 718.227 869.307 718.227 869.26 704.013 c 0,269,270 869.16 673.848 869.16 673.848 889.99 664.225 c 0,271,272 892.805 662.925 892.805 662.925 896 662 c 0,273,274 915.755 658.584 l 0,275,276 933.115 659.596 933.115 659.596 937.5 679.5 c 0,277,278 938.669 701.65 l 0,279,280 936.562 720.529 936.562 720.529 924 740 c 0,281,282 950 740 950 740 966 706 c 0,283,284 998 636 998 636 940.5 543 c 0,285,286 883 450 883 450 858 387 c 0,287,288 843 349.999 843 349.999 838.5 301 c 0,289,290 834 252 834 252 834 216 c 0,291,292 834 203.999 834 203.999 842.5 187 c 0,293,294 847.793 176.415 847.793 176.415 856.768 175.91 c 0,295,296 869 179 l 0,297,298 896.475 191.623 896.475 191.623 896.655 213.346 c 0,299,300 896.718 220.876 896.718 220.876 893.5 229.5 c 0,301,302 881 262.999 881 262.999 863 279 c 0,303,304 874.769 279.858 l 0,305,306 891.15 276.301 891.15 276.301 914.5 249 c 0,307,308 947 211.001 947 211.001 947 190 c 0,309,310 947 156.003 947 156.003 936 104 c 0,311,312 925 51.9999 925 51.9999 886 41 c 0,313,314 856.875 32.6783 856.875 32.6783 826.709 32.6667 c 0,315,316 820.626 32.6643 820.626 32.6643 814.5 33 c 0,317,318 778 35 778 35 742 34 c 0,319,320 670 25 670 25 596.5 17.5 c 0,321,322 523 10 523 10 459 -15 c 0,323,324 406.003 -35.9992 406.003 -35.9992 360.5 -47.5 c 0,325,326 315 -59 315 -59 255 -50 c 0,0,1 EndSplineSet EndChar StartChar: k Encoding: 107 107 23 Width: 1113 Flags: HMW VStem: 40.7998 249.9<-11.0498 1388.9> Fore 542.3 268.6 m 0,0,1 502.35 267.749 502.35 267.749 527 232.9 c 0,2,3 547.932 203.306 547.932 203.306 581.122 203.133 c 0,4,5 587.018 203.102 587.018 203.102 593.3 204 c 0,6,7 577.164 190.016 577.164 190.016 552.009 189.986 c 0,8,9 537.411 189.968 537.411 189.968 519.775 194.65 c 0,10,11 471.751 207.4 471.751 207.4 455.6 235.45 c 0,12,13 425.85 283.901 425.85 283.901 408 377.4 c 0,14,15 390.15 470.899 390.15 470.899 319.6 499.8 c 0,16,17 306.85 504.9 306.85 504.9 279.225 497.675 c 0,18,19 251.601 490.45 251.601 490.45 243.1 468.35 c 0,20,21 238.176 456.204 238.176 456.204 238.133 444.692 c 0,22,23 238.064 426.395 238.064 426.395 250.325 409.7 c 0,24,-1 290.7 352.75 l 0,25,26 313.651 314.499 313.651 314.499 317.9 257.55 c 0,27,28 316.954 221.448 l 0,29,30 312.315 189.03 312.315 189.03 293.25 166.6 c 0,31,32 292.4 170.001 292.4 170.001 290.7 208.675 c 0,33,34 289.493 236.149 289.493 236.149 266.675 236.651 c 0,35,36 244.032 232.428 l 0,37,38 242.322 231.853 242.322 231.853 240.55 231.2 c 0,39,40 224.401 225.25 224.401 225.25 217.175 140.675 c 0,41,42 209.949 56.0996 209.949 56.0996 246.5 56.0996 c 0,43,44 274.994 56.0996 274.994 56.0996 275.542 70.5434 c 0,45,46 275.632 72.904 275.632 72.904 274.975 75.6504 c 0,47,48 270.299 95.2002 270.299 95.2002 258.4 107.95 c 0,49,50 306.849 92.6506 306.849 92.6506 311.525 53.5498 c 0,51,52 316.201 14.4502 316.201 14.4502 290.7 -11.0498 c 0,53,54 245.652 -54.3987 245.652 -54.3987 189.125 -88.4004 c 0,55,56 132.6 -122.4 132.6 -122.4 132.6 -188.7 c 0,57,58 132.6 -251.601 132.6 -251.601 195.925 -280.075 c 0,59,60 255.893 -307.04 255.893 -307.04 337.584 -306.945 c 0,61,62 342.157 -306.94 342.157 -306.94 346.8 -306.85 c 0,63,64 196.35 -334.9 196.35 -334.9 143.225 -278.8 c 0,65,66 91.7255 -224.418 91.7255 -224.418 83.2998 -153.85 c 0,67,68 82.957 -117.949 l 0,69,70 86.8762 -78.2765 86.8762 -78.2765 109.65 -37.4004 c 0,71,72 142.799 22.0987 142.799 22.0987 143.65 80.75 c 0,73,74 143.65 133.451 143.65 133.451 122.4 168.3 c 0,75,76 106.25 195.499 106.25 195.499 79.9004 167.45 c 0,77,78 53.5498 139.4 53.5498 139.4 95.2002 96.0498 c 0,79,80 62.0497 86.7002 62.0497 86.7002 40.375 112.2 c 0,81,82 33.1445 120.707 33.1445 120.707 17.8496 153 c 0,83,84 3.40722 183.493 3.40722 183.493 29.75 240.975 c 0,85,86 46.5068 277.54 46.5068 277.54 65.4502 323.85 c 0,87,88 92.9434 391.062 92.9434 391.062 94.7754 417.775 c 0,89,90 101.251 512.209 101.251 512.209 102.85 514.25 c 0,91,92 104.836 522.868 l 0,93,94 104.373 534.203 104.373 534.203 97.3252 559.725 c 0,95,96 79.4824 621.977 79.4824 621.977 40.7998 680 c 0,97,98 30.5996 695.3 30.5996 695.3 27.2002 736.95 c 0,99,100 23.7999 778.6 23.7999 778.6 56.9502 800.7 c 0,101,102 49.8754 783.221 49.8754 783.221 49.8519 771.778 c 0,103,104 49.8182 755.43 49.8182 755.43 64.1748 751.4 c 0,105,106 90.0996 744.6 90.0996 744.6 110.5 785.4 c 0,107,108 131.413 825.057 131.413 825.057 131.609 850.216 c 0,109,110 131.634 853.413 131.634 853.413 131.325 856.375 c 0,111,112 124.084 909.899 124.084 909.899 107.95 912.9 c 0,113,114 74.7999 918.85 74.7999 918.85 77.3496 894.625 c 0,115,116 79.9004 870.4 79.9004 870.4 90.0996 860.2 c 0,117,118 62.0502 860.2 62.0502 860.2 45.4746 881.025 c 0,119,120 28.9003 901.849 28.9003 901.849 28.9004 914.6 c 0,121,122 30.6431 951.441 l 0,123,124 34.4008 977.421 34.4008 977.421 45.0498 1007.67 c 0,125,126 63.75 1060.8 63.75 1060.8 74.7998 1101.6 c 0,127,128 95.2003 1178.96 95.2003 1178.96 66.2998 1252.47 c 0,129,130 40.3659 1318.45 40.3659 1318.45 40.4422 1375.88 c 0,131,132 40.451 1382.45 40.451 1382.45 40.7998 1388.9 c 0,133,134 42.4996 1430.54 42.4996 1430.54 67.5752 1459.45 c 0,135,136 85.036 1479.58 85.036 1479.58 110.125 1479.5 c 0,137,138 121.062 1479.47 121.062 1479.47 133.45 1475.6 c 0,139,140 93.4999 1461.15 93.4999 1461.15 86.7002 1435.22 c 0,141,142 83.601 1410.01 l 0,143,144 84.1391 1401.29 84.1391 1401.29 87.5498 1394.85 c 0,145,146 102.429 1363.6 102.429 1363.6 134.236 1363.61 c 0,147,148 138.771 1363.61 138.771 1363.61 143.65 1364.25 c 0,149,150 182.75 1369.35 182.75 1369.35 194.65 1394.85 c 0,151,152 208.059 1425.77 208.059 1425.77 207.989 1452.07 c 0,153,154 207.84 1507.45 207.84 1507.45 147.9 1542.33 c 0,155,156 59.481 1593.76 59.481 1593.76 30.5996 1603.1 c 0,157,158 140.25 1580.15 140.25 1580.15 186.15 1532.12 c 0,159,160 232.049 1484.11 232.049 1484.11 243.95 1443.3 c 0,161,162 257.551 1394.85 257.551 1394.85 252.875 1354.47 c 0,163,164 248.199 1314.1 248.199 1314.1 235.45 1264.8 c 0,165,166 226.614 1230.08 226.614 1230.08 226.682 1184.83 c 0,167,168 226.706 1169.13 226.706 1169.13 227.8 1152.17 c 0,169,170 231.7 1091.72 231.7 1091.72 279.269 1091.04 c 0,171,172 283.534 1090.98 283.534 1090.98 288.15 1091.4 c 0,173,174 341.7 1096.5 341.7 1096.5 334.05 1142.4 c 0,175,176 326.4 1188.3 326.4 1188.3 283.9 1198.5 c 0,177,178 308.183 1201.04 l 0,179,180 325.909 1200.14 325.909 1200.14 345.525 1191.7 c 0,181,182 379.098 1177.26 379.098 1177.26 386.75 1151.75 c 0,183,184 392.424 1130.47 392.424 1130.47 392.464 1110.19 c 0,185,186 392.543 1069.7 392.543 1069.7 370.175 1033.17 c 0,187,188 338.479 981.419 338.479 981.419 334.9 914.6 c 0,189,190 332.417 868.263 332.417 868.263 379.95 889.1 c 0,191,192 442 916.299 442 916.299 505.75 1024.25 c 0,193,194 528.697 1062.5 528.697 1062.5 552.5 1165.78 c 0,195,196 575.844 1267.07 575.844 1267.07 610.3 1293.7 c 0,197,198 629.01 1308.15 629.01 1308.15 658.325 1315.38 c 0,199,200 681.508 1317.82 l 0,201,202 693.431 1316.82 693.431 1316.82 700.4 1309.85 c 0,203,204 641.75 1305.6 641.75 1305.6 641.75 1266.5 c 0,205,206 641.75 1240.15 641.75 1240.15 667.25 1246.1 c 0,207,208 743.751 1259.71 743.751 1259.71 750.975 1311.97 c 0,209,210 758.202 1364.26 758.202 1364.26 791.35 1406.75 c 0,211,212 811.401 1432.74 811.401 1432.74 844.752 1432.78 c 0,213,214 849.575 1432.79 849.575 1432.79 854.675 1432.25 c 0,215,216 895.049 1428.01 895.049 1428.01 906.1 1409.3 c 0,217,218 874.516 1412.94 l 0,219,220 839.2 1412.34 839.2 1412.34 824.925 1385.92 c 0,221,222 817.061 1371.36 817.061 1371.36 816.904 1357.53 c 0,223,224 820.58 1338.22 l 0,225,226 824.994 1327.19 824.994 1327.19 834.7 1316.65 c 0,227,228 855.055 1294.26 855.055 1294.26 890.312 1294.08 c 0,229,230 899.217 1294.03 899.217 1294.03 909.075 1295.4 c 0,231,232 957.942 1302.19 957.942 1302.19 998.325 1332.8 c 0,233,234 1038.71 1363.41 1038.71 1363.41 1055.7 1413.12 c 0,235,236 1060.93 1428.44 1060.93 1428.44 1060.93 1444.6 c 0,237,238 1060.92 1480.92 1060.92 1480.92 1034.45 1521.5 c 0,239,240 1083.75 1482.4 1083.75 1482.4 1086.3 1418.65 c 0,241,242 1084.19 1380.81 l 0,243,244 1077.86 1342.3 1077.86 1342.3 1054 1314.95 c 0,245,246 1033.61 1291.16 1033.61 1291.16 981.75 1261.83 c 0,247,248 929.871 1232.49 929.871 1232.49 876.35 1212.1 c 0,249,250 796.23 1181.55 796.23 1181.55 731.85 1068.45 c 0,251,252 700.406 1013.22 700.406 1013.22 682.975 961.35 c 0,253,254 665.549 909.5 665.549 909.5 610.3 840.65 c 0,255,256 572.901 793.901 572.901 793.901 512.55 787.95 c 0,257,258 543.15 800.7 543.15 800.7 562.7 829.175 c 0,259,260 569.503 839.084 569.503 839.084 569.513 846.368 c 0,261,262 569.531 860.017 569.531 860.017 545.7 864.45 c 0,263,264 520.2 868.7 520.2 868.7 494.275 845.75 c 0,265,266 469.591 823.898 469.591 823.898 463.25 792.2 c 0,267,268 460.627 761.739 l 0,269,270 462.103 733.539 462.103 733.539 480.675 717.825 c 0,271,272 493.756 706.756 493.756 706.756 504.277 706.775 c 0,273,274 517.122 706.798 517.122 706.798 526.15 723.35 c 0,275,276 527.626 732.428 l 0,277,278 524.386 745.468 524.386 745.468 488.75 755.65 c 0,279,280 508.168 770.089 508.168 770.089 525.544 770.091 c 0,281,282 537.833 770.093 537.833 770.093 549.1 762.875 c 0,283,284 576.3 745.449 576.3 745.449 583.95 719.95 c 0,285,286 604.35 651.951 604.35 651.951 571.2 613.7 c 0,287,288 546.358 585.035 546.358 585.035 546.316 540 c 0,289,290 546.304 527.346 546.304 527.346 548.25 513.4 c 0,291,292 558.45 440.3 558.45 440.3 643.875 403.325 c 0,293,294 729.3 366.35 729.3 366.35 803.25 341.7 c 0,295,296 884.85 314.5 884.85 314.5 909.5 264.35 c 0,297,298 928.35 226 928.35 226 928.312 206.538 c 0,299,300 928.3 200.55 928.3 200.55 926.5 196.35 c 0,301,302 905.249 264.351 905.249 264.351 842.35 278.8 c 0,303,304 811.077 281.413 l 0,305,306 775.025 279.194 775.025 279.194 765 247.35 c 0,307,308 763.193 229.147 l 0,309,310 767.307 190.197 767.307 190.197 837.25 143.225 c 0,311,312 923.95 84.9995 923.95 84.9995 962.2 55.25 c 0,313,314 997.9 26.3497 997.9 26.3497 1028.92 -23.375 c 0,315,316 1053.67 -63.0368 1053.67 -63.0368 1053.81 -99.1914 c 0,317,318 1053.85 -108.358 1053.85 -108.358 1052.3 -117.3 c 0,319,320 1027.92 -255.669 1027.92 -255.669 888.25 -285.6 c 0,321,322 871.057 -289.284 871.057 -289.284 843.002 -289.198 c 0,323,324 832.216 -289.165 832.216 -289.165 819.825 -288.575 c 0,325,326 775.198 -286.449 775.198 -286.449 737.8 -273.7 c 0,327,328 748.664 -276.416 748.664 -276.416 776.189 -276.355 c 0,329,330 791.737 -276.32 791.737 -276.32 812.6 -275.4 c 0,331,332 870.4 -272.85 870.4 -272.85 893.35 -262.65 c 0,333,334 947.749 -237.15 947.749 -237.15 980.9 -176.8 c 0,335,336 1014.05 -116.451 1014.05 -116.451 973.25 -47.5996 c 0,337,338 961.351 -27.202 961.351 -27.202 929.05 -0.424805 c 0,339,340 896.751 26.3496 896.751 26.3496 860.2 37.4004 c 0,341,342 823.078 47.9578 823.078 47.9578 801.239 48.0084 c 0,343,344 770.67 48.0793 770.67 48.0793 770.1 24.6504 c 0,345,346 770.1 5.09961 770.1 5.09961 793.475 5.09961 c 0,347,348 816.85 5.09961 816.85 5.09961 832.15 -0.849609 c 0,349,350 796.45 -21.25 796.45 -21.25 756.925 -10.625 c 0,351,352 717.4 -4.76837e-06 717.4 -4.76837e-06 712.3 12.75 c 0,353,354 698.702 38.2446 698.702 38.2446 685.1 78.2002 c 0,355,-1 664.7 146.2 l 0,356,357 657.049 171.702 657.049 171.702 616.675 220.575 c 0,358,359 577.384 268.136 577.384 268.136 542.3 268.6 c 0,0,1 EndSplineSet KernsSLIF: 111 -65 0 0 115 -104 0 0 103 -65 0 0 99 -156 0 0 EndChar StartChar: l Encoding: 108 108 66 Width: 1076 Flags: HMW HStem: 136.5 181.5<307 709> VStem: 37 223.5<161 1456.5> Fore 41 292 m 0,0,1 70 310 70 310 114 285 c 0,2,3 70.0001 294 70.0001 294 45 270.5 c 0,4,5 29.3458 255.785 29.3458 255.785 29.375 238.521 c 0,6,7 29.3925 228.215 29.3925 228.215 35 217 c 0,8,9 45.7595 193.759 45.7595 193.759 61.8905 193.765 c 0,10,11 83.2405 193.772 83.2405 193.772 114 234.5 c 0,12,13 146.057 276.946 146.057 276.946 146.044 324.502 c 0,14,15 146.035 357.054 146.035 357.054 131 392 c 0,16,17 107 446 107 446 77 421 c 0,18,19 47 396 47 396 93 354 c 0,20,21 27 375 27 375 26 453 c 0,22,23 27.8452 496.459 l 0,24,25 32.9898 535.068 32.9898 535.068 50.5 575.5 c 0,26,27 77.9997 638.999 77.9997 638.999 92 698 c 0,28,29 119 824 119 824 94 931 c 0,30,31 81.9967 983.015 81.9967 983.015 64.5 1034.5 c 0,32,33 47.0011 1085.99 47.0011 1085.99 42 1145 c 0,34,35 45.7278 1163.7 l 0,36,37 48.9752 1172.67 48.9752 1172.67 55 1184.5 c 0,38,39 68.9999 1211.99 68.9999 1211.99 111 1207 c 0,40,41 100.366 1206.12 l 0,42,43 88.4565 1201.3 88.4565 1201.3 78 1179 c 0,44,45 74.1633 1163.65 l 0,46,47 75.1096 1150.58 75.1096 1150.58 97.0824 1150.55 c 0,48,49 101.177 1150.55 101.177 1150.55 106 1151 c 0,50,51 134.875 1152.75 134.875 1152.75 135.422 1182.06 c 0,52,53 135.5 1186.25 135.5 1186.25 135 1191 c 0,54,55 130.996 1229.03 130.996 1229.03 124 1274 c 0,56,57 113.999 1328 113.999 1328 92.5 1376 c 0,58,59 71.0001 1424 71.0001 1424 53 1475 c 0,60,61 49.0488 1485.54 49.0488 1485.54 49.109 1498.02 c 0,62,63 49.2317 1523.47 49.2317 1523.47 66 1557 c 0,64,65 80.4583 1585.91 80.4583 1585.91 105.952 1586.07 c 0,66,67 122.383 1586.17 122.383 1586.17 143.398 1574.32 c 0,68,69 146.159 1572.76 146.159 1572.76 149 1571 c 0,70,71 128.01 1571 128.01 1571 103 1557 c 0,72,73 77.9999 1543.01 77.9999 1543.01 88 1497 c 0,74,75 96.8173 1449.97 96.8173 1449.97 137.5 1449.5 c 0,76,77 177.998 1449.99 177.998 1449.99 196 1501 c 0,78,79 203.796 1524.39 203.796 1524.39 203.751 1545.28 c 0,80,81 203.629 1602.11 203.629 1602.11 145.5 1640.5 c 0,82,83 66.01 1692.99 66.01 1692.99 -2 1703 c 0,84,85 59.4295 1700.45 l 0,86,87 127.09 1692.99 127.09 1692.99 170 1664.5 c 0,88,89 230.996 1624 230.996 1624 247 1586 c 0,90,91 264.567 1541.41 264.567 1541.41 264.558 1497.95 c 0,92,93 264.554 1477.09 264.554 1477.09 260.5 1456.5 c 0,94,95 248 1393 248 1393 248 1330 c 0,96,97 248 1249 248 1249 285 1147 c 0,98,99 322 1045 322 1045 265 1006 c 0,100,101 284 1036 284 1036 260 1067.5 c 0,102,103 249.5 1081.28 249.5 1081.28 239 1081.18 c 0,104,105 225.501 1081.06 225.501 1081.06 212 1058 c 0,106,107 200.001 1037 200.001 1037 194.5 961.5 c 0,108,109 194.818 919.869 l 0,110,111 199.301 880.069 199.301 880.069 222 867 c 0,112,113 230.364 862.221 230.364 862.221 237.166 862.215 c 0,114,115 253.136 862.201 253.136 862.201 260.5 888.5 c 0,116,117 271 926 271 926 241 959 c 0,118,119 276.001 959 276.001 959 291.5 913 c 0,120,121 298.669 891.725 298.669 891.725 298.672 873.017 c 0,122,123 298.675 851.275 298.675 851.275 289 833 c 0,124,125 280 814 280 814 268 731.5 c 0,126,127 255.999 648.995 255.999 648.995 252.5 557.5 c 0,128,129 252.749 465.02 l 0,130,131 254.6 426.799 254.6 426.799 259.5 392.5 c 0,132,133 270 319 270 319 307 318 c 0,134,135 352 316 352 316 381.5 366 c 0,136,137 411 416 411 416 477 413 c 0,138,139 545 407 545 407 533 332 c 0,140,141 517.466 372.206 517.466 372.206 481.891 372.75 c 0,142,143 478.534 372.802 478.534 372.802 475 372.5 c 0,144,145 443.78 369.835 443.78 369.835 443.871 339.628 c 0,146,147 443.899 330.165 443.899 330.165 447 318 c 0,148,149 450 303 450 303 481 292.5 c 0,150,151 503.812 289.566 l 0,152,153 536.914 289.914 536.914 289.914 597 309 c 0,154,155 646 324 646 324 742 359 c 0,156,157 838 394 838 394 825 292 c 0,158,159 798 357 798 357 757 314.5 c 0,160,161 716 272 716 272 754 257 c 0,162,163 800.183 238.107 800.183 238.107 842.224 238.075 c 0,164,165 900.317 238.031 900.317 238.031 950.5 274 c 0,166,167 1024.75 327.219 1024.75 327.219 1024.95 450.456 c 0,168,169 1024.98 470.777 1024.98 470.777 1023 493 c 0,170,171 1042.44 425.955 1042.44 425.955 1042.51 374.013 c 0,172,173 1042.59 319.048 1042.59 319.048 1021 281 c 0,174,175 978.999 206.999 978.999 206.999 896 173.5 c 0,176,177 812.998 139.999 812.998 139.999 709 136.5 c 0,178,179 566.939 135.419 l 0,180,181 543.748 135.952 543.748 135.952 522 137 c 0,182,183 471.006 138.999 471.006 138.999 411 151.5 c 0,184,185 390.2 155.833 390.2 155.833 365.795 155.78 c 0,186,187 319.799 155.68 319.799 155.68 261 140 c 0,188,189 219.505 128.553 219.505 128.553 174.425 128.623 c 0,190,191 156.496 128.65 156.496 128.65 138 130.5 c 0,192,193 73.0009 136.999 73.0009 136.999 37 161 c 0,194,195 8.00005 179 8.00005 179 3.5 221.5 c 0,196,197 -1 263.999 -1 263.999 41 292 c 0,0,1 EndSplineSet KernsSLIF: 116 -286 0 0 121 -156 0 0 105 -78 0 0 45 -156 0 0 115 -130 0 0 119 -195 0 0 EndChar StartChar: m Encoding: 109 109 24 Width: 1471 Flags: HMW VStem: 93 114<55 195> 100 187<251 1528> 312.5 89.5<154.5 421> 1036 199<169 1576> 1134.5 100.5<-115 169> Fore 1025 -231 m 1,0,1 1079 -195 1079 -195 1134.5 -115 c 0,2,3 1190 -35 1190 -35 1184 71 c 0,4,5 1181 106 1181 106 1161.5 152 c 0,6,7 1142 198.001 1142 198.001 1093 204 c 0,8,9 1079 204 1079 204 1059.5 200.5 c 0,10,11 1040 197.001 1040 197.001 1034 182 c 0,12,13 1024.39 155.698 1024.39 155.698 1024.37 134.251 c 0,14,15 1024.36 113.308 1024.36 113.308 1033.5 97 c 0,16,17 1047.33 72.3194 1047.33 72.3194 1073.76 72.2502 c 0,18,19 1082.67 72.2269 1082.67 72.2269 1093 75 c 0,20,21 1078.76 49.3729 1078.76 49.3729 1038.4 49.4211 c 0,22,23 1036.24 49.4237 1036.24 49.4237 1034 49.5 c 0,24,25 990 51.0002 990 51.0002 966 77 c 0,26,27 933.272 109.728 933.272 109.728 933.041 162.846 c 0,28,29 932.982 176.272 932.982 176.272 935 191 c 0,30,31 946 272 946 272 972.5 349.5 c 0,32,33 999 426.998 999 426.998 1014 503 c 0,34,35 1024.01 554 1024.01 554 1041 677 c 0,36,37 1058 800.036 1058 800.036 1058 853 c 0,38,39 1058 893 1058 893 1053.5 957 c 0,40,41 1049 1021 1049 1021 1003 1042 c 0,42,43 987.084 1049.23 987.084 1049.23 970.385 1049.21 c 0,44,45 940.911 1049.16 940.911 1049.16 909 1026.5 c 0,46,47 875.767 1002.9 875.767 1002.9 875.667 973.785 c 0,48,49 875.617 959.096 875.617 959.096 884 943 c 0,50,51 895.195 919.951 895.195 919.951 909.426 919.67 c 0,52,53 921.873 923.425 l 0,54,55 923.421 924.349 923.421 924.349 925 925.5 c 0,56,57 949 943 949 943 958 976 c 0,58,59 977 914 977 914 943 862 c 0,60,61 911.999 817.999 911.999 817.999 842.5 811.5 c 0,62,63 773 805 773 805 718 805 c 0,64,65 667 805 667 805 642 779 c 0,66,67 617 753 617 753 615 726 c 0,68,69 612 694 612 694 627 656.5 c 0,70,71 642 619 642 619 665 607 c 0,72,73 739 567 739 567 769 589 c 0,74,75 799 611 799 611 808 638 c 0,76,77 808.615 615.462 l 0,78,79 805.87 596.063 805.87 596.063 791.5 578.5 c 0,80,81 769 551 769 551 751 548 c 0,82,83 684 533 684 533 658 548.5 c 0,84,85 632 564 632 564 608 589 c 0,86,87 558 640 558 640 542 729.5 c 0,88,89 526.001 818.995 526.001 818.995 525 879 c 0,90,91 524 915.999 524 915.999 504 953 c 0,92,93 484 990 484 990 441 992 c 0,94,95 411 993 411 993 412.5 963.5 c 0,96,97 414 934 414 934 459 958 c 0,98,99 450 922 450 922 424 920 c 0,100,101 398 918 398 918 377 930 c 0,102,103 351 942 351 942 350.5 981.5 c 0,104,105 350 1020.99 350 1020.99 358 1064 c 0,106,107 359.954 1094.75 l 0,108,109 358.246 1117.65 358.246 1117.65 345 1129 c 0,110,111 333.574 1137.92 333.574 1137.92 323.779 1138.06 c 0,112,113 317.203 1138.15 317.203 1138.15 311.363 1134.29 c 0,114,115 294.684 1123.27 294.684 1123.27 284 1080 c 0,116,117 264 999 264 999 264 950 c 0,118,119 264 801.001 264 801.001 308 643 c 0,120,121 323 590 323 590 354.5 531.5 c 0,122,123 386 473 386 473 402 421 c 0,124,125 426 337 426 337 420 268 c 0,126,127 409.999 148.999 409.999 148.999 332 123 c 0,128,129 307.489 114.489 307.489 114.489 288.773 114.554 c 0,130,131 252.511 114.681 252.511 114.681 238 147 c 0,132,133 249.812 142.94 249.812 142.94 263.055 142.899 c 0,134,135 285.688 142.829 285.688 142.829 312.5 154.5 c 0,136,137 352.19 171.777 352.19 171.777 352.198 209.549 c 0,138,139 352.198 212.223 352.198 212.223 352 215 c 0,140,141 349 275 349 275 287 251 c 0,142,143 225 227 225 227 207 195 c 0,144,145 176.999 141.999 176.999 141.999 170.5 79.5 c 0,146,147 167.94 21.3888 l 0,148,149 168.706 -1.8226 168.706 -1.8226 173 -19 c 0,150,151 203 -149 203 -149 259.5 -205.5 c 0,152,153 315.999 -261.999 315.999 -261.999 374 -308 c 0,154,155 254 -285.999 254 -285.999 172 -175.5 c 0,156,157 89.9995 -64.9995 89.9995 -64.9995 93 55 c 0,158,159 95 136 95 136 136.5 219.5 c 0,160,161 178 302.999 178 302.999 190 384 c 0,162,163 194.996 416.975 194.996 416.975 206 474 c 0,164,165 209 507.333 l 0,166,167 207.667 536 207.667 536 189 546 c 0,168,169 176.804 551.963 176.804 551.963 167.289 552.233 c 0,170,171 153.866 549.07 l 0,172,173 139.867 541.011 139.867 541.011 135.5 512.5 c 0,174,175 126.999 457 126.999 457 158 448 c 0,176,177 95 448 95 448 89 503.5 c 0,178,179 83 559 83 559 89 601 c 0,180,181 95 640 95 640 120.5 683.5 c 0,182,183 146 727 146 727 152 766 c 0,184,185 155.588 821.346 l 0,186,187 155.088 894.71 155.088 894.71 125.5 959 c 0,188,189 84.9961 1047.01 84.9961 1047.01 58 1140 c 0,190,191 32.9998 1225.01 32.9998 1225.01 30.5 1276 c 0,192,193 28 1327 28 1327 73 1414 c 0,194,195 89.0001 1447 89.0001 1447 120.5 1453 c 0,196,197 145.355 1454.66 l 0,198,199 156.698 1453.36 156.698 1453.36 162 1447 c 0,200,201 119.001 1444 119.001 1444 110 1383.5 c 0,202,203 101 1323.01 101 1323.01 135 1322 c 0,204,205 161.228 1323.78 l 0,206,207 189.587 1330.18 189.587 1330.18 203 1357 c 0,208,209 222 1394.99 222 1394.99 227 1440 c 0,210,211 227.387 1482.88 l 0,212,213 225.876 1502 225.876 1502 221.5 1522.5 c 0,214,215 213.181 1561.47 213.181 1561.47 157.691 1561.71 c 0,216,217 149.82 1561.75 149.82 1561.75 141 1561 c 0,218,219 122.004 1558 122.004 1558 111.5 1542.5 c 0,220,221 101.718 1528.07 101.718 1528.07 100 1528 c 0,222,223 103.126 1559.45 l 0,224,225 113.773 1604.2 113.773 1604.2 160.5 1617.5 c 0,226,227 174.44 1621.47 174.44 1621.47 187.84 1621.5 c 0,228,229 224.431 1621.6 224.431 1621.6 257.003 1592.39 c 0,230,231 265.126 1585.11 265.126 1585.11 273 1576 c 0,232,233 321.005 1518.99 321.005 1518.99 350 1446 c 0,234,235 379 1372.99 379 1372.99 415 1314 c 0,236,-1 463 1243 l 0,237,238 511 1172.01 511 1172.01 543 1210 c 0,239,240 552 1220.72 552 1220.72 552.092 1232.53 c 0,241,242 552.188 1244.99 552.188 1244.99 542.38 1258.68 c 0,243,244 539.786 1262.3 539.786 1262.3 536.5 1266 c 0,245,246 513.03 1292.46 513.03 1292.46 484.812 1292.69 c 0,247,248 479.976 1292.73 479.976 1292.73 475 1292 c 0,249,250 490.916 1311.9 490.916 1311.9 512.538 1312.16 c 0,251,252 518.082 1312.22 518.082 1312.22 524 1311 c 0,253,254 553 1305 553 1305 568 1296 c 0,255,256 599.001 1273.99 599.001 1273.99 602 1228 c 0,257,258 604 1180.99 604 1180.99 627.5 1135.5 c 0,259,260 651 1090.01 651 1090.01 690 1110 c 0,261,262 726 1128 726 1128 741 1174.5 c 0,263,264 756 1221 756 1221 779 1281 c 0,265,266 808.994 1362.99 808.994 1362.99 892.5 1461.5 c 0,267,268 975.99 1559.99 975.99 1559.99 1036 1576 c 0,269,270 1115.38 1596.09 1115.38 1596.09 1210.29 1596.05 c 0,271,272 1214.63 1596.04 1214.63 1596.04 1219 1596 c 0,273,274 1319.01 1594.99 1319.01 1594.99 1393 1542 c 0,275,276 1431.02 1514.98 1431.02 1514.98 1470.5 1467 c 0,277,278 1510 1418.99 1510 1418.99 1510 1364 c 0,279,280 1510 1333.99 1510 1333.99 1503 1307.5 c 0,281,282 1496 1281 1496 1281 1463 1263 c 0,283,284 1484.46 1289.96 1484.46 1289.96 1484.42 1324.94 c 0,285,286 1484.39 1353.54 1484.39 1353.54 1470 1387.5 c 0,287,288 1438.01 1462.99 1438.01 1462.99 1378 1491 c 0,289,290 1313.98 1520 1313.98 1520 1244.5 1523 c 0,291,292 1222.23 1520.55 l 0,293,294 1174.12 1506.48 1174.12 1506.48 1170 1414 c 0,295,296 1172.56 1390 l 0,297,298 1180.15 1360.99 1180.15 1360.99 1209.5 1332 c 0,299,300 1235.32 1306.5 1235.32 1306.5 1253.58 1306.53 c 0,301,302 1264.68 1306.55 1264.68 1306.55 1273 1316 c 0,303,304 1290.28 1335.2 1290.28 1335.2 1290.36 1350.31 c 0,305,306 1290.4 1358.8 1290.4 1358.8 1285 1366 c 0,307,308 1269.99 1386 1269.99 1386 1246 1395 c 0,309,310 1256 1408.33 1256 1408.33 1270.17 1408.55 c 0,311,312 1286.92 1404.85 l 0,313,314 1291.08 1403.1 1291.08 1403.1 1295.5 1400.5 c 0,315,316 1327 1382 1327 1382 1332 1373 c 0,317,318 1340.68 1353.09 1340.68 1353.09 1340.88 1329 c 0,319,320 1337.14 1293.77 l 0,321,322 1335.62 1286.54 1335.62 1286.54 1333.5 1279 c 0,323,324 1318.01 1224.02 1318.01 1224.02 1288 1187 c 0,325,326 1193.99 1074.99 1193.99 1074.99 1222 947 c 0,327,328 1240 856.01 1240 856.01 1267.5 819 c 0,329,-1 1321 744 l 0,330,331 1374.27 666.794 1374.27 666.794 1374.49 580.64 c 0,332,333 1374.56 555.209 1374.56 555.209 1370 529 c 0,334,335 1364 496.019 1364 496.019 1350 464.5 c 0,336,337 1336.01 433.005 1336.01 433.005 1300 407 c 0,338,339 1291 401 1291 401 1267 392.5 c 0,340,341 1248.3 389.491 l 0,342,343 1235.95 390.219 1235.95 390.219 1226 399 c 0,344,345 1274 422 1274 422 1283 456 c 0,346,347 1289.22 479.507 1289.22 479.507 1289.23 503 c 0,348,349 1289.24 513.5 1289.24 513.5 1288 524 c 0,350,351 1285 547 1285 547 1246 548 c 0,352,353 1225.66 544.999 l 0,354,355 1203.25 536.886 1203.25 536.886 1194 507 c 0,356,357 1182 468 1182 468 1180.5 415 c 0,358,359 1182.17 345.543 l 0,360,361 1183.28 332.776 1183.28 332.776 1185 321 c 0,362,363 1194 262.984 1194 262.984 1208.5 232.5 c 0,364,365 1222.98 202.047 1222.98 202.047 1235 169 c 0,366,367 1253.25 119.481 1253.25 119.481 1253.23 68.6809 c 0,368,369 1253.23 41.5239 1253.23 41.5239 1248 14 c 0,370,371 1234.01 -55.9778 1234.01 -55.9778 1188.5 -125 c 0,372,373 1143.01 -193.999 1143.01 -193.999 1025 -231 c 1,0,1 EndSplineSet KernsSLIF: 97 -91 0 0 105 65 0 0 EndChar StartChar: n Encoding: 110 110 50 Width: 1072 Flags: HMW VStem: 116 176<173 1259> 669 262<167 1382> Fore 84 54 m 0,0,1 67.6022 106.707 67.6022 106.707 67.6669 159.757 c 0,2,3 67.7127 197.292 67.7127 197.292 76 235 c 0,4,5 95.9999 326 95.9999 326 112 413 c 0,6,7 119.449 452.538 119.449 452.538 119.387 491.624 c 0,8,9 119.234 588.963 119.234 588.963 72.5 683.5 c 0,10,11 6.99995 816 6.99995 816 36 919 c 0,12,13 38 928 38 928 58.5 946 c 0,14,15 79.0001 964 79.0001 964 107 951 c 0,16,17 28 913 28 913 86.5 877.5 c 0,18,19 145 842 145 842 145 927 c 0,20,21 145 1008.01 145 1008.01 130.5 1094 c 0,22,23 115.999 1179.99 115.999 1179.99 116 1259 c 0,24,25 116 1331.99 116 1331.99 122.5 1411.5 c 0,26,27 128.999 1491 128.999 1491 177 1539 c 0,28,29 193.772 1556.4 193.772 1556.4 215.176 1556.62 c 0,30,31 236.709 1552.9 l 0,32,33 239.815 1551.85 239.815 1551.85 243 1550.5 c 0,34,35 282 1534 282 1534 282 1511 c 0,36,37 244.773 1542.56 244.773 1542.56 220.07 1543.1 c 0,38,39 205.24 1540.12 l 0,40,41 181.674 1529.11 181.674 1529.11 174.5 1477.5 c 0,42,43 171.376 1428.44 l 0,44,45 172.982 1352.49 172.982 1352.49 219 1308 c 0,46,47 273.009 1255 273.009 1255 349.5 1225 c 0,48,49 425.994 1195 425.994 1195 462 1148 c 0,50,51 488.105 1114.38 488.105 1114.38 488.397 1086.39 c 0,52,53 485.131 1066.6 l 0,54,55 474.466 1036.51 474.466 1036.51 429 1014 c 0,56,-1 448 1047 l 0,57,58 453.854 1057.54 453.854 1057.54 453.882 1069.79 c 0,59,60 453.903 1078.47 453.903 1078.47 451 1088 c 0,61,62 444 1110.01 444 1110.01 427 1115 c 0,63,64 414.31 1115.26 l 0,65,66 405.925 1112.67 405.925 1112.67 400 1102 c 0,67,68 392.365 1089.51 392.365 1089.51 392.438 1065.21 c 0,69,70 392.576 1019.49 392.576 1019.49 420 932 c 0,71,72 462 798 462 798 506 806 c 0,73,74 550.453 813.17 550.453 813.17 551.467 837.304 c 0,75,76 548.076 853.531 l 0,77,78 546.968 856.195 546.968 856.195 545.5 859 c 0,79,80 523.001 901.999 523.001 901.999 496 924 c 0,81,82 594 900 594 900 600.5 818.5 c 0,83,84 607 737 607 737 607 656 c 0,85,86 607 591 607 591 653.5 558.5 c 0,87,88 665.214 550.313 665.214 550.313 674.992 550.407 c 0,89,90 704.03 550.687 704.03 550.687 716 624 c 0,91,92 725 682 725 682 729 739.5 c 0,93,94 733 797 733 797 717 858 c 0,95,96 708 891 708 891 685.5 936.5 c 0,97,98 663 982 663 982 663 1022 c 0,99,100 663 1060.01 663 1060.01 678 1090.5 c 0,101,102 691.45 1117.84 691.45 1117.84 727.403 1118.26 c 0,103,104 731.552 1118.31 731.552 1118.31 736 1118 c 0,105,106 719.991 1101.99 719.991 1101.99 707 1077 c 0,107,108 701.61 1066.63 701.61 1066.63 701.549 1057.82 c 0,109,110 701.463 1045.37 701.463 1045.37 712 1036 c 0,111,112 737 1012 737 1012 751 1060 c 0,113,114 765 1108 765 1108 765 1118 c 0,115,116 765 1180.99 765 1180.99 733.5 1225.5 c 0,117,118 701.999 1270.01 701.999 1270.01 696 1331 c 0,119,120 696.659 1361.08 l 0,121,122 702.981 1402.43 702.981 1402.43 740 1435 c 0,123,124 759.78 1452.4 759.78 1452.4 778.152 1452.6 c 0,125,126 787.631 1452.7 787.631 1452.7 796.735 1448.21 c 0,127,128 814.589 1439.42 814.589 1439.42 831 1413 c 0,129,130 757 1422 757 1422 761.5 1360.5 c 0,131,132 766 1299 766 1299 817 1299 c 0,133,134 891.998 1299 891.998 1299 931 1382 c 0,135,136 950.863 1422.37 950.863 1422.37 950.815 1479.56 c 0,137,138 950.788 1511.64 950.788 1511.64 944.5 1549 c 0,139,140 926.997 1653.01 926.997 1653.01 876 1703 c 0,141,142 957.002 1649 957.002 1649 977 1552 c 0,143,144 997 1454.99 997 1454.99 997 1434 c 0,145,146 997 1371 997 1371 969.5 1318 c 0,147,148 942.002 1265.01 942.002 1265.01 930 1211 c 0,149,150 924.391 1186.32 924.391 1186.32 924.235 1164.02 c 0,151,152 927.798 1128.33 l 0,153,154 931.489 1111.34 931.489 1111.34 939 1096 c 0,155,156 963 1046.99 963 1046.99 985 994 c 0,157,158 1013.99 919 1013.99 919 1027 860.5 c 0,159,160 1028.01 839.43 l 0,161,162 1021.88 793.213 1021.88 793.213 941 754 c 0,163,164 953 769 953 769 967.5 790 c 0,165,166 982 811 982 811 982 832 c 0,167,168 982 866 982 866 959 866 c 0,169,170 934.737 863.08 l 0,171,172 896.5 851.954 896.5 851.954 892 797 c 0,173,-1 873 581 l 0,174,175 863 470 863 470 842 367 c 0,176,177 827 297.001 827 297.001 755 159.5 c 0,178,179 683 21.9999 683 21.9999 591 40 c 0,180,181 633 60 633 60 646.5 91.5 c 0,182,183 660 123 660 123 669 167 c 0,184,185 680 225.001 680 225.001 638 356 c 0,186,187 596 487 596 487 525 478 c 0,188,189 501 474 501 474 504.5 443.5 c 0,190,191 507.29 419.188 507.29 419.188 527.552 418.703 c 0,192,193 539 420 l 0,194,195 517 393 517 393 485 416.5 c 0,196,197 452.999 440.001 452.999 440.001 448 457 c 0,198,199 417.999 548.003 417.999 548.003 413 613.5 c 0,200,201 408 679 408 679 381 763 c 0,202,203 361.001 820.999 361.001 820.999 338 828 c 0,204,205 315 835 315 835 338 754 c 0,206,207 345.7 724.299 345.7 724.299 345.686 690.97 c 0,208,209 345.675 663.7 345.675 663.7 340.5 634 c 0,210,211 329 568 329 568 248 600 c 0,212,213 320 597 320 597 288 653 c 0,214,215 256 709 256 709 232 655 c 0,216,217 218.999 625 218.999 625 220 583.5 c 0,218,219 221.001 541.997 221.001 541.997 231 515 c 0,220,221 272 401 272 401 298.5 353.5 c 0,222,223 310.319 332.316 310.319 332.316 310.303 294.126 c 0,224,225 310.283 246.685 310.283 246.685 292 173 c 0,226,227 283 137.999 283 137.999 248.5 118 c 0,228,229 213.999 97.9998 213.999 97.9998 179 90 c 0,230,231 216.999 109.999 216.999 109.999 233 174.5 c 0,232,233 236.04 199.261 l 0,234,235 234.584 237.113 234.584 237.113 182 237 c 0,236,237 142.999 235.999 142.999 235.999 132 189.5 c 0,238,239 121.001 143 121.001 143 121 101 c 0,240,241 121 -12.9997 121 -12.9997 205.5 -65.5 c 0,242,243 290 -118 290 -118 387 -123 c 0,244,245 331.946 -127.042 l 0,246,247 248.215 -126.958 248.215 -126.958 188.5 -85.5 c 0,248,249 109.999 -30.9992 109.999 -30.9992 84 54 c 0,0,1 EndSplineSet KernsSLIF: 97 -208 0 0 EndChar StartChar: o Encoding: 111 111 48 Width: 1255 Flags: W Fore 273 143 m 1,0,1 247 130.5 247 130.5 220.5 130.5 c 0,2,3 194 130.5 194 130.5 167 143 c 0,4,5 68 183.001 68 183.001 68 276 c 0,6,7 68 342 68 342 113 506.5 c 0,8,-1 174 733 l 0,9,10 180.001 758.004 180.001 758.004 183.5 796 c 0,11,12 181.908 815.246 l 0,13,14 175.585 834.878 175.585 834.878 148 837 c 0,15,16 82 841 82 841 89 763 c 0,17,18 37 804 37 804 84.5 974.5 c 0,19,20 132.003 1145.01 132.003 1145.01 147 1245 c 0,21,22 158 1319 158 1319 197 1388 c 0,23,24 220.787 1430.08 220.787 1430.08 268.011 1430.13 c 0,25,26 298.212 1430.16 298.212 1430.16 338 1413 c 0,27,28 247.27 1410.33 247.27 1410.33 246.344 1359.79 c 0,29,30 247.5 1346.5 l 0,31,32 258.818 1284.01 258.818 1284.01 300 1284 c 0,33,34 367.003 1284 367.003 1284 435.5 1390 c 0,35,36 504 1496.01 504 1496.01 459 1522 c 0,37,38 433.333 1536.36 433.333 1536.36 413.25 1536.61 c 0,39,40 394.256 1533.23 l 0,41,42 380.637 1527.76 380.637 1527.76 370.5 1513.5 c 0,43,44 340.989 1471.98 340.989 1471.98 330 1451 c 0,45,46 326.246 1484.15 l 0,47,48 326.881 1531.42 326.881 1531.42 366 1560 c 0,49,50 414.154 1595.18 414.154 1595.18 488.874 1595.22 c 0,51,52 494.849 1595.22 494.849 1595.22 501 1595 c 0,53,54 584.988 1590.01 584.988 1590.01 693.5 1539 c 0,55,56 802 1488 802 1488 835 1428 c 0,57,-1 899 1286.5 l 0,58,59 954.143 1164.13 954.143 1164.13 999 1164 c 0,60,61 1059.17 1168.63 1059.17 1168.63 1059.54 1207.77 c 0,62,63 1059.63 1218.49 1059.63 1218.49 1054.5 1234 c 0,64,65 1032 1297.99 1032 1297.99 975 1299 c 0,66,67 1019.99 1302.45 l 0,68,69 1090.79 1301.3 1090.79 1301.3 1107.5 1250 c 0,70,71 1119.87 1212.01 1119.87 1212.01 1119.83 1182.65 c 0,72,73 1119.79 1160.98 1119.79 1160.98 1113 1144 c 0,74,75 1092.07 1091.19 1092.07 1091.19 1037 938 c 0,76,77 996.721 825.96 996.721 825.96 996.666 771.829 c 0,78,79 996.647 752.046 996.647 752.046 1002 740 c 0,80,81 1014 710 1014 710 1060.5 710.5 c 0,82,83 1107 711 1107 711 1118 750 c 0,84,85 1120.72 775.054 l 0,86,87 1118.42 818.286 1118.42 818.286 1059 827 c 0,88,89 1066.89 837.526 1066.89 837.526 1087.53 837.526 c 0,90,91 1106.1 837.526 1106.1 837.526 1135 829 c 0,92,93 1196.01 811 1196.01 811 1195 746 c 0,94,95 1190.99 608.991 1190.99 608.991 1083.5 510.5 c 0,96,97 976.003 412.007 976.003 412.007 925 303 c 0,98,99 910 273 910 273 941.5 249 c 0,100,101 973 225 973 225 1048 270 c 0,102,103 1015 183 1015 183 859 163.5 c 0,104,105 703 144 703 144 659 120 c 0,106,107 608 91.9995 608 91.9995 531 69.5 c 0,108,109 493.463 58.5313 493.463 58.5313 454.499 58.6135 c 0,110,111 413.537 58.7 413.537 58.7 371 71 c 0,112,113 361 72.9999 361 72.9999 341 87 c 0,114,115 321 101 321 101 317 129 c 0,116,117 362 91.9995 362 91.9995 398 95 c 0,118,119 434 98 434 98 452 118 c 0,120,121 459.368 126.105 459.368 126.105 459.271 134.686 c 0,122,123 459.105 149.395 459.105 149.395 437 165.5 c 0,124,125 402.002 190.999 402.002 190.999 350 210 c 0,126,127 298 229.001 298 229.001 248 237 c 0,128,129 209.512 240.063 l 0,130,131 194.138 239.207 194.138 239.207 190 233 c 0,132,133 178.857 216.286 178.857 216.286 178.827 202.327 c 0,134,135 178.786 183.714 178.786 183.714 198.5 170 c 0,136,137 233 146 233 146 273 143 c 1,0,1 803 384 m 0,79,80 814 403 814 403 806.5 436 c 0,81,82 799 469 799 469 757 454 c 0,83,84 714 439 714 439 719.5 402.5 c 0,85,86 725.001 365.999 725.001 365.999 744 364 c 0,87,88 686 364 686 364 682 416 c 0,89,90 682.987 446.036 l 0,91,92 689.14 481.814 689.14 481.814 720.5 502 c 0,93,94 764 530 764 530 805 574 c 0,95,96 818 588 818 588 852.5 708 c 0,97,98 887 828 887 828 872 893 c 0,99,100 852.999 968.001 852.999 968.001 790.5 1001.5 c 0,101,102 728 1034.99 728 1034.99 728 1128 c 0,103,104 728 1139.99 728 1139.99 743.5 1150 c 0,105,106 751.596 1155.23 751.596 1155.23 760.376 1155.26 c 0,107,108 768.402 1155.3 768.402 1155.3 777 1151 c 0,109,110 764.093 1148.42 764.093 1148.42 763.773 1134.36 c 0,111,112 763.721 1132.08 763.721 1132.08 764 1129.5 c 0,113,114 766 1111 766 1111 781 1111 c 0,115,116 792.638 1113.28 l 0,117,118 801.466 1118.77 801.466 1118.77 801.409 1136.92 c 0,119,120 801.343 1157.82 801.343 1157.82 789.5 1195.5 c 0,121,122 761.999 1283 761.999 1283 675 1301 c 0,123,124 582 1320.01 582 1320.01 516.5 1283 c 0,125,126 451 1245.99 451 1245.99 451 1187 c 0,127,128 451 1166.01 451 1166.01 478.5 1151.5 c 0,129,130 496.123 1142.2 496.123 1142.2 515.194 1142.16 c 0,131,132 525.87 1142.13 525.87 1142.13 537 1145 c 0,133,134 579 1154 579 1154 553 1199 c 0,135,136 583.043 1194.13 583.043 1194.13 583.417 1158.6 c 0,137,138 582 1140.5 l 0,139,140 574 1087.99 574 1087.99 547 1077 c 0,141,142 514.021 1064 514.021 1064 466 1056.5 c 0,143,144 418.018 1049 418.018 1049 379 1032 c 0,145,146 325 1008 325 1008 295.5 850.5 c 0,147,148 267.83 702.772 267.83 702.772 267.873 661.932 c 0,149,150 267.876 659.233 267.876 659.233 268 657 c 0,151,152 270 581 270 581 314.5 564 c 0,153,154 359 547 359 547 403 502 c 0,155,156 425 477 425 477 423.5 434.5 c 0,157,158 422 392 422 392 391 389 c 0,159,160 404 412 404 412 394 428 c 0,161,162 387.333 438.667 387.333 438.667 372.222 438.667 c 0,163,164 364.667 438.667 364.667 438.667 355 436 c 0,165,166 323 427 323 427 329 389 c 0,167,168 335 350.999 335 350.999 365 334 c 0,169,170 446.945 286.393 446.945 286.393 553.56 286.295 c 0,171,172 583.554 286.268 583.554 286.268 615.5 290 c 0,173,174 760.999 306.999 760.999 306.999 803 384 c 0,79,80 EndSplineSet KernsSLIF: 121 -65 0 0 97 -156 0 0 120 -143 0 0 119 -195 0 0 116 -313 0 0 EndChar StartChar: p Encoding: 112 112 62 Width: 1149 Flags: MW VStem: 186 277<161 1354.5> Fore 459 842 m 0,0,1 533 791 533 791 552 852 c 0,2,3 571 918 571 918 538 911.5 c 0,4,5 505.001 905.001 505.001 905.001 490 888 c 0,6,7 484.931 894.589 484.931 894.589 485.001 903.875 c 0,8,9 485.068 912.911 485.068 912.911 490 924.5 c 0,10,11 500.001 948.002 500.001 948.002 510 959 c 0,12,13 552 1001 552 1001 594.5 970.5 c 0,14,15 636.999 940.001 636.999 940.001 684 927 c 0,16,17 743 909 743 909 765.5 991.5 c 0,18,19 788 1074 788 1074 793 1146 c 0,20,21 791.31 1194.24 l 0,22,23 786.836 1233.11 786.836 1233.11 772.5 1275.5 c 0,24,25 748.997 1345 748.997 1345 689 1378 c 0,26,27 653.011 1395.99 653.011 1395.99 614.5 1397 c 0,28,29 576 1398.01 576 1398.01 580 1334 c 0,30,31 582 1300.99 582 1300.99 610.5 1297.5 c 0,32,33 640.125 1297.91 l 0,34,35 655.135 1300.05 655.135 1300.05 671 1306 c 0,36,37 664.999 1278.99 664.999 1278.99 636.5 1266.5 c 0,38,39 618.241 1258.49 618.241 1258.49 605.122 1258.49 c 0,40,41 597.752 1258.48 597.752 1258.48 592 1261 c 0,42,43 532.006 1283.99 532.006 1283.99 502.5 1321.5 c 0,44,45 473 1359 473 1359 453 1368 c 0,46,47 432.95 1375.16 432.95 1375.16 416.875 1375.14 c 0,48,49 388.049 1375.11 388.049 1375.11 372 1352 c 0,50,51 352 1322 352 1322 350.5 1246.5 c 0,52,53 352.925 1165.25 l 0,54,55 355.829 1127.66 355.829 1127.66 362 1088.5 c 0,56,57 375.001 1005.99 375.001 1005.99 400 935 c 0,58,59 425.001 864 425.001 864 459 842 c 0,0,1 219 40 m 0,36,37 217.856 126.542 l 0,38,39 221.958 253.051 221.958 253.051 260 376.5 c 0,40,41 291.04 477.228 291.04 477.228 290.964 584.069 c 0,42,43 290.915 652.771 290.915 652.771 278 724 c 0,44,45 263 800 263 800 215.5 853.5 c 0,46,47 168.001 906.999 168.001 906.999 158 973 c 0,48,49 157.625 1002.88 l 0,50,51 159.2 1017.98 159.2 1017.98 164 1035.5 c 0,52,53 174.001 1071.99 174.001 1071.99 208 1076 c 0,54,55 194.139 1039.57 194.139 1039.57 193.923 1016.15 c 0,56,57 196.953 996.417 l 0,58,59 203.629 978.699 203.629 978.699 225 975 c 0,60,61 246.691 974.559 l 0,62,63 276.931 980 276.931 980 283 1024 c 0,64,65 282.228 1068.73 l 0,66,67 280.438 1090.45 280.438 1090.45 276.5 1120.5 c 0,68,69 266.999 1193.01 266.999 1193.01 244.5 1258 c 0,70,71 221.997 1323 221.997 1323 186 1354.5 c 0,72,73 173.294 1365.62 173.294 1365.62 158.969 1365.71 c 0,74,75 144.032 1365.81 144.032 1365.81 127.335 1353.92 c 0,76,77 114.674 1344.91 114.674 1344.91 101 1329 c 0,78,79 68.9429 1292.23 68.9429 1292.23 68.889 1247.01 c 0,80,81 68.8857 1244.27 68.8857 1244.27 69 1241.5 c 0,82,83 70.9999 1193.01 70.9999 1193.01 89 1171 c 0,84,85 104.009 1149.99 104.009 1149.99 111 1137 c 0,86,87 117.997 1124 117.997 1124 139 1118 c 0,88,89 85.8527 1124.89 85.8527 1124.89 76 1137 c 0,90,91 66.9851 1149.02 66.9851 1149.02 47 1169 c 0,92,93 28 1206.99 28 1206.99 27 1238 c 0,94,95 26 1269.01 26 1269.01 32 1307 c 0,96,97 42.001 1376.01 42.001 1376.01 79 1420 c 0,98,99 169 1523.01 169 1523.01 248 1547.5 c 0,100,101 321.281 1570.22 321.281 1570.22 448.769 1570.15 c 0,102,103 458.716 1570.14 458.716 1570.14 469 1570 c 0,104,105 609.017 1567 609.017 1567 708.5 1534.5 c 0,106,107 808 1501.99 808 1501.99 929 1422 c 0,108,109 988.991 1381.01 988.991 1381.01 1042 1319 c 0,110,111 1071.32 1284.7 1071.32 1284.7 1071.57 1242.43 c 0,112,113 1071.66 1225.04 1071.66 1225.04 1066.84 1206.3 c 0,114,115 1062.2 1188.27 1062.2 1188.27 1053 1169 c 0,116,117 1025 1111.01 1025 1111.01 956 1104 c 0,118,119 978.832 1141.7 978.832 1141.7 979.109 1171.22 c 0,120,121 975.706 1193.58 l 0,122,123 971.477 1206.24 971.477 1206.24 962 1217 c 0,124,125 952.994 1226.01 952.994 1226.01 924 1232.5 c 0,126,127 895 1238.99 895 1238.99 895 1195 c 0,128,129 893 1118.01 893 1118.01 898 1043.5 c 0,130,131 898.872 971.375 l 0,132,133 897.219 932.389 897.219 932.389 891 893 c 0,134,135 883 845 883 845 841.5 736 c 0,136,137 800 627 800 627 729 600 c 0,138,139 704.81 590.534 704.81 590.534 673.984 590.609 c 0,140,141 646.19 590.677 646.19 590.677 613 598.5 c 0,142,143 543 615 543 615 526 669 c 0,144,145 568.61 646.769 568.61 646.769 613.795 646.846 c 0,146,147 617.39 646.853 617.39 646.853 621 647 c 0,148,149 675 650 675 650 679 678.5 c 0,150,151 676.92 691.447 l 0,152,153 667.063 711.922 667.063 711.922 615 728 c 0,154,155 572 741 572 741 525.5 732 c 0,156,157 479 723 479 723 452 689 c 0,158,159 432 663 432 663 414.5 579.5 c 0,160,161 397 496 397 496 412 436 c 0,162,163 428 362 428 362 444.5 296.5 c 0,164,165 461.001 230.997 461.001 230.997 463 161 c 0,166,167 464 15.9999 464 15.9999 401 -99 c 0,168,169 376.999 -141.002 376.999 -141.002 308.5 -197 c 0,170,171 239.999 -253 239.999 -253 190 -253 c 0,172,173 262 -218.001 262 -218.001 340.5 -113.5 c 0,174,175 419 -8.99995 419 -8.99995 383 78 c 0,176,177 363 124.999 363 124.999 327 121.5 c 0,178,179 291 118.001 291 118.001 264 82 c 0,180,181 251.066 64.7553 251.066 64.7553 251.04 37.4438 c 0,182,183 251.029 26.7444 251.029 26.7444 253 14.5 c 0,184,185 260 -29 260 -29 269 -50 c 0,186,187 220.999 -15.9996 220.999 -15.9996 219 40 c 0,36,37 EndSplineSet KernsSLIF: 45 -104 0 0 46 -221 0 0 44 -208 0 0 116 -195 0 0 322 -299 0 0 97 -299 0 0 EndChar StartChar: q Encoding: 113 113 33 Width: 1161 Flags: W Fore 894 1526 m 1,0,1 939 1548.01 939 1548.01 988 1526 c 0,2,3 1076 1482.01 1076 1482.01 1076 1388 c 0,4,5 1076 1319.99 1076 1319.99 1035.5 1151.5 c 0,6,7 995.011 983.049 995.011 983.049 982 920 c 0,8,9 976 893 976 893 973 854.5 c 0,10,11 970 816 970 816 1005 813 c 0,12,13 1025.76 814.377 l 0,14,15 1058.35 822.828 1058.35 822.828 1058.55 874.124 c 0,16,17 1058.58 881.159 1058.58 881.159 1058 889 c 0,18,19 1084.77 857.216 1084.77 857.216 1084.79 810.971 c 0,20,21 1084.81 774.286 1084.81 774.286 1068 728.5 c 0,22,23 1030 624.986 1030 624.986 1030 539 c 0,24,25 1030 452 1030 452 1057 408 c 0,26,27 1084 364 1084 364 1078 313 c 0,28,29 1069 237.011 1069 237.011 1032.5 176 c 0,30,31 1011.58 141.039 1011.58 141.039 973.09 140.897 c 0,32,33 946.128 140.797 946.128 140.797 910.547 157.778 c 0,34,35 908.291 158.855 908.291 158.855 906 160 c 0,36,37 997 161.999 997 161.999 986.5 227.5 c 0,38,39 976 293 976 293 940 293 c 0,40,41 924.998 291.999 924.998 291.999 890 261 c 0,42,43 855 229.999 855 229.999 855 191 c 0,44,45 854 138.001 854 138.001 876 122 c 0,46,47 897.996 106.003 897.996 106.003 926.5 90 c 0,48,49 955 73.9999 955 73.9999 981.5 40.5 c 0,50,51 1008.01 6.99366 1008.01 6.99366 1016 -79 c 0,52,53 985 -1 985 -1 920.5 42 c 0,54,55 856 85.0001 856 85.0001 835 26 c 0,56,57 820 -13 820 -13 902.5 -103 c 0,58,59 985 -193 985 -193 1095 -199 c 0,60,61 1038.78 -196.757 l 0,62,63 961.445 -188.18 961.445 -188.18 897.5 -149 c 0,64,65 811 -96.0005 811 -96.0005 754 -39 c 0,66,67 703 10 703 10 704 62.5 c 0,68,69 705 115 705 115 683 124 c 0,70,71 671.055 128.52 671.055 128.52 660.204 128.453 c 0,72,73 637.445 128.315 637.445 128.315 619.5 108 c 0,74,75 593 78 593 78 533 67 c 0,76,77 296 22 296 22 276 156 c 0,78,79 332 109.001 332 109.001 375.5 127.5 c 0,80,81 419 145.999 419 145.999 391 207 c 0,82,83 384 220.999 384 220.999 333 351 c 0,84,85 282 481 282 481 244 478 c 0,86,87 190.301 472.63 190.301 472.63 189.566 432.54 c 0,88,89 193.349 407.215 l 0,90,91 193.662 406.115 193.662 406.115 194 405 c 0,92,93 213.999 339 213.999 339 265 339 c 0,94,95 248.288 325.169 248.288 325.169 231.244 325.121 c 0,96,97 218.712 325.085 218.712 325.085 206 332.5 c 0,98,99 175.998 350.001 175.998 350.001 170 357 c 0,100,101 138.31 395.028 138.31 395.028 138.359 449.918 c 0,102,103 138.38 472.972 138.38 472.972 144 499 c 0,104,105 155.998 553.993 155.998 553.993 207.5 709.5 c 0,106,107 258.999 865 258.999 865 242 913 c 0,108,109 230.225 942.439 230.225 942.439 188.5 942.5 c 0,110,111 147 942 147 942 138 903 c 0,112,113 135.388 876.036 l 0,114,115 137.633 831.849 137.633 831.849 191 824 c 0,116,117 176 803 176 803 122 821 c 0,118,119 68 839 68 839 69 907 c 0,120,121 72.0001 1046.01 72.0001 1046.01 168 1147 c 0,122,123 263.993 1247.99 263.993 1247.99 311 1361 c 0,124,125 314.463 1377.59 l 0,126,127 314.082 1394.93 314.082 1394.93 293.5 1404 c 0,128,129 280.413 1405.97 l 0,130,131 254.722 1403.08 254.722 1403.08 220 1351 c 0,132,133 224.001 1422 224.001 1422 270.5 1455 c 0,134,135 316.989 1487.99 316.989 1487.99 374 1502.5 c 0,136,137 431 1517.01 431 1517.01 482 1523.5 c 0,138,139 532.995 1529.99 532.995 1529.99 548 1548 c 0,140,141 556.237 1558.37 556.237 1558.37 556.563 1567.91 c 0,142,143 553.491 1580.23 l 0,144,145 545.526 1594.7 545.526 1594.7 517 1607 c 0,146,147 459 1632.01 459 1632.01 408 1580 c 0,148,149 414 1645.99 414 1645.99 485 1659 c 0,150,151 518.084 1665.06 518.084 1665.06 542.705 1665.04 c 0,152,153 570.911 1665.01 570.911 1665.01 588 1657 c 0,154,155 646.008 1630 646.008 1630 681 1590 c 0,156,-1 732 1531 l 0,157,158 785.011 1462.99 785.011 1462.99 864.5 1431 c 0,159,160 902.895 1415.55 902.895 1415.55 928.109 1415.49 c 0,161,162 955.109 1415.42 955.109 1415.42 967 1433 c 0,163,164 992 1470.01 992 1470.01 960.5 1496 c 0,165,166 929 1521.99 929 1521.99 894 1526 c 0,167,-1 894 1526 l 1,0,1 714 1394 m 1,101,102 629.017 1394 629.017 1394 539 1366.5 c 0,103,104 449 1339.01 449 1339.01 420 1278 c 0,105,106 413.818 1265.02 413.818 1265.02 413.751 1247.07 c 0,107,108 413.709 1235.98 413.709 1235.98 416 1223 c 0,109,110 422 1188.99 422 1188.99 461 1205 c 0,111,112 499 1220 499 1220 494 1257.5 c 0,113,114 489.001 1295 489.001 1295 472 1298 c 0,115,116 494.625 1295.06 l 0,117,118 524.25 1285.5 524.25 1285.5 528 1245 c 0,119,120 526.001 1211.45 l 0,121,122 519.32 1176.2 519.32 1176.2 492.5 1156 c 0,123,124 454.022 1127.02 454.022 1127.02 418 1083 c 0,125,126 406 1068 406 1068 372 943.5 c 0,127,128 347.868 855.136 347.868 855.136 347.917 796.743 c 0,129,130 347.937 772.865 347.937 772.865 352 754 c 0,131,132 368 676 368 676 431 615 c 0,133,134 494 554 494 554 494 459 c 0,135,136 494 446.001 494 446.001 480 436 c 0,137,138 466 426 466 426 451 435 c 0,139,140 462.186 437.581 462.186 437.581 462.266 451.639 c 0,141,142 462.279 453.919 462.279 453.919 462 456.5 c 0,143,144 460 475 460 475 448 477 c 0,145,146 415 479 415 479 409 417.5 c 0,147,148 403 356 403 356 459 317 c 0,149,150 543 254 543 254 606 284 c 0,151,152 656 306 656 306 647 353 c 0,153,154 638 400 638 400 584 430 c 0,155,156 665 426 665 426 676.5 381 c 0,157,158 688 336 688 336 742 333 c 0,159,160 775 330 775 330 792 361 c 0,161,162 809 392 809 392 809 407 c 0,163,164 806 469 806 469 732 451 c 0,165,166 693 440 693 440 718 395 c 0,167,168 684 401 684 401 691 455 c 0,169,170 698 509 698 509 724 521 c 0,171,172 752.003 533.001 752.003 533.001 808.5 549.5 c 0,173,174 865 566 865 566 886 619 c 0,175,176 906 672 906 672 888 854.5 c 0,177,178 870 1037 870 1037 777 1157 c 0,179,180 757.882 1180.9 757.882 1180.9 758 1225 c 0,181,182 759 1268.01 759 1268.01 788 1273 c 0,183,184 780.325 1258.24 780.325 1258.24 780.318 1246.44 c 0,185,186 780.313 1238.26 780.313 1238.26 784 1231.5 c 0,187,188 793 1215 793 1215 820 1224 c 0,189,190 848 1233 848 1233 848 1276 c 0,191,192 848 1319 848 1319 828 1343 c 0,193,194 784 1391 784 1391 714 1394 c 1,101,102 EndSplineSet EndChar StartChar: r Encoding: 114 114 58 Width: 1124 Flags: HMW VStem: 91 270<64 1451> Fore 955 37 m 0,0,1 952 91 952 91 911.5 135 c 0,2,3 870.999 179 870.999 179 819 191 c 0,4,5 794.703 192.621 l 0,6,7 770.125 190 770.125 190 755 168 c 0,8,9 745.623 154.361 745.623 154.361 745.693 141.266 c 0,10,11 745.787 123.639 745.787 123.639 763 107 c 0,12,13 789 80 789 80 804 91.5 c 0,14,15 819 103 819 103 834 124 c 0,16,17 849 52 849 52 786 35 c 0,18,19 723 18 723 18 687 71 c 0,20,21 657.999 113.002 657.999 113.002 650 167.5 c 0,22,23 642 221.999 642 221.999 629 268 c 0,24,25 605 346 605 346 541.5 461.5 c 0,26,27 478 577 478 577 396 594 c 0,28,29 366 600 366 600 324 584 c 0,30,31 282 568 282 568 282 504 c 0,32,33 282 388 282 388 319 283 c 0,34,35 356 178 356 178 349 52 c 0,36,37 345 -12 345 -12 286 -82.5 c 0,38,39 227.001 -152.999 227.001 -152.999 166 -175 c 0,40,41 73 -208 73 -208 -6 -196 c 0,42,43 48 -188.001 48 -188.001 113 -160 c 0,44,45 149.001 -141.999 149.001 -141.999 206.5 -91 c 0,46,47 263.999 -40 263.999 -40 268 35 c 0,48,49 267.157 86.4993 l 0,50,51 264.878 110.469 264.878 110.469 259 133 c 0,52,53 247.316 177.79 247.316 177.79 183 178 c 0,54,55 132.68 176.027 132.68 176.027 132.5 103 c 0,56,57 132.999 30.0002 132.999 30.0002 184 11 c 0,58,59 139 9 139 9 119.5 27.5 c 0,60,61 100 46 100 46 91 64 c 0,62,63 46 143.001 46 143.001 96.5 293 c 0,64,65 146.998 442.991 146.998 442.991 166 525 c 0,66,67 187 621 187 621 166 636.5 c 0,68,69 156.351 643.621 156.351 643.621 147.758 643.671 c 0,70,71 137.649 643.73 137.649 643.73 129 634 c 0,72,73 113.001 616.001 113.001 616.001 110.5 587 c 0,74,75 107.999 558 107.999 558 123 546 c 0,76,77 64.9999 548 64.9999 548 58.5 598.5 c 0,78,79 52 649 52 649 59 679 c 0,80,81 71 730 71 730 105 787 c 0,82,83 139.001 844 139.001 844 153 896 c 0,84,85 167.911 959.375 167.911 959.375 167.814 1022.19 c 0,86,87 167.781 1043.63 167.781 1043.63 166 1065 c 0,88,89 155.002 1181.99 155.002 1181.99 136 1306 c 0,90,91 132.713 1352.23 l 0,92,93 134.048 1449.51 134.048 1449.51 207 1533 c 0,94,95 277.995 1615 277.995 1615 419.5 1625.5 c 0,96,97 561 1636 561 1636 567 1480 c 0,98,99 533 1558 533 1558 442.5 1553.5 c 0,100,101 360.829 1549.44 360.829 1549.44 360.191 1469.23 c 0,102,103 360.122 1460.56 360.122 1460.56 361 1451 c 0,104,105 366 1387.99 366 1387.99 491.5 1375.5 c 0,106,107 547.456 1373.25 l 0,108,109 617.51 1376 617.51 1376 619 1414 c 0,110,111 616.188 1429.37 l 0,112,113 607.359 1448.45 607.359 1448.45 570.946 1448.57 c 0,114,115 564.416 1448.59 564.416 1448.59 557 1448 c 0,116,117 588.229 1465.3 588.229 1465.3 621.879 1465.4 c 0,118,119 654.905 1465.5 654.905 1465.5 690.262 1449.03 c 0,120,121 693.869 1447.35 693.869 1447.35 697.5 1445.5 c 0,122,123 773.003 1406.99 773.003 1406.99 802 1323 c 0,124,125 823 1257 823 1257 854.5 1237.5 c 0,126,127 886 1218 886 1218 940 1170 c 0,128,129 964.001 1147.99 964.001 1147.99 973 1098.5 c 0,130,131 982 1049 982 1049 926 1019 c 0,132,133 964 1061 964 1061 938 1095.5 c 0,134,135 921.406 1117.52 921.406 1117.52 906.846 1118.56 c 0,136,137 894.877 1115.67 l 0,138,139 892.918 1114.55 892.918 1114.55 891 1113 c 0,140,141 877.293 1101.25 877.293 1101.25 877.365 1072.37 c 0,142,143 877.441 1042.25 877.441 1042.25 892.5 993.5 c 0,144,145 922 898 922 898 900 805 c 0,146,147 879 719 879 719 799.5 707 c 0,148,149 720 695 720 695 687 725 c 0,150,151 721 725 721 725 748 745 c 0,152,153 768.483 760.172 768.483 760.172 768.823 785.704 c 0,154,155 767 803 l 0,156,157 755 863 755 863 684 802.5 c 0,158,159 622.198 749.838 622.198 749.838 621.768 695.282 c 0,160,161 621.704 687.162 621.704 687.162 623 679 c 0,162,163 628 642 628 642 678.5 602.5 c 0,164,165 714.169 574.601 714.169 574.601 735.12 574.389 c 0,166,167 743.832 574.301 743.832 574.301 750 579 c 0,168,169 767 593 767 593 753 613.5 c 0,170,171 739 634 739 634 703 634 c 0,172,173 706.918 659.463 706.918 659.463 751.5 659.5 c 0,174,175 796 659 796 659 817 635 c 0,176,177 845 602 845 602 837.5 533 c 0,178,179 830 464 830 464 830 422 c 0,180,181 830 331.001 830 331.001 895 304.5 c 0,182,183 960 278 960 278 1008 210 c 0,184,185 1044.01 154.989 1044.01 154.989 1056.5 81 c 0,186,187 1063.49 39.6195 1063.49 39.6195 1063.44 4.82321 c 0,188,189 1063.41 -22.6343 1063.41 -22.6343 1059 -46 c 0,190,191 1012.01 -279.997 1012.01 -279.997 833 -375 c 0,192,193 654 -470 654 -470 447 -500 c 0,194,195 651 -443 651 -443 809 -321.5 c 0,196,197 967 -200 967 -200 955 37 c 0,0,1 502 848 m 0,122,123 524 824 524 824 556 836 c 0,124,125 588 848 588 848 624 872 c 0,126,127 708 930 708 930 720 1081.5 c 0,128,129 721.045 1138.14 l 0,130,131 716.188 1217.67 716.188 1217.67 668.868 1217.71 c 0,132,133 661.895 1217.72 661.895 1217.72 654 1216 c 0,134,135 621 1208.01 621 1208.01 618 1181.5 c 0,136,137 619.974 1168.14 l 0,138,139 627.885 1149.33 627.885 1149.33 665 1133 c 0,140,141 627.903 1130.74 l 0,142,143 584.539 1132.87 584.539 1132.87 560.5 1160.5 c 0,144,145 527.011 1198.99 527.011 1198.99 492 1220 c 0,146,147 456.982 1241.43 456.982 1241.43 425.381 1241.41 c 0,148,149 396.515 1241.4 396.515 1241.4 370.5 1223.5 c 0,150,151 315.999 1186 315.999 1186 290 1108 c 0,152,153 276.999 1070.99 276.999 1070.99 269.5 953 c 0,154,155 269.879 905.901 l 0,156,157 277.054 832.123 277.054 832.123 330 822 c 0,158,159 394 808 394 808 391 879 c 0,160,161 387.786 911.935 387.786 911.935 350.375 911.961 c 0,162,163 341.213 911.967 341.213 911.967 330 910 c 0,164,165 327 927 327 927 359.5 939 c 0,166,167 392 951 392 951 409 941 c 0,168,169 472 898 472 898 464.5 896.5 c 0,170,171 457 895 457 895 502 848 c 0,122,123 EndSplineSet KernsSLIF: 121 -156 0 0 115 -182 0 0 103 -104 0 0 116 -339 0 0 118 -43 0 0 119 -150 0 0 EndChar StartChar: s Encoding: 115 115 25 Width: 1163 Flags: HW Fore 509 51 m 0,0,1 494 57 494 57 471.5 79 c 0,2,3 449 101 449 101 453 122 c 0,4,-1 495.5 92.5 l 0,5,6 517 77.0001 517 77.0001 538 93 c 0,7,8 553.149 104.584 553.149 104.584 553.111 115.871 c 0,9,10 553.064 129.916 553.064 129.916 529.5 143.5 c 0,11,12 487 167.999 487 167.999 420 191.5 c 0,13,-1 286.5 238 l 0,14,15 220 261 220 261 205 285 c 0,16,17 181 321 181 321 187 375.5 c 0,18,19 193 430.001 193 430.001 241 441 c 0,20,21 233.001 324 233.001 324 343 358 c 0,22,23 379 369 379 369 372 414 c 0,24,25 365 459 365 459 353 483 c 0,26,27 327 534 327 534 258 563 c 0,28,29 188.998 592 188.998 592 134 601 c 0,30,31 96.4745 601.959 l 0,32,33 84.3876 601.016 84.3876 601.016 72 598.5 c 0,34,-1 8 586 l 0,35,36 67.4219 631.557 67.4219 631.557 112 631.5 c 0,37,38 156 631 156 631 171 630 c 0,39,40 212.002 627 212.002 627 278.5 599 c 0,41,42 345 571 345 571 373 545 c 0,43,44 420.001 499.999 420.001 499.999 465.5 423 c 0,45,46 511 346 511 346 567 302 c 0,47,48 599 275 599 275 666.5 261 c 0,49,50 689 256.333 689 256.333 707.667 256.333 c 0,51,52 745 256.333 745 256.333 767 275 c 0,53,54 849 347 849 347 861.5 443 c 0,55,56 874 539 874 539 844 610 c 0,57,58 828.999 645.001 828.999 645.001 760.5 693.5 c 0,59,60 692 742 692 742 642 745 c 0,61,62 582 748 582 748 582 710 c 0,63,64 582 667 582 667 600 657.5 c 0,65,-1 650 630 l 0,66,67 605 613 605 613 562.5 634.5 c 0,68,69 520 656 520 656 504 696 c 0,70,-1 465 789.5 l 0,71,72 434 864 434 864 392 943.5 c 0,73,74 350 1023 350 1023 304 1081.5 c 0,75,76 266.656 1128.99 266.656 1128.99 233.93 1129.36 c 0,77,78 226.341 1129.45 226.341 1129.45 219 1127 c 0,79,80 188.007 1116.35 188.007 1116.35 188 1063.5 c 0,81,82 189 1011 189 1011 219 1004 c 0,83,84 196.609 1001.73 l 0,85,86 170.282 1003.7 170.282 1003.7 155.5 1032 c 0,87,88 136 1071 136 1071 136 1089 c 0,89,90 136 1144 136 1144 148.5 1184.5 c 0,91,92 160.999 1225 160.999 1225 182 1267 c 0,93,94 231.001 1368 231.001 1368 351 1456 c 0,95,96 471 1544.01 471 1544.01 521 1573 c 0,97,98 587 1612 587 1612 649.5 1637.5 c 0,99,100 678.818 1649.46 678.818 1649.46 728.714 1649.43 c 0,101,102 785.176 1649.39 785.176 1649.39 868 1634 c 0,103,104 955.012 1617.99 955.012 1617.99 1003 1567.5 c 0,105,106 1051.01 1516.99 1051.01 1516.99 1056 1476 c 0,107,108 1013.4 1532.09 1013.4 1532.09 946.088 1532.22 c 0,109,110 918.604 1532.28 918.604 1532.28 887 1523 c 0,111,112 851 1511 851 1511 833.5 1473.5 c 0,113,114 819.161 1442.77 819.161 1442.77 819.256 1410.37 c 0,115,116 819.277 1403.23 819.277 1403.23 820 1396 c 0,117,118 829 1279 829 1279 945 1291 c 0,119,120 1061.01 1303 1061.01 1303 1138 1327 c 0,121,122 1091 1261.99 1091 1261.99 1004 1243.5 c 0,123,124 945.303 1231.02 945.303 1231.02 908.464 1231.06 c 0,125,126 890.69 1231.07 890.69 1231.07 878 1234 c 0,127,128 803 1250.01 803 1250.01 768 1286.5 c 0,129,130 732.944 1323.05 732.944 1323.05 683 1367 c 0,131,132 648.004 1397.71 648.004 1397.71 602.286 1397.82 c 0,133,134 584.001 1397.86 584.001 1397.86 564 1393 c 0,135,136 494 1376.01 494 1376.01 464 1312 c 0,137,138 442.001 1264 442.001 1264 433.5 1173.5 c 0,139,140 425 1083.01 425 1083.01 473 1046 c 0,141,142 567 971 567 971 609.5 983.5 c 0,143,144 635.732 991.215 635.732 991.215 669.393 991.121 c 0,145,146 690.268 991.062 690.268 991.062 714 988 c 0,147,148 749 983 749 983 784.5 953.5 c 0,149,150 820 924 820 924 801 876 c 0,151,152 778 934 778 934 751.5 937 c 0,153,154 725 940 725 940 710 921 c 0,155,156 703.558 912.65 703.558 912.65 703.463 902.677 c 0,157,158 703.364 892.286 703.364 892.286 710.156 880.133 c 0,159,160 724.167 855.064 724.167 855.064 767.5 822.5 c 0,161,162 852 759 852 759 885 749 c 0,163,164 912 740 912 740 944.5 746.5 c 0,165,166 957.24 749.048 957.24 749.048 957.149 759.202 c 0,167,168 957.008 774.952 957.008 774.952 926 809 c 0,169,170 995 803 995 803 1002.5 737.5 c 0,171,172 1006.09 675.401 l 0,173,174 1005.75 651.29 1005.75 651.29 1002 633 c 0,175,176 994 600 994 600 982.5 508.5 c 0,177,178 971 417 971 417 998 358 c 0,179,180 1019 310 1019 310 1040 298.5 c 0,181,182 1061 286.999 1061 286.999 1073 214 c 0,183,184 1071.38 184.394 l 0,185,186 1067.63 161.887 1067.63 161.887 1057 130 c 0,187,188 1037.99 72.9995 1037.99 72.9995 975 67 c 0,189,190 985.997 86.995 985.997 86.995 1019.5 137 c 0,191,192 1030.29 153.102 1030.29 153.102 1030.65 164.951 c 0,193,194 1027.91 176.689 l 0,195,196 1019.57 191.491 1019.57 191.491 986 196 c 0,197,198 959 199 959 199 935 161.5 c 0,199,200 911 124 911 124 908 120 c 0,201,202 854 37.0001 854 37.0001 726 23 c 0,203,204 659.279 19.5269 l 0,205,206 573.801 20.4195 573.801 20.4195 509 51 c 0,0,1 EndSplineSet KernsSLIF: 99 -52 0 0 115 -104 0 0 116 -78 0 0 EndChar StartChar: t Encoding: 116 116 84 Width: 1471 Flags: HMW HStem: 1266 219.5<365 1069.5> VStem: 624 185.5<219 1233.5> Fore 624 219 m 0,0,1 642.376 322.018 642.376 322.018 642.302 416.663 c 0,2,3 642.244 491.983 642.244 491.983 630.5 562 c 0,4,5 604 720 604 720 562 888 c 0,6,7 553 921 553 921 563 987 c 0,8,9 572.193 1047.67 572.193 1047.67 616.886 1048.34 c 0,10,11 620.807 1048.4 620.807 1048.4 625 1048 c 0,12,13 616.998 1048 616.998 1048 607 1029 c 0,14,15 597 1009.99 597 1009.99 597 1002 c 0,16,17 599 963.001 599 963.001 629.5 959 c 0,18,19 641.54 960.523 l 0,20,21 657.957 968.155 657.957 968.155 658.121 1008.79 c 0,22,23 658.137 1012.74 658.137 1012.74 658 1017 c 0,24,25 656.003 1055.96 656.003 1055.96 647 1181.5 c 0,26,27 639.493 1286.18 639.493 1286.18 588.846 1287.54 c 0,28,29 567 1284 l 0,30,31 554.021 1280 554.021 1280 476 1274 c 0,32,33 397.691 1267.98 397.691 1267.98 365 1266 c 0,34,35 299 1263 299 1263 245.5 1300.5 c 0,36,37 210.991 1324.69 210.991 1324.69 210.807 1365.73 c 0,38,39 210.708 1387.86 210.708 1387.86 221 1416 c 0,40,41 221 1344.01 221 1344.01 259 1340 c 0,42,43 283.415 1340.61 l 0,44,45 310.784 1345.98 310.784 1345.98 311.168 1375.6 c 0,46,47 311.254 1382.2 311.254 1382.2 310 1390 c 0,48,49 301 1445.99 301 1445.99 269 1456 c 0,50,51 189.025 1479.99 189.025 1479.99 142 1484 c 0,52,53 113.297 1482.43 l 0,54,55 75.4871 1475.66 75.4871 1475.66 27 1445 c 0,56,57 46 1488.99 46 1488.99 95.5 1506.5 c 0,58,59 137.72 1521.43 137.72 1521.43 172.316 1521.44 c 0,60,61 178.271 1521.44 178.271 1521.44 184 1521 c 0,62,63 358 1506 358 1506 570 1483.5 c 0,64,65 782 1461 782 1461 932 1470 c 0,66,67 1011.07 1474.01 1011.07 1474.01 1069.5 1485.5 c 0,68,69 1104.15 1492.31 1104.15 1492.31 1144.26 1492.28 c 0,70,71 1171.84 1492.26 1171.84 1492.26 1202 1489 c 0,72,73 1287.72 1478.71 1287.72 1478.71 1288.21 1436.1 c 0,74,75 1286 1421 l 0,76,77 1272.84 1374.96 1272.84 1374.96 1270 1376 c 0,78,79 1266.61 1438.7 1266.61 1438.7 1221.94 1439.3 c 0,80,81 1204.5 1437.5 l 0,82,83 1143.01 1425.01 1143.01 1425.01 1136 1401 c 0,84,85 1131.97 1388.36 1131.97 1388.36 1131.98 1377.27 c 0,86,87 1132.03 1347.14 1132.03 1347.14 1162 1328.5 c 0,88,89 1202.99 1303 1202.99 1303 1257 1303 c 0,90,91 1311 1303 1311 1303 1355.5 1332.5 c 0,92,93 1392.39 1356.95 1392.39 1356.95 1392.51 1405.11 c 0,94,95 1392.54 1415.05 1392.54 1415.05 1391 1426 c 0,96,97 1394.7 1412.33 1394.7 1412.33 1394.7 1396.19 c 0,98,99 1394.72 1368.69 1394.72 1368.69 1384 1334 c 0,100,101 1367.01 1279 1367.01 1279 1286 1255 c 0,102,103 1209.95 1231.81 1209.95 1231.81 1143.93 1231.74 c 0,104,105 1087.56 1231.69 1087.56 1231.69 1038.5 1248.5 c 0,106,107 931.985 1285 931.985 1285 848 1285 c 0,108,109 810 1285 810 1285 809.5 1233.5 c 0,110,111 812.56 1134.13 l 0,112,113 812.772 1131.07 812.772 1131.07 813 1128 c 0,114,-1 820.5 1062 l 0,115,116 828 996 828 996 900 901 c 0,117,118 933 856 933 856 915 750 c 0,119,120 897 644 897 644 814 656 c 0,121,122 874 656 874 656 868 747.5 c 0,123,124 862 839 862 839 820 803 c 0,125,126 789 777.001 789 777.001 784 755.5 c 0,127,128 781.13 743.159 781.13 743.159 781.225 717.148 c 0,129,130 781.296 697.84 781.296 697.84 783 671 c 0,131,132 792 520.002 792 520.002 825.5 433.5 c 0,133,134 859 347 859 347 853 158 c 0,135,136 847 17 847 17 757 -3 c 0,137,138 808 55 808 55 800 89.5 c 0,139,140 792 124 792 124 763.5 129.5 c 0,141,142 744.112 129.608 l 0,143,144 725.165 126.183 725.165 126.183 706 109 c 0,145,146 684.494 89.7188 684.494 89.7188 684.436 50.0908 c 0,147,148 684.416 36.2807 684.416 36.2807 687 20 c 0,149,150 709.999 -130.999 709.999 -130.999 754.5 -171 c 0,151,-1 828 -238 l 0,152,153 706 -212 706 -212 654.5 -55.5 c 0,154,155 603 101 603 101 624 219 c 0,0,1 EndSplineSet KernsSLIF: 322 -326 0 0 117 -117 0 0 104 -169 0 0 45 -221 0 0 46 -260 0 0 44 -260 0 0 243 -208 0 0 115 -208 0 0 111 -182 0 0 97 -448 0 0 EndChar StartChar: u Encoding: 117 117 67 Width: 1204 Flags: W Fore 46 335 m 0,0,1 -12 419 -12 419 50.5 484.5 c 0,2,3 113 550 113 550 146 550 c 0,4,5 107 520 107 520 95 443.5 c 0,6,7 83 367 83 367 171 394 c 0,8,9 196.001 402 196.001 402 204 489 c 0,10,11 208.642 539.483 208.642 539.483 208.57 585.923 c 0,12,13 208.518 619.519 208.518 619.519 206 651 c 0,14,15 198.001 728.999 198.001 728.999 158.5 773 c 0,16,17 147.119 785.678 147.119 785.678 140.179 786.152 c 0,18,19 134.174 783.358 l 0,20,21 129.301 777.2 129.301 777.2 129.337 757.553 c 0,22,23 129.368 740.725 129.368 740.725 133 714 c 0,24,25 81.8411 754.35 81.8411 754.35 81.5628 831.304 c 0,26,27 81.4631 858.861 81.4631 858.861 87.8877 891.11 c 0,28,29 88.4213 893.788 88.4213 893.788 89 896.5 c 0,30,31 116 1023 116 1023 106 1188 c 0,32,33 103.71 1273.97 l 0,34,35 106.169 1385.74 106.169 1385.74 140 1454.5 c 0,36,37 186.008 1548.01 186.008 1548.01 245 1590.5 c 0,38,39 303.999 1632.99 303.999 1632.99 355.5 1640 c 0,40,41 405.982 1646.87 405.982 1646.87 406 1647 c 0,42,43 337.006 1635 337.006 1635 274.5 1567 c 0,44,45 212.006 1499.01 212.006 1499.01 185 1425 c 0,46,47 170.414 1385.03 170.414 1385.03 170.42 1350.16 c 0,48,49 170.425 1320.48 170.425 1320.48 181 1294.5 c 0,50,51 200.164 1247.42 200.164 1247.42 274.889 1247.21 c 0,52,53 289.833 1247.17 289.833 1247.17 307 1249 c 0,54,55 359.668 1254.35 359.668 1254.35 359.608 1300.76 c 0,56,57 359.589 1315.16 359.589 1315.16 354.5 1333.5 c 0,58,59 335.326 1402.62 335.326 1402.62 276.773 1402.94 c 0,60,61 269.676 1402.97 269.676 1402.97 262 1402 c 0,62,63 286.672 1406.42 286.672 1406.42 306.953 1406.43 c 0,64,65 396.829 1406.48 396.829 1406.48 400.5 1320 c 0,66,67 400.121 1249.19 l 0,68,69 396.789 1203.44 396.789 1203.44 384 1187 c 0,70,71 304 1085 304 1085 299.5 912.5 c 0,72,73 295 740 295 740 303 615 c 0,74,75 307.999 531.003 307.999 531.003 343 441 c 0,76,77 378 351 378 351 454 381 c 0,78,79 508 402 508 402 466 449 c 0,80,81 424 496 424 496 403 440 c 0,82,83 400.021 467.968 l 0,84,85 401.42 496.722 401.42 496.722 426 505.5 c 0,86,87 461 518 461 518 482 512 c 0,88,89 561.579 485.473 561.579 485.473 561.729 423.945 c 0,90,91 561.737 420.526 561.737 420.526 561.5 417 c 0,92,93 557 350 557 350 553 329 c 0,94,95 551.037 308.068 l 0,96,97 553.844 275.341 553.844 275.341 595.5 250.5 c 0,98,99 610.331 241.656 610.331 241.656 628.383 241.735 c 0,100,101 676.669 241.947 676.669 241.947 748 306 c 0,102,103 763 319 763 319 797 375 c 0,104,105 830.998 430.995 830.998 430.995 853 497 c 0,106,107 875 563 875 563 869.5 623 c 0,108,109 863.999 683 863.999 683 800 707 c 0,110,111 780.712 710.301 l 0,112,113 758.425 708.952 758.425 708.952 758.366 675.576 c 0,114,115 758.361 672.891 758.361 672.891 758.5 670 c 0,116,117 761 617.999 761 617.999 798 594 c 0,118,119 711.001 634.999 711.001 634.999 705.5 715 c 0,120,121 700 795 700 795 728.5 892.5 c 0,122,123 757 990 757 990 795.5 1095 c 0,124,125 834 1200 834 1200 835 1292 c 0,126,127 835 1305.01 835 1305.01 852.5 1409 c 0,128,129 867.429 1497.72 867.429 1497.72 946.032 1497.66 c 0,130,131 959.572 1497.64 959.572 1497.64 975 1495 c 0,132,133 951.995 1495 951.995 1495 926.5 1468.5 c 0,134,135 911.116 1452.51 911.116 1452.51 910.836 1433.8 c 0,136,137 914.401 1414.21 l 0,138,139 915.524 1411.14 915.524 1411.14 917 1408 c 0,140,141 937.073 1367.26 937.073 1367.26 962.372 1366.61 c 0,142,143 978.379 1369.98 l 0,144,145 988.798 1374.48 988.798 1374.48 1000 1385 c 0,146,147 1024 1406.6 1024 1406.6 1024.06 1454.48 c 0,148,149 1024.1 1486.4 1024.1 1486.4 1013.5 1530 c 0,150,151 987 1639.01 987 1639.01 850 1617 c 0,152,153 950 1666.99 950 1666.99 1035.5 1573.5 c 0,154,155 1080.31 1524.5 1080.31 1524.5 1080.48 1450.07 c 0,156,157 1080.58 1406.75 1080.58 1406.75 1065.56 1354.82 c 0,158,159 1057.15 1325.76 1057.15 1325.76 1044 1294 c 0,160,161 1013.95 1220.87 1013.95 1220.87 979 1119.5 c 0,162,163 944 1017.99 944 1017.99 941 959 c 0,164,165 936 887 936 887 974 864 c 0,166,167 997.65 849.686 997.65 849.686 1019.56 849.509 c 0,168,169 1031.83 849.41 1031.83 849.41 1045.5 854.5 c 0,170,171 1079 868.002 1079 868.002 1085 913 c 0,172,173 1091 958 1091 958 1022 1023 c 0,174,175 1143.01 1012 1143.01 1012 1145 909 c 0,176,177 1142.12 849.83 l 0,178,179 1133.28 771.826 1133.28 771.826 1098 684 c 0,180,181 1048.99 561.998 1048.99 561.998 984 456.5 c 0,182,183 919 351 919 351 906 335 c 0,184,185 872.999 294.998 872.999 294.998 847.5 240 c 0,186,187 840.928 225.825 840.928 225.825 840.965 216.299 c 0,188,189 841.041 196.841 841.041 196.841 868.696 196.786 c 0,190,191 880.031 196.763 880.031 196.763 896 200 c 0,192,193 930.895 206.264 930.895 206.264 931.366 231.74 c 0,194,195 931.421 234.737 931.421 234.737 931 238 c 0,196,197 927 269 927 269 913 308 c 0,198,199 977.209 274.007 977.209 274.007 977.222 212.054 c 0,200,201 977.226 191.993 977.226 191.993 970.5 169 c 0,202,203 943.001 75.0001 943.001 75.0001 865 74 c 0,204,205 732.561 75.6253 l 0,206,207 459.222 87.5019 459.222 87.5019 292.5 172 c 0,208,209 88.0008 275.999 88.0008 275.999 46 335 c 0,0,1 EndSplineSet KernsSLIF: 116 -78 0 0 120 -104 0 0 EndChar StartChar: v Encoding: 118 118 70 Width: 1087 Flags: W Fore 305 1015 m 1,0,1 390 991 390 991 393 922.5 c 0,2,3 393.509 829.461 l 0,4,5 392.953 816.677 392.953 816.677 392 805 c 0,6,7 386 748 386 748 378.5 703.5 c 0,8,9 377.807 678.574 l 0,10,11 381.441 653.166 381.441 653.166 405 640 c 0,12,13 413.621 635.115 413.621 635.115 420.879 634.937 c 0,14,15 431.632 637.67 l 0,16,17 441.986 643.7 441.986 643.7 448.5 663 c 0,18,19 462 703 462 703 466.5 760 c 0,20,21 471 817 471 817 470 870.5 c 0,22,23 469 923.975 469 923.975 469 934 c 0,24,25 469 1002 469 1002 473.5 1056.5 c 0,26,27 478.001 1111.01 478.001 1111.01 499 1176 c 0,28,29 514.003 1223 514.003 1223 546.5 1260.5 c 0,30,31 578.993 1297.99 578.993 1297.99 605 1311 c 0,32,33 619 1313.94 l 0,34,35 626.997 1313.57 626.997 1313.57 635 1308.5 c 0,36,37 650 1299.01 650 1299.01 650 1287 c 0,38,39 637.454 1293.55 637.454 1293.55 628.479 1293.58 c 0,40,41 606.104 1293.67 606.104 1293.67 605.918 1253.32 c 0,42,43 605.905 1250.51 605.905 1250.51 606 1247.5 c 0,44,45 608 1184 608 1184 634 1184 c 0,46,47 662 1184 662 1184 673.5 1211 c 0,48,49 685 1238 685 1238 685 1259 c 0,50,51 685 1341.01 685 1341.01 698.5 1403 c 0,52,53 712.006 1465.02 712.006 1465.02 734 1540 c 0,54,55 740.003 1566.01 740.003 1566.01 763 1593.5 c 0,56,57 786.018 1621.02 786.018 1621.02 799 1633 c 0,58,59 822.005 1653.13 822.005 1653.13 871 1653 c 0,60,61 919 1651.99 919 1651.99 925 1623 c 0,62,63 888 1659 888 1659 826 1611 c 0,64,65 764 1563 764 1563 805 1494 c 0,66,67 819.935 1468.52 819.935 1468.52 842.394 1468.42 c 0,68,69 863.65 1468.32 863.65 1468.32 891.649 1490.95 c 0,70,71 901.414 1498.84 901.414 1498.84 912 1509.5 c 0,72,73 985 1583 985 1583 996 1616 c 0,74,75 1013.4 1672.65 1013.4 1672.65 1013.38 1712.89 c 0,76,77 1013.36 1762.85 1013.36 1762.85 986.5 1787.5 c 0,78,79 937.961 1832.04 937.961 1832.04 924 1847 c 0,80,81 981.007 1818.99 981.007 1818.99 1008.5 1784.5 c 0,82,83 1036 1749.99 1036 1749.99 1036 1677 c 0,84,85 1036 1607.99 1036 1607.99 1000.5 1547.5 c 0,86,87 964.989 1486.99 964.989 1486.99 926 1442 c 0,88,89 743 1230.01 743 1230.01 737 927 c 0,90,91 736 901 736 901 738.5 830.5 c 0,92,93 741 760 741 760 735.5 680 c 0,94,95 729.999 599.996 729.999 599.996 712 529 c 0,96,97 694 458 694 458 652 433 c 0,98,99 688.123 508.663 688.123 508.663 688.026 560.736 c 0,100,101 687.924 615.337 687.924 615.337 648 644 c 0,102,103 585 689 585 689 553 602 c 0,104,105 521 515 521 515 512 471 c 0,106,107 497 399 497 399 486.5 331 c 0,108,109 476 263 476 263 557 266 c 0,110,111 564 266 564 266 577 283.5 c 0,112,113 586.241 295.94 586.241 295.94 586.386 311.664 c 0,114,115 586.446 318.06 586.446 318.06 585 325 c 0,116,117 577 361 577 361 524 372 c 0,118,119 556 398 556 398 584 387 c 0,120,121 612 376 612 376 627 349 c 0,122,123 655 295 655 295 637 239.5 c 0,124,125 619 184.001 619 184.001 590 168 c 0,126,-1 500 116 l 0,127,128 462 93.9995 462 93.9995 462 13 c 0,129,130 462 -101 462 -101 542 -147.5 c 0,131,132 614.087 -189.401 614.087 -189.401 704.039 -189.485 c 0,133,134 713.912 -189.494 713.912 -189.494 724 -189 c 0,135,136 678.195 -202.572 678.195 -202.572 634.149 -202.553 c 0,137,138 600.305 -202.538 600.305 -202.538 567.5 -194.5 c 0,139,140 492 -176.001 492 -176.001 462 -143 c 0,141,142 361 -30.0001 361 -30.0001 359.5 119.5 c 0,143,144 358 269 358 269 283 374 c 0,145,146 269 392 269 392 236 406.5 c 0,147,148 220.144 410.016 l 0,149,150 200.816 409.305 200.816 409.305 190 376 c 0,151,152 169 298 169 298 244 282 c 0,153,154 211.123 281.752 l 0,155,156 195.064 283.447 195.064 283.447 177.5 288.5 c 0,157,158 141 299 141 299 117 359 c 0,159,160 102.015 394.589 102.015 394.589 101.942 433.139 c 0,161,162 101.858 476.911 101.858 476.911 121 524.5 c 0,163,164 157 614 157 614 157 692 c 0,165,166 157 815 157 815 116.5 925 c 0,167,168 75.9978 1035.01 75.9978 1035.01 52 1150 c 0,169,170 43.9902 1184.05 43.9902 1184.05 30 1258.5 c 0,171,172 16 1333.01 16 1333.01 19 1416 c 0,173,174 20.0001 1473.01 20.0001 1473.01 49.5 1551.5 c 0,175,176 79.0021 1630 79.0021 1630 124 1636 c 0,177,178 104.996 1609 104.996 1609 90 1569 c 0,179,180 75 1528.99 75 1528.99 80 1500 c 0,181,182 90.1461 1428.98 90.1461 1428.98 169.197 1428.57 c 0,183,184 175.854 1428.53 175.854 1428.53 183 1429 c 0,185,186 230 1432 230 1432 237.5 1511 c 0,187,188 241.099 1585.22 l 0,189,190 240.776 1614.29 240.776 1614.29 237 1636 c 0,191,192 222 1708 222 1708 140 1720 c 0,193,194 248 1733.01 248 1733.01 277.5 1636 c 0,195,196 307 1538.99 307 1538.99 298 1477 c 0,197,198 292.001 1435.01 292.001 1435.01 269.5 1353 c 0,199,200 246.994 1270.97 246.994 1270.97 238 1222 c 0,201,202 235.011 1207.06 235.011 1207.06 235.093 1163.63 c 0,203,204 235.121 1148.94 235.121 1148.94 235.5 1131 c 0,205,206 237 1060.01 237 1060.01 246 988.5 c 0,207,208 255 917 255 917 274.5 871.5 c 0,209,210 294 826 294 826 327 856 c 0,211,212 363 890 363 890 350 940 c 0,213,214 337 990 337 990 305 1015 c 1,0,1 EndSplineSet KernsSLIF: 246 -172 0 0 111 -143 0 0 45 -182 0 0 46 -182 0 0 44 -208 0 0 105 -104 0 0 97 -257 0 0 EndChar StartChar: w Encoding: 119 119 26 Width: 1586 Flags: HW Fore 1014 -90 m 0,0,1 965 -75 965 -75 934.5 -33.5 c 0,2,3 904 8 904 8 892 43 c 0,4,5 868.999 107.005 868.999 107.005 855 192.5 c 0,6,7 841 278 841 278 813 329 c 0,8,9 773 399 773 399 745.5 404 c 0,10,11 718 409 718 409 682 359 c 0,12,13 655 320 655 320 656.5 224.5 c 0,14,15 658 129.001 658 129.001 687 96 c 0,16,17 710 69 710 69 759 61 c 0,18,19 715.03 35.2941 715.03 35.2941 668.313 35.2145 c 0,20,21 645.97 35.1765 645.97 35.1765 623 41 c 0,22,23 552 59 552 59 522 89 c 0,24,25 493 116 493 116 472.5 149 c 0,26,-1 431 218 l 0,27,28 408 257 408 257 396.5 274 c 0,29,30 385 291 385 291 337 307 c 0,31,32 328 310 328 310 309.5 303 c 0,33,34 291 296 291 296 288 285 c 0,35,36 282.97 270.441 282.97 270.441 282.916 258.825 c 0,37,38 282.819 238.131 282.819 238.131 298.512 226.777 c 0,39,40 307.287 220.428 307.287 220.428 321 217 c 0,41,42 306.593 210.22 306.593 210.22 293.802 210.084 c 0,43,44 284.612 209.986 284.612 209.986 276.255 213.318 c 0,45,46 268.795 216.292 268.795 216.292 262 222 c 0,47,48 237 243 237 243 234 267 c 0,49,50 227.71 307.884 227.71 307.884 227.739 342.862 c 0,51,52 227.766 374.615 227.766 374.615 233 401.5 c 0,53,54 243.998 457.993 243.998 457.993 262 521 c 0,55,56 301 653 301 653 299 782.5 c 0,57,58 297.001 911.997 297.001 911.997 241 1033 c 0,59,60 210.985 1095.03 210.985 1095.03 177 1152 c 0,61,62 143 1209 143 1209 140 1284 c 0,63,64 141.271 1338.67 l 0,65,66 151.107 1435.81 151.107 1435.81 219 1443 c 0,67,68 276 1447.01 276 1447.01 276 1395 c 0,69,70 264.083 1406.32 264.083 1406.32 248.788 1406.46 c 0,71,72 238.421 1406.55 238.421 1406.55 226.5 1401.5 c 0,73,74 207.837 1393.6 207.837 1393.6 207.785 1366.27 c 0,75,76 207.755 1350.41 207.755 1350.41 214 1328 c 0,77,78 222.184 1296.75 222.184 1296.75 252.786 1296.23 c 0,79,80 276.5 1299.5 l 0,81,82 328 1313 328 1313 328 1354 c 0,83,84 327 1443 327 1443 273.5 1477 c 0,85,86 220.007 1511 220.007 1511 157 1511 c 0,87,88 72.0033 1511 72.0033 1511 43.5 1467 c 0,89,90 15 1423.01 15 1423.01 3 1401 c 0,91,92 17 1534.99 17 1534.99 162 1545 c 0,93,94 237 1549.99 237 1549.99 298 1504.5 c 0,95,96 358.995 1459.01 358.995 1459.01 383 1414 c 0,97,98 429.636 1322.85 429.636 1322.85 429.838 1258.41 c 0,99,100 429.922 1231.65 429.922 1231.65 422 1209.5 c 0,101,102 395 1134.01 395 1134.01 386 993 c 0,103,104 383 950 383 950 382.5 891 c 0,105,106 382 832 382 832 411 799 c 0,107,108 431.326 774.91 431.326 774.91 446.268 774.622 c 0,109,110 451.174 774.528 451.174 774.528 455.5 777 c 0,111,112 473 787 473 787 472 808 c 0,113,114 470.999 827.004 470.999 827.004 465.5 843.5 c 0,115,116 460 860 460 860 415 863 c 0,117,118 443.027 877.205 443.027 877.205 466.042 877.26 c 0,119,120 502.973 877.348 502.973 877.348 527 841 c 0,121,122 551 801 551 801 546.5 771 c 0,123,124 542 741 542 741 537 714 c 0,125,126 521 630 521 630 520.5 586 c 0,127,128 523.692 560.121 l 0,129,130 531 533.828 531 533.828 555 516 c 0,131,132 578 498 578 498 624.5 589.5 c 0,133,134 671 681 671 681 692 727 c 0,135,136 714 775 714 775 737 806.5 c 0,137,138 759.999 837.999 759.999 837.999 831 871 c 0,139,140 789 810 789 810 777.5 774 c 0,141,142 766 738 766 738 776 672 c 0,143,144 781 632 781 632 795.5 598.5 c 0,145,146 810 565 810 565 845 561 c 0,147,148 915 552 915 552 953 646 c 0,149,150 991 740 991 740 997 791 c 0,151,152 998.001 801.003 998.001 801.003 1014.5 884.5 c 0,153,154 1019.54 910.001 1019.54 910.001 1019.59 927.713 c 0,155,156 1019.69 963 1019.69 963 999.982 967.379 c 0,157,158 997.19 968 997.19 968 994 968 c 0,159,160 970 968 970 968 962.5 943.5 c 0,161,162 955 919 955 919 973 903 c 0,163,164 934 909 934 909 934 949.5 c 0,165,166 934 990 934 990 943 1005 c 0,167,168 972.994 1052.99 972.994 1052.99 1017.5 1088.5 c 0,169,170 1062 1124 1062 1124 1089 1157 c 0,171,172 1131.02 1208.03 1131.02 1208.03 1142 1228.5 c 0,173,174 1153.01 1249.04 1153.01 1249.04 1171 1303 c 0,175,176 1184.99 1346.01 1184.99 1346.01 1219 1438 c 0,177,178 1253.01 1530.01 1253.01 1530.01 1295 1572 c 0,179,180 1354.39 1631.39 1354.39 1631.39 1409.01 1631.59 c 0,181,182 1420.61 1631.63 1420.61 1631.63 1432 1629 c 0,183,-1 1361.5 1588 l 0,184,185 1328 1568.99 1328 1568.99 1307 1515 c 0,186,187 1293.8 1483.93 1293.8 1483.93 1293.87 1441.71 c 0,188,189 1293.88 1429.57 1293.88 1429.57 1295 1416.5 c 0,190,191 1299.99 1358 1299.99 1358 1350 1352 c 0,192,193 1408.01 1346 1408.01 1346 1458 1382 c 0,194,195 1508 1418.01 1508 1418.01 1532 1472 c 0,196,197 1546.97 1507.94 1546.97 1507.94 1565.5 1542 c 0,198,199 1580.79 1570.11 1580.79 1570.11 1580.71 1634.4 c 0,200,201 1580.7 1647.9 1580.7 1647.9 1580 1663 c 0,202,203 1574 1753.99 1574 1753.99 1443 1824 c 0,204,205 1597 1790 1597 1790 1619 1646 c 0,206,207 1622.07 1590.37 l 0,208,209 1621.42 1545.07 1621.42 1545.07 1611 1496 c 0,210,211 1594 1416 1594 1416 1542 1356 c 0,212,213 1468.98 1272.99 1468.98 1272.99 1374 1201 c 0,214,215 1337.98 1173.98 1337.98 1173.98 1280.5 1098 c 0,216,217 1246.65 1053.25 1246.65 1053.25 1246.59 1018.22 c 0,218,219 1246.55 993.741 1246.55 993.741 1263 974 c 0,220,221 1269.62 966.056 1269.62 966.056 1283.03 966 c 0,222,223 1289.88 965.972 1289.88 965.972 1298.5 968 c 0,224,225 1324 974 1324 974 1330 996 c 0,226,227 1334.96 1014.94 1334.96 1014.94 1334.94 1027.17 c 0,228,229 1334.91 1042.06 1334.91 1042.06 1327.5 1047 c 0,230,-1 1295 1069 l 0,231,232 1323.65 1072.59 l 0,233,234 1361.04 1071.97 1361.04 1071.97 1370 1036.5 c 0,235,236 1376.58 1010.46 1376.58 1010.46 1376.55 986.389 c 0,237,238 1376.52 966.529 1376.52 966.529 1372 948 c 0,239,240 1355.99 885.999 1355.99 885.999 1300 860 c 0,241,242 1243.99 833.995 1243.99 833.995 1199 797 c 0,243,244 1148.02 754.015 1148.02 754.015 1106.5 707.5 c 0,245,246 1065.01 661.014 1065.01 661.014 1055 595 c 0,247,248 1049.56 560.034 1049.56 560.034 1049.63 531.26 c 0,249,250 1049.74 485.962 1049.74 485.962 1063.5 456 c 0,251,-1 1119 332 l 0,252,253 1141.99 276 1141.99 276 1149 213 c 0,254,255 1148.59 180.883 l 0,256,257 1142.04 129.433 1142.04 129.433 1099 66 c 0,258,259 1099 93 1099 93 1111 155.5 c 0,260,261 1112.74 183.814 l 0,262,263 1109.16 226.59 1109.16 226.59 1065 254 c 0,264,265 1024.01 278 1024.01 278 991.5 228 c 0,266,267 959 178.001 959 178.001 957 79 c 0,268,269 955 38 955 38 979 -6 c 0,270,271 1003 -50 1003 -50 1042 -68 c 0,272,273 1079.01 -86 1079.01 -86 1162 -88 c 0,274,275 1136.9 -100.085 1136.9 -100.085 1097.11 -100.071 c 0,276,277 1094.1 -100.07 1094.1 -100.07 1091 -100 c 0,278,279 1047 -98.9998 1047 -98.9998 1014 -90 c 0,0,1 EndSplineSet KernsSLIF: 246 -42 0 0 322 -300 0 0 104 -104 0 0 45 -117 0 0 46 -195 0 0 44 -208 0 0 115 -91 0 0 105 13 0 0 243 -156 0 0 111 -91 0 0 228 -228 0 0 261 -313 0 0 97 -342 0 0 EndChar StartChar: x Encoding: 120 120 28 Width: 1239 Flags: HW Fore 659 1394 m 0,0,1 619.965 1385.64 619.965 1385.64 619.801 1356.11 c 0,2,3 619.788 1353.86 619.788 1353.86 620 1351.5 c 0,4,5 623 1318.99 623 1318.99 623 1318 c 0,6,7 587.525 1334.5 587.525 1334.5 587.443 1378.22 c 0,8,9 587.425 1387.5 587.425 1387.5 589 1398 c 0,10,11 594 1451.01 594 1451.01 659 1468 c 0,12,13 695.043 1477.01 695.043 1477.01 742 1494.5 c 0,14,15 789.016 1512.01 789.016 1512.01 820 1533 c 0,16,17 832 1542 832 1542 845.5 1570.5 c 0,18,19 858.997 1598.99 858.997 1598.99 863 1616 c 0,20,21 879 1701.99 879 1701.99 812 1712 c 0,22,23 845 1721 845 1721 866.5 1701.5 c 0,24,25 888 1682 888 1682 888 1656 c 0,26,27 888 1633.99 888 1633.99 882 1558.5 c 0,28,29 881.281 1511.03 l 0,30,31 883.815 1483 883.815 1483 896 1483 c 0,32,33 912.786 1485.53 l 0,34,35 929.979 1492.51 929.979 1492.51 941 1518 c 0,36,37 960.999 1566 960.999 1566 962 1610 c 0,38,39 963.001 1654 963.001 1654 982 1696 c 0,40,41 999.999 1735 999.999 1735 1035.5 1760 c 0,42,43 1065.03 1780.8 1065.03 1780.8 1090.77 1780.83 c 0,44,45 1095.96 1780.84 1095.96 1780.84 1101 1780 c 0,46,47 1029 1757.99 1029 1757.99 1029 1701 c 0,48,49 1029 1659 1029 1659 1074 1659 c 0,50,51 1094 1659 1094 1659 1101 1678 c 0,52,53 1105.12 1689.17 1105.12 1689.17 1105.08 1698.97 c 0,54,55 1105.06 1705.82 1105.06 1705.82 1103 1712 c 0,56,57 1136 1707.99 1136 1707.99 1136 1667 c 0,58,59 1136 1625.99 1136 1625.99 1126 1609 c 0,60,61 1111 1583.01 1111 1583.01 1078 1549 c 0,62,-1 1024 1495 l 0,63,-1 922 1402 l 0,64,65 840.994 1328.99 840.994 1328.99 816 1271 c 0,66,67 801.993 1240.98 801.993 1240.98 770 1138 c 0,68,69 756.589 1094.83 756.589 1094.83 756.527 1063.96 c 0,70,71 756.441 1021.17 756.441 1021.17 782 1002 c 0,72,73 804 985 804 985 828.5 999 c 0,74,75 852.987 1012.99 852.987 1012.99 864 1027 c 0,76,77 875.229 1041.97 875.229 1041.97 875.513 1054.86 c 0,78,79 872.132 1069.17 l 0,80,81 868.752 1075.66 868.752 1075.66 862 1081.5 c 0,82,83 835.994 1104.01 835.994 1104.01 818 1106 c 0,84,85 855 1118 855 1118 885 1103 c 0,86,87 914.998 1088 914.998 1088 921 1071 c 0,88,89 942 993 942 993 894.5 964.5 c 0,90,91 847 936 847 936 802 891 c 0,92,93 754.999 845.999 754.999 845.999 753 810.5 c 0,94,95 751 775 751 775 757 739 c 0,96,97 772 636 772 636 907 471 c 0,98,-1 1101 234 l 0,99,100 1123.99 205.001 1123.99 205.001 1140 136 c 0,101,102 1156.01 67 1156.01 67 1119 34 c 0,103,104 1150.99 92.9999 1150.99 92.9999 1098 169 c 0,105,106 1045.01 244.998 1045.01 244.998 995 254 c 0,107,108 968.167 255.138 l 0,109,110 937.522 251.594 937.522 251.594 928.5 222 c 0,111,112 922.338 201.789 922.338 201.789 922.373 184.251 c 0,113,114 922.408 166.211 922.408 166.211 929 151 c 0,115,116 965 65.0001 965 65.0001 1025.5 36.5 c 0,117,118 1085.99 8 1085.99 8 1144 7 c 0,119,120 1202.59 9.65475 l 0,121,122 1224.73 12.2988 1224.73 12.2988 1243.5 17.5 c 0,123,124 1271 25.1205 1271 25.1205 1280.28 25.0566 c 0,125,126 1285 25.0241 1285 25.0241 1285 23 c 0,127,128 1192.24 -6.79408 1192.24 -6.79408 1118.61 -6.88269 c 0,129,130 1061.26 -6.95171 1061.26 -6.95171 1015.5 11 c 0,131,132 911 52 911 52 870 160 c 0,133,134 845.997 221.008 845.997 221.008 811.5 322.5 c 0,135,136 777 424 777 424 750 427 c 0,137,138 696 431 696 431 696 382 c 0,139,140 696 336 696 336 739 342 c 0,141,142 717 315 717 315 691.5 326 c 0,143,144 666 337 666 337 657 358 c 0,145,146 635.001 402.998 635.001 402.998 631 455.5 c 0,147,148 627 508 627 508 627 568 c 0,149,150 627 589 627 589 617 628 c 0,151,152 607 667 607 667 580 671 c 0,153,154 514 678 514 678 468.5 563 c 0,155,156 436.8 482.877 436.8 482.877 436.894 455.18 c 0,157,158 436.935 443.123 436.935 443.123 443 441 c 0,159,160 455.538 439.465 l 0,161,162 466.861 441.222 466.861 441.222 479 454 c 0,163,164 500 475 500 475 469 506 c 0,165,166 487 506 487 506 501 486.5 c 0,167,168 515 467 515 467 515 449 c 0,169,170 515 414 515 414 487.5 372.5 c 0,171,172 460.001 331 460.001 331 425 322 c 0,173,174 379 310 379 310 340.5 285 c 0,175,176 302 260 302 260 291 212 c 0,177,178 278.998 157.992 278.998 157.992 266 109 c 0,179,180 253 59.9999 253 59.9999 230 30 c 0,181,182 219.999 16.9999 219.999 16.9999 184 7 c 0,183,184 163.709 1.36363 163.709 1.36363 148.819 1.44562 c 0,185,186 137.291 1.50909 137.291 1.50909 129 5 c 0,187,188 177.001 11.0001 177.001 11.0001 203 57 c 0,189,190 219 85.9999 219 85.9999 219.5 143.5 c 0,191,192 216.668 168.843 l 0,193,194 207.895 201 207.895 201 172 201 c 0,195,196 119 201 119 201 89.5 137 c 0,197,198 59.9999 72.9999 59.9999 72.9999 60 28 c 0,199,200 60 -48.0001 60 -48.0001 140 -88 c 0,201,202 81.0005 -88 81.0005 -88 54 -50 c 0,203,204 27 -12 27 -12 24 28 c 0,205,206 16 129 16 129 78 217 c 0,207,208 109 262 109 262 210 369 c 0,209,210 311 476 311 476 309 521 c 0,211,212 309 548 309 548 273 548 c 0,213,214 255 548 255 548 254.5 529 c 0,215,216 254.999 510 254.999 510 262 501 c 0,217,218 241 495 241 495 221.5 518.5 c 0,219,220 212.134 529.788 212.134 529.788 212.111 544.881 c 0,221,222 212.087 561.212 212.087 561.212 223 582 c 0,223,224 239.999 615 239.999 615 289 644 c 0,225,226 337.997 672.998 337.997 672.998 367 699 c 0,227,228 395 726 395 726 429.5 778 c 0,229,230 464 830 464 830 464 873 c 0,231,232 464 901 464 901 440.5 913 c 0,233,234 417 925 417 925 394 925 c 0,235,236 327 922 327 922 336 877.5 c 0,237,238 345 833 345 833 371 833 c 0,239,240 338.017 831.603 l 0,241,242 312.765 833.673 312.765 833.673 291.5 846 c 0,243,244 257 866 257 866 257 914 c 0,245,246 257 952 257 952 278 992 c 0,247,248 299.005 1032.01 299.005 1032.01 307 1066 c 0,249,250 313.999 1095.99 313.999 1095.99 315 1138.5 c 0,251,252 312.455 1183.29 l 0,253,254 310.196 1197.83 310.196 1197.83 306 1210 c 0,255,256 284 1267 284 1267 239 1313.5 c 0,257,258 194 1360 194 1360 194 1432 c 0,259,260 194 1451.01 194 1451.01 215 1489 c 0,261,262 236 1526.99 236 1526.99 270 1528 c 0,263,264 236 1496.01 236 1496.01 236 1452 c 0,265,266 236 1440 236 1440 247 1420.5 c 0,267,268 257.999 1401 257.999 1401 277 1401 c 0,269,270 331 1401 331 1401 331 1456 c 0,271,272 331 1616.55 331 1616.55 200.138 1616.46 c 0,273,274 193.252 1616.45 193.252 1616.45 186 1616 c 0,275,276 285 1646 285 1646 330 1596.5 c 0,277,278 375 1547 375 1547 394 1472 c 0,279,280 409 1407.01 409 1407.01 417 1338 c 0,281,282 425 1269 425 1269 443 1206 c 0,283,284 449.999 1179.01 449.999 1179.01 481.5 1130 c 0,285,286 506.465 1091.16 506.465 1091.16 534.26 1090.65 c 0,287,288 549 1093 l 0,289,290 590.995 1106.99 590.995 1106.99 627 1158 c 0,291,292 662.996 1208.99 662.996 1208.99 678 1250 c 0,293,294 683.003 1263.01 683.003 1263.01 694 1333.5 c 0,295,296 695.76 1365.97 l 0,297,298 693.084 1394.55 693.084 1394.55 670.648 1395.23 c 0,299,300 659 1394 l 0,0,1 EndSplineSet KernsSLIF: 45 -208 0 0 EndChar StartChar: y Encoding: 121 121 27 Width: 1145 Flags: HMW VStem: 362 278<103 873> Fore 516 -249 m 1,0,1 569 -202.999 569 -202.999 604.5 -50.5 c 0,2,3 640 102 640 102 589 147 c 0,4,5 567.001 165.999 567.001 165.999 504.5 170 c 0,6,7 477.767 168.457 l 0,8,9 455.328 163.118 455.328 163.118 455.365 142.228 c 0,10,11 455.38 133.861 455.38 133.861 459 123 c 0,12,13 468 92.0002 468 92.0002 495.5 86.5 c 0,14,15 519.369 85.4306 l 0,16,17 534.421 87.1496 534.421 87.1496 549 95 c 0,18,19 549 54.9999 549 54.9999 463 48.5 c 0,20,21 377 42 377 42 362 103 c 0,22,23 355.586 126.249 355.586 126.249 355.68 149.9 c 0,24,25 355.821 185.251 355.821 185.251 370.5 221.5 c 0,26,27 395.006 282.015 395.006 282.015 415 340 c 0,28,29 424 366 424 366 455 504 c 0,30,31 486 642 486 642 438 650 c 0,32,33 419 653 419 653 398 640.5 c 0,34,35 377 628 377 628 378 601 c 0,36,37 378 580.999 378 580.999 418 573 c 0,38,39 386 561 386 561 346 568.5 c 0,40,41 306 576 306 576 292 607 c 0,42,43 286.399 619.52 286.399 619.52 286.497 633.18 c 0,44,45 286.697 660.981 286.697 660.981 310.5 693.5 c 0,46,47 345.999 741.998 345.999 741.998 355 780 c 0,48,49 369 840 369 840 346.5 900.5 c 0,50,51 324 961 324 961 288 1000 c 0,52,53 272 1015 272 1015 252 995.5 c 0,54,55 232.001 976 232.001 976 246 956 c 0,56,57 256.001 940.999 256.001 940.999 263 936.5 c 0,58,59 270 932 270 932 306 932 c 0,60,61 300 916.001 300 916.001 256.5 913.5 c 0,62,63 213 911 213 911 189 929 c 0,64,65 151.001 958 151.001 958 163.5 1022 c 0,66,67 176 1086.01 176 1086.01 176 1126 c 0,68,69 176 1218 176 1218 110.5 1270.5 c 0,70,71 44.9999 1323 44.9999 1323 33 1407 c 0,72,73 18 1494 18 1494 57.5 1593 c 0,74,75 96.9998 1692 96.9998 1692 216 1740 c 0,76,77 135 1689 135 1689 92 1606.5 c 0,78,79 69.4154 1563.17 69.4154 1563.17 69.4513 1518.87 c 0,80,81 69.4837 1478.83 69.4837 1478.83 88 1438 c 0,82,83 112.858 1381.83 112.858 1381.83 177.572 1381.62 c 0,84,85 183.138 1381.6 183.138 1381.6 189 1382 c 0,86,87 262.991 1386.99 262.991 1386.99 299 1428 c 0,88,89 310.937 1441.84 310.937 1441.84 311.247 1455.12 c 0,90,91 308.015 1469.67 l 0,92,93 304.702 1476.67 304.702 1476.67 298 1483.5 c 0,94,95 280.194 1501.65 280.194 1501.65 252.532 1501.74 c 0,96,97 239.809 1501.78 239.809 1501.78 225 1498 c 0,98,99 263.544 1524.4 263.544 1524.4 296.233 1524.59 c 0,100,101 312.955 1524.69 312.955 1524.69 328.145 1517.93 c 0,102,103 339.5 1512.88 339.5 1512.88 350 1504 c 0,104,105 374.854 1481.76 374.854 1481.76 375.11 1449.04 c 0,106,107 371.339 1421.03 l 0,108,109 370.117 1416.35 370.117 1416.35 368.5 1411.5 c 0,110,111 349.989 1355.97 349.989 1355.97 349.951 1317.11 c 0,112,113 349.949 1315.03 349.949 1315.03 350 1313 c 0,114,115 351.001 1224.99 351.001 1224.99 385 1074.5 c 0,116,117 411.928 955.304 411.928 955.304 474.61 954.347 c 0,118,119 499.5 958.184 l 0,120,121 504.651 959.766 504.651 959.766 510 962 c 0,122,123 546 977 546 977 584 1038 c 0,124,125 622.001 1099.01 622.001 1099.01 630 1128 c 0,126,127 631.185 1147.49 l 0,128,129 629.345 1163.19 629.345 1163.19 620 1184.5 c 0,130,131 609.445 1208.57 609.445 1208.57 592.368 1208.51 c 0,132,133 583.553 1208.47 583.553 1208.47 573 1202 c 0,134,135 556.8 1191.8 556.8 1191.8 556.8 1181.24 c 0,136,137 556.8 1174.2 556.8 1174.2 564 1167 c 0,138,139 582 1149 582 1149 603 1149 c 0,140,141 571 1128 571 1128 542.5 1143 c 0,142,143 514 1158 514 1158 510 1180 c 0,144,145 507.91 1207.16 l 0,146,147 511.963 1262.94 511.963 1262.94 588.5 1301 c 0,148,149 682.991 1347.99 682.991 1347.99 732 1405 c 0,150,151 768.009 1445.01 768.009 1445.01 792 1500 c 0,152,153 816 1555.01 816 1555.01 846 1599 c 0,154,-1 874.5 1643 l 0,155,156 903 1686.99 903 1686.99 957 1673 c 0,157,158 907.003 1659.01 907.003 1659.01 891.5 1616.5 c 0,159,160 887.421 1605.32 887.421 1605.32 887.324 1595.41 c 0,161,162 887.226 1585.39 887.226 1585.39 891.206 1576.68 c 0,163,164 898.238 1561.29 898.238 1561.29 918 1550 c 0,165,166 937 1538 937 1538 967.5 1551.5 c 0,167,168 998.009 1565 998.009 1565 1006 1574 c 0,169,170 1046.5 1622 1046.5 1622 1046.75 1658 c 0,171,172 1046.85 1672.4 1046.85 1672.4 1040.51 1684.88 c 0,173,174 1031 1703.6 1031 1703.6 1007 1718 c 0,175,176 927.02 1765.99 927.02 1765.99 906 1773 c 0,177,178 983.986 1759.01 983.986 1759.01 1020.5 1727 c 0,179,180 1057 1695 1057 1695 1060 1689 c 0,181,182 1076.31 1652.31 1076.31 1652.31 1076.45 1623.69 c 0,183,184 1076.52 1610.2 1076.52 1610.2 1073 1598.5 c 0,185,186 1062.01 1562.02 1062.01 1562.02 1024 1505 c 0,187,188 987.005 1448.01 987.005 1448.01 903.5 1384 c 0,189,190 819.999 1319.99 819.999 1319.99 811 1257 c 0,191,192 809.173 1213.58 l 0,193,194 810.601 1181.82 810.601 1181.82 820.5 1146.5 c 0,195,196 837 1089 837 1089 839 1036 c 0,197,198 839 1010 839 1010 819 933 c 0,199,200 799 856 799 856 709 850 c 0,201,202 745 861 745 861 768 927 c 0,203,204 791 993 791 993 716 993 c 0,205,206 672 993 672 993 656 947 c 0,207,208 640 901.001 640 901.001 640 873 c 0,209,210 640 803 640 803 697 793 c 0,211,212 726.152 787.237 726.152 787.237 749.1 787.335 c 0,213,214 793.848 787.525 793.848 787.525 815 810 c 0,215,216 833.353 829.5 833.353 829.5 833.285 849 c 0,217,218 833.235 863.5 833.235 863.5 823 878 c 0,219,220 848 875 848 875 858 850 c 0,221,222 865.632 830.921 865.632 830.921 865.692 818.831 c 0,223,224 865.711 815.079 865.711 815.079 865 812 c 0,225,226 835 710 835 710 753.5 661.5 c 0,227,228 672 613 672 613 642 505 c 0,229,230 631 467 631 467 622.5 420.5 c 0,231,232 614 374 614 374 614 333 c 0,233,234 614 291 614 291 631.5 245 c 0,235,236 649.004 198.989 649.004 198.989 665 162 c 0,237,238 678.513 129.86 678.513 129.86 678.555 90.5183 c 0,239,240 678.626 22.1387 678.626 22.1387 638 -68 c 0,241,242 573.999 -210.001 573.999 -210.001 516 -249 c 1,0,1 EndSplineSet KernsSLIF: 111 -130 0 0 322 -260 0 0 115 -208 0 0 45 -169 0 0 46 -195 0 0 44 -208 0 0 97 -363 0 0 EndChar StartChar: z Encoding: 122 122 31 Width: 1565 Flags: HMW HStem: 147 132.5<256.5 1230.5> 1333 115<337 1066> Fore 192 -73 m 0,0,1 107 -73 107 -73 98 23 c 0,2,3 96.9999 29 96.9999 29 101.5 75 c 0,4,5 106 121.001 106 121.001 142 130 c 0,6,7 127 112 127 112 121.5 80.5 c 0,8,9 121.118 58.5858 l 0,10,11 123.865 43.8878 123.865 43.8878 136 36 c 0,12,13 157.196 21.0841 157.196 21.0841 178.239 21.0364 c 0,14,15 210.804 20.9627 210.804 20.9627 243 56.5 c 0,16,17 288.962 107.232 288.962 107.232 289.049 160.597 c 0,18,19 289.062 168.768 289.062 168.768 288 177 c 0,20,21 281 231.999 281 231.999 256.5 279.5 c 0,22,23 233.051 324.964 233.051 324.964 232.961 390.117 c 0,24,25 232.957 393.038 232.957 393.038 233 396 c 0,26,27 233 426.002 233 426.002 253.5 467 c 0,28,29 274 508 274 508 310 517 c 0,30,31 319 520 319 520 341.5 521 c 0,32,33 358.339 518.81 l 0,34,35 366.273 515.636 366.273 515.636 369 508 c 0,36,37 349 520 349 520 313.5 502 c 0,38,39 278.001 484.001 278.001 484.001 277 463 c 0,40,41 274 439 274 439 280 410 c 0,42,43 286 381 286 381 319 381 c 0,44,45 358 381 358 381 408 486 c 0,46,47 458 591 458 591 467 627 c 0,48,49 491 716 491 716 498.5 795.5 c 0,50,51 506 875 506 875 519 955 c 0,52,53 522 977.999 522 977.999 536 1011.5 c 0,54,55 550.003 1045 550.003 1045 568 1060 c 0,56,57 614.007 1102.01 614.007 1102.01 662.5 1108.5 c 0,58,59 695.795 1109.75 l 0,60,61 715.86 1107.71 715.86 1107.71 723 1097 c 0,62,63 702.171 1098.72 l 0,64,65 673.014 1096.04 673.014 1096.04 638 1066.5 c 0,66,67 590 1026 590 1026 625 993 c 0,68,69 635.364 982.636 635.364 982.636 649.389 982.592 c 0,70,71 665.136 982.541 665.136 982.541 685.5 995.5 c 0,72,73 723.984 1019.98 723.984 1019.98 737 1037 c 0,74,-1 789 1107.5 l 0,75,76 816.971 1146.95 816.971 1146.95 837 1182 c 0,77,78 858 1218 858 1218 870.5 1258.5 c 0,79,80 873.186 1278.82 l 0,81,82 871.615 1307.02 871.615 1307.02 839 1330 c 0,83,84 801.009 1356.99 801.009 1356.99 740.5 1364 c 0,85,86 680.044 1371 680.044 1371 635 1371 c 0,87,88 532.993 1371 532.993 1371 488 1338.5 c 0,89,-1 383 1259 l 0,90,-1 358.5 1239 l 0,91,92 340.993 1225 340.993 1225 330 1225 c 0,93,94 299.544 1226.95 l 0,95,96 286.046 1229.27 286.046 1229.27 269.5 1234 c 0,97,98 231.001 1244.99 231.001 1244.99 222 1284 c 0,99,100 229.997 1268 229.997 1268 286.5 1259 c 0,101,102 306.838 1259.13 l 0,103,104 337.526 1265.89 337.526 1265.89 337.576 1317.74 c 0,105,106 337.583 1324.94 337.583 1324.94 337 1333 c 0,107,108 332 1395.01 332 1395.01 253.5 1400 c 0,109,110 178.634 1401.45 l 0,111,112 156.61 1400.4 156.61 1400.4 143 1397 c 0,113,114 33.0001 1368.01 33.0001 1368.01 34.5 1305.5 c 0,115,116 35 1212 l 0,117,118 14.6647 1264.87 14.6647 1264.87 14.6483 1304.98 c 0,119,120 14.6284 1353.63 14.6284 1353.63 44.5 1383.5 c 0,121,122 99.0072 1438 99.0072 1438 147 1453 c 0,123,124 205.397 1470.43 205.397 1470.43 268.328 1470.39 c 0,125,126 277.615 1470.39 277.615 1470.39 287 1470 c 0,127,128 360.084 1467 360.084 1467 429 1460 c 0,129,130 489.53 1456.4 l 0,131,132 508.127 1456.49 508.127 1456.49 527 1458 c 0,133,134 563.734 1460.94 563.734 1460.94 564.304 1486.01 c 0,135,136 560.419 1505.87 l 0,137,138 560 1507 l 0,139,140 549.725 1533.71 549.725 1533.71 523.728 1534.15 c 0,141,142 499.826 1530.11 l 0,143,144 498.185 1529.59 498.185 1529.59 496.5 1529 c 0,145,146 448.004 1512.01 448.004 1512.01 444 1498 c 0,147,148 443.297 1522.75 l 0,149,150 445.875 1541.5 445.875 1541.5 459 1554 c 0,151,152 480.015 1574.01 480.015 1574.01 498 1579 c 0,153,154 519.22 1584.14 519.22 1584.14 547.867 1584.12 c 0,155,156 563.788 1584.11 563.788 1584.11 582 1582.5 c 0,157,158 632.988 1578 632.988 1578 666 1561 c 0,159,-1 770 1503.5 l 0,160,161 827.016 1471.99 827.016 1471.99 874 1461 c 0,162,163 926.975 1448 926.975 1448 969 1446.5 c 0,164,165 1061.49 1447.76 l 0,166,167 1063.75 1447.88 1063.75 1447.88 1066 1448 c 0,168,169 1144.4 1445.44 l 0,170,171 1155 1444.6 1155 1444.6 1166 1443.5 c 0,172,173 1221.01 1437.99 1221.01 1437.99 1257 1405 c 0,174,175 1282.01 1381 1282.01 1381 1284 1322.5 c 0,176,177 1281.53 1288.39 l 0,178,179 1274.87 1255.1 1274.87 1255.1 1251 1236 c 0,180,181 1233.82 1220.31 1233.82 1220.31 1198.24 1220.25 c 0,182,183 1186.18 1220.23 1186.18 1220.23 1172 1222 c 0,184,185 1199 1223.01 1199 1223.01 1227.5 1271 c 0,186,187 1239.27 1290.83 1239.27 1290.83 1239.19 1309.97 c 0,188,189 1239.06 1337.18 1239.06 1337.18 1215 1363 c 0,190,191 1204.09 1373.91 1204.09 1373.91 1185.45 1373.96 c 0,192,193 1169.91 1374 1169.91 1374 1149 1366.5 c 0,194,195 1103 1350 1103 1350 1088 1334 c 0,196,197 1024.02 1263.03 1024.02 1263.03 959.5 1150.5 c 0,198,199 895 1038 895 1038 856 951 c 0,200,201 832.001 895.003 832.001 895.003 817.5 818 c 0,202,203 803 741.002 803 741.002 795 679 c 0,204,205 786 618 786 618 751 587.5 c 0,206,207 716 557 716 557 637 590 c 0,208,209 659.766 589.972 l 0,210,211 678.989 592.981 678.989 592.981 702.5 605.5 c 0,212,213 741 626 741 626 725 677 c 0,214,215 707 731 707 731 653 680 c 0,216,217 599 629 599 629 596 596 c 0,218,219 590 541 590 541 588.5 442 c 0,220,221 587 343 587 343 660 325 c 0,222,223 760 298 760 298 856 298 c 0,224,225 936 298 936 298 972 357 c 0,226,227 1007.98 415.974 1007.98 415.974 1049 469 c 0,228,229 1105.57 542.286 1105.57 542.286 1153.05 542.837 c 0,230,231 1173.67 539.5 l 0,232,233 1188.84 534.299 1188.84 534.299 1203 521 c 0,234,235 1265.25 462.519 1265.25 462.519 1265 433 c 0,236,237 1250 456 1250 456 1196 475.5 c 0,238,239 1178.91 481.671 1178.91 481.671 1164.73 481.583 c 0,240,241 1134.09 481.393 1134.09 481.393 1117 452 c 0,242,243 1099 422 1099 422 1099 367 c 0,244,245 1099 335.005 1099 335.005 1137 302.5 c 0,246,247 1174.99 270 1174.99 270 1197 261 c 0,248,249 1228.05 248.984 1228.05 248.984 1273 233 c 0,250,251 1317.95 217.016 1317.95 217.016 1349 205 c 0,252,253 1409 179.999 1409 179.999 1446.5 127.5 c 0,254,255 1474.23 88.6715 1474.23 88.6715 1474.35 48.4816 c 0,256,257 1474.39 34.3255 1474.39 34.3255 1471 20 c 0,258,259 1456 56 1456 56 1429 96.5 c 0,260,261 1402 136.999 1402 136.999 1336 144 c 0,262,263 1246.66 147.183 l 0,264,265 1238.67 147.142 1238.67 147.142 1230.5 147 c 0,266,267 1172.99 145.999 1172.99 145.999 1126 134 c 0,268,269 1084 123.001 1084 123.001 1045 98 c 0,270,271 1006 72.9999 1006 72.9999 970 59 c 0,272,273 918 39 918 39 879 33.5 c 0,274,275 840 28 840 28 810 59 c 0,276,277 797 71 797 71 799.5 90 c 0,278,279 802 109.001 802 109.001 808 115 c 0,280,281 816 76 816 76 840 76 c 0,282,283 878 76 878 76 883 111 c 0,284,285 881.225 124.68 l 0,286,287 871.742 145.173 871.742 145.173 818.066 145.18 c 0,288,289 808.269 145.181 808.269 145.181 797 144.5 c 0,290,291 705.966 138.997 705.966 138.997 695 138 c 0,292,293 584.998 118.999 584.998 118.999 504.5 71.5 c 0,294,295 424 24 424 24 329 -23 c 0,296,-1 262.5 -54 l 0,297,298 223.001 -73.0001 223.001 -73.0001 192 -73 c 0,0,1 EndSplineSet KernsSLIF: 121 -195 0 0 322 -247 0 0 105 -143 0 0 101 -104 0 0 98 -156 0 0 45 -364 0 0 EndChar StartChar: Adieresis Encoding: 196 196 75 Width: 1568 Flags: HW Fore 128 -308 m 1,0,1 33 -174 33 -174 20.5 -51 c 0,2,3 8.00005 72 8.00005 72 37.5 184.5 c 0,4,5 67 297 67 297 118.5 399.5 c 0,6,7 170.001 502.002 170.001 502.002 203 595 c 0,8,9 224 654 224 654 227 761.5 c 0,10,11 230 869 230 869 240.5 978.5 c 0,12,13 251.001 1088.01 251.001 1088.01 282.5 1177 c 0,14,15 314.004 1266.01 314.004 1266.01 394 1289 c 0,16,17 318 1214 318 1214 362.5 1157 c 0,18,19 379.049 1136.49 379.049 1136.49 415 1148 c 0,20,21 441.428 1156.46 441.428 1156.46 466 1283 c 0,22,23 486 1386.01 486 1386.01 583.5 1530.5 c 0,24,25 678.497 1672.92 678.497 1672.92 755.5 1733.5 c 0,26,27 805.557 1772.89 805.557 1772.89 859.876 1772.89 c 0,28,29 912.441 1772.89 912.441 1772.89 969 1736 c 0,30,31 934.103 1737 l 0,32,33 864.411 1730.95 864.411 1730.95 851 1653 c 0,34,35 847.071 1630.16 847.071 1630.16 847.122 1606.63 c 0,36,37 847.278 1534.34 847.278 1534.34 885 1455.5 c 0,38,39 932.227 1356.79 932.227 1356.79 966 1356 c 0,40,41 1004 1360.01 1004 1360.01 1007 1379.5 c 0,42,43 1007.48 1398.72 l 0,44,45 1003.15 1423.01 1003.15 1423.01 974 1448 c 0,46,47 1089.92 1426.41 1089.92 1426.41 1090.5 1312.5 c 0,48,49 1090.4 1270.56 1090.4 1270.56 1109.82 1163.16 c 0,50,51 1116.69 1125.17 1116.69 1125.17 1126 1079 c 0,52,53 1150 959.018 1150 959.018 1168.5 919.5 c 0,54,55 1188.08 877.713 1188.08 877.713 1221 891 c 0,56,57 1269.26 910.472 1269.26 910.472 1260 966 c 0,58,59 1248 1038 1248 1038 1209 1083 c 0,60,61 1296 1030 1296 1030 1320.5 961 c 0,62,63 1341.19 902.719 1341.19 902.719 1341.2 841.959 c 0,64,65 1341.2 830.773 1341.2 830.773 1340.5 819.5 c 0,66,67 1336 746.97 1336 746.97 1320 679 c 0,68,69 1309.29 633.487 1309.29 633.487 1309.33 596.017 c 0,70,71 1309.36 577.528 1309.36 577.528 1312 561 c 0,72,73 1327 457.016 1327 457.016 1374 353 c 0,74,75 1420.99 249 1420.99 249 1453.5 137 c 0,76,77 1481.72 39.766 1481.72 39.766 1481.67 -66.1854 c 0,78,79 1481.66 -82.2438 1481.66 -82.2438 1481 -98.5 c 0,80,81 1476.01 -221.982 1476.01 -221.982 1387 -366 c 0,82,83 1415.72 -269.572 1415.72 -269.572 1415.68 -151.161 c 0,84,85 1415.66 -96.4285 1415.66 -96.4285 1409.5 -37 c 0,86,87 1390.4 147.188 1390.4 147.188 1260.35 147.146 c 0,88,89 1256.72 147.145 1256.72 147.145 1253 147 c 0,90,91 1175.99 144 1175.99 144 1153 79.5 c 0,92,93 1130.01 15 1130.01 15 1156 -73 c 0,94,95 1040.99 -4 1040.99 -4 1078 170 c 0,96,97 1113.08 334.959 1113.08 334.959 1113.1 447.845 c 0,98,99 1113.1 454.001 1113.1 454.001 1113 460 c 0,100,101 1111.01 586.996 1111.01 586.996 1030 636 c 0,102,103 949 685 949 685 856 667 c 0,104,105 753.973 646.352 753.973 646.352 720.5 592 c 0,106,107 673.661 518 673.661 518 608 518 c 0,108,109 554 518 554 518 528 537 c 0,110,111 627.133 541.425 627.133 541.425 627.252 603.216 c 0,112,113 627.265 610.238 627.265 610.238 626 618 c 0,114,115 614.656 687.608 614.656 687.608 539 671 c 0,116,117 470.971 656.062 470.971 656.062 437.5 614 c 0,118,119 381.001 543.002 381.001 543.002 365 441 c 0,120,121 353.351 369.356 353.351 369.356 353.406 284.484 c 0,122,123 353.445 223.641 353.445 223.641 359.5 156 c 0,124,125 374 -6 374 -6 262 -68 c 0,126,127 308.115 30.5945 308.115 30.5945 274 92 c 0,128,129 254.66 126.814 254.66 126.814 187.626 127.026 c 0,130,131 185.341 127.033 185.341 127.033 183 127 c 0,132,133 153.87 123.844 l 0,134,135 79.7216 105.672 79.7216 105.672 79 -17 c 0,136,137 77.9999 -186.999 77.9999 -186.999 128 -308 c 1,0,1 564 987 m 0,77,78 564 913 564 913 632.5 878.5 c 0,79,80 701 844 701 844 782.5 839.5 c 0,81,82 871.984 834.559 871.984 834.559 930.5 856 c 0,83,84 996 880 996 880 993 914 c 0,85,86 987.893 969.548 987.893 969.548 889.5 1045 c 0,87,88 832.997 1088.33 832.997 1088.33 832.548 1133.03 c 0,89,90 836.254 1156.84 l 0,91,92 842.636 1176.79 842.636 1176.79 860 1197 c 0,93,94 858.922 1165.93 l 0,95,96 861.742 1140.27 861.742 1140.27 880.656 1139.92 c 0,97,98 893.5 1142 l 0,99,100 919.125 1149.84 919.125 1149.84 919.484 1172.94 c 0,101,102 915.537 1194.44 l 0,103,104 913.05 1201.75 913.05 1201.75 909 1210 c 0,105,106 881.004 1263.99 881.004 1263.99 815 1328 c 0,107,108 767.167 1374.39 767.167 1374.39 731.412 1374.55 c 0,109,110 717.835 1374.61 717.835 1374.61 706 1368 c 0,111,112 658 1341 658 1341 664.5 1294.5 c 0,113,114 670.998 1248.01 670.998 1248.01 689 1196 c 0,115,116 707.001 1143.99 707.001 1143.99 714.5 1094.5 c 0,117,118 722 1045 722 1045 677 1012 c 0,119,120 698 1091.99 698 1091.99 617 1078 c 0,121,122 564.452 1070.36 564.452 1070.36 563.972 992.397 c 0,123,124 563.956 989.741 563.956 989.741 564 987 c 0,77,78 509 1815 m 1,99,100 455 1950 455 1950 538 2068.5 c 0,101,102 614.315 2177.46 614.315 2177.46 728.667 2177.78 c 0,103,104 738.687 2177.81 738.687 2177.81 749 2177 c 0,105,106 618.485 2101.78 618.485 2101.78 618.174 2040.1 c 0,107,108 618.142 2033.73 618.142 2033.73 619.5 2027.5 c 0,109,110 627.779 1989.54 627.779 1989.54 673.706 1989.54 c 0,111,112 708.221 1989.55 708.221 1989.55 764 2011 c 0,113,114 745.001 1939.01 745.001 1939.01 646.5 1914 c 0,115,116 548 1888.99 548 1888.99 509 1815 c 1,99,100 1081 1812 m 1,108,109 1077.59 1842.42 l 0,110,111 1078.03 1909.94 1078.03 1909.94 1140 2017 c 0,112,113 1210.35 2138.52 1210.35 2138.52 1316.61 2138.99 c 0,114,115 1326.64 2139.04 1326.64 2139.04 1337 2138 c 0,116,117 1282.21 2087.85 1282.21 2087.85 1282.18 2034.27 c 0,118,119 1282.18 2030.14 1282.18 2030.14 1282.5 2026 c 0,120,121 1285.05 1993.14 1285.05 1993.14 1326.92 1993.02 c 0,122,123 1358.95 1992.93 1358.95 1992.93 1414 2012 c 0,124,125 1358.01 1928 1358.01 1928 1264.5 1910 c 0,126,127 1171.01 1892 1171.01 1892 1081 1812 c 1,108,109 EndSplineSet EndChar StartChar: Oacute Encoding: 211 211 45 Width: 1442 Flags: W Fore 702 -166 m 0,0,1 595.001 -155.001 595.001 -155.001 494.5 -66 c 0,2,3 394 23 394 23 316.5 126.5 c 0,4,5 239 230 239 230 192 315 c 0,6,7 145 400.001 145 400.001 145 402 c 0,8,9 128.001 450 128.001 450 92.5 525.5 c 0,10,11 57.0008 600.998 57.0008 600.998 34 678 c 0,12,13 11 755 11 755 16 820.5 c 0,14,15 20.9999 885.999 20.9999 885.999 86 914 c 0,16,17 120.999 928 120.999 928 151 910 c 0,18,19 76 883 76 883 92 806.5 c 0,20,21 108.001 730 108.001 730 144 769 c 0,22,23 185.999 812.998 185.999 812.998 246 939.5 c 0,24,25 281.016 1013.32 281.016 1013.32 281.292 1054.96 c 0,26,27 281.388 1069.49 281.388 1069.49 277.259 1080.1 c 0,28,29 272.94 1091.19 272.94 1091.19 264 1098 c 0,30,31 250.79 1107.15 250.79 1107.15 239.416 1107.23 c 0,32,33 226.112 1107.32 226.112 1107.32 215.319 1095.02 c 0,34,35 208.425 1087.16 208.425 1087.16 202 1073 c 0,36,37 191.968 1050.32 191.968 1050.32 192.019 1029.54 c 0,38,39 192.085 1002.68 192.085 1002.68 209 979 c 0,40,41 143.612 1022.32 143.612 1022.32 143.36 1067.98 c 0,42,43 143.304 1078.18 143.304 1078.18 146.5 1088.5 c 0,44,45 164.001 1145.01 164.001 1145.01 222 1193.5 c 0,46,47 280.032 1242.02 280.032 1242.02 350 1277 c 0,48,49 420.039 1312.01 420.039 1312.01 445 1321 c 0,50,51 491 1339 491 1339 595 1370.5 c 0,52,53 671.347 1393.62 671.347 1393.62 672.246 1429.41 c 0,54,55 668.639 1446.62 l 0,56,57 666.47 1451.7 666.47 1451.7 663 1457 c 0,58,59 646.528 1481.71 646.528 1481.71 625.907 1481.67 c 0,60,61 611.47 1481.65 611.47 1481.65 595 1469.5 c 0,62,63 554.997 1439.99 554.997 1439.99 543 1410 c 0,64,65 535.72 1416.76 535.72 1416.76 535.606 1430.01 c 0,66,67 535.507 1441.42 535.507 1441.42 541.5 1460 c 0,68,69 553.997 1497 553.997 1497 564 1506 c 0,70,71 632 1564.99 632 1564.99 717.5 1536 c 0,72,73 802.989 1507.01 802.989 1507.01 890 1438 c 0,74,75 977.001 1369 977.001 1369 1057 1284.5 c 0,76,77 1136.96 1200.04 1136.96 1200.04 1194 1148 c 0,78,79 1225.01 1119.01 1225.01 1119.01 1236 1169 c 0,80,81 1236.66 1189.31 l 0,82,83 1230.47 1227.67 1230.47 1227.67 1167 1261 c 0,84,85 1307.99 1261 1307.99 1261 1328.5 1135 c 0,86,87 1337.08 1082.31 1337.08 1082.31 1336.99 1022.87 c 0,88,89 1336.87 940.211 1336.87 940.211 1320 844.5 c 0,90,91 1291.02 680.102 1291.02 680.102 1247 520.5 c 0,92,93 1213.1 397.602 1213.1 397.602 1213.03 329.64 c 0,94,95 1213.01 309.382 1213.01 309.382 1216 294 c 0,96,97 1219 276 1219 276 1243 276.5 c 0,98,99 1266.99 276.999 1266.99 276.999 1283 295 c 0,100,101 1337 358 1337 358 1292 429 c 0,102,103 1349 412.001 1349 412.001 1358 350 c 0,104,105 1360.83 303.874 l 0,106,107 1358.57 224.182 1358.57 224.182 1302.5 174 c 0,108,109 1230.99 109.998 1230.99 109.998 1124.5 74.5 c 0,110,111 1018 39 1018 39 903.5 23 c 0,112,113 789 6.99995 789 6.99995 720 -9 c 0,114,115 666 -21 666 -21 709 -76.5 c 0,116,117 724.904 -97.0275 724.904 -97.0275 749.016 -96.9665 c 0,118,119 790.096 -96.8626 790.096 -96.8626 855 -37 c 0,120,121 843 -89.0001 843 -89.0001 797 -129.5 c 0,122,123 755.357 -166.164 755.357 -166.164 711.257 -166.359 c 0,124,125 706.642 -166.379 706.642 -166.379 702 -166 c 0,0,1 529 896 m 0,66,67 484.999 861 484.999 861 450 857.5 c 0,68,69 415 854 415 854 385 860 c 0,70,71 514 904 514 904 484 1000 c 0,72,73 479.058 1014.83 479.058 1014.83 459.197 1014.73 c 0,74,75 454.941 1014.71 454.941 1014.71 450 1014 c 0,76,77 421.994 1009.99 421.994 1009.99 409 998 c 0,78,79 370.001 960.001 370.001 960.001 332.5 887.5 c 0,80,81 295 815 295 815 274 739 c 0,82,83 253 663 253 663 256 600 c 0,84,85 259 537 259 537 301 521 c 0,86,87 406 479 406 479 388.5 555 c 0,88,89 371 631 371 631 317 642 c 0,90,91 370 663 370 663 417.5 617 c 0,92,93 465.001 570.999 465.001 570.999 497 502.5 c 0,94,95 529.001 433.997 529.001 433.997 541 365.5 c 0,96,97 553 297 553 297 535 273 c 0,98,99 534 318.001 534 318.001 504.5 336 c 0,100,101 475 354 475 354 448 323 c 0,102,103 414.348 283.229 414.348 283.229 414.233 251.128 c 0,104,105 414.135 223.66 414.135 223.66 438.591 201.807 c 0,106,107 441.609 199.111 441.609 199.111 445 196.5 c 0,108,109 508 148.001 508 148.001 617.5 141 c 0,110,111 727 133.999 727 133.999 842 174 c 0,112,113 957 214 957 214 996 314 c 0,114,115 1004.81 337.305 1004.81 337.305 1004.94 355.037 c 0,116,117 1005.04 368.522 1005.04 368.522 1000.11 378.784 c 0,118,119 988.723 402.504 988.723 402.504 950.5 409 c 0,120,121 874 422 874 422 893 308 c 0,122,123 855.407 364.132 855.407 364.132 855.207 406.739 c 0,124,125 855.109 427.468 855.109 427.468 863.863 444.996 c 0,126,127 872.055 461.4 872.055 461.4 888 475 c 0,128,129 956.012 533.01 956.012 533.01 1034 609 c 0,130,131 1157 729 1157 729 1139 875.5 c 0,132,133 1121 1022 1121 1022 995 1139 c 0,134,135 911.451 1215.28 911.451 1215.28 853.874 1215.69 c 0,136,137 848.054 1215.73 848.054 1215.73 842.5 1215 c 0,138,139 782 1207.01 782 1207.01 734 1153.5 c 0,140,141 685.991 1099.98 685.991 1099.98 639.5 1023.5 c 0,142,143 593 947 593 947 529 896 c 0,66,67 834 1616 m 1,109,110 771.325 1690.07 771.325 1690.07 771.259 1771.76 c 0,111,112 771.244 1790.43 771.244 1790.43 774.5 1809.5 c 0,113,114 792 1911.99 792 1911.99 860 1982 c 0,115,116 927.993 2052 927.993 2052 1025.5 2068.5 c 0,117,118 1123 2085 1123 2085 1207 2004 c 0,119,120 1142.86 2052.29 1142.86 2052.29 1091.17 2052.27 c 0,121,122 1071.15 2052.26 1071.15 2052.26 1053 2045 c 0,123,124 988.002 2019 988.002 2019 956.5 1966.5 c 0,125,126 925 1914 925 1914 933 1867.5 c 0,127,128 938.015 1838.35 938.015 1838.35 963.071 1838.08 c 0,129,130 985.38 1842.18 l 0,131,132 992.25 1844.45 992.25 1844.45 1000 1848 c 0,133,134 1013.12 1852.92 1013.12 1852.92 1013.09 1871.6 c 0,135,136 1013.06 1887.07 1013.06 1887.07 1004 1912 c 0,137,138 1040.78 1864.25 1040.78 1864.25 1040.82 1834.9 c 0,139,140 1040.83 1826.74 1040.83 1826.74 1038 1820 c 0,141,142 1025 1789 1025 1789 986 1764 c 0,143,-1 900.5 1708 l 0,144,145 853.995 1676.99 853.995 1676.99 834 1616 c 1,109,110 EndSplineSet KernsSLIF: 84 -286 0 0 87 -182 0 0 EndChar StartChar: Odieresis Encoding: 214 214 79 Width: 1622 Flags: HW Fore 1078 -11 m 0,0,1 1064.01 0.998647 1064.01 0.998647 973.5 11.5 c 0,2,3 883 22 883 22 778 24 c 0,4,5 673 26 673 26 585.5 15 c 0,6,7 499.124 4.14128 499.124 4.14128 491 -27 c 0,8,9 485 -50 485 -50 507.5 -75 c 0,10,11 530 -100 530 -100 615 -130 c 0,12,13 563.194 -132.16 l 0,14,15 497.059 -129.791 497.059 -129.791 433 -101 c 0,16,17 325.829 -52.8336 325.829 -52.8336 300 23 c 0,18,19 240.001 203.998 240.001 203.998 222.5 289 c 0,20,21 190.738 481.604 190.738 481.604 176 512 c 0,22,23 128 611 128 611 44.5 753.5 c 0,24,25 -39.0001 896 -39.0001 896 43 1037 c 0,26,27 37 930 37 930 69 916.5 c 0,28,29 101 903 101 903 132 921 c 0,30,31 165 941 165 941 227 1097.5 c 0,32,33 289.014 1254.03 289.014 1254.03 306 1300 c 0,34,35 321.216 1342.27 321.216 1342.27 321.243 1370.28 c 0,36,37 321.265 1394.44 321.265 1394.44 310 1408 c 0,38,39 289.612 1432.55 289.612 1432.55 262.475 1432.69 c 0,40,41 243.542 1432.78 243.542 1432.78 221.325 1421 c 0,42,43 198.844 1409.08 198.844 1409.08 173 1385 c 0,44,45 183 1455 183 1455 225 1491 c 0,46,47 283.465 1538.64 283.465 1538.64 372.5 1543 c 0,48,49 411.143 1545.55 411.143 1545.55 546 1607.5 c 0,50,51 605.628 1634.94 605.628 1634.94 705 1636 c 0,52,53 799.002 1637.01 799.002 1637.01 813 1682 c 0,54,55 832 1746.01 832 1746.01 714 1766 c 0,56,57 744.427 1778.86 744.427 1778.86 774.49 1778.95 c 0,58,59 807.009 1779.05 807.009 1779.05 839.1 1764.21 c 0,60,61 846.561 1760.76 846.561 1760.76 854 1756.5 c 0,62,63 922.99 1717.01 922.99 1717.01 985.5 1648 c 0,64,65 1048.01 1579 1048.01 1579 1101 1501 c 0,66,67 1153.99 1423.01 1153.99 1423.01 1193 1376 c 0,68,69 1258.99 1295.01 1258.99 1295.01 1395.5 1208.5 c 0,70,71 1531.99 1122 1531.99 1122 1545 955 c 0,72,73 1493.91 1031.63 1493.91 1031.63 1456.6 1031.78 c 0,74,75 1450.09 1031.8 1450.09 1031.8 1444 1029.5 c 0,76,77 1403 1014 1403 1014 1395 988 c 0,78,79 1368.69 904.7 1368.69 904.7 1368.67 830.234 c 0,80,81 1368.66 785.795 1368.66 785.795 1378 744.5 c 0,82,83 1413.42 587.936 1413.42 587.936 1437 543.5 c 0,84,85 1485.01 452.991 1485.01 452.991 1485.5 381.5 c 0,86,87 1487.95 300.016 1487.95 300.016 1436 257 c 0,88,89 1444.29 298.88 1444.29 298.88 1444.3 328.871 c 0,90,91 1444.31 367.613 1444.31 367.613 1430.5 386.5 c 0,92,93 1412.56 411.031 1412.56 411.031 1386.84 411.164 c 0,94,95 1377.44 411.213 1377.44 411.213 1367 408 c 0,96,97 1341.99 400 1341.99 400 1311.5 301 c 0,98,99 1281.05 202.142 1281.05 202.142 1240 93.5 c 0,100,101 1189.08 -41.2672 1189.08 -41.2672 1145 -92 c 0,102,103 1105.04 -137.992 1105.04 -137.992 1053.71 -137.938 c 0,104,105 1036.96 -137.921 1036.96 -137.921 1019 -133 c 0,106,107 1091 -116.999 1091 -116.999 1100 -78.5 c 0,108,109 1101.97 -55.1353 l 0,110,111 1099.91 -29.7823 1099.91 -29.7823 1078 -11 c 0,0,1 645 195 m 0,62,63 762.759 189.131 762.759 189.131 808.5 268.5 c 0,64,65 885 399 885 399 996 351 c 0,66,67 909.315 332.426 909.315 332.426 948 261 c 0,68,69 966.315 227.184 966.315 227.184 1035 231 c 0,70,71 1090.8 234.1 1090.8 234.1 1138 328.5 c 0,72,73 1210.49 473.474 1210.49 473.474 1218 561.5 c 0,74,75 1224.79 641.024 1224.79 641.024 1224.69 711.756 c 0,76,77 1224.62 765.961 1224.62 765.961 1220.5 815 c 0,78,79 1206.48 958.433 1206.48 958.433 1193 985 c 0,80,81 1174.69 1020.77 1174.69 1020.77 1130 1010.5 c 0,82,83 1085.67 1001.18 1085.67 1001.18 1085.09 966.896 c 0,84,85 1089.04 942.902 l 0,86,87 1092.23 932.685 1092.23 932.685 1098 921 c 0,88,89 1018.73 960.128 1018.73 960.128 1008 1035 c 0,90,91 1008.69 1052 1008.69 1052 1016.5 1197 c 0,92,93 1019.84 1268.11 1019.84 1268.11 961 1356 c 0,94,95 933.657 1396.84 933.657 1396.84 792 1419 c 0,96,97 759.176 1420.36 l 0,98,99 704.916 1416.09 704.916 1416.09 658.5 1367.5 c 0,100,101 570.656 1275.53 570.656 1275.53 568 1232.5 c 0,102,103 553.425 996.171 553.425 996.171 549 981 c 0,104,105 515.298 859.438 515.298 859.438 442.5 819 c 0,106,107 486.422 946.219 486.422 946.219 363 948.5 c 0,108,109 309.74 949.484 309.74 949.484 312 819 c 0,110,111 314.316 685.281 314.316 685.281 318 642 c 0,112,113 327.896 514.557 327.896 514.557 374 427 c 0,114,115 450.349 282.004 450.349 282.004 489 249 c 0,116,117 547.345 199.867 547.345 199.867 645 195 c 0,62,63 290 1856 m 1,94,95 294.001 1943.01 294.001 1943.01 364.5 2072.5 c 0,96,97 435 2202 435 2202 526 2218 c 0,98,99 467.076 2106.95 467.076 2106.95 466.932 2058.68 c 0,100,101 466.886 2043.05 466.886 2043.05 473 2034 c 0,102,103 497.993 1997.01 497.993 1997.01 583 1993 c 0,104,105 571.999 1943 571.999 1943 455 1914.5 c 0,106,107 338 1886 338 1886 290 1856 c 1,94,95 1051 1877 m 1,103,104 1063 1958.01 1063 1958.01 1145 2049.5 c 0,105,106 1227.01 2141 1227.01 2141 1326 2165 c 0,107,108 1259 2099.01 1259 2099.01 1245.5 2036 c 0,109,110 1244.66 2015.26 l 0,111,112 1251.83 1967.83 1251.83 1967.83 1347 1943 c 0,113,114 1311.37 1914.87 1311.37 1914.87 1267.16 1914.68 c 0,115,116 1244.88 1914.58 1244.88 1914.58 1220.42 1921.57 c 0,117,118 1215.75 1922.91 1215.75 1922.91 1211 1924.5 c 0,119,120 1190.26 1931.46 1190.26 1931.46 1169.39 1931.49 c 0,121,122 1110.74 1931.58 1110.74 1931.58 1051 1877 c 1,103,104 EndSplineSet EndChar StartChar: Udieresis Encoding: 220 220 77 Width: 1564 Flags: HW Fore 934.5 -28 m 128,-1,0 945 -89.9999 945 -89.9999 1050 -50 c 0,1,2 1006.09 -119.363 1006.09 -119.363 934.178 -119.579 c 0,3,4 901.082 -119.678 901.082 -119.678 862.054 -105.131 c 0,5,6 855.121 -102.547 855.121 -102.547 848 -99.5 c 0,7,8 819.129 -87.1482 819.129 -87.1482 609 -54 c 0,9,-1 445 -26 l 0,10,11 324 -27 324 -27 318 108 c 0,12,13 370.439 64.3008 370.439 64.3008 408.5 112 c 0,14,15 417.639 123.453 417.639 123.453 417.618 139.02 c 0,16,17 417.598 154.083 417.598 154.083 409 173 c 0,18,19 389.182 216.601 389.182 216.601 357 252 c 0,20,-1 307 307 l 0,21,22 283.139 331.714 283.139 331.714 245 311.5 c 0,23,24 213.696 295.848 213.696 295.848 213.789 268.858 c 0,25,26 213.854 250.152 213.854 250.152 229 226 c 0,27,28 164.711 239.834 164.711 239.834 164.281 312.053 c 0,29,30 164.189 327.45 164.189 327.45 167 345.5 c 0,31,32 171.076 371.671 171.076 371.671 171.038 399.582 c 0,33,34 170.963 454.432 170.963 454.432 155 516 c 0,35,36 106.307 701.036 106.307 701.036 57.5 767.5 c 0,37,38 -42 906 -42 906 28 1063 c 0,39,40 30.0443 991.442 30.0443 991.442 69.5 991.5 c 0,41,42 98.0043 991.542 98.0043 991.542 112 1027 c 0,43,44 115.628 1036.19 115.628 1036.19 115.6 1052.67 c 0,45,46 115.51 1104.31 115.51 1104.31 79.5 1227.5 c 0,47,48 34.0309 1383.05 34.0309 1383.05 33.9195 1433.69 c 0,49,50 33.9145 1435.95 33.9145 1435.95 34 1438 c 0,51,52 38.9997 1630.99 38.9997 1630.99 161 1782 c 0,53,54 121.48 1676.06 121.48 1676.06 121.46 1567.79 c 0,55,56 121.453 1531.03 121.453 1531.03 126 1494 c 0,57,58 145.116 1338.34 145.116 1338.34 247 1320 c 0,59,60 271.932 1319.82 l 0,61,62 301.474 1323.99 301.474 1323.99 340 1347.5 c 0,63,64 408.002 1389.01 408.002 1389.01 429 1501 c 0,65,66 469 1403.01 469 1403.01 434.5 1315 c 0,67,68 402.62 1233.68 402.62 1233.68 390 1118 c 0,69,70 386.268 1050.09 l 0,71,72 386.641 983.869 386.641 983.869 404.5 934 c 0,73,74 411.708 913.872 411.708 913.872 411.703 895.446 c 0,75,76 411.688 846.128 411.688 846.128 360 809 c 0,77,78 372 866 372 866 354 888.5 c 0,79,80 328.77 920.038 328.77 920.038 300 866 c 0,81,82 291.392 849.833 291.392 849.833 291.384 816.023 c 0,83,84 291.375 776.696 291.375 776.696 303 713.5 c 0,85,86 322.001 607.499 322.001 607.499 337 567.5 c 0,87,88 362.966 495.17 362.966 495.17 399 435 c 0,89,90 463.641 335.174 463.641 335.174 520 288 c 0,91,92 563.185 268.568 563.185 268.568 581 283.5 c 0,93,94 615 312 615 312 572 367 c 0,95,96 694.138 356.907 694.138 356.907 709.5 243 c 0,97,98 720.458 160.941 720.458 160.941 775.5 166.5 c 0,99,100 843.666 172.427 843.666 172.427 885 261 c 0,101,102 923.283 343.035 923.283 343.035 944.5 420.5 c 0,103,104 975.867 535.024 975.867 535.024 981 573 c 0,105,106 996.001 687.004 996.001 687.004 1069 738 c 0,107,108 1054.05 699.755 1054.05 699.755 1053.95 673.431 c 0,109,110 1053.85 648.277 1053.85 648.277 1067.3 634.007 c 0,111,112 1072.24 628.771 1072.24 628.771 1079 625 c 0,113,114 1089.88 618.928 1089.88 618.928 1101.28 618.984 c 0,115,116 1117.15 619.061 1117.15 619.061 1134 631 c 0,117,118 1158.82 648.023 1158.82 648.023 1158.75 739.476 c 0,119,120 1158.72 776.982 1158.72 776.982 1154.5 827 c 0,121,122 1139.2 1008.54 1139.2 1008.54 1122 1097 c 0,123,124 1097.76 1221.73 1097.76 1221.73 1080.5 1273.5 c 0,125,126 1063.07 1325.8 1063.07 1325.8 1063.03 1375.37 c 0,127,128 1062.97 1455.21 1062.97 1455.21 1108 1528 c 0,129,130 1118.73 1412.85 1118.73 1412.85 1175.5 1374.5 c 0,131,132 1218.91 1345.17 1218.91 1345.17 1245.11 1344.85 c 0,133,134 1260.78 1347.91 l 0,135,136 1263.55 1349.19 1263.55 1349.19 1266 1351 c 0,137,138 1338.58 1407.54 1338.58 1407.54 1358 1591.5 c 0,139,140 1363.39 1642.57 1363.39 1642.57 1363.33 1689.38 c 0,141,142 1363.21 1781.42 1363.21 1781.42 1342 1857 c 0,143,144 1407.99 1746.01 1407.99 1746.01 1425.5 1582 c 0,145,146 1431.64 1524.47 1431.64 1524.47 1431.56 1469.76 c 0,147,148 1431.42 1368.54 1431.42 1368.54 1410 1277 c 0,149,150 1389.43 1189.71 1389.43 1189.71 1389.41 1113.87 c 0,151,152 1389.4 1053.29 1389.4 1053.29 1402.5 1000 c 0,153,154 1413.81 954.001 1413.81 954.001 1413.73 916.817 c 0,155,156 1413.6 857.002 1413.6 857.002 1384 820 c 0,157,158 1382.46 849.538 l 0,159,160 1377.56 874.521 1377.56 874.521 1359.5 887 c 0,161,162 1353.45 891.18 1353.45 891.18 1347.91 891.101 c 0,163,164 1328.26 890.82 1328.26 890.82 1315 837 c 0,165,166 1299.92 775.08 1299.92 775.08 1299.92 700.686 c 0,167,168 1299.92 636.926 1299.92 636.926 1311 564 c 0,169,170 1335 406 1335 406 1272 322 c 0,171,172 1272 435 1272 435 1221 426 c 0,173,174 1166.23 416.106 1166.23 416.106 1047 219 c 0,175,176 926.422 19.6906 926.422 19.6906 934.5 -28 c 128,-1,0 194 1948 m 1,92,93 246.065 1994.11 246.065 1994.11 269.5 2145.5 c 0,94,95 287.998 2264.99 287.998 2264.99 402 2296 c 0,96,97 332.966 2219.29 332.966 2219.29 333.064 2156.71 c 0,98,99 333.094 2137.71 333.094 2137.71 339.5 2120 c 0,100,101 358.415 2064.52 358.415 2064.52 387.209 2063.76 c 0,102,103 403.103 2067.17 l 0,104,105 425.939 2077.12 425.939 2077.12 454 2116 c 0,106,107 465.818 2098.7 465.818 2098.7 465.962 2079.71 c 0,108,109 466.059 2067.01 466.059 2067.01 460.94 2053.55 c 0,110,111 447.15 2017.29 447.15 2017.29 395.5 1975.5 c 0,112,113 335.507 1926.96 335.507 1926.96 274.599 1926.96 c 0,114,115 234.497 1926.96 234.497 1926.96 194 1948 c 1,92,93 1193 1962 m 1,101,102 1226.99 1976.99 1226.99 1976.99 1252 2032.5 c 0,103,104 1276.85 2085.8 1276.85 2085.8 1297 2142.5 c 0,105,106 1319.99 2197.98 1319.99 2197.98 1351.5 2236.5 c 0,107,108 1374 2264 1374 2264 1409 2264.2 c 0,109,110 1423 2264.29 1423 2264.29 1439 2260 c 0,111,112 1405.72 2244.42 1405.72 2244.42 1380.5 2194 c 0,113,114 1358.7 2150.38 1358.7 2150.38 1358.67 2098.08 c 0,115,116 1358.67 2091.61 1358.67 2091.61 1359 2085 c 0,117,118 1361.09 2061.73 1361.09 2061.73 1403 2050.5 c 0,119,120 1424.24 2049.35 l 0,121,122 1450 2052.01 1450 2052.01 1490 2071 c 0,123,124 1442.32 1997.88 1442.32 1997.88 1335 1953.5 c 0,125,126 1299.06 1938.64 1299.06 1938.64 1267.06 1938.64 c 0,127,128 1227.48 1938.63 1227.48 1938.63 1193 1962 c 1,101,102 EndSplineSet EndChar StartChar: germandbls Encoding: 223 223 85 Width: 1114 Flags: HMW VStem: 55 281<-368 1583> Fore 118 967 m 0,0,1 118 1084.53 118 1084.53 88 1118 c 0,2,3 34 1178 34 1178 62 1274 c 0,4,5 69.7902 1199.99 69.7902 1199.99 124 1247 c 0,6,7 134.791 1256.36 134.791 1256.36 148 1330 c 0,8,9 154 1363.45 154 1363.45 154 1436 c 0,10,11 154 1497.94 154 1497.94 119 1533 c 0,12,13 94.3849 1557.65 94.3849 1557.65 55.2625 1557.79 c 0,14,15 32.9829 1557.87 32.9829 1557.87 6 1550 c 0,16,17 97.9904 1627.49 97.9904 1627.49 183.416 1627.57 c 0,18,19 201.861 1627.59 201.861 1627.59 220 1624 c 0,20,21 251.926 1617.67 251.926 1617.67 371 1574 c 0,22,23 389.214 1567.32 389.214 1567.32 544 1540 c 0,24,25 583.266 1536.42 l 0,26,27 621.488 1537.23 621.488 1537.23 632 1560 c 0,28,29 637.571 1573 637.571 1573 637.538 1582.98 c 0,30,31 637.428 1616 637.428 1616 576 1616 c 0,32,33 659.582 1645.07 659.582 1645.07 698 1581.5 c 0,34,35 744.865 1503.95 744.865 1503.95 786 1494 c 0,36,37 830.007 1483.99 830.007 1483.99 908 1436 c 0,38,39 943.792 1413.98 943.792 1413.98 944.051 1385.79 c 0,40,41 944.151 1374.93 944.151 1374.93 938.978 1363.16 c 0,42,43 938.07 1361.09 938.07 1361.09 937 1359 c 0,44,45 927.441 1382.05 927.441 1382.05 909.851 1382.55 c 0,46,47 893.461 1378.91 l 0,48,49 884.467 1375.02 884.467 1375.02 874 1367 c 0,50,51 867.597 1362.09 867.597 1362.09 867.581 1353.42 c 0,52,53 867.53 1327.07 867.53 1327.07 926.5 1266 c 0,54,55 972.687 1218.16 972.687 1218.16 972.762 1181.23 c 0,56,57 972.794 1165.07 972.794 1165.07 964 1151 c 0,58,59 968.156 1203.53 968.156 1203.53 920 1172 c 0,60,61 891.619 1153.41 891.619 1153.41 880 1096 c 0,62,63 873.279 1062.79 873.279 1062.79 873.335 1041.2 c 0,64,65 873.41 1011.87 873.41 1011.87 886 1004 c 0,66,67 896.666 997.333 896.666 997.333 906.222 997.333 c 0,68,69 925.333 997.333 925.333 997.333 940 1024 c 0,70,71 955.756 941.28 955.756 941.28 762 870 c 0,72,73 695.301 845.461 695.301 845.461 708 774 c 0,74,75 719.596 708.712 719.596 708.712 767.426 708.519 c 0,76,77 774.784 708.489 774.784 708.489 783 710 c 0,78,79 957 742 957 742 951 626 c 0,80,81 924.609 688.556 924.609 688.556 882 666 c 0,82,83 858.918 653.781 858.918 653.781 909 525 c 0,84,85 972.715 358.127 972.715 358.127 993 357 c 0,86,87 1035 354 1035 354 1041 411 c 0,88,89 1056.22 397.957 1056.22 397.957 1056.4 376.249 c 0,90,91 1056.5 364.686 1056.5 364.686 1052.34 350.665 c 0,92,93 1042.74 318.359 1042.74 318.359 1010.5 273 c 0,94,95 945.852 179.834 945.852 179.834 945.454 148.336 c 0,96,97 945.372 141.868 945.372 141.868 948 138 c 0,98,99 917.598 92.499 917.598 92.499 840.5 36 c 0,100,101 786.888 -3.30363 786.888 -3.30363 794 -41 c 0,102,103 804 -93.9999 804 -93.9999 890 -68 c 0,104,105 866.618 -120.33 866.618 -120.33 733.273 -120.517 c 0,106,107 685.65 -120.584 685.65 -120.584 624 -114 c 0,108,109 418 -91.9999 418 -91.9999 394 -45 c 0,110,111 625.996 -66.7838 625.996 -66.7838 714 75 c 0,112,113 722.786 89.1553 722.786 89.1553 723.001 101.566 c 0,114,115 719.591 117.104 l 0,116,117 716.737 123.045 716.737 123.045 711.5 128.5 c 0,118,119 701.576 138.839 701.576 138.839 689.308 138.97 c 0,120,121 680.36 139.067 680.36 139.067 670.166 133.733 c 0,122,123 660.629 128.743 660.629 128.743 650 119 c 0,124,125 652 165 652 165 701.5 187.5 c 0,126,127 780.66 223.482 780.66 223.482 796 242.5 c 0,128,129 815.469 266.638 815.469 266.638 819 351 c 0,130,131 816.128 388.012 l 0,132,133 807.98 434.589 807.98 434.589 777.5 498.5 c 0,134,135 759.191 536.891 759.191 536.891 723 585 c 0,136,137 680.348 641.698 680.348 641.698 644 645 c 0,138,139 628.856 642.918 l 0,140,141 618.212 638.877 618.212 638.877 608.5 627.5 c 0,142,143 590 608 590 608 613 579 c 0,144,145 588.638 580.55 l 0,146,147 552.063 589.3 552.063 589.3 534.5 638.5 c 0,148,149 513.743 696.65 513.743 696.65 469 735 c 0,150,151 474.064 740.88 474.064 740.88 406 801.5 c 0,152,153 386.095 819.228 386.095 819.228 385.923 839.472 c 0,154,155 385.827 850.808 385.827 850.808 393 865 c 0,156,157 399.384 832.1 399.384 832.1 431.868 831.868 c 0,158,159 445.55 831.771 445.55 831.771 463.862 837.468 c 0,160,161 478.251 841.945 478.251 841.945 495.5 850 c 0,162,163 592 896 592 896 607 919 c 0,164,165 617.211 934.495 617.211 934.495 618 948.5 c 0,166,167 620 984 620 984 578 969 c 0,168,169 582.733 1004.49 582.733 1004.49 686.5 1026 c 0,170,171 737.466 1036.56 737.466 1036.56 755 1073.5 c 0,172,173 768.109 1101.59 768.109 1101.59 768.067 1145.9 c 0,174,175 768.064 1148.91 768.064 1148.91 768 1152 c 0,176,177 766.896 1205.52 766.896 1205.52 759 1212.5 c 0,178,179 725 1242.5 725 1242.5 722 1197.5 c 0,180,181 679.373 1223.49 679.373 1223.49 678.841 1259.22 c 0,182,183 682.49 1282.11 l 0,184,185 684.128 1287.22 684.128 1287.22 686.5 1292.5 c 0,186,187 693.835 1309.57 693.835 1309.57 693.858 1326.34 c 0,188,189 693.884 1345.87 693.884 1345.87 684 1365 c 0,190,191 659.831 1408.89 659.831 1408.89 558 1389 c 0,192,193 488.278 1375.38 488.278 1375.38 467 1359 c 0,194,195 440.515 1338.04 440.515 1338.04 416.774 1338.07 c 0,196,197 397.482 1338.1 397.482 1338.1 380 1352 c 0,198,199 415.734 1352 415.734 1352 427 1363 c 0,200,201 436.501 1372.28 436.501 1372.28 436.539 1387.56 c 0,202,203 436.555 1393.78 436.555 1393.78 435 1401 c 0,204,205 428.085 1432.13 428.085 1432.13 417 1435 c 0,206,207 398.473 1439.81 398.473 1439.81 384.817 1439.86 c 0,208,209 366.071 1439.92 366.071 1439.92 356.5 1431 c 0,210,211 277.822 1354.86 277.822 1354.86 302 1306.5 c 0,212,213 328.119 1254.26 328.119 1254.26 328.201 1225.13 c 0,214,215 328.269 1201.37 328.269 1201.37 311 1193 c 0,216,217 311 1216.07 311 1216.07 295.615 1216.67 c 0,218,219 285 1215 l 0,220,221 255.639 1204.93 255.639 1204.93 255.571 1140.69 c 0,222,223 255.562 1132.76 255.562 1132.76 256 1124 c 0,224,225 259.68 1050.41 259.68 1050.41 271 1033 c 0,226,227 286.562 1010.12 286.562 1010.12 302.5 1009.5 c 0,228,229 323.004 1009.7 323.004 1009.7 328 1038 c 0,230,231 355 996 355 996 330.5 920.5 c 0,232,233 306.001 845.001 306.001 845.001 302 807 c 0,234,235 299.425 755.455 l 0,236,237 301.69 689.489 301.69 689.489 338 668 c 0,238,239 387 639 387 639 360 579 c 0,240,241 355.031 622.897 355.031 622.897 321.24 623.294 c 0,242,243 315.096 623.366 315.096 623.366 308 622 c 0,244,245 271.879 615.048 271.879 615.048 266.5 483.5 c 0,246,247 266.151 393.507 l 0,248,249 268.939 337.887 268.939 337.887 281 321 c 0,250,251 294.707 301.81 294.707 301.81 317 304.5 c 0,252,253 343.999 307.999 343.999 307.999 348 349 c 0,254,255 378 316 378 316 352.5 227 c 0,256,257 323.944 127.336 323.944 127.336 291 51 c 0,258,259 272.96 9.19997 272.96 9.19997 272.925 -44.2157 c 0,260,261 272.88 -112.2 272.88 -112.2 302 -199 c 0,262,263 328 -276.499 328 -276.499 328 -326.999 c 0,264,265 328 -376.818 328 -376.818 302 -401 c 0,266,267 302.608 -376.581 l 0,268,269 298.602 -349.953 298.602 -349.953 272.5 -332.5 c 0,270,271 242.027 -312.125 242.027 -312.125 218 -312 c 0,272,273 175.052 -314.051 175.052 -314.051 141 -347.5 c 0,274,275 121.999 -366 121.999 -366 105 -421 c 0,276,277 92 -461 92 -461 89.5 -519 c 0,278,279 86.9999 -577 86.9999 -577 94 -622 c 0,280,281 74.9999 -568 74.9999 -568 61 -503 c 0,282,283 47.9576 -442.447 47.9576 -442.447 55 -368 c 0,284,285 62 -294 62 -294 91 -142.5 c 0,286,287 119.999 9 119.999 9 81 94 c 0,288,289 63.9996 128.001 63.9996 128.001 48 196.5 c 0,290,291 41.9721 222.307 41.9721 222.307 42.0474 243.927 c 0,292,293 42.1721 279.693 42.1721 279.693 59 304 c 0,294,295 56.1273 271.443 56.1273 271.443 79 271 c 0,296,297 95.4265 270.777 95.4265 270.777 110 288 c 0,298,299 130.215 313.73 130.215 313.73 136 360 c 0,300,301 140.9 399.204 140.9 399.204 127 465 c 0,302,303 121.971 496.186 121.971 496.186 101 501 c 0,304,305 51.9536 514 51.9536 514 58 450 c 0,306,307 42.0932 466.57 42.0932 466.57 42.0707 502.115 c 0,308,309 42.0269 571.209 42.0269 571.209 102 712 c 0,310,311 118.001 749.562 118.001 749.562 118 967 c 0,0,1 EndSplineSet KernsSLIF: 116 -195 0 0 84 -313 0 0 EndChar StartChar: adieresis Encoding: 228 228 76 Width: 1332 Flags: HW Fore 108.8 -261.8 m 1,0,1 28.0497 -147.901 28.0497 -147.901 17.4248 -43.3496 c 0,2,3 6.79985 61.2002 6.79985 61.2002 31.875 156.825 c 0,4,5 56.9505 252.451 56.9505 252.451 100.725 339.575 c 0,6,7 144.501 426.702 144.501 426.702 172.55 505.75 c 0,8,9 190.4 555.899 190.4 555.899 192.95 647.275 c 0,10,11 195.5 738.65 195.5 738.65 204.425 831.725 c 0,12,13 213.35 924.8 213.35 924.8 240.125 1000.45 c 0,14,15 266.904 1076.11 266.904 1076.11 334.9 1095.65 c 0,16,17 270.299 1031.9 270.299 1031.9 308.125 983.45 c 0,18,19 322.192 966.021 322.192 966.021 352.75 975.8 c 0,20,21 375.215 982.988 375.215 982.988 396.1 1090.55 c 0,22,23 413.098 1178.1 413.098 1178.1 495.975 1300.92 c 0,24,25 576.726 1421.98 576.726 1421.98 642.175 1473.47 c 0,26,27 684.84 1507.04 684.84 1507.04 731.145 1506.95 c 0,28,29 775.711 1506.86 775.711 1506.86 823.65 1475.6 c 0,30,31 791.682 1476.23 l 0,32,33 734.526 1470.01 734.526 1470.01 723.35 1405.05 c 0,34,35 720.073 1363.06 l 0,36,37 720.858 1302.78 720.858 1302.78 752.25 1237.17 c 0,38,39 794.078 1149.77 794.078 1149.77 821.1 1152.6 c 0,40,41 853.4 1156.01 853.4 1156.01 855.95 1172.58 c 0,42,43 856.239 1189.56 l 0,44,45 852.29 1209.9 852.29 1209.9 827.9 1230.8 c 0,46,47 926.311 1212.47 926.311 1212.47 926.925 1115.62 c 0,48,49 926.826 1076.61 926.826 1076.61 946.613 970.938 c 0,50,51 951.299 945.912 951.299 945.912 957.1 917.15 c 0,52,53 977.5 815.151 977.5 815.151 993.225 781.575 c 0,54,55 1005.77 754.812 1005.77 754.812 1024.74 754.627 c 0,56,57 1030.95 754.566 1030.95 754.566 1037.85 757.35 c 0,58,59 1078.88 773.9 1078.88 773.9 1071 821.1 c 0,60,61 1060.8 882.3 1060.8 882.3 1027.65 920.55 c 0,62,63 1101.6 875.501 1101.6 875.501 1122.42 816.85 c 0,64,65 1139.96 767.482 1139.96 767.482 1140.01 715.971 c 0,66,67 1140.02 706.31 1140.02 706.31 1139.42 696.575 c 0,68,69 1135.59 634.892 1135.59 634.892 1122 577.15 c 0,70,71 1112.87 538.38 1112.87 538.38 1112.93 506.472 c 0,72,73 1112.96 490.835 1112.96 490.835 1115.2 476.85 c 0,74,75 1127.95 388.465 1127.95 388.465 1167.9 300.05 c 0,76,77 1207.87 211.588 1207.87 211.588 1235.47 116.45 c 0,78,79 1259.51 33.6266 1259.51 33.6266 1259.42 -56.6199 c 0,80,81 1258.85 -83.7246 l 0,82,83 1254.61 -188.683 1254.61 -188.683 1178.95 -311.1 c 0,84,85 1203.42 -228.959 1203.42 -228.959 1203.33 -128.066 c 0,86,87 1203.3 -81.7345 1203.3 -81.7345 1198.08 -31.4502 c 0,88,89 1181.92 124.337 1181.92 124.337 1072.39 125.071 c 0,90,91 1068.77 125.095 1068.77 125.095 1065.05 124.95 c 0,92,93 1000.37 122.43 1000.37 122.43 980.05 67.5752 c 0,94,95 960.501 12.75 960.501 12.75 982.6 -62.0498 c 0,96,97 884.849 -3.4004 884.849 -3.4004 916.3 144.5 c 0,98,99 946.219 285.196 946.219 285.196 946.137 381.283 c 0,100,101 946.133 386.201 946.133 386.201 946.05 391 c 0,102,103 944.351 498.949 944.351 498.949 875.5 540.6 c 0,104,105 806.65 582.25 806.65 582.25 727.6 566.95 c 0,106,107 640.877 549.399 640.877 549.399 612.425 503.2 c 0,108,109 572.61 440.3 572.61 440.3 516.8 440.3 c 0,110,111 470.899 440.3 470.899 440.3 448.8 456.45 c 0,112,113 542.639 460.64 542.639 460.64 532.1 525.3 c 0,114,115 524.543 571.665 524.543 571.665 483.418 573.028 c 0,116,117 458.15 570.35 l 0,118,119 400.326 557.651 400.326 557.651 371.875 521.9 c 0,120,121 323.851 461.552 323.851 461.552 310.25 374.85 c 0,122,123 300.338 313.888 300.338 313.888 300.395 241.659 c 0,124,125 300.436 190.01 300.436 190.01 305.575 132.6 c 0,126,127 317.9 -5.09955 317.9 -5.09955 222.7 -57.7998 c 0,128,129 261.896 26.0049 261.896 26.0049 232.9 78.2002 c 0,130,131 216.34 108.009 216.34 108.009 155.55 107.95 c 0,132,133 128.74 104.737 l 0,134,135 67.7534 88.1114 67.7534 88.1114 67.1504 -14.4502 c 0,136,137 66.2997 -158.949 66.2997 -158.949 108.8 -261.8 c 1,0,1 479.4 838.95 m 0,77,78 479.4 776.051 479.4 776.051 537.625 746.725 c 0,79,80 595.851 717.4 595.851 717.4 665.125 713.575 c 0,81,82 724.336 714 l 0,83,84 762.062 717.024 762.062 717.024 790.925 727.6 c 0,85,86 843.456 746.848 843.456 746.848 844.05 776.9 c 0,87,88 839.707 824.116 839.707 824.116 756.075 888.25 c 0,89,90 707.698 925.347 707.698 925.347 707.663 963.627 c 0,91,92 707.638 990.253 707.638 990.253 731 1017.45 c 0,93,94 730.287 989.406 l 0,95,96 733.091 969.257 733.091 969.257 748.499 968.932 c 0,97,98 759.475 970.7 l 0,99,100 781.225 977.353 781.225 977.353 781.56 996.947 c 0,101,102 777.499 1017.28 l 0,103,104 775.544 1022.6 775.544 1022.6 772.65 1028.5 c 0,105,106 748.854 1074.39 748.854 1074.39 692.75 1128.8 c 0,107,108 652.395 1167.94 652.395 1167.94 622.154 1168.36 c 0,109,110 604.83 1165.09 l 0,111,112 602.425 1164.1 602.425 1164.1 600.1 1162.8 c 0,113,114 564.525 1142.79 564.525 1142.79 564.17 1110.18 c 0,115,116 564.118 1105.39 564.118 1105.39 564.825 1100.33 c 0,117,118 570.349 1060.81 570.349 1060.81 585.65 1016.6 c 0,119,120 600.95 972.4 600.95 972.4 607.325 930.325 c 0,121,122 613.7 888.25 613.7 888.25 575.45 860.2 c 0,123,124 593.3 928.2 593.3 928.2 524.45 916.3 c 0,125,126 479.456 909.755 479.456 909.755 479.4 838.95 c 0,77,78 432.65 1542.75 m 1,99,100 414.656 1587.74 414.656 1587.74 414.559 1630.56 c 0,101,102 414.46 1674.09 414.46 1674.09 432.846 1715.39 c 0,103,104 442.516 1737.11 442.516 1737.11 457.3 1758.22 c 0,105,106 522.348 1851.09 522.348 1851.09 619.897 1851.11 c 0,107,108 628.156 1851.11 628.156 1851.11 636.65 1850.45 c 0,109,110 525.809 1786.57 525.809 1786.57 525.449 1734.18 c 0,111,112 525.411 1728.72 525.411 1728.72 526.575 1723.38 c 0,113,114 533.582 1691.24 533.582 1691.24 572.317 1691.11 c 0,115,116 601.716 1691.01 601.716 1691.01 649.4 1709.35 c 0,117,118 633.251 1648.15 633.251 1648.15 549.525 1626.9 c 0,119,120 465.8 1605.65 465.8 1605.65 432.65 1542.75 c 1,99,100 918.85 1540.2 m 1,108,109 915.999 1568.74 l 0,110,111 917.542 1625.56 917.542 1625.56 969 1714.45 c 0,112,113 1028.97 1818.05 1028.97 1818.05 1119.65 1818.14 c 0,114,115 1127.92 1818.15 1127.92 1818.15 1136.45 1817.3 c 0,116,117 1089.98 1774.77 1089.98 1774.77 1089.85 1729.33 c 0,118,119 1089.84 1725.72 1089.84 1725.72 1090.12 1722.1 c 0,120,121 1092.3 1693.97 1092.3 1693.97 1128.39 1694.07 c 0,122,123 1155.54 1694.14 1155.54 1694.14 1201.9 1710.2 c 0,124,125 1154.31 1638.8 1154.31 1638.8 1074.83 1623.5 c 0,126,127 995.359 1608.2 995.359 1608.2 918.85 1540.2 c 1,108,109 EndSplineSet EndChar StartChar: oacute Encoding: 243 243 46 Width: 1230 Flags: HW Fore 601 -2 m 0,0,1 510 5.99999 510 5.99999 424.5 82 c 0,2,3 338.998 158.003 338.998 158.003 273 246 c 0,4,5 207.001 333.999 207.001 333.999 167 406 c 0,6,7 127 477.999 127 477.999 127 480 c 0,8,9 113.001 520 113.001 520 83 584.5 c 0,10,11 53 649 53 649 33.5 714.5 c 0,12,13 14 780 14 780 18 835.5 c 0,14,15 22 891 22 891 77 915 c 0,16,17 106 927 106 927 133 912 c 0,18,19 80.6363 893.182 80.6363 893.182 80.1529 846.248 c 0,20,21 82.5 824 l 0,22,23 96 759 96 759 127 792 c 0,24,25 162.002 830.002 162.002 830.002 213.5 937.5 c 0,26,27 243.557 1000.24 243.557 1000.24 243.809 1035.56 c 0,28,29 243.905 1049 243.905 1049 239.684 1058.47 c 0,30,31 235.993 1066.76 235.993 1066.76 229 1072 c 0,32,33 217.589 1079.95 217.589 1079.95 207.672 1079.89 c 0,34,35 188.912 1079.78 188.912 1079.78 175.5 1051 c 0,36,37 166.787 1032.3 166.787 1032.3 166.655 1015.05 c 0,38,39 166.556 1002.3 166.556 1002.3 171.139 990.344 c 0,40,41 174.951 980.399 174.951 980.399 182 971 c 0,42,43 126.43 1007.77 126.43 1007.77 126.29 1046.55 c 0,44,45 126.258 1055.23 126.258 1055.23 129 1064 c 0,46,47 143.998 1111.99 143.998 1111.99 193.5 1153.5 c 0,48,49 242.971 1194.98 242.971 1194.98 302.5 1224.5 c 0,50,51 362 1254.01 362 1254.01 383 1262 c 0,52,53 421.942 1276.98 421.942 1276.98 510 1303.5 c 0,54,55 598 1330.01 598 1330.01 568 1377 c 0,56,57 553.93 1398.1 553.93 1398.1 536.426 1398.25 c 0,58,59 524.536 1398.34 524.536 1398.34 510 1388 c 0,60,61 476 1362.99 476 1362.99 465 1337 c 0,62,63 458.647 1342.82 458.647 1342.82 458.741 1354.39 c 0,64,65 458.824 1364.68 458.824 1364.68 464 1379.5 c 0,66,67 475.002 1411.01 475.002 1411.01 484 1419 c 0,68,69 541 1468.99 541 1468.99 614 1444.5 c 0,70,71 686.989 1420.01 686.989 1420.01 760.5 1361.5 c 0,72,73 834 1303 834 1303 902 1231 c 0,74,75 970.031 1158.97 970.031 1158.97 1019 1115 c 0,76,77 1028.75 1105.97 1028.75 1105.97 1036.15 1105.75 c 0,78,79 1043.94 1108.44 l 0,80,81 1051.13 1114.23 1051.13 1114.23 1055 1132.5 c 0,82,83 1055.19 1151.12 l 0,84,85 1048.84 1183.02 1048.84 1183.02 996 1211 c 0,86,87 1116 1211 1116 1211 1133.5 1103.5 c 0,88,89 1140.87 1058.24 1140.87 1058.24 1140.79 1007.3 c 0,90,91 1140.68 937.275 1140.68 937.275 1126.5 856.5 c 0,92,93 1102.01 717.049 1102.01 717.049 1064.5 581.5 c 0,94,95 1035.57 476.98 1035.57 476.98 1035.51 419.158 c 0,96,97 1035.49 402.028 1035.49 402.028 1038 389 c 0,98,99 1039.99 374 1039.99 374 1060.5 374.5 c 0,100,101 1080.99 374.999 1080.99 374.999 1094 390 c 0,102,103 1119.37 418.072 1119.37 418.072 1119.68 448.764 c 0,104,105 1115.99 473.526 l 0,106,107 1111.6 487.99 1111.6 487.99 1102 503 c 0,108,109 1150 489 1150 489 1159 437 c 0,110,111 1161.09 395.311 l 0,112,113 1158.04 329.427 1158.04 329.427 1111.5 287.5 c 0,114,115 1051.01 233.004 1051.01 233.004 960.5 202.5 c 0,116,117 869.996 171.999 869.996 171.999 772.5 158 c 0,118,119 675.01 144.002 675.01 144.002 616 130 c 0,120,121 570 119.001 570 119.001 607 72.5 c 0,122,123 620.616 55.388 620.616 55.388 641.139 55.4071 c 0,124,125 676.384 55.44 676.384 55.44 732 106 c 0,126,127 721 61 721 61 682 28 c 0,128,129 643 -5 643 -5 601 -2 c 0,0,1 454 901 m 0,66,67 416 871 416 871 387 867.5 c 0,68,69 358 864 358 864 331 870 c 0,70,71 419.739 899.849 419.739 899.849 419.97 958.983 c 0,72,73 420.025 973.151 420.025 973.151 415 989 c 0,74,75 411.054 1000.84 411.054 1000.84 395.575 1001.15 c 0,76,77 391.448 1001.24 391.448 1001.24 386.5 1000.5 c 0,78,79 363 997 363 997 352 987 c 0,80,81 286 924 286 924 237 767 c 0,82,83 217.135 703.352 217.135 703.352 217.157 660.905 c 0,84,85 217.189 598.649 217.189 598.649 260 582 c 0,86,87 350 546 350 546 334.5 610.5 c 0,88,89 319 675 319 675 273 684 c 0,90,91 318 702 318 702 358.5 663 c 0,92,93 399 624 399 624 426.5 566 c 0,94,95 454 508 454 508 464 449.5 c 0,96,97 474 391 474 391 459 371 c 0,98,99 458 408 458 408 432.5 424 c 0,100,101 407 440 407 440 385 413 c 0,102,103 356.738 379.691 356.738 379.691 356.366 352.75 c 0,104,105 359.552 334.59 l 0,106,107 365.495 319.032 365.495 319.032 382.5 306 c 0,108,109 436 265 436 265 529 259 c 0,110,111 622 253 622 253 720 287 c 0,112,113 818 321.001 818 321.001 851 406 c 0,114,115 877 475 877 475 812 486.5 c 0,116,117 790.15 486.903 l 0,118,119 759.741 481.142 759.741 481.142 759.84 434.141 c 0,120,121 759.871 419.164 759.871 419.164 763 400 c 0,122,123 731.127 447.81 731.127 447.81 730.967 483.991 c 0,124,125 730.869 506.399 730.869 506.399 742.934 524.347 c 0,126,127 749.283 533.791 749.283 533.791 759 542 c 0,128,129 817 591 817 591 883 657 c 0,130,131 988 759 988 759 973 883 c 0,132,133 958.001 1006.99 958.001 1006.99 850 1107 c 0,134,135 778.288 1172.36 778.288 1172.36 729.654 1172.62 c 0,136,137 724.708 1172.65 724.708 1172.65 720 1172 c 0,138,139 668.989 1164.99 668.989 1164.99 628 1119 c 0,140,141 586.987 1072.98 586.987 1072.98 547.5 1008.5 c 0,142,143 508 944 508 944 454 901 c 0,66,67 713 1513 m 1,107,108 659.89 1575.91 659.89 1575.91 659.855 1645.51 c 0,109,110 659.847 1661.09 659.847 1661.09 662.5 1677 c 0,111,112 677 1764 677 1764 735 1823.5 c 0,113,114 793 1883.01 793 1883.01 876 1897 c 0,115,116 911.02 1899.19 l 0,117,118 974.217 1896.21 974.217 1896.21 1030 1842 c 0,119,120 976.262 1882.84 976.262 1882.84 932.539 1883.13 c 0,121,122 917.33 1883.23 917.33 1883.23 903.333 1878.42 c 0,123,124 901.405 1877.76 901.405 1877.76 899.5 1877 c 0,125,126 843.996 1854.99 843.996 1854.99 817 1810 c 0,127,128 795.751 1774.59 795.751 1774.59 795.56 1742.58 c 0,129,130 795.509 1733.91 795.509 1733.91 797 1725.5 c 0,131,132 804 1686.01 804 1686.01 854 1709 c 0,133,134 864.909 1713.36 864.909 1713.36 865.107 1729.33 c 0,135,136 860.634 1755.7 l 0,137,138 859.468 1759.69 859.468 1759.69 858 1764 c 0,139,140 887.56 1724.58 887.56 1724.58 888.396 1699.82 c 0,141,142 886 1685.5 l 0,143,144 875.003 1659 875.003 1659 842 1638 c 0,145,-1 769.5 1591 l 0,146,147 729.999 1565 729.999 1565 713 1513 c 1,107,108 EndSplineSet KernsSLIF: 116 -234 0 0 119 -156 0 0 EndChar StartChar: odieresis Encoding: 246 246 80 Width: 1378 Flags: HW Fore 916.3 -9.34961 m 0,0,1 904.401 0.849471 904.401 0.849471 827.475 9.77539 c 0,2,3 750.552 18.7001 750.552 18.7001 661.3 20.4004 c 0,4,5 572.05 22.0996 572.05 22.0996 497.675 12.75 c 0,6,7 424.255 3.52052 424.255 3.52052 417.35 -22.9502 c 0,8,9 412.25 -42.5 412.25 -42.5 431.375 -63.75 c 0,10,11 450.5 -85.0001 450.5 -85.0001 522.75 -110.5 c 0,12,13 475.333 -112.195 l 0,14,15 420.862 -109.586 420.862 -109.586 368.05 -85.8496 c 0,16,17 276.266 -44.5988 276.266 -44.5988 255 19.5498 c 0,18,19 204.001 173.398 204.001 173.398 189.125 245.65 c 0,20,21 162.128 409.363 162.128 409.363 149.6 435.2 c 0,22,23 108.8 519.35 108.8 519.35 37.8252 640.475 c 0,24,25 -33.1504 761.6 -33.1504 761.6 36.5498 881.45 c 0,26,27 36.886 828.045 l 0,28,29 40.8577 786.531 40.8577 786.531 58.6504 779.025 c 0,30,31 85.8496 767.55 85.8496 767.55 112.2 782.85 c 0,32,33 140.25 799.849 140.25 799.849 192.95 932.875 c 0,34,35 245.705 1066.04 245.705 1066.04 260.1 1105 c 0,36,37 272.902 1140.56 272.902 1140.56 273.054 1164.26 c 0,38,39 273.151 1179.36 273.151 1179.36 268.108 1189.64 c 0,40,41 266.18 1193.57 266.18 1193.57 263.5 1196.8 c 0,42,43 246.17 1217.66 246.17 1217.66 223.104 1217.78 c 0,44,45 203.924 1217.88 203.924 1217.88 180.779 1203.64 c 0,46,47 164.853 1193.84 164.853 1193.84 147.05 1177.25 c 0,48,49 155.55 1236.75 155.55 1236.75 191.25 1267.35 c 0,50,51 240.928 1307.83 240.928 1307.83 316.625 1311.55 c 0,52,53 349.497 1313.73 349.497 1313.73 464.1 1366.38 c 0,54,55 514.772 1389.7 514.772 1389.7 599.25 1390.6 c 0,56,57 679.152 1391.46 679.152 1391.46 691.05 1429.7 c 0,58,59 707.201 1484.1 707.201 1484.1 606.9 1501.1 c 0,60,61 667.25 1526.6 667.25 1526.6 725.9 1493.03 c 0,62,63 784.558 1459.44 784.558 1459.44 837.675 1400.8 c 0,64,65 890.8 1342.15 890.8 1342.15 935.85 1275.85 c 0,66,67 980.915 1209.53 980.915 1209.53 1014.05 1169.6 c 0,68,69 1070.16 1100.74 1070.16 1100.74 1186.17 1027.22 c 0,70,71 1302.19 953.7 1302.19 953.7 1313.25 811.75 c 0,72,73 1269.97 876.665 1269.97 876.665 1238.32 877.009 c 0,74,75 1232.68 877.07 1232.68 877.07 1227.4 875.075 c 0,76,77 1192.54 861.896 1192.54 861.896 1185.75 839.8 c 0,78,79 1163.33 768.803 1163.33 768.803 1163.37 705.357 c 0,80,81 1163.39 667.767 1163.39 667.767 1171.3 632.825 c 0,82,83 1201.41 499.741 1201.41 499.741 1221.45 461.975 c 0,84,85 1262.25 385.05 1262.25 385.05 1262.67 324.275 c 0,86,87 1260.17 287.831 l 0,88,89 1252.31 244.712 1252.31 244.712 1220.6 218.45 c 0,90,91 1236.76 300.05 1236.76 300.05 1215.92 328.525 c 0,92,93 1200.89 349.086 1200.89 349.086 1179.42 349.482 c 0,94,95 1161.95 346.8 l 0,96,97 1140.7 340.002 1140.7 340.002 1114.78 255.85 c 0,98,99 1088.84 171.7 1088.84 171.7 1054 79.4746 c 0,100,101 1010.71 -35.0859 1010.71 -35.0859 973.25 -78.2002 c 0,102,103 939.558 -116.979 939.558 -116.979 896.355 -117.246 c 0,104,105 881.793 -117.336 881.793 -117.336 866.15 -113.05 c 0,106,107 927.35 -99.4494 927.35 -99.4494 935 -66.7246 c 0,108,109 936.469 -44.7745 l 0,110,111 934.018 -24.5366 934.018 -24.5366 916.3 -9.34961 c 0,0,1 548.25 165.75 m 0,62,63 648.347 160.761 648.347 160.761 687.225 228.225 c 0,64,65 752.25 339.15 752.25 339.15 846.6 298.35 c 0,66,67 772.919 282.561 772.919 282.561 805.8 221.85 c 0,68,69 821.369 193.105 821.369 193.105 879.75 196.35 c 0,70,71 927.179 198.985 927.179 198.985 967.3 279.225 c 0,72,73 1028.91 402.453 1028.91 402.453 1035.3 477.275 c 0,74,75 1041.05 544.612 1041.05 544.612 1040.99 604.498 c 0,76,77 1040.95 650.853 1040.95 650.853 1037.42 692.75 c 0,78,79 1025.49 814.679 1025.49 814.679 1014.05 837.25 c 0,80,81 998.48 867.665 998.48 867.665 960.5 858.925 c 0,82,83 922.666 850.974 922.666 850.974 922.325 821.624 c 0,84,85 926.362 799.386 l 0,86,87 928.982 791.603 928.982 791.603 933.3 782.85 c 0,88,89 865.909 816.107 865.909 816.107 856.8 879.75 c 0,90,91 857.365 893.879 857.365 893.879 864.025 1017.45 c 0,92,93 866.867 1077.89 866.867 1077.89 816.85 1152.6 c 0,94,95 793.608 1187.32 793.608 1187.32 673.2 1206.15 c 0,96,97 610.858 1215.9 610.858 1215.9 559.725 1162.38 c 0,98,99 485.058 1084.22 485.058 1084.22 482.8 1047.62 c 0,100,101 470.41 846.737 470.41 846.737 466.65 833.85 c 0,102,103 438.003 730.523 438.003 730.523 376.125 696.15 c 0,104,105 413.458 804.286 413.458 804.286 308.55 806.225 c 0,106,107 294.277 803.159 l 0,108,109 265.044 788.558 265.044 788.558 265.122 704.552 c 0,110,111 265.126 700.434 265.126 700.434 265.2 696.15 c 0,112,113 267.169 582.489 267.169 582.489 270.3 545.7 c 0,114,115 278.711 437.373 278.711 437.373 317.9 362.95 c 0,116,117 383.163 239.008 383.163 239.008 415.65 211.65 c 0,118,119 465.243 169.889 465.243 169.889 548.25 165.75 c 0,62,63 246.5 1577.6 m 1,94,95 249.901 1651.55 249.901 1651.55 309.825 1761.62 c 0,96,97 369.744 1871.69 369.744 1871.69 447.1 1885.3 c 0,98,99 396.908 1790.71 396.908 1790.71 396.892 1749.7 c 0,100,101 396.887 1736.54 396.887 1736.54 402.05 1728.9 c 0,102,103 423.294 1697.46 423.294 1697.46 495.55 1694.05 c 0,104,105 486.201 1651.56 486.201 1651.56 386.75 1627.33 c 0,106,107 287.314 1603.11 287.314 1603.11 246.5 1577.6 c 1,94,95 893.35 1595.45 m 1,103,104 903.551 1664.31 903.551 1664.31 973.25 1742.08 c 0,105,106 1042.95 1819.85 1042.95 1819.85 1127.1 1840.25 c 0,107,108 1070.15 1784.15 1070.15 1784.15 1058.67 1730.6 c 0,109,110 1047.2 1677.05 1047.2 1677.05 1144.95 1651.55 c 0,111,112 1114.52 1627.53 1114.52 1627.53 1076.72 1627.48 c 0,113,114 1054.33 1627.45 1054.33 1627.45 1029.35 1635.83 c 0,115,116 962.2 1658.34 962.2 1658.34 893.35 1595.45 c 1,103,104 EndSplineSet EndChar StartChar: udieresis Encoding: 252 252 78 Width: 1329 Flags: HW Fore 794.325 -23.7998 m 128,-1,0 803.25 -76.5 803.25 -76.5 892.5 -42.5 c 0,1,2 855.06 -101.644 855.06 -101.644 793.666 -101.642 c 0,3,4 760.689 -101.641 760.689 -101.641 720.8 -84.5752 c 0,5,6 696.261 -74.0762 696.261 -74.0762 517.65 -45.9004 c 0,7,-1 378.25 -22.0996 l 0,8,9 345.296 -18.8683 l 0,10,11 274.509 -2.90244 274.509 -2.90244 270.3 91.7998 c 0,12,13 314.873 54.6553 314.873 54.6553 347.225 95.2002 c 0,14,15 354.846 104.75 354.846 104.75 354.974 117.666 c 0,16,17 355.071 127.561 355.071 127.561 350.77 139.432 c 0,18,19 349.425 143.144 349.425 143.144 347.65 147.05 c 0,20,21 330.805 184.111 330.805 184.111 303.45 214.2 c 0,22,-1 260.95 260.95 l 0,23,24 240.668 281.956 240.668 281.956 208.25 264.775 c 0,25,26 181.797 251.548 181.797 251.548 181.721 228.796 c 0,27,28 181.667 212.801 181.667 212.801 194.65 192.1 c 0,29,30 140.102 203.838 140.102 203.838 139.64 265.025 c 0,31,32 139.541 278.203 139.541 278.203 141.95 293.675 c 0,33,34 145.373 341.637 l 0,35,36 145.028 387.385 145.028 387.385 131.75 438.6 c 0,37,38 90.3602 595.881 90.3602 595.881 48.875 652.375 c 0,39,40 -35.7002 770.099 -35.7002 770.099 23.7998 903.55 c 0,41,42 25.5382 842.726 25.5382 842.726 59.0752 842.775 c 0,43,44 83.3029 842.811 83.3029 842.811 95.2002 872.95 c 0,45,46 107.95 905.249 107.95 905.249 67.5752 1043.38 c 0,47,48 27.2001 1181.5 27.2001 1181.5 28.9004 1222.3 c 0,49,50 33.1501 1386.34 33.1501 1386.34 136.85 1514.7 c 0,51,52 91.8515 1394.07 91.8515 1394.07 107.1 1269.9 c 0,53,54 123.35 1137.58 123.35 1137.58 209.95 1122 c 0,55,56 232.44 1122.04 l 0,57,58 257.102 1125.91 257.102 1125.91 289 1145.38 c 0,59,60 346.8 1180.65 346.8 1180.65 364.65 1275.85 c 0,61,62 398.65 1192.55 398.65 1192.55 369.325 1117.75 c 0,63,64 342.227 1048.63 342.227 1048.63 331.5 950.3 c 0,65,66 328.38 887.9 l 0,67,68 329.279 834.519 329.279 834.519 343.825 793.9 c 0,69,70 350.026 776.584 350.026 776.584 349.946 760.75 c 0,71,72 349.736 719.066 349.736 719.066 306 687.65 c 0,73,74 316.2 736.1 316.2 736.1 300.9 755.225 c 0,75,76 279.454 782.031 279.454 782.031 255 736.1 c 0,77,78 239.174 706.375 239.174 706.375 257.55 606.475 c 0,79,80 273.701 516.374 273.701 516.374 286.45 482.375 c 0,81,82 308.524 420.886 308.524 420.886 339.15 369.75 c 0,83,84 394.097 284.896 394.097 284.896 442 244.8 c 0,85,86 462.424 235.609 462.424 235.609 476.172 235.462 c 0,87,88 485.273 235.364 485.273 235.364 493.85 240.975 c 0,89,90 506.463 251.547 506.463 251.547 506.61 266.41 c 0,91,92 506.707 276.331 506.707 276.331 501.251 288.163 c 0,93,94 496.151 299.222 496.151 299.222 486.2 311.95 c 0,95,96 590.019 303.37 590.019 303.37 603.075 206.55 c 0,97,98 612.388 136.8 612.388 136.8 659.175 141.525 c 0,99,100 717.115 146.564 717.115 146.564 752.25 221.85 c 0,101,102 784.79 291.579 784.79 291.579 802.825 357.425 c 0,103,104 829.489 454.781 829.489 454.781 833.85 487.05 c 0,105,106 846.6 583.95 846.6 583.95 908.65 627.3 c 0,107,108 879.354 552.334 879.354 552.334 917.15 531.25 c 0,109,110 939.276 518.908 939.276 518.908 963.9 536.35 c 0,111,112 984.9 550.75 984.9 550.75 984.935 627.832 c 0,113,114 984.95 659.95 984.95 659.95 981.325 702.95 c 0,115,116 968.318 857.227 968.318 857.227 953.7 932.45 c 0,117,118 933.107 1038.42 933.107 1038.42 918.425 1082.47 c 0,119,120 903.528 1127.16 903.528 1127.16 903.575 1169.52 c 0,121,122 903.651 1237.13 903.651 1237.13 941.8 1298.8 c 0,123,124 950.924 1200.93 950.924 1200.93 999.175 1168.33 c 0,125,126 1036.52 1143.09 1036.52 1143.09 1058.89 1143.12 c 0,127,128 1069.04 1143.14 1069.04 1143.14 1076.1 1148.35 c 0,129,130 1137.78 1196.39 1137.78 1196.39 1154.3 1352.78 c 0,131,132 1158.92 1396.53 1158.92 1396.53 1158.83 1436.6 c 0,133,134 1158.66 1514.46 1158.66 1514.46 1140.7 1578.45 c 0,135,136 1196.81 1484.09 1196.81 1484.09 1211.67 1344.7 c 0,137,138 1216.91 1295.64 1216.91 1295.64 1216.83 1248.99 c 0,139,140 1216.68 1163.11 1216.68 1163.11 1198.5 1085.45 c 0,141,142 1180.94 1010.95 1180.94 1010.95 1181 946.244 c 0,143,144 1181.05 895.058 1181.05 895.058 1192.12 850 c 0,145,146 1217.2 748 1217.2 748 1176.4 697 c 0,147,148 1174.77 723.682 l 0,149,150 1170.35 743.741 1170.35 743.741 1155.58 753.95 c 0,151,152 1132.2 770.1 1132.2 770.1 1117.75 711.45 c 0,153,154 1104.92 658.776 1104.92 658.776 1104.93 595.482 c 0,155,156 1104.94 541.33 1104.94 541.33 1114.35 479.4 c 0,157,158 1120.07 441.729 1120.07 441.729 1119.98 409.006 c 0,159,160 1119.73 325.072 1119.73 325.072 1081.2 273.7 c 0,161,162 1081.2 362.144 1081.2 362.144 1044.44 362.661 c 0,163,164 1041.28 362.706 1041.28 362.706 1037.85 362.1 c 0,165,166 991.308 353.69 991.308 353.69 889.95 186.15 c 0,167,168 787.459 16.7373 787.459 16.7373 794.325 -23.7998 c 128,-1,0 164.9 1655.8 m 1,92,93 209.152 1694.99 209.152 1694.99 229.075 1823.67 c 0,94,95 244.799 1925.24 244.799 1925.24 341.7 1951.6 c 0,96,97 283.098 1886.48 283.098 1886.48 283.104 1833.34 c 0,98,99 283.106 1817.11 283.106 1817.11 288.575 1802 c 0,100,101 304.802 1754.41 304.802 1754.41 329.579 1754.19 c 0,102,103 340.419 1754.09 340.419 1754.09 352.896 1763.06 c 0,104,105 368.171 1774.03 368.171 1774.03 385.9 1798.6 c 0,106,107 420.75 1747.6 420.75 1747.6 336.175 1679.17 c 0,108,109 251.6 1610.76 251.6 1610.76 164.9 1655.8 c 1,92,93 1014.05 1667.7 m 1,101,102 1042.95 1680.45 1042.95 1680.45 1064.2 1727.62 c 0,103,104 1085.34 1772.94 1085.34 1772.94 1102.45 1821.12 c 0,105,106 1121.99 1868.28 1121.99 1868.28 1148.78 1901.03 c 0,107,108 1168 1924.51 1168 1924.51 1197.93 1924.57 c 0,109,110 1209.71 1924.6 1209.71 1924.6 1223.15 1921 c 0,111,112 1194.86 1907.76 1194.86 1907.76 1173.42 1864.9 c 0,113,114 1154.85 1827.74 1154.85 1827.74 1154.87 1783.15 c 0,115,116 1154.87 1777.75 1154.87 1777.75 1155.15 1772.25 c 0,117,118 1156.92 1752.48 1156.92 1752.48 1192.55 1742.92 c 0,119,120 1216.35 1736.55 1216.35 1736.55 1266.5 1760.35 c 0,121,122 1225.96 1698.19 1225.96 1698.19 1134.75 1660.47 c 0,123,124 1104.12 1647.8 1104.12 1647.8 1076.85 1647.84 c 0,125,126 1042.83 1647.88 1042.83 1647.88 1014.05 1667.7 c 1,101,102 EndSplineSet EndChar StartChar: Aogonek Encoding: 260 260 79 Width: 1433 Flags: HW Fore 1029 333 m 0,0,1 1023.7 401.322 1023.7 401.322 971 464 c 0,2,3 877 590 877 590 812.5 602.5 c 0,4,5 744.95 615.59 744.95 615.59 699 592.5 c 0,6,-1 607.5 541.5 l 0,7,8 546 534 546 534 522 591 c 0,9,10 512.517 613.165 512.517 613.165 518.5 646.5 c 0,11,12 521.999 665.998 521.999 665.998 539 687 c 0,13,14 554.303 602.429 554.303 602.429 598 660.5 c 0,15,16 637.977 713.627 637.977 713.627 580 748 c 0,17,18 442.531 829.503 442.531 829.503 400.5 697 c 0,19,20 371.001 604.004 371.001 604.004 365.5 479 c 0,21,22 359.999 353.995 359.999 353.995 330.5 250 c 0,23,24 306.258 164.54 306.258 164.54 200.652 164.16 c 0,25,26 177.741 164.078 177.741 164.078 151 168 c 0,27,28 207 174 207 174 229.5 192 c 0,29,30 253.321 209.628 253.321 209.628 253.516 233.935 c 0,31,32 253.613 245.962 253.613 245.962 247.925 259.624 c 0,33,34 246.616 262.768 246.616 262.768 245 266 c 0,35,36 210.517 328.87 210.517 328.87 161 300.5 c 0,37,38 113.001 273.001 113.001 273.001 98.5 206.5 c 0,39,40 94.6267 188.736 94.6267 188.736 94.7136 170.045 c 0,41,42 94.9521 118.764 94.9521 118.764 125 60.5 c 0,43,44 165.999 -18.9998 165.999 -18.9998 307 -62 c 0,45,46 102 -62 102 -62 35 76.5 c 0,47,48 3.95718 140.67 3.95718 140.67 3.82694 205.378 c 0,49,50 3.72716 254.951 3.72716 254.951 21.7708 304.839 c 0,51,52 31.0079 330.378 31.0079 330.378 45 356 c 0,53,54 110.993 472.988 110.993 472.988 207.5 625.5 c 0,55,56 332.475 822.999 332.475 822.999 312 1096 c 0,57,58 312.923 1135.59 l 0,59,60 320.24 1195.69 320.24 1195.69 363.5 1255.5 c 0,61,62 399.342 1306.42 399.342 1306.42 444.631 1306.68 c 0,63,64 461.621 1306.78 461.621 1306.78 479.94 1299.75 c 0,65,66 494.548 1294.14 494.548 1294.14 510 1284 c 0,67,68 479.738 1283.76 l 0,69,70 447.266 1279 447.266 1279 427 1253.5 c 0,71,72 411.213 1233.8 411.213 1233.8 411.267 1214.56 c 0,73,74 411.319 1196.07 411.319 1196.07 426 1178 c 0,75,76 442.916 1157.08 442.916 1157.08 460.13 1156.77 c 0,77,78 475.394 1160.51 l 0,79,80 489.351 1167.58 489.351 1167.58 503.5 1188 c 0,81,82 542.995 1244.99 542.995 1244.99 580 1337 c 0,83,84 617 1428.99 617 1428.99 648.5 1523 c 0,85,86 679.997 1617 679.997 1617 703 1644 c 0,87,88 769 1722 769 1722 840 1714.5 c 0,89,90 911 1707 911 1707 911 1580 c 0,91,92 893.378 1613.83 893.378 1613.83 870.288 1613.88 c 0,93,94 860.623 1613.9 860.623 1613.9 850 1608 c 0,95,96 821.002 1591.01 821.002 1591.01 809 1529 c 0,97,98 800.755 1486.41 800.755 1486.41 800.771 1440.51 c 0,99,100 800.779 1419.59 800.779 1419.59 802.5 1398 c 0,101,102 808.001 1328.99 808.001 1328.99 832 1273 c 0,103,104 855.257 1218.74 855.257 1218.74 900 1215 c 0,105,106 936 1212 936 1212 927 1249.5 c 0,107,108 918 1287 918 1287 891 1320 c 0,109,110 949.002 1302 949.002 1302 969 1233.5 c 0,111,112 989 1164.99 989 1164.99 993 1080.5 c 0,113,114 995.825 937.374 l 0,115,116 995.723 924.927 995.723 924.927 995.5 912.5 c 0,117,118 994 829 994 829 1010 782 c 0,119,120 1023.01 742 1023.01 742 1098.5 638 c 0,121,122 1173.99 534 1173.99 534 1242.5 420 c 0,123,124 1311 306.016 1311 306.016 1338 208.5 c 0,125,126 1344.72 184.225 1344.72 184.225 1344.69 164.443 c 0,127,128 1344.59 104.775 1344.59 104.775 1283 86 c 0,129,130 1297.93 112.12 1297.93 112.12 1297.96 128.075 c 0,131,132 1298 152.964 1298 152.964 1261.79 153.122 c 0,133,134 1259 153.134 1259 153.134 1256 153 c 0,135,136 1228.22 152.133 1228.22 152.133 1228.3 114.634 c 0,137,138 1228.35 90.4386 1228.35 90.4386 1240 51 c 0,139,140 1280.48 -87.1799 1280.48 -87.1799 1280.48 -185.313 c 0,141,142 1280.48 -249.802 1280.48 -249.802 1263 -297 c 0,143,144 1234.55 -373.8 1234.55 -373.8 1191 -416 c 0,145,146 1107.92 -495.703 1107.92 -495.703 1027.5 -512.5 c 0,147,148 888.41 -542.467 888.41 -542.467 798 -505 c 0,149,150 874.226 -508.555 874.226 -508.555 927 -498 c 0,151,152 980.597 -487.281 980.597 -487.281 1038 -441 c 0,153,154 1076.94 -409.604 1076.94 -409.604 1099.5 -351.5 c 0,155,156 1104.33 -339.051 1104.33 -339.051 1104.24 -327.737 c 0,157,158 1104 -295.17 1104 -295.17 1063 -272 c 0,159,160 1048.68 -263.905 1048.68 -263.905 1035.82 -263.715 c 0,161,162 1019.54 -266.886 l 0,163,164 1002.14 -274.218 1002.14 -274.218 987 -300 c 0,165,166 975 -321 975 -321 984 -386 c 0,167,168 945.74 -313.824 945.74 -313.824 963 -263 c 0,169,170 981 -209.999 981 -209.999 1021 -191.5 c 0,171,172 1131.73 -140.111 1131.73 -140.111 1152 -75 c 0,173,174 1177.68 7.50585 1177.68 7.50585 1116 21 c 0,175,176 1069.64 31.1432 1069.64 31.1432 1059 18 c 0,177,178 1050.41 7.81504 1050.41 7.81504 1050.19 -3.31424 c 0,179,180 1053.95 -19.2845 l 0,181,182 1060.04 -32.0857 1060.04 -32.0857 1076 -46 c 0,183,184 1003.72 -45.1274 1003.72 -45.1274 1016 57 c 0,185,186 1031.7 187.605 1031.7 187.605 1031.61 272.387 c 0,187,188 1031.58 306.378 1031.58 306.378 1029 333 c 0,0,1 733 888 m 0,93,94 763.873 888.762 l 0,95,96 796.902 894.015 796.902 894.015 817.5 919.5 c 0,97,98 846.999 955.998 846.999 955.998 852.5 997.5 c 0,99,100 853.215 1029.13 l 0,101,102 851 1049.91 851 1049.91 841 1065.5 c 0,103,104 822.658 1086.53 822.658 1086.53 805.386 1086.66 c 0,105,106 795.518 1086.74 795.518 1086.74 786 1080 c 0,107,108 767.953 1069.48 767.953 1069.48 767.749 1054.02 c 0,109,110 767.651 1046.6 767.651 1046.6 771.657 1038.05 c 0,111,112 773.597 1033.91 773.597 1033.91 776.5 1029.5 c 0,113,114 789.996 1009 789.996 1009 823 997 c 0,115,116 746.568 970.543 746.568 970.543 715 1020 c 0,117,118 700.983 1041.96 700.983 1041.96 701.047 1068.4 c 0,119,120 701.12 1098.54 701.12 1098.54 719.5 1134.5 c 0,121,122 754.648 1203.27 754.648 1203.27 717 1220 c 0,123,124 681 1236.01 681 1236.01 640 1190 c 0,125,126 598.998 1143.99 598.998 1143.99 585.5 1079.5 c 0,127,128 572 1015 572 1015 600.5 956 c 0,129,130 629 897 629 897 733 888 c 0,93,94 EndSplineSet KernsSLIF: 87 -208 0 0 EndChar StartChar: aogonek Encoding: 261 261 80 Width: 1218 Flags: HW Fore 874.65 283.05 m 0,0,1 870.156 341.119 870.156 341.119 825.35 394.4 c 0,2,3 745.449 501.501 745.449 501.501 690.625 512.125 c 0,4,5 669.512 516.217 669.512 516.217 650.882 516.15 c 0,6,7 618.846 516.035 618.846 516.035 594.15 503.625 c 0,8,-1 516.375 460.275 l 0,9,10 464.1 453.9 464.1 453.9 443.7 502.35 c 0,11,12 438.716 514.002 438.716 514.002 438.758 529.284 c 0,13,14 438.785 538.714 438.785 538.714 440.725 549.525 c 0,15,16 443.699 566.098 443.699 566.098 458.15 583.95 c 0,17,18 465.711 542.167 465.711 542.167 481.426 541.346 c 0,19,20 492.256 544.975 l 0,21,22 499.619 549.888 499.619 549.888 508.3 561.425 c 0,23,24 542.28 606.583 542.28 606.583 493 635.8 c 0,25,26 448.906 661.942 448.906 661.942 416.364 662.182 c 0,27,28 402.973 662.28 402.973 662.28 391.537 657.992 c 0,29,30 357.121 645.087 357.121 645.087 340.425 592.45 c 0,31,32 315.351 513.404 315.351 513.404 310.675 407.15 c 0,33,34 305.999 300.895 305.999 300.895 280.925 212.5 c 0,35,36 260.287 139.743 260.287 139.743 170.268 139.535 c 0,37,38 150.912 139.491 150.912 139.491 128.35 142.8 c 0,39,40 175.95 147.9 175.95 147.9 195.075 163.2 c 0,41,42 215.219 178.107 215.219 178.107 215.486 198.634 c 0,43,44 211.531 218.694 l 0,45,46 210.136 222.328 210.136 222.328 208.25 226.1 c 0,47,48 178.939 279.538 178.939 279.538 136.85 255.425 c 0,49,50 96.05 232.05 96.05 232.05 83.7246 175.525 c 0,51,52 80.5269 142.666 l 0,53,54 81.2572 99.8871 81.2572 99.8871 106.25 51.4248 c 0,55,56 141.1 -16.1504 141.1 -16.1504 260.95 -52.7002 c 0,57,58 86.7002 -52.7002 86.7002 -52.7002 29.75 65.0254 c 0,59,60 3.24371 119.818 3.24371 119.818 3.25233 175.071 c 0,61,62 3.26224 238.532 3.26224 238.532 38.25 302.6 c 0,63,64 94.3515 402.053 94.3515 402.053 176.375 531.675 c 0,65,66 267.729 676.043 267.729 676.043 267.65 867.872 c 0,67,68 267.637 899.106 267.637 899.106 265.2 931.6 c 0,69,70 266.376 968.254 l 0,71,72 273.284 1017.82 273.284 1017.82 308.975 1067.17 c 0,73,74 339.503 1110.54 339.503 1110.54 378.091 1110.68 c 0,75,76 403.982 1110.77 403.982 1110.77 433.5 1091.4 c 0,77,78 406.329 1090.97 l 0,79,80 379.719 1086.58 379.719 1086.58 362.95 1065.47 c 0,81,82 336.635 1032.64 336.635 1032.64 362.1 1001.3 c 0,83,84 376.748 983.182 376.748 983.182 391.659 983.246 c 0,85,86 409.627 983.323 409.627 983.323 427.975 1009.8 c 0,87,88 461.545 1058.24 461.545 1058.24 493 1136.45 c 0,89,90 524.45 1214.65 524.45 1214.65 551.225 1294.55 c 0,91,92 577.997 1374.45 577.997 1374.45 597.55 1397.4 c 0,93,94 648.354 1457.44 648.354 1457.44 702.637 1457.89 c 0,95,96 708.3 1457.93 708.3 1457.93 714 1457.33 c 0,97,98 774.35 1450.95 774.35 1450.95 774.35 1343 c 0,99,100 759.658 1371.21 759.658 1371.21 740.495 1371.79 c 0,101,102 725.624 1368.4 l 0,103,104 722.5 1366.8 l 0,105,106 697.852 1352.36 697.852 1352.36 687.65 1299.65 c 0,107,108 680.656 1263.52 680.656 1263.52 680.656 1224.58 c 0,109,110 680.655 1206.73 680.655 1206.73 682.125 1188.3 c 0,111,112 686.801 1129.64 686.801 1129.64 707.2 1082.05 c 0,113,114 726.976 1035.91 726.976 1035.91 765 1032.75 c 0,115,116 780.597 1034.61 l 0,117,118 789.506 1038.67 789.506 1038.67 789.48 1050.78 c 0,119,120 789.469 1055.75 789.469 1055.75 787.95 1062.08 c 0,121,122 780.302 1093.95 780.302 1093.95 757.35 1122 c 0,123,124 806.651 1106.7 806.651 1106.7 823.65 1048.47 c 0,125,126 840.518 990.703 840.518 990.703 844.05 918.425 c 0,127,128 847.451 846.6 847.451 846.6 846.175 775.625 c 0,129,130 848.559 712.944 l 0,131,132 851.634 684.868 851.634 684.868 858.5 664.7 c 0,133,134 869.551 630.7 869.551 630.7 933.725 542.3 c 0,135,136 997.93 453.859 997.93 453.859 1056.12 357 c 0,137,138 1114.35 260.1 1114.35 260.1 1137.3 177.225 c 0,139,140 1143.06 156.431 1143.06 156.431 1142.98 139.517 c 0,141,142 1142.76 89.0173 1142.76 89.0173 1090.55 73.0996 c 0,143,144 1103.06 94.9886 1103.06 94.9886 1103.26 108.48 c 0,145,146 1100.22 120.124 l 0,147,148 1093.75 129.824 1093.75 129.824 1073.52 130.144 c 0,149,150 1070.7 130.189 1070.7 130.189 1067.6 130.05 c 0,151,152 1043.98 129.312 1043.98 129.312 1044.05 97.4379 c 0,153,154 1044.09 76.8749 1044.09 76.8749 1054 43.3496 c 0,155,156 1088.46 -74.2999 1088.46 -74.2999 1088.41 -157.795 c 0,157,158 1088.37 -212.434 1088.37 -212.434 1073.55 -252.45 c 0,159,160 1049.17 -318.284 1049.17 -318.284 1012.35 -353.6 c 0,161,162 941.723 -421.348 941.723 -421.348 873.375 -435.625 c 0,163,164 755.148 -461.096 755.148 -461.096 678.3 -429.25 c 0,165,166 745.832 -428.787 l 0,167,168 768.723 -427.145 768.723 -427.145 787.95 -423.3 c 0,169,170 833.506 -414.188 833.506 -414.188 882.3 -374.85 c 0,171,172 915.4 -348.164 915.4 -348.164 934.575 -298.775 c 0,173,174 950.506 -257.74 950.506 -257.74 903.55 -231.2 c 0,175,176 891.257 -224.252 891.257 -224.252 880.236 -224.155 c 0,177,178 869.238 -224.059 869.238 -224.059 859.507 -230.783 c 0,179,180 848.405 -238.453 848.405 -238.453 838.95 -255 c 0,181,182 833.076 -265.28 833.076 -265.28 833.122 -287.966 c 0,183,184 833.156 -304.67 833.156 -304.67 836.4 -328.1 c 0,185,186 803.878 -266.751 803.878 -266.751 818.55 -223.55 c 0,187,188 833.851 -178.499 833.851 -178.499 867.85 -162.775 c 0,189,190 961.975 -119.091 961.975 -119.091 979.2 -63.75 c 0,191,192 1001.03 6.37995 1001.03 6.37995 948.6 17.8496 c 0,193,194 909.195 26.4718 909.195 26.4718 900.15 15.2998 c 0,195,196 892.906 6.70984 892.906 6.70984 892.667 -2.67166 c 0,197,198 896.39 -17.4706 l 0,199,200 901.706 -27.8569 901.706 -27.8569 914.6 -39.0996 c 0,201,202 853.165 -38.3584 853.165 -38.3584 863.6 48.4502 c 0,203,204 876.96 159.575 876.96 159.575 876.87 231.658 c 0,205,206 876.835 260.474 876.835 260.474 874.65 283.05 c 0,0,1 623.05 754.8 m 0,93,94 651.68 755.862 l 0,95,96 678.117 760.841 678.117 760.841 694.875 781.575 c 0,97,98 719.949 812.598 719.949 812.598 724.625 847.875 c 0,99,100 724.988 876.826 l 0,101,102 722.85 893.204 722.85 893.204 714.85 905.675 c 0,103,104 699.258 923.547 699.258 923.547 684.578 923.664 c 0,105,106 676.19 923.731 676.19 923.731 668.1 918 c 0,107,108 652.852 909.109 652.852 909.109 652.589 896.07 c 0,109,110 656.305 881.517 l 0,111,112 657.846 878.384 657.846 878.384 660.025 875.075 c 0,113,114 671.5 857.65 671.5 857.65 699.55 847.45 c 0,115,116 677.045 839.66 677.045 839.66 659.116 839.612 c 0,117,118 625.288 839.523 625.288 839.523 607.75 867 c 0,119,120 595.874 885.605 595.874 885.605 595.89 907.989 c 0,121,122 595.907 933.67 595.907 933.67 611.575 964.325 c 0,123,124 625.829 992.219 625.829 992.219 625.998 1010.04 c 0,125,126 626.093 1020.15 626.093 1020.15 621.652 1027.02 c 0,127,128 617.518 1033.42 617.518 1033.42 609.45 1037 c 0,129,130 592.831 1040.51 l 0,131,132 569.558 1040.18 569.558 1040.18 544 1011.5 c 0,133,134 509.15 972.399 509.15 972.399 497.675 917.575 c 0,135,136 486.2 862.75 486.2 862.75 510.425 812.6 c 0,137,138 534.65 762.451 534.65 762.451 623.05 754.8 c 0,93,94 EndSplineSet KernsSLIF: 119 -182 0 0 EndChar StartChar: Cacute Encoding: 262 262 81 Width: 1221 Flags: W Fore 769 -106 m 0,0,1 471 -10 471 -10 308.5 95.5 c 0,2,3 146.001 200.999 146.001 200.999 52 521 c 0,4,5 -21 771 -21 771 61.5 803 c 0,6,7 144 835 144 835 183 814 c 0,8,9 100 809 100 809 92 748 c 0,10,11 87.9999 724 87.9999 724 107 703.5 c 0,12,13 113.742 696.226 113.742 696.226 123.506 696.065 c 0,14,15 140.554 700.134 l 0,16,17 153.145 705.726 153.145 705.726 169 719 c 0,18,19 250.999 787.999 250.999 787.999 313.5 936.5 c 0,20,21 345.304 1012.07 345.304 1012.07 345.388 1061.87 c 0,22,23 345.468 1109.93 345.468 1109.93 316 1134 c 0,24,25 297.495 1147.88 297.495 1147.88 285.093 1147.79 c 0,26,27 268.004 1147.66 268.004 1147.66 262.5 1121 c 0,28,29 259.612 1088.31 l 0,30,31 260.551 1059.54 260.551 1059.54 274 1032 c 0,32,33 211.33 1083.77 211.33 1083.77 211.355 1131.42 c 0,34,35 211.358 1136.23 211.358 1136.23 212 1141 c 0,36,37 219 1193 219 1193 230 1211 c 0,38,39 257 1259 257 1259 334 1308.5 c 0,40,-1 490.5 1405 l 0,41,42 570 1451.99 570 1451.99 629 1495 c 0,43,44 680.531 1532.56 680.531 1532.56 680.952 1564.77 c 0,45,46 681.013 1569.44 681.013 1569.44 680 1574 c 0,47,48 673.091 1599.91 673.091 1599.91 657.729 1600.63 c 0,49,50 643.631 1596.94 l 0,51,52 637.511 1593.8 637.511 1593.8 630.5 1588 c 0,53,54 595.679 1559.21 595.679 1559.21 596 1532 c 0,55,56 592.844 1540.68 592.844 1540.68 592.879 1559.48 c 0,57,58 592.931 1588.32 592.931 1588.32 600.5 1641 c 0,59,60 613 1728 613 1728 715 1686 c 0,61,62 978.009 1575 978.009 1575 1049 1418 c 0,63,64 1076.75 1356.64 1076.75 1356.64 1076.7 1303.38 c 0,65,66 1076.62 1220.35 1076.62 1220.35 1009 1157 c 0,67,68 1022 1185.98 1022 1185.98 1029.5 1285.5 c 0,69,70 1028.57 1316.85 l 0,71,72 1021.6 1358.1 1021.6 1358.1 980.781 1358.56 c 0,73,74 950.888 1354.61 l 0,75,76 941.948 1352.41 941.948 1352.41 932 1349 c 0,77,78 853.592 1320.96 853.592 1320.96 853.408 1261.41 c 0,79,80 853.309 1229.29 853.309 1229.29 875.979 1188 c 0,81,82 877.205 1185.76 877.205 1185.76 878.5 1183.5 c 0,83,84 948 1062 948 1062 1087 1047 c 0,85,86 1059.4 1041.56 1059.4 1041.56 1030.84 1041.64 c 0,87,88 991.108 1041.74 991.108 1041.74 949.5 1052.5 c 0,89,90 878.012 1070.99 878.012 1070.99 860 1091 c 0,91,92 812 1144 812 1144 810 1175.5 c 0,93,94 808.001 1206.99 808.001 1206.99 786 1292 c 0,95,96 763 1376 763 1376 698.5 1364 c 0,97,98 633.992 1352 633.992 1352 569 1292.5 c 0,99,100 504 1232.99 504 1232.99 460.5 1151.5 c 0,101,102 430.805 1095.87 430.805 1095.87 430.701 1053.04 c 0,103,104 430.653 1033.14 430.653 1033.14 437 1016 c 0,105,106 454 967 454 967 502 988 c 0,107,108 538.099 1003.79 538.099 1003.79 538 1030.05 c 0,109,110 537.967 1038.71 537.967 1038.71 534 1048.5 c 0,111,112 517.997 1088 517.997 1088 478 1100 c 0,113,114 498.94 1109.19 498.94 1109.19 516.623 1109.26 c 0,115,116 533.557 1109.31 533.557 1109.31 547.5 1101 c 0,117,118 575.996 1084.01 575.996 1084.01 588 1063 c 0,119,120 600.251 1038.5 600.251 1038.5 600.196 1012.93 c 0,121,122 600.043 942.503 600.043 942.503 506.5 864 c 0,123,124 379 757 379 757 334 658 c 0,125,126 235 442 235 442 332 274 c 0,127,128 383.944 184.036 383.944 184.036 477.181 184.115 c 0,129,130 558.055 184.183 558.055 184.183 670 252 c 0,131,132 682.002 259.002 682.002 259.002 725.5 306.5 c 0,133,134 769 354 769 354 819.5 396 c 0,135,136 870 438 870 438 915 451 c 0,137,138 934.367 452.983 l 0,139,140 963.5 449.533 963.5 449.533 975 402 c 0,141,142 939 430 939 430 905 404.5 c 0,143,144 871 379 871 379 857.5 341.5 c 0,145,146 844 304 844 304 861 274 c 0,147,148 871.446 255.566 871.446 255.566 900.392 255.633 c 0,149,150 918.554 255.675 918.554 255.675 944 263 c 0,151,152 1110.72 309.975 1110.72 309.975 1110.72 453.253 c 0,153,154 1110.72 465.522 1110.72 465.522 1109.5 478.5 c 0,155,156 1094.01 642.999 1094.01 642.999 988 698 c 0,157,158 1127.99 642 1127.99 642 1145.5 504 c 0,159,160 1163.01 366 1163.01 366 1090 284 c 0,161,162 1042 228.999 1042 228.999 932.5 158 c 0,163,164 823 87.0005 823 87.0005 852 36 c 0,165,166 891 -36 891 -36 945.5 18 c 0,167,168 1000.01 72.0056 1000.01 72.0056 1002 120 c 0,169,170 1020 14 1020 14 942.5 -61.5 c 0,171,172 887.78 -114.807 887.78 -114.807 823.84 -115.023 c 0,173,174 797.219 -115.113 797.219 -115.113 769 -106 c 0,0,1 885 1767 m 1,90,91 839 1752 839 1752 797 1798.5 c 0,92,93 754.997 1845 754.997 1845 735 1912 c 0,94,95 722.259 1954.69 722.259 1954.69 722.302 1997.77 c 0,96,97 722.326 2022.32 722.326 2022.32 726.5 2047 c 0,98,99 738.001 2115 738.001 2115 798 2142 c 0,100,101 765 2105 765 2105 766 2047.5 c 0,102,103 766.946 1993.17 766.946 1993.17 807.179 1992.85 c 0,104,105 809.523 1992.83 809.523 1992.83 812 1993 c 0,106,107 865.773 1996.58 865.773 1996.58 866.085 2049.52 c 0,108,109 866.183 2066.19 866.183 2066.19 860.977 2087.76 c 0,110,111 859.658 2093.22 859.658 2093.22 858 2099 c 0,112,113 888.014 2051.29 888.014 2051.29 888.119 2012.75 c 0,114,115 888.15 2001.21 888.15 2001.21 885.5 1990.5 c 0,116,117 873.997 1943.99 873.997 1943.99 855.5 1906 c 0,118,119 837.001 1868.01 837.001 1868.01 833 1835 c 0,120,121 834.75 1818.37 l 0,122,123 843.001 1793.25 843.001 1793.25 885 1767 c 1,90,91 EndSplineSet EndChar StartChar: cacute Encoding: 263 263 82 Width: 1053 Flags: W Fore 667 50 m 0,0,1 414.002 130.999 414.002 130.999 276 221.5 c 0,2,3 138 312 138 312 58 584 c 0,4,5 -3.99995 797 -3.99995 797 66 824 c 0,6,7 136.001 851 136.001 851 169 833 c 0,8,9 98.9995 830 98.9995 830 91 777 c 0,10,11 88 756 88 756 104.5 739 c 0,12,13 110.314 733.01 110.314 733.01 118.55 732.979 c 0,14,15 133.686 732.924 133.686 732.924 157 753 c 0,16,17 226 811 226 811 279.5 937 c 0,18,19 333 1063 333 1063 282 1105 c 0,20,21 245 1133.99 245 1133.99 237 1094.5 c 0,22,23 234.565 1064.17 l 0,24,25 235.643 1040.93 235.643 1040.93 246 1019 c 0,26,27 193.643 1062.33 193.643 1062.33 193.438 1102.81 c 0,28,29 193.416 1107.17 193.416 1107.17 194 1111.5 c 0,30,31 199.999 1156 199.999 1156 209 1171 c 0,32,33 231.999 1211.01 231.999 1211.01 297.5 1253.5 c 0,34,-1 430.5 1336 l 0,35,36 498 1376.01 498 1376.01 548 1412.5 c 0,37,38 591.233 1444.06 591.233 1444.06 591.851 1470.76 c 0,39,40 591.947 1474.94 591.947 1474.94 591 1479 c 0,41,42 581 1516.99 581 1516.99 549 1491 c 0,43,44 519.723 1467.22 519.723 1467.22 520 1444 c 0,45,46 517.162 1451.3 517.162 1451.3 517.2 1467.88 c 0,47,48 517.257 1492.2 517.257 1492.2 523.5 1536.5 c 0,49,50 530.554 1586.55 530.554 1586.55 572.133 1586.73 c 0,51,52 592.446 1586.82 592.446 1586.82 621 1575 c 0,53,54 843.999 1481 843.999 1481 905 1347 c 0,55,56 928.906 1294.49 928.906 1294.49 928.852 1249.04 c 0,57,58 928.771 1179.09 928.771 1179.09 871 1125 c 0,59,60 882.999 1149 882.999 1149 888.5 1233.5 c 0,61,62 886.96 1262.72 l 0,63,64 879.922 1295.56 879.922 1295.56 846.301 1295.86 c 0,65,66 818.321 1291.76 l 0,67,68 812.409 1290.18 812.409 1290.18 806 1288 c 0,69,70 739.114 1264.43 739.114 1264.43 738.776 1213.88 c 0,71,72 738.677 1198.96 738.677 1198.96 744.373 1181.69 c 0,73,74 749.675 1165.61 749.675 1165.61 760 1147.5 c 0,75,76 818.997 1044.01 818.997 1044.01 937 1031 c 0,77,78 914.022 1026.49 914.022 1026.49 890.21 1026.52 c 0,79,80 855.966 1026.56 855.966 1026.56 820 1036 c 0,81,82 759 1052.01 759 1052.01 744 1069 c 0,83,84 703 1114 703 1114 701.5 1140.5 c 0,85,86 700 1167 700 1167 682 1239 c 0,87,88 662 1311 662 1311 607 1300.5 c 0,89,90 552.008 1290 552.008 1290 497 1240 c 0,91,92 442.012 1190.02 442.012 1190.02 405 1120.5 c 0,93,94 379.853 1073.27 379.853 1073.27 379.65 1036.89 c 0,95,96 379.554 1019.74 379.554 1019.74 385 1005 c 0,97,98 394.672 975.982 394.672 975.982 417.234 975.605 c 0,99,100 436.705 979.633 l 0,101,102 438.331 980.267 438.331 980.267 440 981 c 0,103,104 470 994.5 470 994.5 470.188 1017 c 0,105,106 470.25 1024.5 470.25 1024.5 467 1033 c 0,107,108 454.002 1067 454.002 1067 419 1076 c 0,109,110 436.939 1083.69 436.939 1083.69 452.123 1083.76 c 0,111,112 466.558 1083.82 466.558 1083.82 478.5 1077 c 0,113,114 502.995 1063.01 502.995 1063.01 513 1045 c 0,115,116 552 967 552 967 444 876 c 0,117,118 336 785 336 785 297 701 c 0,119,120 213 518 213 518 295.5 374.5 c 0,121,122 339.547 297.884 339.547 297.884 418.515 297.806 c 0,123,124 487.451 297.739 487.451 297.739 583 356 c 0,125,126 592.998 361.999 592.998 361.999 630 402.5 c 0,127,128 667.002 443.001 667.002 443.001 710 478.5 c 0,129,130 753 514 753 514 791.5 524.5 c 0,131,132 830 535 830 535 842 483 c 0,133,134 812 506 812 506 783 484.5 c 0,135,136 754.001 463.001 754.001 463.001 742.5 431 c 0,137,138 737.254 416.404 737.254 416.404 737.314 403.264 c 0,139,140 737.386 387.597 737.386 387.597 745 374 c 0,141,142 759 349 759 349 816 365 c 0,143,144 969 407 969 407 956 547.5 c 0,145,146 943 688 943 688 853 735 c 0,147,148 972.001 687 972.001 687 987.5 569.5 c 0,149,150 1003 452 1003 452 940 382 c 0,151,152 898 336 898 336 806 275.5 c 0,153,154 714 215.001 714 215.001 738 172 c 0,155,156 771 109 771 109 817 156 c 0,157,158 863 202.999 863 202.999 865 244 c 0,159,160 880 152.999 880 152.999 814 88 c 0,161,162 748 23 748 23 667 50 c 0,0,1 766 1644 m 1,90,91 727 1630.01 727 1630.01 691 1669.5 c 0,92,93 655.004 1708.99 655.004 1708.99 638.5 1766.5 c 0,94,95 628.026 1803 628.026 1803 628.029 1839.5 c 0,96,97 628.031 1860.5 628.031 1860.5 631.5 1881.5 c 0,98,99 641.001 1939.01 641.001 1939.01 692 1962 c 0,100,101 664.696 1930.8 664.696 1930.8 664.5 1881.5 c 0,102,103 664.967 1836.2 664.967 1836.2 699.025 1835.83 c 0,104,105 701.429 1835.8 701.429 1835.8 704 1836 c 0,106,107 749.303 1838.88 749.303 1838.88 749.618 1883.64 c 0,108,109 749.718 1897.74 749.718 1897.74 745.351 1916 c 0,110,111 744.304 1920.38 744.304 1920.38 743 1925 c 0,112,113 768.109 1884.68 768.109 1884.68 768.324 1852.45 c 0,114,115 768.391 1842.33 768.391 1842.33 766 1833 c 0,116,117 756.002 1794.01 756.002 1794.01 740.5 1761.5 c 0,118,119 725.516 1730.08 725.516 1730.08 721.5 1701.5 c 0,120,121 723.355 1686.49 l 0,122,123 730.94 1665.91 730.94 1665.91 766 1644 c 1,90,91 EndSplineSet EndChar StartChar: Eogonek Encoding: 280 280 83 Width: 1514 Flags: HMW HStem: -25.5 188.5<428 1169.5> 701.5 157<313.5 758.5> 1353 218<196 987> VStem: 82 215<-28 1037> 585 218.5<-320.5 -47> Fore 500 -334 m 132,-1,0 530 -270.001 530 -270.001 573 -221 c 0,1,2 616.001 -171.999 616.001 -171.999 637 -132 c 0,3,4 658 -91.9995 658 -91.9995 585 -47 c 0,5,6 556 -29 556 -29 469.5 -23 c 0,7,8 383 -17 383 -17 297 -28 c 0,9,10 211 -39 211 -39 155.5 -70.5 c 0,11,12 100 -102 100 -102 133 -159 c 0,13,14 154 -195.001 154 -195.001 230 -206 c 0,15,16 203.189 -212.105 203.189 -212.105 180.923 -212.01 c 0,17,18 119.311 -211.745 119.311 -211.745 92.5 -164 c 0,19,20 56.0001 -99.0005 56.0001 -99.0005 53 -3.5 c 0,21,22 50 92 50 92 65 190 c 0,23,24 80 288 80 288 82 330 c 0,25,26 83.3538 453.119 l 0,27,28 81.2241 552.794 81.2241 552.794 68.5 649 c 0,29,30 48 804 48 804 12 960 c 0,31,32 0 1020 0 1020 8.5 1078.5 c 0,33,34 17 1137 17 1137 83 1158 c 0,35,36 45 1137 45 1137 38 1069.5 c 0,37,38 38.125 1042.16 l 0,39,40 41.0576 1025.78 41.0576 1025.78 52.8586 1025.08 c 0,41,42 68.1897 1028.89 l 0,43,44 74.4608 1031.83 74.4608 1031.83 82 1037 c 0,45,46 149.999 1082 149.999 1082 190.5 1236.5 c 0,47,48 206.042 1295.79 206.042 1295.79 206.047 1335.86 c 0,49,50 206.056 1400.21 206.056 1400.21 166 1415 c 0,51,52 79 1445 79 1445 58 1386.5 c 0,53,54 37 1328 37 1328 52 1256 c 0,55,56 11.599 1313.04 11.599 1313.04 11.6157 1374.49 c 0,57,58 11.6272 1416.47 11.6272 1416.47 30.5 1460.5 c 0,59,60 77.0044 1569.01 77.0044 1569.01 196 1571 c 0,61,62 295 1572.01 295 1572.01 408.5 1527.5 c 0,63,64 462.924 1506.16 462.924 1506.16 512.867 1506.09 c 0,65,66 567.073 1506.02 567.073 1506.02 616 1531 c 0,67,68 632.022 1539.01 632.022 1539.01 754 1572 c 0,69,70 876.019 1605.01 876.019 1605.01 1026.5 1607 c 0,71,72 1102.39 1604.14 l 0,73,74 1212.74 1594.25 1212.74 1594.25 1317.5 1551 c 0,75,76 1458.01 1492.99 1458.01 1492.99 1511 1320 c 0,77,78 1461 1392 1461 1392 1429.5 1422.5 c 0,79,80 1397.99 1453 1397.99 1453 1350 1474 c 0,81,82 1328.96 1482.01 1328.96 1482.01 1257.5 1498.5 c 0,83,84 1185.99 1515 1185.99 1515 1115 1513.5 c 0,85,86 1043.99 1512 1043.99 1512 999 1478 c 0,87,88 973.44 1458.69 973.44 1458.69 973.045 1420.99 c 0,89,90 977.026 1386.64 l 0,91,92 980.5 1370.93 980.5 1370.93 987 1353 c 0,93,94 1002 1309.01 1002 1309.01 1053 1329 c 0,95,96 1104 1348.99 1104 1348.99 1119 1395 c 0,97,98 1116 1316 1116 1316 1076 1295 c 0,99,100 1046.63 1279.59 1046.63 1279.59 1009.73 1279.53 c 0,101,102 996.362 1279.51 996.362 1279.51 982 1281.5 c 0,103,104 928.02 1289 928.02 1289 872.5 1310.5 c 0,105,106 816.976 1332 816.976 1332 783 1338 c 0,107,108 724.708 1347.93 724.708 1347.93 671.147 1347.88 c 0,109,110 514.287 1347.73 514.287 1347.73 398 1262 c 0,111,112 281.569 1176.17 281.569 1176.17 281.56 1027.39 c 0,113,114 281.557 976.831 281.557 976.831 295 919 c 0,115,116 312.784 837.568 312.784 837.568 406.788 837.613 c 0,117,118 413.215 837.616 413.215 837.616 420 838 c 0,119,120 526 844 526 844 481 923 c 0,121,122 453 971 453 971 418 937 c 0,123,124 383 903 383 903 391 882 c 0,125,126 387.648 921.385 l 0,127,128 389.057 996.13 389.057 996.13 462.658 996.742 c 0,129,130 470.653 996.808 470.653 996.808 479.5 996 c 0,131,132 589.005 985.999 589.005 985.999 678 958 c 0,133,134 716 946 716 946 799.5 969 c 0,135,136 845.412 981.646 845.412 981.646 887.847 981.595 c 0,137,138 922.589 981.553 922.589 981.553 955 973 c 0,139,140 1018.01 954.998 1018.01 954.998 1056 886 c 0,141,142 1093.99 817 1093.99 817 1026 698 c 0,143,144 1060.99 815 1060.99 815 1008 860.5 c 0,145,146 958.847 902.697 958.847 902.697 894.212 902.75 c 0,147,148 889.153 902.754 889.153 902.754 884 902.5 c 0,149,150 813 899 813 899 758.5 858.5 c 0,151,152 704 818 704 818 737 763 c 0,153,154 743 753 743 753 781.5 754.5 c 0,155,156 820 756 820 756 808 801 c 0,157,158 856 777 856 777 837.5 748 c 0,159,160 819 719 819 719 798 709 c 0,161,162 733.814 680.116 733.814 680.116 661.903 680.2 c 0,163,164 644.186 680.221 644.186 680.221 626 682 c 0,165,166 534 691 534 691 453 701.5 c 0,167,168 372 712 372 712 313.5 701.5 c 0,169,170 255 691 255 691 245 615 c 0,171,172 236.91 558.37 236.91 558.37 236.919 518.43 c 0,173,174 236.932 459.629 236.932 459.629 254.5 437 c 0,175,176 284 399 284 399 314 408 c 0,177,178 344 417 344 417 349 445.5 c 0,179,180 347.674 456.176 l 0,181,182 340.847 469.073 340.847 469.073 305.92 469.043 c 0,183,184 296.076 469.035 296.076 469.035 284 468 c 0,185,186 294.001 486 294.001 486 322 487.5 c 0,187,188 350 489 350 489 361 486 c 0,189,190 428 463 428 463 423.5 394.5 c 0,191,192 419 326.002 419 326.002 411.5 262 c 0,193,194 404 197.999 404 197.999 428 163 c 0,195,196 452 128.001 452 128.001 577 172 c 0,197,198 622.009 187.003 622.009 187.003 761.5 242 c 0,199,200 901 297 901 297 925 216 c 0,201,202 903.999 228.001 903.999 228.001 882 228.5 c 0,203,204 866.839 226.005 l 0,205,206 859.566 222.478 859.566 222.478 859 214 c 0,207,208 860.873 195.111 l 0,209,210 873.894 153.483 873.894 153.483 969.23 153.319 c 0,211,212 975.913 153.308 975.913 153.308 983 153.5 c 0,213,214 1111.99 156.999 1111.99 156.999 1122 226 c 0,215,216 1121.24 242.091 l 0,217,218 1117.86 253.528 1117.86 253.528 1104.73 253.833 c 0,219,220 1091.5 252 l 0,221,222 1056.99 242.999 1056.99 242.999 1043 213 c 0,223,224 1059.01 279 1059.01 279 1095.5 286.5 c 0,225,226 1131.99 294 1131.99 294 1173.5 277.5 c 0,227,228 1214.99 261.005 1214.99 261.005 1255.5 236 c 0,229,230 1296 210.999 1296 210.999 1320 212 c 0,231,232 1442.73 214.707 1442.73 214.707 1443.3 346.089 c 0,233,234 1443.37 360.293 1443.37 360.293 1442 376 c 0,235,236 1499 268 1499 268 1409 178 c 0,237,238 1319 88 1319 88 1184 43 c 0,239,240 1148.59 31.1974 1148.59 31.1974 1148.41 11.023 c 0,241,242 1148.31 0.467999 1148.31 0.467999 1157.85 -12.3787 c 0,243,244 1162.52 -18.6647 1162.52 -18.6647 1169.5 -25.5 c 0,245,246 1187.51 -43.1428 1187.51 -43.1428 1204.22 -43.058 c 0,247,248 1232.49 -42.9144 1232.49 -42.9144 1257 8 c 0,249,250 1255.01 -59.9961 1255.01 -59.9961 1220 -73.5 c 0,251,252 1185.01 -87 1185.01 -87 1139 -76.5 c 0,253,254 1092.99 -66 1092.99 -66 1049 -46.5 c 0,255,256 1009.26 -28.8871 1009.26 -28.8871 987 -29 c 0,257,258 934 -34 934 -34 850.5 -63.5 c 0,259,260 767 -93.0001 767 -93.0001 776 -225 c 0,261,262 778.351 -264.189 778.351 -264.189 799.132 -264.677 c 0,263,264 812 -262 l 0,265,266 845 -248.999 845 -248.999 863 -195 c 0,267,268 858 -305.999 858 -305.999 803.5 -320.5 c 0,269,270 749 -335 749 -335 686.5 -332.5 c 0,271,272 636.585 -334.226 l 0,273,274 602.996 -338.11 602.996 -338.11 573.5 -349.5 c 0,275,276 523 -369 523 -369 526 -491 c 0,277,278 470 -398 470 -398 500 -334 c 132,-1,0 EndSplineSet EndChar StartChar: eogonek Encoding: 281 281 84 Width: 1305 Flags: HMW HStem: 148 160.5<389.5 1019.5> 766 133.5<291.5 670> 1320.5 185<192 865> VStem: 96 182<145 1051.5> 523 185.5<-102 129.5> Fore 451 -113 m 132,-1,0 476 -58.5001 476 -58.5001 512.5 -17 c 0,1,2 549 24.5 549 24.5 566.5 58 c 0,3,4 570.294 65.2622 570.294 65.2622 570.398 72.736 c 0,5,6 566.895 87.9464 l 0,7,8 557.508 108.003 557.508 108.003 523 129.5 c 0,9,10 497.999 144.501 497.999 144.501 424.5 149.5 c 0,11,12 351 154.499 351 154.499 278 145 c 0,13,14 205.003 135.501 205.003 135.501 157.5 109.5 c 0,15,16 109.999 83.5001 109.999 83.5001 138 35.5 c 0,17,18 156 5.50008 156 5.50008 221 -4.5 c 0,19,20 135.001 -23.5 135.001 -23.5 104 31.5 c 0,21,22 72.9999 86.5001 72.9999 86.5001 70.5 167.5 c 0,23,24 67.9999 248.5 67.9999 248.5 81 331.5 c 0,25,26 94.0001 414.5 94.0001 414.5 96 450.5 c 0,27,28 102 589.5 102 589.5 84 721.5 c 0,29,30 66 853.5 66 853.5 36 985.5 c 0,31,32 28.6337 1016.81 28.6337 1016.81 28.6154 1047.74 c 0,33,34 28.604 1067.2 28.604 1067.2 31.5 1086.5 c 0,35,36 39.0008 1136.5 39.0008 1136.5 96 1154.5 c 0,37,38 63 1136.5 63 1136.5 57.5 1079.5 c 0,39,40 58.1818 1054.81 l 0,41,42 61.2307 1042.02 61.2307 1042.02 71.4697 1041.73 c 0,43,44 86.6965 1046.05 l 0,45,46 91.0331 1048.23 91.0331 1048.23 96 1051.5 c 0,47,48 152.998 1090.5 152.998 1090.5 187 1221.5 c 0,49,50 200.06 1271.82 200.06 1271.82 200.136 1305.76 c 0,51,52 200.234 1349.58 200.234 1349.58 178.69 1366.1 c 0,53,54 173.478 1370.1 173.478 1370.1 167 1372.5 c 0,55,56 141.459 1381.35 141.459 1381.35 122.587 1381.45 c 0,57,58 103.52 1381.55 103.52 1381.55 91.2603 1372.71 c 0,59,60 80.0198 1364.61 80.0198 1364.61 74.5 1349 c 0,61,62 64.4434 1320.55 64.4434 1320.55 64.459 1288.31 c 0,63,64 64.4706 1264.45 64.4706 1264.45 70 1238.5 c 0,65,66 35.4682 1286.73 35.4682 1286.73 35.4975 1338.85 c 0,67,68 35.5174 1374.28 35.5174 1374.28 51.5 1411.5 c 0,69,70 91.0043 1503.51 91.0043 1503.51 192 1505.5 c 0,71,72 276 1505.5 276 1505.5 372.5 1468 c 0,73,74 418.698 1450.05 418.698 1450.05 461.118 1450.09 c 0,75,76 507.299 1450.13 507.299 1450.13 549 1471.5 c 0,77,78 561.963 1478.48 561.963 1478.48 666 1506.5 c 0,79,80 769.98 1534.5 769.98 1534.5 898 1536 c 0,81,82 968.2 1532.96 l 0,83,84 1059.08 1523.94 1059.08 1523.94 1145.5 1488.5 c 0,85,86 1265 1439.5 1265 1439.5 1310 1291.5 c 0,87,88 1267.99 1352.52 1267.99 1352.52 1241.5 1378.5 c 0,89,90 1214.98 1404.51 1214.98 1404.51 1173 1422.5 c 0,91,92 1155.08 1429.48 1155.08 1429.48 1094.5 1444 c 0,93,94 1039.52 1457.18 1039.52 1457.18 984.499 1457.14 c 0,95,96 979.002 1457.14 979.002 1457.14 973.5 1457 c 0,97,98 912.999 1455.5 912.999 1455.5 875 1427 c 0,99,100 853.056 1410.54 853.056 1410.54 853.121 1377.58 c 0,101,102 853.169 1353.46 853.169 1353.46 865 1320.5 c 0,103,104 873.107 1295.5 873.107 1295.5 895.597 1295.15 c 0,105,106 917.149 1299.25 l 0,107,108 918.801 1299.84 918.801 1299.84 920.5 1300.5 c 0,109,110 963.998 1317.49 963.998 1317.49 976 1356.5 c 0,111,112 972.121 1252.54 972.121 1252.54 904.433 1251.81 c 0,113,114 874.102 1255.82 l 0,115,116 867.279 1257.54 867.279 1257.54 860 1260 c 0,117,118 749.03 1297.49 749.03 1297.49 691 1307.5 c 0,119,120 496 1340.5 496 1340.5 363.5 1243 c 0,121,122 231 1145.5 231 1145.5 276 950.5 c 0,123,124 290.949 882.298 290.949 882.298 370.925 882.18 c 0,125,126 376.552 882.171 376.552 882.171 382.5 882.5 c 0,127,128 445.726 885.993 445.726 885.993 445.745 920.236 c 0,129,130 445.753 935.007 445.753 935.007 434 955.5 c 0,131,132 410 994.5 410 994.5 380.5 966.5 c 0,133,134 351 938.5 351 938.5 358 920.5 c 0,135,136 355.178 956.588 l 0,137,138 357.557 1016.96 357.557 1016.96 418.311 1017.63 c 0,139,140 425.273 1017.71 425.273 1017.71 433 1017 c 0,141,142 526.022 1008.49 526.022 1008.49 602 984.5 c 0,143,144 613.184 981.005 613.184 981.005 629.133 981.052 c 0,145,146 658.816 981.14 658.816 981.14 705 993.5 c 0,147,148 776 1012.51 776 1012.51 837 996.5 c 0,149,150 891 981.5 891 981.5 923 923 c 0,151,152 955 864.5 955 864.5 898 763.5 c 0,153,154 909.411 802.85 909.411 802.85 909.365 832.678 c 0,155,156 909.292 878.65 909.292 878.65 882 902 c 0,157,158 837 940.5 837 940.5 776.5 937.5 c 0,159,160 716 934.5 716 934.5 670 899.5 c 0,161,162 624 864.5 624 864.5 652 818.5 c 0,163,164 657 809.5 657 809.5 689.5 810.5 c 0,165,166 722 811.5 722 811.5 712 850.5 c 0,167,168 741.022 836.343 741.022 836.343 741.734 819.93 c 0,169,170 738.701 808.047 l 0,171,172 738.15 807.027 738.15 807.027 737.5 806 c 0,173,174 722 781.499 722 781.499 704 773.5 c 0,175,176 649.462 748.636 649.462 748.636 588.167 748.539 c 0,177,178 573.039 748.515 573.039 748.515 557.5 750 c 0,179,180 479 757.5 479 757.5 410 766.5 c 0,181,182 341 775.5 341 775.5 291.5 766 c 0,183,184 242 756.5 242 756.5 233 692.5 c 0,185,186 226.133 644.427 226.133 644.427 226.201 610.552 c 0,187,188 226.301 560.572 226.301 560.572 241.5 541.5 c 0,189,190 267 509.5 267 509.5 292.5 517 c 0,191,192 318 524.5 318 524.5 322 548.5 c 0,193,194 320.371 558.225 l 0,195,196 313.925 568.374 313.925 568.374 285.403 568.362 c 0,197,198 277.13 568.358 277.13 568.358 267 567.5 c 0,199,200 276 582.5 276 582.5 299.5 584.5 c 0,201,202 323 586.5 323 586.5 332 583.5 c 0,203,204 389 563.5 389 563.5 385.5 505.5 c 0,205,206 382.001 447.516 382.001 447.516 375.5 393 c 0,207,208 374.494 354.701 l 0,209,210 376.885 326.961 376.885 326.961 389.5 308.5 c 0,211,212 398.494 295.338 398.494 295.338 423.946 295.265 c 0,213,214 456.506 295.172 456.506 295.172 516 316.5 c 0,215,216 555 329.5 555 329.5 673.5 376 c 0,217,218 792 422.5 792 422.5 812 353.5 c 0,219,220 794.002 363.499 794.002 363.499 775 364.5 c 0,221,222 762.368 362.683 l 0,223,224 756 359.605 756 359.605 756 351.5 c 0,225,226 752 297.5 752 297.5 861 300.5 c 0,227,228 970 303.5 970 303.5 979 361.5 c 0,229,230 983 391.5 983 391.5 953.5 384.5 c 0,231,232 924 377.5 924 377.5 912 351.5 c 0,233,234 940 462.5 940 462.5 1023 406 c 0,235,236 1104.66 350.411 1104.66 350.411 1147 350.5 c 0,237,238 1251.4 352.3 1251.4 352.3 1252.12 464.26 c 0,239,240 1252.2 476.7 1252.2 476.7 1251 490.5 c 0,241,242 1269.94 454.563 1269.94 454.563 1270.06 421.088 c 0,243,244 1270.15 393.428 1270.15 393.428 1257.4 367.45 c 0,245,246 1245.66 343.511 1245.66 343.511 1223 321 c 0,247,248 1146.01 244.502 1146.01 244.502 1032 206.5 c 0,249,250 978 188.5 978 188.5 1019.5 148 c 0,251,252 1034.82 133.05 1034.82 133.05 1048.98 133.021 c 0,253,254 1073.18 132.97 1073.18 132.97 1094 176.5 c 0,255,256 1092.56 92.98 1092.56 92.98 1041.35 92.1448 c 0,257,258 1015.84 95.942 l 0,259,260 1005.59 98.8556 1005.59 98.8556 994 104 c 0,261,262 896 147.5 896 147.5 865 144.5 c 0,263,264 820 139.501 820 139.501 749 114.5 c 0,265,266 684.311 91.7219 684.311 91.7219 684.372 -1.61601 c 0,267,268 684.378 -10.7222 684.378 -10.7222 685 -20.5 c 0,269,270 688 -62.5 688 -62.5 716 -52 c 0,271,272 744 -41.5 744 -41.5 759 4.5 c 0,273,274 755 -89.5 755 -89.5 708.5 -102 c 0,275,276 662 -114.499 662 -114.499 609 -112.5 c 0,277,278 556 -110.501 556 -110.501 513 -127 c 0,279,280 472.855 -142.404 472.855 -142.404 472.804 -234.077 c 0,281,282 472.801 -240.595 472.801 -240.595 473 -247.5 c 0,283,284 442.424 -195.455 442.424 -195.455 442.32 -154.203 c 0,285,286 442.264 -132.044 442.264 -132.044 451 -113 c 132,-1,0 EndSplineSet EndChar StartChar: Lslash Encoding: 321 321 85 Width: 1737 Flags: HMW HStem: 8 320<774 1387> VStem: 583 159<31.5 1459> Fore 687 1538 m 1,0,1 655 1514 655 1514 655.5 1490 c 0,2,3 656 1465.99 656 1465.99 694 1464 c 0,4,5 708.349 1466.74 l 0,6,7 744.986 1483.48 744.986 1483.48 776 1600 c 0,8,9 786.895 1640.93 786.895 1640.93 786.865 1673.36 c 0,10,11 786.795 1751.08 786.795 1751.08 724 1780 c 0,12,13 790 1796.01 790 1796.01 821 1709.5 c 0,14,15 841.964 1651 841.964 1651 841.891 1584.05 c 0,16,17 841.856 1551.99 841.856 1551.99 837 1518 c 0,18,19 828.998 1467.99 828.998 1467.99 808.5 1382.5 c 0,20,21 788 1297 788 1297 775 1212 c 0,22,23 762 1126.99 762 1126.99 768 1062 c 0,24,25 774 996.999 774 996.999 820 989 c 0,26,27 877 977 877 977 952 1030 c 0,28,29 1000.71 1064.42 1000.71 1064.42 1001.33 1095.05 c 0,30,31 997.749 1112.28 l 0,32,33 994.418 1119.76 994.418 1119.76 988 1127 c 0,34,35 949 1170.01 949 1170.01 921.5 1131.5 c 0,36,37 893.998 1092.99 893.998 1092.99 880 1058 c 0,38,39 883 1167.99 883 1167.99 947.5 1188.5 c 0,40,41 1011.96 1208.99 1011.96 1208.99 1098.5 1213 c 0,42,43 1185.01 1217.01 1185.01 1217.01 1273 1242.5 c 0,44,45 1361 1268 1361 1268 1412 1389 c 0,46,47 1401.99 1282.99 1401.99 1282.99 1351 1231.5 c 0,48,49 1300.01 1180.01 1300.01 1180.01 1239.5 1144.5 c 0,50,51 1178.91 1108.94 1178.91 1108.94 1124.5 1070 c 0,52,53 1070.01 1031 1070.01 1031 1054 951 c 0,54,55 1048 927 1048 927 1070.5 924.5 c 0,56,57 1095.88 925.692 l 0,58,59 1107.45 927.889 1107.45 927.889 1120 933 c 0,60,61 1158 947.001 1158 947.001 1158 999 c 0,62,63 1201.99 920 1201.99 920 1156.5 883.5 c 0,64,65 1111.01 847.004 1111.01 847.004 1037 831 c 0,66,67 963 815 963 815 889.5 808.5 c 0,68,69 816 802 816 802 804 783 c 0,70,71 744 693 744 693 729 563 c 0,72,73 714 433 714 433 774 328 c 0,74,75 837 215.001 837 215.001 958 230.5 c 0,76,77 1078.99 245.997 1078.99 245.997 1204.5 286 c 0,78,79 1330.01 326.002 1330.01 326.002 1433 337 c 0,80,81 1465.48 336.915 l 0,82,83 1540.7 327.344 1540.7 327.344 1564 225 c 0,84,85 1540 267.001 1540 267.001 1489.5 277 c 0,86,87 1438.99 287 1438.99 287 1419 266 c 0,88,89 1353 195.001 1353 195.001 1416 150.5 c 0,90,91 1464.57 116.195 1464.57 116.195 1534.23 116.061 c 0,92,93 1554.93 116.022 1554.93 116.022 1577.5 119 c 0,94,95 1676 132 1676 132 1764.5 216 c 0,96,97 1853 300 1853 300 1838 486 c 0,98,99 1857.76 416.141 1857.76 416.141 1857.67 356.651 c 0,100,101 1857.47 208.36 1857.47 208.36 1734 124.5 c 0,102,103 1562.5 8.01583 1562.5 8.01583 1387 8 c 0,104,105 1300.01 8 1300.01 8 1176 51.5 c 0,106,107 1051.99 95 1051.99 95 1035 3 c 0,108,109 1033.55 -20.8143 l 0,110,111 1037.84 -57.1116 1037.84 -57.1116 1089.5 -57.5 c 0,112,113 1155.99 -58 1155.99 -58 1196 -13 c 0,114,115 1155.11 -117.502 1155.11 -117.502 1089.03 -117.958 c 0,116,117 1082.39 -118.004 1082.39 -118.004 1075.5 -117 c 0,118,119 1000 -106 1000 -106 914.5 -57.5 c 0,120,121 829 -9.00005 829 -9.00005 742 31.5 c 0,122,123 655 72 655 72 587 17 c 0,124,125 496 -56.0001 496 -56.0001 575 -133 c 0,126,127 650.982 -207.057 650.982 -207.057 726.037 -207.112 c 0,128,129 729.019 -207.115 729.019 -207.115 732 -207 c 0,130,131 685.805 -218.957 685.805 -218.957 649.06 -218.951 c 0,132,133 618.756 -218.946 618.756 -218.946 594 -210.5 c 0,134,135 541 -192 541 -192 496 -135 c 0,136,137 445 -70.0001 445 -70.0001 467 29 c 0,138,139 489.002 128.007 489.002 128.007 524.5 231 c 0,140,141 560 334 560 334 578.5 424.5 c 0,142,143 583.04 446.711 583.04 446.711 582.973 466.241 c 0,144,145 582.766 526.289 582.766 526.289 539 561 c 0,146,147 488 600 488 600 440 572.5 c 0,148,149 392 545 392 545 343 505 c 0,150,151 293.999 464.999 293.999 464.999 242 439.5 c 0,152,153 222.917 430.142 222.917 430.142 203.161 430.009 c 0,154,155 188.511 429.911 188.511 429.911 173.491 434.885 c 0,156,157 153.571 441.481 153.571 441.481 133 457 c 0,158,159 239.999 453 239.999 453 251.5 513 c 0,160,161 254.696 548.121 l 0,162,163 253.566 580.482 253.566 580.482 234 596 c 0,164,165 171 642 171 642 127.5 606 c 0,166,167 84 570 84 570 66.5 503.5 c 0,168,169 49 437 49 437 61 365.5 c 0,170,171 72.9998 294.001 72.9998 294.001 121 269 c 0,172,173 13 315 13 315 16.5 463.5 c 0,174,175 20 612 20 612 57 656 c 0,176,177 163.999 785 163.999 785 306 763 c 0,178,179 337.145 758.175 337.145 758.175 367.568 758.208 c 0,180,181 475.854 758.327 475.854 758.327 575 820 c 0,182,183 593 830 593 830 581.5 953.5 c 0,184,185 570.001 1076.98 570.001 1076.98 566 1215.5 c 0,186,187 566.756 1320.01 l 0,188,189 570.322 1395.61 570.322 1395.61 583 1459 c 0,190,191 599.759 1542.8 599.759 1542.8 656.009 1543.16 c 0,192,193 670.24 1543.25 670.24 1543.25 687 1538 c 1,0,1 EndSplineSet KernsSLIF: 89 -156 0 0 121 -78 0 0 84 -208 0 0 87 -321 0 0 EndChar StartChar: lslash Encoding: 322 322 86 Width: 1480 Flags: HMW HStem: 128 272<667 1188> VStem: 505 135<147.5 1361> Fore 593 1428 m 1,0,1 567.318 1408.02 567.318 1408.02 566.5 1387 c 0,2,3 567 1366.99 567 1366.99 599 1365 c 0,4,5 637 1362 637 1362 668.5 1480.5 c 0,6,7 677.632 1514.85 677.632 1514.85 677.729 1542.19 c 0,8,9 677.827 1569.77 677.827 1569.77 668.732 1590.2 c 0,10,11 655.742 1619.38 655.742 1619.38 624 1634 c 0,12,13 647.265 1635.96 l 0,14,15 686.64 1632.06 686.64 1632.06 707 1574.5 c 0,16,17 724.413 1525.27 724.413 1525.27 724.333 1468.65 c 0,18,19 724.294 1440.72 724.294 1440.72 720 1411 c 0,20,21 714.001 1369.01 714.001 1369.01 696.5 1296 c 0,22,23 678.997 1222.99 678.997 1222.99 668 1151 c 0,24,25 660.378 1101.11 660.378 1101.11 660.438 1059.38 c 0,26,27 660.465 1040.89 660.465 1040.89 662 1024 c 0,28,29 666.999 969.001 666.999 969.001 706 962 c 0,30,31 755 952 755 952 818.5 997 c 0,32,33 860.317 1026.63 860.317 1026.63 860.285 1052.8 c 0,34,35 860.268 1066.36 860.268 1066.36 849 1079 c 0,36,37 831.104 1097.95 831.104 1097.95 816.257 1097.92 c 0,38,39 802.894 1097.9 802.894 1097.9 792 1082.5 c 0,40,41 768.995 1049.99 768.995 1049.99 758 1020 c 0,42,43 760 1114.01 760 1114.01 815 1131 c 0,44,45 870.001 1147.99 870.001 1147.99 943 1152 c 0,46,47 1016 1156.01 1016 1156.01 1091 1177.5 c 0,48,49 1165.99 1198.99 1165.99 1198.99 1209 1302 c 0,50,51 1200 1211.99 1200 1211.99 1157 1168 c 0,52,53 1113.98 1123.99 1113.98 1123.99 1062.5 1094 c 0,54,55 1011.02 1064.01 1011.02 1064.01 964.5 1030.5 c 0,56,57 918.002 997.006 918.002 997.006 905 929 c 0,58,59 904.926 915.649 l 0,60,61 907.773 908.182 907.773 908.182 919 907 c 0,62,63 938 905 938 905 961 914 c 0,64,65 993 926 993 926 993 970 c 0,66,67 1011.22 936.52 1011.22 936.52 1011.25 912.127 c 0,68,69 1011.29 886.983 1011.29 886.983 992 871.5 c 0,70,71 954 841 954 841 891 827.5 c 0,72,73 828 814 828 814 765 808.5 c 0,74,75 702 803 702 803 692 787 c 0,76,77 641 709 641 709 628.5 599 c 0,78,79 626.227 545.05 l 0,80,81 628.814 466.638 628.814 466.638 667 400 c 0,82,83 721 304 721 304 824 317.5 c 0,84,85 927 331 927 331 1033.5 364.5 c 0,86,87 1140 398.001 1140 398.001 1227 407.5 c 0,88,89 1314 417 1314 417 1338 313 c 0,90,91 1317 348 1317 348 1275 356.5 c 0,92,93 1246.05 359.1 l 0,94,95 1226.37 357.983 1226.37 357.983 1216 347 c 0,96,97 1160.01 286 1160.01 286 1213 248.5 c 0,98,99 1254.39 219.212 1254.39 219.212 1314.7 219.203 c 0,100,101 1331.61 219.201 1331.61 219.201 1350 221.5 c 0,102,103 1433.99 231.999 1433.99 231.999 1508.5 303.5 c 0,104,105 1572.66 365.071 1572.66 365.071 1572.66 491.539 c 0,106,107 1572.67 511.925 1572.67 511.925 1571 534 c 0,108,109 1629.01 327 1629.01 327 1482.5 227 c 0,110,111 1337.49 128.018 1337.49 128.018 1188 128 c 0,112,113 1115 128 1115 128 1009.5 164.5 c 0,114,115 975.793 176.162 975.793 176.162 951.324 176.135 c 0,116,117 899.207 176.079 899.207 176.079 889 123 c 0,118,119 879 70.9999 879 70.9999 935.5 70.5 c 0,120,121 992 70.0001 992 70.0001 1025 109 c 0,122,123 987 11 987 11 923 20.5 c 0,124,125 859 30 859 30 786.5 71.5 c 0,126,127 714.005 112.997 714.005 112.997 640 147.5 c 0,128,129 608.606 162.136 608.606 162.136 580.092 162.104 c 0,130,131 541.931 162.061 541.931 162.061 508 135 c 0,132,133 430 72 430 72 497.5 7.5 c 0,134,135 565 -57 565 -57 632 -55 c 0,136,137 559 -74.0001 559 -74.0001 514 -58 c 0,138,139 469 -42 469 -42 431 5 c 0,140,141 400.295 42.6839 400.295 42.6839 400.27 95.4635 c 0,142,143 400.259 118.317 400.259 118.317 406 144 c 0,144,145 425.001 229.002 425.001 229.002 455 317 c 0,146,147 485 405 485 405 501 482 c 0,148,149 504.875 518.125 l 0,150,151 504.5 568.75 504.5 568.75 467 598 c 0,152,153 424 631 424 631 383 607.5 c 0,154,155 341.997 583.997 341.997 583.997 300.5 550 c 0,156,157 259.003 516.002 259.003 516.002 215 494 c 0,158,159 171.001 472 171.001 472 122 509 c 0,160,161 213.001 506 213.001 506 222.5 557 c 0,162,163 225.013 589.347 l 0,164,165 223.428 614.785 223.428 614.785 208 627 c 0,166,167 177.736 648.857 177.736 648.857 152.812 648.885 c 0,168,169 133.264 648.906 133.264 648.906 117 635.5 c 0,170,171 79.9999 605 79.9999 605 65 548.5 c 0,172,173 50 492 50 492 60.5 431.5 c 0,174,175 71 371 71 371 112 350 c 0,176,177 20 389 20 389 23 515 c 0,178,179 26 641 26 641 57 679 c 0,180,181 134.265 772.396 134.265 772.396 233.155 772.797 c 0,182,183 250.736 772.868 250.736 772.868 269 770 c 0,184,185 390 751 390 751 498 818 c 0,186,187 513 827 513 827 503.5 931.5 c 0,188,189 493.999 1036.03 493.999 1036.03 490.5 1154 c 0,190,191 487 1272.01 487 1272.01 505 1361 c 0,192,193 519.319 1431.8 519.319 1431.8 566.539 1432.36 c 0,194,195 591.921 1428.33 l 0,196,197 593 1428 l 1,0,1 EndSplineSet KernsSLIF: 121 -104 0 0 116 -208 0 0 119 -385 0 0 EndChar StartChar: Nacute Encoding: 323 323 87 Width: 1285 Flags: MW VStem: 131 270.5<220 1558.5> 626 189<1760.5 1967> 822.5 107<83 1472> Fore 324 1593 m 0,0,1 346.986 1609 346.986 1609 395 1624 c 0,2,3 417.177 1627.12 l 0,4,5 451.57 1625.67 451.57 1625.67 479 1583 c 0,6,7 455.226 1594.71 455.226 1594.71 438.565 1595.02 c 0,8,9 422.575 1592.01 l 0,10,11 406.252 1584.52 406.252 1584.52 401.5 1558.5 c 0,12,13 397.146 1534.66 397.146 1534.66 397.177 1505.92 c 0,14,15 397.22 1465.34 397.22 1465.34 406 1415 c 0,16,17 421.004 1328.98 421.004 1328.98 446.5 1246 c 0,18,19 471.753 1163.81 471.753 1163.81 480 1146 c 0,20,21 493 1111.01 493 1111.01 527.5 1101 c 0,22,23 547.556 1098.57 l 0,24,25 567.655 1100.11 567.655 1100.11 580 1120 c 0,26,27 604 1160.01 604 1160.01 572.5 1183 c 0,28,29 547.425 1201.3 547.425 1201.3 515.706 1201.24 c 0,30,31 507.571 1201.22 507.571 1201.22 499 1200 c 0,32,33 536.359 1222.03 536.359 1222.03 565.234 1222.04 c 0,34,35 596.638 1222.05 596.638 1222.05 618 1196 c 0,36,37 658.999 1146.01 658.999 1146.01 679 1080 c 0,38,39 688 1047 688 1047 704 978 c 0,40,41 720 909 720 909 741.5 846.5 c 0,42,43 763 784 763 784 790 750.5 c 0,44,45 817 717 817 717 849 755 c 0,46,47 888.427 802.159 888.427 802.159 888.409 889.659 c 0,48,49 888.404 915.342 888.404 915.342 885 944.5 c 0,50,51 870.005 1072.96 870.005 1072.96 847 1212 c 0,52,53 824 1351.01 824 1351.01 822.5 1472 c 0,54,55 821 1593.01 821 1593.01 899 1640 c 0,56,57 893.009 1624.02 893.009 1624.02 861.5 1558 c 0,58,59 852.5 1539.14 852.5 1539.14 852.357 1523.63 c 0,60,61 852.259 1512.93 852.259 1512.93 856.378 1503.82 c 0,62,63 867.182 1479.93 867.182 1479.93 907 1467 c 0,64,65 923.542 1461.31 923.542 1461.31 938.201 1461.19 c 0,66,67 960.888 1464.7 l 0,68,69 1010.83 1481.53 1010.83 1481.53 1033.5 1579 c 0,70,71 1045.45 1630.38 1045.45 1630.38 1045.5 1672.21 c 0,72,73 1045.59 1747.62 1045.59 1747.62 1007 1792 c 0,74,75 1087.86 1740.37 1087.86 1740.37 1088.52 1642.23 c 0,76,77 1088.54 1639.63 1088.54 1639.63 1088.5 1637 c 0,78,79 1087 1535.03 1087 1535.03 1067 1436.5 c 0,80,81 1046.99 1337.91 1046.99 1337.91 1042 1269.5 c 0,82,83 1043.5 1244.33 l 0,84,85 1050.72 1214.15 1050.72 1214.15 1086.69 1213.97 c 0,86,87 1098.34 1213.91 1098.34 1213.91 1113 1217 c 0,88,89 1169.68 1227.56 1169.68 1227.56 1169.6 1287.95 c 0,90,91 1169.6 1290.43 1169.6 1290.43 1169.5 1293 c 0,92,93 1166.99 1358 1166.99 1358 1116 1404 c 0,94,95 1221 1357.99 1221 1357.99 1222.5 1273.5 c 0,96,97 1219.36 1222.38 l 0,98,99 1210.9 1161.16 1210.9 1161.16 1180 1095.5 c 0,100,101 1136 1001.99 1136 1001.99 1076.5 914 c 0,102,103 1017 826.012 1017 826.012 1002 774 c 0,104,105 982.94 710.755 982.94 710.755 983.02 577.323 c 0,106,107 983.032 556.746 983.032 556.746 983.5 534.5 c 0,108,109 987 368 987 368 981 279 c 0,110,111 973.999 187.997 973.999 187.997 929.5 83 c 0,112,113 885 -22 885 -22 805 -81 c 0,114,115 844 36 844 36 846 218 c 0,116,117 848 400 848 400 728 455 c 0,118,119 712.982 458.284 l 0,120,121 695.093 457.395 695.093 457.395 685 430 c 0,122,123 671 392 671 392 695 371 c 0,124,125 715.996 352.003 715.996 352.003 721.5 348 c 0,126,127 727 344 727 344 753 335 c 0,128,129 678 326 678 326 656.5 358 c 0,130,131 634.999 390.001 634.999 390.001 630 442 c 0,132,133 610.999 635.01 610.999 635.01 588.5 804 c 0,134,135 566 973 566 973 379 1038 c 0,136,137 359.306 1041.07 l 0,138,139 316.358 1039.59 316.358 1039.59 295 959.5 c 0,140,141 269 862 269 862 316 823 c 0,142,143 352 793 352 793 387.5 821.5 c 0,144,145 423 850 423 850 381 902 c 0,146,147 407.792 899.407 l 0,148,149 449.736 888.761 449.736 888.761 449.941 835.163 c 0,150,151 449.973 826.849 449.973 826.849 449 817.5 c 0,152,153 440 731.001 440 731.001 398 617.5 c 0,154,155 356 504 356 504 309 395.5 c 0,156,157 263.887 291.355 263.887 291.355 264 246 c 0,158,159 271.999 70.0008 271.999 70.0008 326.5 23 c 0,160,161 380.996 -23.9972 380.996 -23.9972 485 -93 c 0,162,163 359 -70.9999 359 -70.9999 260.5 12.5 c 0,164,165 162.001 95.9991 162.001 95.9991 131 220 c 0,166,167 95 367 95 367 155.5 536 c 0,168,169 184.99 618.377 184.99 618.377 185.137 667.728 c 0,170,171 185.236 701.109 185.236 701.109 171.911 719.38 c 0,172,173 164.52 729.514 164.52 729.514 153 735 c 0,174,175 130 745.667 130 745.667 114.167 745.833 c 0,176,177 104.718 745.933 104.718 745.933 97.8211 742.293 c 0,178,179 81.6048 733.734 81.6048 733.734 79.5 704.5 c 0,180,181 75 642 75 642 111 630 c 0,182,183 31 635 31 635 21 692 c 0,184,185 10.9999 749 10.9999 749 33.5 820.5 c 0,186,187 56 892 56 892 91 960 c 0,188,189 125.995 1027.99 125.995 1027.99 137 1055 c 0,190,191 169.999 1143.99 169.999 1143.99 217.5 1347.5 c 0,192,193 264.999 1551 264.999 1551 324 1593 c 0,0,1 587 1669 m 1,98,99 630 1708 630 1708 626 1760.5 c 0,100,101 621.997 1813.03 621.997 1813.03 615 1866 c 0,102,103 608 1918.99 608 1918.99 621 1965 c 0,104,105 634 2011.01 634 2011.01 711 2037 c 0,106,107 679.998 2023.99 679.998 2023.99 666.5 1988 c 0,108,109 662.585 1968.38 l 0,110,111 662.9 1947.8 662.9 1947.8 686 1938 c 0,112,113 760 1906.01 760 1906.01 767 2010 c 0,114,115 767.449 2068.65 l 0,116,117 763.629 2125.31 763.629 2125.31 741 2150 c 0,118,119 743.995 2150 743.995 2150 782.5 2104.5 c 0,120,121 815.68 2065.29 815.68 2065.29 815.809 1991.54 c 0,122,123 815.829 1979.71 815.829 1979.71 815 1967 c 0,124,125 798 1712.99 798 1712.99 587 1669 c 1,98,99 EndSplineSet EndChar StartChar: nacute Encoding: 324 324 88 Width: 1095 Flags: MW VStem: 114 229<334 1471> 534.5 160.5<1643 1818> 701.5 91<216 1398> Fore 278 1500 m 0,0,1 297 1513.99 297 1513.99 338 1527 c 0,2,3 358.082 1529.67 l 0,4,5 386.604 1527.83 386.604 1527.83 409 1492 c 0,6,7 352 1520.01 352 1520.01 343 1471 c 0,8,9 339.238 1450.51 339.238 1450.51 339.32 1425.84 c 0,10,11 339.434 1391.49 339.434 1391.49 347 1349 c 0,12,13 360 1276 360 1276 382 1205.5 c 0,14,15 404 1135 404 1135 410 1120 c 0,16,17 422 1091.01 422 1091.01 451 1082.5 c 0,18,19 469.146 1080.48 l 0,20,21 485.113 1082.18 485.113 1082.18 495 1098 c 0,22,23 516 1132.01 516 1132.01 489 1152 c 0,24,25 468.094 1167.48 468.094 1167.48 442.398 1167.38 c 0,26,27 434.903 1167.35 434.903 1167.35 427 1166 c 0,28,29 458.365 1184.53 458.365 1184.53 482.731 1184.66 c 0,30,31 501.908 1184.76 501.908 1184.76 516.747 1173.46 c 0,32,33 522.726 1168.9 522.726 1168.9 528 1162.5 c 0,34,35 562.996 1120.01 562.996 1120.01 580 1064 c 0,36,37 588 1035.99 588 1035.99 601.5 977 c 0,38,39 615 918 615 918 633 865.5 c 0,40,41 651 813 651 813 674 784 c 0,42,43 697 755 697 755 724 788 c 0,44,45 757.888 828.051 757.888 828.051 757.965 901.911 c 0,46,47 757.988 923.95 757.988 923.95 755 949 c 0,48,49 742 1058 742 1058 722.5 1176.5 c 0,50,51 703 1295 703 1295 701.5 1398 c 0,52,53 704.502 1442.42 l 0,54,55 715.57 1510.06 715.57 1510.06 767 1540 c 0,56,57 760.949 1525.89 760.949 1525.89 734.5 1470 c 0,58,59 726.928 1454 726.928 1454 726.826 1440.86 c 0,60,61 726.731 1428.6 726.731 1428.6 733.137 1418.82 c 0,62,63 743.897 1402.4 743.897 1402.4 773 1393 c 0,64,65 787.331 1388.1 787.331 1388.1 799.999 1388.12 c 0,66,67 857.17 1388.22 857.17 1388.22 880.5 1488.5 c 0,68,69 909 1611.01 909 1611.01 858 1670 c 0,70,71 926.936 1625.68 926.936 1625.68 927 1538.5 c 0,72,73 926 1452 926 1452 909.5 1368 c 0,74,75 893 1284 893 1284 888.5 1225.5 c 0,76,77 889.952 1203 l 0,78,79 896.331 1178.48 896.331 1178.48 926.052 1178.3 c 0,80,81 936.173 1178.24 936.173 1178.24 949 1181 c 0,82,83 998 1190 998 1190 995.5 1245.5 c 0,84,85 993 1301 993 1301 951 1340 c 0,86,87 1040.99 1301 1040.99 1301 1042 1229 c 0,88,89 1038.7 1182.13 l 0,90,91 1031 1131.55 1031 1131.55 1005.5 1077.5 c 0,92,93 968 998 968 998 917.5 923 c 0,94,95 867.001 848.003 867.001 848.003 854 804 c 0,96,97 838.122 749.311 838.122 749.311 838.195 632.77 c 0,98,99 838.205 617.187 838.205 617.187 838.5 600.5 c 0,100,101 838.195 430.678 l 0,102,103 837.386 404.787 837.386 404.787 836 384 c 0,104,105 830 306 830 306 792.5 216 c 0,106,107 755 126 755 126 687 77 c 0,108,109 720 177 720 177 721.5 331.5 c 0,110,111 723 486 723 486 621 534 c 0,112,113 607.018 536.132 l 0,114,115 593.061 533.918 593.061 533.918 584.5 512 c 0,116,117 572 480 572 480 593 462 c 0,118,119 616 440 616 440 643 431 c 0,120,121 579 424 579 424 560.5 450.5 c 0,122,123 542 477 542 477 538 522 c 0,124,125 521.997 687.025 521.997 687.025 503 830.5 c 0,126,127 484 974 484 974 325 1029 c 0,128,129 306.614 1031.48 l 0,130,131 270.724 1028.86 270.724 1028.86 253 962 c 0,132,133 230.999 879 230.999 879 271 846 c 0,134,135 302 820 302 820 332 844 c 0,136,137 362 868 362 868 326 913 c 0,138,139 392 915 392 915 384 841.5 c 0,140,141 376 768 376 768 340.5 671.5 c 0,142,143 304.992 574.979 304.992 574.979 265 483 c 0,144,145 226.89 395.349 226.89 395.349 227 356 c 0,146,147 233 206 233 206 280 165 c 0,148,149 327.001 124 327.001 124 414 67 c 0,150,151 307 85 307 85 223.5 156.5 c 0,152,153 139.999 228.001 139.999 228.001 114 334 c 0,154,155 82.9999 459 82.9999 459 135 602.5 c 0,156,157 160.46 672.76 160.46 672.76 160.509 714.612 c 0,158,159 160.561 758.24 160.561 758.24 133 771 c 0,160,161 73 798 73 798 69.5 745 c 0,162,163 66.0001 692 66.0001 692 97 682 c 0,164,165 29 686 29 686 20.5 734.5 c 0,166,167 17.9648 771.712 l 0,168,169 18.9725 805.202 18.9725 805.202 31 843.5 c 0,170,171 50 904 50 904 80 962 c 0,172,173 110 1020.01 110 1020.01 119 1043 c 0,174,175 146.995 1117.98 146.995 1117.98 187 1291 c 0,176,177 227.002 1464 227.002 1464 278 1500 c 0,0,1 501 1565 m 1,97,98 534.679 1595.04 534.679 1595.04 534.802 1635.02 c 0,99,100 534.814 1638.96 534.814 1638.96 534.5 1643 c 0,101,102 531 1688 531 1688 525.5 1733 c 0,103,104 520 1778 520 1778 530.5 1817 c 0,105,106 541 1856 541 1856 607 1877 c 0,107,108 580.003 1866.01 580.003 1866.01 568.5 1836 c 0,109,110 565.261 1819.15 l 0,111,112 565.976 1802.29 565.976 1802.29 586 1794 c 0,113,114 649 1767 649 1767 654.5 1855.5 c 0,115,116 660 1944 660 1944 633 1974 c 0,117,118 636 1974 636 1974 668 1935 c 0,119,120 700 1896 700 1896 695 1818 c 0,121,122 681.056 1601.86 681.056 1601.86 501 1565 c 1,97,98 EndSplineSet EndChar StartChar: Sacute Encoding: 346 346 89 Width: 1144 Flags: HW Fore 683 -50 m 0,0,1 575 -44 575 -44 470.5 -51 c 0,2,3 366 -58 366 -58 278.5 -43.5 c 0,4,5 191.001 -29 191.001 -29 128.5 23 c 0,6,7 65.9999 75 65.9999 75 43 201 c 0,8,9 70.0002 133 70.0002 133 142 103 c 0,10,11 155.224 97.4898 155.224 97.4898 166.729 97.3099 c 0,12,13 184.056 100.442 l 0,14,15 220.947 115.345 220.947 115.345 235 201 c 0,16,17 236.947 234.883 l 0,18,19 233.812 282.336 233.812 282.336 194 307.5 c 0,20,21 161.449 328.075 161.449 328.075 120.976 328.092 c 0,22,23 95.5509 328.102 95.5509 328.102 67 320 c 0,24,25 131.999 431 131.999 431 228 360 c 0,26,27 324 289 324 289 360 229 c 0,28,29 453 70 453 70 534 100 c 0,30,31 615 130 615 130 656.5 224.5 c 0,32,33 698 319 698 319 685 417 c 0,34,35 674.43 496.682 674.43 496.682 610.31 497.032 c 0,36,37 595.57 497.112 595.57 497.112 578 493 c 0,38,39 551 486 551 486 551.5 462 c 0,40,41 552 438 552 438 573 419 c 0,42,43 600 392 600 392 641 423 c 0,44,45 608.573 339.022 608.573 339.022 568.541 339.041 c 0,46,47 560.427 339.045 560.427 339.045 552 342.5 c 0,48,49 502 363.001 502 363.001 456 430 c 0,50,51 410 497 410 497 375.5 573 c 0,52,53 341 649 341 649 333 658 c 0,54,55 198.002 796.998 198.002 796.998 75.5 956.5 c 0,56,57 9.56444 1042.35 9.56444 1042.35 9.53848 1139.94 c 0,58,59 9.5162 1223.65 9.5162 1223.65 58 1316 c 0,60,61 71.9999 1343 71.9999 1343 107 1359.5 c 0,62,63 116.032 1363.76 116.032 1363.76 124.532 1363.79 c 0,64,65 148.967 1363.87 148.967 1363.87 169 1329 c 0,66,67 153.833 1338.39 153.833 1338.39 140.232 1338.32 c 0,68,69 116.166 1338.21 116.166 1338.21 97 1308.5 c 0,70,71 83.5354 1287.63 83.5354 1287.63 83.5672 1272.7 c 0,72,73 83.6063 1254.37 83.6063 1254.37 104 1245 c 0,74,75 114.919 1239.84 114.919 1239.84 126.863 1239.92 c 0,76,77 175.081 1240.25 175.081 1240.25 240 1326 c 0,78,79 321 1432.99 321 1432.99 276 1491 c 0,80,81 263.212 1506.89 263.212 1506.89 248.323 1507.16 c 0,82,83 233.127 1503.63 l 0,84,85 215.806 1495.55 215.806 1495.55 196 1469 c 0,86,87 195.152 1498.14 l 0,88,89 201.306 1554.44 201.306 1554.44 273 1577 c 0,90,91 362 1605.01 362 1605.01 480.5 1604 c 0,92,93 599.036 1602.99 599.036 1602.99 711.5 1586.5 c 0,94,95 824 1570 824 1570 859 1561 c 0,96,97 944.601 1539.42 944.601 1539.42 944.717 1476.2 c 0,98,99 944.767 1448.57 944.767 1448.57 928.5 1413 c 0,100,101 874.997 1295.99 874.997 1295.99 785 1261 c 0,102,103 814.991 1296.99 814.991 1296.99 845 1350 c 0,104,105 875 1402.99 875 1402.99 848 1434 c 0,106,107 826.995 1457 826.995 1457 788.5 1458.5 c 0,108,109 770.041 1455.64 l 0,110,111 743.053 1445.86 743.053 1445.86 722 1403 c 0,112,113 685.428 1330.43 685.428 1330.43 685.265 1283.65 c 0,114,115 685.167 1255.51 685.167 1255.51 698.253 1236.7 c 0,116,117 701.476 1232.07 701.476 1232.07 705.5 1228 c 0,118,119 751.965 1181.05 751.965 1181.05 842.5 1181 c 0,120,121 932.029 1182.01 932.029 1182.01 1028.5 1217.5 c 0,122,123 1124.99 1253.01 1124.99 1253.01 1159 1294 c 0,124,125 1084 1171 1084 1171 940 1120 c 0,126,127 870.72 1095.46 870.72 1095.46 800.75 1095.46 c 0,128,129 725.277 1095.46 725.277 1095.46 649 1124 c 0,130,131 571.991 1151 571.991 1151 521 1198.5 c 0,132,133 470 1246.01 470 1246.01 430.5 1275 c 0,134,135 400.256 1297.2 400.256 1297.2 373.833 1297.43 c 0,136,137 365.737 1297.49 365.737 1297.49 358 1295.5 c 0,138,139 324.998 1286.99 324.998 1286.99 285 1203 c 0,140,141 261.211 1152.62 261.211 1152.62 261.165 1096.13 c 0,142,143 261.145 1071.88 261.145 1071.88 265.5 1046.5 c 0,144,145 280 962 280 962 355 904 c 0,146,147 370.918 891.619 370.918 891.619 387.13 891.556 c 0,148,149 407.581 891.476 407.581 891.476 428.5 911 c 0,150,151 466 946 466 946 411 982 c 0,152,153 441.509 992.17 441.509 992.17 466.463 992.083 c 0,154,155 495.49 991.981 495.49 991.981 517 978 c 0,156,157 556.998 952.002 556.998 952.002 612 865 c 0,158,159 631.998 832.002 631.998 832.002 712 740 c 0,160,161 792.002 647.997 792.002 647.997 863 543 c 0,162,163 934 438 934 438 961 343 c 0,164,165 967.496 320.143 967.496 320.143 967.451 300.585 c 0,166,167 967.308 238.857 967.308 238.857 902 210 c 0,168,169 899.454 252.437 l 0,170,171 897.919 262.322 897.919 262.322 895.5 272 c 0,172,173 888 302 888 302 851 293 c 0,174,175 848 292 848 292 819.5 250 c 0,176,177 791 208 791 208 770 161.5 c 0,178,179 749 115 749 115 751.5 82 c 0,180,181 754 49 754 49 814 66 c 0,182,183 838 72 838 72 836.5 92.5 c 0,184,185 835 113.001 835 113.001 839 137 c 0,186,187 914 60.0001 914 60.0001 819.5 4 c 0,188,189 725 -52 725 -52 683 -50 c 0,0,1 414 1714 m 1,98,99 395.009 1728.03 395.009 1728.03 395.108 1801.05 c 0,100,101 395.129 1816.46 395.129 1816.46 396 1834.5 c 0,102,103 401 1938 401 1938 446.5 2042 c 0,104,105 491.999 2145.99 491.999 2145.99 585.5 2208.5 c 0,106,107 631.398 2239.18 631.398 2239.18 691.879 2239.14 c 0,108,109 754.596 2239.09 754.596 2239.09 833 2206 c 0,110,111 746.818 2206.21 l 0,112,113 690.669 2203.56 690.669 2203.56 649 2193 c 0,114,115 578 2175 578 2175 545 2079 c 0,116,117 530.449 2035.69 530.449 2035.69 530.302 2007.15 c 0,118,119 530.21 1989.43 530.21 1989.43 535.67 1977.4 c 0,120,121 546.801 1952.87 546.801 1952.87 581 1952 c 0,122,123 606.959 1954.33 l 0,124,125 630.094 1960.29 630.094 1960.29 630.065 1981.19 c 0,126,127 630.039 1999.11 630.039 1999.11 613 2028 c 0,128,129 669 2013 669 2013 673.5 1945 c 0,130,131 672.229 1913.5 l 0,132,133 665.109 1871.18 665.109 1871.18 627 1854 c 0,134,135 536.013 1812.01 536.013 1812.01 491.5 1808 c 0,136,137 446.998 1803.99 446.998 1803.99 414 1714 c 1,98,99 EndSplineSet EndChar StartChar: sacute Encoding: 347 347 90 Width: 1004 Flags: HW Fore 589 120 m 0,0,1 406 130.001 406 130.001 245 125.5 c 0,2,3 204.652 128.097 l 0,4,5 78.8561 149.094 78.8561 149.094 45 334 c 0,6,7 67 277 67 277 128.5 251.5 c 0,8,9 190 226 190 226 208 334 c 0,10,11 208.984 365.264 l 0,12,13 205.085 404.631 205.085 404.631 172.5 425.5 c 0,14,15 145.386 442.865 145.386 442.865 111.404 442.967 c 0,16,17 89.6139 443.033 89.6139 443.033 65 436 c 0,18,19 98.2419 492.813 98.2419 492.813 141.164 493.188 c 0,20,21 152.496 493.287 152.496 493.287 164.502 489.453 c 0,22,23 182.263 483.78 182.263 483.78 201.5 469.5 c 0,24,25 282.999 409 282.999 409 314 358 c 0,26,27 393 223 393 223 462 248.5 c 0,28,29 531 274 531 274 566 354.5 c 0,30,31 601 435 601 435 590 518 c 0,32,33 581.055 585.495 581.055 585.495 526.482 585.539 c 0,34,35 513.945 585.55 513.945 585.55 499 582 c 0,36,37 475 576 475 576 476 556 c 0,38,39 477 536 477 536 495 520 c 0,40,41 505.707 509.293 505.707 509.293 519.014 509.205 c 0,42,43 533.844 509.107 533.844 509.107 553 523 c 0,44,45 525.682 451.808 525.682 451.808 491.854 451.542 c 0,46,47 484.818 451.487 484.818 451.487 477.5 454.5 c 0,48,49 435 472 435 472 396 529 c 0,50,51 357 586 357 586 327.5 650.5 c 0,52,53 297.998 715.003 297.998 715.003 291 723 c 0,54,55 175.998 841.002 175.998 841.002 71 977 c 0,56,57 14.885 1049.69 14.885 1049.69 14.7503 1131.79 c 0,58,59 14.651 1192.36 14.651 1192.36 45.0218 1258.07 c 0,60,61 50.513 1269.95 50.513 1269.95 57 1282 c 0,62,63 69.0071 1305.01 69.0071 1305.01 98.5 1319 c 0,64,65 114.087 1322.62 l 0,66,67 134.507 1322.16 134.507 1322.16 152 1293 c 0,68,69 139.415 1300.69 139.415 1300.69 128.112 1300.87 c 0,70,71 113.474 1297.69 l 0,72,73 101.083 1291.89 101.083 1291.89 90.5 1275.5 c 0,74,75 79.2991 1258.15 79.2991 1258.15 78.9994 1245.72 c 0,76,77 81.6689 1234.06 l 0,78,79 85.7401 1226.63 85.7401 1226.63 96 1222 c 0,80,81 105.319 1217.64 105.319 1217.64 115.503 1217.7 c 0,82,83 156.677 1217.94 156.677 1217.94 212 1290.5 c 0,84,85 256.445 1348.79 256.445 1348.79 256.495 1390.28 c 0,86,87 256.523 1413.21 256.523 1413.21 243 1431 c 0,88,89 232.294 1444.38 232.294 1444.38 219.834 1444.75 c 0,90,91 206.014 1441.43 l 0,92,93 191.532 1434.32 191.532 1434.32 175 1412 c 0,94,95 174.516 1438.21 l 0,96,97 180.593 1484.96 180.593 1484.96 240.5 1504 c 0,98,99 314.701 1527.59 314.701 1527.59 417 1527.5 c 0,100,101 518 1527.01 518 1527.01 613 1512.5 c 0,102,103 708.126 1497.98 708.126 1497.98 738 1491 c 0,104,105 810.628 1472.32 810.628 1472.32 811.25 1418.96 c 0,106,107 807.364 1391.21 l 0,108,109 803.94 1378.58 803.94 1378.58 797.5 1364.5 c 0,110,111 751.998 1265 751.998 1265 675 1235 c 0,112,113 700.011 1266.02 700.011 1266.02 726 1311 c 0,114,115 739.549 1334.45 739.549 1334.45 739.791 1352.74 c 0,116,117 736.569 1370.08 l 0,118,119 733.894 1376.47 733.894 1376.47 729 1382 c 0,120,121 710.995 1402 710.995 1402 678 1403.5 c 0,122,123 661.255 1400.79 l 0,124,125 638.683 1392.11 638.683 1392.11 621 1356 c 0,126,127 567 1248 567 1248 607.5 1207.5 c 0,128,129 646.962 1168.04 646.962 1168.04 724 1168 c 0,130,131 800.014 1169.01 800.014 1169.01 882 1199 c 0,132,133 963.994 1229 963.994 1229 993 1264 c 0,134,135 930.004 1159.01 930.004 1159.01 807.5 1116 c 0,136,137 685 1072.99 685 1072.99 560 1119 c 0,138,139 431.01 1165.99 431.01 1165.99 374.5 1247.5 c 0,140,141 354.599 1276.2 354.599 1276.2 333.396 1277.06 c 0,142,143 317.756 1273.98 l 0,144,145 285.794 1260.26 285.794 1260.26 251 1186 c 0,146,147 229.83 1142.95 229.83 1142.95 229.824 1094.68 c 0,148,149 229.821 1074.55 229.821 1074.55 233.5 1053.5 c 0,150,151 245.999 982 245.999 982 310 932 c 0,152,153 340 908 340 908 372 938 c 0,154,155 404 968 404 968 357 998 c 0,156,157 414 1017.01 414 1017.01 447.5 995 c 0,158,159 481.001 972.998 481.001 972.998 528 899 c 0,160,161 544.996 871.005 544.996 871.005 613 793 c 0,162,163 681.005 714.993 681.005 714.993 741.5 625.5 c 0,164,165 802.001 535.997 802.001 535.997 825 455 c 0,166,167 830.495 435.646 830.495 435.646 830.51 419.09 c 0,168,169 830.557 366.353 830.557 366.353 775 342 c 0,170,171 775 369 775 369 769 394.5 c 0,172,173 763 420 763 420 731 412 c 0,174,175 728 411 728 411 704 376 c 0,176,177 680.003 341.004 680.003 341.004 662.5 301.5 c 0,178,179 646.815 266.098 646.815 266.098 646.795 239.931 c 0,180,181 646.793 236.903 646.793 236.903 647 234 c 0,182,183 648.32 215.509 648.32 215.509 671.01 215.335 c 0,184,185 682.679 215.245 682.679 215.245 700 220 c 0,186,187 719.174 225.478 719.174 225.478 719.5 243 c 0,188,189 720.689 277.847 l 0,190,191 720.838 278.919 720.838 278.919 721 280 c 0,192,193 748.912 251.652 748.912 251.652 749.34 226.442 c 0,194,195 745.982 208.436 l 0,196,197 737.062 186.118 737.062 186.118 704.5 166.5 c 0,198,199 624 118.001 624 118.001 589 120 c 0,0,1 360 1621 m 1,94,95 340 1634.99 340 1634.99 344.5 1723 c 0,96,97 349 1811 349 1811 388 1899.5 c 0,98,99 427.003 1988.01 427.003 1988.01 506 2041 c 0,100,101 544.749 2066.99 544.749 2066.99 596.004 2067.01 c 0,102,103 649.255 2067.03 649.255 2067.03 716 2039 c 0,104,105 636.712 2038.65 l 0,106,107 592.755 2036.02 592.755 2036.02 559.5 2027.5 c 0,108,109 499 2012.01 499 2012.01 472 1930 c 0,110,111 436 1825 436 1825 502 1823.5 c 0,112,113 568 1822 568 1822 529 1888 c 0,114,115 577.001 1874.99 577.001 1874.99 580.5 1817 c 0,116,117 578.704 1787.04 l 0,118,119 571.864 1754.29 571.864 1754.29 541 1740 c 0,120,121 462.986 1703.99 462.986 1703.99 425.5 1700.5 c 0,122,123 388 1697.01 388 1697.01 360 1621 c 1,94,95 EndSplineSet EndChar StartChar: Zacute Encoding: 377 377 91 Width: 1478 Flags: HMW HStem: -67.4639 277.536<303.18 1275.14> 1344.32 217.56<298.476 1314.54> 1899.4 128.77<686.556 1148.72> Fore 1282.79 1570.7 m 0,0,1 1372.16 1569.53 1372.16 1569.53 1401.56 1504.26 c 0,2,3 1421.76 1459.42 1421.76 1459.42 1421.7 1406.8 c 0,4,5 1421.67 1382.84 1421.67 1382.84 1417.44 1357.26 c 0,6,7 1403.93 1275.56 1403.93 1275.56 1357.46 1202.62 c 0,8,9 1311 1129.7 1311 1129.7 1249.86 1114.42 c 0,10,11 1352.93 1230.64 1352.93 1230.64 1352.86 1291.21 c 0,12,13 1352.82 1328.08 1352.82 1328.08 1314.54 1344.32 c 0,14,15 1293.11 1353.42 1293.11 1353.42 1272.11 1353.51 c 0,16,17 1250.07 1353.61 1250.07 1353.61 1228.5 1343.8 c 0,18,19 1173.58 1318.83 1173.58 1318.83 1121.68 1229.66 c 0,20,21 1084.05 1164.98 1084.05 1164.98 1074.64 1051.5 c 0,22,23 1065.23 938.016 1065.23 938.016 1046.41 863.928 c 0,24,25 1028.77 800.421 1028.77 800.421 986.436 744.563 c 0,26,27 944.1 688.704 944.1 688.704 870.012 734.568 c 0,28,29 920.58 743.976 920.58 743.976 926.46 779.256 c 0,30,31 932.34 814.536 932.34 814.536 901.764 815.712 c 0,32,33 839.436 816.888 839.436 816.888 810.036 749.268 c 0,34,35 780.636 681.646 780.636 681.646 759.468 600.504 c 0,36,37 738.3 519.36 738.3 519.36 714.78 452.328 c 0,38,39 691.26 385.296 691.26 385.296 643.044 390 c 0,40,41 681.852 437.04 681.852 437.04 669.504 464.088 c 0,42,43 657.156 491.136 657.156 491.136 635.988 486.432 c 0,44,45 583.066 473.496 583.066 473.496 536.616 361.188 c 0,46,47 490.164 248.88 490.164 248.88 506.628 213.6 c 0,48,49 532.5 153.624 532.5 153.624 653.628 151.271 c 0,50,51 718.72 153.447 l 0,52,53 779.51 159.89 779.51 159.89 790.044 184.2 c 0,54,55 805.332 218.304 805.332 218.304 770.052 233.592 c 0,56,57 734.771 248.88 734.771 248.88 718.308 224.184 c 0,58,59 753.588 322.968 753.588 322.968 848.256 248.88 c 0,60,61 942.924 174.792 942.924 174.792 1031.12 157.152 c 0,62,63 1075.81 147.744 1075.81 147.744 1142.84 174.792 c 0,64,65 1209.88 201.84 1209.88 201.84 1275.14 210.072 c 0,66,67 1340.41 218.304 1340.41 218.304 1392.74 178.908 c 0,68,69 1445.07 139.512 1445.07 139.512 1460.36 -1.6084 c 0,70,71 1422.73 93.6475 1422.73 93.6475 1351.58 86.5918 c 0,72,73 1280.44 79.5361 1280.44 79.5361 1203.41 28.9678 c 0,74,75 1126.37 -21.611 1126.37 -21.611 1058.76 -84.5156 c 0,76,77 991.14 -147.432 991.14 -147.432 961.74 -167.424 c 0,78,79 922.932 -190.944 922.932 -190.944 842.964 -180.36 c 0,80,81 762.996 -169.776 762.996 -169.776 750.06 -123.912 c 0,82,83 769.443 -127.877 769.443 -127.877 787.093 -127.799 c 0,84,85 816.561 -127.668 816.561 -127.668 841.2 -116.269 c 0,86,87 857.586 -108.687 857.586 -108.687 858.002 -97.3406 c 0,88,89 854.262 -84.773 l 0,90,91 847.346 -72.9171 847.346 -72.9171 827.676 -58.0557 c 0,92,93 767.7 -12.1925 767.7 -12.1925 569.544 -27.4805 c 0,94,95 371.388 -42.7687 371.388 -42.7687 303.18 -67.4639 c 0,96,97 220.858 -95.6885 220.858 -95.6885 118.548 -67.4639 c 0,98,99 16.2354 -39.2402 16.2354 -39.2402 16.2354 38.376 c 0,100,101 85.6201 -29.832 85.6201 -29.832 165 -9.25195 c 0,102,103 244.38 11.3281 244.38 11.3281 263.196 112.464 c 0,104,105 274.956 177.144 274.956 177.144 259.668 261.816 c 0,106,107 244.38 346.488 244.38 346.488 244.38 418.224 c 0,108,109 244.38 489.96 244.38 489.96 280.836 532.296 c 0,110,111 317.292 574.632 317.292 574.632 434.892 554.64 c 0,112,113 377.268 542.88 377.268 542.88 370.212 521.712 c 0,114,115 364.587 510.863 364.587 510.863 364.316 503.172 c 0,116,117 366.552 493.963 l 0,118,119 370.814 487.229 370.814 487.229 383.147 485.256 c 0,120,121 460.764 467.616 460.764 467.616 557.784 590.508 c 0,122,123 654.804 713.4 654.804 713.4 577.188 774.552 c 0,124,125 541.908 800.424 541.908 800.424 519.563 766.908 c 0,126,127 497.219 733.39 497.219 733.39 486.636 702.816 c 0,128,129 459.588 771.022 459.588 771.022 540.144 836.88 c 0,130,131 620.7 902.736 620.7 902.736 721.836 973.884 c 0,132,133 822.936 1045 822.936 1045 900 1125 c 0,134,135 954.038 1181.1 954.038 1181.1 953.961 1245.89 c 0,136,137 953.928 1273.45 953.928 1273.45 944.1 1302.58 c 0,138,139 936.209 1323.38 936.209 1323.38 914.101 1323.4 c 0,140,141 899.961 1323.41 899.961 1323.41 880.008 1314.92 c 0,142,143 828.957 1293.22 828.957 1293.22 771.228 1271.41 c 0,144,145 713.604 1249.66 713.604 1249.66 668.328 1255.54 c 0,146,147 623.052 1261.42 623.052 1261.42 623.052 1349.62 c 0,148,149 673.62 1284.94 673.62 1284.94 723.012 1320.22 c 0,150,151 739.476 1330.8 739.476 1330.8 740.063 1354.32 c 0,152,153 737.416 1374.98 l 0,154,155 734.913 1381.67 734.913 1381.67 730.067 1384.9 c 0,156,157 667.74 1423.71 667.74 1423.71 607.764 1389.01 c 0,158,159 547.788 1354.31 547.788 1354.31 488.988 1308.46 c 0,160,161 430.188 1262.59 430.188 1262.59 370.212 1237.9 c 0,162,163 310.234 1213.2 310.234 1213.2 249.084 1273.18 c 0,164,165 213.804 1304.93 213.804 1304.93 213.804 1361.38 c 0,166,167 217.335 1346.08 217.335 1346.08 264.96 1316.1 c 0,168,169 297.51 1295.61 297.51 1295.61 325.383 1295.71 c 0,170,171 338.304 1295.75 338.304 1295.75 350.22 1300.22 c 0,172,173 385.506 1313.17 385.506 1313.17 402.552 1333.74 c 0,174,175 414.513 1348.18 414.513 1348.18 414.612 1380.26 c 0,176,177 414.655 1393.92 414.655 1393.92 412.548 1410.77 c 0,178,179 393.73 1541.3 393.73 1541.3 254.964 1490.15 c 0,180,181 116.189 1438.98 116.189 1438.98 72.6836 1360.2 c 0,182,183 45.6312 1311.97 45.6312 1311.97 30.3477 1250.83 c 0,184,185 28.8703 1292.72 l 0,186,187 30.8234 1327.58 30.8234 1327.58 43.2842 1363.14 c 0,188,189 63.2687 1420.17 63.2687 1420.17 86.7959 1451.93 c 0,190,191 162.06 1557.77 162.06 1557.77 298.476 1561.88 c 0,192,193 434.892 1566.01 434.892 1566.01 547.788 1534.25 c 0,194,195 615.363 1515.28 615.363 1515.28 705.509 1515.29 c 0,196,197 794.181 1515.29 794.181 1515.29 904.704 1533.66 c 0,198,199 1127.58 1570.7 1127.58 1570.7 1282.79 1570.7 c 0,0,1 1148.72 2028.17 m 1,119,120 1051.12 1851.78 1051.12 1851.78 857.076 1850.59 c 0,121,122 775.932 1849.42 775.932 1849.42 745.944 1796.5 c 0,123,124 715.958 1743.58 715.958 1743.58 699.492 1669.49 c 0,125,126 655.406 1731.47 655.406 1731.47 655.406 1793.96 c 0,127,128 655.405 1846.49 655.405 1846.49 686.556 1899.4 c 0,129,130 754.76 2015.22 754.76 2015.22 860.604 2057.57 c 0,131,132 898.203 2071.67 898.203 2071.67 939.396 2074.03 c 0,133,134 980.556 2076.39 980.556 2076.39 988.788 2050.51 c 0,135,136 946.452 2061.1 946.452 2061.1 915.288 2031.7 c 0,137,138 884.124 2002.3 884.124 2002.3 911.172 1978.78 c 0,139,140 946.337 1945.68 946.337 1945.68 985.142 1945.74 c 0,141,142 1012.52 1945.77 1012.52 1945.77 1041.71 1962.31 c 0,143,144 1112.3 2002.32 1112.3 2002.32 1148.72 2028.17 c 1,119,120 EndSplineSet EndChar StartChar: zacute Encoding: 378 378 92 Width: 1265 Flags: HMW HStem: 9 236<259 1085.5> 1209.5 185<255 1119> 1681.5 109.5<585 978> Fore 1092 1402 m 0,0,1 1168 1400.99 1168 1400.99 1193 1345.5 c 0,2,3 1210.2 1307.32 1210.2 1307.32 1210.13 1262.5 c 0,4,5 1206.5 1220.5 l 0,6,7 1194.99 1150.99 1194.99 1150.99 1155.5 1089 c 0,8,9 1116.01 1027.01 1116.01 1027.01 1064 1014 c 0,10,11 1151.63 1112.81 1151.63 1112.81 1151.58 1164.32 c 0,12,13 1151.55 1195.69 1151.55 1195.69 1119 1209.5 c 0,14,15 1100.65 1217.29 1100.65 1217.29 1082.66 1217.31 c 0,16,17 1016.35 1217.4 1016.35 1217.4 955 1112 c 0,18,19 922.999 1056.99 922.999 1056.99 915 960.5 c 0,20,21 907 864 907 864 891 801 c 0,22,23 876 747 876 747 840 699.5 c 0,24,25 804 652 804 652 741 691 c 0,26,27 784 699 784 699 789 729 c 0,28,29 794 759 794 759 768 760 c 0,30,31 743.841 757.016 l 0,32,33 708.911 746.994 708.911 746.994 690 703.5 c 0,34,35 665 646 665 646 647 577 c 0,36,37 629 508 629 508 609 451 c 0,38,39 590.312 397.737 590.312 397.737 553.287 397.738 c 0,40,41 550.689 397.738 550.689 397.738 548 398 c 0,42,43 581 438 581 438 570.5 461 c 0,44,45 561.842 479.965 561.842 479.965 548.085 480.573 c 0,46,47 542 480 l 0,48,49 497 469 497 469 457.5 373.5 c 0,50,51 418 278 418 278 432 248 c 0,52,53 454.001 196.999 454.001 196.999 557 195 c 0,54,55 614.825 197.124 l 0,56,57 664.258 202.828 664.258 202.828 673 223 c 0,58,59 686 251.999 686 251.999 656 265 c 0,60,61 626 278 626 278 612 257 c 0,62,63 642 341 642 341 722.5 278 c 0,64,65 803 215 803 215 878 200 c 0,66,67 916 192.001 916 192.001 973 215 c 0,68,69 1030 237.999 1030 237.999 1085.5 245 c 0,70,71 1118.85 245.448 l 0,72,73 1154.79 241.615 1154.79 241.615 1185.5 218.5 c 0,74,75 1229.99 185.009 1229.99 185.009 1243 65 c 0,76,77 1213.43 139.87 1213.43 139.87 1159.49 140.41 c 0,78,79 1155.08 140.454 1155.08 140.454 1150.5 140 c 0,80,81 1090.01 134 1090.01 134 1024.5 91 c 0,82,83 959 48 959 48 901.5 -5.5 c 0,84,85 844 -59 844 -59 819 -76 c 0,86,87 786 -95.9999 786 -95.9999 718 -87 c 0,88,89 649.999 -77.9999 649.999 -77.9999 639 -39 c 0,90,91 673.033 -42.2686 l 0,92,93 696.616 -41.7 696.616 -41.7 716.5 -32.5 c 0,94,95 750 -17 750 -17 705 17 c 0,96,97 654 56 654 56 485.5 43 c 0,98,99 317 30 317 30 259 9 c 0,100,101 223.777 -3.07646 223.777 -3.07646 184.25 -2.99951 c 0,102,103 145.223 -2.92354 145.223 -2.92354 102 9 c 0,104,105 15 33 15 33 15 99 c 0,106,107 74 41 74 41 141.5 58.5 c 0,108,109 208.999 75.9999 208.999 75.9999 225 162 c 0,110,111 229.41 186.252 229.41 186.252 229.347 213.809 c 0,112,113 229.268 248.748 229.268 248.748 222 289 c 0,114,115 209 360.997 209 360.997 209 422 c 0,116,117 209 483.001 209 483.001 240 519 c 0,118,119 261.061 543.458 261.061 543.458 313.971 543.453 c 0,120,121 338.939 543.45 338.939 543.45 371 538 c 0,122,123 322 528 322 528 316 510 c 0,124,125 311.032 500.419 311.032 500.419 310.975 493.735 c 0,126,127 310.877 482.339 310.877 482.339 327 479 c 0,128,129 393 464 393 464 475.5 568.5 c 0,130,131 521.099 626.259 521.099 626.259 521.332 667.979 c 0,132,133 521.432 685.754 521.432 685.754 513.296 700.618 c 0,134,135 505.978 713.987 505.978 713.987 492 725 c 0,136,137 462 747 462 747 443 718.5 c 0,138,139 424 690 424 690 415 664 c 0,140,141 409.149 678.754 409.149 678.754 409.22 693.379 c 0,142,143 409.425 736.246 409.425 736.246 460.5 778 c 0,144,145 529.009 834.007 529.009 834.007 615 894.5 c 0,146,147 700.997 954.997 700.997 954.997 766.5 1023 c 0,148,149 812.481 1070.73 812.481 1070.73 812.385 1125.86 c 0,150,151 812.344 1149.27 812.344 1149.27 804 1174 c 0,152,153 793 1202.99 793 1202.99 749.5 1184.5 c 0,154,155 705.784 1165.91 705.784 1165.91 657 1147.5 c 0,156,157 618.64 1133.02 618.64 1133.02 586.715 1132.94 c 0,158,159 577.86 1132.92 577.86 1132.92 569.5 1134 c 0,160,161 531 1138.99 531 1138.99 531 1214 c 0,162,163 558.823 1178.41 558.823 1178.41 586.228 1178.41 c 0,164,165 601.176 1178.41 601.176 1178.41 616 1189 c 0,166,167 630 1198 630 1198 630.5 1218 c 0,168,169 627.915 1236.42 l 0,170,171 625.807 1241.46 625.807 1241.46 622 1244 c 0,172,173 593.97 1261.45 593.97 1261.45 566.502 1261.43 c 0,174,175 542.028 1261.4 542.028 1261.4 518 1247.5 c 0,176,177 466.973 1217.98 466.973 1217.98 417 1179 c 0,178,179 367 1140 367 1140 316 1119 c 0,180,181 301.146 1112.88 301.146 1112.88 286.207 1112.88 c 0,182,183 249.855 1112.85 249.855 1112.85 213 1149 c 0,184,185 183 1176 183 1176 183 1224 c 0,186,187 185.999 1211 185.999 1211 226.5 1185.5 c 0,188,189 267 1160 267 1160 299 1172 c 0,190,191 329 1182.99 329 1182.99 343.5 1200.5 c 0,192,193 353.794 1212.93 353.794 1212.93 353.756 1240.72 c 0,194,195 353.74 1252.08 353.74 1252.08 352 1266 c 0,196,197 340.537 1345.52 340.537 1345.52 276.723 1345.75 c 0,198,199 251.463 1345.84 251.463 1345.84 218 1333.5 c 0,200,201 99.9967 1290 99.9967 1290 63 1223 c 0,202,203 40 1182.01 40 1182.01 27 1130 c 0,204,205 25.9714 1169.14 l 0,206,207 28.0316 1197.06 28.0316 1197.06 38 1225.5 c 0,208,209 55.0032 1274 55.0032 1274 75 1301 c 0,210,211 139.004 1391.01 139.004 1391.01 255 1394.5 c 0,212,213 335.599 1393.09 l 0,214,215 405.421 1388.32 405.421 1388.32 467 1371 c 0,216,217 524.66 1354.82 524.66 1354.82 601.628 1354.88 c 0,218,219 676.847 1354.93 676.847 1354.93 770.5 1370.5 c 0,220,221 960 1402 960 1402 1092 1402 c 0,0,1 978 1791 m 1,119,120 895.003 1641.01 895.003 1641.01 730 1640 c 0,121,122 660.997 1638.99 660.997 1638.99 635.5 1594 c 0,123,124 610 1549 610 1549 596 1486 c 0,125,126 558.765 1538.35 558.765 1538.35 558.513 1591.13 c 0,127,128 558.415 1611.74 558.415 1611.74 563.958 1632.42 c 0,129,130 570.523 1656.91 570.523 1656.91 585 1681.5 c 0,131,132 642.997 1780 642.997 1780 733 1816 c 0,133,134 765.015 1828.01 765.015 1828.01 800 1830 c 0,135,136 822.603 1828.04 l 0,137,138 837.667 1823.62 837.667 1823.62 842 1810 c 0,139,140 818.356 1812.17 l 0,141,142 796.883 1810.4 796.883 1810.4 779.5 1794 c 0,143,144 765.367 1780.66 765.367 1780.66 765.313 1768.75 c 0,145,146 765.267 1758.33 765.267 1758.33 776 1749 c 0,147,148 805.866 1720.89 805.866 1720.89 838.816 1720.9 c 0,149,150 862.136 1720.91 862.136 1720.91 887 1735 c 0,151,152 947.068 1769.04 947.068 1769.04 978 1791 c 1,119,120 EndSplineSet EndChar StartChar: Zdotaccent Encoding: 379 379 93 Width: 1555 Flags: HMW HStem: -105.28 182.83<79.9004 1308.01> 1407.18 141.47<120.32 1356.42> 1778.01 73.79<756.7 935.3> Fore 899.58 1112.02 m 1,0,1 885.839 1123.16 885.839 1123.16 875.473 1123.15 c 0,2,3 859.6 1123.14 859.6 1123.14 851.64 1096.98 c 0,4,5 838.48 1053.73 838.48 1053.73 837.54 1039.64 c 0,6,7 802.76 1085.7 802.76 1085.7 843.18 1152.44 c 0,8,9 883.574 1219.13 883.574 1219.13 912.27 1277.46 c 0,10,11 926.839 1307.07 926.839 1307.07 926.965 1330.74 c 0,12,13 927.063 1349.1 927.063 1349.1 918.475 1363.88 c 0,14,15 916.345 1367.54 916.345 1367.54 913.68 1370.99 c 0,16,17 886.421 1406.24 886.421 1406.24 716.28 1389.32 c 0,18,19 660.522 1383.74 660.522 1383.74 630.27 1370.05 c 0,20,21 612.219 1361.74 612.219 1361.74 611.81 1344.53 c 0,22,23 615.659 1325.47 l 0,24,25 616.892 1322.25 616.892 1322.25 618.52 1318.82 c 0,26,27 633.4 1284.81 633.4 1284.81 658.163 1284.45 c 0,28,29 675.39 1287.8 l 0,30,31 712.521 1301.9 712.521 1301.9 742.6 1332.92 c 0,32,33 742.6 1263.36 742.6 1263.36 691.84 1237.04 c 0,34,35 641.08 1210.71 641.08 1210.71 574.81 1211.66 c 0,36,37 508.505 1212.61 508.505 1212.61 444.62 1231.87 c 0,38,39 380.701 1251.15 380.701 1251.15 354.38 1272.76 c 0,40,41 279.181 1331.03 279.181 1331.03 195.05 1417.99 c 0,42,43 153.956 1460.46 153.956 1460.46 120.822 1460.88 c 0,44,45 102.421 1457.64 l 0,46,47 78.9938 1448.77 78.9938 1448.77 60.1602 1415.64 c 0,48,49 48.9799 1395.91 48.9799 1395.91 48.8423 1384.23 c 0,50,51 48.7833 1379.22 48.7833 1379.22 50.7598 1375.69 c 0,52,53 57.38 1363.87 57.38 1363.87 71.4404 1342.32 c 0,54,55 -2.82025 1366.76 -2.82025 1366.76 7.51953 1438.2 c 0,56,57 23.5391 1548.56 23.5391 1548.56 110.343 1548.95 c 0,58,59 115.22 1548.97 115.22 1548.97 120.32 1548.65 c 0,60,61 199.929 1547.52 l 0,62,63 257.241 1549.51 257.241 1549.51 315.84 1559.46 c 0,64,65 345.926 1565.1 345.926 1565.1 379.29 1598.47 c 0,66,67 400.507 1619.69 400.507 1619.69 400.634 1635.02 c 0,68,69 400.707 1643.79 400.707 1643.79 393.86 1650.64 c 0,70,71 368.48 1673.2 368.48 1673.2 344.98 1664.74 c 0,72,73 321.479 1656.28 321.479 1656.28 291.4 1642.18 c 0,74,75 331.304 1714.47 331.304 1714.47 372.273 1715.24 c 0,76,77 390.844 1711.94 l 0,78,79 407.307 1705.8 407.307 1705.8 423.94 1688.24 c 0,80,81 491.602 1616.81 491.602 1616.81 547.08 1574.5 c 0,82,83 628.867 1510.58 628.867 1510.58 781.14 1499.3 c 0,84,85 854.669 1497.47 l 0,86,87 948.034 1500.65 948.034 1500.65 988.88 1535.96 c 0,88,89 998.844 1545.01 998.844 1545.01 998.771 1553.85 c 0,90,91 998.693 1563.36 998.693 1563.36 987 1572.62 c 0,92,93 960.068 1591.04 960.068 1591.04 941.426 1591.04 c 0,94,95 935.336 1591.04 935.336 1591.04 930.13 1589.07 c 0,96,97 908.941 1581.06 908.941 1581.06 880.78 1563.22 c 0,98,99 886.421 1611.17 886.421 1611.17 938.12 1632.78 c 0,100,101 949.999 1637.46 949.999 1637.46 966.568 1637.38 c 0,102,103 993.252 1637.26 993.252 1637.26 1032.12 1624.79 c 0,104,105 1095.13 1604.58 1095.13 1604.58 1169.36 1586.72 c 0,106,107 1233.67 1571.25 1233.67 1571.25 1298.71 1571.3 c 0,108,109 1308.76 1571.3 1308.76 1571.3 1318.82 1571.68 c 0,110,111 1394.03 1574.5 1394.03 1574.5 1449.48 1634.66 c 0,112,113 1507.75 1698.57 1507.75 1698.57 1441.02 1767.2 c 0,114,115 1512.47 1741.82 1512.47 1741.82 1512.93 1690.12 c 0,116,117 1509.33 1652.82 l 0,118,119 1502.52 1618.66 1502.52 1618.66 1482.85 1582.96 c 0,120,121 1452.26 1527.44 1452.26 1527.44 1410.47 1477.68 c 0,122,123 1368.67 1427.9 1368.67 1427.9 1356.42 1407.18 c 0,124,125 1319.75 1342.31 1319.75 1342.31 1317.88 1291.56 c 0,126,127 1316.11 1243.75 1316.11 1243.75 1225.93 1243.47 c 0,128,129 1220.37 1243.46 1220.37 1243.46 1214.48 1243.62 c 0,130,131 1256.77 1262.41 1256.77 1262.41 1278.87 1299.55 c 0,132,133 1287.73 1314.43 1287.73 1314.43 1288.05 1325.17 c 0,134,135 1284.94 1337.23 l 0,136,137 1280.54 1344.11 1280.54 1344.11 1269.94 1347.96 c 0,138,139 1254.4 1352.93 1254.4 1352.93 1239.99 1352.87 c 0,140,141 1210.82 1352.75 1210.82 1352.75 1186.28 1331.98 c 0,142,143 1149.62 1300.96 1149.62 1300.96 1128 1256.78 c 0,144,145 1106.39 1212.61 1106.39 1212.61 1102.62 1171.71 c 0,146,147 1103.32 1145.19 l 0,148,149 1106.66 1129.34 1106.66 1129.34 1118.6 1127.06 c 0,150,151 1149.01 1123.83 l 0,152,153 1183.71 1125.42 1183.71 1125.42 1184.4 1159.02 c 0,154,155 1181.58 1187.33 l 0,156,157 1175.31 1213.23 1175.31 1213.23 1155.26 1229.52 c 0,158,159 1207.9 1213.54 1207.9 1213.54 1220.12 1178.76 c 0,160,161 1226.02 1159.08 1226.02 1159.08 1226.03 1142.66 c 0,162,163 1226.05 1112.03 1226.05 1112.03 1205.55 1092.75 c 0,164,165 1174.05 1063.13 1174.05 1063.13 1128 1038.7 c 0,166,167 1081.99 1014.29 1081.99 1014.29 1040.58 984.18 c 0,168,169 999.219 954.096 999.219 954.096 997.34 898.64 c 0,170,171 995.46 844.12 995.46 844.12 1074.42 873.26 c 0,172,173 1063.14 833.78 1063.14 833.78 1026.48 814.98 c 0,174,175 989.819 796.18 989.819 796.18 960.68 786.78 c 0,176,177 862.921 756.701 862.921 756.701 761.4 647.66 c 0,178,179 659.881 538.622 659.881 538.622 606.3 418.3 c 0,180,181 567.675 331.563 567.675 331.563 567.641 256.305 c 0,182,183 567.628 227.167 567.628 227.167 573.4 199.75 c 0,184,185 594.081 101.52 594.081 101.52 740.72 94.9404 c 0,186,187 764.158 96.9563 l 0,188,189 790.657 103.873 790.657 103.873 806.99 132.54 c 0,190,191 817.439 150.879 817.439 150.879 817.342 166.896 c 0,192,193 817.225 186.181 817.225 186.181 801.82 202.1 c 0,194,195 774.56 227.48 774.56 227.48 739.78 213.38 c 0,196,197 705 199.28 705 199.28 684.32 175.78 c 0,198,199 694.659 249.099 694.659 249.099 734.61 259.91 c 0,200,201 749.507 263.941 749.507 263.941 765.712 263.855 c 0,202,203 792.962 263.709 792.962 263.709 823.91 251.92 c 0,204,205 873.255 233.122 873.255 233.122 923.55 200.22 c 0,206,207 973.841 167.32 973.841 167.32 1004.86 155.1 c 0,208,209 1213.54 67.6797 1213.54 67.6797 1308.01 77.5498 c 0,210,211 1402.48 87.42 1402.48 87.42 1532.2 208.68 c 0,212,213 1532.2 110.917 1532.2 110.917 1428.33 42.7695 c 0,214,215 1324.45 -25.381 1324.45 -25.381 1247.38 -31.96 c 0,216,217 1181.98 -32.991 l 0,218,219 1127.84 -30.5965 1127.84 -30.5965 1074.42 -17.3896 c 0,220,221 1048.4 -10.9567 1048.4 -10.9567 1024.38 -10.9157 c 0,222,223 969.438 -10.8217 969.438 -10.8217 924.96 -44.1797 c 0,224,225 895.82 -63.9199 895.82 -63.9199 926.84 -93.0596 c 0,226,227 952.966 -116.283 952.966 -116.283 970.127 -116.534 c 0,228,229 975.194 -116.609 975.194 -116.609 979.48 -114.68 c 0,230,-1 1023.66 -94.9404 l 0,231,232 1010.51 -152.28 1010.51 -152.28 970.08 -156.51 c 0,233,234 929.659 -160.74 929.659 -160.74 881.25 -141.94 c 0,235,236 832.84 -123.14 832.84 -123.14 786.31 -95.4102 c 0,237,238 739.78 -67.6797 739.78 -67.6797 714.4 -61.0996 c 0,239,240 634.502 -38.5407 634.502 -38.5407 561.65 2.82031 c 0,241,242 528.265 21.7742 528.265 21.7742 498.729 21.7766 c 0,243,244 463.815 21.7794 463.815 21.7794 434.28 -4.7002 c 0,245,246 419.28 -18.2478 419.28 -18.2478 419.225 -32.0451 c 0,247,248 419.172 -45.0517 419.172 -45.0517 432.4 -58.2803 c 0,249,250 449.496 -77.2754 449.496 -77.2754 469.951 -77.5578 c 0,251,252 489.438 -73.8738 l 0,253,254 500.884 -69.5507 500.884 -69.5507 513.24 -60.1602 c 0,255,256 513.24 -103.401 513.24 -103.401 457.31 -113.74 c 0,257,258 401.38 -124.08 401.38 -124.08 364.72 -107.16 c 0,259,260 349.68 -99.6393 349.68 -99.6393 302.21 -62.5098 c 0,261,262 254.739 -25.3793 254.739 -25.3793 203.98 -2.82031 c 0,263,264 153.22 19.7402 153.22 19.7402 114.68 6.11035 c 0,265,266 76.1396 -7.51953 76.1396 -7.51953 79.9004 -105.28 c 0,267,268 80.8399 -158.86 80.8399 -158.86 137.71 -173.43 c 0,269,270 166.776 -180.876 166.776 -180.876 194.982 -180.834 c 0,271,272 221.964 -180.794 221.964 -180.794 248.16 -173.9 c 0,273,274 210.53 -210.624 210.53 -210.624 164.261 -210.829 c 0,275,276 141.869 -210.928 141.869 -210.928 117.454 -202.474 c 0,277,278 87.722 -192.179 87.722 -192.179 54.9902 -169.2 c 0,279,280 -60.1601 -88.3605 -60.1601 -88.3605 20.6797 40.4199 c 0,281,282 101.52 169.2 101.52 169.2 232.65 252.39 c 0,283,284 363.779 335.579 363.779 335.579 440.86 465.3 c 0,285,286 506.658 578.096 506.658 578.096 568.23 757.17 c 0,287,288 629.8 936.24 629.8 936.24 731.32 956.92 c 0,289,290 715.341 942.82 715.341 942.82 710.17 918.38 c 0,291,292 705 893.94 705 893.94 719.1 878.9 c 0,293,294 731.321 864.8 731.321 864.8 767.04 894.41 c 0,295,296 802.76 924.02 802.76 924.02 837.54 967.73 c 0,297,298 872.326 1011.45 872.326 1011.45 893.47 1054.68 c 0,299,300 905.768 1079.82 905.768 1079.82 905.83 1095.11 c 0,301,302 905.875 1106.12 905.875 1106.12 899.58 1112.02 c 1,0,1 830.02 1714.56 m 0,157,158 744.479 1724.89 744.479 1724.89 756.7 1778.01 c 0,159,160 768.919 1831.12 768.919 1831.12 815.92 1867.78 c 0,161,162 850.152 1894.18 850.152 1894.18 877.328 1894.33 c 0,163,164 894.699 1894.43 894.699 1894.43 909.187 1883.81 c 0,165,166 923.688 1873.18 923.688 1873.18 935.3 1851.8 c 0,167,168 940.628 1841.7 940.628 1841.7 940.686 1829.77 c 0,169,170 940.784 1809.32 940.784 1809.32 925.404 1783.45 c 0,171,172 919.676 1773.82 919.676 1773.82 911.8 1763.44 c 0,173,174 874.489 1714.25 874.489 1714.25 837.937 1714.03 c 0,175,176 833.974 1714.01 833.974 1714.01 830.02 1714.56 c 0,157,158 EndSplineSet EndChar StartChar: zdotaccent Encoding: 380 380 94 Width: 1343 Flags: HMW HStem: -17.54 156.04<86.6797 1130.55> 1268.38 120.79<120.989 1172.38> 1583.75 62.51<661.489 814.239> Fore 783.22 1017.4 m 0,0,1 772.103 1026.72 772.103 1026.72 763.586 1027.15 c 0,2,3 754.464 1024.58 l 0,4,5 747.245 1019.63 747.245 1019.63 742.8 1005.18 c 0,6,7 731.52 968.522 731.52 968.522 731.52 956.301 c 0,8,9 717.44 974.78 717.44 974.78 717.468 996.967 c 0,10,11 717.499 1022.18 717.499 1022.18 735.75 1052.18 c 0,12,13 770.065 1108.59 770.065 1108.59 794.029 1157.93 c 0,14,15 806.23 1183.05 806.23 1183.05 806.254 1203.18 c 0,16,17 806.278 1222.59 806.278 1222.59 794.97 1237.36 c 0,18,19 779.213 1257.94 779.213 1257.94 706.485 1257.84 c 0,20,21 672.904 1257.79 672.904 1257.79 627.18 1253.34 c 0,22,23 520.02 1242.06 520.02 1242.06 544.46 1194.12 c 0,24,25 557.187 1164.42 557.187 1164.42 578.153 1163.98 c 0,26,27 592.869 1166.86 l 0,28,29 624.375 1179.09 624.375 1179.09 649.739 1205.4 c 0,30,31 649.739 1146.18 649.739 1146.18 606.5 1124.09 c 0,32,33 565.004 1102.89 565.004 1102.89 511.821 1102.9 c 0,34,35 509.586 1102.9 509.586 1102.9 507.33 1102.94 c 0,36,37 451.4 1103.89 451.4 1103.89 396.88 1119.86 c 0,38,39 342.376 1135.83 342.376 1135.83 319.8 1154.64 c 0,40,41 255.841 1203.55 255.841 1203.55 183.97 1277.78 c 0,42,43 148.579 1314.33 148.579 1314.33 120.359 1314.45 c 0,44,45 96.4207 1314.55 96.4207 1314.55 77.6431 1288.43 c 0,46,47 73.5809 1282.78 73.5809 1282.78 69.7598 1275.9 c 0,48,49 55.6592 1252.4 55.6592 1252.4 61.7695 1242.06 c 0,50,-1 79.1592 1213.86 l 0,51,52 23.9276 1232.27 23.9276 1232.27 23.9089 1277.95 c 0,53,54 23.9056 1285.91 23.9056 1285.91 25.5801 1294.7 c 0,55,56 39.6797 1394.34 39.6797 1394.34 120.989 1389.17 c 0,57,58 193.089 1388.53 l 0,59,60 239.478 1390.61 239.478 1390.61 286.899 1399.04 c 0,61,62 312.279 1402.81 312.279 1402.81 340.949 1431.47 c 0,63,64 359.124 1449.64 359.124 1449.64 359.356 1462.34 c 0,65,66 356.047 1472.51 l 0,67,68 355.007 1473.89 355.007 1473.89 353.64 1475.18 c 0,69,70 337.706 1489.73 337.706 1489.73 322.537 1489.73 c 0,71,72 317.125 1489.72 317.125 1489.72 311.81 1487.87 c 0,73,74 291.561 1480.81 291.561 1480.81 266.22 1468.6 c 0,75,76 300.537 1530.26 300.537 1530.26 335.576 1530.55 c 0,77,78 347.721 1530.65 347.721 1530.65 359.953 1523.37 c 0,79,80 369.46 1517.72 369.46 1517.72 379.02 1507.61 c 0,81,82 436.376 1446.96 436.376 1446.96 484.3 1411.26 c 0,83,84 553.867 1357.67 553.867 1357.67 683.109 1347.34 c 0,85,86 812.359 1337 812.359 1337 859.359 1378.36 c 0,87,88 867.431 1385.58 867.431 1385.58 867.823 1392.61 c 0,89,90 864.543 1402.45 l 0,91,92 861.995 1405.94 861.995 1405.94 857.479 1409.38 c 0,93,94 834.929 1424.89 834.929 1424.89 819.247 1425.07 c 0,95,96 814.01 1425.13 814.01 1425.13 809.54 1423.48 c 0,97,98 791.682 1416.9 791.682 1416.9 768.18 1400.92 c 0,99,100 771.939 1442.27 771.939 1442.27 816.119 1460.14 c 0,101,102 826.07 1464.56 826.07 1464.56 840.359 1464.58 c 0,103,104 862.506 1464.6 862.506 1464.6 895.08 1454.03 c 0,105,106 948.721 1436.62 948.721 1436.62 1012.11 1421.13 c 0,107,108 1066.09 1407.93 1066.09 1407.93 1120.42 1408.01 c 0,109,110 1129.95 1408.02 1129.95 1408.02 1139.48 1408.44 c 0,111,112 1203.41 1411.26 1203.41 1411.26 1250.4 1462.02 c 0,113,114 1273.28 1487.06 1273.28 1487.06 1273.56 1512.89 c 0,115,116 1269.86 1534.57 l 0,117,118 1262.91 1554.47 1262.91 1554.47 1242.88 1574.82 c 0,119,120 1303.99 1552.26 1303.99 1552.26 1304.45 1508.55 c 0,121,122 1300.89 1474.26 l 0,123,124 1294.94 1446.53 1294.94 1446.53 1279.07 1417.37 c 0,125,126 1253.26 1369.95 1253.26 1369.95 1217.5 1328.07 c 0,127,128 1181.77 1286.22 1181.77 1286.22 1172.38 1268.38 c 0,129,130 1140.42 1213.86 1140.42 1213.86 1139.01 1170.62 c 0,131,132 1137.7 1130.33 1137.7 1130.33 1062.53 1130.03 c 0,133,134 1057.02 1130.01 1057.02 1130.01 1051.12 1130.2 c 0,135,136 1087.78 1145.25 1087.78 1145.25 1105.64 1177.2 c 0,137,138 1112.71 1189.84 1112.71 1189.84 1113.01 1198.95 c 0,139,140 1110.36 1209.59 l 0,141,142 1106.73 1215.37 1106.73 1215.37 1098.12 1218.56 c 0,143,144 1082.16 1223.88 1082.16 1223.88 1067.74 1223.88 c 0,145,146 1010.8 1223.89 1010.8 1223.89 977.8 1141.01 c 0,147,148 954.788 1083.22 954.788 1083.22 954.764 1055.55 c 0,149,150 954.744 1033.48 954.744 1033.48 969.34 1030.56 c 0,151,152 996.981 1028.25 l 0,153,154 1025.07 1030.62 1025.07 1030.62 1025.74 1058.29 c 0,155,156 1022.83 1084.53 l 0,157,158 1017.29 1104.61 1017.29 1104.61 1001.3 1117.04 c 0,159,160 1045.49 1104.81 1045.49 1104.81 1055.82 1074.74 c 0,161,162 1069.92 1026.8 1069.92 1026.8 1043.13 1001.42 c 0,163,164 1016.33 976.035 1016.33 976.035 977.33 955.36 c 0,165,166 938.317 934.68 938.317 934.68 903.069 909.301 c 0,167,168 867.819 883.919 867.819 883.919 866.88 836.92 c 0,169,170 869.21 820.455 l 0,171,172 874.76 806.996 874.76 806.996 893.248 806.83 c 0,173,174 904.345 806.73 904.345 806.73 920.103 811.419 c 0,175,176 925.633 813.065 925.633 813.065 931.739 815.301 c 0,177,178 921.4 781.459 921.4 781.459 890.85 765.48 c 0,179,180 860.294 749.498 860.294 749.498 834.92 741.98 c 0,181,182 752.2 716.601 752.2 716.601 665.72 623.54 c 0,183,184 579.239 530.48 579.239 530.48 534.119 428.021 c 0,185,186 501.638 354.259 501.638 354.259 501.553 290.485 c 0,187,188 501.519 265.672 501.519 265.672 506.39 242.37 c 0,189,190 523.779 159.181 523.779 159.181 648.8 153.54 c 0,191,192 669.809 155.334 l 0,193,194 691.55 161.305 691.55 161.305 705.199 185.03 c 0,195,196 714.026 200.372 714.026 200.372 714.019 213.929 c 0,197,198 714.011 230.69 714.011 230.69 700.5 244.721 c 0,199,200 677 266.341 677 266.341 647.39 254.591 c 0,201,202 617.78 242.842 617.78 242.842 599.92 223.101 c 0,203,204 612.578 307.278 612.578 307.278 662.312 307.291 c 0,205,206 686.442 307.297 686.442 307.297 719.3 287.49 c 0,207,208 819.881 226.859 819.881 226.859 873.46 205.24 c 0,209,210 1050.18 130.04 1050.18 130.04 1130.55 138.5 c 0,211,212 1210.92 146.96 1210.92 146.96 1320.9 250.36 c 0,213,214 1320.9 166.696 1320.9 166.696 1232.54 108.42 c 0,215,216 1144.17 50.1396 1144.17 50.1396 1078.38 44.5 c 0,217,218 1005.06 38.8605 1005.06 38.8605 931.739 57.6602 c 0,219,220 858.42 76.46 858.42 76.46 804.84 35.1006 c 0,221,222 792.66 26.0785 792.66 26.0785 792.604 15.9739 c 0,223,224 792.542 5.02315 792.542 5.02315 806.72 -7.19922 c 0,225,226 835.859 -33.5195 835.859 -33.5195 850.899 -26.4697 c 0,227,-1 888.5 -9.08008 l 0,228,229 866.88 -104.96 866.88 -104.96 768.18 -48.5596 c 0,230,231 669.478 7.84116 669.478 7.84116 626.239 20.0605 c 0,232,233 557.619 38.8602 557.619 38.8602 496.05 74.5801 c 0,234,235 434.479 110.301 434.479 110.301 388.42 68 c 0,236,237 375.162 55.7245 375.162 55.7245 375.242 43.7057 c 0,238,239 375.315 32.7157 375.315 32.7157 386.54 21.9404 c 0,240,241 415.681 -10.96 415.681 -10.96 455.159 21 c 0,242,243 455.159 -16.5997 455.159 -16.5997 407.689 -25.5293 c 0,244,245 371.209 -28.8155 l 0,246,247 347.38 -28.2343 347.38 -28.2343 329.199 -19.4199 c 0,248,249 316.039 -13.7793 316.039 -13.7793 275.619 18.1807 c 0,250,251 235.197 50.1417 235.197 50.1417 192.43 69.8809 c 0,252,253 149.659 89.6201 149.659 89.6201 116.76 77.4004 c 0,254,255 83.8595 65.1806 83.8595 65.1806 86.6797 -17.54 c 0,256,257 87.6191 -62.6592 87.6191 -62.6592 136.029 -74.8799 c 0,258,259 184.439 -87.0996 184.439 -87.0996 229.56 -74.8799 c 0,260,261 197.553 -106.429 197.553 -106.429 157.984 -106.507 c 0,262,263 116.206 -106.589 116.206 -106.589 66 -71.5898 c 0,264,265 -31.7607 -3.4394 -31.7607 -3.4394 35.9199 107.48 c 0,266,267 104.54 216.521 104.54 216.521 216.399 287.021 c 0,268,269 328.261 357.522 328.261 357.522 393.119 468.44 c 0,270,271 449.521 564.32 449.521 564.32 501.689 716.601 c 0,272,273 553.859 868.881 553.859 868.881 640.34 885.801 c 0,274,275 617.12 865.821 617.12 865.821 617.166 847.081 c 0,276,277 617.2 833.201 617.2 833.201 630 820 c 0,278,279 634.076 815.747 634.076 815.747 640.206 815.804 c 0,280,281 666.594 816.047 666.594 816.047 731.05 896.141 c 0,282,283 810.479 994.839 810.479 994.839 783.22 1017.4 c 0,0,1 724 1529.7 m 0,147,148 660.063 1537.08 660.063 1537.08 660.1 1572.69 c 0,149,150 660.106 1577.92 660.106 1577.92 661.489 1583.75 c 0,151,152 672.301 1629.34 672.301 1629.34 712.72 1660.36 c 0,153,154 741.575 1683.03 741.575 1683.03 764.646 1683.11 c 0,155,156 794.183 1683.21 794.183 1683.21 814.239 1646.26 c 0,157,158 828.341 1618.06 828.341 1618.06 793.56 1571.53 c 0,159,160 762.282 1529.69 762.282 1529.69 731 1529.27 c 0,161,162 727.499 1529.23 727.499 1529.23 724 1529.7 c 0,147,148 EndSplineSet EndChar EndChars EndSplineFont reportlab-3.5.34/src/reportlab/graphics/0000775000175000017500000000000013607302651020760 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/graphics/renderPDF.py0000664000175000017500000003525513554340114023152 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/renderPDF.py # renderPDF - draws Drawings onto a canvas __version__='3.3.0' __doc__="""Render Drawing objects within others PDFs or standalone Usage:: import renderpdf renderpdf.draw(drawing, canvas, x, y) Execute the script to see some test drawings. changed """ from reportlab.graphics.shapes import * from reportlab.pdfgen.canvas import Canvas from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.lib.utils import getBytesIO from reportlab import ascii, rl_config from reportlab.graphics.renderbase import Renderer, StateTracker, getStateDelta, renderScaledDrawing, STATE_DEFAULTS # the main entry point for users... def draw(drawing, canvas, x, y, showBoundary=rl_config._unset_): """As it says""" R = _PDFRenderer() R.draw(renderScaledDrawing(drawing), canvas, x, y, showBoundary=showBoundary) class _PDFRenderer(Renderer): """This draws onto a PDF document. It needs to be a class rather than a function, as some PDF-specific state tracking is needed outside of the state info in the SVG model.""" def __init__(self): self._stroke = 0 self._fill = 0 def drawNode(self, node): """This is the recursive method called for each node in the tree""" #print "pdf:drawNode", self #if node.__class__ is Wedge: stop if not (isinstance(node, Path) and node.isClipPath): self._canvas.saveState() #apply state changes deltas = getStateDelta(node) self._tracker.push(deltas) self.applyStateChanges(deltas, {}) #draw the object, or recurse self.drawNodeDispatcher(node) self._tracker.pop() if not (isinstance(node, Path) and node.isClipPath): self._canvas.restoreState() def drawRect(self, rect): if rect.rx == rect.ry == 0: #plain old rectangle self._canvas.rect( rect.x, rect.y, rect.width, rect.height, stroke=self._stroke, fill=self._fill ) else: #cheat and assume ry = rx; better to generalize #pdfgen roundRect function. TODO self._canvas.roundRect( rect.x, rect.y, rect.width, rect.height, rect.rx, fill=self._fill, stroke=self._stroke ) def drawImage(self, image): path = image.path # currently not implemented in other renderers if path and (hasattr(path,'mode') or os.path.exists(image.path)): self._canvas.drawInlineImage( path, image.x, image.y, image.width, image.height ) def drawLine(self, line): if self._stroke: self._canvas.line(line.x1, line.y1, line.x2, line.y2) def drawCircle(self, circle): self._canvas.circle( circle.cx, circle.cy, circle.r, fill=self._fill, stroke=self._stroke, ) def drawPolyLine(self, polyline): if self._stroke: assert len(polyline.points) >= 2, 'Polyline must have 2 or more points' head, tail = polyline.points[0:2], polyline.points[2:], path = self._canvas.beginPath() path.moveTo(head[0], head[1]) for i in range(0, len(tail), 2): path.lineTo(tail[i], tail[i+1]) self._canvas.drawPath(path) def drawWedge(self, wedge): if wedge.annular: self.drawPath(wedge.asPolygon()) else: centerx, centery, radius, startangledegrees, endangledegrees = \ wedge.centerx, wedge.centery, wedge.radius, wedge.startangledegrees, wedge.endangledegrees yradius, radius1, yradius1 = wedge._xtraRadii() if yradius is None: yradius = radius angle = endangledegrees-startangledegrees path = self._canvas.beginPath() if (radius1==0 or radius1 is None) and (yradius1==0 or yradius1 is None): path.moveTo(centerx, centery) path.arcTo(centerx-radius, centery-yradius, centerx+radius, centery+yradius, startangledegrees, angle) else: path.arc(centerx-radius, centery-yradius, centerx+radius, centery+yradius, startangledegrees, angle) path.arcTo(centerx-radius1, centery-yradius1, centerx+radius1, centery+yradius1, endangledegrees, -angle) path.close() self._canvas.drawPath(path, fill=self._fill, stroke=self._stroke, ) def drawEllipse(self, ellipse): #need to convert to pdfgen's bounding box representation x1 = ellipse.cx - ellipse.rx x2 = ellipse.cx + ellipse.rx y1 = ellipse.cy - ellipse.ry y2 = ellipse.cy + ellipse.ry self._canvas.ellipse(x1,y1,x2,y2,fill=self._fill,stroke=self._stroke) def drawPolygon(self, polygon): assert len(polygon.points) >= 2, 'Polyline must have 2 or more points' head, tail = polygon.points[0:2], polygon.points[2:], path = self._canvas.beginPath() path.moveTo(head[0], head[1]) for i in range(0, len(tail), 2): path.lineTo(tail[i], tail[i+1]) path.close() self._canvas.drawPath( path, stroke=self._stroke, fill=self._fill, ) def drawString(self, stringObj): if self._fill: S = self._tracker.getState() text_anchor, x, y, text, enc = S['textAnchor'], stringObj.x,stringObj.y,stringObj.text, stringObj.encoding if not text_anchor in ['start','inherited']: font, font_size = S['fontName'], S['fontSize'] textLen = stringWidth(text, font, font_size, enc) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen*0.5 elif text_anchor=='numeric': x -= numericXShift(text_anchor,text,textLen,font,font_size,enc) else: raise ValueError('bad value for textAnchor '+str(text_anchor)) t = self._canvas.beginText(x,y) t.textLine(text) self._canvas.drawText(t) def drawPath(self, path): from reportlab.graphics.shapes import _renderPath pdfPath = self._canvas.beginPath() drawFuncs = (pdfPath.moveTo, pdfPath.lineTo, pdfPath.curveTo, pdfPath.close) autoclose = getattr(path,'autoclose','') fill = self._fill stroke = self._stroke isClosed = _renderPath(path, drawFuncs, forceClose=fill and autoclose=='pdf') dP = self._canvas.drawPath cP = self._canvas.clipPath if path.isClipPath else dP fillMode = getattr(path,'fillMode',None) if autoclose=='svg': if fill and stroke and not isClosed: cP(pdfPath, fill=fill, stroke=0) dP(pdfPath, stroke=stroke, fill=0, fillMode=fillMode) else: cP(pdfPath, fill=fill, stroke=stroke, fillMode=fillMode) elif autoclose=='pdf': cP(pdfPath, fill=fill, stroke=stroke, fillMode=fillMode) else: #our old broken default if not isClosed: fill = 0 cP(pdfPath, fill=fill, stroke=stroke, fillMode=fillMode) def setStrokeColor(self,c): self._canvas.setStrokeColor(c) def setFillColor(self,c): self._canvas.setFillColor(c) def applyStateChanges(self, delta, newState): """This takes a set of states, and outputs the PDF operators needed to set those properties""" for key, value in (sorted(delta.items()) if rl_config.invariant else delta.items()): if key == 'transform': self._canvas.transform(value[0], value[1], value[2], value[3], value[4], value[5]) elif key == 'strokeColor': #this has different semantics in PDF to SVG; #we always have a color, and either do or do #not apply it; in SVG one can have a 'None' color if value is None: self._stroke = 0 else: self._stroke = 1 self.setStrokeColor(value) elif key == 'strokeWidth': self._canvas.setLineWidth(value) elif key == 'strokeLineCap': #0,1,2 self._canvas.setLineCap(value) elif key == 'strokeLineJoin': self._canvas.setLineJoin(value) # elif key == 'stroke_dasharray': # self._canvas.setDash(array=value) elif key == 'strokeDashArray': if value: if isinstance(value,(list,tuple)) and len(value)==2 and isinstance(value[1],(tuple,list)): phase = value[0] value = value[1] else: phase = 0 self._canvas.setDash(value,phase) else: self._canvas.setDash() elif key == 'fillColor': #this has different semantics in PDF to SVG; #we always have a color, and either do or do #not apply it; in SVG one can have a 'None' color if value is None: self._fill = 0 else: self._fill = 1 self.setFillColor(value) elif key in ['fontSize', 'fontName']: # both need setting together in PDF # one or both might be in the deltas, # so need to get whichever is missing fontname = delta.get('fontName', self._canvas._fontname) fontsize = delta.get('fontSize', self._canvas._fontsize) self._canvas.setFont(fontname, fontsize) elif key=='fillOpacity': if value is not None: self._canvas.setFillAlpha(value) elif key=='strokeOpacity': if value is not None: self._canvas.setStrokeAlpha(value) elif key=='fillOverprint': self._canvas.setFillOverprint(value) elif key=='strokeOverprint': self._canvas.setStrokeOverprint(value) elif key=='overprintMask': self._canvas.setOverprintMask(value) elif key=='fillMode': self._canvas._fillMode = value from reportlab.platypus import Flowable class GraphicsFlowable(Flowable): """Flowable wrapper around a Pingo drawing""" def __init__(self, drawing): self.drawing = drawing self.width = self.drawing.width self.height = self.drawing.height def draw(self): draw(self.drawing, self.canv, 0, 0) def drawToFile(d, fn, msg="", showBoundary=rl_config._unset_, autoSize=1, canvasKwds={}): """Makes a one-page PDF with just the drawing. If autoSize=1, the PDF will be the same size as the drawing; if 0, it will place the drawing on an A4 page with a title above it - possibly overflowing if too big.""" d = renderScaledDrawing(d) for x in ('Name','Size'): a = 'initialFont'+x canvasKwds[a] = getattr(d,a,canvasKwds.pop(a,STATE_DEFAULTS['font'+x])) c = Canvas(fn,**canvasKwds) if msg: c.setFont(rl_config.defaultGraphicsFontName, 36) c.drawString(80, 750, msg) c.setTitle(msg) if autoSize: c.setPageSize((d.width, d.height)) draw(d, c, 0, 0, showBoundary=showBoundary) else: #show with a title c.setFont(rl_config.defaultGraphicsFontName, 12) y = 740 i = 1 y = y - d.height draw(d, c, 80, y, showBoundary=showBoundary) c.showPage() c.save() if sys.platform=='mac' and not hasattr(fn, "write"): try: import macfs, macostools macfs.FSSpec(fn).SetCreatorType("CARO", "PDF ") macostools.touched(fn) except: pass def drawToString(d, msg="", showBoundary=rl_config._unset_,autoSize=1,canvasKwds={}): "Returns a PDF as a string in memory, without touching the disk" s = getBytesIO() drawToFile(d, s, msg=msg, showBoundary=showBoundary,autoSize=autoSize, canvasKwds=canvasKwds) return s.getvalue() ######################################################### # # test code. First, define a bunch of drawings. # Routine to draw them comes at the end. # ######################################################### def test(outDir='pdfout',shout=False): from reportlab.graphics.shapes import _baseGFontName, _baseGFontNameBI from reportlab.rl_config import verbose import os if not os.path.isdir(outDir): os.mkdir(outDir) fn = os.path.join(outDir,'renderPDF.pdf') c = Canvas(fn) c.setFont(_baseGFontName, 36) c.drawString(80, 750, 'Graphics Test') # print all drawings and their doc strings from the test # file #grab all drawings from the test module from reportlab.graphics import testshapes drawings = [] for funcname in dir(testshapes): if funcname[0:10] == 'getDrawing': func = getattr(testshapes,funcname) drawing = func() #execute it docstring = getattr(func,'__doc__','') drawings.append((drawing, docstring)) #print in a loop, with their doc strings c.setFont(_baseGFontName, 12) y = 740 i = 1 for (drawing, docstring) in drawings: assert (docstring is not None), "Drawing %d has no docstring!" % i if y < 300: #allows 5-6 lines of text c.showPage() y = 740 # draw a title y = y - 30 c.setFont(_baseGFontNameBI,12) c.drawString(80, y, 'Drawing %d' % i) c.setFont(_baseGFontName,12) y = y - 14 textObj = c.beginText(80, y) textObj.textLines(docstring) c.drawText(textObj) y = textObj.getY() y = y - drawing.height draw(drawing, c, 80, y) i = i + 1 if y!=740: c.showPage() c.save() if shout or verbose>2: print('saved %s' % ascii(fn)) if __name__=='__main__': test(shout=True) import sys if len(sys.argv)>1: outdir = sys.argv[1] else: outdir = 'pdfout' test(outdir,shout=True) #testFlowable() reportlab-3.5.34/src/reportlab/graphics/renderPM.py0000664000175000017500000006666213544671343023075 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history www.reportlab.co.uk/rl-cgi/viewcvs.cgi/rlextra/graphics/Csrc/renderPM/renderP.py __version__='3.3.0' __doc__="""Render drawing objects in common bitmap formats Usage:: from reportlab.graphics import renderPM renderPM.drawToFile(drawing,filename,fmt='GIF',configPIL={....}) Other functions let you create a PM drawing as string or into a PM buffer. Execute the script to see some test drawings.""" from reportlab.graphics.shapes import * from reportlab.graphics.renderbase import StateTracker, getStateDelta, renderScaledDrawing from reportlab.pdfbase.pdfmetrics import getFont, unicode2T1 from math import sin, cos, pi, ceil from reportlab.lib.utils import getStringIO, getBytesIO, open_and_read, isUnicode from reportlab import rl_config, ascii class RenderPMError(Exception): pass import os, sys try: from reportlab.graphics import _renderPM except ImportError as errMsg: raise ImportError("""No module named _renderPM\nit may be badly or not installed! You may need to install development tools or seek advice at the users list see https://pairlist2.pair.net/mailman/listinfo/reportlab-users""") def _getImage(): try: from PIL import Image except ImportError: import Image return Image def Color2Hex(c): #assert isinstance(colorobj, colors.Color) #these checks don't work well RGB if c: return ((0xFF&int(255*c.red)) << 16) | ((0xFF&int(255*c.green)) << 8) | (0xFF&int(255*c.blue)) return c # the main entry point for users... def draw(drawing, canvas, x, y, showBoundary=rl_config._unset_): """As it says""" R = _PMRenderer() R.draw(renderScaledDrawing(drawing), canvas, x, y, showBoundary=showBoundary) from reportlab.graphics.renderbase import Renderer class _PMRenderer(Renderer): """This draws onto a pix map image. It needs to be a class rather than a function, as some image-specific state tracking is needed outside of the state info in the SVG model.""" def pop(self): self._tracker.pop() self.applyState() def push(self,node): deltas = getStateDelta(node) self._tracker.push(deltas) self.applyState() def applyState(self): s = self._tracker.getState() self._canvas.ctm = s['ctm'] self._canvas.strokeWidth = s['strokeWidth'] alpha = s['strokeOpacity'] if alpha is not None: self._canvas.strokeOpacity = alpha self._canvas.setStrokeColor(s['strokeColor']) self._canvas.lineCap = s['strokeLineCap'] self._canvas.lineJoin = s['strokeLineJoin'] self._canvas.fillMode = s['fillMode'] da = s['strokeDashArray'] if not da: da = None else: if not isinstance(da,(list,tuple)): da = da, if len(da)!=2 or not isinstance(da[1],(list,tuple)): da = 0, da #assume phase of 0 self._canvas.dashArray = da alpha = s['fillOpacity'] if alpha is not None: self._canvas.fillOpacity = alpha self._canvas.setFillColor(s['fillColor']) self._canvas.setFont(s['fontName'], s['fontSize']) def initState(self,x,y): deltas = self._tracker._combined[-1] deltas['transform'] = self._canvas._baseCTM[0:4]+(x,y) self._tracker.push(deltas) self.applyState() def drawNode(self, node): """This is the recursive method called for each node in the tree""" #apply state changes self.push(node) #draw the object, or recurse self.drawNodeDispatcher(node) # restore the state self.pop() def drawRect(self, rect): c = self._canvas if rect.rx == rect.ry == 0: #plain old rectangle, draw clockwise (x-axis to y-axis) direction c.rect(rect.x,rect.y, rect.width, rect.height) else: c.roundRect(rect.x,rect.y, rect.width, rect.height, rect.rx, rect.ry) def drawLine(self, line): self._canvas.line(line.x1,line.y1,line.x2,line.y2) def drawImage(self, image): path = image.path if isinstance(path,str): if not (path and os.path.isfile(path)): return im = _getImage().open(path).convert('RGB') elif hasattr(path,'convert'): im = path.convert('RGB') else: return srcW, srcH = im.size dstW, dstH = image.width, image.height if dstW is None: dstW = srcW if dstH is None: dstH = srcH self._canvas._aapixbuf( image.x, image.y, dstW, dstH, (im.tobytes if hasattr(im,'tobytes') else im.tostring)(), srcW, srcH, 3, ) def drawCircle(self, circle): c = self._canvas c.circle(circle.cx,circle.cy, circle.r) c.fillstrokepath() def drawPolyLine(self, polyline, _doClose=0): P = polyline.points assert len(P) >= 2, 'Polyline must have 1 or more points' c = self._canvas c.pathBegin() c.moveTo(P[0], P[1]) for i in range(2, len(P), 2): c.lineTo(P[i], P[i+1]) if _doClose: c.pathClose() c.pathFill() c.pathStroke() def drawEllipse(self, ellipse): c=self._canvas c.ellipse(ellipse.cx, ellipse.cy, ellipse.rx,ellipse.ry) c.fillstrokepath() def drawPolygon(self, polygon): self.drawPolyLine(polygon,_doClose=1) def drawString(self, stringObj): canv = self._canvas fill = canv.fillColor if fill is not None: S = self._tracker.getState() text_anchor = S['textAnchor'] fontName = S['fontName'] fontSize = S['fontSize'] text = stringObj.text x = stringObj.x y = stringObj.y if not text_anchor in ['start','inherited']: textLen = stringWidth(text, fontName,fontSize) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen/2 elif text_anchor=='numeric': x -= numericXShift(text_anchor,text,textLen,fontName,fontSize,stringObj.encoding) else: raise ValueError('bad value for textAnchor '+str(text_anchor)) canv.drawString(x,y,text,_fontInfo=(fontName,fontSize)) def drawPath(self, path): c = self._canvas if path is EmptyClipPath: del c._clipPaths[-1] if c._clipPaths: P = c._clipPaths[-1] icp = P.isClipPath P.isClipPath = 1 self.drawPath(P) P.isClipPath = icp else: c.clipPathClear() return from reportlab.graphics.shapes import _renderPath drawFuncs = (c.moveTo, c.lineTo, c.curveTo, c.pathClose) autoclose = getattr(path,'autoclose','') def rP(forceClose=False): c.pathBegin() return _renderPath(path, drawFuncs, forceClose=forceClose) if path.isClipPath: rP() c.clipPathSet() c._clipPaths.append(path) fill = c.fillColor is not None stroke = c.strokeColor is not None fillMode = getattr(path,'fillMode',-1) if autoclose=='svg': if fill and stroke: rP(forceClose=True) c.pathFill(fillMode) rP() c.pathStroke() elif fill: rP(forceClose=True) c.pathFill(fillMode) elif stroke: rP() c.pathStroke() elif autoclose=='pdf': rP(forceClose=True) if fill: c.pathFill(fillMode) if stroke: c.pathStroke() else: if rP(): c.pathFill(fillMode) c.pathStroke() def _setFont(gs,fontName,fontSize): try: gs.setFont(fontName,fontSize) except ValueError as e: if not e.args[0].endswith("Can't find font!"): raise #here's where we try to add a font to the canvas try: f = getFont(fontName) _renderPM.makeT1Font(fontName,f.face.findT1File(),f.encoding.vector,open_and_read) except: s1, s2 = list(map(str,sys.exc_info()[:2])) raise RenderPMError("Can't setFont(%s) missing the T1 files?\nOriginally %s: %s" % (fontName,s1,s2)) gs.setFont(fontName,fontSize) def _convert2pilp(im): Image = _getImage() return im.convert("P", dither=Image.NONE, palette=Image.ADAPTIVE) def _convert2pilL(im): return im.convert("L") def _convert2pil1(im): return im.convert("1") def _saveAsPICT(im,fn,fmt,transparent=None): im = _convert2pilp(im) cols, rows = im.size #s = _renderPM.pil2pict(cols,rows,im.tostring(),im.im.getpalette(),transparent is not None and Color2Hex(transparent) or -1) s = _renderPM.pil2pict(cols,rows,(im.tobytes if hasattr(im,'tobytes') else im.tostring)(),im.im.getpalette()) if not hasattr(fn,'write'): with open(os.path.splitext(fn)[0]+'.'+fmt.lower(),'wb') as f: f.write(s) if os.name=='mac': from reportlab.lib.utils import markfilename markfilename(fn,ext='PICT') else: fn.write(s) BEZIER_ARC_MAGIC = 0.5522847498 #constant for drawing circular arcs w/ Beziers class PMCanvas: def __init__(self,w,h,dpi=72,bg=0xffffff,configPIL=None): '''configPIL dict is passed to image save method''' scale = dpi/72.0 w = int(w*scale+0.5) h = int(h*scale+0.5) self.__dict__['_gs'] = _renderPM.gstate(w,h,bg=bg) self.__dict__['_bg'] = bg self.__dict__['_baseCTM'] = (scale,0,0,scale,0,0) self.__dict__['_clipPaths'] = [] self.__dict__['configPIL'] = configPIL self.__dict__['_dpi'] = dpi self.ctm = self._baseCTM def _drawTimeResize(self,w,h,bg=None): if bg is None: bg = self._bg self._drawing.width, self._drawing.height = w, h A = {'ctm':None, 'strokeWidth':None, 'strokeColor':None, 'lineCap':None, 'lineJoin':None, 'dashArray':None, 'fillColor':None} gs = self._gs fN,fS = gs.fontName, gs.fontSize for k in A.keys(): A[k] = getattr(gs,k) del gs, self._gs gs = self.__dict__['_gs'] = _renderPM.gstate(w,h,bg=bg) for k in A.keys(): setattr(self,k,A[k]) gs.setFont(fN,fS) def toPIL(self): im = _getImage().new('RGB', size=(self._gs.width, self._gs.height)) getattr(im,'frombytes',getattr(im,'fromstring'))(self._gs.pixBuf) return im def saveToFile(self,fn,fmt=None): im = self.toPIL() if fmt is None: if not isinstance(fn,str): raise ValueError("Invalid value '%s' for fn when fmt is None" % ascii(fn)) fmt = os.path.splitext(fn)[1] if fmt.startswith('.'): fmt = fmt[1:] configPIL = self.configPIL or {} configPIL.setdefault('preConvertCB',None) preConvertCB=configPIL.pop('preConvertCB') if preConvertCB: im = preConvertCB(im) fmt = fmt.upper() if fmt in ('GIF',): im = _convert2pilp(im) elif fmt in ('TIFF','TIFFP','TIFFL','TIF','TIFF1'): if fmt.endswith('P'): im = _convert2pilp(im) elif fmt.endswith('L'): im = _convert2pilL(im) elif fmt.endswith('1'): im = _convert2pil1(im) fmt='TIFF' elif fmt in ('PCT','PICT'): return _saveAsPICT(im,fn,fmt,transparent=configPIL.get('transparent',None)) elif fmt in ('PNG','BMP', 'PPM'): if fmt=='PNG': try: from PIL import PngImagePlugin except ImportError: import PngImagePlugin elif fmt=='BMP': try: from PIL import BmpImagePlugin except ImportError: import BmpImagePlugin elif fmt in ('JPG','JPEG'): fmt = 'JPEG' elif fmt in ('GIF',): pass else: raise RenderPMError("Unknown image kind %s" % fmt) if fmt=='TIFF': tc = configPIL.get('transparent',None) if tc: from PIL import ImageChops, Image T = 768*[0] for o, c in zip((0,256,512), tc.bitmap_rgb()): T[o+c] = 255 #if isinstance(fn,str): ImageChops.invert(im.point(T).convert('L').point(255*[0]+[255])).save(fn+'_mask.gif','GIF') im = Image.merge('RGBA', im.split()+(ImageChops.invert(im.point(T).convert('L').point(255*[0]+[255])),)) #if isinstance(fn,str): im.save(fn+'_masked.gif','GIF') for a,d in ('resolution',self._dpi),('resolution unit','inch'): configPIL[a] = configPIL.get(a,d) configPIL.setdefault('chops_invert',0) if configPIL.pop('chops_invert'): from PIL import ImageChops im = ImageChops.invert(im) configPIL.setdefault('preSaveCB',None) preSaveCB=configPIL.pop('preSaveCB') if preSaveCB: im = preSaveCB(im) im.save(fn,fmt,**configPIL) if not hasattr(fn,'write') and os.name=='mac': from reportlab.lib.utils import markfilename markfilename(fn,ext=fmt) def saveToString(self,fmt='GIF'): s = getBytesIO() self.saveToFile(s,fmt=fmt) return s.getvalue() def _saveToBMP(self,f): ''' Niki Spahiev, , asserts that this is a respectable way to get BMP without PIL f is a file like object to which the BMP is written ''' import struct gs = self._gs pix, width, height = gs.pixBuf, gs.width, gs.height f.write(struct.pack('=2sLLLLLLhh24x','BM',len(pix)+54,0,54,40,width,height,1,24)) rowb = width * 3 for o in range(len(pix),0,-rowb): f.write(pix[o-rowb:o]) f.write( '\0' * 14 ) def setFont(self,fontName,fontSize,leading=None): _setFont(self._gs,fontName,fontSize) def __setattr__(self,name,value): setattr(self._gs,name,value) def __getattr__(self,name): return getattr(self._gs,name) def fillstrokepath(self,stroke=1,fill=1): if fill: self.pathFill() if stroke: self.pathStroke() def _bezierArcSegmentCCW(self, cx,cy, rx,ry, theta0, theta1): """compute the control points for a bezier arc with theta1-theta0 <= 90. Points are computed for an arc with angle theta increasing in the counter-clockwise (CCW) direction. returns a tuple with starting point and 3 control points of a cubic bezier curve for the curvto opertator""" # Requires theta1 - theta0 <= 90 for a good approximation assert abs(theta1 - theta0) <= 90 cos0 = cos(pi*theta0/180.0) sin0 = sin(pi*theta0/180.0) x0 = cx + rx*cos0 y0 = cy + ry*sin0 cos1 = cos(pi*theta1/180.0) sin1 = sin(pi*theta1/180.0) x3 = cx + rx*cos1 y3 = cy + ry*sin1 dx1 = -rx * sin0 dy1 = ry * cos0 #from pdfgeom halfAng = pi*(theta1-theta0)/(2.0 * 180.0) k = abs(4.0 / 3.0 * (1.0 - cos(halfAng) ) /(sin(halfAng)) ) x1 = x0 + dx1 * k y1 = y0 + dy1 * k dx2 = -rx * sin1 dy2 = ry * cos1 x2 = x3 - dx2 * k y2 = y3 - dy2 * k return ((x0,y0), ((x1,y1), (x2,y2), (x3,y3)) ) def bezierArcCCW(self, cx,cy, rx,ry, theta0, theta1): """return a set of control points for Bezier approximation to an arc with angle increasing counter clockwise. No requirement on (theta1-theta0) <= 90 However, it must be true that theta1-theta0 > 0.""" # I believe this is also clockwise # pretty much just like Robert Kern's pdfgeom.BezierArc angularExtent = theta1 - theta0 # break down the arc into fragments of <=90 degrees if abs(angularExtent) <= 90.0: # we just need one fragment angleList = [(theta0,theta1)] else: Nfrag = int( ceil( abs(angularExtent)/90.) ) fragAngle = float(angularExtent)/ Nfrag # this could be negative angleList = [] for ii in range(Nfrag): a = theta0 + ii * fragAngle b = a + fragAngle # hmm.. is I wonder if this is precise enought angleList.append((a,b)) ctrlpts = [] for (a,b) in angleList: if not ctrlpts: # first time [(x0,y0), pts] = self._bezierArcSegmentCCW(cx,cy, rx,ry, a,b) ctrlpts.append(pts) else: [(tmpx,tmpy), pts] = self._bezierArcSegmentCCW(cx,cy, rx,ry, a,b) ctrlpts.append(pts) return ((x0,y0), ctrlpts) def addEllipsoidalArc(self, cx,cy, rx, ry, ang1, ang2): """adds an ellisesoidal arc segment to a path, with an ellipse centered on cx,cy and with radii (major & minor axes) rx and ry. The arc is drawn in the CCW direction. Requires: (ang2-ang1) > 0""" ((x0,y0), ctrlpts) = self.bezierArcCCW(cx,cy, rx,ry,ang1,ang2) self.lineTo(x0,y0) for ((x1,y1), (x2,y2),(x3,y3)) in ctrlpts: self.curveTo(x1,y1,x2,y2,x3,y3) def drawCentredString(self, x, y, text, text_anchor='middle'): if self.fillColor is not None: textLen = stringWidth(text, self.fontName,self.fontSize) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen/2. elif text_anchor=='numeric': x -= numericXShift(text_anchor,text,textLen,self.fontName,self.fontSize) self.drawString(x,y,text) def drawRightString(self, text, x, y): self.drawCentredString(text,x,y,text_anchor='end') def drawString(self, x, y, text, _fontInfo=None): gs = self._gs if _fontInfo: fontName, fontSize = _fontInfo else: fontSize = gs.fontSize fontName = gs.fontName try: gfont=getFont(gs.fontName) except: gfont = None font = getFont(fontName) if font._dynamicFont: gs.drawString(x,y,text) else: fc = font if not isUnicode(text): try: text = text.decode('utf8') except UnicodeDecodeError as e: i,j = e.args[2:4] raise UnicodeDecodeError(*(e.args[:4]+('%s\n%s-->%s<--%s' % (e.args[4],text[i-10:i],text[i:j],text[j:j+10]),))) FT = unicode2T1(text,[font]+font.substitutionFonts) n = len(FT) nm1 = n-1 for i in range(n): f, t = FT[i] if f!=fc: _setFont(gs,f.fontName,fontSize) fc = f gs.drawString(x,y,t) if i!=nm1: x += f.stringWidth(t.decode(f.encName),fontSize) if font!=fc: _setFont(gs,fontName,fontSize) def line(self,x1,y1,x2,y2): if self.strokeColor is not None: self.pathBegin() self.moveTo(x1,y1) self.lineTo(x2,y2) self.pathStroke() def rect(self,x,y,width,height,stroke=1,fill=1): self.pathBegin() self.moveTo(x, y) self.lineTo(x+width, y) self.lineTo(x+width, y + height) self.lineTo(x, y + height) self.pathClose() self.fillstrokepath(stroke=stroke,fill=fill) def roundRect(self, x, y, width, height, rx,ry): """rect(self, x, y, width, height, rx,ry): Draw a rectangle if rx or rx and ry are specified the corners are rounded with ellipsoidal arcs determined by rx and ry (drawn in the counter-clockwise direction)""" if rx==0: rx = ry if ry==0: ry = rx x2 = x + width y2 = y + height self.pathBegin() self.moveTo(x+rx,y) self.addEllipsoidalArc(x2-rx, y+ry, rx, ry, 270, 360 ) self.addEllipsoidalArc(x2-rx, y2-ry, rx, ry, 0, 90) self.addEllipsoidalArc(x+rx, y2-ry, rx, ry, 90, 180) self.addEllipsoidalArc(x+rx, y+ry, rx, ry, 180, 270) self.pathClose() self.fillstrokepath() def circle(self, cx, cy, r): "add closed path circle with center cx,cy and axes r: counter-clockwise orientation" self.ellipse(cx,cy,r,r) def ellipse(self, cx,cy,rx,ry): """add closed path ellipse with center cx,cy and axes rx,ry: counter-clockwise orientation (remember y-axis increases downward) """ self.pathBegin() # first segment x0 = cx + rx # (x0,y0) start pt y0 = cy x3 = cx # (x3,y3) end pt of arc y3 = cy-ry x1 = cx+rx y1 = cy-ry*BEZIER_ARC_MAGIC x2 = x3 + rx*BEZIER_ARC_MAGIC y2 = y3 self.moveTo(x0, y0) self.curveTo(x1,y1,x2,y2,x3,y3) # next segment x0 = x3 y0 = y3 x3 = cx-rx y3 = cy x1 = cx-rx*BEZIER_ARC_MAGIC y1 = cy-ry x2 = x3 y2 = cy- ry*BEZIER_ARC_MAGIC self.curveTo(x1,y1,x2,y2,x3,y3) # next segment x0 = x3 y0 = y3 x3 = cx y3 = cy+ry x1 = cx-rx y1 = cy+ry*BEZIER_ARC_MAGIC x2 = cx -rx*BEZIER_ARC_MAGIC y2 = cy+ry self.curveTo(x1,y1,x2,y2,x3,y3) #last segment x0 = x3 y0 = y3 x3 = cx+rx y3 = cy x1 = cx+rx*BEZIER_ARC_MAGIC y1 = cy+ry x2 = cx+rx y2 = cy+ry*BEZIER_ARC_MAGIC self.curveTo(x1,y1,x2,y2,x3,y3) self.pathClose() def saveState(self): '''do nothing for compatibility''' pass def setFillColor(self,aColor): self.fillColor = Color2Hex(aColor) alpha = getattr(aColor,'alpha',None) if alpha is not None: self.fillOpacity = alpha def setStrokeColor(self,aColor): self.strokeColor = Color2Hex(aColor) alpha = getattr(aColor,'alpha',None) if alpha is not None: self.strokeOpacity = alpha restoreState = saveState # compatibility routines def setLineCap(self,cap): self.lineCap = cap def setLineJoin(self,join): self.lineJoin = join def setLineWidth(self,width): self.strokeWidth = width def drawToPMCanvas(d, dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_): d = renderScaledDrawing(d) c = PMCanvas(d.width, d.height, dpi=dpi, bg=bg, configPIL=configPIL) draw(d, c, 0, 0, showBoundary=showBoundary) return c def drawToPIL(d, dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_): return drawToPMCanvas(d, dpi=dpi, bg=bg, configPIL=configPIL, showBoundary=showBoundary).toPIL() def drawToPILP(d, dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_): Image = _getImage() im = drawToPIL(d, dpi=dpi, bg=bg, configPIL=configPIL, showBoundary=showBoundary) return im.convert("P", dither=Image.NONE, palette=Image.ADAPTIVE) def drawToFile(d,fn,fmt='GIF', dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_): '''create a pixmap and draw drawing, d to it then save as a file configPIL dict is passed to image save method''' c = drawToPMCanvas(d, dpi=dpi, bg=bg, configPIL=configPIL, showBoundary=showBoundary) c.saveToFile(fn,fmt) def drawToString(d,fmt='GIF', dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_): s = getBytesIO() drawToFile(d,s,fmt=fmt, dpi=dpi, bg=bg, configPIL=configPIL) return s.getvalue() save = drawToFile def test(outDir='pmout', shout=False): def ext(x): if x=='tiff': x='tif' return x #grab all drawings from the test module and write out. #make a page of links in HTML to assist viewing. import os from reportlab.graphics import testshapes from reportlab.rl_config import verbose getAllTestDrawings = testshapes.getAllTestDrawings drawings = [] if not os.path.isdir(outDir): os.mkdir(outDir) htmlTop = """renderPM output results

renderPM results of output

""" htmlBottom = """ """ html = [htmlTop] names = {} argv = sys.argv[1:] E = [a for a in argv if a.startswith('--ext=')] if not E: E = ['gif','tiff', 'png', 'jpg', 'pct', 'py', 'svg'] else: for a in E: argv.remove(a) E = (','.join([a[6:] for a in E])).split(',') errs = [] import traceback from xml.sax.saxutils import escape def handleError(name,fmt): msg = 'Problem drawing %s fmt=%s file'%(name,fmt) if shout or verbose>2: print(msg) errs.append('

%s

' % msg) buf = getStringIO() traceback.print_exc(file=buf) errs.append('
%s
' % escape(buf.getvalue())) #print in a loop, with their doc strings for (drawing, docstring, name) in getAllTestDrawings(doTTF=hasattr(_renderPM,'ft_get_face')): i = names[name] = names.setdefault(name,0)+1 if i>1: name += '.%02d' % (i-1) if argv and name not in argv: continue fnRoot = name w = int(drawing.width) h = int(drawing.height) html.append('

Drawing %s

\n
%s
' % (name, docstring)) for k in E: if k in ['gif','png','jpg','pct']: html.append('

%s format

\n' % k.upper()) try: filename = '%s.%s' % (fnRoot, ext(k)) fullpath = os.path.join(outDir, filename) if os.path.isfile(fullpath): os.remove(fullpath) if k=='pct': from reportlab.lib.colors import white drawToFile(drawing,fullpath,fmt=k,configPIL={'transparent':white}) elif k in ['py','svg']: drawing.save(formats=['py','svg'],outDir=outDir,fnRoot=fnRoot) else: drawToFile(drawing,fullpath,fmt=k) if k in ['gif','png','jpg']: html.append('
\n' % filename) elif k=='py': html.append('python source
\n' % filename) elif k=='svg': html.append('SVG
\n' % filename) if shout or verbose>2: print('wrote %s'%ascii(fullpath)) except AttributeError: handleError(name,k) if os.environ.get('RL_NOEPSPREVIEW','0')=='1': drawing.__dict__['preview'] = 0 for k in ('eps', 'pdf'): try: drawing.save(formats=[k],outDir=outDir,fnRoot=fnRoot) except: handleError(name,k) if errs: html[0] = html[0].replace('',' (errors)') html.append('') html.extend(errs) html.append(htmlBottom) htmlFileName = os.path.join(outDir, 'pm-index.html') with open(htmlFileName, 'w') as f: f.writelines(html) if sys.platform=='mac': from reportlab.lib.utils import markfilename markfilename(htmlFileName,ext='HTML') if shout or verbose>2: print('wrote %s' % htmlFileName) if __name__=='__main__': test(shout=True) reportlab-3.5.34/src/reportlab/graphics/testdrawings.py0000664000175000017500000002233113544671343024060 0ustar rptlabrptlab00000000000000#!/bin/env python #Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/testdrawings.py __version__='3.3.0' __doc__="""Defines some standard drawings to use as test cases This contains a number of routines to generate test drawings for reportlab/graphics. For now they are contrived, but we will expand them to try and trip up any parser. Feel free to add more. """ from reportlab.graphics.shapes import * from reportlab.lib import colors def getDrawing1(): """Hello World, on a rectangular background""" D = Drawing(400, 200) D.add(Rect(50, 50, 300, 100, fillColor=colors.yellow)) #round corners D.add(String(180,100, 'Hello World', fillColor=colors.red)) return D def getDrawing2(): """This demonstrates the basic shapes. There are no groups or references. Each solid shape should have a purple fill.""" D = Drawing(400, 200) #, fillColor=colors.purple) D.add(Line(10,10,390,190)) D.add(Circle(100,100,20, fillColor=colors.purple)) D.add(Circle(200,100,20, fillColor=colors.purple)) D.add(Circle(300,100,20, fillColor=colors.purple)) D.add(Wedge(330,100,40, -10,40, fillColor=colors.purple)) D.add(PolyLine([120,10,130,20,140,10,150,20,160,10, 170,20,180,10,190,20,200,10])) D.add(Polygon([300,20,350,20,390,80,300,75, 330, 40])) D.add(Ellipse(50, 150, 40, 20)) D.add(Rect(120, 150, 60, 30, strokeWidth=10, strokeColor=colors.red, fillColor=colors.yellow)) #square corners D.add(Rect(220, 150, 60, 30, 10, 10)) #round corners D.add(String(10,50, 'Basic Shapes', fillColor=colors.black)) return D ##def getDrawing2(): ## """This drawing uses groups. Each group has two circles and a comment. ## The line style is set at group level and should be red for the left, ## bvlue for the right.""" ## D = Drawing(400, 200) ## ## Group1 = Group() ## ## Group1.add(String(50, 50, 'Group 1', fillColor=colors.black)) ## Group1.add(Circle(75,100,25)) ## Group1.add(Circle(125,100,25)) ## D.add(Group1) ## ## Group2 = Group( ## String(250, 50, 'Group 2', fillColor=colors.black), ## Circle(275,100,25), ## Circle(325,100,25)#, ##def getDrawing2(): ## """This drawing uses groups. Each group has two circles and a comment. ## The line style is set at group level and should be red for the left, ## bvlue for the right.""" ## D = Drawing(400, 200) ## ## Group1 = Group() ## ## Group1.add(String(50, 50, 'Group 1', fillColor=colors.black)) ## Group1.add(Circle(75,100,25)) ## Group1.add(Circle(125,100,25)) ## D.add(Group1) ## ## Group2 = Group( ## String(250, 50, 'Group 2', fillColor=colors.black), ## Circle(275,100,25), ## Circle(325,100,25)#, ## ## #group attributes ## #strokeColor=colors.blue ## ) ## D.add(Group2) ## return D ## ## ##def getDrawing3(): ## """This uses a named reference object. The house is a 'subroutine' ## the basic brick colored walls are defined, but the roof and window ## color are undefined and may be set by the container.""" ## ## D = Drawing(400, 200, fill=colors.bisque) ## ## ## House = Group( ## Rect(2,20,36,30, fill=colors.bisque), #walls ## Polygon([0,20,40,20,20,5]), #roof ## Rect(8, 38, 8, 12), #door ## Rect(25, 38, 8, 7), #window ## Rect(8, 25, 8, 7), #window ## Rect(25, 25, 8, 7) #window ## ## ) ## D.addDef('MyHouse', House) ## ## # one row all the same color ## D.add(String(20, 40, 'British Street...',fill=colors.black)) ## for i in range(6): ## x = i * 50 ## D.add(NamedReference('MyHouse', ## House, ## transform=translate(x, 40), ## fill = colors.brown ## ) ## ) ## ## # now do a row all different ## D.add(String(20, 120, 'Mediterranean Street...',fill=colors.black)) ## x = 0 ## for color in (colors.blue, colors.yellow, colors.orange, ## colors.red, colors.green, colors.chartreuse): ## D.add(NamedReference('MyHouse', ## House, ## transform=translate(x,120), ## fill = color, ## ) ## ) ## x = x + 50 ## #..by popular demand, the mayor gets a big one at the end ## D.add(NamedReference('MyHouse', ## House, ## transform=mmult(translate(x,110), scale(1.2,1.2)), ## fill = color, ## ) ## ) ## ## ## return D ## ##def getDrawing4(): ## """This tests that attributes are 'unset' correctly when ## one steps back out of a drawing node. All the circles are part of a ## group setting the line color to blue; the second circle explicitly ## sets it to red. Ideally, the third circle should go back to blue.""" ## D = Drawing(400, 200) ## ## ## G = Group( ## Circle(100,100,20), ## Circle(200,100,20, stroke=colors.blue), ## Circle(300,100,20), ## stroke=colors.red, ## stroke_width=3, ## fill=colors.aqua ## ) ## D.add(G) ## ## ## D.add(String(10,50, 'Stack Unwinding - should be red, blue, red')) ## ## return D ## ## ##def getDrawing5(): ## """This Rotates Coordinate Axes""" ## D = Drawing(400, 200) ## ## ## ## Axis = Group( ## Line(0,0,100,0), #x axis ## Line(0,0,0,50), # y axis ## Line(0,10,10,10), #ticks on y axis ## Line(0,20,10,20), ## Line(0,30,10,30), ## Line(0,40,10,40), ## Line(10,0,10,10), #ticks on x axis ## Line(20,0,20,10), ## Line(30,0,30,10), ## Line(40,0,40,10), ## Line(50,0,50,10), ## Line(60,0,60,10), ## Line(70,0,70,10), ## Line(80,0,80,10), ## Line(90,0,90,10), ## String(20, 35, 'Axes', fill=colors.black) ## ) ## ## D.addDef('Axes', Axis) ## ## D.add(NamedReference('Axis', Axis, ## transform=translate(10,10))) ## D.add(NamedReference('Axis', Axis, ## transform=mmult(translate(150,10),rotate(15))) ## ) ## return D ## ##def getDrawing6(): ## """This Rotates Text""" ## D = Drawing(400, 300, fill=colors.black) ## ## xform = translate(200,150) ## C = (colors.black,colors.red,colors.green,colors.blue,colors.brown,colors.gray, colors.pink, ## colors.lavender,colors.lime, colors.mediumblue, colors.magenta, colors.limegreen) ## ## for i in range(12): ## D.add(String(0, 0, ' - - Rotated Text', fill=C[i%len(C)], transform=mmult(xform, rotate(30*i)))) ## ## return D ## ##def getDrawing7(): ## """This defines and tests a simple UserNode0 (the trailing zero denotes ## an experimental method which is not part of the supported API yet). ## Each of the four charts is a subclass of UserNode which generates a random ## series when rendered.""" ## ## class MyUserNode(UserNode0): ## import whrandom, math ## ## ## def provideNode(self, sender): ## """draw a simple chart that changes everytime it's drawn""" ## # print "here's a random number %s" % self.whrandom.random() ## #print "MyUserNode.provideNode being called by %s" % sender ## g = Group() ## #g._state = self._state # this is naughty ## PingoNode.__init__(g, self._state) # is this less naughty ? ## w = 80.0 ## h = 50.0 ## g.add(Rect(0,0, w, h, stroke=colors.black)) ## N = 10.0 ## x,y = (0,h) ## dx = w/N ## for ii in range(N): ## dy = (h/N) * self.whrandom.random() ## g.add(Line(x,y,x+dx, y-dy)) ## x = x + dx ## y = y - dy ## return g ## ## D = Drawing(400,200, fill=colors.white) # AR - same size as others ## ## D.add(MyUserNode()) ## ## graphcolor= [colors.green, colors.red, colors.brown, colors.purple] ## for ii in range(4): ## D.add(Group( MyUserNode(stroke=graphcolor[ii], stroke_width=2), ## transform=translate(ii*90,0) )) ## ## #un = MyUserNode() ## #print un.provideNode() ## return D ## ##def getDrawing8(): ## """Test Path operations--lineto, curveTo, etc.""" ## D = Drawing(400, 200, fill=None, stroke=colors.purple, stroke_width=2) ## ## xform = translate(200,100) ## C = (colors.black,colors.red,colors.green,colors.blue,colors.brown,colors.gray, colors.pink, ## colors.lavender,colors.lime, colors.mediumblue, colors.magenta, colors.limegreen) ## p = Path(50,50) ## p.lineTo(100,100) ## p.moveBy(-25,25) ## p.curveTo(150,125, 125,125, 200,50) ## p.curveTo(175, 75, 175, 98, 62, 87) ## ## ## D.add(p) ## D.add(String(10,30, 'Tests of path elements-lines and bezier curves-and text formating')) ## D.add(Line(220,150, 220,200, stroke=colors.red)) ## D.add(String(220,180, "Text should be centered", text_anchor="middle") ) ## ## ## return D if __name__=='__main__': print(__doc__) reportlab-3.5.34/src/reportlab/graphics/barcode/0000775000175000017500000000000013607302651022357 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/graphics/barcode/usps.py0000664000175000017500000001761413544671343023743 0ustar rptlabrptlab00000000000000# # Copyright (c) 1996-2000 Tyler C. Sarna # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # from reportlab.lib.units import inch from reportlab.graphics.barcode.common import Barcode from string import digits as string_digits, whitespace as string_whitespace from reportlab.lib.utils import asNative _fim_patterns = { 'A' : "|| | ||", 'B' : "| || || |", 'C' : "|| | | ||", 'D' : "||| | |||", # XXX There is an E. # The below has been seen, but dunno if it is E or not: # 'E' : '|||| ||||' } _postnet_patterns = { '1' : "...||", '2' : "..|.|", '3' : "..||.", '4' : ".|..|", '5' : ".|.|.", '6' : ".||..", '7' : "|...|", '8' : "|..|.", '9' : "|.|..", '0' : "||...", 'S' : "|", } class FIM(Barcode): """ FIM (Facing ID Marks) encode only one letter. There are currently four defined: A Courtesy reply mail with pre-printed POSTNET B Business reply mail without pre-printed POSTNET C Business reply mail with pre-printed POSTNET D OCR Readable mail without pre-printed POSTNET Options that may be passed to constructor: value (single character string from the set A - D. required.): The value to encode. quiet (bool, default 0): Whether to include quiet zones in the symbol. The following may also be passed, but doing so will generate nonstandard symbols which should not be used. This is mainly documented here to show the defaults: barHeight (float, default 5/8 inch): Height of the code. This might legitimately be overriden to make a taller symbol that will 'bleed' off the edge of the paper, leaving 5/8 inch remaining. lquiet (float, default 1/4 inch): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or .15 times the symbol's length. rquiet (float, default 15/32 inch): Quiet zone size to right left of code, if quiet is true. Sources of information on FIM: USPS Publication 25, A Guide to Business Mail Preparation http://new.usps.com/cpim/ftp/pubs/pub25.pdf """ barWidth = inch * (1.0/32.0) spaceWidth = inch * (1.0/16.0) barHeight = inch * (5.0/8.0) rquiet = inch * (0.25) lquiet = inch * (15.0/32.0) quiet = 0 def __init__(self, value='', **args): value = str(value) if isinstance(value,int) else asNative(value) for k, v in args.items(): setattr(self, k, v) Barcode.__init__(self, value) def validate(self): self.valid = 1 self.validated = '' for c in self.value: if c in string_whitespace: continue elif c in "abcdABCD": self.validated = self.validated + c.upper() else: self.valid = 0 if len(self.validated) != 1: raise ValueError("Input must be exactly one character") return self.validated def decompose(self): self.decomposed = '' for c in self.encoded: self.decomposed = self.decomposed + _fim_patterns[c] return self.decomposed def computeSize(self): self._width = (len(self.decomposed) - 1) * self.spaceWidth + self.barWidth if self.quiet: self._width += self.lquiet + self.rquiet self._height = self.barHeight def draw(self): self._calculate() left = self.quiet and self.lquiet or 0 for c in self.decomposed: if c == '|': self.rect(left, 0.0, self.barWidth, self.barHeight) left += self.spaceWidth self.drawHumanReadable() def _humanText(self): return self.value class POSTNET(Barcode): """ POSTNET is used in the US to encode "zip codes" (postal codes) on mail. It can encode 5, 9, or 11 digit codes. I've read that it's pointless to do 5 digits, since USPS will just have to re-print them with 9 or 11 digits. Sources of information on POSTNET: USPS Publication 25, A Guide to Business Mail Preparation http://new.usps.com/cpim/ftp/pubs/pub25.pdf """ quiet = 0 shortHeight = inch * 0.050 barHeight = inch * 0.125 barWidth = inch * 0.018 spaceWidth = inch * 0.0275 def __init__(self, value='', **args): value = str(value) if isinstance(value,int) else asNative(value) for k, v in args.items(): setattr(self, k, v) Barcode.__init__(self, value) def validate(self): self.validated = '' self.valid = 1 count = 0 for c in self.value: if c in (string_whitespace + '-'): pass elif c in string_digits: count = count + 1 if count == 6: self.validated = self.validated + '-' self.validated = self.validated + c else: self.valid = 0 if len(self.validated) not in [5, 10, 12]: self.valid = 0 return self.validated def encode(self): self.encoded = "S" check = 0 for c in self.validated: if c in string_digits: self.encoded = self.encoded + c check = check + int(c) elif c == '-': pass else: raise ValueError("Invalid character in input") check = (10 - check) % 10 self.encoded = self.encoded + repr(check) + 'S' return self.encoded def decompose(self): self.decomposed = '' for c in self.encoded: self.decomposed = self.decomposed + _postnet_patterns[c] return self.decomposed def computeSize(self): self._width = len(self.decomposed) * self.barWidth + (len(self.decomposed) - 1) * self.spaceWidth self._height = self.barHeight def draw(self): self._calculate() sdown = self.barHeight - self.shortHeight left = 0 for c in self.decomposed: if c == '.': h = self.shortHeight else: h = self.barHeight self.rect(left, 0.0, self.barWidth, h) left = left + self.barWidth + self.spaceWidth self.drawHumanReadable() def _humanText(self): return self.encoded[1:-1] reportlab-3.5.34/src/reportlab/graphics/barcode/eanbc.py0000664000175000017500000004473713544671343024027 0ustar rptlabrptlab00000000000000__all__=( 'Ean13BarcodeWidget','isEanString', 'Ean8BarcodeWidget', 'UPCA', 'Ean5BarcodeWidget', 'ISBNBarcodeWidget', ) from reportlab.graphics.shapes import Group, String, Rect from reportlab.lib import colors from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.lib.validators import isNumber, isColor, isString, Validator, isBoolean, NoneOr from reportlab.lib.attrmap import * from reportlab.graphics.charts.areas import PlotArea from reportlab.lib.units import mm from reportlab.lib.utils import asNative #work out a list of manufacturer codes.... _eanNumberSystems = [ ('00-13', 'USA & Canada'), ('20-29', 'In-Store Functions'), ('30-37', 'France'), ('40-44', 'Germany'), ('45', 'Japan (also 49)'), ('46', 'Russian Federation'), ('471', 'Taiwan'), ('474', 'Estonia'), ('475', 'Latvia'), ('477', 'Lithuania'), ('479', 'Sri Lanka'), ('480', 'Philippines'), ('482', 'Ukraine'), ('484', 'Moldova'), ('485', 'Armenia'), ('486', 'Georgia'), ('487', 'Kazakhstan'), ('489', 'Hong Kong'), ('49', 'Japan (JAN-13)'), ('50', 'United Kingdom'), ('520', 'Greece'), ('528', 'Lebanon'), ('529', 'Cyprus'), ('531', 'Macedonia'), ('535', 'Malta'), ('539', 'Ireland'), ('54', 'Belgium & Luxembourg'), ('560', 'Portugal'), ('569', 'Iceland'), ('57', 'Denmark'), ('590', 'Poland'), ('594', 'Romania'), ('599', 'Hungary'), ('600-601', 'South Africa'), ('609', 'Mauritius'), ('611', 'Morocco'), ('613', 'Algeria'), ('619', 'Tunisia'), ('622', 'Egypt'), ('625', 'Jordan'), ('626', 'Iran'), ('64', 'Finland'), ('690-692', 'China'), ('70', 'Norway'), ('729', 'Israel'), ('73', 'Sweden'), ('740', 'Guatemala'), ('741', 'El Salvador'), ('742', 'Honduras'), ('743', 'Nicaragua'), ('744', 'Costa Rica'), ('746', 'Dominican Republic'), ('750', 'Mexico'), ('759', 'Venezuela'), ('76', 'Switzerland'), ('770', 'Colombia'), ('773', 'Uruguay'), ('775', 'Peru'), ('777', 'Bolivia'), ('779', 'Argentina'), ('780', 'Chile'), ('784', 'Paraguay'), ('785', 'Peru'), ('786', 'Ecuador'), ('789', 'Brazil'), ('80-83', 'Italy'), ('84', 'Spain'), ('850', 'Cuba'), ('858', 'Slovakia'), ('859', 'Czech Republic'), ('860', 'Yugloslavia'), ('869', 'Turkey'), ('87', 'Netherlands'), ('880', 'South Korea'), ('885', 'Thailand'), ('888', 'Singapore'), ('890', 'India'), ('893', 'Vietnam'), ('899', 'Indonesia'), ('90-91', 'Austria'), ('93', 'Australia'), ('94', 'New Zealand'), ('955', 'Malaysia'), ('977', 'International Standard Serial Number for Periodicals (ISSN)'), ('978', 'International Standard Book Numbering (ISBN)'), ('979', 'International Standard Music Number (ISMN)'), ('980', 'Refund receipts'), ('981-982', 'Common Currency Coupons'), ('99', 'Coupons') ] manufacturerCodes = {} for (k, v) in _eanNumberSystems: words = k.split('-') if len(words)==2: fromCode = int(words[0]) toCode = int(words[1]) for code in range(fromCode, toCode+1): manufacturerCodes[code] = v else: manufacturerCodes[int(k)] = v def nDigits(n): class _ndigits(Validator): def test(self,x): return type(x) is str and len(x)<=n and len([c for c in x if c in "0123456789"])==n return _ndigits() class Ean13BarcodeWidget(PlotArea): codeName = "EAN13" _attrMap = AttrMap(BASE=PlotArea, value = AttrMapValue(nDigits(12), desc='the number'), fontName = AttrMapValue(isString, desc='fontName'), fontSize = AttrMapValue(isNumber, desc='font size'), x = AttrMapValue(isNumber, desc='x-coord'), y = AttrMapValue(isNumber, desc='y-coord'), barFillColor = AttrMapValue(isColor, desc='bar color'), barHeight = AttrMapValue(isNumber, desc='Height of bars.'), barWidth = AttrMapValue(isNumber, desc='Width of bars.'), barStrokeWidth = AttrMapValue(isNumber, desc='Width of bar borders.'), barStrokeColor = AttrMapValue(isColor, desc='Color of bar borders.'), textColor = AttrMapValue(isColor, desc='human readable text color'), humanReadable = AttrMapValue(isBoolean, desc='if human readable'), quiet = AttrMapValue(isBoolean, desc='if quiet zone to be used'), lquiet = AttrMapValue(isBoolean, desc='left quiet zone length'), rquiet = AttrMapValue(isBoolean, desc='right quiet zone length'), ) _digits=12 _start_right = 7 #for ean-13 left = [0:7] right=[7:13] _nbars = 113 barHeight = 25.93*mm #millimeters barWidth = (37.29/_nbars)*mm humanReadable = 1 _0csw = 1 _1csw = 3 #Left Hand Digits. _left = ( ("0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011", ), #odd left hand digits ("0100111", "0110011", "0011011", "0100001", "0011101", "0111001", "0000101", "0010001", "0001001", "0010111"), #even left hand digits ) _right = ("1110010", "1100110", "1101100", "1000010", "1011100", "1001110", "1010000", "1000100", "1001000", "1110100") quiet = 1 rquiet = lquiet = None _tail = "101" _sep = "01010" _lhconvert={ "0": (0,0,0,0,0,0), "1": (0,0,1,0,1,1), "2": (0,0,1,1,0,1), "3": (0,0,1,1,1,0), "4": (0,1,0,0,1,1), "5": (0,1,1,0,0,1), "6": (0,1,1,1,0,0), "7": (0,1,0,1,0,1), "8": (0,1,0,1,1,0), "9": (0,1,1,0,1,0) } fontSize = 8 #millimeters fontName = 'Helvetica' textColor = barFillColor = colors.black barStrokeColor = None barStrokeWidth = 0 x = 0 y = 0 def __init__(self,value='123456789012',**kw): value = str(value) if isinstance(value,int) else asNative(value) self.value=max(self._digits-len(value),0)*'0'+value[:self._digits] for k, v in kw.items(): setattr(self, k, v) width = property(lambda self: self.barWidth*(self._nbars-18+self._calc_quiet(self.lquiet)+self._calc_quiet(self.rquiet))) def wrap(self,aW,aH): return self.width,self.barHeight def _encode_left(self,s,a): cp = self._lhconvert[s[0]] #convert the left hand numbers _left = self._left z = ord('0') for i,c in enumerate(s[1:self._start_right]): a(_left[cp[i]][ord(c)-z]) def _short_bar(self,i): i += 9 - self._lquiet return self.humanReadable and ((120: v += 1 else: v = 0 return v def draw(self): g = Group() gAdd = g.add barWidth = self.barWidth width = self.width barHeight = self.barHeight x = self.x y = self.y gAdd(Rect(x,y,width,barHeight,fillColor=None,strokeColor=None,strokeWidth=0)) s = self.value+self._checkdigit(self.value) self._lquiet = lquiet = self._calc_quiet(self.lquiet) rquiet = self._calc_quiet(self.rquiet) b = [lquiet*'0',self._tail] #the signal string a = b.append self._encode_left(s,a) a(self._sep) z = ord('0') _right = self._right for c in s[self._start_right:]: a(_right[ord(c)-z]) a(self._tail) a(rquiet*'0') fontSize = self.fontSize barFillColor = self.barFillColor barStrokeWidth = self.barStrokeWidth barStrokeColor = self.barStrokeColor fth = fontSize*1.2 b = ''.join(b) lrect = None for i,c in enumerate(b): if c=="1": dh = self._short_bar(i) and fth or 0 yh = y+dh if lrect and lrect.y==yh: lrect.width += barWidth else: lrect = Rect(x,yh,barWidth,barHeight-dh,fillColor=barFillColor,strokeWidth=barStrokeWidth,strokeColor=barStrokeColor) gAdd(lrect) else: lrect = None x += barWidth if self.humanReadable: self._add_human_readable(s,gAdd) return g def _add_human_readable(self,s,gAdd): barWidth = self.barWidth fontSize = self.fontSize textColor = self.textColor fontName = self.fontName fth = fontSize*1.2 # draw the num below the line. c = s[0] w = stringWidth(c,fontName,fontSize) x = self.x+barWidth*(self._lquiet-8) y = self.y + 0.2*fth gAdd(String(x,y,c,fontName=fontName,fontSize=fontSize,fillColor=textColor)) x = self.x + (33-9+self._lquiet)*barWidth c = s[1:7] gAdd(String(x,y,c,fontName=fontName,fontSize=fontSize,fillColor=textColor,textAnchor='middle')) x += 47*barWidth c = s[7:] gAdd(String(x,y,c,fontName=fontName,fontSize=fontSize,fillColor=textColor,textAnchor='middle')) def _checkdigit(cls,num): z = ord('0') iSum = cls._0csw*sum([(ord(x)-z) for x in num[::2]]) \ + cls._1csw*sum([(ord(x)-z) for x in num[1::2]]) return chr(z+((10-(iSum%10))%10)) _checkdigit=classmethod(_checkdigit) class Ean8BarcodeWidget(Ean13BarcodeWidget): codeName = "EAN8" _attrMap = AttrMap(BASE=Ean13BarcodeWidget, value = AttrMapValue(nDigits(7), desc='the number'), ) _start_right = 4 #for ean-13 left = [0:7] right=[7:13] _nbars = 85 _digits=7 _0csw = 3 _1csw = 1 def _encode_left(self,s,a): cp = self._lhconvert[s[0]] #convert the left hand numbers _left = self._left[0] z = ord('0') for i,c in enumerate(s[0:self._start_right]): a(_left[ord(c)-z]) def _short_bar(self,i): i += 9 - self._lquiet return self.humanReadable and ((12 # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # from reportlab.lib.units import inch from reportlab.graphics.barcode.common import Barcode import string # . 3 T Tracker # , 2 D Descender # ' 1 A Ascender # | 0 H Ascender/Descender _rm_patterns = { "0" : "--||", "1" : "-',|", "2" : "-'|,", "3" : "'-,|", "4" : "'-|,", "5" : "'',,", "6" : "-,'|", "7" : "-|-|", "8" : "-|',", "9" : "',-|", "A" : "',',", "B" : "'|-,", "C" : "-,|'", "D" : "-|,'", "E" : "-||-", "F" : "',,'", "G" : "',|-", "H" : "'|,-", "I" : ",-'|", "J" : ",'-|", "K" : ",'',", "L" : "|--|", "M" : "|-',", "N" : "|'-,", "O" : ",-|'", "P" : ",','", "Q" : ",'|-", "R" : "|-,'", "S" : "|-|-", "T" : "|',-", "U" : ",,''", "V" : ",|-'", "W" : ",|'-", "X" : "|,-'", "Y" : "|,'-", "Z" : "||--", # start, stop "(" : "'-,'", ")" : "'|,|" } _ozN_patterns = { "0" : "||", "1" : "|'", "2" : "|,", "3" : "'|", "4" : "''", "5" : "',", "6" : ",|", "7" : ",'", "8" : ",,", "9" : ".|" } _ozC_patterns = { "A" : "|||", "B" : "||'", "C" : "||,", "D" : "|'|", "E" : "|''", "F" : "|',", "G" : "|,|", "H" : "|,'", "I" : "|,,", "J" : "'||", "K" : "'|'", "L" : "'|,", "M" : "''|", "N" : "'''", "O" : "'',", "P" : "',|", "Q" : "','", "R" : "',,", "S" : ",||", "T" : ",|'", "U" : ",|,", "V" : ",'|", "W" : ",''", "X" : ",',", "Y" : ",,|", "Z" : ",,'", "a" : "|,.", "b" : "|.|", "c" : "|.'", "d" : "|.,", "e" : "|..", "f" : "'|.", "g" : "''.", "h" : "',.", "i" : "'.|", "j" : "'.'", "k" : "'.,", "l" : "'..", "m" : ",|.", "n" : ",'.", "o" : ",,.", "p" : ",.|", "q" : ",.'", "r" : ",.,", "s" : ",..", "t" : ".|.", "u" : ".'.", "v" : ".,.", "w" : "..|", "x" : "..'", "y" : "..,", "z" : "...", "0" : ",,,", "1" : ".||", "2" : ".|'", "3" : ".|,", "4" : ".'|", "5" : ".''", "6" : ".',", "7" : ".,|", "8" : ".,'", "9" : ".,,", " " : "||.", "#" : "|'.", } #http://www.auspost.com.au/futurepost/ reportlab-3.5.34/src/reportlab/graphics/barcode/README0000664000175000017500000000331513544671343023250 0ustar rptlabrptlab00000000000000Symbologies Currently Supported =============================== The following have, at a minimum, been verified to scan with a WASP CCD barcode scanner (found one bug in my code, two in the scanner!). Some have had more extensive testing: Interleaved 2 of 5 MSI Codabar Code 39 (Standard Character Set) Code 39 (Extended Character Set) Code 93 (Standard Character Set) Code 93 (Extended Character Set) Code 128 (Automatic use of A, B, C, with some optimizations -- more coming) The following have been tested by sending a fair number of mailpieces with them: USPS FIM USPS POSTNET The following have not been tested, as none of the scanners I have access to support them: Code 11 Future Plans, Consulting ======================== Soon: I plan to implement the following linear codes soon: UPC/EAN(/JAN) The following are in progress, but I lack a way to verify them (scanners I have access to don't read them), and I don't have complete specs for the UK style. Royal Mail 4-State (UK/NL/etc style, and Australian style) Down the road, I'd like to do some 2D symbologies. Likely first candidate is PDF417. MaxiCode, Aztec Code, and some of the stacked symbologies are also good candidates. I am available to do implementation of additional symbologies for hire. Because I enjoy hacking barcodes, my rates for work in this particular area are very low and are mainly to help offset costs associated with obtaining related documents and/or to buy or gain access to scanning equipment for symbologies if I don't already have a scanner that supports them. Loans of equipment are also accepted. For more information, contact: Ty Sarna tsarna@sarna.org reportlab-3.5.34/src/reportlab/graphics/barcode/code128.py0000664000175000017500000004405113544671343024111 0ustar rptlabrptlab00000000000000# # Copyright (c) 2000 Tyler C. Sarna # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # from reportlab.lib.units import inch from reportlab.lib.utils import asNative from reportlab.graphics.barcode.common import MultiWidthBarcode from string import digits _patterns = { 0 : 'BaBbBb', 1 : 'BbBaBb', 2 : 'BbBbBa', 3 : 'AbAbBc', 4 : 'AbAcBb', 5 : 'AcAbBb', 6 : 'AbBbAc', 7 : 'AbBcAb', 8 : 'AcBbAb', 9 : 'BbAbAc', 10 : 'BbAcAb', 11 : 'BcAbAb', 12 : 'AaBbCb', 13 : 'AbBaCb', 14 : 'AbBbCa', 15 : 'AaCbBb', 16 : 'AbCaBb', 17 : 'AbCbBa', 18 : 'BbCbAa', 19 : 'BbAaCb', 20 : 'BbAbCa', 21 : 'BaCbAb', 22 : 'BbCaAb', 23 : 'CaBaCa', 24 : 'CaAbBb', 25 : 'CbAaBb', 26 : 'CbAbBa', 27 : 'CaBbAb', 28 : 'CbBaAb', 29 : 'CbBbAa', 30 : 'BaBaBc', 31 : 'BaBcBa', 32 : 'BcBaBa', 33 : 'AaAcBc', 34 : 'AcAaBc', 35 : 'AcAcBa', 36 : 'AaBcAc', 37 : 'AcBaAc', 38 : 'AcBcAa', 39 : 'BaAcAc', 40 : 'BcAaAc', 41 : 'BcAcAa', 42 : 'AaBaCc', 43 : 'AaBcCa', 44 : 'AcBaCa', 45 : 'AaCaBc', 46 : 'AaCcBa', 47 : 'AcCaBa', 48 : 'CaCaBa', 49 : 'BaAcCa', 50 : 'BcAaCa', 51 : 'BaCaAc', 52 : 'BaCcAa', 53 : 'BaCaCa', 54 : 'CaAaBc', 55 : 'CaAcBa', 56 : 'CcAaBa', 57 : 'CaBaAc', 58 : 'CaBcAa', 59 : 'CcBaAa', 60 : 'CaDaAa', 61 : 'BbAdAa', 62 : 'DcAaAa', 63 : 'AaAbBd', 64 : 'AaAdBb', 65 : 'AbAaBd', 66 : 'AbAdBa', 67 : 'AdAaBb', 68 : 'AdAbBa', 69 : 'AaBbAd', 70 : 'AaBdAb', 71 : 'AbBaAd', 72 : 'AbBdAa', 73 : 'AdBaAb', 74 : 'AdBbAa', 75 : 'BdAbAa', 76 : 'BbAaAd', 77 : 'DaCaAa', 78 : 'BdAaAb', 79 : 'AcDaAa', 80 : 'AaAbDb', 81 : 'AbAaDb', 82 : 'AbAbDa', 83 : 'AaDbAb', 84 : 'AbDaAb', 85 : 'AbDbAa', 86 : 'DaAbAb', 87 : 'DbAaAb', 88 : 'DbAbAa', 89 : 'BaBaDa', 90 : 'BaDaBa', 91 : 'DaBaBa', 92 : 'AaAaDc', 93 : 'AaAcDa', 94 : 'AcAaDa', 95 : 'AaDaAc', 96 : 'AaDcAa', 97 : 'DaAaAc', 98 : 'DaAcAa', 99 : 'AaCaDa', 100 : 'AaDaCa', 101 : 'CaAaDa', 102 : 'DaAaCa', 103 : 'BaAdAb', 104 : 'BaAbAd', 105 : 'BaAbCb', 106 : 'BcCaAaB' } starta, startb, startc, stop = 103, 104, 105, 106 seta = { ' ' : 0, '!' : 1, '"' : 2, '#' : 3, '$' : 4, '%' : 5, '&' : 6, '\'' : 7, '(' : 8, ')' : 9, '*' : 10, '+' : 11, ',' : 12, '-' : 13, '.' : 14, '/' : 15, '0' : 16, '1' : 17, '2' : 18, '3' : 19, '4' : 20, '5' : 21, '6' : 22, '7' : 23, '8' : 24, '9' : 25, ':' : 26, ';' : 27, '<' : 28, '=' : 29, '>' : 30, '?' : 31, '@' : 32, 'A' : 33, 'B' : 34, 'C' : 35, 'D' : 36, 'E' : 37, 'F' : 38, 'G' : 39, 'H' : 40, 'I' : 41, 'J' : 42, 'K' : 43, 'L' : 44, 'M' : 45, 'N' : 46, 'O' : 47, 'P' : 48, 'Q' : 49, 'R' : 50, 'S' : 51, 'T' : 52, 'U' : 53, 'V' : 54, 'W' : 55, 'X' : 56, 'Y' : 57, 'Z' : 58, '[' : 59, '\\' : 60, ']' : 61, '^' : 62, '_' : 63, '\x00' : 64, '\x01' : 65, '\x02' : 66, '\x03' : 67, '\x04' : 68, '\x05' : 69, '\x06' : 70, '\x07' : 71, '\x08' : 72, '\x09' : 73, '\x0a' : 74, '\x0b' : 75, '\x0c' : 76, '\x0d' : 77, '\x0e' : 78, '\x0f' : 79, '\x10' : 80, '\x11' : 81, '\x12' : 82, '\x13' : 83, '\x14' : 84, '\x15' : 85, '\x16' : 86, '\x17' : 87, '\x18' : 88, '\x19' : 89, '\x1a' : 90, '\x1b' : 91, '\x1c' : 92, '\x1d' : 93, '\x1e' : 94, '\x1f' : 95, '\xf3' : 96, '\xf2' : 97, 'SHIFT' : 98, 'TO_C' : 99, 'TO_B' : 100, '\xf4' : 101, '\xf1' : 102 } setb = { ' ' : 0, '!' : 1, '"' : 2, '#' : 3, '$' : 4, '%' : 5, '&' : 6, '\'' : 7, '(' : 8, ')' : 9, '*' : 10, '+' : 11, ',' : 12, '-' : 13, '.' : 14, '/' : 15, '0' : 16, '1' : 17, '2' : 18, '3' : 19, '4' : 20, '5' : 21, '6' : 22, '7' : 23, '8' : 24, '9' : 25, ':' : 26, ';' : 27, '<' : 28, '=' : 29, '>' : 30, '?' : 31, '@' : 32, 'A' : 33, 'B' : 34, 'C' : 35, 'D' : 36, 'E' : 37, 'F' : 38, 'G' : 39, 'H' : 40, 'I' : 41, 'J' : 42, 'K' : 43, 'L' : 44, 'M' : 45, 'N' : 46, 'O' : 47, 'P' : 48, 'Q' : 49, 'R' : 50, 'S' : 51, 'T' : 52, 'U' : 53, 'V' : 54, 'W' : 55, 'X' : 56, 'Y' : 57, 'Z' : 58, '[' : 59, '\\' : 60, ']' : 61, '^' : 62, '_' : 63, '`' : 64, 'a' : 65, 'b' : 66, 'c' : 67, 'd' : 68, 'e' : 69, 'f' : 70, 'g' : 71, 'h' : 72, 'i' : 73, 'j' : 74, 'k' : 75, 'l' : 76, 'm' : 77, 'n' : 78, 'o' : 79, 'p' : 80, 'q' : 81, 'r' : 82, 's' : 83, 't' : 84, 'u' : 85, 'v' : 86, 'w' : 87, 'x' : 88, 'y' : 89, 'z' : 90, '{' : 91, '|' : 92, '}' : 93, '~' : 94, '\x7f' : 95, '\xf3' : 96, '\xf2' : 97, 'SHIFT' : 98, 'TO_C' : 99, '\xf4' : 100, 'TO_A' : 101, '\xf1' : 102 } setc = { '00': 0, '01': 1, '02': 2, '03': 3, '04': 4, '05': 5, '06': 6, '07': 7, '08': 8, '09': 9, '10':10, '11':11, '12':12, '13':13, '14':14, '15':15, '16':16, '17':17, '18':18, '19':19, '20':20, '21':21, '22':22, '23':23, '24':24, '25':25, '26':26, '27':27, '28':28, '29':29, '30':30, '31':31, '32':32, '33':33, '34':34, '35':35, '36':36, '37':37, '38':38, '39':39, '40':40, '41':41, '42':42, '43':43, '44':44, '45':45, '46':46, '47':47, '48':48, '49':49, '50':50, '51':51, '52':52, '53':53, '54':54, '55':55, '56':56, '57':57, '58':58, '59':59, '60':60, '61':61, '62':62, '63':63, '64':64, '65':65, '66':66, '67':67, '68':68, '69':69, '70':70, '71':71, '72':72, '73':73, '74':74, '75':75, '76':76, '77':77, '78':78, '79':79, '80':80, '81':81, '82':82, '83':83, '84':84, '85':85, '86':86, '87':87, '88':88, '89':89, '90':90, '91':91, '92':92, '93':93, '94':94, '95':95, '96':96, '97':97, '98':98, '99':99, 'TO_B' : 100, 'TO_A' : 101, '\xf1' : 102 } setmap = { 'TO_A' : (seta, setb), 'TO_B' : (setb, seta), 'TO_C' : (setc, None), 'START_A' : (starta, seta, setb), 'START_B' : (startb, setb, seta), 'START_C' : (startc, setc, None), } cStarts = ('START_B','TO_A','TO_B') tos = list(setmap.keys()) class Code128(MultiWidthBarcode): """ Code 128 is a very compact symbology that can encode the entire 128 character ASCII set, plus 4 special control codes, (FNC1-FNC4, expressed in the input string as \xf1 to \xf4). Code 128 can also encode digits at double density (2 per byte) and has a mandatory checksum. Code 128 is well supported and commonly used -- for example, by UPS for tracking labels. Because of these qualities, Code 128 is probably the best choice for a linear symbology today (assuming you have a choice). Options that may be passed to constructor: value (int, or numeric string. required.): The value to encode. barWidth (float, default .0075): X-Dimension, or width of the smallest element Minumum is .0075 inch (7.5 mils). barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. quiet (bool, default 1): Wether to include quiet zones in the symbol. lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or 10 barWidth rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. Sources of Information on Code 128: http://www.semiconductor.agilent.com/barcode/sg/Misc/code_128.html http://www.adams1.com/pub/russadam/128code.html http://www.barcodeman.com/c128.html Official Spec, "ANSI/AIM BC4-1999, ISS" is available for US$45 from http://www.aimglobal.org/aimstore/ """ barWidth = inch * 0.0075 lquiet = None rquiet = None quiet = 1 barHeight = None def __init__(self, value='', **args): value = str(value) if isinstance(value,int) else asNative(value) for k, v in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = max(inch * 0.25, self.barWidth * 10.0) if self.rquiet is None: self.rquiet = max(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 MultiWidthBarcode.__init__(self, value) def validate(self): vval = "" self.valid = 1 for c in self.value: if ord(c) > 127 and c not in '\xf1\xf2\xf3\xf4': self.valid = 0 continue vval = vval + c self.validated = vval return vval def _try_TO_C(self, l): '''Improved version of old _trailingDigitsToC(self, l) inspired by''' i = 0 nl = [] while i < len(l): startpos = i rl = [] savings = -1 # the TO_C costs one character while i < len(l): if l[i] in cStarts: j = i break elif l[i] == '\xf1': rl.append(l[i]) i += 1 continue elif l[i] in digits \ and l[i+1] in digits: rl.append(l[i] + l[i+1]) i += 2 savings += 1 continue else: if l[i] in digits and l[i+1]=='STOP': rrl = [] rsavings = -1 #we need a TO_C k = i while k>startpos: if l[k]=='\xf1': rrl.append(l[i]) k -= 1 elif l[k] in digits and l[k-1] in digits: rrl.append(l[k-1]+l[k]) rsavings += 1 k -= 2 else: break rrl.reverse() if rsavings>savings+int(savings>=0 and (startpos and nl[-1] in cStarts))-1: nl += l[startpos] startpos += 1 rl = rrl del rrl i += 1 break ta = not (l[i]=='STOP' or j==i) xs = savings>=0 and (startpos and nl[-1] in cStarts) if savings+int(xs) > int(ta): if xs: toc = nl[-1][:-1]+'C' del nl[-1] else: toc = 'TO_C' nl += [toc]+rl if ta: nl.append('TO'+l[j][-2:]) nl.append(l[i]) else: nl += l[startpos:i+1] i += 1 return nl def encode(self): # First, encode using only B s = self.validated l = ['START_B'] for c in s: if c not in setb: l = l + ['TO_A', c, 'TO_B'] else: l.append(c) l.append('STOP') l = self._try_TO_C(l) # Finally, replace START_X,TO_Y with START_Y if l[1] in tos: l[:2] = ['START_' + l[1][-1]] # print repr(l) # encode into numbers start, set, shset = setmap[l[0]] e = [start] l = l[1:-1] while l: c = l[0] if c == 'SHIFT': e = e + [set[c], shset[l[1]]] l = l[2:] elif c in tos: e.append(set[c]) set, shset = setmap[c] l = l[1:] else: e.append(set[c]) l = l[1:] c = e[0] for i in range(1, len(e)): c = c + i * e[i] self.encoded = e + [c % 103, stop] return self.encoded def decompose(self): self.decomposed = ''.join([_patterns[c] for c in self.encoded]) return self.decomposed def _humanText(self): return self.value class Code128Auto(Code128): '''contributed by https://bitbucket.org/kylemacfarlane/ see https://bitbucket.org/rptlab/reportlab/issues/69/implementations-of-code-128-auto-and-data ''' def encode(self): s = self.validated current_set = None l = [] value = list(s) while value: c = value.pop(0) if c in digits and value and value[0] in digits: c += value.pop(0) if c in setc: set_ = 'C' elif c in setb: set_ = 'B' else: set_ = 'A' if current_set != set_: if current_set: l.append('TO_' + set_) else: l.append('START_' + set_) current_set = set_ l.append(c) l.append('STOP') start, set, shset = setmap[l[0]] e = [start] l = l[1:-1] while l: c = l[0] if c == 'SHIFT': e = e + [set[c], shset[l[1]]] l = l[2:] elif c in tos: e.append(set[c]) set, shset = setmap[c] l = l[1:] else: e.append(set[c]) l = l[1:] c = e[0] for i in range(1, len(e)): c = c + i * e[i] self.encoded = e + [c % 103, stop] return self.encoded if __name__=='__main__': def main(): from reportlab.graphics.barcode.code128 import Code128 from reportlab.platypus import Spacer, SimpleDocTemplate from reportlab.lib.units import inch, cm from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus.paragraph import Paragraph from reportlab.platypus.flowables import KeepTogether import os styles = getSampleStyleSheet() styleN = styles['Normal'] styleH = styles['Heading1'] story = [] storyAdd = story.append for s in ( 'BBBB123456BBB', 'BBBB12345BBB', 'BBBB1234BBB', 'BBBB123BBB', 'BBBB12BBB', 'BBBB1BBB', 'BBBB123456aa', 'BBBB1234aa', 'BBBB123aa', 'BBBB12aa', 'BBBB1aa', 'BBBB123456', 'BBBB12345', 'BBBB1234', 'BBBB123', 'BBBB12', 'BBBB1', '\xf11234B', 'Ba\xf11234B', 'Ba12', 'Ba123B', 'Ba1234B', 'BBBB1234567', 'BBBB1234567aa', ): storyAdd(KeepTogether([Paragraph('Code 128 %r' % s, styleN),Code128(s)])) storyAdd(Spacer(inch,inch)) SimpleDocTemplate('code128-out.pdf').build(story) main() reportlab-3.5.34/src/reportlab/graphics/barcode/TODO0000664000175000017500000000162313544671343023060 0ustar rptlabrptlab00000000000000See also README for some plans and info on consulting. - Overall framework docs - Finish Aussie Rules 4-State, for which I have complete docs now (yay USPS and aupost.com.au for putting specs online. Too bad UKPost doesn't.) - Investigate USPS PLANET stuff - Higher-level objects that handle barcoded address blocks with correct spacings and such (US, AU, UK/etc?) - Even higher-level objects that represent mailpieces and place the above-style address block objects, FIM codes, "place stamp here" blocks, etc, correctly? - Framework for laying out labels on various styles of n-up label sheets, like Avery labels, etc? - Decide if Plessey is worth doing. MSI-like (MSI is actually derived from it), but specs were never formalized. Probably only useful for legacy applications. If you need it, mail me. - Get someone to test Code 11, or find a scanner that handles it reportlab-3.5.34/src/reportlab/graphics/barcode/code93.py0000664000175000017500000002156513544671343024037 0ustar rptlabrptlab00000000000000# # Copyright (c) 2000 Tyler C. Sarna # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # from reportlab.lib.units import inch from reportlab.lib.utils import asNative from reportlab.graphics.barcode.common import MultiWidthBarcode _patterns = { '0' : ('AcAaAb', 0), '1' : ('AaAbAc', 1), '2' : ('AaAcAb', 2), '3' : ('AaAdAa', 3), '4' : ('AbAaAc', 4), '5' : ('AbAbAb', 5), '6' : ('AbAcAa', 6), '7' : ('AaAaAd', 7), '8' : ('AcAbAa', 8), '9' : ('AdAaAa', 9), 'A' : ('BaAaAc', 10), 'B' : ('BaAbAb', 11), 'C' : ('BaAcAa', 12), 'D' : ('BbAaAb', 13), 'E' : ('BbAbAa', 14), 'F' : ('BcAaAa', 15), 'G' : ('AaBaAc', 16), 'H' : ('AaBbAb', 17), 'I' : ('AaBcAa', 18), 'J' : ('AbBaAb', 19), 'K' : ('AcBaAa', 20), 'L' : ('AaAaBc', 21), 'M' : ('AaAbBb', 22), 'N' : ('AaAcBa', 23), 'O' : ('AbAaBb', 24), 'P' : ('AcAaBa', 25), 'Q' : ('BaBaAb', 26), 'R' : ('BaBbAa', 27), 'S' : ('BaAaBb', 28), 'T' : ('BaAbBa', 29), 'U' : ('BbAaBa', 30), 'V' : ('BbBaAa', 31), 'W' : ('AaBaBb', 32), 'X' : ('AaBbBa', 33), 'Y' : ('AbBaBa', 34), 'Z' : ('AbCaAa', 35), '-' : ('AbAaCa', 36), '.' : ('CaAaAb', 37), ' ' : ('CaAbAa', 38), '$' : ('CbAaAa', 39), '/' : ('AaBaCa', 40), '+' : ('AaCaBa', 41), '%' : ('BaAaCa', 42), '#' : ('AbAbBa', 43), '!' : ('CaBaAa', 44), '=' : ('CaAaBa', 45), '&' : ('AbBbAa', 46), 'start' : ('AaAaDa', -1), 'stop' : ('AaAaDaA', -2) } _charsbyval = {} for k, v in _patterns.items(): _charsbyval[v[1]] = k _extended = { '\x00' : '!U', '\x01' : '#A', '\x02' : '#B', '\x03' : '#C', '\x04' : '#D', '\x05' : '#E', '\x06' : '#F', '\x07' : '#G', '\x08' : '#H', '\x09' : '#I', '\x0a' : '#J', '\x0b' : '#K', '\x0c' : '#L', '\x0d' : '#M', '\x0e' : '#N', '\x0f' : '#O', '\x10' : '#P', '\x11' : '#Q', '\x12' : '#R', '\x13' : '#S', '\x14' : '#T', '\x15' : '#U', '\x16' : '#V', '\x17' : '#W', '\x18' : '#X', '\x19' : '#Y', '\x1a' : '#Z', '\x1b' : '!A', '\x1c' : '!B', '\x1d' : '!C', '\x1e' : '!D', '\x1f' : '!E', '!' : '=A', '"' : '=B', '#' : '=C', '$' : '=D', '%' : '=E', '&' : '=F', '\'' : '=G', '(' : '=H', ')' : '=I', '*' : '=J', '+' : '=K', ',' : '=L', '/' : '=O', ':' : '=Z', ';' : '!F', '<' : '!G', '=' : '!H', '>' : '!I', '?' : '!J', '@' : '!V', '[' : '!K', '\\' : '!L', ']' : '!M', '^' : '!N', '_' : '!O', '`' : '!W', 'a' : '&A', 'b' : '&B', 'c' : '&C', 'd' : '&D', 'e' : '&E', 'f' : '&F', 'g' : '&G', 'h' : '&H', 'i' : '&I', 'j' : '&J', 'k' : '&K', 'l' : '&L', 'm' : '&M', 'n' : '&N', 'o' : '&O', 'p' : '&P', 'q' : '&Q', 'r' : '&R', 's' : '&S', 't' : '&T', 'u' : '&U', 'v' : '&V', 'w' : '&W', 'x' : '&X', 'y' : '&Y', 'z' : '&Z', '{' : '!P', '|' : '!Q', '}' : '!R', '~' : '!S', '\x7f' : '!T' } def _encode93(str): s = list(str) s.reverse() # compute 'C' checksum i = 0; v = 1; c = 0 while i < len(s): c = c + v * _patterns[s[i]][1] i = i + 1; v = v + 1 if v > 20: v = 1 s.insert(0, _charsbyval[c % 47]) # compute 'K' checksum i = 0; v = 1; c = 0 while i < len(s): c = c + v * _patterns[s[i]][1] i = i + 1; v = v + 1 if v > 15: v = 1 s.insert(0, _charsbyval[c % 47]) s.reverse() return ''.join(s) class _Code93Base(MultiWidthBarcode): barWidth = inch * 0.0075 lquiet = None rquiet = None quiet = 1 barHeight = None stop = 1 def __init__(self, value='', **args): if type(value) is type(1): value = asNative(value) for (k, v) in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = max(inch * 0.25, self.barWidth * 10.0) self.rquiet = max(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 MultiWidthBarcode.__init__(self, value) def decompose(self): dval = self.stop and [_patterns['start'][0]] or [] dval += [_patterns[c][0] for c in self.encoded] if self.stop: dval.append(_patterns['stop'][0]) self.decomposed = ''.join(dval) return self.decomposed class Standard93(_Code93Base): """ Code 93 is a Uppercase alphanumeric symbology with some punctuation. See Extended Code 93 for a variant that can represent the entire 128 characrter ASCII set. Options that may be passed to constructor: value (int, or numeric string. required.): The value to encode. barWidth (float, default .0075): X-Dimension, or width of the smallest element Minumum is .0075 inch (7.5 mils). barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. quiet (bool, default 1): Wether to include quiet zones in the symbol. lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or 10 barWidth rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. stop (bool, default 1): Whether to include start/stop symbols. Sources of Information on Code 93: http://www.semiconductor.agilent.com/barcode/sg/Misc/code_93.html Official Spec, "NSI/AIM BC5-1995, USS" is available for US$45 from http://www.aimglobal.org/aimstore/ """ def validate(self): vval = "" self.valid = 1 for c in self.value.upper(): if c not in _patterns: self.valid = 0 continue vval = vval + c self.validated = vval return vval def encode(self): self.encoded = _encode93(self.validated) return self.encoded class Extended93(_Code93Base): """ Extended Code 93 is a convention for encoding the entire 128 character set using pairs of characters to represent the characters missing in Standard Code 93. It is very much like Extended Code 39 in that way. See Standard93 for arguments. """ def validate(self): vval = [] self.valid = 1 a = vval.append for c in self.value: if c not in _patterns and c not in _extended: self.valid = 0 continue a(c) self.validated = ''.join(vval) return self.validated def encode(self): self.encoded = "" for c in self.validated: if c in _patterns: self.encoded = self.encoded + c elif c in _extended: self.encoded = self.encoded + _extended[c] else: raise ValueError self.encoded = _encode93(self.encoded) return self.encoded def _humanText(self): return self.validated+self.encoded[-2:] reportlab-3.5.34/src/reportlab/graphics/barcode/ecc200datamatrix.py0000664000175000017500000004273413544671343026005 0ustar rptlabrptlab00000000000000#this code contributed by Kyle Macfarlane see #https://bitbucket.org/rptlab/reportlab/issues/69/implementations-of-code-128-auto-and-data __all__= ('ECC200datamatrix',) FACTORS = { 5: (228, 48, 15, 111, 62), 7: (23, 68, 144, 134, 240, 92, 254), 10: (28, 24, 185, 166, 223, 248, 116, 255, 110, 61), 11: (175, 138, 205, 12, 194, 168, 39, 245, 60, 97, 120), 12: (41, 153, 158, 91, 61, 42, 142, 213, 97, 178, 100, 242), 14: (156, 97, 192, 252, 95, 9, 157, 119, 138, 45, 18, 186, 83, 185), 18: (83, 195, 100, 39, 188, 75, 66, 61, 241, 213, 109, 129, 94, 254, 225, 48, 90, 188), 20: (15, 195, 244, 9, 233, 71, 168, 2, 188, 160, 153, 145, 253, 79, 108, 82, 27, 174, 186, 172), 24: (52, 190, 88, 205, 109, 39, 176, 21, 155, 197, 251, 223, 155, 21, 5, 172, 254, 124, 12, 181, 184, 96, 50, 193), 28: (211, 231, 43, 97, 71, 96, 103, 174, 37, 151, 170, 53, 75, 34, 249, 121, 17, 138, 110, 213, 141, 136, 120, 151, 233, 168, 93, 255), 36: (245, 127, 242, 218, 130, 250, 162, 181, 102, 120, 84, 179, 220, 251, 80, 182, 229, 18, 2, 4, 68, 33, 101, 137, 95, 119, 115, 44, 175, 184, 59, 25, 225, 98, 81, 112), 42: (77, 193, 137, 31, 19, 38, 22, 153, 247, 105, 122, 2, 245, 133, 242, 8, 175, 95, 100, 9, 167, 105, 214, 111, 57, 121, 21, 1, 253, 57, 54, 101, 248, 202, 69, 50, 150, 177, 226, 5, 9, 5), 48: (245, 132, 172, 223, 96, 32, 117, 22, 238, 133, 238, 231, 205, 188, 237, 87, 191, 106, 16, 147, 118, 23, 37, 90, 170, 205, 131, 88, 120, 100, 66, 138, 186, 240, 82, 44, 176, 87, 187, 147, 160, 175, 69, 213, 92, 253, 225, 19), 56: (175, 9, 223, 238, 12, 17, 220, 208, 100, 29, 175, 170, 230, 192, 215, 235, 150, 159, 36, 223, 38, 200, 132, 54, 228, 146, 218, 234, 117, 203, 29, 232, 144, 238, 22, 150, 201, 117, 62, 207, 164, 13, 137, 245, 127, 67, 247, 28, 155, 43, 203, 107, 233, 53, 143, 46), 62: (242, 93, 169, 50, 144, 210, 39, 118, 202, 188, 201, 189, 143, 108, 196, 37, 185, 112, 134, 230, 245, 63, 197, 190, 250, 106, 185, 221, 175, 64, 114, 71, 161, 44, 147, 6, 27, 218, 51, 63, 87, 10, 40, 130, 188, 17, 163, 31, 176, 170, 4, 107, 232, 7, 94, 166, 224, 124, 86, 47, 11, 204), 68: (220, 228, 173, 89, 251, 149, 159, 56, 89, 33, 147, 244, 154, 36, 73, 127, 213, 136, 248, 180, 234, 197, 158, 177, 68, 122, 93, 213, 15, 160, 227, 236, 66, 139, 153, 185, 202, 167, 179, 25, 220, 232, 96, 210, 231, 136, 223, 239, 181, 241, 59, 52, 172, 25, 49, 232, 211, 189, 64, 54, 108, 153, 132, 63, 96, 103, 82, 186) } LOGVAL = ( -255, 255, 1, 240, 2, 225, 241, 53, 3, 38, 226, 133, 242, 43, 54, 210, 4, 195, 39, 114, 227, 106, 134, 28, 243, 140, 44, 23, 55, 118, 211, 234, 5, 219, 196, 96, 40, 222, 115, 103, 228, 78, 107, 125, 135, 8, 29, 162, 244, 186, 141, 180, 45, 99, 24, 49, 56, 13, 119, 153, 212, 199, 235, 91, 6, 76, 220, 217, 197, 11, 97, 184, 41, 36, 223, 253, 116, 138, 104, 193, 229, 86, 79, 171, 108, 165, 126, 145, 136, 34, 9, 74, 30, 32, 163, 84, 245, 173, 187, 204, 142, 81, 181, 190, 46, 88, 100, 159, 25, 231, 50, 207, 57, 147, 14, 67, 120, 128, 154, 248, 213, 167, 200, 63, 236, 110, 92, 176, 7, 161, 77, 124, 221, 102, 218, 95, 198, 90, 12, 152, 98, 48, 185, 179, 42, 209, 37, 132, 224, 52, 254, 239, 117, 233, 139, 22, 105, 27, 194, 113, 230, 206, 87, 158, 80, 189, 172, 203, 109, 175, 166, 62, 127, 247, 146, 66, 137, 192, 35, 252, 10, 183, 75, 216, 31, 83, 33, 73, 164, 144, 85, 170, 246, 65, 174, 61, 188, 202, 205, 157, 143, 169, 82, 72, 182, 215, 191, 251, 47, 178, 89, 151, 101, 94, 160, 123, 26, 112, 232, 21, 51, 238, 208, 131, 58, 69, 148, 18, 15, 16, 68, 17, 121, 149, 129, 19, 155, 59, 249, 70, 214, 250, 168, 71, 201, 156, 64, 60, 237, 130, 111, 20, 93, 122, 177, 150 ) ALOGVAL = ( 1, 2, 4, 8, 16, 32, 64, 128, 45, 90, 180, 69, 138, 57, 114, 228, 229, 231, 227, 235, 251, 219, 155, 27, 54, 108, 216, 157, 23, 46, 92, 184, 93, 186, 89, 178, 73, 146, 9, 18, 36, 72, 144, 13, 26, 52, 104, 208, 141, 55, 110, 220, 149, 7, 14, 28, 56, 112, 224, 237, 247, 195, 171, 123, 246, 193, 175, 115, 230, 225, 239, 243, 203, 187, 91, 182, 65, 130, 41, 82, 164, 101, 202, 185, 95, 190, 81, 162, 105, 210, 137, 63, 126, 252, 213, 135, 35, 70, 140, 53, 106, 212, 133, 39, 78, 156, 21, 42, 84, 168, 125, 250, 217, 159, 19, 38, 76, 152, 29, 58, 116, 232, 253, 215, 131, 43, 86, 172, 117, 234, 249, 223, 147, 11, 22, 44, 88, 176, 77, 154, 25, 50, 100, 200, 189, 87, 174, 113, 226, 233, 255, 211, 139, 59, 118, 236, 245, 199, 163, 107, 214, 129, 47, 94, 188, 85, 170, 121, 242, 201, 191, 83, 166, 97, 194, 169, 127, 254, 209, 143, 51, 102, 204, 181, 71, 142, 49, 98, 196, 165, 103, 206, 177, 79, 158, 17, 34, 68, 136, 61, 122, 244, 197, 167, 99, 198, 161, 111, 222, 145, 15, 30, 60, 120, 240, 205, 183, 67, 134, 33, 66, 132, 37, 74, 148, 5, 10, 20, 40, 80, 160, 109, 218, 153, 31, 62, 124, 248, 221, 151, 3, 6, 12, 24, 48, 96, 192, 173, 119, 238, 241, 207, 179, 75, 150, 1 ) from reportlab.graphics.barcode.common import Barcode class ECC200DataMatrix(Barcode): '''This code only supports a Type 12 (44x44) C40 encoded data matrix. This is the size and encoding that Royal Mail wants on all mail from October 1st 2015. see https://bitbucket.org/rptlab/reportlab/issues/69/implementations-of-code-128-auto-and-data ''' barWidth = 4 def __init__(self, *args, **kwargs): Barcode.__init__(self,*args, **kwargs) # These values below are hardcoded for a Type 12 44x44 data matrix self.row_modules = 44 self.col_modules = 44 self.row_regions = 2 self.col_regions = 2 self.cw_data = 144 self.cw_ecc = 56 self.row_usable_modules = self.row_modules - self.row_regions * 2 self.col_usable_modules = self.col_modules - self.col_regions * 2 def validate(self): self.valid = 1 for c in self.value: if ord(c) > 255: self.valid = 0 break else: self.validated = self.value def _encode_c40_char(self, char): o = ord(char) encoded = [] if o == 32 or (o >= 48 and o <= 57) or (o >= 65 and o <= 90): # Stay in set 0 if o == 32: encoded.append(o - 29) elif o >= 48 and o <= 57: encoded.append(o - 44) else: encoded.append(o - 51) elif o >= 0 and o <= 31: encoded.append(0) # Shift to set 1 encoded.append(o) elif (o >= 33 and o <= 64) or (o >= 91 and o <= 95): encoded.append(1) # Shift to set 2 if o >= 33 and o <= 64: encoded.append(o - 33) else: encoded.append(o - 69) elif o >= 96 and o <= 127: encoded.append(2) # Shift to set 3 encoded.append(o - 96) elif o >= 128 and o <= 255: # Extended ASCII encoded.append(1) # Shift to set 2 encoded.append(30) # Upper shift / hibit encoded += self._encode_c40_char(chr(o - 128)) else: raise Exception('Cannot encode %s (%s)' % (char, o)) return encoded def _encode_c40(self, value): encoded = [] for c in value: encoded += self._encode_c40_char(c) while len(encoded) % 3: encoded.append(0) # Fake padding that makes chunking in the next step easier codewords = [] codewords.append(230) # Switch to C40 encoding for i in range(0, len(encoded), 3): chunk = encoded[i:i+3] total = chunk[0] * 1600 + chunk[1] * 40 + chunk[2] + 1 codewords.append(total // 256) codewords.append(total % 256) codewords.append(254) # End of data if len(codewords) > self.cw_data: raise Exception('Too much data to fit into a data matrix of this size') if len(codewords) < self.cw_data: # Real padding codewords.append(129) # Start padding while len(codewords) < self.cw_data: r = ((149 * (len(codewords) + 1)) % 253) + 1 codewords.append((129 + r) % 254) return codewords def _gfsum(self, int1, int2): return int1 ^ int2 def _gfproduct(self, int1, int2): if int1 == 0 or int2 == 0: return 0 else: return ALOGVAL[(LOGVAL[int1] + LOGVAL[int2]) % 255] def _get_reed_solomon_code(self, data, num_code_words): """ This method is basically verbatim from "huBarcode" which is BSD licensed https://github.com/hudora/huBarcode/blob/master/hubarcode/datamatrix/reedsolomon.py """ cw_factors = FACTORS[num_code_words] code_words = [0] * num_code_words for data_word in data: tmp = self._gfsum(data_word, code_words[-1]) for j in range(num_code_words - 1, -1, -1): code_words[j] = self._gfproduct(tmp, cw_factors[j]) if j > 0: code_words[j] = self._gfsum(code_words[j - 1], code_words[j]) code_words.reverse() return code_words def _get_next_bits(self, data): value = data.pop(0) bits = [] for i in range(0, 8): bits.append(value >> i & 1) bits.reverse() return bits def _place_bit(self, row, col, bit): if row < 0: row += self.row_usable_modules col += (4 - ((self.row_usable_modules + 4) % 8)) if col < 0: col += self.col_usable_modules row += (4 - ((self.col_usable_modules + 4) % 8)) self._matrix[row][col] = bit def _place_bit_corner_1(self, data): bits = self._get_next_bits(data) self._place_bit(self.row_usable_modules - 1, 0, bits[0]) self._place_bit(self.row_usable_modules - 1, 1, bits[1]) self._place_bit(self.row_usable_modules - 1, 2, bits[2]) self._place_bit(0, self.col_usable_modules - 2, bits[3]) self._place_bit(0, self.col_usable_modules - 1, bits[4]) self._place_bit(1, self.col_usable_modules - 1, bits[5]) self._place_bit(2, self.col_usable_modules - 1, bits[6]) self._place_bit(3, self.col_usable_modules - 1, bits[7]) def _place_bit_corner_2(self, data): bits = self._get_next_bits(data) self._place_bit(self.row_usable_modules - 3, 0, bits[0]) self._place_bit(self.row_usable_modules - 2, 0, bits[1]) self._place_bit(self.row_usable_modules - 1, 0, bits[2]) self._place_bit(0, self.col_usable_modules - 4, bits[3]) self._place_bit(0, self.col_usable_modules - 3, bits[4]) self._place_bit(0, self.col_usable_modules - 2, bits[5]) self._place_bit(0, self.col_usable_modules - 1, bits[6]) self._place_bit(1, self.col_usable_modules - 1, bits[7]) def _place_bit_corner_3(self, data): bits = self._get_next_bits(data) self._place_bit(self.row_usable_modules - 3, 0, bits[0]) self._place_bit(self.row_usable_modules - 2, 0, bits[1]) self._place_bit(self.row_usable_modules - 1, 0, bits[2]) self._place_bit(0, self.col_usable_modules - 2, bits[3]) self._place_bit(0, self.col_usable_modules - 1, bits[4]) self._place_bit(1, self.col_usable_modules - 1, bits[5]) self._place_bit(2, self.col_usable_modules - 1, bits[6]) self._place_bit(3, self.col_usable_modules - 1, bits[7]) def _place_bit_corner_4(self, data): bits = self._get_next_bits(data) self._place_bit(self.row_usable_modules - 1, 0, bits[0]) self._place_bit(self.row_usable_modules - 1, self.col_usable_modules - 1, bits[1]) self._place_bit(0, self.col_usable_modules - 3, bits[2]) self._place_bit(0, self.col_usable_modules - 2, bits[3]) self._place_bit(0, self.col_usable_modules - 1, bits[4]) self._place_bit(1, self.col_usable_modules - 3, bits[5]) self._place_bit(1, self.col_usable_modules - 2, bits[6]) self._place_bit(1, self.col_usable_modules - 1, bits[7]) def _place_bit_standard(self, data, row, col): bits = self._get_next_bits(data) self._place_bit(row - 2, col - 2, bits[0]) self._place_bit(row - 2, col - 1, bits[1]) self._place_bit(row - 1, col - 2, bits[2]) self._place_bit(row - 1, col - 1, bits[3]) self._place_bit(row - 1, col, bits[4]) self._place_bit(row, col - 2, bits[5]) self._place_bit(row, col - 1, bits[6]) self._place_bit(row, col, bits[7]) def _create_matrix(self, data): """ This method is heavily influenced by "huBarcode" which is BSD licensed https://github.com/hudora/huBarcode/blob/master/hubarcode/datamatrix/placement.py """ rows = self.row_usable_modules cols = self.col_usable_modules self._matrix = self._create_empty_matrix(rows, cols) row = 4 col = 0 while True: if row == rows and col == 0: self._place_bit_corner_1(data) elif row == (rows - 2) and col == 0 and (cols % 4): self._place_bit_corner_2(data) elif row == (rows - 2) and col == 0 and (cols % 8 == 4): self._place_bit_corner_3(data) elif row == (rows + 4) and col == 2 and (cols % 8 == 0): self._place_bit_corner_4(data) while True: if row < rows and col >= 0 and self._matrix[row][col] is None: self._place_bit_standard(data, row, col) row -= 2 col += 2 if row < 0 or col >= cols: break row += 1 col += 3 while True: if row >= 0 and col < cols and self._matrix[row][col] is None: self._place_bit_standard(data, row, col) row += 2 col -= 2 if row >= rows or col < 0: break row += 3 col += 1 if row >= rows and col >= cols: break for row in self._matrix: for i in range(0, cols): if row[i] is None: row[i] = 0 return self._matrix def _create_data_regions(self, matrix): regions = [] col_offset = 0 row_offset = 0 rows = int(self.row_usable_modules / self.row_regions) cols = int(self.col_usable_modules / self.col_regions) while col_offset < self.row_regions: while row_offset < self.col_regions: r_offset = col_offset * rows c_offset = row_offset * cols region = matrix[r_offset:rows+r_offset] for i in range(0, len(region)): region[i] = region[i][c_offset:cols+c_offset] regions.append(region) row_offset += 1 row_offset = 0 col_offset += 1 return regions def _create_empty_matrix(self, row, col): matrix = [] for i in range(0, row): matrix.append([None] * col) return matrix def _wrap_data_regions_with_finders(self, regions): wrapped = [] for region in regions: matrix = self._create_empty_matrix( int(self.col_modules / self.col_regions), int(self.row_modules / self.row_regions) ) for i, rows in enumerate(region): for j, data in enumerate(rows): matrix[i+1][j+1] = data for i, row in enumerate(matrix): if i == 0: for j, col in enumerate(row): row[j] = (j + 1) % 2 elif i + 1 == len(matrix): for j, col in enumerate(row): row[j] = 1 else: row[0] = 1 row[-1] = i % 2 wrapped.append(matrix) return wrapped def _merge_data_regions(self, regions): merged = [] for i in range(0, len(regions), self.row_regions): chunk = regions[i:i+self.row_regions] j = 0 while j < len(chunk[0]): merged_row = [] for row in chunk: merged_row += row[j] merged.append(merged_row) j += 1 return merged def encode(self): if hasattr(self, 'encoded'): return self.encoded encoded = self._encode_c40(self.validated) encoded += self._get_reed_solomon_code(encoded, self.cw_ecc) matrix = self._create_matrix(encoded) data_regions = self._create_data_regions(matrix) wrapped = self._wrap_data_regions_with_finders(data_regions) self.encoded = self._merge_data_regions(wrapped) self.encoded.reverse() # Helpful since PDFs start at bottom left corner return self.encoded def computeSize(self, *args): self._height = self.row_modules * self.barWidth self._width = self.col_modules * self.barWidth def draw(self): for y, row in enumerate(self.encoded): for x, data in enumerate(row): if data: self.rect( self.x + x * self.barWidth, self.y + y * self.barWidth, self.barWidth, self.barWidth ) reportlab-3.5.34/src/reportlab/graphics/barcode/lto.py0000664000175000017500000001636013544671343023544 0ustar rptlabrptlab00000000000000# (c) 2008 Jerome Alet - # Licensing terms : ReportLab's license. from reportlab.graphics.barcode.code39 import Standard39 from reportlab.lib import colors from reportlab.lib.units import cm from string import digits as string_digits from reportlab.lib.utils import ascii_uppercase class BaseLTOLabel(Standard39) : """ Base class for LTO labels. Specification taken from "IBM LTO Ultrium Cartridge Label Specification, Revision 3" available on May 14th 2008 from : http://www-1.ibm.com/support/docview.wss?rs=543&context=STCVQ6R&q1=ssg1*&uid=ssg1S7000429&loc=en_US&cs=utf-8&lang=en+en """ LABELWIDTH = 7.9 * cm LABELHEIGHT = 1.7 * cm LABELROUND = 0.15 * cm CODERATIO = 2.75 CODENOMINALWIDTH = 7.4088 * cm CODEBARHEIGHT = 1.11 * cm CODEBARWIDTH = 0.0432 * cm CODEGAP = CODEBARWIDTH CODELQUIET = 10 * CODEBARWIDTH CODERQUIET = 10 * CODEBARWIDTH def __init__(self, prefix="", number=None, subtype="1", border=None, checksum=False, availheight=None) : """ Initializes an LTO label. prefix : Up to six characters from [A-Z][0-9]. Defaults to "". number : Label's number or None. Defaults to None. subtype : LTO subtype string , e.g. "1" for LTO1. Defaults to "1". border : None, or the width of the label's border. Defaults to None. checksum : Boolean indicates if checksum char has to be printed. Defaults to False. availheight : Available height on the label, or None for automatic. Defaults to None. """ self.height = max(availheight, self.CODEBARHEIGHT) self.border = border if (len(subtype) != 1) \ or (subtype not in ascii_uppercase + string_digits) : raise ValueError("Invalid subtype '%s'" % subtype) if ((not number) and (len(prefix) > 6)) \ or not prefix.isalnum() : raise ValueError("Invalid prefix '%s'" % prefix) label = "%sL%s" % ((prefix + str(number or 0).zfill(6 - len(prefix)))[:6], subtype) if len(label) != 8 : raise ValueError("Invalid set of parameters (%s, %s, %s)" \ % (prefix, number, subtype)) self.label = label Standard39.__init__(self, label, ratio=self.CODERATIO, barHeight=self.height, barWidth=self.CODEBARWIDTH, gap=self.CODEGAP, lquiet=self.CODELQUIET, rquiet=self.CODERQUIET, quiet=True, checksum=checksum) def drawOn(self, canvas, x, y) : """Draws the LTO label onto the canvas.""" canvas.saveState() canvas.translate(x, y) if self.border : canvas.setLineWidth(self.border) canvas.roundRect(0, 0, self.LABELWIDTH, self.LABELHEIGHT, self.LABELROUND) Standard39.drawOn(self, canvas, (self.LABELWIDTH-self.CODENOMINALWIDTH)/2.0, self.LABELHEIGHT-self.height) canvas.restoreState() class VerticalLTOLabel(BaseLTOLabel) : """ A class for LTO labels with rectangular blocks around the tape identifier. """ LABELFONT = ("Helvetica-Bold", 14) BLOCKWIDTH = 1*cm BLOCKHEIGHT = 0.45*cm LINEWIDTH = 0.0125 NBBLOCKS = 7 COLORSCHEME = ("red", "yellow", "lightgreen", "lightblue", "grey", "orangered", "pink", "darkgreen", "orange", "purple") def __init__(self, *args, **kwargs) : """ Initializes the label. colored : boolean to determine if blocks have to be colorized. """ if "colored" in kwargs: self.colored = kwargs["colored"] del kwargs["colored"] else : self.colored = False kwargs["availheight"] = self.LABELHEIGHT-self.BLOCKHEIGHT BaseLTOLabel.__init__(self, *args, **kwargs) def drawOn(self, canvas, x, y) : """Draws some blocks around the identifier's characters.""" BaseLTOLabel.drawOn(self, canvas, x, y) canvas.saveState() canvas.setLineWidth(self.LINEWIDTH) canvas.setStrokeColorRGB(0, 0, 0) canvas.translate(x, y) xblocks = (self.LABELWIDTH-(self.NBBLOCKS*self.BLOCKWIDTH))/2.0 for i in range(self.NBBLOCKS) : (font, size) = self.LABELFONT newfont = self.LABELFONT if i == (self.NBBLOCKS - 1) : part = self.label[i:] (font, size) = newfont size /= 2.0 newfont = (font, size) else : part = self.label[i] canvas.saveState() canvas.translate(xblocks+(i*self.BLOCKWIDTH), 0) if self.colored and part.isdigit() : canvas.setFillColorRGB(*getattr(colors, self.COLORSCHEME[int(part)], colors.Color(1, 1, 1)).rgb()) else: canvas.setFillColorRGB(1, 1, 1) canvas.rect(0, 0, self.BLOCKWIDTH, self.BLOCKHEIGHT, fill=True) canvas.translate((self.BLOCKWIDTH+canvas.stringWidth(part, *newfont))/2.0, (self.BLOCKHEIGHT/2.0)) canvas.rotate(90.0) canvas.setFont(*newfont) canvas.setFillColorRGB(0, 0, 0) canvas.drawCentredString(0, 0, part) canvas.restoreState() canvas.restoreState() def test() : """Test this.""" from reportlab.pdfgen.canvas import Canvas from reportlab.lib import pagesizes canvas = Canvas("labels.pdf", pagesize=pagesizes.A4) canvas.setFont("Helvetica", 30) (width, height) = pagesizes.A4 canvas.drawCentredString(width/2.0, height-4*cm, "Sample LTO labels") xpos = xorig = 2 * cm ypos = yorig = 2 * cm colwidth = 10 * cm lineheight = 3.9 * cm count = 1234 BaseLTOLabel("RL", count, "3").drawOn(canvas, xpos, ypos) ypos += lineheight count += 1 BaseLTOLabel("RL", count, "3", border=0.0125).drawOn(canvas, xpos, ypos) ypos += lineheight count += 1 VerticalLTOLabel("RL", count, "3").drawOn(canvas, xpos, ypos) ypos += lineheight count += 1 VerticalLTOLabel("RL", count, "3", border=0.0125).drawOn(canvas, xpos, ypos) ypos += lineheight count += 1 VerticalLTOLabel("RL", count, "3", colored=True).drawOn(canvas, xpos, ypos) ypos += lineheight count += 1 VerticalLTOLabel("RL", count, "3", border=0.0125, colored=True).drawOn(canvas, xpos, ypos) canvas.showPage() canvas.save() if __name__ == "__main__" : test() reportlab-3.5.34/src/reportlab/graphics/barcode/qrencoder.py0000664000175000017500000010251513544671343024726 0ustar rptlabrptlab00000000000000# QRCode for Python # # Support for Kanji, Hanzi, ECI, FNC1 and Structurded append, # and optimizations by Anders Hammarquist # # Copyright (c) 2014 Open End AB http://www.openend.se/ # # Ported from the Javascript library by Sam Curren # # QRCode for Javascript # http://d-project.googlecode.com/svn/trunk/misc/qrcode/js/qrcode.js # # Copyright (c) 2009 Kazuhiko Arase # # URL: http://www.d-project.com/ # # Licensed under the MIT license: # http://www.opensource.org/licenses/mit-license.php # # The word "QR Code" is registered trademark of # DENSO WAVE INCORPORATED # http://www.denso-wave.com/qrcode/faqpatent-e.html import re import itertools try: from itertools import zip_longest except: from itertools import izip_longest as zip_longest try: unicode except NameError: # No unicode in Python 3 unicode = str class QR: valid = None bits = None group = 0 def __init__(self, data): if self.valid and not self.valid(data): raise ValueError self.data = data def __len__(self): return len(self.data) @property def bitlength(self): if self.bits is None: return 0 q, r = divmod(len(self), len(self.bits)) return q * sum(self.bits) + sum(self.bits[:r]) def getLengthBits(self, ver): if 0 < ver < 10: return self.lengthbits[0] elif ver < 27: return self.lengthbits[1] elif ver < 41: return self.lengthbits[2] raise ValueError("Unknown version: " + ver) def getLength(self): return len(self.data) def __repr__(self): return repr(self.data) def write_header(self, buffer, version): buffer.put(self.mode, 4) lenbits = self.getLengthBits(version) if lenbits: buffer.put(len(self.data), lenbits ) def write(self, buffer, version): self.write_header(buffer, version) for g in zip_longest(*[iter(self.data)] * self.group): bits = 0 n = 0 for i in range(self.group): if g[i] is not None: n *= len(self.chars) n += self.chars.index(g[i]) bits += self.bits[i] buffer.put(n, bits) class QRNumber(QR): valid = re.compile(u'[0-9]*$').match chars = u'0123456789' bits = (4,3,3) group = 3 mode = 0x1 lengthbits = (10, 12, 14) class QRAlphaNum(QR): valid = re.compile(u'[-0-9A-Z $%*+./:]*$').match chars = u'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:' bits = (6,5) group = 2 mode = 0x2 lengthbits = (9, 11, 13) class QR8bitByte(QR): bits = (8,) group = 1 mode = 0x4 lengthbits = (8, 16, 16) def __init__(self, data): if isinstance(data, unicode): self.data = data.encode('utf-8') # XXX This really needs an ECI too else: self.data = data # It'd better be byte data def write(self, buffer, version): self.write_header(buffer, version) for c in self.data: if isinstance(c, str): c = ord(c) buffer.put(c, 8) class QRKanji(QR): bits = (13,) group = 1 mode = 0x8 lengthbits = (8, 10, 12) def __init__(self, data): try: self.data = self.unicode_to_qrkanji(data) except UnicodeEncodeError: raise ValueError('Not valid kanji') def unicode_to_qrkanji(self, data): codes = [] for i,c in enumerate(data): try: c = c.encode('shift-jis') try: c,d = map(ord, c) except TypeError: # Python 3 c,d = c except UnicodeEncodeError as e: raise UnicodeEncodeError('qrkanji', data, i, i+1, e.args[4]) except ValueError: raise UnicodeEncodeError('qrkanji', data, i, i+1, 'illegal multibyte sequence') c = c << 8 | d if 0x8140 <= c <=0x9ffc: c -= 0x8140 c = (((c & 0xff00) >> 8) * 0xc0) + (c & 0xff) elif 0xe040 <= c <= 0xebbf: c -= 0xc140 c = (((c & 0xff00) >> 8) * 0xc0) + (c & 0xff) else: raise UnicodeEncodeError('qrkanji', data, i, i+1, 'illegal multibyte sequence') codes.append(c) return codes def write(self, buffer, version): self.write_header(buffer, version) for d in self.data: buffer.put(d, 13) class QRHanzi(QR): bits = (13,) group = 1 mode = 0xD lengthbits = (8, 10, 12) def __init__(self, data): try: self.data = self.unicode_to_qrhanzi(data) except UnicodeEncodeError: raise ValueError('Not valid hanzi') def unicode_to_qrhanzi(self, data): codes = [] for i,c in enumerate(data): try: c = c.encode('gb2312') try: c,d = map(ord, c) except TypeError: # Python 3 c,d = c except UnicodeEncodeError as e: raise UnicodeEncodeError('qrhanzi', data, i, i+1, e.args[4]) except ValueError: raise UnicodeEncodeError('qrhanzi', data, i, i+1, 'illegal multibyte sequence') c = c << 8 | d if 0xa1a1 <= c <=0xaafe: c -= 0xa1a1 c = (((c & 0xff00) >> 8) * 0x60) + (c & 0xff) elif 0xb0a1 <= c <= 0xfafe: c -= 0xa6a1 c = (((c & 0xff00) >> 8) * 0x60) + (c & 0xff) else: raise UnicodeEncodeError('qrhanzi', data, i, i+1, 'illegal multibyte sequence') codes.append(c) return codes def write_header(self, buffer, version): buffer.put(self.mode, 4) buffer.put(1, 4) # Subset 1: GB2312 encoding lenbits = self.getLengthBits(version) if lenbits: buffer.put(len(self.data), lenbits ) def write(self, buffer, version): self.write_header(buffer, version) for d in self.data: buffer.put(d, 13) # Special modes class QRECI(QR): mode = 0x7 lengthbits = (0, 0, 0) def __init__(self, data): if not 0 < data < 999999: # Spec says 999999, format supports up to 0x1fffff = 2097151 raise ValueError("ECI out of range") self.data = data def write(self, buffer, version): self.write_header(buffer, version) if self.data <= 0x7f: buffer.put(self.data, 8) elif self.data <= 0x3fff: buffer.put(self.data | 0x8000, 16) elif self.data <= 0x1fffff: buffer.put(self.data | 0xC00000, 24) class QRStructAppend(QR): mode = 0x3 lengthbits = (0, 0, 0) def __init__(self, part, total, parity): if not 0 < part <= 16: raise ValueError("part out of range [1,16]") if not 0 < total <= 16: raise ValueError("total out of range [1,16]") self.part = part self.total = total self.parity = parity def write(self, buffer, version): self.write_header(buffer, version) buffer.put(self.part, 4) buffer.put(self.total, 4) buffer.put(self.parity, 8) class QRFNC1First(QR): mode = 0x5 lengthbits = (0, 0, 0) def __init__(self): pass def write(self, buffer, version): self.write_header(buffer, version) class QRFNC1Second(QR): valid = re.compile('^([A-Za-z]|[0-9][0-9])$').match mode = 0x9 lengthbits = (0, 0, 0) def write(self, buffer, version): self.write_header(buffer, version) d = self.data if len(d) == 1: d = ord(d) + 100 else: d = int(d) buffer.put(d, 8) class QRCode: def __init__(self, version, errorCorrectLevel): self.version = version self.errorCorrectLevel = errorCorrectLevel self.modules = None self.moduleCount = 0 self.dataCache = None self.dataList = [] def addData(self, data): if isinstance(data, QR): newData = data else: for conv in (QRNumber, QRAlphaNum, QRKanji, QR8bitByte): try: newData = conv(data) break except ValueError: pass else: raise ValueError self.dataList.append(newData) self.dataCache = None def isDark(self, row, col): return self.modules[row][col] def getModuleCount(self): return self.moduleCount def calculate_version(self): # Calculate version for data to fit the QR Code capacity for version in range(1, 40): rsBlocks = QRRSBlock.getRSBlocks(version, self.errorCorrectLevel) totalDataCount = sum(block.dataCount for block in rsBlocks) length = 0 for data in self.dataList: length += 4 length += data.getLengthBits(version) length += data.bitlength if length <= totalDataCount * 8: break return version def make(self): if self.version is None: self.version = self.calculate_version() self.makeImpl(False, self.getBestMaskPattern()) def makeImpl(self, test, maskPattern): self.moduleCount = self.version * 4 + 17 self.modules = [ [False] * self.moduleCount for x in range(self.moduleCount) ] self.setupPositionProbePattern(0, 0) self.setupPositionProbePattern(self.moduleCount - 7, 0) self.setupPositionProbePattern(0, self.moduleCount - 7) self.setupPositionAdjustPattern() self.setupTimingPattern() self.setupTypeInfo(test, maskPattern) if (self.version >= 7): self.setupTypeNumber(test) if (self.dataCache == None): self.dataCache = QRCode.createData(self.version, self.errorCorrectLevel, self.dataList) self.mapData(self.dataCache, maskPattern) _positionProbePattern = [ [True, True, True, True, True, True, True], [True, False, False, False, False, False, True], [True, False, True, True, True, False, True], [True, False, True, True, True, False, True], [True, False, True, True, True, False, True], [True, False, False, False, False, False, True], [True, True, True, True, True, True, True], ] def setupPositionProbePattern(self, row, col): if row == 0: self.modules[row+7][col:col+7] = [False] * 7 if col == 0: self.modules[row+7][col+7] = False else: self.modules[row+7][col-1] = False else: # col == 0 self.modules[row-1][col:col+8] = [False] * 8 for r, data in enumerate(self._positionProbePattern): self.modules[row+r][col:col+7] = data if col == 0: self.modules[row+r][col+7] = False else: self.modules[row+r][col-1] = False def getBestMaskPattern(self): minLostPoint = 0 pattern = 0 for i in range(8): self.makeImpl(True, i); lostPoint = QRUtil.getLostPoint(self); if (i == 0 or minLostPoint > lostPoint): minLostPoint = lostPoint pattern = i return pattern def setupTimingPattern(self): for r in range(8, self.moduleCount - 8): self.modules[r][6] = (r % 2 == 0) self.modules[6][8:self.moduleCount - 8] = itertools.islice( itertools.cycle([True, False]), self.moduleCount - 16) _positionAdjustPattern = [ [True, True, True, True, True], [True, False, False, False, True], [True, False, True, False, True], [True, False, False, False, True], [True, True, True, True, True], ] def setupPositionAdjustPattern(self): pos = QRUtil.getPatternPosition(self.version) maxpos = self.moduleCount - 8 for row, col in itertools.product(pos, pos): if col <= 8 and (row <= 8 or row >= maxpos): continue elif col >= maxpos and row <= 8: continue for r, data in enumerate(self._positionAdjustPattern): self.modules[row + r - 2][col-2:col+3] = data def setupTypeNumber(self, test): bits = QRUtil.getBCHTypeNumber(self.version) for i in range(18): mod = (not test and ( (bits >> i) & 1) == 1) self.modules[i // 3][i % 3 + self.moduleCount - 8 - 3] = mod; for i in range(18): mod = (not test and ( (bits >> i) & 1) == 1) self.modules[i % 3 + self.moduleCount - 8 - 3][i // 3] = mod; def setupTypeInfo(self, test, maskPattern): data = (self.errorCorrectLevel << 3) | maskPattern bits = QRUtil.getBCHTypeInfo(data) # vertical for i in range(15): mod = (not test and ( (bits >> i) & 1) == 1) if (i < 6): self.modules[i][8] = mod elif (i < 8): self.modules[i + 1][8] = mod else: self.modules[self.moduleCount - 15 + i][8] = mod # horizontal for i in range(15): mod = (not test and ( (bits >> i) & 1) == 1); if (i < 8): self.modules[8][self.moduleCount - i - 1] = mod elif (i < 9): self.modules[8][15 - i - 1 + 1] = mod else: self.modules[8][15 - i - 1] = mod # fixed module self.modules[self.moduleCount - 8][8] = (not test) def _dataPosIterator(self): cols = itertools.chain(range(self.moduleCount - 1, 6, -2), range(5, 0, -2)) rows = (list(range(9, self.moduleCount - 8)), list(itertools.chain(range(6), range(7, self.moduleCount))), list(range(9, self.moduleCount))) rrows = tuple( list(reversed(r)) for r in rows) ppos = QRUtil.getPatternPosition(self.version) ppos = set(itertools.chain.from_iterable( (p-2, p-1, p, p+1, p+2) for p in ppos)) maxpos = self.moduleCount - 11 for col in cols: rows, rrows = rrows, rows if col <= 8: rowidx = 0 elif col >= self.moduleCount - 8: rowidx = 2 else: rowidx = 1 for row in rows[rowidx]: for c in range(2): c = col - c if self.version >= 7: if row < 6 and c >= self.moduleCount - 11: continue elif col < 6 and row >= self.moduleCount - 11: continue if row in ppos and c in ppos: if not (row < 11 and (c < 11 or c > maxpos) or c < 11 and (row < 11 or row > maxpos)): continue yield (c, row) _dataPosList = None def dataPosIterator(self): if not self._dataPosList: self._dataPosList = list(self._dataPosIterator()) return self._dataPosList def _dataBitIterator(self, data): for byte in data: for bit in [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]: yield bool(byte & bit) _dataBitList = None def dataBitIterator(self, data): if not self._dataBitList: self._dataBitList = list(self._dataBitIterator(data)) return iter(self._dataBitList) def mapData(self, data, maskPattern): bits = self.dataBitIterator(data) mask = QRUtil.getMask(maskPattern) for (col, row), dark in zip_longest(self.dataPosIterator(), bits, fillvalue=False): self.modules[row][col] = dark ^ mask(row, col) PAD0 = 0xEC PAD1 = 0x11 @staticmethod def createData(version, errorCorrectLevel, dataList): rsBlocks = QRRSBlock.getRSBlocks(version, errorCorrectLevel) buffer = QRBitBuffer(); for data in dataList: data.write(buffer, version) # calc num max data. totalDataCount = 0; for block in rsBlocks: totalDataCount += block.dataCount if (buffer.getLengthInBits() > totalDataCount * 8): raise Exception("code length overflow. (%d > %d)" % (buffer.getLengthInBits(), totalDataCount * 8)) # end code if (buffer.getLengthInBits() + 4 <= totalDataCount * 8): buffer.put(0, 4) # padding while (buffer.getLengthInBits() % 8 != 0): buffer.putBit(False) # padding while (True): if (buffer.getLengthInBits() >= totalDataCount * 8): break buffer.put(QRCode.PAD0, 8) if (buffer.getLengthInBits() >= totalDataCount * 8): break buffer.put(QRCode.PAD1, 8) return QRCode.createBytes(buffer, rsBlocks) @staticmethod def createBytes(buffer, rsBlocks): offset = 0 maxDcCount = 0 maxEcCount = 0 totalCodeCount = 0 dcdata = [] ecdata = [] for block in rsBlocks: totalCodeCount += block.totalCount dcCount = block.dataCount ecCount = block.totalCount - dcCount maxDcCount = max(maxDcCount, dcCount) maxEcCount = max(maxEcCount, ecCount) dcdata.append(buffer.buffer[offset:offset+dcCount]) offset += dcCount rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount) rawPoly = QRPolynomial(dcdata[-1], rsPoly.getLength() - 1) modPoly = rawPoly.mod(rsPoly) rLen = rsPoly.getLength() - 1 mLen = modPoly.getLength() ecdata.append([ (modPoly.get(i) if i >= 0 else 0) for i in range(mLen - rLen, mLen) ]) data = [ d for dd in itertools.chain( zip_longest(*dcdata), zip_longest(*ecdata)) for d in dd if d is not None] return data class QRErrorCorrectLevel: L = 1 M = 0 Q = 3 H = 2 class QRMaskPattern: PATTERN000 = 0 PATTERN001 = 1 PATTERN010 = 2 PATTERN011 = 3 PATTERN100 = 4 PATTERN101 = 5 PATTERN110 = 6 PATTERN111 = 7 class QRUtil(object): PATTERN_POSITION_TABLE = [ [], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170] ] G15 = ((1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)) G18 = ((1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)) G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1) @staticmethod def getBCHTypeInfo(data): d = data << 10; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0): d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ) return ( (data << 10) | d) ^ QRUtil.G15_MASK @staticmethod def getBCHTypeNumber(data): d = data << 12; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0): d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ) return (data << 12) | d @staticmethod def getBCHDigit(data): digit = 0; while (data != 0): digit += 1 data >>= 1 return digit @staticmethod def getPatternPosition(version): return QRUtil.PATTERN_POSITION_TABLE[version - 1] maskPattern = { 0: lambda i,j: (i + j) % 2 == 0, 1: lambda i,j: i % 2 == 0, 2: lambda i,j: j % 3 == 0, 3: lambda i,j: (i + j) % 3 == 0, 4: lambda i,j: (i // 2 + j // 3) % 2 == 0, 5: lambda i,j: (i*j)%2 + (i*j)%3 == 0, 6: lambda i,j: ( (i * j) % 2 + (i * j) % 3) % 2 == 0, 7: lambda i,j: ( (i * j) % 3 + (i + j) % 2) % 2 == 0 } @classmethod def getMask(cls, maskPattern): return cls.maskPattern[maskPattern] @staticmethod def getErrorCorrectPolynomial(errorCorrectLength): a = QRPolynomial([1], 0); for i in range(errorCorrectLength): a = a.multiply(QRPolynomial([1, QRMath.gexp(i)], 0) ) return a @classmethod def maskScoreRule1vert(cls, modules): score = 0 lastCount = [0] lastRow = None for row in modules: # Vertical patterns if lastRow: changed = [a ^ b for a,b in zip(row, lastRow)] scores = [a and (b-4+3) for a,b in zip_longest(changed, lastCount, fillvalue=0) if b >= 4] score += sum(scores) lastCount = [0 if a else b + 1 for a,b in zip_longest(changed, lastCount, fillvalue=0)] lastRow = row score += sum([b-4+3 for b in lastCount if b >= 4]) # final counts return score @classmethod def maskScoreRule2(cls, modules): score = 0 lastRow = modules[0] for row in modules[1:]: lastCol0, lastCol1 = row[0], lastRow[0] for col0, col1 in zip(row[1:], lastRow[1:]): if col0 == col1 == lastCol0 == lastCol1: score += 3 lastCol0, lastCol1 = col0, col1 lastRow = row return score @classmethod def maskScoreRule3hor( cls, modules, pattern = [True, False, True, True, True, False, True, False, False, False, False]): patternlen = len(pattern) score = 0 for row in modules: j = 0 maxj = len(row) - patternlen while j < maxj: if row[j:j+patternlen] == pattern: score += 40 j += patternlen else: j += 1 return score @classmethod def maskScoreRule4(cls, modules): cellCount = len(modules)**2 count = sum(sum(row) for row in modules) return 10 * (abs(100 * count // cellCount - 50) // 5) @classmethod def getLostPoint(cls, qrCode): lostPoint = 0; # LEVEL1 lostPoint += cls.maskScoreRule1vert(qrCode.modules) lostPoint += cls.maskScoreRule1vert(zip(*qrCode.modules)) # LEVEL2 lostPoint += cls.maskScoreRule2(qrCode.modules) # LEVEL3 lostPoint += cls.maskScoreRule3hor(qrCode.modules) lostPoint += cls.maskScoreRule3hor(zip(*qrCode.modules)) # LEVEL4 lostPoint += cls.maskScoreRule4(qrCode.modules) return lostPoint class QRMath: @staticmethod def glog(n): if (n < 1): raise Exception("glog(" + n + ")") return LOG_TABLE[n]; @staticmethod def gexp(n): while n < 0: n += 255 while n >= 256: n -= 255 return EXP_TABLE[n]; EXP_TABLE = [x for x in range(256)] LOG_TABLE = [x for x in range(256)] for i in range(8): EXP_TABLE[i] = 1 << i; for i in range(8, 256): EXP_TABLE[i] = (EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8]) for i in range(255): LOG_TABLE[EXP_TABLE[i] ] = i class QRPolynomial: def __init__(self, num, shift): if (len(num) == 0): raise Exception(len(num) + "/" + shift) offset = 0 while offset < len(num) and num[offset] == 0: offset += 1 self.num = num[offset:] + [0]*shift def get(self, index): return self.num[index] def getLength(self): return len(self.num) def multiply(self, e): num = [0] * (self.getLength() + e.getLength() - 1); for i in range(self.getLength()): for j in range(e.getLength()): num[i + j] ^= QRMath.gexp(QRMath.glog(self.get(i) ) + QRMath.glog(e.get(j) ) ) return QRPolynomial(num, 0); def mod(self, e): if (self.getLength() < e.getLength()): return self; ratio = QRMath.glog(self.num[0] ) - QRMath.glog(e.num[0] ) num = [nn ^ QRMath.gexp(QRMath.glog(en) + ratio) for nn,en in zip(self.num, e.num)] num += self.num[e.getLength():] # recursive call return QRPolynomial(num, 0).mod(e); class QRRSBlock: RS_BLOCK_TABLE = [ # L # M # Q # H # 1 [1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], # 2 [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], # 3 [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], # 4 [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], # 5 [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], # 6 [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], # 7 [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], # 8 [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], # 9 [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], # 10 [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], # 11 [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], # 12 [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], # 13 [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], # 14 [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], # 15 [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], # 16 [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], # 17 [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], # 18 [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], # 19 [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], # 20 [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], # 21 [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], # 22 [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], # 23 [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], # 24 [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], # 25 [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], # 26 [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], # 27 [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], # 28 [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], # 29 [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], # 30 [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], # 31 [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], # 32 [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], # 33 [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], # 34 [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], # 35 [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], # 36 [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], # 37 [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], # 38 [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], # 39 [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], # 40 [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16] ] def __init__(self, totalCount, dataCount): self.totalCount = totalCount self.dataCount = dataCount @staticmethod def getRSBlocks(version, errorCorrectLevel): rsBlock = QRRSBlock.getRsBlockTable(version, errorCorrectLevel); if rsBlock == None: raise Exception("bad rs block @ version:" + version + "/errorCorrectLevel:" + errorCorrectLevel) length = len(rsBlock) // 3 list = [] for i in range(length): count = rsBlock[i * 3 + 0] totalCount = rsBlock[i * 3 + 1] dataCount = rsBlock[i * 3 + 2] for j in range(count): list.append(QRRSBlock(totalCount, dataCount)) return list; @staticmethod def getRsBlockTable(version, errorCorrectLevel): if errorCorrectLevel == QRErrorCorrectLevel.L: return QRRSBlock.RS_BLOCK_TABLE[(version - 1) * 4 + 0]; elif errorCorrectLevel == QRErrorCorrectLevel.M: return QRRSBlock.RS_BLOCK_TABLE[(version - 1) * 4 + 1]; elif errorCorrectLevel == QRErrorCorrectLevel.Q: return QRRSBlock.RS_BLOCK_TABLE[(version - 1) * 4 + 2]; elif errorCorrectLevel == QRErrorCorrectLevel.H: return QRRSBlock.RS_BLOCK_TABLE[(version - 1) * 4 + 3]; else: return None; class QRBitBuffer: def __init__(self): self.buffer = [] self.length = 0 def __repr__(self): return ".".join([str(n) for n in self.buffer]) def get(self, index): bufIndex = index // 8 return ( (self.buffer[bufIndex] >> (7 - index % 8) ) & 1) == 1 def put(self, num, length): for i in range(length): self.putBit( ( (num >> (length - i - 1) ) & 1) == 1) def getLengthInBits(self): return self.length def putBit(self, bit): bufIndex = self.length // 8 if len(self.buffer) <= bufIndex: self.buffer.append(0) if bit: self.buffer[bufIndex] |= (0x80 >> (self.length % 8) ) self.length += 1 reportlab-3.5.34/src/reportlab/graphics/barcode/common.py0000664000175000017500000005561113544671343024240 0ustar rptlabrptlab00000000000000# # Copyright (c) 1996-2000 Tyler C. Sarna # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # from reportlab.platypus.flowables import Flowable from reportlab.lib.units import inch from reportlab.lib.utils import ascii_uppercase, ascii_lowercase from string import digits as string_digits class Barcode(Flowable): """Abstract Base for barcodes. Includes implementations of some methods suitable for the more primitive barcode types""" fontName = 'Courier' fontSize = 12 humanReadable = 0 def _humanText(self): return self.encoded def __init__(self, value='',**kwd): self.value = str(value) self._setKeywords(**kwd) if not hasattr(self, 'gap'): self.gap = None def _calculate(self): self.validate() self.encode() self.decompose() self.computeSize() def _setKeywords(self,**kwd): for (k, v) in kwd.items(): setattr(self, k, v) def validate(self): self.valid = 1 self.validated = self.value def encode(self): self.encoded = self.validated def decompose(self): self.decomposed = self.encoded def computeSize(self, *args): barWidth = self.barWidth wx = barWidth * self.ratio if self.gap == None: self.gap = barWidth w = 0.0 for c in self.decomposed: if c in 'sb': w = w + barWidth elif c in 'SB': w = w + wx else: # 'i' w = w + self.gap if self.barHeight is None: self.barHeight = w * 0.15 self.barHeight = max(0.25 * inch, self.barHeight) if self.bearers: self.barHeight = self.barHeight + self.bearers * 2.0 * barWidth if self.quiet: w += self.lquiet + self.rquiet self._height = self.barHeight self._width = w def width(self): self._calculate() return self._width width = property(width) def height(self): self._calculate() return self._height height = property(height) def draw(self): self._calculate() barWidth = self.barWidth wx = barWidth * self.ratio left = self.quiet and self.lquiet or 0 b = self.bearers * barWidth bb = b * 0.5 tb = self.barHeight - (b * 1.5) for c in self.decomposed: if c == 'i': left = left + self.gap elif c == 's': left = left + barWidth elif c == 'S': left = left + wx elif c == 'b': self.rect(left, bb, barWidth, tb) left = left + barWidth elif c == 'B': self.rect(left, bb, wx, tb) left = left + wx if self.bearers: self.rect(self.lquiet, 0, \ self._width - (self.lquiet + self.rquiet), b) self.rect(self.lquiet, self.barHeight - b, \ self._width - (self.lquiet + self.rquiet), b) self.drawHumanReadable() def drawHumanReadable(self): if self.humanReadable: #we have text from reportlab.pdfbase.pdfmetrics import getAscent, stringWidth s = str(self._humanText()) fontSize = self.fontSize fontName = self.fontName w = stringWidth(s,fontName,fontSize) width = self._width if self.quiet: width -= self.lquiet+self.rquiet x = self.lquiet else: x = 0 if w>width: fontSize *= width/float(w) y = 1.07*getAscent(fontName)*fontSize/1000. self.annotate(x+width/2.,-y,s,fontName,fontSize) def rect(self, x, y, w, h): self.canv.rect(x, y, w, h, stroke=0, fill=1) def annotate(self,x,y,text,fontName,fontSize,anchor='middle'): canv = self.canv canv.saveState() canv.setFont(self.fontName,fontSize) if anchor=='middle': func = 'drawCentredString' elif anchor=='end': func = 'drawRightString' else: func = 'drawString' getattr(canv,func)(x,y,text) canv.restoreState() class MultiWidthBarcode(Barcode): """Base for variable-bar-width codes like Code93 and Code128""" def computeSize(self, *args): barWidth = self.barWidth oa, oA = ord('a') - 1, ord('A') - 1 w = 0.0 for c in self.decomposed: oc = ord(c) if c in ascii_lowercase: w = w + barWidth * (oc - oa) elif c in ascii_uppercase: w = w + barWidth * (oc - oA) if self.barHeight is None: self.barHeight = w * 0.15 self.barHeight = max(0.25 * inch, self.barHeight) if self.quiet: w += self.lquiet + self.rquiet self._height = self.barHeight self._width = w def draw(self): self._calculate() oa, oA = ord('a') - 1, ord('A') - 1 barWidth = self.barWidth left = self.quiet and self.lquiet or 0 for c in self.decomposed: oc = ord(c) if c in ascii_lowercase: left = left + (oc - oa) * barWidth elif c in ascii_uppercase: w = (oc - oA) * barWidth self.rect(left, 0, w, self.barHeight) left += w self.drawHumanReadable() class I2of5(Barcode): """ Interleaved 2 of 5 is a numeric-only barcode. It encodes an even number of digits; if an odd number is given, a 0 is prepended. Options that may be passed to constructor: value (int, or numeric string required.): The value to encode. barWidth (float, default .0075): X-Dimension, or width of the smallest element Minumum is .0075 inch (7.5 mils). ratio (float, default 2.2): The ratio of wide elements to narrow elements. Must be between 2.0 and 3.0 (or 2.2 and 3.0 if the barWidth is greater than 20 mils (.02 inch)) gap (float or None, default None): width of intercharacter gap. None means "use barWidth". barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. checksum (bool, default 1): Whether to compute and include the check digit bearers (float, in units of barWidth. default 3.0): Height of bearer bars (horizontal bars along the top and bottom of the barcode). Default is 3 x-dimensions. Set to zero for no bearer bars. (Bearer bars help detect misscans, so it is suggested to leave them on). quiet (bool, default 1): Whether to include quiet zones in the symbol. lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or .15 times the symbol's length. rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. stop (bool, default 1): Whether to include start/stop symbols. Sources of Information on Interleaved 2 of 5: http://www.semiconductor.agilent.com/barcode/sg/Misc/i_25.html http://www.adams1.com/pub/russadam/i25code.html Official Spec, "ANSI/AIM BC2-1995, USS" is available for US$45 from http://www.aimglobal.org/aimstore/ """ patterns = { 'start' : 'bsbs', 'stop' : 'Bsb', 'B0' : 'bbBBb', 'S0' : 'ssSSs', 'B1' : 'BbbbB', 'S1' : 'SsssS', 'B2' : 'bBbbB', 'S2' : 'sSssS', 'B3' : 'BBbbb', 'S3' : 'SSsss', 'B4' : 'bbBbB', 'S4' : 'ssSsS', 'B5' : 'BbBbb', 'S5' : 'SsSss', 'B6' : 'bBBbb', 'S6' : 'sSSss', 'B7' : 'bbbBB', 'S7' : 'sssSS', 'B8' : 'BbbBb', 'S8' : 'SssSs', 'B9' : 'bBbBb', 'S9' : 'sSsSs' } barHeight = None barWidth = inch * 0.0075 ratio = 2.2 checksum = 1 bearers = 3.0 quiet = 1 lquiet = None rquiet = None stop = 1 def __init__(self, value='', **args): if type(value) == type(1): value = str(value) for k, v in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = min(inch * 0.25, self.barWidth * 10.0) self.rquiet = min(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 Barcode.__init__(self, value) def validate(self): vval = "" self.valid = 1 for c in self.value.strip(): if c not in string_digits: self.valid = 0 continue vval = vval + c self.validated = vval return vval def encode(self): s = self.validated cs = self.checksum c = len(s) #ensure len(result)%2 == 0, checksum included if ((c % 2 == 0) and cs) or ((c % 2 == 1) and not cs): s = '0' + s c += 1 if cs: c = 3*sum([int(s[i]) for i in range(0,c,2)])+sum([int(s[i]) for i in range(1,c,2)]) s += str((10 - c) % 10) self.encoded = s def decompose(self): dval = self.stop and [self.patterns['start']] or [] a = dval.append for i in range(0, len(self.encoded), 2): b = self.patterns['B' + self.encoded[i]] s = self.patterns['S' + self.encoded[i+1]] for i in range(0, len(b)): a(b[i] + s[i]) if self.stop: a(self.patterns['stop']) self.decomposed = ''.join(dval) return self.decomposed class MSI(Barcode): """ MSI is a numeric-only barcode. Options that may be passed to constructor: value (int, or numeric string required.): The value to encode. barWidth (float, default .0075): X-Dimension, or width of the smallest element ratio (float, default 2.2): The ratio of wide elements to narrow elements. gap (float or None, default None): width of intercharacter gap. None means "use barWidth". barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. checksum (bool, default 1): Wether to compute and include the check digit bearers (float, in units of barWidth. default 0): Height of bearer bars (horizontal bars along the top and bottom of the barcode). Default is 0 (no bearers). lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or 10 barWidths. rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. stop (bool, default 1): Whether to include start/stop symbols. Sources of Information on MSI Bar Code: http://www.semiconductor.agilent.com/barcode/sg/Misc/msi_code.html http://www.adams1.com/pub/russadam/plessy.html """ patterns = { 'start' : 'Bs', 'stop' : 'bSb', '0' : 'bSbSbSbS', '1' : 'bSbSbSBs', '2' : 'bSbSBsbS', '3' : 'bSbSBsBs', '4' : 'bSBsbSbS', '5' : 'bSBsbSBs', '6' : 'bSBsBsbS', '7' : 'bSBsBsBs', '8' : 'BsbSbSbS', '9' : 'BsbSbSBs' } stop = 1 barHeight = None barWidth = inch * 0.0075 ratio = 2.2 checksum = 1 bearers = 0.0 quiet = 1 lquiet = None rquiet = None def __init__(self, value="", **args): if type(value) == type(1): value = str(value) for k, v in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = max(inch * 0.25, self.barWidth * 10.0) self.rquiet = max(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 Barcode.__init__(self, value) def validate(self): vval = "" self.valid = 1 for c in self.value.strip(): if c not in string_digits: self.valid = 0 continue vval = vval + c self.validated = vval return vval def encode(self): s = self.validated if self.checksum: c = '' for i in range(1, len(s), 2): c = c + s[i] d = str(int(c) * 2) t = 0 for c in d: t = t + int(c) for i in range(0, len(s), 2): t = t + int(s[i]) c = 10 - (t % 10) s = s + str(c) self.encoded = s def decompose(self): dval = self.stop and [self.patterns['start']] or [] dval += [self.patterns[c] for c in self.encoded] if self.stop: dval.append(self.patterns['stop']) self.decomposed = ''.join(dval) return self.decomposed class Codabar(Barcode): """ Codabar is a numeric plus some puntuation ("-$:/.+") barcode with four start/stop characters (A, B, C, and D). Options that may be passed to constructor: value (string required.): The value to encode. barWidth (float, default .0065): X-Dimension, or width of the smallest element minimum is 6.5 mils (.0065 inch) ratio (float, default 2.0): The ratio of wide elements to narrow elements. gap (float or None, default None): width of intercharacter gap. None means "use barWidth". barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. checksum (bool, default 0): Whether to compute and include the check digit bearers (float, in units of barWidth. default 0): Height of bearer bars (horizontal bars along the top and bottom of the barcode). Default is 0 (no bearers). quiet (bool, default 1): Whether to include quiet zones in the symbol. stop (bool, default 1): Whether to include start/stop symbols. lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or 10 barWidth rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. Sources of Information on Codabar http://www.semiconductor.agilent.com/barcode/sg/Misc/codabar.html http://www.barcodeman.com/codabar.html Official Spec, "ANSI/AIM BC3-1995, USS" is available for US$45 from http://www.aimglobal.org/aimstore/ """ patterns = { '0': 'bsbsbSB', '1': 'bsbsBSb', '2': 'bsbSbsB', '3': 'BSbsbsb', '4': 'bsBsbSb', '5': 'BsbsbSb', '6': 'bSbsbsB', '7': 'bSbsBsb', '8': 'bSBsbsb', '9': 'BsbSbsb', '-': 'bsbSBsb', '$': 'bsBSbsb', ':': 'BsbsBsB', '/': 'BsBsbsB', '.': 'BsBsBsb', '+': 'bsBsBsB', 'A': 'bsBSbSb', 'B': 'bSbSbsB', 'C': 'bsbSbSB', 'D': 'bsbSBSb' } values = { '0' : 0, '1' : 1, '2' : 2, '3' : 3, '4' : 4, '5' : 5, '6' : 6, '7' : 7, '8' : 8, '9' : 9, '-' : 10, '$' : 11, ':' : 12, '/' : 13, '.' : 14, '+' : 15, 'A' : 16, 'B' : 17, 'C' : 18, 'D' : 19 } chars = string_digits + "-$:/.+" stop = 1 barHeight = None barWidth = inch * 0.0065 ratio = 2.0 # XXX ? checksum = 0 bearers = 0.0 quiet = 1 lquiet = None rquiet = None def __init__(self, value='', **args): if type(value) == type(1): value = str(value) for k, v in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = min(inch * 0.25, self.barWidth * 10.0) self.rquiet = min(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 Barcode.__init__(self, value) def validate(self): vval = "" self.valid = 1 s = self.value.strip() for i in range(0, len(s)): c = s[i] if c not in self.chars: if ((i != 0) and (i != len(s) - 1)) or (c not in 'ABCD'): self.Valid = 0 continue vval = vval + c if self.stop: if vval[0] not in 'ABCD': vval = 'A' + vval if vval[-1] not in 'ABCD': vval = vval + vval[0] self.validated = vval return vval def encode(self): s = self.validated if self.checksum: v = sum([self.values[c] for c in s]) s += self.chars[v % 16] self.encoded = s def decompose(self): dval = ''.join([self.patterns[c]+'i' for c in self.encoded]) self.decomposed = dval[:-1] return self.decomposed class Code11(Barcode): """ Code 11 is an almost-numeric barcode. It encodes the digits 0-9 plus dash ("-"). 11 characters total, hence the name. value (int or string required.): The value to encode. barWidth (float, default .0075): X-Dimension, or width of the smallest element ratio (float, default 2.2): The ratio of wide elements to narrow elements. gap (float or None, default None): width of intercharacter gap. None means "use barWidth". barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. checksum (0 none, 1 1-digit, 2 2-digit, -1 auto, default -1): How many checksum digits to include. -1 ("auto") means 1 if the number of digits is 10 or less, else 2. bearers (float, in units of barWidth. default 0): Height of bearer bars (horizontal bars along the top and bottom of the barcode). Default is 0 (no bearers). quiet (bool, default 1): Wether to include quiet zones in the symbol. lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or 10 barWidth rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. Sources of Information on Code 11: http://www.cwi.nl/people/dik/english/codes/barcodes.html """ chars = '0123456789-' patterns = { '0' : 'bsbsB', '1' : 'BsbsB', '2' : 'bSbsB', '3' : 'BSbsb', '4' : 'bsBsB', '5' : 'BsBsb', '6' : 'bSBsb', '7' : 'bsbSB', '8' : 'BsbSb', '9' : 'Bsbsb', '-' : 'bsBsb', 'S' : 'bsBSb' # Start/Stop } values = { '0' : 0, '1' : 1, '2' : 2, '3' : 3, '4' : 4, '5' : 5, '6' : 6, '7' : 7, '8' : 8, '9' : 9, '-' : 10, } stop = 1 barHeight = None barWidth = inch * 0.0075 ratio = 2.2 # XXX ? checksum = -1 # Auto bearers = 0.0 quiet = 1 lquiet = None rquiet = None def __init__(self, value='', **args): if type(value) == type(1): value = str(value) for k, v in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = min(inch * 0.25, self.barWidth * 10.0) self.rquiet = min(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 Barcode.__init__(self, value) def validate(self): vval = "" self.valid = 1 s = self.value.strip() for i in range(0, len(s)): c = s[i] if c not in self.chars: self.Valid = 0 continue vval = vval + c self.validated = vval return vval def _addCSD(self,s,m): # compute first checksum i = c = 0 v = 1 V = self.values while i < len(s): c += v * V[s[-(i+1)]] i += 1 v += 1 if v==m: v = 1 return s+self.chars[c % 11] def encode(self): s = self.validated tcs = self.checksum if tcs<0: self.checksum = tcs = 1+int(len(s)>10) if tcs > 0: s = self._addCSD(s,11) if tcs > 1: s = self._addCSD(s,10) self.encoded = self.stop and ('S' + s + 'S') or s def decompose(self): self.decomposed = ''.join([(self.patterns[c]+'i') for c in self.encoded])[:-1] return self.decomposed def _humanText(self): return self.stop and self.encoded[1:-1] or self.encoded reportlab-3.5.34/src/reportlab/graphics/barcode/qr.py0000664000175000017500000001462213544671343023367 0ustar rptlabrptlab00000000000000# # ReportLab QRCode widget # # Ported from the Javascript library QRCode for Javascript by Sam Curren # # URL: http://www.d-project.com/ # http://d-project.googlecode.com/svn/trunk/misc/qrcode/js/qrcode.js # qrcode.js is copyright (c) 2009 Kazuhiko Arase # # Original ReportLab module by German M. Bravo # # modified and improved by Anders Hammarquist # and used with permission under the ReportLab License # # The word "QR Code" is registered trademark of # DENSO WAVE INCORPORATED # http://www.denso-wave.com/qrcode/faqpatent-e.html __all__ = ('QrCodeWidget') import itertools from reportlab.platypus.flowables import Flowable from reportlab.graphics.shapes import Group, Rect from reportlab.lib import colors from reportlab.lib.validators import isNumber, isNumberOrNone, isColor, isString, Validator from reportlab.lib.attrmap import AttrMap, AttrMapValue from reportlab.graphics.widgetbase import Widget from reportlab.lib.units import mm try: from reportlab.lib.utils import asUnicodeEx, isUnicode except ImportError: # ReportLab 2.x compatibility def asUnicodeEx(v, enc='utf8'): if isinstance(v, unicode): return v if isinstance(v, str): return v.decode(enc) return str(v).decode(enc) def isUnicode(v): return isinstance(v, unicode) from reportlab.graphics.barcode import qrencoder class isLevel(Validator): def test(self, x): return x in ['L', 'M', 'Q', 'H'] isLevel = isLevel() class isUnicodeOrQRList(Validator): def _test(self, x): if isUnicode(x): return True if all(isinstance(v, qrencoder.QR) for v in x): return True return False def test(self, x): return self._test(x) or self.normalizeTest(x) def normalize(self, x): if self._test(x): return x try: return asUnicodeEx(x) except UnicodeError: raise ValueError("Can't convert to unicode: %r" % x) isUnicodeOrQRList = isUnicodeOrQRList() class SRect(Rect): def __init__(self, x, y, width, height, fillColor=colors.black): Rect.__init__(self, x, y, width, height, fillColor=fillColor, strokeColor=None, strokeWidth=0) class QrCodeWidget(Widget): codeName = "QR" _attrMap = AttrMap( BASE = Widget, value = AttrMapValue(isUnicodeOrQRList, desc='QRCode data'), x = AttrMapValue(isNumber, desc='x-coord'), y = AttrMapValue(isNumber, desc='y-coord'), barFillColor = AttrMapValue(isColor, desc='bar color'), barWidth = AttrMapValue(isNumber, desc='Width of bars.'), # maybe should be named just width? barHeight = AttrMapValue(isNumber, desc='Height of bars.'), # maybe should be named just height? barBorder = AttrMapValue(isNumber, desc='Width of QR border.'), # maybe should be named qrBorder? barLevel = AttrMapValue(isLevel, desc='QR Code level.'), # maybe should be named qrLevel qrVersion = AttrMapValue(isNumberOrNone, desc='QR Code version. None for auto'), # Below are ignored, they make no sense barStrokeWidth = AttrMapValue(isNumber, desc='Width of bar borders.'), barStrokeColor = AttrMapValue(isColor, desc='Color of bar borders.'), ) x = 0 y = 0 barFillColor = colors.black barStrokeColor = None barStrokeWidth = 0 barHeight = 32*mm barWidth = 32*mm barBorder = 4 barLevel = 'L' qrVersion = None value = None def __init__(self, value='Hello World', **kw): self.value = isUnicodeOrQRList.normalize(value) for k, v in kw.items(): setattr(self, k, v) ec_level = getattr(qrencoder.QRErrorCorrectLevel, self.barLevel) self.__dict__['qr'] = qrencoder.QRCode(self.qrVersion, ec_level) if isUnicode(self.value): self.addData(self.value) elif self.value: for v in self.value: self.addData(v) def addData(self, value): self.qr.addData(value) def draw(self): self.qr.make() g = Group() color = self.barFillColor border = self.barBorder width = self.barWidth height = self.barHeight x = self.x y = self.y g.add(SRect(x, y, width, height, fillColor=None)) moduleCount = self.qr.getModuleCount() minwh = float(min(width, height)) boxsize = minwh / (moduleCount + border * 2.0) offsetX = x + (width - minwh) / 2.0 offsetY = y + (minwh - height) / 2.0 for r, row in enumerate(self.qr.modules): row = map(bool, row) c = 0 for t, tt in itertools.groupby(row): isDark = t count = len(list(tt)) if isDark: x = (c + border) * boxsize y = (r + border + 1) * boxsize s = SRect(offsetX + x, offsetY + height - y, count * boxsize, boxsize) g.add(s) c += count return g # Flowable version class QrCode(Flowable): height = 32*mm width = 32*mm qrBorder = 4 qrLevel = 'L' qrVersion = None value = None def __init__(self, value=None, **kw): self.value = isUnicodeOrQRList.normalize(value) for k, v in kw.items(): setattr(self, k, v) ec_level = getattr(qrencoder.QRErrorCorrectLevel, self.qrLevel) self.qr = qrencoder.QRCode(self.qrVersion, ec_level) if isUnicode(self.value): self.addData(self.value) elif self.value: for v in self.value: self.addData(v) def addData(self, value): self.qr.addData(value) def draw(self): self.qr.make() moduleCount = self.qr.getModuleCount() border = self.qrBorder xsize = self.width / (moduleCount + border * 2.0) ysize = self.height / (moduleCount + border * 2.0) for r, row in enumerate(self.qr.modules): row = map(bool, row) c = 0 for t, tt in itertools.groupby(row): isDark = t count = len(list(tt)) if isDark: x = (c + border) * xsize y = self.height - (r + border + 1) * ysize self.rect(x, y, count * xsize, ysize * 1.05) c += count def rect(self, x, y, w, h): self.canv.rect(x, y, w, h, stroke=0, fill=1) reportlab-3.5.34/src/reportlab/graphics/barcode/test.py0000664000175000017500000002430213554340114023706 0ustar rptlabrptlab00000000000000#!/usr/pkg/bin/python import os, sys, time from reportlab import Version as __RL_Version__ from reportlab.graphics.barcode.common import * from reportlab.graphics.barcode.code39 import * from reportlab.graphics.barcode.code93 import * from reportlab.graphics.barcode.code128 import * from reportlab.graphics.barcode.usps import * from reportlab.graphics.barcode.usps4s import USPS_4State from reportlab.graphics.barcode.qr import QrCodeWidget from reportlab.platypus import Spacer, SimpleDocTemplate, Table, TableStyle, Preformatted, PageBreak from reportlab.lib.units import inch, cm from reportlab.lib import colors from reportlab.pdfgen.canvas import Canvas from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus.paragraph import Paragraph from reportlab.platypus.frames import Frame from reportlab.platypus.flowables import XBox, KeepTogether from reportlab.graphics.shapes import Drawing, Rect, Line from reportlab.graphics.barcode import getCodes, getCodeNames, createBarcodeDrawing, createBarcodeImageInMemory def run(): styles = getSampleStyleSheet() styleN = styles['Normal'] styleH = styles['Heading1'] story = [] storyAdd = story.append #for codeNames in code storyAdd(Paragraph('I2of5', styleN)) storyAdd(I2of5(1234, barWidth = inch*0.02, checksum=0)) storyAdd(Paragraph('MSI', styleN)) storyAdd(MSI(1234)) storyAdd(Paragraph('Codabar', styleN)) storyAdd(Codabar("A012345B", barWidth = inch*0.02)) storyAdd(Paragraph('Code 11', styleN)) storyAdd(Code11("01234545634563")) storyAdd(Paragraph('Code 39', styleN)) storyAdd(Standard39("A012345B%R")) storyAdd(Paragraph('Extended Code 39', styleN)) storyAdd(Extended39("A012345B}")) storyAdd(Paragraph('Code93', styleN)) storyAdd(Standard93("CODE 93")) storyAdd(Paragraph('Extended Code93', styleN)) storyAdd(Extended93("L@@K! Code 93 :-)")) #, barWidth=0.005 * inch)) storyAdd(Paragraph('Code 128', styleN)) storyAdd(Code128("AB-12345678")) storyAdd(Paragraph('Code 128 Auto', styleN)) storyAdd(Code128Auto("AB-12345678")) storyAdd(Paragraph('USPS FIM', styleN)) storyAdd(FIM("A")) storyAdd(Paragraph('USPS POSTNET', styleN)) storyAdd(POSTNET('78247-1043')) storyAdd(Paragraph('USPS 4 State', styleN)) storyAdd(USPS_4State('01234567094987654321','01234567891')) from reportlab.graphics.barcode import createBarcodeDrawing storyAdd(Paragraph('EAN13', styleN)) storyAdd(createBarcodeDrawing('EAN13', value='123456789012')) storyAdd(Paragraph('EAN13 quiet=False', styleN)) storyAdd(createBarcodeDrawing('EAN13', value='123456789012', quiet=False)) storyAdd(Paragraph('EAN8', styleN)) storyAdd(createBarcodeDrawing('EAN8', value='1234567')) storyAdd(PageBreak()) storyAdd(Paragraph('EAN5 price=True', styleN)) storyAdd(createBarcodeDrawing('EAN5', value='11299', price=True)) storyAdd(Paragraph('EAN5 price=True quiet=False', styleN)) storyAdd(createBarcodeDrawing('EAN5', value='11299', price=True, quiet=False)) storyAdd(Paragraph('EAN5 price=False', styleN)) storyAdd(createBarcodeDrawing('EAN5', value='11299', price=False)) storyAdd(Paragraph('ISBN alone', styleN)) storyAdd(createBarcodeDrawing('ISBN', value='9781565924796')) storyAdd(Paragraph('ISBN with ean5 price', styleN)) storyAdd(createBarcodeDrawing('ISBN', value='9781565924796',price='01299')) storyAdd(Paragraph('ISBN with ean5 price, quiet=False', styleN)) storyAdd(createBarcodeDrawing('ISBN', value='9781565924796',price='01299',quiet=False)) storyAdd(Paragraph('UPCA', styleN)) storyAdd(createBarcodeDrawing('UPCA', value='03600029145')) storyAdd(Paragraph('USPS_4State', styleN)) storyAdd(createBarcodeDrawing('USPS_4State', value='01234567094987654321',routing='01234567891')) storyAdd(Paragraph('QR', styleN)) storyAdd(createBarcodeDrawing('QR', value='01234567094987654321')) storyAdd(Paragraph('QR', styleN)) storyAdd(createBarcodeDrawing('QR', value='01234567094987654321',x=30,y=50)) storyAdd(Paragraph('QR in drawing at (0,0)', styleN)) d = Drawing(100,100) d.add(Rect(0,0,100,100,strokeWidth=1,strokeColor=colors.red,fillColor=None)) d.add(QrCodeWidget(value='01234567094987654321')) storyAdd(d) storyAdd(Paragraph('QR in drawing at (10,10)', styleN)) d = Drawing(100,100) d.add(Rect(0,0,100,100,strokeWidth=1,strokeColor=colors.red,fillColor=None)) d.add(Line(7.5,10,12.5,10,strokeWidth=0.5,strokeColor=colors.blue)) d.add(Line(10,7.5, 10, 12.5,strokeWidth=0.5,strokeColor=colors.blue)) d.add(QrCodeWidget(value='01234567094987654321',x=10,y=10)) storyAdd(d) storyAdd(Paragraph('Label Size', styleN)) storyAdd(XBox((2.0 + 5.0/8.0)*inch, 1 * inch, '1x2-5/8"')) storyAdd(Paragraph('Label Size', styleN)) storyAdd(XBox((1.75)*inch, .5 * inch, '1/2x1-3/4"')) SimpleDocTemplate('out.pdf').build(story) print('saved out.pdf') def fullTest(fileName="test_full.pdf"): """Creates large-ish test document with a variety of parameters""" story = [] styles = getSampleStyleSheet() styleN = styles['Normal'] styleH = styles['Heading1'] styleH2 = styles['Heading2'] story = [] story.append(Paragraph('ReportLab %s Barcode Test Suite - full output' % __RL_Version__,styleH)) story.append(Paragraph('Generated at %s' % time.ctime(time.time()), styleN)) story.append(Paragraph('About this document', styleH2)) story.append(Paragraph('History and Status', styleH2)) story.append(Paragraph(""" This is the test suite and docoumentation for the ReportLab open source barcode API. """, styleN)) story.append(Paragraph(""" Several years ago Ty Sarna contributed a barcode module to the ReportLab community. Several of the codes were used by him in hiw work and to the best of our knowledge this was correct. These were written as flowable objects and were available in PDFs, but not in our graphics framework. However, we had no knowledge of barcodes ourselves and did not advertise or extend the package. """, styleN)) story.append(Paragraph(""" We "wrapped" the barcodes to be usable within our graphics framework; they are now available as Drawing objects which can be rendered to EPS files or bitmaps. For the last 2 years this has been available in our Diagra and Report Markup Language products. However, we did not charge separately and use was on an "as is" basis. """, styleN)) story.append(Paragraph(""" A major licensee of our technology has kindly agreed to part-fund proper productisation of this code on an open source basis in Q1 2006. This has involved addition of EAN codes as well as a proper testing program. Henceforth we intend to publicise the code more widely, gather feedback, accept contributions of code and treat it as "supported". """, styleN)) story.append(Paragraph(""" This involved making available both downloads and testing resources. This PDF document is the output of the current test suite. It contains codes you can scan (if you use a nice sharp laser printer!), and will be extended over coming weeks to include usage examples and notes on each barcode and how widely tested they are. This is being done through documentation strings in the barcode objects themselves so should always be up to date. """, styleN)) story.append(Paragraph('Usage examples', styleH2)) story.append(Paragraph(""" To be completed """, styleN)) story.append(Paragraph('The codes', styleH2)) story.append(Paragraph(""" Below we show a scannable code from each barcode, with and without human-readable text. These are magnified about 2x from the natural size done by the original author to aid inspection. This will be expanded to include several test cases per code, and to add explanations of checksums. Be aware that (a) if you enter numeric codes which are too short they may be prefixed for you (e.g. "123" for an 8-digit code becomes "00000123"), and that the scanned results and readable text will generally include extra checksums at the end. """, styleN)) codeNames = getCodeNames() from reportlab.lib.utils import flatten width = [float(x[8:]) for x in sys.argv if x.startswith('--width=')] height = [float(x[9:]) for x in sys.argv if x.startswith('--height=')] isoScale = [int(x[11:]) for x in sys.argv if x.startswith('--isoscale=')] options = {} if width: options['width'] = width[0] if height: options['height'] = height[0] if isoScale: options['isoScale'] = isoScale[0] scales = [x[8:].split(',') for x in sys.argv if x.startswith('--scale=')] scales = list(map(float,scales and flatten(scales) or [1])) scales = list(map(float,scales and flatten(scales) or [1])) for scale in scales: story.append(PageBreak()) story.append(Paragraph('Scale = %.1f'%scale, styleH2)) story.append(Spacer(36, 12)) for codeName in codeNames: s = [Paragraph('Code: ' + codeName, styleH2)] for hr in (0,1): s.append(Spacer(36, 12)) dr = createBarcodeDrawing(codeName, humanReadable=hr,**options) dr.renderScale = scale s.append(dr) s.append(Spacer(36, 12)) s.append(Paragraph('Barcode should say: ' + dr._bc.value, styleN)) story.append(KeepTogether(s)) SimpleDocTemplate(fileName).build(story) print('created', fileName) if __name__=='__main__': run() fullTest() def createSample(name,memory): f = open(name,'wb') f.write(memory) f.close() createSample('test_cbcim.png',createBarcodeImageInMemory('EAN13', value='123456789012')) createSample('test_cbcim.gif',createBarcodeImageInMemory('EAN8', value='1234567', format='gif')) createSample('test_cbcim.pdf',createBarcodeImageInMemory('UPCA', value='03600029145',format='pdf', barHeight=40)) createSample('test_cbcim.tiff',createBarcodeImageInMemory('USPS_4State', value='01234567094987654321',routing='01234567891',format='tiff')) reportlab-3.5.34/src/reportlab/graphics/barcode/usps4s.py0000664000175000017500000003170513544671343024207 0ustar rptlabrptlab00000000000000#copyright ReportLab Inc. 2000-2016 #see license.txt for license details __version__='3.3.0' __all__ = ('USPS_4State',) from reportlab.lib.colors import black from reportlab.graphics.barcode.common import Barcode from reportlab.lib.utils import asNative class USPS_4State(Barcode): ''' USPS 4-State OneView (TM) barcode. All info from USPS-B-3200A ''' _widthSize = 1 _heightSize = 1 _fontSize = 11 _humanReadable = 0 tops = dict( F = (0.067,0.115), T = (0.021,0.040), A = (0.067,0.115), D = (0.021,0.040), ) bottoms = dict( F = (-0.067,-0.115), D = (-0.067,-0.115), T = (-0.021,-0.040), A = (-0.021,-0.040), ) dimensions = dict( width = (0.015, 0.025), pitch = (0.0416,0.050), hcz = (0.125,0.125), vcz = (0.040,0.040), ) def __init__(self,value='01234567094987654321',routing='',**kwd): self._init() value = str(value) if isinstance(value,int) else asNative(value) self._tracking = value self._routing = routing self._setKeywords(**kwd) def _init(self): self._bvalue = None self._codewords = None self._characters = None self._barcodes = None def scale(kind,D,s): V = D[kind] return 72*(V[0]*(1-s)+s*V[1]) scale = staticmethod(scale) def tracking(self,tracking): self._init() self._tracking = tracking tracking = property(lambda self: self._tracking,tracking) def routing(self,routing): self._init() self._routing = routing routing = property(lambda self: self._routing,routing) def widthSize(self,value): self._sized = None self._widthSize = value widthSize = property(lambda self: self._widthSize,widthSize) def heightSize(self,value): self._sized = None self._heightSize = value heightSize = property(lambda self: self._heightSize,heightSize) def fontSize(self,value): self._sized = None self._fontSize = value fontSize = property(lambda self: self._fontSize,fontSize) def humanReadable(self,value): self._sized = None self._humanReadable = value humanReadable = property(lambda self: self._humanReadable,humanReadable) def binary(self): '''convert the 4 state string values to binary >>> print hex(USPS_4State('01234567094987654321','').binary) 0x1122103B5C2004B1L >>> print hex(USPS_4State('01234567094987654321','01234').binary) 0xD138A87BAB5CF3804B1L >>> print hex(USPS_4State('01234567094987654321','012345678').binary) 0x202BDC097711204D21804B1L >>> print hex(USPS_4State('01234567094987654321','01234567891').binary) 0x16907B2A24ABC16A2E5C004B1L ''' value = self._bvalue if not value: routing = self.routing n = len(routing) try: if n==0: value = 0 elif n==5: value = int(routing)+1 elif n==9: value = int(routing)+100001 elif n==11: value = int(routing)+1000100001 else: raise ValueError except: raise ValueError('Problem converting %s, routing code must be 0, 5, 9 or 11 digits' % routing) tracking = self.tracking svalue = tracking[0:2] try: value *= 10 value += int(svalue[0]) value *= 5 value += int(svalue[1]) except: raise ValueError('Problem converting %s, barcode identifier must be 2 digits' % svalue) i = 2 for name,nd in (('special services',3), ('customer identifier',6), ('sequence number',9)): j = i i += nd svalue = tracking[j:i] try: if len(svalue)!=nd: raise ValueError for j in range(nd): value *= 10 value += int(svalue[j]) except: raise ValueError('Problem converting %s, %s must be %d digits' % (svalue,name,nd)) self._bvalue = value return value binary = property(binary) def codewords(self): '''convert binary value into codewords >>> print USPS_4State('01234567094987654321','01234567891').codewords) (673, 787, 607, 1022, 861, 19, 816, 1294, 35, 602) ''' if not self._codewords: value = self.binary A, J = divmod(value,636) A, I = divmod(A,1365) A, H = divmod(A,1365) A, G = divmod(A,1365) A, F = divmod(A,1365) A, E = divmod(A,1365) A, D = divmod(A,1365) A, C = divmod(A,1365) A, B = divmod(A,1365) assert 0<=A<=658, 'improper value %s passed to _2codewords A-->%s' % (hex(int(value)),A) self._fcs = _crc11(value) if self._fcs&1024: A += 659 J *= 2 self._codewords = tuple(map(int,(A,B,C,D,E,F,G,H,I,J))) return self._codewords codewords = property(codewords) def table1(self): self.__class__.table1 = _initNof13Table(5,1287) return self.__class__.table1 table1 = property(table1) def table2(self): self.__class__.table2 = _initNof13Table(2,78) return self.__class__.table2 table2 = property(table2) def characters(self): ''' convert own codewords to characters >>> print ' '.join(hex(c)[2:] for c in USPS_4State('01234567094987654321','01234567891').characters) dcb 85c 8e4 b06 6dd 1740 17c6 1200 123f 1b2b ''' if not self._characters: codewords = self.codewords fcs = self._fcs C = [] aC = C.append table1 = self.table1 table2 = self.table2 for i in range(10): cw = codewords[i] if cw<=1286: c = table1[cw] else: c = table2[cw-1287] if (fcs>>i)&1: c = ~c & 0x1fff aC(c) self._characters = tuple(C) return self._characters characters = property(characters) def barcodes(self): '''Get 4 state bar codes for current routing and tracking >>> print USPS_4State('01234567094987654321','01234567891').barcodes AADTFFDFTDADTAADAATFDTDDAAADDTDTTDAFADADDDTFFFDDTTTADFAAADFTDAADA ''' if not self._barcodes: C = self.characters B = [] aB = B.append bits2bars = self._bits2bars for dc,db,ac,ab in self.table4: aB(bits2bars[((C[dc]>>db)&1)+2*((C[ac]>>ab)&1)]) self._barcodes = ''.join(B) return self._barcodes barcodes = property(barcodes) table4 = ((7, 2, 4, 3), (1, 10, 0, 0), (9, 12, 2, 8), (5, 5, 6, 11), (8, 9, 3, 1), (0, 1, 5, 12), (2, 5, 1, 8), (4, 4, 9, 11), (6, 3, 8, 10), (3, 9, 7, 6), (5, 11, 1, 4), (8, 5, 2, 12), (9, 10, 0, 2), (7, 1, 6, 7), (3, 6, 4, 9), (0, 3, 8, 6), (6, 4, 2, 7), (1, 1, 9, 9), (7, 10, 5, 2), (4, 0, 3, 8), (6, 2, 0, 4), (8, 11, 1, 0), (9, 8, 3, 12), (2, 6, 7, 7), (5, 1, 4, 10), (1, 12, 6, 9), (7, 3, 8, 0), (5, 8, 9, 7), (4, 6, 2, 10), (3, 4, 0, 5), (8, 4, 5, 7), (7, 11, 1, 9), (6, 0, 9, 6), (0, 6, 4, 8), (2, 1, 3, 2), (5, 9, 8, 12), (4, 11, 6, 1), (9, 5, 7, 4), (3, 3, 1, 2), (0, 7, 2, 0), (1, 3, 4, 1), (6, 10, 3, 5), (8, 7, 9, 4), (2, 11, 5, 6), (0, 8, 7, 12), (4, 2, 8, 1), (5, 10, 3, 0), (9, 3, 0, 9), (6, 5, 2, 4), (7, 8, 1, 7), (5, 0, 4, 5), (2, 3, 0, 10), (6, 12, 9, 2), (3, 11, 1, 6), (8, 8, 7, 9), (5, 4, 0, 11), (1, 5, 2, 2), (9, 1, 4, 12), (8, 3, 6, 6), (7, 0, 3, 7), (4, 7, 7, 5), (0, 12, 1, 11), (2, 9, 9, 0), (6, 8, 5, 3), (3, 10, 8, 2)) _bits2bars = 'T','D','A','F' horizontalClearZone = property(lambda self: self.scale('hcz',self.dimensions,self.widthScale)) verticalClearZone = property(lambda self: self.scale('vcz',self.dimensions,self.heightScale)) pitch = property(lambda self: self.scale('pitch',self.dimensions,self.widthScale)) barWidth = property(lambda self: self.scale('width',self.dimensions,self.widthScale)) barHeight = property(lambda self: self.scale('F',self.tops,self.heightScale) - self.scale('F',self.bottoms,self.heightScale)) widthScale = property(lambda self: min(1,max(0,self.widthSize))) heightScale = property(lambda self: min(1,max(0,self.heightSize))) def width(self): self.computeSize() return self._width width = property(width) def height(self): self.computeSize() return self._height height = property(height) def computeSize(self): if not getattr(self,'_sized',None): ws = self.widthScale hs = self.heightScale barHeight = self.barHeight barWidth = self.barWidth pitch = self.pitch hcz = self.horizontalClearZone vcz = self.verticalClearZone self._width = 2*hcz + barWidth + 64*pitch self._height = 2*vcz+barHeight if self.humanReadable: self._height += self.fontSize*1.2+vcz self._sized = True def wrap(self,aW,aH): self.computeSize() return self.width, self.height def _getBarVInfo(self,y0=0): vInfo = {} hs = self.heightScale for b in ('T','D','A','F'): y = self.scale(b,self.bottoms,hs)+y0 vInfo[b] = y,self.scale(b,self.tops,hs)+y0 - y return vInfo def draw(self): self.computeSize() hcz = self.horizontalClearZone vcz = self.verticalClearZone bw = self.barWidth x = hcz y0 = vcz+self.barHeight*0.5 dw = self.pitch vInfo = self._getBarVInfo(y0) for b in self.barcodes: yb, hb = vInfo[b] self.rect(x,yb,bw,hb) x += dw self.drawHumanReadable() def value(self): tracking = self.tracking routing = self.routing routing = routing and (routing,) or () return ' '.join((tracking[0:2],tracking[2:5],tracking[5:11],tracking[11:])+routing) value = property(value,lambda self,value: self.__dict__.__setitem__('tracking',value)) def drawHumanReadable(self): if self.humanReadable: hcz = self.horizontalClearZone vcz = self.verticalClearZone fontName = self.fontName fontSize = self.fontSize y = self.barHeight+2*vcz+0.2*fontSize self.annotate(hcz,y,self.value,fontName,fontSize) def annotate(self,x,y,text,fontName,fontSize,anchor='middle'): Barcode.annotate(self,x,y,text,fontName,fontSize,anchor='start') def _crc11(value): ''' >>> print ' '.join(hex(_crc11(USPS_4State('01234567094987654321',x).binary)) for x in ('','01234','012345678','01234567891')) 0x51 0x65 0x606 0x751 ''' bytes = hex(int(value))[2:-1] bytes = '0'*(26-len(bytes))+bytes gp = 0x0F35 fcs = 0x07FF data = int(bytes[:2],16)<<5 for b in range(2,8): if (fcs ^ data)&0x400: fcs = (fcs<<1)^gp else: fcs = fcs<<1 fcs &= 0x7ff data <<= 1 for x in range(2,2*13,2): data = int(bytes[x:x+2],16)<<3 for b in range(8): if (fcs ^ data)&0x400: fcs = (fcs<<1)^gp else: fcs = fcs<<1 fcs &= 0x7ff data <<= 1 return fcs def _ru13(i): '''reverse unsigned 13 bit number >>> print _ru13(7936), _ru13(31), _ru13(47), _ru13(7808) 31 7936 7808 47 ''' r = 0 for x in range(13): r <<= 1 r |= i & 1 i >>= 1 return r def _initNof13Table(N,lenT): '''create and return table of 13 bit values with N bits on >>> T = _initNof13Table(5,1287) >>> print ' '.join('T[%d]=%d' % (i, T[i]) for i in (0,1,2,3,4,1271,1272,1284,1285,1286)) T[0]=31 T[1]=7936 T[2]=47 T[3]=7808 T[4]=55 T[1271]=6275 T[1272]=6211 T[1284]=856 T[1285]=744 T[1286]=496 ''' T = lenT*[None] l = 0 u = lenT-1 for c in range(8192): bc = 0 for b in range(13): bc += (c&(1< # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # __all__ = tuple('''registerWidget getCodes getCodeNames createBarcodeDrawing createBarcodeImageInMemory'''.split()) __version__ = '0.9' __doc__='''Popular barcodes available as reusable widgets''' _widgets = [] def registerWidget(widget): _widgets.append(widget) def _reset(): _widgets[:] = [] from reportlab.graphics.barcode.widgets import BarcodeI2of5, BarcodeCode128, BarcodeStandard93,\ BarcodeExtended93, BarcodeStandard39, BarcodeExtended39,\ BarcodeMSI, BarcodeCodabar, BarcodeCode11, BarcodeFIM,\ BarcodePOSTNET, BarcodeUSPS_4State, BarcodeCode128Auto, BarcodeECC200DataMatrix #newer codes will typically get their own module from reportlab.graphics.barcode.eanbc import Ean13BarcodeWidget, Ean8BarcodeWidget, UPCA, Ean5BarcodeWidget, ISBNBarcodeWidget from reportlab.graphics.barcode.qr import QrCodeWidget for widget in (BarcodeI2of5, BarcodeCode128, BarcodeCode128Auto, BarcodeStandard93, BarcodeExtended93, BarcodeStandard39, BarcodeExtended39, BarcodeMSI, BarcodeCodabar, BarcodeCode11, BarcodeFIM, BarcodePOSTNET, BarcodeUSPS_4State, Ean13BarcodeWidget, Ean8BarcodeWidget, UPCA, Ean5BarcodeWidget, ISBNBarcodeWidget, QrCodeWidget, BarcodeECC200DataMatrix, ): registerWidget(widget) _reset() from reportlab.rl_config import register_reset register_reset(_reset) def getCodes(): """Returns a dict mapping code names to widgets""" #the module exports a dictionary of names to widgets, to make it easy for #apps and doc tools to display information about them. codes = {} for widget in _widgets: codeName = widget.codeName codes[codeName] = widget return codes def getCodeNames(): """Returns sorted list of supported bar code names""" return sorted(getCodes().keys()) def createBarcodeDrawing(codeName, **options): """This creates and returns a drawing with a barcode. """ from reportlab.graphics.shapes import Drawing, Group codes = getCodes() bcc = codes[codeName] width = options.pop('width',None) height = options.pop('height',None) isoScale = options.pop('isoScale',0) kw = {} for k,v in options.items(): if k.startswith('_') or k in bcc._attrMap: kw[k] = v bc = bcc(**kw) #Robin's new ones validate when setting the value property. #Ty Sarna's old ones do not. We need to test. if hasattr(bc, 'validate'): bc.validate() #raise exception if bad value if not bc.valid: raise ValueError("Illegal barcode with value '%s' in code '%s'" % (options.get('value',None), codeName)) #size it after setting the data x1, y1, x2, y2 = bc.getBounds() w = float(x2 - x1) h = float(y2 - y1) sx = width not in ('auto',None) sy = height not in ('auto',None) if sx or sy: sx = sx and width/w or 1.0 sy = sy and height/h or 1.0 if isoScale: if sx<1.0 and sy<1.0: sx = sy = max(sx,sy) else: sx = sy = min(sx,sy) w *= sx h *= sy else: sx = sy = 1 #bc.x = -sx*x1 #bc.y = -sy*y1 d = Drawing(width=w,height=h,transform=[sx,0,0,sy,-sx*x1,-sy*y1]) d.add(bc, "_bc") return d def createBarcodeImageInMemory(codeName,**options): """This creates and returns barcode as an image in memory. Takes same arguments as createBarcodeDrawing and also an optional format keyword which can be anything acceptable to Drawing.asString eg gif, pdf, tiff, py ...... """ format = options.pop('format','png') d = createBarcodeDrawing(codeName, **options) return d.asString(format) reportlab-3.5.34/src/reportlab/graphics/barcode/code39.py0000664000175000017500000002314613544671343024034 0ustar rptlabrptlab00000000000000# # Copyright (c) 1996-2000 Tyler C. Sarna # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Tyler C. Sarna. # 4. Neither the name of the author nor the names of contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # from reportlab.lib.units import inch from reportlab.lib.utils import asNative from reportlab.graphics.barcode.common import Barcode from string import digits as string_digits _patterns = { '0': ("bsbSBsBsb", 0), '1': ("BsbSbsbsB", 1), '2': ("bsBSbsbsB", 2), '3': ("BsBSbsbsb", 3), '4': ("bsbSBsbsB", 4), '5': ("BsbSBsbsb", 5), '6': ("bsBSBsbsb", 6), '7': ("bsbSbsBsB", 7), '8': ("BsbSbsBsb", 8), '9': ("bsBSbsBsb", 9), 'A': ("BsbsbSbsB", 10), 'B': ("bsBsbSbsB", 11), 'C': ("BsBsbSbsb", 12), 'D': ("bsbsBSbsB", 13), 'E': ("BsbsBSbsb", 14), 'F': ("bsBsBSbsb", 15), 'G': ("bsbsbSBsB", 16), 'H': ("BsbsbSBsb", 17), 'I': ("bsBsbSBsb", 18), 'J': ("bsbsBSBsb", 19), 'K': ("BsbsbsbSB", 20), 'L': ("bsBsbsbSB", 21), 'M': ("BsBsbsbSb", 22), 'N': ("bsbsBsbSB", 23), 'O': ("BsbsBsbSb", 24), 'P': ("bsBsBsbSb", 25), 'Q': ("bsbsbsBSB", 26), 'R': ("BsbsbsBSb", 27), 'S': ("bsBsbsBSb", 28), 'T': ("bsbsBsBSb", 29), 'U': ("BSbsbsbsB", 30), 'V': ("bSBsbsbsB", 31), 'W': ("BSBsbsbsb", 32), 'X': ("bSbsBsbsB", 33), 'Y': ("BSbsBsbsb", 34), 'Z': ("bSBsBsbsb", 35), '-': ("bSbsbsBsB", 36), '.': ("BSbsbsBsb", 37), ' ': ("bSBsbsBsb", 38), '*': ("bSbsBsBsb", None), '$': ("bSbSbSbsb", 39), '/': ("bSbSbsbSb", 40), '+': ("bSbsbSbSb", 41), '%': ("bsbSbSbSb", 42) } from reportlab.lib.utils import ascii_uppercase, ascii_lowercase _stdchrs = string_digits + ascii_uppercase + "-. $/+%" _extended = { '\0': "%U", '\01': "$A", '\02': "$B", '\03': "$C", '\04': "$D", '\05': "$E", '\06': "$F", '\07': "$G", '\010': "$H", '\011': "$I", '\012': "$J", '\013': "$K", '\014': "$L", '\015': "$M", '\016': "$N", '\017': "$O", '\020': "$P", '\021': "$Q", '\022': "$R", '\023': "$S", '\024': "$T", '\025': "$U", '\026': "$V", '\027': "$W", '\030': "$X", '\031': "$Y", '\032': "$Z", '\033': "%A", '\034': "%B", '\035': "%C", '\036': "%D", '\037': "%E", '!': "/A", '"': "/B", '#': "/C", '$': "/D", '%': "/E", '&': "/F", '\'': "/G", '(': "/H", ')': "/I", '*': "/J", '+': "/K", ',': "/L", '/': "/O", ':': "/Z", ';': "%F", '<': "%G", '=': "%H", '>': "%I", '?': "%J", '@': "%V", '[': "%K", '\\': "%L", ']': "%M", '^': "%N", '_': "%O", '`': "%W", 'a': "+A", 'b': "+B", 'c': "+C", 'd': "+D", 'e': "+E", 'f': "+F", 'g': "+G", 'h': "+H", 'i': "+I", 'j': "+J", 'k': "+K", 'l': "+L", 'm': "+M", 'n': "+N", 'o': "+O", 'p': "+P", 'q': "+Q", 'r': "+R", 's': "+S", 't': "+T", 'u': "+U", 'v': "+V", 'w': "+W", 'x': "+X", 'y': "+Y", 'z': "+Z", '{': "%P", '|': "%Q", '}': "%R", '~': "%S", '\177': "%T" } _extchrs = _stdchrs + ascii_lowercase + \ "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017" + \ "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" + \ "*!'#&\"(),:;<=>?@[\\]^_`{|}~\177" def _encode39(value, cksum, stop): v = sum([_patterns[c][1] for c in value]) % 43 if cksum: value += _stdchrs[v] if stop: value = '*'+value+'*' return value class _Code39Base(Barcode): barWidth = inch * 0.0075 lquiet = None rquiet = None quiet = 1 gap = None barHeight = None ratio = 2.2 checksum = 1 bearers = 0.0 stop = 1 def __init__(self, value = "", **args): value = asNative(value) for k, v in args.items(): setattr(self, k, v) if self.quiet: if self.lquiet is None: self.lquiet = max(inch * 0.25, self.barWidth * 10.0) self.rquiet = max(inch * 0.25, self.barWidth * 10.0) else: self.lquiet = self.rquiet = 0.0 Barcode.__init__(self, value) def decompose(self): dval = "" for c in self.encoded: dval = dval + _patterns[c][0] + 'i' self.decomposed = dval[:-1] return self.decomposed def _humanText(self): return self.stop and self.encoded[1:-1] or self.encoded class Standard39(_Code39Base): """ Options that may be passed to constructor: value (int, or numeric string required.): The value to encode. barWidth (float, default .0075): X-Dimension, or width of the smallest element Minumum is .0075 inch (7.5 mils). ratio (float, default 2.2): The ratio of wide elements to narrow elements. Must be between 2.0 and 3.0 (or 2.2 and 3.0 if the barWidth is greater than 20 mils (.02 inch)) gap (float or None, default None): width of intercharacter gap. None means "use barWidth". barHeight (float, see default below): Height of the symbol. Default is the height of the two bearer bars (if they exist) plus the greater of .25 inch or .15 times the symbol's length. checksum (bool, default 1): Wether to compute and include the check digit bearers (float, in units of barWidth. default 0): Height of bearer bars (horizontal bars along the top and bottom of the barcode). Default is 0 (no bearers). quiet (bool, default 1): Wether to include quiet zones in the symbol. lquiet (float, see default below): Quiet zone size to left of code, if quiet is true. Default is the greater of .25 inch, or .15 times the symbol's length. rquiet (float, defaults as above): Quiet zone size to right left of code, if quiet is true. stop (bool, default 1): Whether to include start/stop symbols. Sources of Information on Code 39: http://www.semiconductor.agilent.com/barcode/sg/Misc/code_39.html http://www.adams1.com/pub/russadam/39code.html http://www.barcodeman.com/c39_1.html Official Spec, "ANSI/AIM BC1-1995, USS" is available for US$45 from http://www.aimglobal.org/aimstore/ """ def validate(self): vval = [].append self.valid = 1 for c in self.value: if c in ascii_lowercase: c = c.upper() if c not in _stdchrs: self.valid = 0 continue vval(c) self.validated = ''.join(vval.__self__) return self.validated def encode(self): self.encoded = _encode39(self.validated, self.checksum, self.stop) return self.encoded class Extended39(_Code39Base): """ Extended Code 39 is a convention for encoding additional characters not present in stanmdard Code 39 by using pairs of characters to represent the characters missing in Standard Code 39. See Standard39 for arguments. Sources of Information on Extended Code 39: http://www.semiconductor.agilent.com/barcode/sg/Misc/xcode_39.html http://www.barcodeman.com/c39_ext.html """ def validate(self): vval = "" self.valid = 1 for c in self.value: if c not in _extchrs: self.valid = 0 continue vval = vval + c self.validated = vval return vval def encode(self): self.encoded = "" for c in self.validated: if c in _extended: self.encoded = self.encoded + _extended[c] elif c in _stdchrs: self.encoded = self.encoded + c else: raise ValueError self.encoded = _encode39(self.encoded, self.checksum,self.stop) return self.encoded reportlab-3.5.34/src/reportlab/graphics/renderbase.py0000664000175000017500000003221313544671343023454 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/renderbase.py __version__='3.3.0' __doc__='''Superclass for renderers to factor out common functionality and default implementations.''' from reportlab.graphics.shapes import * from reportlab.lib.validators import DerivedValue from reportlab import rl_config def inverse(A): "For A affine 2D represented as 6vec return 6vec version of A**(-1)" # I checked this RGB det = float(A[0]*A[3] - A[2]*A[1]) R = [A[3]/det, -A[1]/det, -A[2]/det, A[0]/det] return tuple(R+[-R[0]*A[4]-R[2]*A[5],-R[1]*A[4]-R[3]*A[5]]) def mmult(A, B): "A postmultiplied by B" # I checked this RGB # [a0 a2 a4] [b0 b2 b4] # [a1 a3 a5] * [b1 b3 b5] # [ 1 ] [ 1 ] # return (A[0]*B[0] + A[2]*B[1], A[1]*B[0] + A[3]*B[1], A[0]*B[2] + A[2]*B[3], A[1]*B[2] + A[3]*B[3], A[0]*B[4] + A[2]*B[5] + A[4], A[1]*B[4] + A[3]*B[5] + A[5]) def getStateDelta(shape): """Used to compute when we need to change the graphics state. For example, if we have two adjacent red shapes we don't need to set the pen color to red in between. Returns the effect the given shape would have on the graphics state""" delta = {} for prop, value in shape.getProperties().items(): if prop in STATE_DEFAULTS: delta[prop] = value return delta class StateTracker: """Keeps a stack of transforms and state properties. It can contain any properties you want, but the keys 'transform' and 'ctm' have special meanings. The getCTM() method returns the current transformation matrix at any point, without needing to invert matrixes when you pop.""" def __init__(self, defaults=None, defaultObj=None): # one stack to keep track of what changes... self._deltas = [] # and another to keep track of cumulative effects. Last one in # list is the current graphics state. We put one in to simplify # loops below. self._combined = [] if defaults is None: defaults = STATE_DEFAULTS.copy() if defaultObj: for k in STATE_DEFAULTS.keys(): a = 'initial'+k[:1].upper()+k[1:] if hasattr(defaultObj,a): defaults[k] = getattr(defaultObj,a) #ensure that if we have a transform, we have a CTM if 'transform' in defaults: defaults['ctm'] = defaults['transform'] self._combined.append(defaults) def _applyDefaultObj(self,d): return d def push(self,delta): """Take a new state dictionary of changes and push it onto the stack. After doing this, the combined state is accessible through getState()""" newstate = self._combined[-1].copy() for key, value in delta.items(): if key == 'transform': #do cumulative matrix newstate['transform'] = delta['transform'] newstate['ctm'] = mmult(self._combined[-1]['ctm'], delta['transform']) #print 'statetracker transform = (%0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f)' % tuple(newstate['transform']) #print 'statetracker ctm = (%0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f)' % tuple(newstate['ctm']) else: #just overwrite it newstate[key] = value self._combined.append(newstate) self._deltas.append(delta) def pop(self): """steps back one, and returns a state dictionary with the deltas to reverse out of wherever you are. Depending on your back end, you may not need the return value, since you can get the complete state afterwards with getState()""" del self._combined[-1] newState = self._combined[-1] lastDelta = self._deltas[-1] del self._deltas[-1] #need to diff this against the last one in the state reverseDelta = {} #print 'pop()...' for key, curValue in lastDelta.items(): #print ' key=%s, value=%s' % (key, curValue) prevValue = newState[key] if prevValue != curValue: #print ' state popping "%s"="%s"' % (key, curValue) if key == 'transform': reverseDelta[key] = inverse(lastDelta['transform']) else: #just return to previous state reverseDelta[key] = prevValue return reverseDelta def getState(self): "returns the complete graphics state at this point" return self._combined[-1] def getCTM(self): "returns the current transformation matrix at this point""" return self._combined[-1]['ctm'] def __getitem__(self,key): "returns the complete graphics state value of key at this point" return self._combined[-1][key] def __setitem__(self,key,value): "sets the complete graphics state value of key to value" self._combined[-1][key] = value def testStateTracker(): print('Testing state tracker') defaults = {'fillColor':None, 'strokeColor':None,'fontName':None, 'transform':[1,0,0,1,0,0]} from reportlab.graphics.shapes import _baseGFontName deltas = [ {'fillColor':'red'}, {'fillColor':'green', 'strokeColor':'blue','fontName':_baseGFontName}, {'transform':[0.5,0,0,0.5,0,0]}, {'transform':[0.5,0,0,0.5,2,3]}, {'strokeColor':'red'} ] st = StateTracker(defaults) print('initial:', st.getState()) print() for delta in deltas: print('pushing:', delta) st.push(delta) print('state: ',st.getState(),'\n') for delta in deltas: print('popping:',st.pop()) print('state: ',st.getState(),'\n') def _expandUserNode(node,canvas): if isinstance(node, UserNode): try: if hasattr(node,'_canvas'): ocanvas = 1 else: node._canvas = canvas ocanvas = None onode = node node = node.provideNode() finally: if not ocanvas: del onode._canvas return node def renderScaledDrawing(d): renderScale = d.renderScale if renderScale!=1.0: o = d d = d.__class__(o.width*renderScale,o.height*renderScale) d.__dict__ = o.__dict__.copy() d.scale(renderScale,renderScale) d.renderScale = 1.0 return d class Renderer: """Virtual superclass for graphics renderers.""" def undefined(self, operation): raise ValueError("%s operation not defined at superclass class=%s" %(operation, self.__class__)) def draw(self, drawing, canvas, x=0, y=0, showBoundary=rl_config._unset_): """This is the top level function, which draws the drawing at the given location. The recursive part is handled by drawNode.""" self._tracker = StateTracker(defaultObj=drawing) #stash references for ease of communication if showBoundary is rl_config._unset_: showBoundary=rl_config.showBoundary self._canvas = canvas canvas.__dict__['_drawing'] = self._drawing = drawing drawing._parent = None try: #bounding box if showBoundary: if hasattr(canvas,'drawBoundary'): canvas.drawBoundary(showBoundary,x,y,drawing.width,drawing.height) else: canvas.rect(x, y, drawing.width, drawing.height) canvas.saveState() self.initState(x,y) #this is the push() self.drawNode(drawing) self.pop() canvas.restoreState() finally: #remove any circular references del self._canvas, self._drawing, canvas._drawing, drawing._parent, self._tracker def initState(self,x,y): deltas = self._tracker._combined[-1] deltas['transform'] = tuple(list(deltas['transform'])[:4])+(x,y) self._tracker.push(deltas) self.applyStateChanges(deltas, {}) def pop(self): self._tracker.pop() def drawNode(self, node): """This is the recursive method called for each node in the tree""" # Undefined here, but with closer analysis probably can be handled in superclass self.undefined("drawNode") def getStateValue(self, key): """Return current state parameter for given key""" currentState = self._tracker._combined[-1] return currentState[key] def fillDerivedValues(self, node): """Examine a node for any values which are Derived, and replace them with their calculated values. Generally things may look at the drawing or their parent. """ for key, value in node.__dict__.items(): if isinstance(value, DerivedValue): #just replace with default for key? #print ' fillDerivedValues(%s)' % key newValue = value.getValue(self, key) #print ' got value of %s' % newValue node.__dict__[key] = newValue def drawNodeDispatcher(self, node): """dispatch on the node's (super) class: shared code""" canvas = getattr(self,'_canvas',None) # replace UserNode with its contents try: node = _expandUserNode(node,canvas) if not node: return if hasattr(node,'_canvas'): ocanvas = 1 else: node._canvas = canvas ocanvas = None self.fillDerivedValues(node) dtcb = getattr(node,'_drawTimeCallback',None) if dtcb: dtcb(node,canvas=canvas,renderer=self) #draw the object, or recurse if isinstance(node, Line): self.drawLine(node) elif isinstance(node, Image): self.drawImage(node) elif isinstance(node, Rect): self.drawRect(node) elif isinstance(node, Circle): self.drawCircle(node) elif isinstance(node, Ellipse): self.drawEllipse(node) elif isinstance(node, PolyLine): self.drawPolyLine(node) elif isinstance(node, Polygon): self.drawPolygon(node) elif isinstance(node, Path): self.drawPath(node) elif isinstance(node, String): self.drawString(node) elif isinstance(node, Group): self.drawGroup(node) elif isinstance(node, Wedge): self.drawWedge(node) elif isinstance(node, DirectDraw): node.drawDirectly(self) else: print('DrawingError','Unexpected element %s in drawing!' % str(node)) finally: if not ocanvas: del node._canvas _restores = {'stroke':'_stroke','stroke_width': '_lineWidth','stroke_linecap':'_lineCap', 'stroke_linejoin':'_lineJoin','fill':'_fill','font_family':'_font', 'font_size':'_fontSize'} def drawGroup(self, group): # just do the contents. Some renderers might need to override this # if they need a flipped transform canvas = getattr(self,'_canvas',None) for node in group.getContents(): node = _expandUserNode(node,canvas) if not node: continue #here is where we do derived values - this seems to get everything. Touch wood. self.fillDerivedValues(node) try: if hasattr(node,'_canvas'): ocanvas = 1 else: node._canvas = canvas ocanvas = None node._parent = group self.drawNode(node) finally: del node._parent if not ocanvas: del node._canvas def drawWedge(self, wedge): # by default ask the wedge to make a polygon of itself and draw that! #print "drawWedge" P = wedge.asPolygon() if isinstance(P,Path): self.drawPath(P) else: self.drawPolygon(P) def drawPath(self, path): polygons = path.asPolygons() for polygon in polygons: self.drawPolygon(polygon) def drawRect(self, rect): # could be implemented in terms of polygon self.undefined("drawRect") def drawLine(self, line): self.undefined("drawLine") def drawCircle(self, circle): self.undefined("drawCircle") def drawPolyLine(self, p): self.undefined("drawPolyLine") def drawEllipse(self, ellipse): self.undefined("drawEllipse") def drawPolygon(self, p): self.undefined("drawPolygon") def drawString(self, stringObj): self.undefined("drawString") def applyStateChanges(self, delta, newState): """This takes a set of states, and outputs the operators needed to set those properties""" self.undefined("applyStateChanges") def drawImage(self,*args,**kwds): raise NotImplementedError('drawImage') if __name__=='__main__': print("this file has no script interpretation") print(__doc__) reportlab-3.5.34/src/reportlab/graphics/charts/0000775000175000017500000000000013607302651022244 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/graphics/charts/dotbox.py0000664000175000017500000001475213544671343024135 0ustar rptlabrptlab00000000000000from reportlab.lib.colors import blue, _PCMYK_black from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.shapes import Circle, Drawing, Group, Line, Rect, String from reportlab.graphics.widgetbase import Widget from reportlab.lib.attrmap import * from reportlab.lib.validators import * from reportlab.lib.units import cm from reportlab.pdfbase.pdfmetrics import getFont from reportlab.graphics.charts.lineplots import _maxWidth class DotBox(Widget): """Returns a dotbox widget.""" #Doesn't use TypedPropertyCollection for labels - this can be a later improvement _attrMap = AttrMap( xlabels = AttrMapValue(isNoneOrListOfNoneOrStrings, desc="List of text labels for boxes on left hand side"), ylabels = AttrMapValue(isNoneOrListOfNoneOrStrings, desc="Text label for second box on left hand side"), labelFontName = AttrMapValue(isString, desc="Name of font used for the labels"), labelFontSize = AttrMapValue(isNumber, desc="Size of font used for the labels"), labelOffset = AttrMapValue(isNumber, desc="Space between label text and grid edge"), strokeWidth = AttrMapValue(isNumber, desc='Width of the grid and dot outline'), gridDivWidth = AttrMapValue(isNumber, desc="Width of each 'box'"), gridColor = AttrMapValue(isColor, desc='Colour for the box and gridding'), dotDiameter = AttrMapValue(isNumber, desc="Diameter of the circle used for the 'dot'"), dotColor = AttrMapValue(isColor, desc='Colour of the circle on the box'), dotXPosition = AttrMapValue(isNumber, desc='X Position of the circle'), dotYPosition = AttrMapValue(isNumber, desc='X Position of the circle'), x = AttrMapValue(isNumber, desc='X Position of dotbox'), y = AttrMapValue(isNumber, desc='Y Position of dotbox'), ) def __init__(self): self.xlabels=["Value", "Blend", "Growth"] self.ylabels=["Small", "Medium", "Large"] self.labelFontName = "Helvetica" self.labelFontSize = 6 self.labelOffset = 5 self.strokeWidth = 0.5 self.gridDivWidth=0.5*cm self.gridColor=colors.Color(25/255.0,77/255.0,135/255.0) self.dotDiameter=0.4*cm self.dotColor=colors.Color(232/255.0,224/255.0,119/255.0) self.dotXPosition = 1 self.dotYPosition = 1 self.x = 30 self.y = 5 def _getDrawingDimensions(self): leftPadding=rightPadding=topPadding=bottomPadding=5 #find width of grid tx=len(self.xlabels)*self.gridDivWidth #add padding (and offset) tx=tx+leftPadding+rightPadding+self.labelOffset #add in maximum width of text tx=tx+_maxWidth(self.xlabels, self.labelFontName, self.labelFontSize) #find height of grid ty=len(self.ylabels)*self.gridDivWidth #add padding (and offset) ty=ty+topPadding+bottomPadding+self.labelOffset #add in maximum width of text ty=ty+_maxWidth(self.ylabels, self.labelFontName, self.labelFontSize) #print (tx, ty) return (tx,ty) def demo(self,drawing=None): if not drawing: tx,ty=self._getDrawingDimensions() drawing = Drawing(tx,ty) drawing.add(self.draw()) return drawing def draw(self): g = Group() #box g.add(Rect(self.x,self.y,len(self.xlabels)*self.gridDivWidth,len(self.ylabels)*self.gridDivWidth, strokeColor=self.gridColor, strokeWidth=self.strokeWidth, fillColor=None)) #internal gridding for f in range (1,len(self.ylabels)): #horizontal g.add(Line(strokeColor=self.gridColor, strokeWidth=self.strokeWidth, x1 = self.x, y1 = self.y+f*self.gridDivWidth, x2 = self.x+len(self.xlabels)*self.gridDivWidth, y2 = self.y+f*self.gridDivWidth)) for f in range (1,len(self.xlabels)): #vertical g.add(Line(strokeColor=self.gridColor, strokeWidth=self.strokeWidth, x1 = self.x+f*self.gridDivWidth, y1 = self.y, x2 = self.x+f*self.gridDivWidth, y2 = self.y+len(self.ylabels)*self.gridDivWidth)) # draw the 'dot' g.add(Circle(strokeColor=self.gridColor, strokeWidth=self.strokeWidth, fillColor=self.dotColor, cx = self.x+(self.dotXPosition*self.gridDivWidth), cy = self.y+(self.dotYPosition*self.gridDivWidth), r = self.dotDiameter/2.0)) #used for centering y-labels (below) ascent=getFont(self.labelFontName).face.ascent if ascent==0: ascent=0.718 # default (from helvetica) ascent=ascent*self.labelFontSize # normalize #do y-labels if self.ylabels != None: for f in range (len(self.ylabels)-1,-1,-1): if self.ylabels[f]!= None: g.add(String(strokeColor=self.gridColor, text = self.ylabels[f], fontName = self.labelFontName, fontSize = self.labelFontSize, fillColor=_PCMYK_black, x = self.x-self.labelOffset, y = self.y+(f*self.gridDivWidth+(self.gridDivWidth-ascent)/2.0), textAnchor = 'end')) #do x-labels if self.xlabels != None: for f in range (0,len(self.xlabels)): if self.xlabels[f]!= None: l=Label() l.x=self.x+(f*self.gridDivWidth)+(self.gridDivWidth+ascent)/2.0 l.y=self.y+(len(self.ylabels)*self.gridDivWidth)+self.labelOffset l.angle=90 l.textAnchor='start' l.fontName = self.labelFontName l.fontSize = self.labelFontSize l.fillColor = _PCMYK_black l.setText(self.xlabels[f]) l.boxAnchor = 'sw' l.draw() g.add(l) return g if __name__ == "__main__": d = DotBox() d.demo().save(fnRoot="dotbox")reportlab-3.5.34/src/reportlab/graphics/charts/textlabels.py0000664000175000017500000005370713544671343025010 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/textlabels.py __version__='3.3.0' import string from reportlab.lib import colors from reportlab.lib.utils import simpleSplit, _simpleSplit, isBytes from reportlab.lib.validators import isNumber, isNumberOrNone, OneOf, isColorOrNone, isString, \ isTextAnchor, isBoxAnchor, isBoolean, NoneOr, isInstanceOf, isNoneOrString, isNoneOrCallable from reportlab.lib.attrmap import * from reportlab.pdfbase.pdfmetrics import stringWidth, getAscentDescent, getFont, unicode2T1 from reportlab.graphics.shapes import Drawing, Group, Circle, Rect, String, STATE_DEFAULTS from reportlab.graphics.shapes import _PATH_OP_ARG_COUNT, _PATH_OP_NAMES, definePath from reportlab.graphics.widgetbase import Widget, PropHolder from reportlab.graphics.shapes import _baseGFontName _gs = None _A2BA= { 'x': {0:'n', 45:'ne', 90:'e', 135:'se', 180:'s', 225:'sw', 270:'w', 315: 'nw', -45: 'nw'}, 'y': {0:'e', 45:'se', 90:'s', 135:'sw', 180:'w', 225:'nw', 270:'n', 315: 'ne', -45: 'ne'}, } def _pathNumTrunc(n): if int(n)==n: return int(n) return round(n,5) def _processGlyph(G, truncate=1, pathReverse=0): O = [] P = [] R = [] if G and len(G)==1 and G[0][0]=='lineTo': G = (('moveToClosed',)+G[0][1:],)+G #hack fix for some errors for g in G+(('end',),): op = g[0] if O and op in ['moveTo', 'moveToClosed','end']: if O[0]=='moveToClosed': O = O[1:] if pathReverse: for i in range(0,len(P),2): P[i+1], P[i] = P[i:i+2] P.reverse() O.reverse() O.insert(0,'moveTo') O.append('closePath') i = 0 if truncate: P = list(map(_pathNumTrunc,P)) for o in O: j = i + _PATH_OP_ARG_COUNT[_PATH_OP_NAMES.index(o)] if o=='closePath': R.append(o) else: R.append((o,)+ tuple(P[i:j])) i = j O = [] P = [] O.append(op) P.extend(g[1:]) return R def _text2PathDescription(text, x=0, y=0, fontName=_baseGFontName, fontSize=1000, anchor='start', truncate=1, pathReverse=0): from reportlab.graphics import renderPM, _renderPM font = getFont(fontName) if font._multiByte and not font._dynamicFont: raise ValueError("_text2PathDescription doesn't support multi byte fonts like %r" % fontName) P = [] if not anchor=='start': textLen = stringWidth(text, fontName, fontSize) if anchor=='end': x = x-textLen elif anchor=='middle': x = x - textLen/2. _gs = _renderPM.gstate(1,1) renderPM._setFont(_gs,fontName,fontSize) if font._dynamicFont: for g in _gs._stringPath(text,x,y): P.extend(_processGlyph(g,truncate=truncate,pathReverse=pathReverse)) else: if isBytes(text): try: text = text.decode('utf8') except UnicodeDecodeError as e: i,j = e.args[2:4] raise UnicodeDecodeError(*(e.args[:4]+('%s\n%s-->%s<--%s' % (e.args[4],text[max(i-10,0):i],text[i:j],text[j:j+10]),))) fc = font FT = unicode2T1(text,[font]+font.substitutionFonts) nm1 = len(FT)-1 for i, (f, t) in enumerate(FT): if f!=fc: renderPM._setFont(_gs,f.fontName,fontSize) fc = f for g in _gs._stringPath(t,x,y): P.extend(_processGlyph(g,truncate=truncate,pathReverse=pathReverse)) if i!=nm1: x += f.stringWidth(t.decode(f.encName), fontSize) return P def _text2Path(text, x=0, y=0, fontName=_baseGFontName, fontSize=1000, anchor='start', truncate=1, pathReverse=0,**kwds): return definePath(_text2PathDescription(text,x=x,y=y,fontName=fontName, fontSize=fontSize,anchor=anchor,truncate=truncate,pathReverse=pathReverse),**kwds) _BA2TA={'w':'start','nw':'start','sw':'start','e':'end', 'ne': 'end', 'se':'end', 'n':'middle','s':'middle','c':'middle'} class Label(Widget): """A text label to attach to something else, such as a chart axis. This allows you to specify an offset, angle and many anchor properties relative to the label's origin. It allows, for example, angled multiline axis labels. """ # fairly straight port of Robin Becker's textbox.py to new widgets # framework. _attrMap = AttrMap( x = AttrMapValue(isNumber,desc=''), y = AttrMapValue(isNumber,desc=''), dx = AttrMapValue(isNumber,desc='delta x - offset'), dy = AttrMapValue(isNumber,desc='delta y - offset'), angle = AttrMapValue(isNumber,desc='angle of label: default (0), 90 is vertical, 180 is upside down, etc'), boxAnchor = AttrMapValue(isBoxAnchor,desc='anchoring point of the label'), boxStrokeColor = AttrMapValue(isColorOrNone,desc='border color of the box'), boxStrokeWidth = AttrMapValue(isNumber,desc='border width'), boxFillColor = AttrMapValue(isColorOrNone,desc='the filling color of the box'), boxTarget = AttrMapValue(OneOf('normal','anti','lo','hi'),desc="one of ('normal','anti','lo','hi')"), fillColor = AttrMapValue(isColorOrNone,desc='label text color'), strokeColor = AttrMapValue(isColorOrNone,desc='label text border color'), strokeWidth = AttrMapValue(isNumber,desc='label text border width'), text = AttrMapValue(isString,desc='the actual text to display'), fontName = AttrMapValue(isString,desc='the name of the font used'), fontSize = AttrMapValue(isNumber,desc='the size of the font'), leading = AttrMapValue(isNumberOrNone,desc=''), width = AttrMapValue(isNumberOrNone,desc='the width of the label'), maxWidth = AttrMapValue(isNumberOrNone,desc='maximum width the label can grow to'), height = AttrMapValue(isNumberOrNone,desc='the height of the text'), textAnchor = AttrMapValue(isTextAnchor,desc='the anchoring point of the text inside the label'), visible = AttrMapValue(isBoolean,desc="True if the label is to be drawn"), topPadding = AttrMapValue(isNumber,desc='padding at top of box'), leftPadding = AttrMapValue(isNumber,desc='padding at left of box'), rightPadding = AttrMapValue(isNumber,desc='padding at right of box'), bottomPadding = AttrMapValue(isNumber,desc='padding at bottom of box'), useAscentDescent = AttrMapValue(isBoolean,desc="If True then the font's Ascent & Descent will be used to compute default heights and baseline."), customDrawChanger = AttrMapValue(isNoneOrCallable,desc="An instance of CustomDrawChanger to modify the behavior at draw time", _advancedUsage=1), ) def __init__(self,**kw): self._setKeywords(**kw) self._setKeywords( _text = 'Multi-Line\nString', boxAnchor = 'c', angle = 0, x = 0, y = 0, dx = 0, dy = 0, topPadding = 0, leftPadding = 0, rightPadding = 0, bottomPadding = 0, boxStrokeWidth = 0.5, boxStrokeColor = None, boxTarget = 'normal', strokeColor = None, boxFillColor = None, leading = None, width = None, maxWidth = None, height = None, fillColor = STATE_DEFAULTS['fillColor'], fontName = STATE_DEFAULTS['fontName'], fontSize = STATE_DEFAULTS['fontSize'], strokeWidth = 0.1, textAnchor = 'start', visible = 1, useAscentDescent = False, ) def setText(self, text): """Set the text property. May contain embedded newline characters. Called by the containing chart or axis.""" self._text = text def setOrigin(self, x, y): """Set the origin. This would be the tick mark or bar top relative to which it is defined. Called by the containing chart or axis.""" self.x = x self.y = y def demo(self): """This shows a label positioned with its top right corner at the top centre of the drawing, and rotated 45 degrees.""" d = Drawing(200, 100) # mark the origin of the label d.add(Circle(100,90, 5, fillColor=colors.green)) lab = Label() lab.setOrigin(100,90) lab.boxAnchor = 'ne' lab.angle = 45 lab.dx = 0 lab.dy = -20 lab.boxStrokeColor = colors.green lab.setText('Another\nMulti-Line\nString') d.add(lab) return d def _getBoxAnchor(self): '''hook for allowing special box anchor effects''' ba = self.boxAnchor if ba in ('autox', 'autoy'): angle = self.angle na = (int((angle%360)/45.)*45)%360 if not (na % 90): # we have a right angle case da = (angle - na) % 360 if abs(da)>5: na = na + (da>0 and 45 or -45) ba = _A2BA[ba[-1]][na] return ba def _getBaseLineRatio(self): if self.useAscentDescent: self._ascent, self._descent = getAscentDescent(self.fontName,self.fontSize) self._baselineRatio = self._ascent/(self._ascent-self._descent) else: self._baselineRatio = 1/1.2 def _computeSizeEnd(self,objH): self._height = self.height or (objH + self.topPadding + self.bottomPadding) self._ewidth = (self._width-self.leftPadding-self.rightPadding) self._eheight = (self._height-self.topPadding-self.bottomPadding) boxAnchor = self._getBoxAnchor() if boxAnchor in ['n','ne','nw']: self._top = -self.topPadding elif boxAnchor in ['s','sw','se']: self._top = self._height-self.topPadding else: self._top = 0.5*self._eheight self._bottom = self._top - self._eheight if boxAnchor in ['ne','e','se']: self._left = self.leftPadding - self._width elif boxAnchor in ['nw','w','sw']: self._left = self.leftPadding else: self._left = -self._ewidth*0.5 self._right = self._left+self._ewidth def computeSize(self): # the thing will draw in its own coordinate system self._lineWidths = [] self._lines = simpleSplit(self._text,self.fontName,self.fontSize,self.maxWidth) if not self.width: self._width = self.leftPadding+self.rightPadding if self._lines: self._lineWidths = [stringWidth(line,self.fontName,self.fontSize) for line in self._lines] self._width += max(self._lineWidths) else: self._width = self.width self._getBaseLineRatio() if self.leading: self._leading = self.leading elif self.useAscentDescent: self._leading = self._ascent - self._descent else: self._leading = self.fontSize*1.2 self._computeSizeEnd(self._leading*len(self._lines)) def _getTextAnchor(self): '''This can be overridden to allow special effects''' ta = self.textAnchor if ta=='boxauto': ta = _BA2TA[self._getBoxAnchor()] return ta def _rawDraw(self): _text = self._text self._text = _text or '' self.computeSize() self._text = _text g = Group() g.translate(self.x + self.dx, self.y + self.dy) g.rotate(self.angle) y = self._top - self._leading*self._baselineRatio textAnchor = self._getTextAnchor() if textAnchor == 'start': x = self._left elif textAnchor == 'middle': x = self._left + self._ewidth*0.5 else: x = self._right # paint box behind text just in case they # fill it if self.boxFillColor or (self.boxStrokeColor and self.boxStrokeWidth): g.add(Rect( self._left-self.leftPadding, self._bottom-self.bottomPadding, self._width, self._height, strokeColor=self.boxStrokeColor, strokeWidth=self.boxStrokeWidth, fillColor=self.boxFillColor) ) fillColor, fontName, fontSize = self.fillColor, self.fontName, self.fontSize strokeColor, strokeWidth, leading = self.strokeColor, self.strokeWidth, self._leading svgAttrs=getattr(self,'_svgAttrs',{}) if strokeColor: for line in self._lines: s = _text2Path(line, x, y, fontName, fontSize, textAnchor) s.fillColor = fillColor s.strokeColor = strokeColor s.strokeWidth = strokeWidth g.add(s) y -= leading else: for line in self._lines: s = String(x, y, line, _svgAttrs=svgAttrs) s.textAnchor = textAnchor s.fontName = fontName s.fontSize = fontSize s.fillColor = fillColor g.add(s) y -= leading return g def draw(self): customDrawChanger = getattr(self,'customDrawChanger',None) if customDrawChanger: customDrawChanger(True,self) try: return self._rawDraw() finally: customDrawChanger(False,self) else: return self._rawDraw() class LabelDecorator: _attrMap = AttrMap( x = AttrMapValue(isNumberOrNone,desc=''), y = AttrMapValue(isNumberOrNone,desc=''), dx = AttrMapValue(isNumberOrNone,desc=''), dy = AttrMapValue(isNumberOrNone,desc=''), angle = AttrMapValue(isNumberOrNone,desc=''), boxAnchor = AttrMapValue(isBoxAnchor,desc=''), boxStrokeColor = AttrMapValue(isColorOrNone,desc=''), boxStrokeWidth = AttrMapValue(isNumberOrNone,desc=''), boxFillColor = AttrMapValue(isColorOrNone,desc=''), fillColor = AttrMapValue(isColorOrNone,desc=''), strokeColor = AttrMapValue(isColorOrNone,desc=''), strokeWidth = AttrMapValue(isNumberOrNone),desc='', fontName = AttrMapValue(isNoneOrString,desc=''), fontSize = AttrMapValue(isNumberOrNone,desc=''), leading = AttrMapValue(isNumberOrNone,desc=''), width = AttrMapValue(isNumberOrNone,desc=''), maxWidth = AttrMapValue(isNumberOrNone,desc=''), height = AttrMapValue(isNumberOrNone,desc=''), textAnchor = AttrMapValue(isTextAnchor,desc=''), visible = AttrMapValue(isBoolean,desc="True if the label is to be drawn"), ) def __init__(self): self.textAnchor = 'start' self.boxAnchor = 'w' for a in self._attrMap.keys(): if not hasattr(self,a): setattr(self,a,None) def decorate(self,l,L): chart,g,rowNo,colNo,x,y,width,height,x00,y00,x0,y0 = l._callOutInfo L.setText(chart.categoryAxis.categoryNames[colNo]) g.add(L) def __call__(self,l): from copy import deepcopy L = Label() for a,v in self.__dict__.items(): if v is None: v = getattr(l,a,None) setattr(L,a,v) self.decorate(l,L) isOffsetMode=OneOf('high','low','bar','axis') class LabelOffset(PropHolder): _attrMap = AttrMap( posMode = AttrMapValue(isOffsetMode,desc="Where to base +ve offset"), pos = AttrMapValue(isNumber,desc='Value for positive elements'), negMode = AttrMapValue(isOffsetMode,desc="Where to base -ve offset"), neg = AttrMapValue(isNumber,desc='Value for negative elements'), ) def __init__(self): self.posMode=self.negMode='axis' self.pos = self.neg = 0 def _getValue(self, chart, val): flipXY = chart._flipXY A = chart.categoryAxis jA = A.joinAxis if val>=0: mode = self.posMode delta = self.pos else: mode = self.negMode delta = self.neg if flipXY: v = A._x else: v = A._y if jA: if flipXY: _v = jA._x else: _v = jA._y if mode=='high': v = _v + jA._length elif mode=='low': v = _v elif mode=='bar': v = _v+val return v+delta NoneOrInstanceOfLabelOffset=NoneOr(isInstanceOf(LabelOffset)) class PMVLabel(Label): _attrMap = AttrMap( BASE=Label, ) def __init__(self): Label.__init__(self) self._pmv = 0 def _getBoxAnchor(self): a = Label._getBoxAnchor(self) if self._pmv<0: a = {'nw':'se','n':'s','ne':'sw','w':'e','c':'c','e':'w','sw':'ne','s':'n','se':'nw'}[a] return a def _getTextAnchor(self): a = Label._getTextAnchor(self) if self._pmv<0: a = {'start':'end', 'middle':'middle', 'end':'start'}[a] return a class BarChartLabel(PMVLabel): """ An extended Label allowing for nudging, lines visibility etc """ _attrMap = AttrMap( BASE=PMVLabel, lineStrokeWidth = AttrMapValue(isNumberOrNone, desc="Non-zero for a drawn line"), lineStrokeColor = AttrMapValue(isColorOrNone, desc="Color for a drawn line"), fixedEnd = AttrMapValue(NoneOrInstanceOfLabelOffset, desc="None or fixed draw ends +/-"), fixedStart = AttrMapValue(NoneOrInstanceOfLabelOffset, desc="None or fixed draw starts +/-"), nudge = AttrMapValue(isNumber, desc="Non-zero sign dependent nudge"), boxTarget = AttrMapValue(OneOf('normal','anti','lo','hi','mid'),desc="one of ('normal','anti','lo','hi','mid')"), ) def __init__(self): PMVLabel.__init__(self) self.lineStrokeWidth = 0 self.lineStrokeColor = None self.fixedStart = self.fixedEnd = None self.nudge = 0 class NA_Label(BarChartLabel): """ An extended Label allowing for nudging, lines visibility etc """ _attrMap = AttrMap( BASE=BarChartLabel, text = AttrMapValue(isNoneOrString, desc="Text to be used for N/A values"), ) def __init__(self): BarChartLabel.__init__(self) self.text = 'n/a' NoneOrInstanceOfNA_Label=NoneOr(isInstanceOf(NA_Label)) from reportlab.graphics.charts.utils import CustomDrawChanger class RedNegativeChanger(CustomDrawChanger): def __init__(self,fillColor=colors.red): CustomDrawChanger.__init__(self) self.fillColor = fillColor def _changer(self,obj): R = {} if obj._text.startswith('-'): R['fillColor'] = obj.fillColor obj.fillColor = self.fillColor return R from reportlab.platypus import XPreformatted, Paragraph from reportlab.lib.styles import ParagraphStyle from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER _ta2al = dict(start=TA_LEFT,end=TA_RIGHT,middle=TA_RIGHT) try: from rlextra.graphics.canvasadapter import DirectDrawFlowable except ImportError: DirectDrawFlowable = None class XLabel(Label): '''like label but uses XPreFormatted/Paragraph to draw the _text''' _attrMap = AttrMap(BASE=Label, ) def __init__(self,*args,**kwds): self._flowableClass = kwds.pop('flowableClass',XPreformatted) ddf = kwds.pop('directDrawClass',DirectDrawFlowable) if ddf is None: raise RuntimeError('DirectDrawFlowable class is not available you need the rlextra package as well as reportlab') self._ddf = ddf Label.__init__(self,*args,**kwds) def computeSize(self): # the thing will draw in its own coordinate system self._lineWidths = [] sty = self._style = ParagraphStyle('xlabel-generated', fontName=self.fontName, fontSize=self.fontSize, fillColor=self.fillColor, strokeColor=self.strokeColor, ) self._getBaseLineRatio() if self.useAscentDescent: sty.autoLeading = True sty.leading = self._ascent - self._descent else: sty.leading = self.leading if self.leading else self.fontSize*1.2 self._leading = sty.leading sty.alignment = _ta2al[self._getTextAnchor()] self._obj = obj = self._flowableClass(self._text,style=sty) _, objH = obj.wrap(self.maxWidth or 0x7fffffff,0x7fffffff) if not self.width: self._width = self.leftPadding+self.rightPadding self._width += self._obj._width_max else: self._width = self.width self._computeSizeEnd(objH) def _rawDraw(self): _text = self._text self._text = _text or '' self.computeSize() self._text = _text g = Group() g.translate(self.x + self.dx, self.y + self.dy) g.rotate(self.angle) textAnchor = self._getTextAnchor() if textAnchor == 'start': x = self._left elif textAnchor == 'middle': x = self._left + self._ewidth*0.5 else: x = self._right # paint box behind text just in case they # fill it if self.boxFillColor or (self.boxStrokeColor and self.boxStrokeWidth): g.add(Rect( self._left-self.leftPadding, self._bottom-self.bottomPadding, self._width, self._height, strokeColor=self.boxStrokeColor, strokeWidth=self.boxStrokeWidth, fillColor=self.boxFillColor) ) g1 = Group() g1.translate(x,self._top-self._eheight) g1.add(self._ddf(self._obj)) g.add(g1) return g reportlab-3.5.34/src/reportlab/graphics/charts/legends.py0000664000175000017500000006106613544671343024257 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/legends.py __version__='3.3.0' __doc__="""This will be a collection of legends to be used with charts.""" import copy, operator from reportlab.lib import colors from reportlab.lib.validators import isNumber, OneOf, isString, isColorOrNone,\ isNumberOrNone, isListOfNumbersOrNone, isStringOrNone, isBoolean,\ EitherOr, NoneOr, AutoOr, isAuto, Auto, isBoxAnchor, SequenceOf, isInstanceOf from reportlab.lib.attrmap import * from reportlab.pdfbase.pdfmetrics import stringWidth, getFont from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder from reportlab.graphics.shapes import Drawing, Group, String, Rect, Line, STATE_DEFAULTS from reportlab.graphics.charts.areas import PlotArea from reportlab.graphics.widgets.markers import uSymbol2Symbol, isSymbol from reportlab.lib.utils import isSeq, find_locals, isStr, asNative from reportlab.graphics.shapes import _baseGFontName from functools import reduce from reportlab import xrange def _transMax(n,A): X = n*[0] m = 0 for a in A: m = max(m,len(a)) for i,x in enumerate(a): X[i] = max(X[i],x) X = [0] + X[:m] for i in range(m): X[i+1] += X[i] return X def _objStr(s): if isStr(s): return asNative(s) else: return str(s) def _getStr(s): if isSeq(s): return list(map(_getStr,s)) else: return _objStr(s) def _getLines(s): if isSeq(s): return tuple([(x or '').split('\n') for x in s]) else: return (s or '').split('\n') def _getLineCount(s): T = _getLines(s) if isSeq(s): return max([len(x) for x in T]) else: return len(T) def _getWidths(i,s, fontName, fontSize, subCols): S = [] aS = S.append if isSeq(s): for j,t in enumerate(s): sc = subCols[j,i] fN = getattr(sc,'fontName',fontName) fS = getattr(sc,'fontSize',fontSize) m = [stringWidth(x, fN, fS) for x in t.split('\n')] m = max(sc.minWidth,m and max(m) or 0) aS(m) aS(sc.rpad) del S[-1] else: sc = subCols[0,i] fN = getattr(sc,'fontName',fontName) fS = getattr(sc,'fontSize',fontSize) m = [stringWidth(x, fN, fS) for x in s.split('\n')] aS(max(sc.minWidth,m and max(m) or 0)) return S class SubColProperty(PropHolder): dividerLines = 0 _attrMap = AttrMap( minWidth = AttrMapValue(isNumber,desc="minimum width for this subcol"), rpad = AttrMapValue(isNumber,desc="right padding for this subcol"), align = AttrMapValue(OneOf('left','right','center','centre','numeric'),desc='alignment in subCol'), fontName = AttrMapValue(isString, desc="Font name of the strings"), fontSize = AttrMapValue(isNumber, desc="Font size of the strings"), leading = AttrMapValue(isNumber, desc="leading for the strings"), fillColor = AttrMapValue(isColorOrNone, desc="fontColor"), underlines = AttrMapValue(EitherOr((NoneOr(isInstanceOf(Line)),SequenceOf(isInstanceOf(Line),emptyOK=0,lo=0,hi=0x7fffffff))), desc="underline definitions"), overlines = AttrMapValue(EitherOr((NoneOr(isInstanceOf(Line)),SequenceOf(isInstanceOf(Line),emptyOK=0,lo=0,hi=0x7fffffff))), desc="overline definitions"), dx = AttrMapValue(isNumber, desc="x offset from default position"), dy = AttrMapValue(isNumber, desc="y offset from default position"), ) class LegendCallout: def _legendValues(legend,*args): '''return a tuple of values from the first function up the stack with isinstance(self,legend)''' L = find_locals(lambda L: L.get('self',None) is legend and L or None) return tuple([L[a] for a in args]) _legendValues = staticmethod(_legendValues) def _selfOrLegendValues(self,legend,*args): L = find_locals(lambda L: L.get('self',None) is legend and L or None) return tuple([getattr(self,a,L[a]) for a in args]) def __call__(self,legend,g,thisx,y,colName): col, name = colName class LegendSwatchCallout(LegendCallout): def __call__(self,legend,g,thisx,y,i,colName,swatch): col, name = colName class LegendColEndCallout(LegendCallout): def __call__(self,legend, g, x, xt, y, width, lWidth): pass class Legend(Widget): """A simple legend containing rectangular swatches and strings. The swatches are filled rectangles whenever the respective color object in 'colorNamePairs' is a subclass of Color in reportlab.lib.colors. Otherwise the object passed instead is assumed to have 'x', 'y', 'width' and 'height' attributes. A legend then tries to set them or catches any error. This lets you plug-in any widget you like as a replacement for the default rectangular swatches. Strings can be nicely aligned left or right to the swatches. """ _attrMap = AttrMap( x = AttrMapValue(isNumber, desc="x-coordinate of upper-left reference point"), y = AttrMapValue(isNumber, desc="y-coordinate of upper-left reference point"), deltax = AttrMapValue(isNumberOrNone, desc="x-distance between neighbouring swatches"), deltay = AttrMapValue(isNumberOrNone, desc="y-distance between neighbouring swatches"), dxTextSpace = AttrMapValue(isNumber, desc="Distance between swatch rectangle and text"), autoXPadding = AttrMapValue(isNumber, desc="x Padding between columns if deltax=None",advancedUsage=1), autoYPadding = AttrMapValue(isNumber, desc="y Padding between rows if deltay=None",advancedUsage=1), yGap = AttrMapValue(isNumber, desc="Additional gap between rows",advancedUsage=1), dx = AttrMapValue(isNumber, desc="Width of swatch rectangle"), dy = AttrMapValue(isNumber, desc="Height of swatch rectangle"), columnMaximum = AttrMapValue(isNumber, desc="Max. number of items per column"), alignment = AttrMapValue(OneOf("left", "right"), desc="Alignment of text with respect to swatches"), colorNamePairs = AttrMapValue(None, desc="List of color/name tuples (color can also be widget)"), fontName = AttrMapValue(isString, desc="Font name of the strings"), fontSize = AttrMapValue(isNumber, desc="Font size of the strings"), fillColor = AttrMapValue(isColorOrNone, desc="swatches filling color"), strokeColor = AttrMapValue(isColorOrNone, desc="Border color of the swatches"), strokeWidth = AttrMapValue(isNumber, desc="Width of the border color of the swatches"), swatchMarker = AttrMapValue(NoneOr(AutoOr(isSymbol)), desc="None, Auto() or makeMarker('Diamond') ...",advancedUsage=1), callout = AttrMapValue(None, desc="a user callout(self,g,x,y,(color,text))",advancedUsage=1), boxAnchor = AttrMapValue(isBoxAnchor,'Anchor point for the legend area'), variColumn = AttrMapValue(isBoolean,'If true column widths may vary (default is false)',advancedUsage=1), dividerLines = AttrMapValue(OneOf(0,1,2,3,4,5,6,7),'If 1 we have dividers between the rows | 2 for extra top | 4 for bottom',advancedUsage=1), dividerWidth = AttrMapValue(isNumber, desc="dividerLines width",advancedUsage=1), dividerColor = AttrMapValue(isColorOrNone, desc="dividerLines color",advancedUsage=1), dividerDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array for dividerLines.',advancedUsage=1), dividerOffsX = AttrMapValue(SequenceOf(isNumber,emptyOK=0,lo=2,hi=2), desc='divider lines X offsets',advancedUsage=1), dividerOffsY = AttrMapValue(isNumber, desc="dividerLines Y offset",advancedUsage=1), colEndCallout = AttrMapValue(None, desc="a user callout(self,g, x, xt, y,width, lWidth)",advancedUsage=1), subCols = AttrMapValue(None,desc="subColumn properties"), swatchCallout = AttrMapValue(None, desc="a user swatch callout(self,g,x,y,i,(col,name),swatch)",advancedUsage=1), swdx = AttrMapValue(isNumber, desc="x position adjustment for the swatch"), swdy = AttrMapValue(isNumber, desc="y position adjustment for the swatch"), ) def __init__(self): # Upper-left reference point. self.x = 0 self.y = 0 # Alginment of text with respect to swatches. self.alignment = "left" # x- and y-distances between neighbouring swatches. self.deltax = 75 self.deltay = 20 self.autoXPadding = 5 self.autoYPadding = 2 # Size of swatch rectangle. self.dx = 10 self.dy = 10 self.swdx = 0 self.swdy = 0 # Distance between swatch rectangle and text. self.dxTextSpace = 10 # Max. number of items per column. self.columnMaximum = 3 # Color/name pairs. self.colorNamePairs = [ (colors.red, "red"), (colors.blue, "blue"), (colors.green, "green"), (colors.pink, "pink"), (colors.yellow, "yellow") ] # Font name and size of the labels. self.fontName = STATE_DEFAULTS['fontName'] self.fontSize = STATE_DEFAULTS['fontSize'] self.fillColor = STATE_DEFAULTS['fillColor'] self.strokeColor = STATE_DEFAULTS['strokeColor'] self.strokeWidth = STATE_DEFAULTS['strokeWidth'] self.swatchMarker = None self.boxAnchor = 'nw' self.yGap = 0 self.variColumn = 0 self.dividerLines = 0 self.dividerWidth = 0.5 self.dividerDashArray = None self.dividerColor = colors.black self.dividerOffsX = (0,0) self.dividerOffsY = 0 self.colEndCallout = None self._init_subCols() def _init_subCols(self): sc = self.subCols = TypedPropertyCollection(SubColProperty) sc.rpad = 1 sc.dx = sc.dy = sc.minWidth = 0 sc.align = 'right' sc[0].align = 'left' def _getChartStyleName(self,chart): for a in 'lines', 'bars', 'slices', 'strands': if hasattr(chart,a): return a return None def _getChartStyle(self,chart): return getattr(chart,self._getChartStyleName(chart),None) def _getTexts(self,colorNamePairs): if not isAuto(colorNamePairs): texts = [_getStr(p[1]) for p in colorNamePairs] else: chart = getattr(colorNamePairs,'chart',getattr(colorNamePairs,'obj',None)) texts = [chart.getSeriesName(i,'series %d' % i) for i in range(chart._seriesCount)] return texts def _calculateMaxBoundaries(self, colorNamePairs): "Calculate the maximum width of some given strings." fontName = self.fontName fontSize = self.fontSize subCols = self.subCols M = [_getWidths(i, m, fontName, fontSize, subCols) for i,m in enumerate(self._getTexts(colorNamePairs))] if not M: return [0,0] n = max([len(m) for m in M]) if self.variColumn: columnMaximum = self.columnMaximum return [_transMax(n,M[r:r+columnMaximum]) for r in range(0,len(M),self.columnMaximum)] else: return _transMax(n,M) def _calcHeight(self): dy = self.dy yGap = self.yGap thisy = upperlefty = self.y - dy fontSize = self.fontSize ascent=getFont(self.fontName).face.ascent/1000. if ascent==0: ascent=0.718 # default (from helvetica) ascent *= fontSize leading = fontSize*1.2 deltay = self.deltay if not deltay: deltay = max(dy,leading)+self.autoYPadding columnCount = 0 count = 0 lowy = upperlefty lim = self.columnMaximum - 1 for name in self._getTexts(self.colorNamePairs): y0 = thisy+(dy-ascent)*0.5 y = y0 - _getLineCount(name)*leading leadingMove = 2*y0-y-thisy newy = thisy-max(deltay,leadingMove)-yGap lowy = min(y,newy,lowy) if count==lim: count = 0 thisy = upperlefty columnCount = columnCount + 1 else: thisy = newy count = count+1 return upperlefty - lowy def _defaultSwatch(self,x,thisy,dx,dy,fillColor,strokeWidth,strokeColor): return Rect(x, thisy, dx, dy, fillColor = fillColor, strokeColor = strokeColor, strokeWidth = strokeWidth, ) def draw(self): colorNamePairs = self.colorNamePairs autoCP = isAuto(colorNamePairs) if autoCP: chart = getattr(colorNamePairs,'chart',getattr(colorNamePairs,'obj',None)) swatchMarker = None autoCP = Auto(obj=chart) n = chart._seriesCount chartTexts = self._getTexts(colorNamePairs) else: swatchMarker = getattr(self,'swatchMarker',None) if isAuto(swatchMarker): chart = getattr(swatchMarker,'chart',getattr(swatchMarker,'obj',None)) swatchMarker = Auto(obj=chart) n = len(colorNamePairs) dx = self.dx dy = self.dy alignment = self.alignment columnMaximum = self.columnMaximum deltax = self.deltax deltay = self.deltay dxTextSpace = self.dxTextSpace fontName = self.fontName fontSize = self.fontSize fillColor = self.fillColor strokeWidth = self.strokeWidth strokeColor = self.strokeColor subCols = self.subCols leading = fontSize*1.2 yGap = self.yGap if not deltay: deltay = max(dy,leading)+self.autoYPadding ba = self.boxAnchor maxWidth = self._calculateMaxBoundaries(colorNamePairs) nCols = int((n+columnMaximum-1)/(columnMaximum*1.0)) xW = dx+dxTextSpace+self.autoXPadding variColumn = self.variColumn if variColumn: width = sum([m[-1] for m in maxWidth])+xW*nCols else: deltax = max(maxWidth[-1]+xW,deltax) width = nCols*deltax maxWidth = nCols*[maxWidth] thisx = self.x thisy = self.y - self.dy if ba not in ('ne','n','nw','autoy'): height = self._calcHeight() if ba in ('e','c','w'): thisy += height/2. else: thisy += height if ba not in ('nw','w','sw','autox'): if ba in ('n','c','s'): thisx -= width/2 else: thisx -= width upperlefty = thisy g = Group() ascent=getFont(fontName).face.ascent/1000. if ascent==0: ascent=0.718 # default (from helvetica) ascent *= fontSize # normalize lim = columnMaximum - 1 callout = getattr(self,'callout',None) scallout = getattr(self,'swatchCallout',None) dividerLines = self.dividerLines if dividerLines: dividerWidth = self.dividerWidth dividerColor = self.dividerColor dividerDashArray = self.dividerDashArray dividerOffsX = self.dividerOffsX dividerOffsY = self.dividerOffsY for i in xrange(n): if autoCP: col = autoCP col.index = i name = chartTexts[i] else: col, name = colorNamePairs[i] if isAuto(swatchMarker): col = swatchMarker col.index = i if isAuto(name): name = getattr(swatchMarker,'chart',getattr(swatchMarker,'obj',None)).getSeriesName(i,'series %d' % i) T = _getLines(name) S = [] aS = S.append j = int(i/(columnMaximum*1.0)) jOffs = maxWidth[j] # thisy+dy/2 = y+leading/2 y = y0 = thisy+(dy-ascent)*0.5 if callout: callout(self,g,thisx,y,(col,name)) if alignment == "left": x = thisx xn = thisx+jOffs[-1]+dxTextSpace elif alignment == "right": x = thisx+dx+dxTextSpace xn = thisx else: raise ValueError("bad alignment") if not isSeq(name): T = [T] yd = y for k,lines in enumerate(T): y = y0 kk = k*2 x1 = x+jOffs[kk] x2 = x+jOffs[kk+1] sc = subCols[k,i] anchor = sc.align scdx = sc.dx scdy = sc.dy fN = getattr(sc,'fontName',fontName) fS = getattr(sc,'fontSize',fontSize) fC = getattr(sc,'fillColor',fillColor) fL = getattr(sc,'leading',1.2*fontSize) if fN==fontName: fA = (ascent*fS)/fontSize else: fA = getFont(fontName).face.ascent/1000. if fA==0: fA=0.718 fA *= fS if anchor=='left': anchor = 'start' xoffs = x1 elif anchor=='right': anchor = 'end' xoffs = x2 elif anchor=='numeric': xoffs = x2 else: anchor = 'middle' xoffs = 0.5*(x1+x2) for t in lines: aS(String(xoffs+scdx,y+scdy,t,fontName=fN,fontSize=fS,fillColor=fC, textAnchor = anchor)) y -= fL yd = min(yd,y) y += fL for iy, a in ((y-max(fL-fA,0),'underlines'),(y+fA,'overlines')): il = getattr(sc,a,None) if il: if not isinstance(il,(tuple,list)): il = (il,) for l in il: l = copy.copy(l) l.y1 += iy l.y2 += iy l.x1 += x1 l.x2 += x2 aS(l) x = xn y = yd leadingMove = 2*y0-y-thisy if dividerLines: xd = thisx+dx+dxTextSpace+jOffs[-1]+dividerOffsX[1] yd = thisy+dy*0.5+dividerOffsY if ((dividerLines&1) and i%columnMaximum) or ((dividerLines&2) and not i%columnMaximum): g.add(Line(thisx+dividerOffsX[0],yd,xd,yd, strokeColor=dividerColor, strokeWidth=dividerWidth, strokeDashArray=dividerDashArray)) if (dividerLines&4) and (i%columnMaximum==lim or i==(n-1)): yd -= max(deltay,leadingMove)+yGap g.add(Line(thisx+dividerOffsX[0],yd,xd,yd, strokeColor=dividerColor, strokeWidth=dividerWidth, strokeDashArray=dividerDashArray)) # Make a 'normal' color swatch... swatchX = x + getattr(self,'swdx',0) swatchY = thisy + getattr(self,'swdy',0) if isAuto(col): chart = getattr(col,'chart',getattr(col,'obj',None)) c = chart.makeSwatchSample(getattr(col,'index',i),swatchX,swatchY,dx,dy) elif isinstance(col, colors.Color): if isSymbol(swatchMarker): c = uSymbol2Symbol(swatchMarker,swatchX+dx/2.,swatchY+dy/2.,col) else: c = self._defaultSwatch(swatchX,swatchY,dx,dy,fillColor=col,strokeWidth=strokeWidth,strokeColor=strokeColor) elif col is not None: try: c = copy.deepcopy(col) c.x = swatchX c.y = swatchY c.width = dx c.height = dy except: c = None else: c = None if c: g.add(c) if scallout: scallout(self,g,thisx,y0,i,(col,name),c) for s in S: g.add(s) if self.colEndCallout and (i%columnMaximum==lim or i==(n-1)): if alignment == "left": xt = thisx else: xt = thisx+dx+dxTextSpace yd = thisy+dy*0.5+dividerOffsY - (max(deltay,leadingMove)+yGap) self.colEndCallout(self, g, thisx, xt, yd, jOffs[-1], jOffs[-1]+dx+dxTextSpace) if i%columnMaximum==lim: if variColumn: thisx += jOffs[-1]+xW else: thisx = thisx+deltax thisy = upperlefty else: thisy = thisy-max(deltay,leadingMove)-yGap return g def demo(self): "Make sample legend." d = Drawing(200, 100) legend = Legend() legend.alignment = 'left' legend.x = 0 legend.y = 100 legend.dxTextSpace = 5 items = 'red green blue yellow pink black white'.split() items = [(getattr(colors, i), i) for i in items] legend.colorNamePairs = items d.add(legend, 'legend') return d class TotalAnnotator(LegendColEndCallout): def __init__(self, lText='Total', rText='0.0', fontName=_baseGFontName, fontSize=10, fillColor=colors.black, strokeWidth=0.5, strokeColor=colors.black, strokeDashArray=None, dx=0, dy=0, dly=0, dlx=(0,0)): self.lText = lText self.rText = rText self.fontName = fontName self.fontSize = fontSize self.fillColor = fillColor self.dy = dy self.dx = dx self.dly = dly self.dlx = dlx self.strokeWidth = strokeWidth self.strokeColor = strokeColor self.strokeDashArray = strokeDashArray def __call__(self,legend, g, x, xt, y, width, lWidth): from reportlab.graphics.shapes import String, Line fontSize = self.fontSize fontName = self.fontName fillColor = self.fillColor strokeColor = self.strokeColor strokeWidth = self.strokeWidth ascent=getFont(fontName).face.ascent/1000. if ascent==0: ascent=0.718 # default (from helvetica) ascent *= fontSize leading = fontSize*1.2 yt = y+self.dy-ascent*1.3 if self.lText and fillColor: g.add(String(xt,yt,self.lText, fontName=fontName, fontSize=fontSize, fillColor=fillColor, textAnchor = "start")) if self.rText: g.add(String(xt+width,yt,self.rText, fontName=fontName, fontSize=fontSize, fillColor=fillColor, textAnchor = "end")) if strokeWidth and strokeColor: yL = y+self.dly-leading g.add(Line(x+self.dlx[0],yL,x+self.dlx[1]+lWidth,yL, strokeColor=strokeColor, strokeWidth=strokeWidth, strokeDashArray=self.strokeDashArray)) class LineSwatch(Widget): """basically a Line with properties added so it can be used in a LineLegend""" _attrMap = AttrMap( x = AttrMapValue(isNumber, desc="x-coordinate for swatch line start point"), y = AttrMapValue(isNumber, desc="y-coordinate for swatch line start point"), width = AttrMapValue(isNumber, desc="length of swatch line"), height = AttrMapValue(isNumber, desc="used for line strokeWidth"), strokeColor = AttrMapValue(isColorOrNone, desc="color of swatch line"), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc="dash array for swatch line"), ) def __init__(self): from reportlab.lib.colors import red from reportlab.graphics.shapes import Line self.x = 0 self.y = 0 self.width = 20 self.height = 1 self.strokeColor = red self.strokeDashArray = None def draw(self): l = Line(self.x,self.y,self.x+self.width,self.y) l.strokeColor = self.strokeColor l.strokeDashArray = self.strokeDashArray l.strokeWidth = self.height return l class LineLegend(Legend): """A subclass of Legend for drawing legends with lines as the swatches rather than rectangles. Useful for lineCharts and linePlots. Should be similar in all other ways the the standard Legend class. """ def __init__(self): Legend.__init__(self) # Size of swatch rectangle. self.dx = 10 self.dy = 2 def _defaultSwatch(self,x,thisy,dx,dy,fillColor,strokeWidth,strokeColor): l = LineSwatch() l.x = x l.y = thisy l.width = dx l.height = dy l.strokeColor = fillColor return l reportlab-3.5.34/src/reportlab/graphics/charts/utils3d.py0000664000175000017500000001630313544671343024217 0ustar rptlabrptlab00000000000000from reportlab.lib import colors from reportlab.lib.attrmap import * from reportlab.pdfgen.canvas import Canvas from reportlab.graphics.shapes import Group, Drawing, Ellipse, Wedge, String, STATE_DEFAULTS, Polygon, Line def _getShaded(col,shd=None,shading=0.1): if shd is None: from reportlab.lib.colors import Blacker if col: shd = Blacker(col,1-shading) return shd def _getLit(col,shd=None,lighting=0.1): if shd is None: from reportlab.lib.colors import Whiter if col: shd = Whiter(col,1-lighting) return shd def _draw_3d_bar(G, x1, x2, y0, yhigh, xdepth, ydepth, fillColor=None, fillColorShaded=None, strokeColor=None, strokeWidth=1, shading=0.1): fillColorShaded = _getShaded(fillColor,None,shading) fillColorShadedTop = _getShaded(fillColor,None,shading/2.0) def _add_3d_bar(x1, x2, y1, y2, xoff, yoff, G=G,strokeColor=strokeColor, strokeWidth=strokeWidth, fillColor=fillColor): G.add(Polygon((x1,y1, x1+xoff,y1+yoff, x2+xoff,y2+yoff, x2,y2), strokeWidth=strokeWidth, strokeColor=strokeColor, fillColor=fillColor,strokeLineJoin=1)) usd = max(y0, yhigh) if xdepth or ydepth: if y0!=yhigh: #non-zero height _add_3d_bar( x2, x2, y0, yhigh, xdepth, ydepth, fillColor=fillColorShaded) #side _add_3d_bar(x1, x2, usd, usd, xdepth, ydepth, fillColor=fillColorShadedTop) #top G.add(Polygon((x1,y0,x2,y0,x2,yhigh,x1,yhigh), strokeColor=strokeColor, strokeWidth=strokeWidth, fillColor=fillColor,strokeLineJoin=1)) #front if xdepth or ydepth: G.add(Line( x1, usd, x2, usd, strokeWidth=strokeWidth, strokeColor=strokeColor or fillColorShaded)) class _YStrip: def __init__(self,y0,y1, slope, fillColor, fillColorShaded, shading=0.1): self.y0 = y0 self.y1 = y1 self.slope = slope self.fillColor = fillColor self.fillColorShaded = _getShaded(fillColor,fillColorShaded,shading) def _ystrip_poly( x0, x1, y0, y1, xoff, yoff): return [x0,y0,x0+xoff,y0+yoff,x1+xoff,y1+yoff,x1,y1] def _make_3d_line_info( G, x0, x1, y0, y1, z0, z1, theta_x, theta_y, fillColor, fillColorShaded=None, tileWidth=1, strokeColor=None, strokeWidth=None, strokeDashArray=None, shading=0.1): zwidth = abs(z1-z0) xdepth = zwidth*theta_x ydepth = zwidth*theta_y depth_slope = xdepth==0 and 1e150 or -ydepth/float(xdepth) x = float(x1-x0) slope = x==0 and 1e150 or (y1-y0)/x c = slope>depth_slope and _getShaded(fillColor,fillColorShaded,shading) or fillColor zy0 = z0*theta_y zx0 = z0*theta_x tileStrokeWidth = 0.6 if tileWidth is None: D = [(x1,y1)] else: T = ((y1-y0)**2+(x1-x0)**2)**0.5 tileStrokeWidth *= tileWidth if Tself.x1: return 1 if o.s==self.s and o.i in (self.i-1,self.i+1): return a = self.a b = self.b oa = o.a ob = o.b det = ob*a - oa*b if -1e-81 or ou<0 or ou>1: return x = x0 + u*a y = self.y0 + u*b if _ZERO=small: a(seg) S.sort(key=_segKey) I = [] n = len(S) for i in range(0,n-1): s = S[i] for j in range(i+1,n): if s.intersect(S[j],I)==1: break I.sort() return I if __name__=='__main__': from reportlab.graphics.shapes import Drawing from reportlab.lib.colors import lightgrey, pink D = Drawing(300,200) _draw_3d_bar(D, 10, 20, 10, 50, 5, 5, fillColor=lightgrey, strokeColor=pink) _draw_3d_bar(D, 30, 40, 10, 45, 5, 5, fillColor=lightgrey, strokeColor=pink) D.save(formats=['pdf'],outDir='.',fnRoot='_draw_3d_bar') print(find_intersections([[(0,0.5),(1,0.5),(0.5,0),(0.5,1)],[(.2666666667,0.4),(0.1,0.4),(0.1,0.2),(0,0),(1,1)],[(0,1),(0.4,0.1),(1,0.1)]])) print(find_intersections([[(0.1, 0.2), (0.1, 0.4)], [(0, 1), (0.4, 0.1)]])) print(find_intersections([[(0.2, 0.4), (0.1, 0.4)], [(0.1, 0.8), (0.4, 0.1)]])) print(find_intersections([[(0,0),(1,1)],[(0.4,0.1),(1,0.1)]])) print(find_intersections([[(0,0.5),(1,0.5),(0.5,0),(0.5,1)],[(0,0),(1,1)],[(0.1,0.8),(0.4,0.1),(1,0.1)]])) reportlab-3.5.34/src/reportlab/graphics/charts/piecharts.py0000664000175000017500000017620013556326125024613 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/piecharts.py # experimental pie chart script. Two types of pie - one is a monolithic #widget with all top-level properties, the other delegates most stuff to #a wedges collection whic lets you customize the group or every individual #wedge. __version__='3.3.0' __doc__="""Basic Pie Chart class. This permits you to customize and pop out individual wedges; supports elliptical and circular pies. """ import copy, functools from math import sin, cos, pi from reportlab.lib import colors from reportlab.lib.validators import isColor, isNumber, isListOfNumbersOrNone,\ isListOfNumbers, isColorOrNone, isString,\ isListOfStringsOrNone, OneOf, SequenceOf,\ isBoolean, isListOfColors, isNumberOrNone,\ isNoneOrListOfNoneOrStrings, isTextAnchor,\ isNoneOrListOfNoneOrNumbers, isBoxAnchor,\ isStringOrNone, NoneOr, EitherOr,\ isNumberInRange from reportlab.graphics.widgets.markers import uSymbol2Symbol, isSymbol from reportlab.lib.attrmap import * from reportlab.pdfgen.canvas import Canvas from reportlab.graphics.shapes import Group, Drawing, Ellipse, Wedge, String, STATE_DEFAULTS, ArcPath, Polygon, Rect, PolyLine, Line from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder from reportlab.graphics.charts.areas import PlotArea from reportlab.graphics.charts.legends import _objStr from reportlab.graphics.charts.textlabels import Label from reportlab import xrange, ascii, cmp _ANGLE2BOXANCHOR={0:'w', 45:'sw', 90:'s', 135:'se', 180:'e', 225:'ne', 270:'n', 315: 'nw', -45: 'nw'} _ANGLE2RBOXANCHOR={0:'e', 45:'ne', 90:'n', 135:'nw', 180:'w', 225:'sw', 270:'s', 315: 'se', -45: 'se'} _ANGLELO = 1e-7 _ANGLEHI = 360.0 - _ANGLELO class WedgeLabel(Label): def _checkDXY(self,ba): pass def _getBoxAnchor(self): ba = self.boxAnchor if ba in ('autox','autoy'): na = (int((self._pmv%360)/45.)*45)%360 if not (na % 90): # we have a right angle case da = (self._pmv - na) % 360 if abs(da)>5: na += (da>0 and 45 or -45) ba = (getattr(self,'_anti',None) and _ANGLE2RBOXANCHOR or _ANGLE2BOXANCHOR)[na] self._checkDXY(ba) return ba class WedgeProperties(PropHolder): """This holds descriptive information about the wedges in a pie chart. It is not to be confused with the 'wedge itself'; this just holds a recipe for how to format one, and does not allow you to hack the angles. It can format a genuine Wedge object for you with its format method. """ _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber,desc='Width of the wedge border'), fillColor = AttrMapValue(isColorOrNone,desc='Filling color of the wedge'), strokeColor = AttrMapValue(isColorOrNone,desc='Color of the wedge border'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc='Style of the wedge border, expressed as a list of lengths of alternating dashes and blanks'), strokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Line cap 0=butt, 1=round & 2=square"), strokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Line join 0=miter, 1=round & 2=bevel"), strokeMiterLimit = AttrMapValue(isNumber,desc='Miter limit control miter line joins'), popout = AttrMapValue(isNumber,desc="How far of centre a wedge to pop"), fontName = AttrMapValue(isString,desc='Name of the font of the label text'), fontSize = AttrMapValue(isNumber,desc='Size of the font of the label text in points'), fontColor = AttrMapValue(isColorOrNone,desc='Color of the font of the label text'), 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'), label_dx = AttrMapValue(isNumber,desc='X Offset of the label'), label_dy = AttrMapValue(isNumber,desc='Y Offset of the label'), label_angle = AttrMapValue(isNumber,desc='Angle of the label, default (0) is horizontal, 90 is vertical, 180 is upside down'), label_boxAnchor = AttrMapValue(isBoxAnchor,desc='Anchoring point of the label'), label_boxStrokeColor = AttrMapValue(isColorOrNone,desc='Border color for the label box'), label_boxStrokeWidth = AttrMapValue(isNumber,desc='Border width for the label box'), label_boxFillColor = AttrMapValue(isColorOrNone,desc='Filling color of the label box'), label_strokeColor = AttrMapValue(isColorOrNone,desc='Border color for the label text'), label_strokeWidth = AttrMapValue(isNumber,desc='Border width for the label text'), label_text = AttrMapValue(isStringOrNone,desc='Text of the label'), label_leading = AttrMapValue(isNumberOrNone,desc=''), label_width = AttrMapValue(isNumberOrNone,desc='Width of the label'), label_maxWidth = AttrMapValue(isNumberOrNone,desc='Maximum width the label can grow to'), label_height = AttrMapValue(isNumberOrNone,desc='Height of the label'), label_textAnchor = AttrMapValue(isTextAnchor,desc='Maximum height the label can grow to'), label_visible = AttrMapValue(isBoolean,desc="True if the label is to be drawn"), label_topPadding = AttrMapValue(isNumber,'Padding at top of box'), label_leftPadding = AttrMapValue(isNumber,'Padding at left of box'), label_rightPadding = AttrMapValue(isNumber,'Padding at right of box'), label_bottomPadding = AttrMapValue(isNumber,'Padding at bottom of box'), label_simple_pointer = AttrMapValue(isBoolean,'Set to True for simple pointers'), label_pointer_strokeColor = AttrMapValue(isColorOrNone,desc='Color of indicator line'), label_pointer_strokeWidth = AttrMapValue(isNumber,desc='StrokeWidth of indicator line'), label_pointer_elbowLength = AttrMapValue(isNumber,desc='Length of final indicator line segment'), label_pointer_edgePad = AttrMapValue(isNumber,desc='pad between pointer label and box'), label_pointer_piePad = AttrMapValue(isNumber,desc='pad between pointer label and pie'), swatchMarker = AttrMapValue(NoneOr(isSymbol), desc="None or makeMarker('Diamond') ...",advancedUsage=1), visible = AttrMapValue(isBoolean,'Set to false to skip displaying'), ) def __init__(self): self.strokeWidth = 0 self.fillColor = None self.strokeColor = STATE_DEFAULTS["strokeColor"] self.strokeDashArray = STATE_DEFAULTS["strokeDashArray"] self.strokeLineJoin = 1 self.strokeLineCap = 0 self.strokeMiterLimit = 0 self.popout = 0 self.fontName = STATE_DEFAULTS["fontName"] self.fontSize = STATE_DEFAULTS["fontSize"] self.fontColor = STATE_DEFAULTS["fillColor"] self.labelRadius = 1.2 self.label_dx = self.label_dy = self.label_angle = 0 self.label_text = None self.label_topPadding = self.label_leftPadding = self.label_rightPadding = self.label_bottomPadding = 0 self.label_boxAnchor = 'autox' self.label_boxStrokeColor = None #boxStroke self.label_boxStrokeWidth = 0.5 #boxStrokeWidth self.label_boxFillColor = None self.label_strokeColor = None self.label_strokeWidth = 0.1 self.label_leading = self.label_width = self.label_maxWidth = self.label_height = None self.label_textAnchor = 'start' self.label_simple_pointer = 0 self.label_visible = 1 self.label_pointer_strokeColor = colors.black self.label_pointer_strokeWidth = 0.5 self.label_pointer_elbowLength = 3 self.label_pointer_edgePad = 2 self.label_pointer_piePad = 3 self.visible = 1 def _addWedgeLabel(self,text,angle,labelX,labelY,wedgeStyle,labelClass=WedgeLabel): # now draw a label if self.simpleLabels: theLabel = String(labelX, labelY, text) if not self.sideLabels: theLabel.textAnchor = "middle" else: if (abs(angle) < 90 ) or (angle >270 and angle<450) or (-450< angle <-270): theLabel.textAnchor = "start" else: theLabel.textAnchor = "end" theLabel._pmv = angle theLabel._simple_pointer = 0 else: theLabel = labelClass() theLabel._pmv = angle theLabel.x = labelX theLabel.y = labelY theLabel.dx = wedgeStyle.label_dx if not self.sideLabels: theLabel.dy = wedgeStyle.label_dy theLabel.boxAnchor = wedgeStyle.label_boxAnchor else: if wedgeStyle.fontSize is None: sideLabels_dy = self.fontSize / 2.5 else: sideLabels_dy = wedgeStyle.fontSize / 2.5 if wedgeStyle.label_dy is None: theLabel.dy = sideLabels_dy else: theLabel.dy = wedgeStyle.label_dy + sideLabels_dy if (abs(angle) < 90 ) or (angle >270 and angle<450) or (-450< angle <-270): theLabel.boxAnchor = 'w' else: theLabel.boxAnchor = 'e' theLabel.angle = wedgeStyle.label_angle theLabel.boxStrokeColor = wedgeStyle.label_boxStrokeColor theLabel.boxStrokeWidth = wedgeStyle.label_boxStrokeWidth theLabel.boxFillColor = wedgeStyle.label_boxFillColor theLabel.strokeColor = wedgeStyle.label_strokeColor theLabel.strokeWidth = wedgeStyle.label_strokeWidth _text = wedgeStyle.label_text if _text is None: _text = text theLabel._text = _text theLabel.leading = wedgeStyle.label_leading theLabel.width = wedgeStyle.label_width theLabel.maxWidth = wedgeStyle.label_maxWidth theLabel.height = wedgeStyle.label_height theLabel.textAnchor = wedgeStyle.label_textAnchor theLabel.visible = wedgeStyle.label_visible theLabel.topPadding = wedgeStyle.label_topPadding theLabel.leftPadding = wedgeStyle.label_leftPadding theLabel.rightPadding = wedgeStyle.label_rightPadding theLabel.bottomPadding = wedgeStyle.label_bottomPadding theLabel._simple_pointer = wedgeStyle.label_simple_pointer theLabel.fontSize = wedgeStyle.fontSize theLabel.fontName = wedgeStyle.fontName theLabel.fillColor = wedgeStyle.fontColor return theLabel def _fixLabels(labels,n): if labels is None: labels = [''] * n else: i = n-len(labels) if i>0: labels = list(labels)+['']*i return labels class AbstractPieChart(PlotArea): def makeSwatchSample(self, rowNo, x, y, width, height): baseStyle = self.slices styleIdx = rowNo % len(baseStyle) style = baseStyle[styleIdx] strokeColor = getattr(style, 'strokeColor', getattr(baseStyle,'strokeColor',None)) fillColor = getattr(style, 'fillColor', getattr(baseStyle,'fillColor',None)) strokeDashArray = getattr(style, 'strokeDashArray', getattr(baseStyle,'strokeDashArray',None)) strokeWidth = getattr(style, 'strokeWidth', getattr(baseStyle, 'strokeWidth',None)) swatchMarker = getattr(style, 'swatchMarker', getattr(baseStyle, 'swatchMarker',None)) if swatchMarker: return uSymbol2Symbol(swatchMarker,x+width/2.,y+height/2.,fillColor) return Rect(x,y,width,height,strokeWidth=strokeWidth,strokeColor=strokeColor, strokeDashArray=strokeDashArray,fillColor=fillColor) def getSeriesName(self,i,default=None): '''return series name i or default''' try: text = _objStr(self.labels[i]) except: text = default if not self.simpleLabels: _text = getattr(self.slices[i],'label_text','') if _text is not None: text = _text return text def boundsOverlap(P,Q): 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) def _findOverlapRun(B,i,wrap): '''find overlap run containing B[i]''' n = len(B) R = [i] while 1: i = R[-1] j = (i+1)%n if j in R or not boundsOverlap(B[i],B[j]): break R.append(j) while 1: i = R[0] j = (i-1)%n if j in R or not boundsOverlap(B[i],B[j]): break R.insert(0,j) return R def findOverlapRun(B,wrap=1): '''determine a set of overlaps in bounding boxes B or return None''' n = len(B) if n>1: for i in xrange(n-1): R = _findOverlapRun(B,i,wrap) if len(R)>1: return R return None def fixLabelOverlaps(L, sideLabels=False, mult0=1.0): nL = len(L) if nL<2: return B = [l._origdata['bounds'] for l in L] OK = 1 RP = [] iter = 0 mult0 = float(mult0 + 0) mult = mult0 if not sideLabels: while iter<30: R = findOverlapRun(B) if not R: break nR = len(R) if nR==nL: break if not [r for r in RP if r in R]: mult = mult0 da = 0 r0 = R[0] rL = R[-1] bi = B[r0] taa = aa = _360(L[r0]._pmv) for r in R[1:]: b = B[r] da = max(da,min(b[2]-bi[0],bi[2]-b[0])) bi = b aa += L[r]._pmv aa = aa/float(nR) utaa = abs(L[rL]._pmv-taa) ntaa = _360(utaa) da *= mult*(nR-1)/ntaa for r in R: l = L[r] orig = l._origdata angle = l._pmv = _360(l._pmv+da*(_360(l._pmv)-aa)) rad = angle/_180_pi l.x = orig['cx'] + orig['rx']*cos(rad) l.y = orig['cy'] + orig['ry']*sin(rad) B[r] = l.getBounds() RP = R mult *= 1.05 iter += 1 else: while iter<30: R = findOverlapRun(B) if not R: break nR = len(R) if nR == nL: break l1 = L[-1] orig1 = l1._origdata bounds1 = orig1['bounds'] for i,r in enumerate(R): l = L[r] orig = l._origdata bounds = orig['bounds'] diff1 = 0 diff2 = 0 if not i == nR-1: if not bounds == bounds1: if bounds[3]>bounds1[1] and bounds1[1]bounds[1] and bounds[1] diff2: l.y +=0.5*(bounds1[3]-bounds1[1]) elif diff2 >= diff1: l.y -= 0.5*(bounds1[3]-bounds1[1]) B[r] = l.getBounds() iter += 1 def intervalIntersection(A,B): x,y = max(min(A),min(B)),min(max(A),max(B)) if x>=y: return None return x,y def _makeSideArcDefs(sa,direction): sa %= 360 if 90<=sa<270: if direction=='clockwise': a = (0,90,sa),(1,-90,90),(0,-360+sa,-90) else: a = (0,sa,270),(1,270,450),(0,450,360+sa) else: offs = sa>=270 and 360 or 0 if direction=='clockwise': a = (1,offs-90,sa),(0,offs-270,offs-90),(1,-360+sa,offs-270) else: a = (1,sa,offs+90),(0,offs+90,offs+270),(1,offs+270,360+sa) return tuple([a for a in a if a[1]1: a.sort(key=_keyFLA) return a[0] def _fPLSide(l,width,side=None): data = l._origdata if side is None: li = data['li'] ri = data['ri'] if li is None: side = 1 i = ri elif ri is None: side = 0 i = li elif li[1]-li[0]>ri[1]-ri[0]: side = 0 i = li else: side = 1 i = ri w = data['width'] edgePad = data['edgePad'] if not side: #on left l._pmv = 180 l.x = edgePad+w i = data['li'] else: l._pmv = 0 l.x = width - w - edgePad i = data['ri'] mid = data['mid'] = (i[0]+i[1])*0.5 data['smid'] = sin(mid/_180_pi) data['cmid'] = cos(mid/_180_pi) data['side'] = side return side,w #key functions def _fPLCF(a,b): return cmp(b._origdata['smid'],a._origdata['smid']) _fPLCF = functools.cmp_to_key(_fPLCF) def _arcCF(a): return a[1] def _fixPointerLabels(n,L,x,y,width,height,side=None): LR = [],[] mlr = [0,0] for l in L: i,w = _fPLSide(l,width,side) LR[i].append(l) mlr[i] = max(w,mlr[i]) mul = 1 G = n*[None] mel = 0 hh = height*0.5 yhh = y+hh m = max(mlr) for i in (0,1): T = LR[i] if T: B = [] aB = B.append S = [] aS = S.append T.sort(key=_fPLCF) p = 0 yh = y+height for l in T: data = l._origdata inc = x+mul*(m-data['width']) l.x += inc G[data['index']] = l ly = yhh+data['smid']*hh b = data['bounds'] b2 = (b[3]-b[1])*0.5 if ly+b2>yh: ly = yh-b2 if ly-b2sFree: break yh = B[j0][3]+sAbove*sNeed/sFree for r in R: l = T[r] data = l._origdata b = data['bounds'] b2 = (b[3]-b[1])*0.5 yh -= 0.5 ly = l.y = yh-b2 B[r] = data['bounds'] = (b[0],ly-b2,b[2],yh) yh = ly - b2 - 0.5 mlr[i] = m+p mul = -1 return G, mlr[0], mlr[1], mel def theta0(data, direction): fac = (2*pi)/sum(data) rads = [d*fac for d in data] r0 = 0 hrads = [] for r in rads: hrads.append(r0+r*0.5) r0 += r vstar = len(data)*1e6 rstar = 0 delta = pi/36.0 for i in range(36): r = i*delta v = sum([abs(sin(r+a)) for a in hrads]) if v < vstar: if direction == 'clockwise': rstar=-r else: rstar=r vstar = v return rstar*180/pi class AngleData(float): '''use this to carry the data along with the angle''' def __new__(cls,angle,data): self = float.__new__(cls,angle) self._data = data return self class Pie(AbstractPieChart): _attrMap = AttrMap(BASE=AbstractPieChart, data = AttrMapValue(isListOfNumbers, desc='List of numbers defining wedge sizes; need not sum to 1'), labels = AttrMapValue(isListOfStringsOrNone, desc="Optional list of labels to use for each data point"), startAngle = AttrMapValue(isNumber, desc="Angle of first slice; 0 is due East"), direction = AttrMapValue(OneOf('clockwise', 'anticlockwise'), desc="'clockwise' or 'anticlockwise'"), slices = AttrMapValue(None, desc="Collection of wedge descriptor objects"), 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."), other_threshold = AttrMapValue(isNumber, desc='A value for doing threshholding, not used yet.',advancedUsage=1), checkLabelOverlap = AttrMapValue(EitherOr((isNumberInRange(0.05,1),isBoolean)), desc="If true check and attempt to fix\n standard label overlaps(default off)",advancedUsage=1), pointerLabelMode = AttrMapValue(OneOf(None,'LeftRight','LeftAndRight'), desc='',advancedUsage=1), sameRadii = AttrMapValue(isBoolean, desc="If true make x/y radii the same(default off)",advancedUsage=1), orderMode = AttrMapValue(OneOf('fixed','alternate'),advancedUsage=1), xradius = AttrMapValue(isNumberOrNone, desc="X direction Radius"), yradius = AttrMapValue(isNumberOrNone, desc="Y direction Radius"), innerRadiusFraction = AttrMapValue(isNumberOrNone, desc="fraction of radii to start wedges at"), wedgeRecord = AttrMapValue(None, desc="callable(wedge,*args,**kwds)",advancedUsage=1), sideLabels = AttrMapValue(isBoolean, desc="If true attempt to make piechart with labels along side and pointers"), sideLabelsOffset = AttrMapValue(isNumber, desc="The fraction of the pie width that the labels are situated at from the edges of the pie"), ) other_threshold=None def __init__(self,**kwd): PlotArea.__init__(self) self.x = 0 self.y = 0 self.width = 100 self.height = 100 self.data = [1,2.3,1.7,4.2] self.labels = None # or list of strings self.startAngle = 90 self.direction = "clockwise" self.simpleLabels = 1 self.checkLabelOverlap = 0 self.pointerLabelMode = None self.sameRadii = False self.orderMode = 'fixed' self.xradius = self.yradius = self.innerRadiusFraction = None self.sideLabels = 0 self.sideLabelsOffset = 0.1 self.slices = TypedPropertyCollection(WedgeProperties) self.slices[0].fillColor = colors.darkcyan self.slices[1].fillColor = colors.blueviolet self.slices[2].fillColor = colors.blue self.slices[3].fillColor = colors.cyan self.slices[4].fillColor = colors.pink self.slices[5].fillColor = colors.magenta self.slices[6].fillColor = colors.yellow def demo(self): d = Drawing(200, 100) pc = Pie() pc.x = 50 pc.y = 10 pc.width = 100 pc.height = 80 pc.data = [10,20,30,40,50,60] pc.labels = ['a','b','c','d','e','f'] pc.slices.strokeWidth=0.5 pc.slices[3].popout = 10 pc.slices[3].strokeWidth = 2 pc.slices[3].strokeDashArray = [2,2] pc.slices[3].labelRadius = 1.75 pc.slices[3].fontColor = colors.red pc.slices[0].fillColor = colors.darkcyan pc.slices[1].fillColor = colors.blueviolet pc.slices[2].fillColor = colors.blue pc.slices[3].fillColor = colors.cyan pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue pc.slices[6].fillColor = colors.lightcoral d.add(pc) return d def makePointerLabels(self,angles,plMode): class PL: def __init__(self,centerx,centery,xradius,yradius,data,lu=0,ru=0): self.centerx = centerx self.centery = centery self.xradius = xradius self.yradius = yradius self.data = data self.lu = lu self.ru = ru labelX = self.width-2 labelY = self.height n = nr = nl = maxW = sumH = 0 styleCount = len(self.slices) L=[] L_add = L.append refArcs = _makeSideArcDefs(self.startAngle,self.direction) for i, A in angles: if A[1] is None: continue sn = self.getSeriesName(i,'') if not sn: continue style = self.slices[i%styleCount] if not style.label_visible or not style.visible: continue n += 1 l=_addWedgeLabel(self,sn,180,labelX,labelY,style,labelClass=WedgeLabel) L_add(l) b = l.getBounds() w = b[2]-b[0] h = b[3]-b[1] ri = [(a[0],intervalIntersection(A,(a[1],a[2]))) for a in refArcs] li = _findLargestArc(ri,0) ri = _findLargestArc(ri,1) if li and ri: if plMode=='LeftAndRight': if li[1]-li[0]ri[1]-ri[0]: ri = None if ri: nr += 1 if li: nl += 1 l._origdata = dict(bounds=b,width=w,height=h,li=li,ri=ri,index=i,edgePad=style.label_pointer_edgePad,piePad=style.label_pointer_piePad,elbowLength=style.label_pointer_elbowLength) maxW = max(w,maxW) sumH += h+2 if not n: #we have no labels xradius = self.width*0.5 yradius = self.height*0.5 centerx = self.x+xradius centery = self.y+yradius if self.xradius: xradius = self.xradius if self.yradius: yradius = self.yradius if self.sameRadii: xradius=yradius=min(xradius,yradius) return PL(centerx,centery,xradius,yradius,[]) aonR = nr==n if sumH=1e-5] W.sort(key=_arcCF) T = [[],[]] i = 0 while W: if i<2: a = W.pop(0) else: a = W.pop(-1) T[i%2].append(a) i += 1 i %= 4 T[1].reverse() D = T[0]+T[1] + [a for a in D if abs(a[1])<1e-5] A = [] a = A.append for i, angle in D: endAngle = (startAngle + (angle * whichWay)) if abs(angle)>=_ANGLELO: if startAngle >= endAngle: aa = endAngle,startAngle else: aa = startAngle,endAngle else: aa = startAngle, None if wr: aa = (AngleData(aa[0],angle._data),aa[1]) startAngle = endAngle a((i,aa)) return A def makeWedges(self): angles = self.makeAngles() #Checking to see whether there are too many wedges packed in too small a space halfAngles = [] for i,(a1,a2) in angles: if a2 is None: halfAngle = a1 else: halfAngle = 0.5*(a2+a1) halfAngles.append(halfAngle) sideLabels = self.sideLabels n = len(angles) labels = _fixLabels(self.labels,n) wr = getattr(self,'wedgeRecord',None) self._seriesCount = n styleCount = len(self.slices) plMode = self.pointerLabelMode if sideLabels: plMode = None if plMode: checkLabelOverlap = False PL=self.makePointerLabels(angles,plMode) xradius = PL.xradius yradius = PL.yradius centerx = PL.centerx centery = PL.centery PL_data = PL.data gSN = lambda i: '' else: xradius = self.width*0.5 yradius = self.height*0.5 centerx = self.x + xradius centery = self.y + yradius if self.xradius: xradius = self.xradius if self.yradius: yradius = self.yradius if self.sameRadii: xradius=yradius=min(xradius,yradius) checkLabelOverlap = self.checkLabelOverlap gSN = lambda i: self.getSeriesName(i,'') g = Group() g_add = g.add L = [] L_add = L.append innerRadiusFraction = self.innerRadiusFraction for i,(a1,a2) in angles: if a2 is None: continue #if we didn't use %stylecount here we'd end up with the later wedges #all having the default style wedgeStyle = self.slices[i%styleCount] if not wedgeStyle.visible: continue aa = abs(a2-a1) # is it a popout? cx, cy = centerx, centery text = gSN(i) popout = wedgeStyle.popout if text or popout: averageAngle = (a1+a2)/2.0 aveAngleRadians = averageAngle/_180_pi cosAA = cos(aveAngleRadians) sinAA = sin(aveAngleRadians) if popout and aa<_ANGLEHI: # pop out the wedge cx = centerx + popout*cosAA cy = centery + popout*sinAA if innerRadiusFraction: theWedge = Wedge(cx, cy, xradius, a1, a2, yradius=yradius, radius1=xradius*innerRadiusFraction,yradius1=yradius*innerRadiusFraction) else: if aa>=_ANGLEHI: theWedge = Ellipse(cx, cy, xradius, yradius) else: theWedge = Wedge(cx, cy, xradius, a1, a2, yradius=yradius) theWedge.fillColor = wedgeStyle.fillColor theWedge.strokeColor = wedgeStyle.strokeColor theWedge.strokeWidth = wedgeStyle.strokeWidth theWedge.strokeLineJoin = wedgeStyle.strokeLineJoin theWedge.strokeLineCap = wedgeStyle.strokeLineCap theWedge.strokeMiterLimit = wedgeStyle.strokeMiterLimit theWedge.strokeWidth = wedgeStyle.strokeWidth theWedge.strokeDashArray = wedgeStyle.strokeDashArray g_add(theWedge) if wr: wr(theWedge,value=a1._data,label=text) if wedgeStyle.label_visible: if not sideLabels: if text: labelRadius = wedgeStyle.labelRadius rx = xradius*labelRadius ry = yradius*labelRadius labelX = cx + rx*cosAA labelY = cy + ry*sinAA l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,wedgeStyle) L_add(l) if not plMode and l._simple_pointer: l._aax = cx+xradius*cosAA l._aay = cy+yradius*sinAA if checkLabelOverlap: l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, 'bounds': l.getBounds(), 'angles':(a1,a2), } elif plMode and PL_data: l = PL_data[i] if l: data = l._origdata sinM = data['smid'] cosM = data['cmid'] lX = cx + xradius*cosM lY = cy + yradius*sinM lpel = wedgeStyle.label_pointer_elbowLength lXi = lX + lpel*cosM lYi = lY + lpel*sinM L_add(PolyLine((lX,lY,lXi,lYi,l.x,l.y), strokeWidth=wedgeStyle.label_pointer_strokeWidth, strokeColor=wedgeStyle.label_pointer_strokeColor)) L_add(l) else: if text: slices_popout = self.slices.popout m=0 for n, angle in angles: if self.slices[n].fillColor: m += 1 else: r = n%m self.slices[n].fillColor = self.slices[r].fillColor self.slices[n].popout = self.slices[r].popout for j in range(0,m-1): if self.slices[j].popout > slices_popout: slices_popout = self.slices[j].popout labelRadius = wedgeStyle.labelRadius ry = yradius*labelRadius if (abs(averageAngle) < 90 ) or (averageAngle >270 and averageAngle <450) or (-450< averageAngle <-270): labelX = (1+self.sideLabelsOffset)*self.width + self.x + slices_popout rx = 0 else: labelX = self.x - (self.sideLabelsOffset)*self.width - slices_popout rx = 0 labelY = cy + ry*sinAA l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,wedgeStyle) L_add(l) if not plMode: l._aax = cx+xradius*cosAA l._aay = cy+yradius*sinAA if checkLabelOverlap: l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, 'bounds': l.getBounds(), } x1,y1,x2,y2 = l.getBounds() if checkLabelOverlap and L: fixLabelOverlaps(L, sideLabels, mult0=checkLabelOverlap) for l in L: g_add(l) if not plMode: for l in L: if l._simple_pointer and not sideLabels: g_add(Line(l.x,l.y,l._aax,l._aay, strokeWidth=wedgeStyle.label_pointer_strokeWidth, strokeColor=wedgeStyle.label_pointer_strokeColor)) elif sideLabels: x1,y1,x2,y2 = l.getBounds() #add pointers if l.x == (1+self.sideLabelsOffset)*self.width + self.x: g_add(Line(l._aax,l._aay,0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)), strokeWidth=wedgeStyle.label_pointer_strokeWidth, strokeColor=wedgeStyle.label_pointer_strokeColor)) g_add(Line(0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)),l.x,l.y+(0.25*(y2-y1)), strokeWidth=wedgeStyle.label_pointer_strokeWidth, strokeColor=wedgeStyle.label_pointer_strokeColor)) else: g_add(Line(l._aax,l._aay,0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)), strokeWidth=wedgeStyle.label_pointer_strokeWidth, strokeColor=wedgeStyle.label_pointer_strokeColor)) g_add(Line(0.5*(l._aax+l.x),l.y+(0.25*(y2-y1)),l.x,l.y+(0.25*(y2-y1)), strokeWidth=wedgeStyle.label_pointer_strokeWidth, strokeColor=wedgeStyle.label_pointer_strokeColor)) return g def draw(self): G = self.makeBackground() w = self.makeWedges() if G: return Group(G,w) return w class LegendedPie(Pie): """Pie with a two part legend (one editable with swatches, one hidden without swatches).""" _attrMap = AttrMap(BASE=Pie, drawLegend = AttrMapValue(isBoolean, desc="If true then create and draw legend"), legend1 = AttrMapValue(None, desc="Handle to legend for pie"), legendNumberFormat = AttrMapValue(None, desc="Formatting routine for number on right hand side of legend."), legendNumberOffset = AttrMapValue(isNumber, desc="Horizontal space between legend and numbers on r/hand side"), pieAndLegend_colors = AttrMapValue(isListOfColors, desc="Colours used for both swatches and pie"), legend_names = AttrMapValue(isNoneOrListOfNoneOrStrings, desc="Names used in legend (or None)"), legend_data = AttrMapValue(isNoneOrListOfNoneOrNumbers, desc="Numbers used on r/hand side of legend (or None)"), leftPadding = AttrMapValue(isNumber, desc='Padding on left of drawing'), rightPadding = AttrMapValue(isNumber, desc='Padding on right of drawing'), topPadding = AttrMapValue(isNumber, desc='Padding at top of drawing'), bottomPadding = AttrMapValue(isNumber, desc='Padding at bottom of drawing'), ) def __init__(self): Pie.__init__(self) self.x = 0 self.y = 0 self.height = 100 self.width = 100 self.data = [38.4, 20.7, 18.9, 15.4, 6.6] self.labels = None self.direction = 'clockwise' PCMYKColor, black = colors.PCMYKColor, colors.black self.pieAndLegend_colors = [PCMYKColor(11,11,72,0,spotName='PANTONE 458 CV'), PCMYKColor(100,65,0,30,spotName='PANTONE 288 CV'), PCMYKColor(11,11,72,0,spotName='PANTONE 458 CV',density=75), PCMYKColor(100,65,0,30,spotName='PANTONE 288 CV',density=75), PCMYKColor(11,11,72,0,spotName='PANTONE 458 CV',density=50), PCMYKColor(100,65,0,30,spotName='PANTONE 288 CV',density=50)] #Allows us up to six 'wedges' to be coloured self.slices[0].fillColor=self.pieAndLegend_colors[0] self.slices[1].fillColor=self.pieAndLegend_colors[1] self.slices[2].fillColor=self.pieAndLegend_colors[2] self.slices[3].fillColor=self.pieAndLegend_colors[3] self.slices[4].fillColor=self.pieAndLegend_colors[4] self.slices[5].fillColor=self.pieAndLegend_colors[5] self.slices.strokeWidth = 0.75 self.slices.strokeColor = black legendOffset = 17 self.legendNumberOffset = 51 self.legendNumberFormat = '%.1f%%' self.legend_data = self.data #set up the legends from reportlab.graphics.charts.legends import Legend self.legend1 = Legend() self.legend1.x = self.width+legendOffset self.legend1.y = self.height self.legend1.deltax = 5.67 self.legend1.deltay = 14.17 self.legend1.dxTextSpace = 11.39 self.legend1.dx = 5.67 self.legend1.dy = 5.67 self.legend1.columnMaximum = 7 self.legend1.alignment = 'right' self.legend_names = ['AAA:','AA:','A:','BBB:','NR:'] for f in range(len(self.data)): self.legend1.colorNamePairs.append((self.pieAndLegend_colors[f], self.legend_names[f])) self.legend1.fontName = "Helvetica-Bold" self.legend1.fontSize = 6 self.legend1.strokeColor = black self.legend1.strokeWidth = 0.5 self._legend2 = Legend() self._legend2.dxTextSpace = 0 self._legend2.dx = 0 self._legend2.alignment = 'right' self._legend2.fontName = "Helvetica-Oblique" self._legend2.fontSize = 6 self._legend2.strokeColor = self.legend1.strokeColor self.leftPadding = 5 self.rightPadding = 5 self.topPadding = 5 self.bottomPadding = 5 self.drawLegend = 1 def draw(self): if self.drawLegend: self.legend1.colorNamePairs = [] self._legend2.colorNamePairs = [] for f in range(len(self.data)): if self.legend_names == None: self.slices[f].fillColor = self.pieAndLegend_colors[f] self.legend1.colorNamePairs.append((self.pieAndLegend_colors[f], None)) else: try: self.slices[f].fillColor = self.pieAndLegend_colors[f] self.legend1.colorNamePairs.append((self.pieAndLegend_colors[f], self.legend_names[f])) except IndexError: self.slices[f].fillColor = self.pieAndLegend_colors[f%len(self.pieAndLegend_colors)] self.legend1.colorNamePairs.append((self.pieAndLegend_colors[f%len(self.pieAndLegend_colors)], self.legend_names[f])) if self.legend_data != None: ldf = self.legend_data[f] lNF = self.legendNumberFormat if ldf is None or lNF is None: pass elif isinstance(lNF,str): ldf = lNF % ldf elif hasattr(lNF,'__call__'): ldf = lNF(ldf) else: raise ValueError("Unknown formatter type %s, expected string or function" % ascii(self.legendNumberFormat)) self._legend2.colorNamePairs.append((None,ldf)) p = Pie.draw(self) if self.drawLegend: p.add(self.legend1) #hide from user - keeps both sides lined up! self._legend2.x = self.legend1.x+self.legendNumberOffset self._legend2.y = self.legend1.y self._legend2.deltax = self.legend1.deltax self._legend2.deltay = self.legend1.deltay self._legend2.dy = self.legend1.dy self._legend2.columnMaximum = self.legend1.columnMaximum p.add(self._legend2) p.shift(self.leftPadding, self.bottomPadding) return p def _getDrawingDimensions(self): tx = self.rightPadding if self.drawLegend: tx += self.legend1.x+self.legendNumberOffset #self._legend2.x tx += self._legend2._calculateMaxWidth(self._legend2.colorNamePairs) ty = self.bottomPadding+self.height+self.topPadding return (tx,ty) def demo(self, drawing=None): if not drawing: tx,ty = self._getDrawingDimensions() drawing = Drawing(tx, ty) drawing.add(self.draw()) return drawing from reportlab.graphics.charts.utils3d import _getShaded, _2rad, _360, _pi_2, _2pi, _180_pi class Wedge3dProperties(PropHolder): """This holds descriptive information about the wedges in a pie chart. It is not to be confused with the 'wedge itself'; this just holds a recipe for how to format one, and does not allow you to hack the angles. It can format a genuine Wedge object for you with its format method. """ _attrMap = AttrMap( fillColor = AttrMapValue(isColorOrNone,desc=''), fillColorShaded = AttrMapValue(isColorOrNone,desc=''), fontColor = AttrMapValue(isColorOrNone,desc=''), fontName = AttrMapValue(isString,desc=''), fontSize = AttrMapValue(isNumber,desc=''), label_angle = AttrMapValue(isNumber,desc=''), label_bottomPadding = AttrMapValue(isNumber,'padding at bottom of box'), label_boxAnchor = AttrMapValue(isBoxAnchor,desc=''), label_boxFillColor = AttrMapValue(isColorOrNone,desc=''), label_boxStrokeColor = AttrMapValue(isColorOrNone,desc=''), label_boxStrokeWidth = AttrMapValue(isNumber,desc=''), label_dx = AttrMapValue(isNumber,desc=''), label_dy = AttrMapValue(isNumber,desc=''), label_height = AttrMapValue(isNumberOrNone,desc=''), label_leading = AttrMapValue(isNumberOrNone,desc=''), label_leftPadding = AttrMapValue(isNumber,'padding at left of box'), label_maxWidth = AttrMapValue(isNumberOrNone,desc=''), label_rightPadding = AttrMapValue(isNumber,'padding at right of box'), label_simple_pointer = AttrMapValue(isBoolean,'set to True for simple pointers'), label_strokeColor = AttrMapValue(isColorOrNone,desc=''), label_strokeWidth = AttrMapValue(isNumber,desc=''), label_text = AttrMapValue(isStringOrNone,desc=''), label_textAnchor = AttrMapValue(isTextAnchor,desc=''), label_topPadding = AttrMapValue(isNumber,'padding at top of box'), label_visible = AttrMapValue(isBoolean,desc="True if the label is to be drawn"), label_width = AttrMapValue(isNumberOrNone,desc=''), labelRadius = AttrMapValue(isNumber,desc=''), popout = AttrMapValue(isNumber,desc=''), shading = AttrMapValue(isNumber,desc=''), strokeColor = AttrMapValue(isColorOrNone,desc=''), strokeColorShaded = AttrMapValue(isColorOrNone,desc=''), strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc=''), strokeWidth = AttrMapValue(isNumber,desc=''), visible = AttrMapValue(isBoolean,'set to false to skip displaying'), ) def __init__(self): self.strokeWidth = 0 self.shading = 0.3 self.visible = 1 self.strokeColorShaded = self.fillColorShaded = self.fillColor = None self.strokeColor = STATE_DEFAULTS["strokeColor"] self.strokeDashArray = STATE_DEFAULTS["strokeDashArray"] self.popout = 0 self.fontName = STATE_DEFAULTS["fontName"] self.fontSize = STATE_DEFAULTS["fontSize"] self.fontColor = STATE_DEFAULTS["fillColor"] self.labelRadius = 1.2 self.label_dx = self.label_dy = self.label_angle = 0 self.label_text = None self.label_topPadding = self.label_leftPadding = self.label_rightPadding = self.label_bottomPadding = 0 self.label_boxAnchor = 'autox' self.label_boxStrokeColor = None #boxStroke self.label_boxStrokeWidth = 0.5 #boxStrokeWidth self.label_boxFillColor = None self.label_strokeColor = None self.label_strokeWidth = 0.1 self.label_leading = self.label_width = self.label_maxWidth = self.label_height = None self.label_textAnchor = 'start' self.label_visible = 1 self.label_simple_pointer = 0 class _SL3D: def __init__(self,lo,hi): if lo<0: lo += 360 hi += 360 self.lo = lo self.hi = hi self.mid = (lo+hi)*0.5 self.not360 = abs(hi-lo) < _ANGLEHI def __str__(self): return '_SL3D(%.2f,%.2f)' % (self.lo,self.hi) def _keyS3D(a,b): return -cmp(a[0],b[0]) _keyS3D = functools.cmp_to_key(_keyS3D) _270r = _2rad(270) class Pie3d(Pie): _attrMap = AttrMap(BASE=Pie, perspective = AttrMapValue(isNumber, desc='A flattening parameter.'), depth_3d = AttrMapValue(isNumber, desc='depth of the pie.'), angle_3d = AttrMapValue(isNumber, desc='The view angle.'), ) perspective = 70 depth_3d = 25 angle_3d = 180 def _popout(self,i): return self._sl3d[i].not360 and self.slices[i].popout or 0 def CX(self, i,d ): return self._cx+(d and self._xdepth_3d or 0)+self._popout(i)*cos(_2rad(self._sl3d[i].mid)) def CY(self,i,d): return self._cy+(d and self._ydepth_3d or 0)+self._popout(i)*sin(_2rad(self._sl3d[i].mid)) def OX(self,i,o,d): return self.CX(i,d)+self._radiusx*cos(_2rad(o)) def OY(self,i,o,d): return self.CY(i,d)+self._radiusy*sin(_2rad(o)) def rad_dist(self,a): _3dva = self._3dva return min(abs(a-_3dva),abs(a-_3dva+360)) def __init__(self): Pie.__init__(self) self.slices = TypedPropertyCollection(Wedge3dProperties) self.slices[0].fillColor = colors.darkcyan self.slices[1].fillColor = colors.blueviolet self.slices[2].fillColor = colors.blue self.slices[3].fillColor = colors.cyan self.slices[4].fillColor = colors.azure self.slices[5].fillColor = colors.crimson self.slices[6].fillColor = colors.darkviolet self.xradius = self.yradius = None self.width = 300 self.height = 200 self.data = [12.50,20.10,2.00,22.00,5.00,18.00,13.00] def _fillSide(self,L,i,angle,strokeColor,strokeWidth,fillColor): rd = self.rad_dist(angle) if rd0: angle0, angle1 = angle1, angle0 _sl3d.append(_SL3D(angle0,angle1)) labels = _fixLabels(self.labels,n) a0 = _3d_angle a1 = _3d_angle+180 T = [] S = [] L = [] class WedgeLabel3d(WedgeLabel): _ydepth_3d = self._ydepth_3d def _checkDXY(self,ba): if ba[0]=='n': if not hasattr(self,'_ody'): self._ody = self.dy self.dy = -self._ody + self._ydepth_3d checkLabelOverlap = self.checkLabelOverlap for i in range(n): style = slices[i] if not style.visible: continue sl = _sl3d[i] lo = angle0 = sl.lo hi = angle1 = sl.hi aa = abs(hi-lo) if aa<_ANGLELO: continue fillColor = _getShaded(style.fillColor,style.fillColorShaded,style.shading) strokeColor = _getShaded(style.strokeColor,style.strokeColorShaded,style.shading) or fillColor strokeWidth = style.strokeWidth cx0 = CX(i,0) cy0 = CY(i,0) cx1 = CX(i,1) cy1 = CY(i,1) if depth_3d: #background shaded pie bottom g.add(Wedge(cx1,cy1,radiusx, lo, hi,yradius=radiusy, strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor, strokeLineJoin=1)) #connect to top if lo < a0 < hi: angle0 = a0 if lo < a1 < hi: angle1 = a1 p = ArcPath(strokeColor=strokeColor, fillColor=fillColor,strokeWidth=strokeWidth,strokeLineJoin=1) p.addArc(cx1,cy1,radiusx,angle0,angle1,yradius=radiusy,moveTo=1) p.lineTo(OX(i,angle1,0),OY(i,angle1,0)) p.addArc(cx0,cy0,radiusx,angle0,angle1,yradius=radiusy,reverse=1) p.closePath() if angle0<=_3dva and angle1>=_3dva: rd = 0 else: rd = min(rad_dist(angle0),rad_dist(angle1)) S.append((rd,p)) _fillSide(S,i,lo,strokeColor,strokeWidth,fillColor) _fillSide(S,i,hi,strokeColor,strokeWidth,fillColor) #bright shaded top fillColor = style.fillColor strokeColor = style.strokeColor or fillColor T.append(Wedge(cx0,cy0,radiusx,lo,hi,yradius=radiusy, strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor,strokeLineJoin=1)) if aa>=_ANGLEHI: theWedge = Ellipse(cx0, cy0, radiusx, radiusy, strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor,strokeLineJoin=1) else: theWedge = Wedge(cx0,cy0,radiusx,lo,hi,yradius=radiusy, strokeColor=strokeColor,strokeWidth=strokeWidth,fillColor=fillColor,strokeLineJoin=1) T.append(theWedge) text = labels[i] if style.label_visible and text: rat = style.labelRadius self._radiusx *= rat self._radiusy *= rat mid = sl.mid labelX = OX(i,mid,0) labelY = OY(i,mid,0) l=_addWedgeLabel(self,text,mid,labelX,labelY,style,labelClass=WedgeLabel3d) L.append(l) if checkLabelOverlap: l._origdata = { 'x': labelX, 'y':labelY, 'angle': mid, 'rx': self._radiusx, 'ry':self._radiusy, 'cx':CX(i,0), 'cy':CY(i,0), 'bounds': l.getBounds(), } self._radiusx = radiusx self._radiusy = radiusy S.sort(key=_keyS3D) if checkLabelOverlap and L: fixLabelOverlaps(L,self.sideLabels) for x in ([s[1] for s in S]+T+L): g.add(x) return g def demo(self): d = Drawing(200, 100) pc = Pie() pc.x = 50 pc.y = 10 pc.width = 100 pc.height = 80 pc.data = [10,20,30,40,50,60] pc.labels = ['a','b','c','d','e','f'] pc.slices.strokeWidth=0.5 pc.slices[3].popout = 10 pc.slices[3].strokeWidth = 2 pc.slices[3].strokeDashArray = [2,2] pc.slices[3].labelRadius = 1.75 pc.slices[3].fontColor = colors.red pc.slices[0].fillColor = colors.darkcyan pc.slices[1].fillColor = colors.blueviolet pc.slices[2].fillColor = colors.blue pc.slices[3].fillColor = colors.cyan pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue pc.slices[6].fillColor = colors.lightcoral self.slices[1].visible = 0 self.slices[3].visible = 1 self.slices[4].visible = 1 self.slices[5].visible = 1 self.slices[6].visible = 0 d.add(pc) return d def sample0a(): "Make a degenerated pie chart with only one slice." d = Drawing(400, 200) pc = Pie() pc.x = 150 pc.y = 50 pc.data = [10] pc.labels = ['a'] pc.slices.strokeWidth=1#0.5 d.add(pc) return d def sample0b(): "Make a degenerated pie chart with only one slice." d = Drawing(400, 200) pc = Pie() pc.x = 150 pc.y = 50 pc.width = 120 pc.height = 100 pc.data = [10] pc.labels = ['a'] pc.slices.strokeWidth=1#0.5 d.add(pc) return d def sample1(): "Make a typical pie chart with with one slice treated in a special way." d = Drawing(400, 200) pc = Pie() pc.x = 150 pc.y = 50 pc.data = [10, 20, 30, 40, 50, 60] pc.labels = ['a', 'b', 'c', 'd', 'e', 'f'] pc.slices.strokeWidth=1#0.5 pc.slices[3].popout = 20 pc.slices[3].strokeWidth = 2 pc.slices[3].strokeDashArray = [2,2] pc.slices[3].labelRadius = 1.75 pc.slices[3].fontColor = colors.red d.add(pc) return d def sample2(): "Make a pie chart with nine slices." d = Drawing(400, 200) pc = Pie() pc.x = 125 pc.y = 25 pc.data = [0.31, 0.148, 0.108, 0.076, 0.033, 0.03, 0.019, 0.126, 0.15] pc.labels = ['1', '2', '3', '4', '5', '6', '7', '8', 'X'] pc.width = 150 pc.height = 150 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue pc.slices[6].fillColor = colors.lightcoral pc.slices[7].fillColor = colors.tan pc.slices[8].fillColor = colors.darkseagreen d.add(pc) return d def sample3(): "Make a pie chart with a very slim slice." d = Drawing(400, 200) pc = Pie() pc.x = 125 pc.y = 25 pc.data = [74, 1, 25] pc.width = 150 pc.height = 150 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower d.add(pc) return d def sample4(): "Make a pie chart with several very slim slices." d = Drawing(400, 200) pc = Pie() pc.x = 125 pc.y = 25 pc.data = [74, 1, 1, 1, 1, 22] pc.width = 150 pc.height = 150 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue d.add(pc) return d def sample5(): "Make a pie with side labels." d = Drawing(400, 200) pc = Pie() pc.x = 125 pc.y = 25 pc.data = [7, 1, 1, 1, 1, 2] pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6'] pc.sideLabels = 1 pc.width = 150 pc.height = 150 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue d.add(pc) return d def sample6(): "Illustrates the pie moving to leave space for the left labels" d = Drawing(400, 200) pc = Pie() "The x value of the pie chart is 0" pc.x = 0 pc.y = 25 pc.data = [74, 1, 1, 1, 1, 22] pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6'] pc.sideLabels = 1 pc.width = 150 pc.height = 150 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue l = Line(0,0,0,200) d.add(pc) d.add(l) return d def sample7(): "Case with overlapping pointers" d = Drawing(400, 200) pc = Pie() pc.y = 50 pc.x = 150 pc.width = 100 pc.height = 100 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] pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6', 'example7', 'example8', 'example9', 'example10', 'example11', 'example12', 'example13', 'example14', 'example15', 'example16', 'example17', 'example18', 'example19', 'example20', 'example21', 'example22', 'example23', 'example24', 'example25', 'example26', 'example27', 'example28'] pc.sideLabels = 1 pc.checkLabelOverlap = 1 pc.simpleLabels = 0 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue d.add(pc) return d def sample8(): "Case with overlapping labels" "Labels overlap if they do not belong to adjacent pie slices due to nature of checkLabelOverlap" d = Drawing(400, 200) pc = Pie() pc.y = 50 pc.x = 150 pc.width = 100 pc.height = 100 pc.data = [1, 1, 1, 1, 1, 30, 50, 1, 1, 1, 1, 1, 1, 40,20,10] pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6', 'example7', 'example8', 'example9', 'example10', 'example11', 'example12', 'example13', 'example14', 'example15', 'example16'] pc.sideLabels = 1 pc.checkLabelOverlap = 1 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue d.add(pc) return d def sample9(): "Case with overlapping labels" "Labels overlap if they do not belong to adjacent pies due to nature of checkLabelOverlap" d = Drawing(400, 200) pc = Pie() pc.x = 125 pc.y = 50 pc.data = [41, 20, 40, 15, 20, 30, 50, 15, 25, 35, 25, 20, 30, 40, 20, 30] pc.labels = ['example1', 'example2', 'example3', 'example4', 'example5', 'example6', 'example7', 'example8', 'example9', 'example10', 'example11', 'example12', 'example13', 'example14', 'example15', 'example16'] pc.sideLabels = 1 pc.checkLabelOverlap = 1 pc.width = 100 pc.height = 100 pc.slices.strokeWidth=1#0.5 pc.slices[0].fillColor = colors.steelblue pc.slices[1].fillColor = colors.thistle pc.slices[2].fillColor = colors.cornflower pc.slices[3].fillColor = colors.lightsteelblue pc.slices[4].fillColor = colors.aquamarine pc.slices[5].fillColor = colors.cadetblue d.add(pc) return d if __name__=='__main__': """Normally nobody will execute this It's helpful for reportlab developers to put a 'main' block in to execute the most recently edited feature. """ import sys from reportlab.graphics import renderPDF argv = sys.argv[1:] or ['7'] for a in argv: name = a if a.startswith('sample') else 'sample%s' % a drawing = globals()[name]() renderPDF.drawToFile(drawing, '%s.pdf' % name) reportlab-3.5.34/src/reportlab/graphics/charts/barcharts.py0000664000175000017500000020735713554340114024602 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/barcharts.py __version__='3.3.0' __doc__="""This module defines a variety of Bar Chart components. The basic flavors are stacked and side-by-side, available in horizontal and vertical versions. """ import copy, functools from ast import literal_eval from reportlab.lib import colors from reportlab.lib.validators import isNumber, isNumberOrNone, isColor, isColorOrNone, isString,\ isListOfStrings, SequenceOf, isBoolean, isNoneOrShape, isStringOrNone,\ NoneOr, isListOfNumbersOrNone, EitherOr, OneOf, isInt from reportlab.lib.utils import flatten, isStr from reportlab.graphics.widgets.markers import uSymbol2Symbol, isSymbol from reportlab.lib.formatters import Formatter from reportlab.lib.attrmap import AttrMap, AttrMapValue from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder from reportlab.graphics.shapes import Line, Rect, Group, Drawing, NotImplementedError from reportlab.graphics.charts.axes import XCategoryAxis, YValueAxis, YCategoryAxis, XValueAxis from reportlab.graphics.charts.textlabels import BarChartLabel, NA_Label, NoneOrInstanceOfNA_Label from reportlab.graphics.charts.areas import PlotArea from reportlab.graphics.charts.legends import _objStr from reportlab import xrange, cmp class BarChartProperties(PropHolder): _attrMap = AttrMap( strokeColor = AttrMapValue(isColorOrNone, desc='Color of the bar border.'), fillColor = AttrMapValue(isColorOrNone, desc='Color of the bar interior area.'), strokeWidth = AttrMapValue(isNumber, desc='Width of the bar border.'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array of a line.'), symbol = AttrMapValue(None, desc='A widget to be used instead of a normal bar.',advancedUsage=1), name = AttrMapValue(isString, desc='Text to be associated with a bar (eg seriesname)'), swatchMarker = AttrMapValue(NoneOr(isSymbol), desc="None or makeMarker('Diamond') ...",advancedUsage=1), minDimen = AttrMapValue(isNumberOrNone, desc='minimum width/height that will be drawn.'), ) def __init__(self): self.strokeColor = None self.fillColor = colors.blue self.strokeWidth = 0.5 self.symbol = None self.strokeDashArray = None # Bar chart classes. class BarChart(PlotArea): "Abstract base class, unusable by itself." _attrMap = AttrMap(BASE=PlotArea, 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), barWidth = AttrMapValue(isNumber, desc='The width of an individual bar.'), groupSpacing = AttrMapValue(isNumber, desc='Width between groups of bars.'), barSpacing = AttrMapValue(isNumber, desc='Width between individual bars.'), bars = AttrMapValue(None, desc='Handle of the individual bars.'), valueAxis = AttrMapValue(None, desc='Handle of the value axis.'), categoryAxis = AttrMapValue(None, desc='Handle of the category axis.'), data = AttrMapValue(None, desc='Data to be plotted, list of (lists of) numbers.'), barLabels = AttrMapValue(None, desc='Handle to the list of bar labels.'), barLabelFormat = AttrMapValue(None, desc='Formatting string or function used for bar labels. Can be a list or list of lists of such.'), barLabelCallOut = AttrMapValue(None, desc='Callout function(label)\nlabel._callOutInfo = (self,g,rowNo,colNo,x,y,width,height,x00,y00,x0,y0)',advancedUsage=1), barLabelArray = AttrMapValue(None, desc='explicit array of bar label values, must match size of data if present.'), reversePlotOrder = AttrMapValue(isBoolean, desc='If true, reverse common category plot order.',advancedUsage=1), naLabel = AttrMapValue(NoneOrInstanceOfNA_Label, desc='Label to use for N/A values.',advancedUsage=1), annotations = AttrMapValue(None, desc='list of callables, will be called with self, xscale, yscale.'), categoryLabelBarSize = AttrMapValue(isNumber, desc='width to leave for a category label to go between categories.'), categoryLabelBarOrder = AttrMapValue(OneOf('first','last','auto'), desc='where any label bar should appear first/last'), barRecord = AttrMapValue(None, desc='callable(bar,label=labelText,value=value,**kwds) to record bar information', advancedUsage=1), 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 background=0, categoryAxis=1, valueAxis=2, bars=3, barLabels=4, categoryAxisGrid=5, valueAxisGrid=6, annotations=7'''), categoryNALabel = AttrMapValue(NoneOrInstanceOfNA_Label, desc='Label to use for a group of N/A values.',advancedUsage=1), seriesOrder = AttrMapValue(SequenceOf(SequenceOf(isInt,emptyOK=0,NoneOK=0,lo=1),emptyOK=0,NoneOK=1,lo=1),"dynamic 'mixed' category style case"), ) def makeSwatchSample(self, rowNo, x, y, width, height): baseStyle = self.bars styleIdx = rowNo % len(baseStyle) style = baseStyle[styleIdx] strokeColor = getattr(style, 'strokeColor', getattr(baseStyle,'strokeColor',None)) fillColor = getattr(style, 'fillColor', getattr(baseStyle,'fillColor',None)) strokeDashArray = getattr(style, 'strokeDashArray', getattr(baseStyle,'strokeDashArray',None)) strokeWidth = getattr(style, 'strokeWidth', getattr(style, 'strokeWidth',None)) swatchMarker = getattr(style, 'swatchMarker', getattr(baseStyle, 'swatchMarker',None)) if swatchMarker: return uSymbol2Symbol(swatchMarker,x+width/2.,y+height/2.,fillColor) return Rect(x,y,width,height,strokeWidth=strokeWidth,strokeColor=strokeColor, strokeDashArray=strokeDashArray,fillColor=fillColor) def getSeriesName(self,i,default=None): '''return series name i or default''' return _objStr(getattr(self.bars[i],'name',default)) def __init__(self): assert self.__class__.__name__ not in ('BarChart','BarChart3D'), 'Abstract Class %s Instantiated' % self.__class__.__name__ if self._flipXY: self.categoryAxis = YCategoryAxis() self.valueAxis = XValueAxis() else: self.categoryAxis = XCategoryAxis() self.valueAxis = YValueAxis() self.categoryAxis._attrMap['style'].validate = OneOf('stacked','parallel','parallel_3d','mixed') PlotArea.__init__(self) self.barSpacing = 0 self.reversePlotOrder = 0 # this defines two series of 3 points. Just an example. self.data = [(100,110,120,130), (70, 80, 85, 90)] # control bar spacing. is useAbsolute = 1 then # the next parameters are in points; otherwise # they are 'proportions' and are normalized to # fit the available space. Half a barSpacing # is allocated at the beginning and end of the # chart. self.useAbsolute = 0 #- not done yet self.barWidth = 10 self.groupSpacing = 5 self.barSpacing = 0 self.barLabels = TypedPropertyCollection(BarChartLabel) self.barLabels.boxAnchor = 'c' self.barLabels.textAnchor = 'middle' self.barLabelFormat = None self.barLabelArray = None # this says whether the origin is inside or outside # the bar - +10 means put the origin ten points # above the tip of the bar if value > 0, or ten # points inside if bar value < 0. This is different # to label dx/dy which are not dependent on the # sign of the data. self.barLabels.nudge = 0 # if you have multiple series, by default they butt # together. # we really need some well-designed default lists of # colors e.g. from Tufte. These will be used in a # cycle to set the fill color of each series. self.bars = TypedPropertyCollection(BarChartProperties) self.bars.strokeWidth = 1 self.bars.strokeColor = colors.black self.bars.strokeDashArray = None self.bars[0].fillColor = colors.red self.bars[1].fillColor = colors.green self.bars[2].fillColor = colors.blue self.naLabel = self.categoryNALabel = None self.zIndexOverrides = None def demo(self): """Shows basic use of a bar chart""" if self.__class__.__name__=='BarChart': raise NotImplementedError('Abstract Class BarChart has no demo') drawing = Drawing(200, 100) bc = self.__class__() drawing.add(bc) return drawing def getSeriesOrder(self): bs = getattr(self,'seriesOrder',None) n = len(self.data) if not bs: R = [(ss,) for ss in xrange(n)] else: unseen = set(range(n)) R = [] for s in bs: g = [ss for ss in s if 0<=ss<=n] if g: R.append(tuple(g)) unseen -= set(g) if unseen: R.extend((ss,) for ss in sorted(unseen)) self._seriesOrder = R def _getConfigureData(self): cAStyle = self.categoryAxis.style data = self.data cc = max(list(map(len,data))) #category count _data = data if cAStyle not in ('parallel','parallel_3d'): #stacked or mixed data = [] def _accumulate(*D): pdata = max((len(d) for d in D))*[0] ndata = pdata[:] for d in D: for i,v in enumerate(d): v = v or 0 if v<=-1e-6: ndata[i] += v else: pdata[i] += v data.append(ndata) data.append(pdata) if cAStyle=='stacked': _accumulate(*_data) else: self.getSeriesOrder() for b in self._seriesOrder: _accumulate(*(_data[j] for j in b)) self._configureData = data def _getMinMax(self): '''Attempt to return the data range''' self._getConfigureData() self.valueAxis._setRange(self._configureData) return self.valueAxis._valueMin, self.valueAxis._valueMax def _drawBegin(self,org,length): '''Position and configure value axis, return crossing value''' vA = self.valueAxis vA.setPosition(self.x, self.y, length) self._getConfigureData() vA.configure(self._configureData) # if zero is in chart, put the other axis there, otherwise use low crossesAt = vA.scale(0) if not vA.forceZero: eps = min(1,1.001*abs(length)) end = org+length org, end = min(org,end)-eps, max(org,end)+eps if crossesAt>eps or crossesAt1: bGapB = barWidth bGapS = barSpacing else: bGapB = bGapS = 0 accumNeg = barsPerGroup*rowLength*[0] accumPos = accumNeg[:] elif style in ('parallel','parallel_3d'): barsPerGroup = 1 wB = seriesCount*barWidth wS = (seriesCount-1)*barSpacing bGapB = barWidth bGapS = barSpacing else: barsPerGroup = seriesCount accumNeg = rowLength*[0] accumPos = accumNeg[:] wB = barWidth wS = bGapB = bGapS = 0 self._groupWidth = groupWidth = wG+wB+wS useAbsolute = self.useAbsolute if useAbsolute: if not isinstance(useAbsolute,str): useAbsolute = 7 #all three are fixed else: useAbsolute = 0 + 1*('b' in useAbsolute)+2*('g' in useAbsolute)+4*('s' in useAbsolute) else: useAbsolute = 0 aW0 = float(cScale(0)[1]) aW = aW0 - clbs if useAbsolute==0: #case 0 all are free self._normFactor = fB = fG = fS = aW/groupWidth elif useAbsolute==7: #all fixed fB = fG = fS = 1.0 _cscale = cA._scale elif useAbsolute==1: #case 1 barWidth is fixed fB = 1.0 fG = fS = (aW-wB)/(wG+wS) elif useAbsolute==2: #groupspacing is fixed fG=1.0 fB = fS = (aW-wG)/(wB+wS) elif useAbsolute==3: #groupspacing & barwidth are fixed fB = fG = 1.0 fS = (aW-wG-wB)/wS if wS else 0 elif useAbsolute==4: #barspacing is fixed fS=1.0 fG = fB = (aW-wS)/(wG+wB) elif useAbsolute==5: #barspacing & barWidth are fixed fS = fB = 1.0 fG = (aW-wB-wS)/wG elif useAbsolute==6: #barspacing & groupspacing are fixed fS = fG = 1 fB = (aW-wS-wG)/wB self._normFactorB = fB self._normFactorG = fG self._normFactorS = fS # 'Baseline' correction... vA = self.valueAxis vScale = vA.scale vm, vM = vA._valueMin, vA._valueMax if vm <= 0 <= vM: baseLine = vScale(0) elif 0 < vm: baseLine = vScale(vm) elif vM < 0: baseLine = vScale(vM) self._baseLine = baseLine width = barWidth*fB offs = 0.5*wG*fG bGap = bGapB*fB+bGapS*fS if clbs: if clbo: #the lable bar comes first lbpf = (offs+clbs/6.0)/aW0 offs += clbs else: lbpf = (offs+wB*fB+wS*fS+clbs/6.0)/aW0 cA.labels.labelPosFrac = lbpf self._barPositions = [] aBP = self._barPositions.append reversePlotOrder = self.reversePlotOrder def _addBar(colNo,accx): datum = row[colNo] # Ufff... if useAbsolute==7: x = groupWidth*_cscale(colNo) + xVal + org else: (g, _) = cScale(colNo) x = g + xVal if datum is None: height = None y = baseLine else: if style not in ('parallel','parallel_3d'): if datum<=-1e-6: y = vScale(accumNeg[accx]) if y>baseLine: y = baseLine accumNeg[accx] += datum datum = accumNeg[accx] else: y = vScale(accumPos[accx]) if y=0 and 1 or -1)*nudge if bt=='mid': b = y+height*0.5 elif bt=='hi': if value>=0: b = y + value + nudge else: b = y - nudge pm = -pm elif bt=='lo': if value<=0: b = y + value + nudge else: b = y - nudge pm = -pm else: b = y + value + nudge label._pmv = pm #the plus minus val return a,b,pm def _addBarLabel(self, g, rowNo, colNo, x, y, width, height): text = self._getLabelText(rowNo,colNo) if text: self._addLabel(text, self.barLabels[(rowNo, colNo)], g, rowNo, colNo, x, y, width, height) def _addNABarLabel(self, g, rowNo, colNo, x, y, width, height, calcOnly=False, na=None): if na is None: na = self.naLabel if na and na.text: na = copy.copy(na) v = self.valueAxis._valueMax<=0 and -1e-8 or 1e-8 if width is None: width = v if height is None: height = v return self._addLabel(na.text, na, g, rowNo, colNo, x, y, width, height, calcOnly=calcOnly) def _addLabel(self, text, label, g, rowNo, colNo, x, y, width, height, calcOnly=False): if label.visible: labelWidth = stringWidth(text, label.fontName, label.fontSize) flipXY = self._flipXY if flipXY: y0, x0, pm = self._labelXY(label,y,x,height,width) else: x0, y0, pm = self._labelXY(label,x,y,width,height) fixedEnd = getattr(label,'fixedEnd', None) if fixedEnd is not None: v = fixedEnd._getValue(self,pm) x00, y00 = x0, y0 if flipXY: x0 = v else: y0 = v else: if flipXY: x00 = x0 y00 = y+height/2.0 else: x00 = x+width/2.0 y00 = y0 fixedStart = getattr(label,'fixedStart', None) if fixedStart is not None: v = fixedStart._getValue(self,pm) if flipXY: x00 = v else: y00 = v if pm<0: if flipXY: dx = -2*label.dx dy = 0 else: dy = -2*label.dy dx = 0 else: dy = dx = 0 if calcOnly: return x0+dx, y0+dy label.setOrigin(x0+dx, y0+dy) label.setText(text) sC, sW = label.lineStrokeColor, label.lineStrokeWidth if sC and sW: g.insert(0,Line(x00,y00,x0,y0, strokeColor=sC, strokeWidth=sW)) g.add(label) alx = getattr(self,'barLabelCallOut',None) if alx: label._callOutInfo = (self,g,rowNo,colNo,x,y,width,height,x00,y00,x0,y0) alx(label) del label._callOutInfo def _makeBar(self,g,x,y,width,height,rowNo,style): r = Rect(x, y, width, height) r.strokeWidth = style.strokeWidth r.fillColor = style.fillColor r.strokeColor = style.strokeColor if style.strokeDashArray: r.strokeDashArray = style.strokeDashArray g.add(r) def _makeBars(self,g,lg): bars = self.bars br = getattr(self,'barRecord',None) BP = self._barPositions flipXY = self._flipXY catNAL = self.categoryNALabel catNNA = {} if catNAL: CBL = [] rowNoL = len(self.data) - 1 #find all the categories that have at least one value for rowNo, row in enumerate(BP): for colNo, (x, y, width, height) in enumerate(row): if None not in (width,height): catNNA[colNo] = 1 for rowNo, row in enumerate(BP): styleCount = len(bars) styleIdx = rowNo % styleCount rowStyle = bars[styleIdx] for colNo, (x,y,width,height) in enumerate(row): style = (styleIdx,colNo) in bars and bars[(styleIdx,colNo)] or rowStyle if None in (width,height): if not catNAL or colNo in catNNA: self._addNABarLabel(lg,rowNo,colNo,x,y,width,height) elif catNAL and colNo not in CBL: r0 = self._addNABarLabel(lg,rowNo,colNo,x,y,width,height,True,catNAL) if r0: x, y, width, height = BP[rowNoL][colNo] r1 = self._addNABarLabel(lg,rowNoL,colNo,x,y,width,height,True,catNAL) x = (r0[0]+r1[0])/2.0 y = (r0[1]+r1[1])/2.0 self._addNABarLabel(lg,rowNoL,colNo,x,y,0.0001,0.0001,na=catNAL) CBL.append(colNo) continue # Draw a rectangular symbol for each data item, # or a normal colored rectangle. symbol = None if hasattr(style, 'symbol'): symbol = copy.deepcopy(style.symbol) elif hasattr(self.bars, 'symbol'): symbol = self.bars.symbol minDimen=getattr(style,'minDimen',None) if minDimen: if flipXY: if width<0: width = min(-style.minDimen,width) else: width = max(style.minDimen,width) else: if height<0: height = min(-style.minDimen,height) else: height = max(style.minDimen,height) if symbol: symbol.x = x symbol.y = y symbol.width = width symbol.height = height g.add(symbol) elif abs(width)>1e-7 and abs(height)>=1e-7 and (style.fillColor is not None or style.strokeColor is not None): self._makeBar(g,x,y,width,height,rowNo,style) if br: br(g.contents[-1],label=self._getLabelText(rowNo,colNo),value=self.data[rowNo][colNo],rowNo=rowNo,colNo=colNo) self._addBarLabel(lg,rowNo,colNo,x,y,width,height) def _computeLabelPosition(self, text, label, rowNo, colNo, x, y, width, height): if label.visible: labelWidth = stringWidth(text, label.fontName, label.fontSize) flipXY = self._flipXY if flipXY: y0, x0, pm = self._labelXY(label,y,x,height,width) else: x0, y0, pm = self._labelXY(label,x,y,width,height) fixedEnd = getattr(label,'fixedEnd', None) if fixedEnd is not None: v = fixedEnd._getValue(self,pm) x00, y00 = x0, y0 if flipXY: x0 = v else: y0 = v else: if flipXY: x00 = x0 y00 = y+height/2.0 else: x00 = x+width/2.0 y00 = y0 fixedStart = getattr(label,'fixedStart', None) if fixedStart is not None: v = fixedStart._getValue(self,pm) if flipXY: x00 = v else: y00 = v if pm<0: if flipXY: dx = -2*label.dx dy = 0 else: dy = -2*label.dy dx = 0 else: dy = dx = 0 label.setOrigin(x0+dx, y0+dy) label.setText(text) return pm,label.getBounds() def _computeBarPositions(self): """Information function, can be called by charts which want to with space around bars""" cA, vA = self.categoryAxis, self.valueAxis if vA: vA.joinAxis = cA if cA: cA.joinAxis = vA if self._flipXY: cA.setPosition(self._drawBegin(self.x,self.width), self.y, self.height) else: cA.setPosition(self.x, self._drawBegin(self.y,self.height), self.width) cA.configure(self._configureData) self.calcBarPositions() def _computeMaxSpace(self,size,required): '''helper for madmen who want to put stuff inside their barcharts basically after _computebarPositions we slide a line of length size down the bar profile on either side of the bars to find the maximum space. If the space at any point is >= required then we're done. Otherwise we return the largest space location and amount. ''' flipXY = self._flipXY self._computeBarPositions() lenData = len(self.data) BP = self._barPositions C = [] aC = C.append if flipXY: lo = self.x hi = lo + self.width end = self.y+self.height for bp in BP: for x, y, w, h in bp: v = x+w z = y+h aC((min(y,z),max(y,z), min(x,v) - lo, hi - max(x,v))) else: lo = self.y hi = lo + self.height end = self.x+self.width for bp in BP: for x, y, w, h in bp: v = y+h z = x+w aC((min(x,z), max(x,z), min(y,v) - lo, hi - max(y,v))) C.sort() R = [C[0]] for c in C: r = R[-1] if r[0]end: break j = i alo = ahi = 0x7fffffff while jahi: if alo>maxS: maxS = alo maxP = flipXY and (lo,v0,lo+alo,v0+size,0) or (v0,lo,v0+size,lo+alo,0) if maxS >= required: break elif ahi>maxS: maxS = ahi maxP = flipXY and (hi-ahi,v0,hi,v0+size,1) or (v0,hi-ahi,v0+size,hi,1) if maxS >= required: break return maxS, maxP def _computeSimpleBarLabelPositions(self): """Information function, can be called by charts which want to mess with labels""" cA, vA = self.categoryAxis, self.valueAxis if vA: vA.joinAxis = cA if cA: cA.joinAxis = vA if self._flipXY: cA.setPosition(self._drawBegin(self.x,self.width), self.y, self.height) else: cA.setPosition(self.x, self._drawBegin(self.y,self.height), self.width) cA.configure(self._configureData) self.calcBarPositions() bars = self.bars R = [].append BP = self._barPositions for rowNo, row in enumerate(BP): C = [].append for colNox, (y, width, height) in enumerate(row): if None in (width,height): na = self.naLabel if na and na.text: na = copy.copy(na) v = self.valueAxis._valueMax<=0 and -1e-8 or 1e-8 if width is None: width = v if height is None: height = v C(self._computeLabelPosition(na.text, na, rowNo, colNo, x, y, width, height)) else: C(None) else: text = self._getLabelText(rowNo,colNo) if text: C(self._computeLabelPosition(text, self.barLabels[(rowNo, colNo)], rowNo, colNo, x, y, width, height)) else: C(None) R(C.__self__) return R.__self__ def makeBars(self): g = Group() lg = Group() self._makeBars(g,lg) g.add(lg) return g def _desiredCategoryAxisLength(self): '''for dynamically computing the desired category axis length''' style = self.categoryAxis.style data = self.data n = len(data) m = max(list(map(len,data))) if style=='parallel': groupWidth = (n-1)*self.barSpacing+n*self.barWidth else: groupWidth = self.barWidth return m*(self.groupSpacing+groupWidth) def draw(self): cA, vA = self.categoryAxis, self.valueAxis if vA: vA.joinAxis = cA if cA: cA.joinAxis = vA if self._flipXY: cA.setPosition(self._drawBegin(self.x,self.width), self.y, self.height) else: cA.setPosition(self.x, self._drawBegin(self.y,self.height), self.width) return self._drawFinish() class VerticalBarChart(BarChart): "Vertical bar chart with multiple side-by-side bars." _flipXY = 0 class HorizontalBarChart(BarChart): "Horizontal bar chart with multiple side-by-side bars." _flipXY = 1 class _FakeGroup: def __init__(self, cmp=None): self._data = [] self._key = functools.cmp_to_key(cmp) def add(self,what): self._data.append(what) def value(self): return self._data def sort(self): self._data.sort(key=self._key) class BarChart3D(BarChart): _attrMap = AttrMap(BASE=BarChart, theta_x = AttrMapValue(isNumber, desc='dx/dz'), theta_y = AttrMapValue(isNumber, desc='dy/dz'), zDepth = AttrMapValue(isNumber, desc='depth of an individual series'), zSpace = AttrMapValue(isNumber, desc='z gap around series'), ) theta_x = .5 theta_y = .5 zDepth = None zSpace = None def calcBarPositions(self): BarChart.calcBarPositions(self) seriesCount = self._seriesCount zDepth = self.zDepth if zDepth is None: zDepth = self.barWidth zSpace = self.zSpace if zSpace is None: zSpace = self.barSpacing if self.categoryAxis.style=='parallel_3d': _3d_depth = seriesCount*zDepth+(seriesCount+1)*zSpace else: _3d_depth = zDepth + 2*zSpace _3d_depth *= self._normFactor self._3d_dx = self.theta_x*_3d_depth self._3d_dy = self.theta_y*_3d_depth def _calc_z0(self,rowNo): zDepth = self.zDepth if zDepth is None: zDepth = self.barWidth zSpace = self.zSpace if zSpace is None: zSpace = self.barSpacing if self.categoryAxis.style=='parallel_3d': z0 = self._normFactor*(rowNo*(zDepth+zSpace)+zSpace) else: z0 = self._normFactor*zSpace return z0 def _makeBar(self,g,x,y,width,height,rowNo,style): zDepth = self.zDepth if zDepth is None: zDepth = self.barWidth zSpace = self.zSpace if zSpace is None: zSpace = self.barSpacing z0 = self._calc_z0(rowNo) z1 = z0 + zDepth*self._normFactor if width<0: x += width width = -width x += z0*self.theta_x y += z0*self.theta_y if self._flipXY: y += zSpace else: x += zSpace g.add((0,z0,z1,x,y,width,height,rowNo,style)) def _addBarLabel(self, g, rowNo, colNo, x, y, width, height): z0 = self._calc_z0(rowNo) zSpace = self.zSpace if zSpace is None: zSpace = self.barSpacing z1 = z0 x += z0*self.theta_x y += z0*self.theta_y if self._flipXY: y += zSpace else: x += zSpace g.add((1,z0,z1,x,y,width,height,rowNo,colNo)) def makeBars(self): from reportlab.graphics.charts.utils3d import _draw_3d_bar fg = _FakeGroup(cmp=self._cmpZ) self._makeBars(fg,fg) fg.sort() g = Group() theta_x = self.theta_x theta_y = self.theta_y fg_value = fg.value() cAStyle = self.categoryAxis.style if cAStyle=='stacked': fg_value=fg_value.reverse() elif cAStyle=='mixed': fg_value = [_[1] for _ in sorted((((t[1],t[2],t[3],t[4]),t) for t in fg_value))] for t in fg_value: if t[0]==0: z0,z1,x,y,width,height,rowNo,style = t[1:] dz = z1 - z0 _draw_3d_bar(g, x, x+width, y, y+height, dz*theta_x, dz*theta_y, fillColor=style.fillColor, fillColorShaded=None, strokeColor=style.strokeColor, strokeWidth=style.strokeWidth, shading=0.45) for t in fg_value: if t==1: z0,z1,x,y,width,height,rowNo,colNo = t[1:] BarChart._addBarLabel(self,g,rowNo,colNo,x,y,width,height) return g class VerticalBarChart3D(BarChart3D,VerticalBarChart): _cmpZ=lambda self,a,b:cmp((-a[1],a[3],a[0],-a[4]),(-b[1],b[3],b[0],-b[4])) class HorizontalBarChart3D(BarChart3D,HorizontalBarChart): _cmpZ = lambda self,a,b: cmp((-a[1],a[4],a[0],-a[3]),(-b[1],b[4],b[0],-b[3])) #t, z0, z1, x, y = a[:5] # Vertical samples. def sampleV0a(): "A slightly pathologic bar chart with only TWO data items." drawing = Drawing(400, 200) data = [(13, 20)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV0b(): "A pathologic bar chart with only ONE data item." drawing = Drawing(400, 200) data = [(42,)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = ['Jan-99'] drawing.add(bc) return drawing def sampleV0c(): "A really pathologic bar chart with NO data items at all!" drawing = Drawing(400, 200) data = [()] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.categoryNames = [] drawing.add(bc) return drawing def sampleV1(): "Sample of multi-series bar chart." drawing = Drawing(400, 200) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (14, 6, 21, 23, 38, 46, 20, 5) ] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') catNames = [n+'-99' for n in catNames] bc.categoryAxis.categoryNames = catNames drawing.add(bc) return drawing def sampleV2a(): "Sample of multi-series bar chart." data = [(2.4, -5.7, 2, 5, 9.2), (0.6, -4.9, -3, 4, 6.8) ] labels = ("Q3 2000", "Year to Date", "12 months", "Annualised\n3 years", "Since 07.10.99") drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 120 bc.width = 300 bc.data = data bc.barSpacing = 0 bc.groupSpacing = 10 bc.barWidth = 10 bc.valueAxis.valueMin = -15 bc.valueAxis.valueMax = +15 bc.valueAxis.valueStep = 5 bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 8 bc.valueAxis.labels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.valueAxis.labels.textAnchor = 'middle' bc.categoryAxis.categoryNames = labels bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 8 bc.categoryAxis.labels.dy = -60 drawing.add(bc) return drawing def sampleV2b(): "Sample of multi-series bar chart." data = [(2.4, -5.7, 2, 5, 9.2), (0.6, -4.9, -3, 4, 6.8) ] labels = ("Q3 2000", "Year to Date", "12 months", "Annualised\n3 years", "Since 07.10.99") drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 120 bc.width = 300 bc.data = data bc.barSpacing = 5 bc.groupSpacing = 10 bc.barWidth = 10 bc.valueAxis.valueMin = -15 bc.valueAxis.valueMax = +15 bc.valueAxis.valueStep = 5 bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 8 bc.valueAxis.labels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.valueAxis.labels.textAnchor = 'middle' bc.categoryAxis.categoryNames = labels bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 8 bc.categoryAxis.labels.dy = -60 drawing.add(bc) return drawing def sampleV2c(): "Sample of multi-series bar chart." data = [(2.4, -5.7, 2, 5, 9.99), (0.6, -4.9, -3, 4, 9.99) ] labels = ("Q3 2000", "Year to Date", "12 months", "Annualised\n3 years", "Since 07.10.99") drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 120 bc.width = 300 bc.data = data bc.barSpacing = 2 bc.groupSpacing = 10 bc.barWidth = 10 bc.valueAxis.valueMin = -15 bc.valueAxis.valueMax = +15 bc.valueAxis.valueStep = 5 bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 8 bc.categoryAxis.categoryNames = labels bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 8 bc.valueAxis.labels.boxAnchor = 'n' bc.valueAxis.labels.textAnchor = 'middle' bc.categoryAxis.labels.dy = -60 bc.barLabels.nudge = 10 bc.barLabelFormat = '%0.2f' bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 6 drawing.add(bc) return drawing def sampleV3(): "Faked horizontal bar chart using a vertical real one (deprecated)." names = ("UK Equities", "US Equities", "European Equities", "Japanese Equities", "Pacific (ex Japan) Equities", "Emerging Markets Equities", "UK Bonds", "Overseas Bonds", "UK Index-Linked", "Cash") series1 = (-1.5, 0.3, 0.5, 1.0, 0.8, 0.7, 0.4, 0.1, 1.0, 0.3) series2 = (0.0, 0.33, 0.55, 1.1, 0.88, 0.77, 0.44, 0.11, 1.10, 0.33) assert len(names) == len(series1), "bad data" assert len(names) == len(series2), "bad data" drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 0 bc.y = 0 bc.height = 100 bc.width = 150 bc.data = (series1,) bc.bars.fillColor = colors.green bc.barLabelFormat = '%0.2f' bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = 'w' # irrelevant (becomes 'c') bc.barLabels.angle = 90 bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 6 bc.barLabels.nudge = 10 bc.valueAxis.visible = 0 bc.valueAxis.valueMin = -2 bc.valueAxis.valueMax = +2 bc.valueAxis.valueStep = 1 bc.categoryAxis.tickUp = 0 bc.categoryAxis.tickDown = 0 bc.categoryAxis.categoryNames = names bc.categoryAxis.labels.angle = 90 bc.categoryAxis.labels.boxAnchor = 'w' bc.categoryAxis.labels.dx = 0 bc.categoryAxis.labels.dy = -125 bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 6 g = Group(bc) g.translate(100, 175) g.rotate(-90) drawing.add(g) return drawing def sampleV4a(): "A bar chart showing value axis region starting at *exactly* zero." drawing = Drawing(400, 200) data = [(13, 20)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV4b(): "A bar chart showing value axis region starting *below* zero." drawing = Drawing(400, 200) data = [(13, 20)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = -10 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV4c(): "A bar chart showing value axis region staring *above* zero." drawing = Drawing(400, 200) data = [(13, 20)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 10 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV4d(): "A bar chart showing value axis region entirely *below* zero." drawing = Drawing(400, 200) data = [(-13, -20)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = -30 bc.valueAxis.valueMax = -10 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing ### ##dataSample5 = [(10, 20), (20, 30), (30, 40), (40, 50), (50, 60)] ##dataSample5 = [(10, 60), (20, 50), (30, 40), (40, 30), (50, 20)] dataSample5 = [(10, 60), (20, 50), (30, 40), (40, 30)] def sampleV5a(): "A simple bar chart with no expressed spacing attributes." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV5b(): "A simple bar chart with proportional spacing." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 0 bc.barWidth = 40 bc.groupSpacing = 20 bc.barSpacing = 10 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV5c1(): "Make sampe simple bar chart but with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 40 bc.groupSpacing = 0 bc.barSpacing = 0 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV5c2(): "Make sampe simple bar chart but with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 40 bc.groupSpacing = 20 bc.barSpacing = 0 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV5c3(): "Make sampe simple bar chart but with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 40 bc.groupSpacing = 0 bc.barSpacing = 10 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleV5c4(): "Make sampe simple bar chart but with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 40 bc.groupSpacing = 20 bc.barSpacing = 10 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'n' bc.categoryAxis.labels.dy = -5 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing # Horizontal samples def sampleH0a(): "Make a slightly pathologic bar chart with only TWO data items." drawing = Drawing(400, 200) data = [(13, 20)] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'se' bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH0b(): "Make a pathologic bar chart with only ONE data item." drawing = Drawing(400, 200) data = [(42,)] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'se' bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = ['Jan-99'] drawing.add(bc) return drawing def sampleH0c(): "Make a really pathologic bar chart with NO data items at all!" drawing = Drawing(400, 200) data = [()] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'se' bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = [] drawing.add(bc) return drawing def sampleH1(): "Sample of multi-series bar chart." drawing = Drawing(400, 200) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (14, 6, 21, 23, 38, 46, 20, 5) ] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') catNames = [n+'-99' for n in catNames] bc.categoryAxis.categoryNames = catNames drawing.add(bc, 'barchart') return drawing def sampleH2a(): "Sample of multi-series bar chart." data = [(2.4, -5.7, 2, 5, 9.2), (0.6, -4.9, -3, 4, 6.8) ] labels = ("Q3 2000", "Year to Date", "12 months", "Annualised\n3 years", "Since 07.10.99") drawing = Drawing(400, 200) bc = HorizontalBarChart() bc.x = 80 bc.y = 50 bc.height = 120 bc.width = 300 bc.data = data bc.barSpacing = 0 bc.groupSpacing = 10 bc.barWidth = 10 bc.valueAxis.valueMin = -15 bc.valueAxis.valueMax = +15 bc.valueAxis.valueStep = 5 bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 8 bc.valueAxis.labels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.valueAxis.labels.textAnchor = 'middle' bc.valueAxis.configure(bc.data) bc.categoryAxis.categoryNames = labels bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 8 bc.categoryAxis.labels.dx = -150 drawing.add(bc) return drawing def sampleH2b(): "Sample of multi-series bar chart." data = [(2.4, -5.7, 2, 5, 9.2), (0.6, -4.9, -3, 4, 6.8) ] labels = ("Q3 2000", "Year to Date", "12 months", "Annualised\n3 years", "Since 07.10.99") drawing = Drawing(400, 200) bc = HorizontalBarChart() bc.x = 80 bc.y = 50 bc.height = 120 bc.width = 300 bc.data = data bc.barSpacing = 5 bc.groupSpacing = 10 bc.barWidth = 10 bc.valueAxis.valueMin = -15 bc.valueAxis.valueMax = +15 bc.valueAxis.valueStep = 5 bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 8 bc.valueAxis.labels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.valueAxis.labels.textAnchor = 'middle' bc.categoryAxis.categoryNames = labels bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 8 bc.categoryAxis.labels.dx = -150 drawing.add(bc) return drawing def sampleH2c(): "Sample of multi-series bar chart." data = [(2.4, -5.7, 2, 5, 9.99), (0.6, -4.9, -3, 4, 9.99) ] labels = ("Q3 2000", "Year to Date", "12 months", "Annualised\n3 years", "Since 07.10.99") drawing = Drawing(400, 200) bc = HorizontalBarChart() bc.x = 80 bc.y = 50 bc.height = 120 bc.width = 300 bc.data = data bc.barSpacing = 2 bc.groupSpacing = 10 bc.barWidth = 10 bc.valueAxis.valueMin = -15 bc.valueAxis.valueMax = +15 bc.valueAxis.valueStep = 5 bc.valueAxis.labels.fontName = 'Helvetica' bc.valueAxis.labels.fontSize = 8 bc.valueAxis.labels.boxAnchor = 'n' bc.valueAxis.labels.textAnchor = 'middle' bc.categoryAxis.categoryNames = labels bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 8 bc.categoryAxis.labels.dx = -150 bc.barLabels.nudge = 10 bc.barLabelFormat = '%0.2f' bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = 'n' # irrelevant (becomes 'c') bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 6 drawing.add(bc) return drawing def sampleH3(): "A really horizontal bar chart (compared to the equivalent faked one)." names = ("UK Equities", "US Equities", "European Equities", "Japanese Equities", "Pacific (ex Japan) Equities", "Emerging Markets Equities", "UK Bonds", "Overseas Bonds", "UK Index-Linked", "Cash") series1 = (-1.5, 0.3, 0.5, 1.0, 0.8, 0.7, 0.4, 0.1, 1.0, 0.3) series2 = (0.0, 0.33, 0.55, 1.1, 0.88, 0.77, 0.44, 0.11, 1.10, 0.33) assert len(names) == len(series1), "bad data" assert len(names) == len(series2), "bad data" drawing = Drawing(400, 200) bc = HorizontalBarChart() bc.x = 100 bc.y = 20 bc.height = 150 bc.width = 250 bc.data = (series1,) bc.bars.fillColor = colors.green bc.barLabelFormat = '%0.2f' bc.barLabels.dx = 0 bc.barLabels.dy = 0 bc.barLabels.boxAnchor = 'w' # irrelevant (becomes 'c') bc.barLabels.fontName = 'Helvetica' bc.barLabels.fontSize = 6 bc.barLabels.nudge = 10 bc.valueAxis.visible = 0 bc.valueAxis.valueMin = -2 bc.valueAxis.valueMax = +2 bc.valueAxis.valueStep = 1 bc.categoryAxis.tickLeft = 0 bc.categoryAxis.tickRight = 0 bc.categoryAxis.categoryNames = names bc.categoryAxis.labels.boxAnchor = 'w' bc.categoryAxis.labels.dx = -170 bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.labels.fontSize = 6 g = Group(bc) drawing.add(g) return drawing def sampleH4a(): "A bar chart showing value axis region starting at *exactly* zero." drawing = Drawing(400, 200) data = [(13, 20)] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH4b(): "A bar chart showing value axis region starting *below* zero." drawing = Drawing(400, 200) data = [(13, 20)] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = -10 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH4c(): "A bar chart showing value axis region starting *above* zero." drawing = Drawing(400, 200) data = [(13, 20)] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 10 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH4d(): "A bar chart showing value axis region entirely *below* zero." drawing = Drawing(400, 200) data = [(-13, -20)] bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = -30 bc.valueAxis.valueMax = -10 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing dataSample5 = [(10, 60), (20, 50), (30, 40), (40, 30)] def sampleH5a(): "A simple bar chart with no expressed spacing attributes." drawing = Drawing(400, 200) data = dataSample5 bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH5b(): "A simple bar chart with proportional spacing." drawing = Drawing(400, 200) data = dataSample5 bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 0 bc.barWidth = 40 bc.groupSpacing = 20 bc.barSpacing = 10 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH5c1(): "A simple bar chart with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 10 bc.groupSpacing = 0 bc.barSpacing = 0 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH5c2(): "Simple bar chart with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 10 bc.groupSpacing = 20 bc.barSpacing = 0 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH5c3(): "Simple bar chart with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = HorizontalBarChart() bc.x = 50 bc.y = 20 bc.height = 155 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 10 bc.groupSpacing = 0 bc.barSpacing = 2 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleH5c4(): "Simple bar chart with absolute spacing." drawing = Drawing(400, 200) data = dataSample5 bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 10 bc.groupSpacing = 20 bc.barSpacing = 10 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] drawing.add(bc) return drawing def sampleSymbol1(): "Simple bar chart using symbol attribute." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.barWidth = 10 bc.groupSpacing = 15 bc.barSpacing = 3 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] from reportlab.graphics.widgets.grids import ShadedRect sym1 = ShadedRect() sym1.fillColorStart = colors.black sym1.fillColorEnd = colors.blue sym1.orientation = 'horizontal' sym1.strokeWidth = 0 sym2 = ShadedRect() sym2.fillColorStart = colors.black sym2.fillColorEnd = colors.pink sym2.orientation = 'horizontal' sym2.strokeWidth = 0 sym3 = ShadedRect() sym3.fillColorStart = colors.blue sym3.fillColorEnd = colors.white sym3.orientation = 'vertical' sym3.cylinderMode = 1 sym3.strokeWidth = 0 bc.bars.symbol = sym1 bc.bars[2].symbol = sym2 bc.bars[3].symbol = sym3 drawing.add(bc) return drawing def sampleStacked1(): "Simple bar chart using symbol attribute." drawing = Drawing(400, 200) data = dataSample5 bc = VerticalBarChart() bc.categoryAxis.style = 'stacked' bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.barWidth = 10 bc.groupSpacing = 15 bc.valueAxis.valueMin = 0 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] from reportlab.graphics.widgets.grids import ShadedRect bc.bars.symbol = ShadedRect() bc.bars.symbol.fillColorStart = colors.red bc.bars.symbol.fillColorEnd = colors.white bc.bars.symbol.orientation = 'vertical' bc.bars.symbol.cylinderMode = 1 bc.bars.symbol.strokeWidth = 0 bc.bars[1].symbol = ShadedRect() bc.bars[1].symbol.fillColorStart = colors.magenta bc.bars[1].symbol.fillColorEnd = colors.white bc.bars[1].symbol.orientation = 'vertical' bc.bars[1].symbol.cylinderMode = 1 bc.bars[1].symbol.strokeWidth = 0 bc.bars[2].symbol = ShadedRect() bc.bars[2].symbol.fillColorStart = colors.green bc.bars[2].symbol.fillColorEnd = colors.white bc.bars[2].symbol.orientation = 'vertical' bc.bars[2].symbol.cylinderMode = 1 bc.bars[2].symbol.strokeWidth = 0 bc.bars[3].symbol = ShadedRect() bc.bars[3].symbol.fillColorStart = colors.blue bc.bars[3].symbol.fillColorEnd = colors.white bc.bars[3].symbol.orientation = 'vertical' bc.bars[3].symbol.cylinderMode = 1 bc.bars[3].symbol.strokeWidth = 0 drawing.add(bc) return drawing #class version of function sampleH5c4 above class SampleH5c4(Drawing): "Simple bar chart with absolute spacing." def __init__(self,width=400,height=200,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) bc = HorizontalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = dataSample5 bc.strokeColor = colors.black bc.useAbsolute = 1 bc.barWidth = 10 bc.groupSpacing = 20 bc.barSpacing = 10 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.categoryNames = ['Ying', 'Yang'] self.add(bc,name='HBC') reportlab-3.5.34/src/reportlab/graphics/charts/doughnut.py0000664000175000017500000003715313544671343024473 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/doughnut.py # doughnut chart __version__='3.3.0' __doc__="""Doughnut chart Produces a circular chart like the doughnut charts produced by Excel. Can handle multiple series (which produce concentric 'rings' in the chart). """ import copy from math import sin, cos, pi from reportlab.lib import colors from reportlab.lib.validators import isColor, isNumber, isListOfNumbersOrNone,\ isListOfNumbers, isColorOrNone, isString,\ isListOfStringsOrNone, OneOf, SequenceOf,\ isBoolean, isListOfColors,\ isNoneOrListOfNoneOrStrings,\ isNoneOrListOfNoneOrNumbers,\ isNumberOrNone from reportlab.lib.attrmap import * from reportlab.pdfgen.canvas import Canvas from reportlab.graphics.shapes import Group, Drawing, Line, Rect, Polygon, Ellipse, \ Wedge, String, SolidShape, UserNode, STATE_DEFAULTS from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder from reportlab.graphics.charts.piecharts import AbstractPieChart, WedgeProperties, _addWedgeLabel, fixLabelOverlaps from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.widgets.markers import Marker from functools import reduce class SectorProperties(WedgeProperties): """This holds descriptive information about the sectors in a doughnut chart. It is not to be confused with the 'sector itself'; this just holds a recipe for how to format one, and does not allow you to hack the angles. It can format a genuine Sector object for you with its format method. """ _attrMap = AttrMap(BASE=WedgeProperties, ) class Doughnut(AbstractPieChart): _attrMap = AttrMap( x = AttrMapValue(isNumber, desc='X position of the chart within its container.'), y = AttrMapValue(isNumber, desc='Y position of the chart within its container.'), width = AttrMapValue(isNumber, desc='width of doughnut bounding box. Need not be same as width.'), height = AttrMapValue(isNumber, desc='height of doughnut bounding box. Need not be same as height.'), data = AttrMapValue(None, desc='list of numbers defining sector sizes; need not sum to 1'), labels = AttrMapValue(isListOfStringsOrNone, desc="optional list of labels to use for each data point"), startAngle = AttrMapValue(isNumber, desc="angle of first slice; like the compass, 0 is due North"), direction = AttrMapValue(OneOf('clockwise', 'anticlockwise'), desc="'clockwise' or 'anticlockwise'"), slices = AttrMapValue(None, desc="collection of sector descriptor objects"), simpleLabels = AttrMapValue(isBoolean, desc="If true(default) use String not super duper WedgeLabel"), # advanced usage checkLabelOverlap = AttrMapValue(isBoolean, desc="If true check and attempt to fix\n standard label overlaps(default off)",advancedUsage=1), sideLabels = AttrMapValue(isBoolean, desc="If true attempt to make chart with labels along side and pointers", advancedUsage=1), innerRadiusFraction = AttrMapValue(isNumberOrNone, desc='None or the fraction of the radius to be used as the inner hole.\nIf not a suitable default will be used.'), ) def __init__(self): self.x = 0 self.y = 0 self.width = 100 self.height = 100 self.data = [1,1] self.labels = None # or list of strings self.startAngle = 90 self.direction = "clockwise" self.simpleLabels = 1 self.checkLabelOverlap = 0 self.sideLabels = 0 self.innerRadiusFraction = None self.slices = TypedPropertyCollection(SectorProperties) self.slices[0].fillColor = colors.darkcyan self.slices[1].fillColor = colors.blueviolet self.slices[2].fillColor = colors.blue self.slices[3].fillColor = colors.cyan self.slices[4].fillColor = colors.pink self.slices[5].fillColor = colors.magenta self.slices[6].fillColor = colors.yellow def demo(self): d = Drawing(200, 100) dn = Doughnut() dn.x = 50 dn.y = 10 dn.width = 100 dn.height = 80 dn.data = [10,20,30,40,50,60] dn.labels = ['a','b','c','d','e','f'] dn.slices.strokeWidth=0.5 dn.slices[3].popout = 10 dn.slices[3].strokeWidth = 2 dn.slices[3].strokeDashArray = [2,2] dn.slices[3].labelRadius = 1.75 dn.slices[3].fontColor = colors.red dn.slices[0].fillColor = colors.darkcyan dn.slices[1].fillColor = colors.blueviolet dn.slices[2].fillColor = colors.blue dn.slices[3].fillColor = colors.cyan dn.slices[4].fillColor = colors.aquamarine dn.slices[5].fillColor = colors.cadetblue dn.slices[6].fillColor = colors.lightcoral d.add(dn) return d def normalizeData(self, data=None): from operator import add sum = float(reduce(add,data,0)) return abs(sum)>=1e-8 and list(map(lambda x,f=360./sum: f*x, data)) or len(data)*[0] def makeSectors(self): # normalize slice data if isinstance(self.data,(list,tuple)) and isinstance(self.data[0],(list,tuple)): #it's a nested list, more than one sequence normData = [] n = [] for l in self.data: t = self.normalizeData(l) normData.append(t) n.append(len(t)) self._seriesCount = max(n) else: normData = self.normalizeData(self.data) n = len(normData) self._seriesCount = n #labels checkLabelOverlap = self.checkLabelOverlap L = [] L_add = L.append if self.labels is None: labels = [] if not isinstance(n,(list,tuple)): labels = [''] * n else: for m in n: labels = list(labels) + [''] * m else: labels = self.labels #there's no point in raising errors for less than enough labels if #we silently create all for the extreme case of no labels. if not isinstance(n,(list,tuple)): i = n-len(labels) if i>0: labels = list(labels) + [''] * i else: tlab = 0 for m in n: tlab += m i = tlab-len(labels) if i>0: labels = list(labels) + [''] * i xradius = self.width/2.0 yradius = self.height/2.0 centerx = self.x + xradius centery = self.y + yradius if self.direction == "anticlockwise": whichWay = 1 else: whichWay = -1 g = Group() startAngle = self.startAngle #% 360 styleCount = len(self.slices) irf = self.innerRadiusFraction if isinstance(self.data[0],(list,tuple)): #multi-series doughnut ndata = len(self.data) if irf is None: yir = (yradius/2.5)/ndata xir = (xradius/2.5)/ndata else: yir = yradius*irf xir = xradius*irf ydr = (yradius-yir)/ndata xdr = (xradius-xir)/ndata for sn,series in enumerate(normData): for i,angle in enumerate(series): endAngle = (startAngle + (angle * whichWay)) #% 360 if abs(startAngle-endAngle)<1e-5: startAngle = endAngle continue if startAngle < endAngle: a1 = startAngle a2 = endAngle else: a1 = endAngle a2 = startAngle startAngle = endAngle #if we didn't use %stylecount here we'd end up with the later sectors #all having the default style sectorStyle = self.slices[i%styleCount] # is it a popout? cx, cy = centerx, centery if sectorStyle.popout != 0: # pop out the sector averageAngle = (a1+a2)/2.0 aveAngleRadians = averageAngle * pi/180.0 popdistance = sectorStyle.popout cx = centerx + popdistance * cos(aveAngleRadians) cy = centery + popdistance * sin(aveAngleRadians) yr1 = yir+sn*ydr yr = yr1 + ydr xr1 = xir+sn*xdr xr = xr1 + xdr if isinstance(n,(list,tuple)): theSector = Wedge(cx, cy, xr, a1, a2, yradius=yr, radius1=xr1, yradius1=yr1) else: theSector = Wedge(cx, cy, xr, a1, a2, yradius=yr, radius1=xr1, yradius1=yr1, annular=True) theSector.fillColor = sectorStyle.fillColor theSector.strokeColor = sectorStyle.strokeColor theSector.strokeWidth = sectorStyle.strokeWidth theSector.strokeDashArray = sectorStyle.strokeDashArray g.add(theSector) if sn == 0 and sectorStyle.visible and sectorStyle.label_visible: text = self.getSeriesName(i,'') if text: averageAngle = (a1+a2)/2.0 aveAngleRadians = averageAngle*pi/180.0 labelRadius = sectorStyle.labelRadius rx = xradius*labelRadius ry = yradius*labelRadius labelX = centerx + (0.5 * self.width * cos(aveAngleRadians) * labelRadius) labelY = centery + (0.5 * self.height * sin(aveAngleRadians) * labelRadius) l = _addWedgeLabel(self,text,averageAngle,labelX,labelY,sectorStyle) if checkLabelOverlap: l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, 'bounds': l.getBounds(), } L_add(l) else: #single series doughnut if irf is None: yir = yradius/2.5 xir = xradius/2.5 else: yir = yradius*irf xir = xradius*irf for i,angle in enumerate(normData): endAngle = (startAngle + (angle * whichWay)) #% 360 if abs(startAngle-endAngle)<1e-5: startAngle = endAngle continue if startAngle < endAngle: a1 = startAngle a2 = endAngle else: a1 = endAngle a2 = startAngle startAngle = endAngle #if we didn't use %stylecount here we'd end up with the later sectors #all having the default style sectorStyle = self.slices[i%styleCount] # is it a popout? cx, cy = centerx, centery if sectorStyle.popout != 0: # pop out the sector averageAngle = (a1+a2)/2.0 aveAngleRadians = averageAngle * pi/180.0 popdistance = sectorStyle.popout cx = centerx + popdistance * cos(aveAngleRadians) cy = centery + popdistance * sin(aveAngleRadians) if n > 1: theSector = Wedge(cx, cy, xradius, a1, a2, yradius=yradius, radius1=xir, yradius1=yir) elif n==1: theSector = Wedge(cx, cy, xradius, a1, a2, yradius=yradius, radius1=xir, yradius1=yir, annular=True) theSector.fillColor = sectorStyle.fillColor theSector.strokeColor = sectorStyle.strokeColor theSector.strokeWidth = sectorStyle.strokeWidth theSector.strokeDashArray = sectorStyle.strokeDashArray g.add(theSector) # now draw a label if labels[i] and sectorStyle.visible and sectorStyle.label_visible: averageAngle = (a1+a2)/2.0 aveAngleRadians = averageAngle*pi/180.0 labelRadius = sectorStyle.labelRadius labelX = centerx + (0.5 * self.width * cos(aveAngleRadians) * labelRadius) labelY = centery + (0.5 * self.height * sin(aveAngleRadians) * labelRadius) rx = xradius*labelRadius ry = yradius*labelRadius l = _addWedgeLabel(self,labels[i],averageAngle,labelX,labelY,sectorStyle) if checkLabelOverlap: l._origdata = { 'x': labelX, 'y':labelY, 'angle': averageAngle, 'rx': rx, 'ry':ry, 'cx':cx, 'cy':cy, 'bounds': l.getBounds(), } L_add(l) if checkLabelOverlap and L: fixLabelOverlaps(L) for l in L: g.add(l) return g def draw(self): g = Group() g.add(self.makeSectors()) return g def sample1(): "Make up something from the individual Sectors" d = Drawing(400, 400) g = Group() s1 = Wedge(centerx=200, centery=200, radius=150, startangledegrees=0, endangledegrees=120, radius1=100) s1.fillColor=colors.red s1.strokeColor=None d.add(s1) s2 = Wedge(centerx=200, centery=200, radius=150, startangledegrees=120, endangledegrees=240, radius1=100) s2.fillColor=colors.green s2.strokeColor=None d.add(s2) s3 = Wedge(centerx=200, centery=200, radius=150, startangledegrees=240, endangledegrees=260, radius1=100) s3.fillColor=colors.blue s3.strokeColor=None d.add(s3) s4 = Wedge(centerx=200, centery=200, radius=150, startangledegrees=260, endangledegrees=360, radius1=100) s4.fillColor=colors.gray s4.strokeColor=None d.add(s4) return d def sample2(): "Make a simple demo" d = Drawing(400, 400) dn = Doughnut() dn.x = 50 dn.y = 50 dn.width = 300 dn.height = 300 dn.data = [10,20,30,40,50,60] d.add(dn) return d def sample3(): "Make a more complex demo" d = Drawing(400, 400) dn = Doughnut() dn.x = 50 dn.y = 50 dn.width = 300 dn.height = 300 dn.data = [[10,20,30,40,50,60], [10,20,30,40]] dn.labels = ['a','b','c','d','e','f'] d.add(dn) return d def sample4(): "Make a more complex demo with Label Overlap fixing" d = Drawing(400, 400) dn = Doughnut() dn.x = 50 dn.y = 50 dn.width = 300 dn.height = 300 dn.data = [[10,20,30,40,50,60], [10,20,30,40]] dn.labels = ['a','b','c','d','e','f'] dn.checkLabelOverlap = True d.add(dn) return d if __name__=='__main__': from reportlab.graphics.renderPDF import drawToFile d = sample1() drawToFile(d, 'doughnut1.pdf') d = sample2() drawToFile(d, 'doughnut2.pdf') d = sample3() drawToFile(d, 'doughnut3.pdf') reportlab-3.5.34/src/reportlab/graphics/charts/markers.py0000664000175000017500000000332113544671343024270 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/markers.py __version__='3.3.0' __doc__="""This modules defines a collection of markers used in charts. The make* functions return a simple shape or a widget as for the smiley. """ from reportlab.lib import colors from reportlab.graphics.shapes import Rect, Line, Circle, Polygon from reportlab.graphics.widgets.signsandsymbols import SmileyFace def makeEmptySquare(x, y, size, color): "Make an empty square marker." d = size/2.0 rect = Rect(x-d, y-d, 2*d, 2*d) rect.strokeColor = color rect.fillColor = None return rect def makeFilledSquare(x, y, size, color): "Make a filled square marker." d = size/2.0 rect = Rect(x-d, y-d, 2*d, 2*d) rect.strokeColor = color rect.fillColor = color return rect def makeFilledDiamond(x, y, size, color): "Make a filled diamond marker." d = size/2.0 poly = Polygon((x-d,y, x,y+d, x+d,y, x,y-d)) poly.strokeColor = color poly.fillColor = color return poly def makeEmptyCircle(x, y, size, color): "Make a hollow circle marker." d = size/2.0 circle = Circle(x, y, d) circle.strokeColor = color circle.fillColor = colors.white return circle def makeFilledCircle(x, y, size, color): "Make a hollow circle marker." d = size/2.0 circle = Circle(x, y, d) circle.strokeColor = color circle.fillColor = color return circle def makeSmiley(x, y, size, color): "Make a smiley marker." d = size s = SmileyFace() s.fillColor = color s.x = x-d s.y = y-d s.size = d*2 return s reportlab-3.5.34/src/reportlab/graphics/charts/areas.py0000664000175000017500000001047613544671343023730 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/areas.py __version__='3.3.0' __doc__='''This module defines a Area mixin classes''' from reportlab.lib.validators import isNumber, isColor, isColorOrNone, isNoneOrShape from reportlab.graphics.widgetbase import Widget from reportlab.graphics.shapes import Rect, Group, Line, Polygon from reportlab.lib.attrmap import AttrMap, AttrMapValue from reportlab.lib.colors import grey class PlotArea(Widget): "Abstract base class representing a chart's plot area, pretty unusable by itself." _attrMap = AttrMap( x = AttrMapValue(isNumber, desc='X position of the lower-left corner of the chart.'), y = AttrMapValue(isNumber, desc='Y position of the lower-left corner of the chart.'), width = AttrMapValue(isNumber, desc='Width of the chart.'), height = AttrMapValue(isNumber, desc='Height of the chart.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color of the plot area border.'), strokeWidth = AttrMapValue(isNumber, desc='Width plot area border.'), fillColor = AttrMapValue(isColorOrNone, desc='Color of the plot area interior.'), background = AttrMapValue(isNoneOrShape, desc='Handle to background object e.g. Rect(0,0,width,height).'), debug = AttrMapValue(isNumber, desc='Used only for debugging.'), ) def __init__(self): self.x = 20 self.y = 10 self.height = 85 self.width = 180 self.strokeColor = None self.strokeWidth = 1 self.fillColor = None self.background = None self.debug = 0 def makeBackground(self): if self.background is not None: BG = self.background if isinstance(BG,Group): g = BG for bg in g.contents: bg.x = self.x bg.y = self.y bg.width = self.width bg.height = self.height else: g = Group() if type(BG) not in (type(()),type([])): BG=(BG,) for bg in BG: bg.x = self.x bg.y = self.y bg.width = self.width bg.height = self.height g.add(bg) return g else: strokeColor,strokeWidth,fillColor=self.strokeColor, self.strokeWidth, self.fillColor if (strokeWidth and strokeColor) or fillColor: g = Group() _3d_dy = getattr(self,'_3d_dy',None) x = self.x y = self.y h = self.height w = self.width if _3d_dy is not None: _3d_dx = self._3d_dx if fillColor and not strokeColor: from reportlab.lib.colors import Blacker c = Blacker(fillColor, getattr(self,'_3d_blacken',0.7)) else: c = strokeColor if not strokeWidth: strokeWidth = 0.5 if fillColor or strokeColor or c: bg = Polygon([x,y,x,y+h,x+_3d_dx,y+h+_3d_dy,x+w+_3d_dx,y+h+_3d_dy,x+w+_3d_dx,y+_3d_dy,x+w,y], strokeColor=strokeColor or c or grey, strokeWidth=strokeWidth, fillColor=fillColor) g.add(bg) g.add(Line(x,y,x+_3d_dx,y+_3d_dy, strokeWidth=0.5, strokeColor=c)) g.add(Line(x+_3d_dx,y+_3d_dy, x+_3d_dx,y+h+_3d_dy,strokeWidth=0.5, strokeColor=c)) fc = Blacker(c, getattr(self,'_3d_blacken',0.8)) g.add(Polygon([x,y,x+_3d_dx,y+_3d_dy,x+w+_3d_dx,y+_3d_dy,x+w,y], strokeColor=strokeColor or c or grey, strokeWidth=strokeWidth, fillColor=fc)) bg = Line(x+_3d_dx,y+_3d_dy, x+w+_3d_dx,y+_3d_dy,strokeWidth=0.5, strokeColor=c) else: bg = None else: bg = Rect(x, y, w, h, strokeColor=strokeColor, strokeWidth=strokeWidth, fillColor=fillColor) if bg: g.add(bg) return g else: return None reportlab-3.5.34/src/reportlab/graphics/charts/slidebox.py0000664000175000017500000002075613544671343024450 0ustar rptlabrptlab00000000000000from reportlab.lib.colors import Color, white, black from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.shapes import Polygon, Line, Circle, String, Drawing, PolyLine, Group, Rect from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection from reportlab.lib.attrmap import * from reportlab.lib.validators import * from reportlab.lib.units import cm from reportlab.pdfbase.pdfmetrics import stringWidth, getFont from reportlab.graphics.widgets.grids import ShadedRect, Grid class SlideBox(Widget): """Returns a slidebox widget""" _attrMap = AttrMap( labelFontName = AttrMapValue(isString, desc="Name of font used for the labels"), labelFontSize = AttrMapValue(isNumber, desc="Size of font used for the labels"), labelStrokeColor = AttrMapValue(isColorOrNone, desc="Colour for for number outlines"), labelFillColor = AttrMapValue(isColorOrNone, desc="Colour for number insides"), startColor = AttrMapValue(isColor, desc='Color of first box'), endColor = AttrMapValue(isColor, desc='Color of last box'), numberOfBoxes = AttrMapValue(isInt, desc='How many boxes there are'), trianglePosition = AttrMapValue(isInt, desc='Which box is highlighted by the triangles'), triangleHeight = AttrMapValue(isNumber, desc="Height of indicator triangles"), triangleWidth = AttrMapValue(isNumber, desc="Width of indicator triangles"), triangleFillColor = AttrMapValue(isColor, desc="Colour of indicator triangles"), triangleStrokeColor = AttrMapValue(isColorOrNone, desc="Colour of indicator triangle outline"), triangleStrokeWidth = AttrMapValue(isNumber, desc="Colour of indicator triangle outline"), boxHeight = AttrMapValue(isNumber, desc="Height of the boxes"), boxWidth = AttrMapValue(isNumber, desc="Width of the boxes"), boxSpacing = AttrMapValue(isNumber, desc="Space between the boxes"), boxOutlineColor = AttrMapValue(isColorOrNone, desc="Colour used to outline the boxes (if any)"), boxOutlineWidth = AttrMapValue(isNumberOrNone, desc="Width of the box outline (if any)"), leftPadding = AttrMapValue(isNumber, desc='Padding on left of drawing'), rightPadding = AttrMapValue(isNumber, desc='Padding on right of drawing'), topPadding = AttrMapValue(isNumber, desc='Padding at top of drawing'), bottomPadding = AttrMapValue(isNumber, desc='Padding at bottom of drawing'), background = AttrMapValue(isColorOrNone, desc='Colour of the background to the drawing (if any)'), sourceLabelText = AttrMapValue(isNoneOrString, desc="Text used for the 'source' label (can be empty)"), sourceLabelOffset = AttrMapValue(isNumber, desc='Padding at bottom of drawing'), sourceLabelFontName = AttrMapValue(isString, desc="Name of font used for the 'source' label"), sourceLabelFontSize = AttrMapValue(isNumber, desc="Font size for the 'source' label"), sourceLabelFillColor = AttrMapValue(isColorOrNone, desc="Colour ink for the 'source' label (bottom right)"), ) def __init__(self): self.labelFontName = "Helvetica-Bold" self.labelFontSize = 10 self.labelStrokeColor = black self.labelFillColor = white self.startColor = colors.Color(232/255.0,224/255.0,119/255.0) self.endColor = colors.Color(25/255.0,77/255.0,135/255.0) self.numberOfBoxes = 7 self.trianglePosition = 7 self.triangleHeight = 0.12*cm self.triangleWidth = 0.38*cm self.triangleFillColor = white self.triangleStrokeColor = black self.triangleStrokeWidth = 0.58 self.boxHeight = 0.55*cm self.boxWidth = 0.73*cm self.boxSpacing = 0.075*cm self.boxOutlineColor = black self.boxOutlineWidth = 0.58 self.leftPadding=5 self.rightPadding=5 self.topPadding=5 self.bottomPadding=5 self.background=None self.sourceLabelText = "Source: ReportLab" self.sourceLabelOffset = 0.2*cm self.sourceLabelFontName = "Helvetica-Oblique" self.sourceLabelFontSize = 6 self.sourceLabelFillColor = black def _getDrawingDimensions(self): tx=(self.numberOfBoxes*self.boxWidth) if self.numberOfBoxes>1: tx=tx+((self.numberOfBoxes-1)*self.boxSpacing) tx=tx+self.leftPadding+self.rightPadding ty=self.boxHeight+self.triangleHeight ty=ty+self.topPadding+self.bottomPadding+self.sourceLabelOffset+self.sourceLabelFontSize return (tx,ty) def _getColors(self): # for calculating intermediate colors... numShades = self.numberOfBoxes+1 fillColorStart = self.startColor fillColorEnd = self.endColor colorsList =[] for i in range(0,numShades): colorsList.append(colors.linearlyInterpolatedColor(fillColorStart, fillColorEnd, 0, numShades-1, i)) return colorsList def demo(self,drawing=None): from reportlab.lib import colors if not drawing: tx,ty=self._getDrawingDimensions() drawing = Drawing(tx,ty) drawing.add(self.draw()) return drawing def draw(self): g = Group() ys = self.bottomPadding+(self.triangleHeight/2)+self.sourceLabelOffset+self.sourceLabelFontSize if self.background: x,y = self._getDrawingDimensions() g.add(Rect(-self.leftPadding,-ys,x,y, strokeColor=None, strokeWidth=0, fillColor=self.background)) ascent=getFont(self.labelFontName).face.ascent/1000. if ascent==0: ascent=0.718 # default (from helvetica) ascent=ascent*self.labelFontSize # normalize colorsList = self._getColors() # Draw the boxes - now uses ShadedRect from grids x=0 for f in range (0,self.numberOfBoxes): sr=ShadedRect() sr.x=x sr.y=0 sr.width=self.boxWidth sr.height=self.boxHeight sr.orientation = 'vertical' sr.numShades = 30 sr.fillColorStart = colorsList[f] sr.fillColorEnd = colorsList[f+1] sr.strokeColor = None sr.strokeWidth = 0 g.add(sr) g.add(Rect(x,0,self.boxWidth,self.boxHeight, strokeColor=self.boxOutlineColor, strokeWidth=self.boxOutlineWidth, fillColor=None)) g.add(String(x+self.boxWidth/2.,(self.boxHeight-ascent)/2., text = str(f+1), fillColor = self.labelFillColor, strokeColor=self.labelStrokeColor, textAnchor = 'middle', fontName = self.labelFontName, fontSize = self.labelFontSize)) x=x+self.boxWidth+self.boxSpacing #do triangles xt = (self.trianglePosition*self.boxWidth) if self.trianglePosition>1: xt = xt+(self.trianglePosition-1)*self.boxSpacing xt = xt-(self.boxWidth/2) g.add(Polygon( strokeColor = self.triangleStrokeColor, strokeWidth = self.triangleStrokeWidth, fillColor = self.triangleFillColor, points=[xt,self.boxHeight-(self.triangleHeight/2), xt-(self.triangleWidth/2),self.boxHeight+(self.triangleHeight/2), xt+(self.triangleWidth/2),self.boxHeight+(self.triangleHeight/2), xt,self.boxHeight-(self.triangleHeight/2)])) g.add(Polygon( strokeColor = self.triangleStrokeColor, strokeWidth = self.triangleStrokeWidth, fillColor = self.triangleFillColor, points=[xt,0+(self.triangleHeight/2), xt-(self.triangleWidth/2),0-(self.triangleHeight/2), xt+(self.triangleWidth/2),0-(self.triangleHeight/2), xt,0+(self.triangleHeight/2)])) #source label if self.sourceLabelText != None: g.add(String(x-self.boxSpacing,0-(self.triangleHeight/2)-self.sourceLabelOffset-(self.sourceLabelFontSize), text = self.sourceLabelText, fillColor = self.sourceLabelFillColor, textAnchor = 'end', fontName = self.sourceLabelFontName, fontSize = self.sourceLabelFontSize)) g.shift(self.leftPadding, ys) return g if __name__ == "__main__": d = SlideBox() d.demo().save(fnRoot="slidebox") reportlab-3.5.34/src/reportlab/graphics/charts/utils.py0000664000175000017500000002651013554340114023757 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/utils.py __version__='3.3.0' __doc__="Utilities used here and there." from time import mktime, gmtime, strftime from math import log10, pi, floor, sin, cos, sqrt, hypot import weakref from reportlab.graphics.shapes import transformPoint, transformPoints, inverse, Ellipse, Group, String, Path, numericXShift from reportlab.lib.utils import flatten from reportlab.pdfbase.pdfmetrics import stringWidth ### Dinu's stuff used in some line plots (likely to vansih). def mkTimeTuple(timeString): "Convert a 'dd/mm/yyyy' formatted string to a tuple for use in the time module." L = [0] * 9 dd, mm, yyyy = list(map(int, timeString.split('/'))) L[:3] = [yyyy, mm, dd] return tuple(L) def str2seconds(timeString): "Convert a number of seconds since the epoch into a date string." return mktime(mkTimeTuple(timeString)) def seconds2str(seconds): "Convert a date string into the number of seconds since the epoch." return strftime('%Y-%m-%d', gmtime(seconds)) ### Aaron's rounding function for making nice values on axes. def nextRoundNumber(x): """Return the first 'nice round number' greater than or equal to x Used in selecting apropriate tick mark intervals; we say we want an interval which places ticks at least 10 points apart, work out what that is in chart space, and ask for the nextRoundNumber(). Tries the series 1,2,5,10,20,50,100.., going up or down as needed. """ #guess to nearest order of magnitude if x in (0, 1): return x if x < 0: return -1.0 * nextRoundNumber(-x) else: lg = int(log10(x)) if lg == 0: if x < 1: base = 0.1 else: base = 1.0 elif lg < 0: base = 10.0 ** (lg - 1) else: base = 10.0 ** lg # e.g. base(153) = 100 # base will always be lower than x if base >= x: return base * 1.0 elif (base * 2) >= x: return base * 2.0 elif (base * 5) >= x: return base * 5.0 else: return base * 10.0 _intervals=(.1, .2, .25, .5) _j_max=len(_intervals)-1 def find_interval(lo,hi,I=5): 'determine tick parameters for range [lo, hi] using I intervals' if lo >= hi: if lo==hi: if lo==0: lo = -.1 hi = .1 else: lo = 0.9*lo hi = 1.1*hi else: raise ValueError("lo>hi") x=(hi - lo)/float(I) b= (x>0 and (x<1 or x>10)) and 10**floor(log10(x)) or 1 b = b while 1: a = x/b if a<=_intervals[-1]: break b = b*10 j = 0 while a>_intervals[j]: j = j + 1 while 1: ss = _intervals[j]*b n = lo/ss l = int(n)-(n<0) n = ss*l x = ss*(l+I) a = I*ss if n>0: if a>=hi: n = 0.0 x = a elif hi<0: a = -a if lo>a: n = a x = 0 if hi<=x and n<=lo: break j = j + 1 if j>_j_max: j = 0 b = b*10 return n, x, ss, lo - n + x - hi def find_good_grid(lower,upper,n=(4,5,6,7,8,9), grid=None): if grid: t = divmod(lower,grid)[0] * grid hi, z = divmod(upper,grid) if z>1e-8: hi = hi+1 hi = hi*grid else: try: n[0] except TypeError: n = range(max(1,n-2),max(n+3,2)) w = 1e308 for i in n: z=find_interval(lower,upper,i) if z[3] 3 or power < -3: format = '%+'+repr(w+7)+'.0e' else: if power >= 0: digits = int(power)+w format = '%' + repr(digits)+'.0f' else: digits = w-int(power) format = '%'+repr(digits+2)+'.'+repr(digits)+'f' if percent: format=format+'%%' T = [] n = int(float(hi-t)/grid+0.1)+1 if split: labels = [] for i in range(n): v = t+grid*i T.append(v) labels.append(format % (v+labelVOffset)) return T, labels else: for i in range(n): v = t+grid*i T.append((v, format % (v+labelVOffset))) return T def findNones(data): m = len(data) if None in data: b = 0 while b scale the value otherwise use the absolute value labelClass the label class to use default Label all Label keywords are acceptable (including say _text) ''' def __init__(self,v,**kwds): self._v = v self._kwds = kwds def __call__(self,axis): kwds = self._kwds.copy() labelClass = kwds.pop('labelClass',Label) scaleValue = kwds.pop('scaleValue',True) if not hasattr(axis,'_tickValues'): axis._pseudo_configure() sv = (axis.scale if scaleValue else lambda x: x)(self._v) if axis.isYAxis: x = axis._x y = sv else: x = sv y = axis._y kwds['x'] = x kwds['y'] = y return labelClass(**kwds) class AxisLineAnnotation: '''Create a grid like line using the given user value to draw the line kwds may contain startOffset if true v is offset from the default grid start position endOffset if true v is offset from the default grid end position scaleValue True/not given --> scale the value otherwise use the absolute value lo lowest coordinate to draw default 0 hi highest coordinate to draw at default = length drawAtLimit True draw line at appropriate limit if its coordinate exceeds the lo, hi range False ignore if it's outside the range all Line keywords are acceptable ''' def __init__(self,v,**kwds): self._v = v self._kwds = kwds def __call__(self,axis): kwds = self._kwds.copy() scaleValue = kwds.pop('scaleValue',True) endOffset = kwds.pop('endOffset',False) startOffset = kwds.pop('startOffset',False) if axis.isYAxis: offs = axis._x d0 = axis._y else: offs = axis._y d0 = axis._x s = kwds.pop('start',None) e = kwds.pop('end',None) if s is None or e is None: dim = getattr(getattr(axis,'joinAxis',None),'getGridDims',None) if dim and hasattr(dim,'__call__'): dim = dim() if dim: if s is None: s = dim[0] if e is None: e = dim[1] else: if s is None: s = 0 if e is None: e = 0 hi = kwds.pop('hi',axis._length)+d0 lo = kwds.pop('lo',0)+d0 lo,hi=min(lo,hi),max(lo,hi) drawAtLimit = kwds.pop('drawAtLimit',False) oaglp = axis._get_line_pos if not scaleValue: axis._get_line_pos = lambda x: x try: v = self._v if endOffset: v = v + hi elif startOffset: v = v + lo func = axis._getLineFunc(s-offs,e-offs,kwds.pop('parent',None)) if not hasattr(axis,'_tickValues'): axis._pseudo_configure() d = axis._get_line_pos(v) if dhi: if not drawAtLimit: return None if d0): return c = self.subGridStrokeColor w = self.subGridStrokeWidth or 0 if not(w and c): return s = self.subGridStart e = self.subGridEnd if s is None or e is None: if dim and hasattr(dim,'__call__'): dim = dim() if dim: if s is None: s = dim[0] if e is None: e = dim[1] else: if s is None: s = 0 if e is None: e = 0 if s or e: if self.isYAxis: offs = self._x else: offs = self._y otv = self._calcSubTicks() try: self._makeLines(g,s-offs,e-offs,c,w,self.subGridStrokeDashArray,self.subGridStrokeLineJoin,self.subGridStrokeLineCap,self.subGridStrokeMiterLimit,parent=parent,exclude=exclude) finally: self._tickValues = otv def getGridDims(self,start=None,end=None): if start is None: start = (self._x,self._y)[self.isYAxis] if end is None: end = start+self._length return start,end def isYAxis(self): if getattr(self,'_dataIndex',None)==1: return True acn = self.__class__.__name__ return acn[0]=='Y' or acn[:4]=='AdjY' isYAxis = property(isYAxis) def isXAxis(self): if getattr(self,'_dataIndex',None)==0: return True acn = self.__class__.__name__ return acn[0]=='X' or acn[:11]=='NormalDateX' isXAxis = property(isXAxis) def addAnnotations(self,g,A=None): if A is None: getattr(self,'annotations',[]) for x in A: g.add(x(self)) def _splitAnnotations(self): A = getattr(self,'annotations',[])[:] D = {} for v in ('early','beforeAxis','afterAxis','beforeTicks', 'afterTicks','beforeTickLabels', 'afterTickLabels','late'): R = [].append P = [].append for a in A: if getattr(a,v,0): R(a) else: P(a) D[v] = R.__self__ A[:] = P.__self__ D['late'] += A return D def draw(self): g = Group() A = self._splitAnnotations() self.addAnnotations(g,A['early']) if self.visible: self.addAnnotations(g,A['beforeAxis']) g.add(self.makeAxis()) self.addAnnotations(g,A['afterAxis']) self.addAnnotations(g,A['beforeTicks']) g.add(self.makeTicks()) self.addAnnotations(g,A['afterTicks']) self.addAnnotations(g,A['beforeTickLabels']) g.add(self.makeTickLabels()) self.addAnnotations(g,A['afterTickLabels']) self.addAnnotations(g,A['late']) return g class CALabel(PMVLabel): _attrMap = AttrMap(BASE=PMVLabel, labelPosFrac = AttrMapValue(isNumber, desc='where in the category range [0,1] the labels should be anchored'), ) def __init__(self,**kw): PMVLabel.__init__(self,**kw) self._setKeywords( labelPosFrac = 0.5, ) # Category axes. class CategoryAxis(_AxisG): "Abstract category axis, unusable in itself." _nodoc = 1 _attrMap = AttrMap( visible = AttrMapValue(isBoolean, desc='Display entire object, if true.'), visibleAxis = AttrMapValue(isBoolean, desc='Display axis line, if true.'), visibleTicks = AttrMapValue(isBoolean, desc='Display axis ticks, if true.'), visibleLabels = AttrMapValue(isBoolean, desc='Display axis labels, if true.'), visibleGrid = AttrMapValue(isBoolean, desc='Display axis grid, if true.'), strokeWidth = AttrMapValue(isNumber, desc='Width of axis line and ticks.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color of axis line and ticks.'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array used for axis line.'), strokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Line cap 0=butt, 1=round & 2=square"), strokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Line join 0=miter, 1=round & 2=bevel"), strokeMiterLimit = AttrMapValue(isNumber,desc="miter limit control miter line joins"), gridStrokeWidth = AttrMapValue(isNumber, desc='Width of grid lines.'), gridStrokeColor = AttrMapValue(isColorOrNone, desc='Color of grid lines.'), gridStrokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array used for grid lines.'), gridStrokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Grid Line cap 0=butt, 1=round & 2=square"), gridStrokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Grid Line join 0=miter, 1=round & 2=bevel"), gridStrokeMiterLimit = AttrMapValue(isNumber,desc="Grid miter limit control miter line joins"), gridStart = AttrMapValue(isNumberOrNone, desc='Start of grid lines wrt axis origin'), gridEnd = AttrMapValue(isNumberOrNone, desc='End of grid lines wrt axis origin'), drawGridLast = AttrMapValue(isBoolean, desc='if true draw gridlines after everything else.'), labels = AttrMapValue(None, desc='Handle of the axis labels.'), categoryNames = AttrMapValue(isListOfStringsOrNone, desc='List of category names.'), joinAxis = AttrMapValue(None, desc='Join both axes if true.'), joinAxisPos = AttrMapValue(isNumberOrNone, desc='Position at which to join with other axis.'), reverseDirection = AttrMapValue(isBoolean, desc='If true reverse category direction.'), style = AttrMapValue(OneOf('parallel','stacked','parallel_3d'),"How common category bars are plotted"), labelAxisMode = AttrMapValue(OneOf('high','low','axis', 'axispmv'), desc="Like joinAxisMode, but for the axis labels"), tickShift = AttrMapValue(isBoolean, desc='Tick shift typically'), tickStrokeWidth = AttrMapValue(isNumberOrNone, desc='Width of ticks if specified.'), tickStrokeColor = AttrMapValue(isColorOrNone, desc='Color of ticks if specified.'), loPad = AttrMapValue(isNumber, desc='extra inner space before start of the axis'), hiPad = AttrMapValue(isNumber, desc='extra inner space after end of the axis'), annotations = AttrMapValue(None,desc='list of annotations'), loLLen = AttrMapValue(isNumber, desc='extra line length before start of the axis'), hiLLen = AttrMapValue(isNumber, desc='extra line length after end of the axis'), skipGrid = AttrMapValue(OneOf('none','top','both','bottom'),"grid lines to skip top bottom both none"), innerTickDraw = AttrMapValue(isNoneOrCallable, desc="Callable to replace _drawInnerTicks"), ) def __init__(self): assert self.__class__.__name__!='CategoryAxis', "Abstract Class CategoryAxis Instantiated" # private properties set by methods. The initial values # here are to make demos easy; they would always be # overridden in real life. self._x = 50 self._y = 50 self._length = 100 self._catCount = 0 # public properties self.visible = 1 self.visibleAxis = 1 self.visibleTicks = 1 self.visibleLabels = 1 self.visibleGrid = 0 self.drawGridLast = False self.strokeWidth = 1 self.strokeColor = STATE_DEFAULTS['strokeColor'] self.strokeDashArray = STATE_DEFAULTS['strokeDashArray'] self.gridStrokeLineJoin = self.strokeLineJoin = STATE_DEFAULTS['strokeLineJoin'] self.gridStrokeLineCap = self.strokeLineCap = STATE_DEFAULTS['strokeLineCap'] self.gridStrokeMiterLimit = self.strokeMiterLimit = STATE_DEFAULTS['strokeMiterLimit'] self.gridStrokeWidth = 0.25 self.gridStrokeColor = STATE_DEFAULTS['strokeColor'] self.gridStrokeDashArray = STATE_DEFAULTS['strokeDashArray'] self.gridStart = self.gridEnd = None self.strokeLineJoin = STATE_DEFAULTS['strokeLineJoin'] self.strokeLineCap = STATE_DEFAULTS['strokeLineCap'] self.strokeMiterLimit = STATE_DEFAULTS['strokeMiterLimit'] self.labels = TypedPropertyCollection(CALabel) # if None, they don't get labels. If provided, # you need one name per data point and they are # used for label text. self.categoryNames = None self.joinAxis = None self.joinAxisPos = None self.joinAxisMode = None self.labelAxisMode = 'axis' self.reverseDirection = 0 self.style = 'parallel' #various private things which need to be initialized self._labelTextFormat = None self.tickShift = 0 self.loPad = 0 self.hiPad = 0 self.loLLen = 0 self.hiLLen = 0 def setPosition(self, x, y, length): # ensure floating point self._x = float(x) self._y = float(y) self._length = float(length) def configure(self, multiSeries,barWidth=None): self._catCount = max(list(map(len,multiSeries))) self._barWidth = barWidth or ((self._length-self.loPad-self.hiPad)/float(self._catCount or 1)) self._calcTickmarkPositions() if self.labelAxisMode == 'axispmv': self._pmv = [sum([series[i] for series in multiSeries]) for i in xrange(self._catCount)] def _calcTickmarkPositions(self): n = self._catCount if self.tickShift: self._tickValues = [t+0.5 for t in xrange(n)] else: if self.reverseDirection: self._tickValues = list(xrange(-1,n)) else: self._tickValues = list(xrange(n+1)) def _scale(self,idx): if self.reverseDirection: idx = self._catCount-idx-1 return idx def scale(self, idx): "Returns the position and width in drawing units" return (self.loScale(idx), self._barWidth) def midScale(self, idx): "Returns the bar mid position in drawing units" return self.loScale(idx) + 0.5*self._barWidth def _assertYAxis(axis): assert axis.isYAxis, "Cannot connect to other axes (%s), but Y- ones." % axis.__class__.__name__ def _assertXAxis(axis): assert axis.isXAxis, "Cannot connect to other axes (%s), but X- ones." % axis.__class__.__name__ class _XTicks: _tickTweaks = 0 #try 0.25-0.5 @property def actualTickStrokeWidth(self): return getattr(self,'tickStrokeWidth',self.strokeWidth) @property def actualTickStrokeColor(self): return getattr(self,'tickStrokeColor',self.strokeColor) def _drawTicksInner(self,tU,tD,g): itd = getattr(self,'innerTickDraw',None) if itd: itd(self,tU,tD,g) elif tU or tD: sW = self.actualTickStrokeWidth tW = self._tickTweaks if tW: if tU and not tD: tD = tW*sW elif tD and not tU: tU = tW*sW self._makeLines(g,tU,-tD,self.actualTickStrokeColor,sW,self.strokeDashArray,self.strokeLineJoin,self.strokeLineCap,self.strokeMiterLimit) def _drawTicks(self,tU,tD,g=None): g = g or Group() if self.visibleTicks: self._drawTicksInner(tU,tD,g) return g def _drawSubTicks(self,tU,tD,g): if getattr(self,'visibleSubTicks',0) and self.subTickNum>0: otv = self._calcSubTicks() try: self._subTicking = 1 self._drawTicksInner(tU,tD,g) finally: del self._subTicking self._tickValues = otv def makeTicks(self): yold=self._y try: self._y = self._labelAxisPos(getattr(self,'tickAxisMode','axis')) g = self._drawTicks(self.tickUp,self.tickDown) self._drawSubTicks(getattr(self,'subTickHi',0),getattr(self,'subTickLo',0),g) return g finally: self._y = yold def _labelAxisPos(self,mode=None): axis = self.joinAxis if axis: mode = mode or self.labelAxisMode if mode == 'low': return axis._y elif mode == 'high': return axis._y + axis._length return self._y class _YTicks(_XTicks): def _labelAxisPos(self,mode=None): axis = self.joinAxis if axis: mode = mode or self.labelAxisMode if mode == 'low': return axis._x elif mode == 'high': return axis._x + axis._length return self._x def makeTicks(self): xold=self._x try: self._x = self._labelAxisPos(getattr(self,'tickAxisMode','axis')) g = self._drawTicks(self.tickRight,self.tickLeft) self._drawSubTicks(getattr(self,'subTickHi',0),getattr(self,'subTickLo',0),g) return g finally: self._x = xold class XCategoryAxis(_XTicks,CategoryAxis): "X/category axis" _attrMap = AttrMap(BASE=CategoryAxis, tickUp = AttrMapValue(isNumber, desc='Tick length up the axis.'), tickDown = AttrMapValue(isNumber, desc='Tick length down the axis.'), joinAxisMode = AttrMapValue(OneOf('bottom', 'top', 'value', 'points', None), desc="Mode used for connecting axis ('bottom', 'top', 'value', 'points', None)."), ) _dataIndex = 0 def __init__(self): CategoryAxis.__init__(self) self.labels.boxAnchor = 'n' #north - top edge self.labels.dy = -5 # ultra-simple tick marks for now go between categories # and have same line style as axis - need more self.tickUp = 0 # how far into chart does tick go? self.tickDown = 5 # how far below axis does tick go? def demo(self): self.setPosition(30, 70, 140) self.configure([(10,20,30,40,50)]) self.categoryNames = ['One','Two','Three','Four','Five'] # all labels top-centre aligned apart from the last self.labels.boxAnchor = 'n' self.labels[4].boxAnchor = 'e' self.labels[4].angle = 90 d = Drawing(200, 100) d.add(self) return d def joinToAxis(self, yAxis, mode='bottom', pos=None): "Join with y-axis using some mode." _assertYAxis(yAxis) if mode == 'bottom': self._y = yAxis._y elif mode == 'top': self._y = yAxis._y + yAxis._length elif mode == 'value': self._y = yAxis.scale(pos) elif mode == 'points': self._y = pos def _joinToAxis(self): ja = self.joinAxis if ja: jam = self.joinAxisMode if jam in ('bottom', 'top'): self.joinToAxis(ja, mode=jam) elif jam in ('value', 'points'): self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) def loScale(self, idx): """returns the x position in drawing units""" return self._x + self.loPad + self._scale(idx)*self._barWidth def makeAxis(self): g = Group() self._joinToAxis() if not self.visibleAxis: return g axis = Line(self._x-self.loLLen, self._y, self._x + self._length+self.hiLLen, self._y) axis.strokeColor = self.strokeColor axis.strokeWidth = self.strokeWidth axis.strokeDashArray = self.strokeDashArray g.add(axis) return g def makeTickLabels(self): g = Group() if not self.visibleLabels: return g categoryNames = self.categoryNames if categoryNames is not None: catCount = self._catCount n = len(categoryNames) reverseDirection = self.reverseDirection barWidth = self._barWidth _y = self._labelAxisPos() _x = self._x pmv = self._pmv if self.labelAxisMode=='axispmv' else None for i in xrange(catCount): if reverseDirection: ic = catCount-i-1 else: ic = i if ic>=n: continue label=i-catCount if label in self.labels: label = self.labels[label] else: label = self.labels[i] if pmv: _dy = label.dy v = label._pmv = pmv[ic] if v<0: _dy *= -2 else: _dy = 0 lpf = label.labelPosFrac x = _x + (i+lpf) * barWidth label.setOrigin(x,_y+_dy) label.setText(categoryNames[ic] or '') g.add(label) return g class YCategoryAxis(_YTicks,CategoryAxis): "Y/category axis" _attrMap = AttrMap(BASE=CategoryAxis, tickLeft = AttrMapValue(isNumber, desc='Tick length left of the axis.'), tickRight = AttrMapValue(isNumber, desc='Tick length right of the axis.'), joinAxisMode = AttrMapValue(OneOf(('left', 'right', 'value', 'points', None)), desc="Mode used for connecting axis ('left', 'right', 'value', 'points', None)."), ) _dataIndex = 1 def __init__(self): CategoryAxis.__init__(self) self.labels.boxAnchor = 'e' #east - right edge self.labels.dx = -5 # ultra-simple tick marks for now go between categories # and have same line style as axis - need more self.tickLeft = 5 # how far left of axis does tick go? self.tickRight = 0 # how far right of axis does tick go? def demo(self): self.setPosition(50, 10, 80) self.configure([(10,20,30)]) self.categoryNames = ['One','Two','Three'] # all labels top-centre aligned apart from the last self.labels.boxAnchor = 'e' self.labels[2].boxAnchor = 's' self.labels[2].angle = 90 d = Drawing(200, 100) d.add(self) return d def joinToAxis(self, xAxis, mode='left', pos=None): "Join with x-axis using some mode." _assertXAxis(xAxis) if mode == 'left': self._x = xAxis._x * 1.0 elif mode == 'right': self._x = (xAxis._x + xAxis._length) * 1.0 elif mode == 'value': self._x = xAxis.scale(pos) * 1.0 elif mode == 'points': self._x = pos * 1.0 def _joinToAxis(self): ja = self.joinAxis if ja: jam = self.joinAxisMode if jam in ('left', 'right'): self.joinToAxis(ja, mode=jam) elif jam in ('value', 'points'): self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) def loScale(self, idx): "Returns the y position in drawing units" return self._y + self._scale(idx)*self._barWidth def makeAxis(self): g = Group() self._joinToAxis() if not self.visibleAxis: return g axis = Line(self._x, self._y-self.loLLen, self._x, self._y + self._length+self.hiLLen) axis.strokeColor = self.strokeColor axis.strokeWidth = self.strokeWidth axis.strokeDashArray = self.strokeDashArray g.add(axis) return g def makeTickLabels(self): g = Group() if not self.visibleLabels: return g categoryNames = self.categoryNames if categoryNames is not None: catCount = self._catCount n = len(categoryNames) reverseDirection = self.reverseDirection barWidth = self._barWidth labels = self.labels _x = self._labelAxisPos() _y = self._y pmv = self._pmv if self.labelAxisMode=='axispmv' else None for i in xrange(catCount): if reverseDirection: ic = catCount-i-1 else: ic = i if ic>=n: continue label=i-catCount if label in self.labels: label = self.labels[label] else: label = self.labels[i] lpf = label.labelPosFrac y = _y + (i+lpf) * barWidth if pmv: _dx = label.dx v = label._pmv = pmv[ic] if v<0: _dx *= -2 else: _dx = 0 label.setOrigin(_x+_dx, y) label.setText(categoryNames[ic] or '') g.add(label) return g class TickLabeller: '''Abstract base class which may be used to indicate a change in the call signature for callable label formats ''' def __call__(self,axis,value): return 'Abstract class instance called' #this matches the old python str behaviour _defaultLabelFormatter = lambda x: '%.12g' % x # Value axes. class ValueAxis(_AxisG): "Abstract value axis, unusable in itself." _attrMap = AttrMap( forceZero = AttrMapValue(EitherOr((isBoolean,OneOf('near'))), desc='Ensure zero in range if true.'), visible = AttrMapValue(isBoolean, desc='Display entire object, if true.'), visibleAxis = AttrMapValue(isBoolean, desc='Display axis line, if true.'), visibleLabels = AttrMapValue(isBoolean, desc='Display axis labels, if true.'), visibleTicks = AttrMapValue(isBoolean, desc='Display axis ticks, if true.'), visibleGrid = AttrMapValue(isBoolean, desc='Display axis grid, if true.'), strokeWidth = AttrMapValue(isNumber, desc='Width of axis line and ticks.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color of axis line and ticks.'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array used for axis line.'), strokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Line cap 0=butt, 1=round & 2=square"), strokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Line join 0=miter, 1=round & 2=bevel"), strokeMiterLimit = AttrMapValue(isNumber,desc="miter limit control miter line joins"), gridStrokeWidth = AttrMapValue(isNumber, desc='Width of grid lines.'), gridStrokeColor = AttrMapValue(isColorOrNone, desc='Color of grid lines.'), gridStrokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array used for grid lines.'), gridStrokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Grid Line cap 0=butt, 1=round & 2=square"), gridStrokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Grid Line join 0=miter, 1=round & 2=bevel"), gridStrokeMiterLimit = AttrMapValue(isNumber,desc="Grid miter limit control miter line joins"), gridStart = AttrMapValue(isNumberOrNone, desc='Start of grid lines wrt axis origin'), gridEnd = AttrMapValue(isNumberOrNone, desc='End of grid lines wrt axis origin'), drawGridLast = AttrMapValue(isBoolean, desc='if true draw gridlines after everything else.'), minimumTickSpacing = AttrMapValue(isNumber, desc='Minimum value for distance between ticks.'), maximumTicks = AttrMapValue(isNumber, desc='Maximum number of ticks.'), labels = AttrMapValue(None, desc='Handle of the axis labels.'), labelAxisMode = AttrMapValue(OneOf('high','low','axis'), desc="Like joinAxisMode, but for the axis labels"), labelTextFormat = AttrMapValue(None, desc='Formatting string or function used for axis labels.'), labelTextPostFormat = AttrMapValue(None, desc='Extra Formatting string.'), labelTextScale = AttrMapValue(isNumberOrNone, desc='Scaling for label tick values.'), valueMin = AttrMapValue(isNumberOrNone, desc='Minimum value on axis.'), valueMax = AttrMapValue(isNumberOrNone, desc='Maximum value on axis.'), valueStep = AttrMapValue(isNumberOrNone, desc='Step size used between ticks.'), valueSteps = AttrMapValue(isListOfNumbersOrNone, desc='List of step sizes used between ticks.'), avoidBoundFrac = AttrMapValue(EitherOr((isNumberOrNone,SequenceOf(isNumber,emptyOK=0,lo=2,hi=2))), desc='Fraction of interval to allow above and below.'), avoidBoundSpace = AttrMapValue(EitherOr((isNumberOrNone,SequenceOf(isNumber,emptyOK=0,lo=2,hi=2))), desc='Space to allow above and below.'), abf_ignore_zero = AttrMapValue(EitherOr((NoneOr(isBoolean),SequenceOf(isBoolean,emptyOK=0,lo=2,hi=2))), desc='Set to True to make the avoidBoundFrac calculations treat zero as non-special'), rangeRound=AttrMapValue(OneOf('none','both','ceiling','floor'),'How to round the axis limits'), zrangePref = AttrMapValue(isNumberOrNone, desc='Zero range axis limit preference.'), style = AttrMapValue(OneOf('normal','stacked','parallel_3d'),"How values are plotted!"), skipEndL = AttrMapValue(OneOf('none','start','end','both'), desc='Skip high/low tick labels'), origShiftIPC = AttrMapValue(isNumberOrNone, desc='Lowest label shift interval ratio.'), origShiftMin = AttrMapValue(isNumberOrNone, desc='Minimum amount to shift.'), origShiftSpecialValue = AttrMapValue(isNumberOrNone, desc='special value for shift'), tickAxisMode = AttrMapValue(OneOf('high','low','axis'), desc="Like joinAxisMode, but for the ticks"), reverseDirection = AttrMapValue(isBoolean, desc='If true reverse category direction.'), annotations = AttrMapValue(None,desc='list of annotations'), loLLen = AttrMapValue(isNumber, desc='extra line length before start of the axis'), hiLLen = AttrMapValue(isNumber, desc='extra line length after end of the axis'), subTickNum = AttrMapValue(isNumber, desc='Number of axis sub ticks, if >0'), subTickLo = AttrMapValue(isNumber, desc='sub tick down or left'), subTickHi = AttrMapValue(isNumber, desc='sub tick up or right'), visibleSubTicks = AttrMapValue(isBoolean, desc='Display axis sub ticks, if true.'), visibleSubGrid = AttrMapValue(isBoolean, desc='Display axis sub grid, if true.'), subGridStrokeWidth = AttrMapValue(isNumber, desc='Width of grid lines.'), subGridStrokeColor = AttrMapValue(isColorOrNone, desc='Color of grid lines.'), subGridStrokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array used for grid lines.'), subGridStrokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Grid Line cap 0=butt, 1=round & 2=square"), subGridStrokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Grid Line join 0=miter, 1=round & 2=bevel"), subGridStrokeMiterLimit = AttrMapValue(isNumber,desc="Grid miter limit control miter line joins"), subGridStart = AttrMapValue(isNumberOrNone, desc='Start of grid lines wrt axis origin'), subGridEnd = AttrMapValue(isNumberOrNone, desc='End of grid lines wrt axis origin'), tickStrokeWidth = AttrMapValue(isNumber, desc='Width of ticks if specified.'), subTickStrokeWidth = AttrMapValue(isNumber, desc='Width of sub ticks if specified.'), subTickStrokeColor = AttrMapValue(isColorOrNone, desc='Color of sub ticks if specified.'), tickStrokeColor = AttrMapValue(isColorOrNone, desc='Color of ticks if specified.'), keepTickLabelsInside = AttrMapValue(isBoolean, desc='Ensure tick labels do not project beyond bounds of axis if true'), skipGrid = AttrMapValue(OneOf('none','top','both','bottom'),"grid lines to skip top bottom both none"), requiredRange = AttrMapValue(isNumberOrNone, desc='Minimum required value range.'), innerTickDraw = AttrMapValue(isNoneOrCallable, desc="Callable to replace _drawInnerTicks"), ) def __init__(self,**kw): assert self.__class__.__name__!='ValueAxis', 'Abstract Class ValueAxis Instantiated' self._setKeywords(**kw) self._setKeywords( _configured = 0, # private properties set by methods. The initial values # here are to make demos easy; they would always be # overridden in real life. _x = 50, _y = 50, _length = 100, # public properties visible = 1, visibleAxis = 1, visibleLabels = 1, visibleTicks = 1, visibleGrid = 0, forceZero = 0, strokeWidth = 1, strokeColor = STATE_DEFAULTS['strokeColor'], strokeDashArray = STATE_DEFAULTS['strokeDashArray'], strokeLineJoin = STATE_DEFAULTS['strokeLineJoin'], strokeLineCap = STATE_DEFAULTS['strokeLineCap'], strokeMiterLimit = STATE_DEFAULTS['strokeMiterLimit'], gridStrokeWidth = 0.25, gridStrokeColor = STATE_DEFAULTS['strokeColor'], gridStrokeDashArray = STATE_DEFAULTS['strokeDashArray'], gridStrokeLineJoin = STATE_DEFAULTS['strokeLineJoin'], gridStrokeLineCap = STATE_DEFAULTS['strokeLineCap'], gridStrokeMiterLimit = STATE_DEFAULTS['strokeMiterLimit'], gridStart = None, gridEnd = None, drawGridLast = False, visibleSubGrid = 0, visibleSubTicks = 0, subTickNum = 0, subTickLo = 0, subTickHi = 0, subGridStrokeLineJoin = STATE_DEFAULTS['strokeLineJoin'], subGridStrokeLineCap = STATE_DEFAULTS['strokeLineCap'], subGridStrokeMiterLimit = STATE_DEFAULTS['strokeMiterLimit'], subGridStrokeWidth = 0.25, subGridStrokeColor = STATE_DEFAULTS['strokeColor'], subGridStrokeDashArray = STATE_DEFAULTS['strokeDashArray'], subGridStart = None, subGridEnd = None, labels = TypedPropertyCollection(Label), keepTickLabelsInside = 0, # how close can the ticks be? minimumTickSpacing = 10, maximumTicks = 7, # a format string like '%0.2f' # or a function which takes the value as an argument and returns a string _labelTextFormat = None, labelAxisMode = 'axis', labelTextFormat = None, labelTextPostFormat = None, labelTextScale = None, # if set to None, these will be worked out for you. # if you override any or all of them, your values # will be used. valueMin = None, valueMax = None, valueStep = None, avoidBoundFrac = None, avoidBoundSpace = None, abf_ignore_zero = False, rangeRound = 'none', zrangePref = 0, style = 'normal', skipEndL='none', origShiftIPC = None, origShiftMin = None, origShiftSpecialValue = None, tickAxisMode = 'axis', reverseDirection=0, loLLen=0, hiLLen=0, requiredRange=0, ) self.labels.angle = 0 def setPosition(self, x, y, length): # ensure floating point self._x = float(x) self._y = float(y) self._length = float(length) def configure(self, dataSeries): """Let the axis configure its scale and range based on the data. Called after setPosition. Let it look at a list of lists of numbers determine the tick mark intervals. If valueMin, valueMax and valueStep are configured then it will use them; if any of them are set to None it will look at the data and make some sensible decision. You may override this to build custom axes with irregular intervals. It creates an internal variable self._values, which is a list of numbers to use in plotting. """ self._setRange(dataSeries) self._configure_end() def _configure_end(self): self._calcTickmarkPositions() self._calcScaleFactor() self._configured = 1 def _getValueStepAndTicks(self, valueMin, valueMax,cache={}): try: K = (valueMin,valueMax) r = cache[K] except: self._valueMin = valueMin self._valueMax = valueMax valueStep,T = self._calcStepAndTickPositions() r = cache[K] = valueStep, T, valueStep*1e-8 return r def _preRangeAdjust(self,valueMin,valueMax): rr = self.requiredRange if rr>0: r = valueMax - valueMin if r=100 and y1<100: y2 = y2 + 100 - y1 y1 = 100 elif valueMin>=0 and y1<0: y2 = y2 - y1 y1 = 0 valueMin = self._cValueMin = y1 valueMax = self._cValueMax = y2 return valueMin,valueMax def _setRange(self, dataSeries): """Set minimum and maximum axis values. The dataSeries argument is assumed to be a list of data vectors. Each vector is itself a list or tuple of numbers. Returns a min, max tuple. """ oMin = valueMin = self.valueMin oMax = valueMax = self.valueMax if valueMin is None: valueMin = self._cValueMin = _findMin(dataSeries,self._dataIndex,0) if valueMax is None: valueMax = self._cValueMax = _findMax(dataSeries,self._dataIndex,0) if valueMin == valueMax: if valueMax==0: if oMin is None and oMax is None: zrp = getattr(self,'zrangePref',0) if zrp>0: valueMax = zrp valueMin = 0 elif zrp<0: valueMax = 0 valueMin = zrp else: valueMax = 0.01 valueMin = -0.01 elif self.valueMin is None: valueMin = -0.01 else: valueMax = 0.01 else: if valueMax>0: valueMax = 1.2*valueMax valueMin = 0.0 else: valueMax = 0.0 valueMin = 1.2*valueMin if getattr(self,'_bubblePlot',None): bubbleMax = float(_findMax(dataSeries,2,0)) frac=.25 bubbleV=frac*(valueMax-valueMin) self._bubbleV = bubbleV self._bubbleMax = bubbleMax self._bubbleRadius = frac*self._length def special(T,x,func,bubbleV=bubbleV,bubbleMax=bubbleMax): try: v = T[2] except IndexError: v = bubbleMAx*0.1 bubbleV *= (v/bubbleMax)**0.5 return func(T[x]+bubbleV,T[x]-bubbleV) if oMin is None: valueMin = self._cValueMin = _findMin(dataSeries,self._dataIndex,0,special=special) if oMax is None: valueMax = self._cValueMax = _findMax(dataSeries,self._dataIndex,0,special=special) valueMin, valueMax = self._preRangeAdjust(valueMin,valueMax) rangeRound = self.rangeRound cMin = valueMin cMax = valueMax forceZero = self.forceZero if forceZero: if forceZero=='near': forceZero = min(abs(valueMin),abs(valueMax)) <= 5*(valueMax-valueMin) if forceZero: if valueMax<0: valueMax=0 elif valueMin>0: valueMin = 0 abf = self.avoidBoundFrac do_rr = not getattr(self,'valueSteps',None) do_abf = abf and do_rr if not isSeq(abf): abf = abf, abf abfiz = getattr(self,'abf_ignore_zero', False) if not isSeq(abfiz): abfiz = abfiz, abfiz do_rr = rangeRound != 'none' and do_rr if do_rr: rrn = rangeRound in ['both','floor'] rrx = rangeRound in ['both','ceiling'] else: rrn = rrx = 0 abS = self.avoidBoundSpace do_abs = abS if do_abs: if not isSeq(abS): abS = abS, abS aL = float(self._length) go = do_rr or do_abf or do_abs cache = {} iter = 0 while go and iter<=10: iter += 1 go = 0 if do_abf or do_abs: valueStep, T, fuzz = self._getValueStepAndTicks(valueMin, valueMax, cache) if do_abf: i0 = valueStep*abf[0] i1 = valueStep*abf[1] else: i0 = i1 = 0 if do_abs: sf = (valueMax-valueMin)/aL i0 = max(i0,abS[0]*sf) i1 = max(i1,abS[1]*sf) if rrn: v = T[0] else: v = valueMin u = cMin-i0 if (abfiz[0] or abs(v)>fuzz) and v>=u+fuzz: valueMin = u go = 1 if rrx: v = T[-1] else: v = valueMax u = cMax+i1 if (abfiz[1] or abs(v)>fuzz) and v<=u-fuzz: valueMax = u go = 1 if do_rr: valueStep, T, fuzz = self._getValueStepAndTicks(valueMin, valueMax, cache) if rrn: if valueMin=T[0]+fuzz valueMin = T[0] if rrx: if valueMax>T[-1]+fuzz: valueMax = T[-1]+valueStep go = 1 else: go = valueMax<=T[-1]-fuzz valueMax = T[-1] if iter and not go: self._computedValueStep = valueStep else: self._computedValueStep = None self._valueMin = valueMin self._valueMax = valueMax origShiftIPC = self.origShiftIPC origShiftMin = self.origShiftMin if origShiftMin is not None or origShiftIPC is not None: origShiftSpecialValue = self.origShiftSpecialValue self._calcValueStep() valueMax, valueMin = self._valueMax, self._valueMin if origShiftSpecialValue is None or abs(origShiftSpecialValue-valueMin)<1e-6: if origShiftIPC: m = origShiftIPC*self._valueStep else: m = 0 if origShiftMin: m = max(m,(valueMax-valueMin)*origShiftMin/self._length) self._valueMin -= m self._rangeAdjust() def _pseudo_configure(self): self._valueMin = self.valueMin self._valueMax = self.valueMax if hasattr(self,'_subTickValues'): del self._subTickValues self._configure_end() def _rangeAdjust(self): """Override this if you want to alter the calculated range. E.g. if want a minumamum range of 30% or don't want 100% as the first point. """ pass def _adjustAxisTicks(self): '''Override if you want to put slack at the ends of the axis eg if you don't want the last tick to be at the bottom etc ''' pass def _calcScaleFactor(self): """Calculate the axis' scale factor. This should be called only *after* the axis' range is set. Returns a number. """ self._scaleFactor = self._length / float(self._valueMax - self._valueMin) return self._scaleFactor def _calcStepAndTickPositions(self): valueStep = getattr(self,'_computedValueStep',None) if valueStep: del self._computedValueStep self._valueStep = valueStep else: self._calcValueStep() valueStep = self._valueStep valueMin = self._valueMin valueMax = self._valueMax fuzz = 1e-8*valueStep rangeRound = self.rangeRound i0 = int(float(valueMin)/valueStep) v = i0*valueStep if rangeRound in ('both','floor'): if v>valueMin+fuzz: i0 -= 1 elif vvalueMax+fuzz: i1 -= 1 return valueStep,[i*valueStep for i in xrange(i0,i1+1)] def _calcTickPositions(self): return self._calcStepAndTickPositions()[1] def _calcSubTicks(self): if not hasattr(self,'_tickValues'): self._pseudo_configure() otv = self._tickValues if not hasattr(self,'_subTickValues'): acn = self.__class__.__name__ if acn[:11]=='NormalDateX': iFuzz = 0 dCnv = int else: iFuzz = 1e-8 dCnv = lambda x:x OTV = [tv for tv in otv if getattr(tv,'_doSubTicks',1)] T = [].append nst = int(self.subTickNum) i = len(OTV) if i<2: self._subTickValues = [] else: if i==2: dst = OTV[1]-OTV[0] elif i==3: dst = max(OTV[1]-OTV[0],OTV[2]-OTV[1]) else: i >>= 1 dst = OTV[i+1] - OTV[i] fuzz = dst*iFuzz vn = self._valueMin+fuzz vx = self._valueMax-fuzz if OTV[0]>vn: OTV.insert(0,OTV[0]-dst) if OTV[-1]=vx: continue T(t) self._subTickValues = T.__self__ self._tickValues = self._subTickValues return otv def _calcTickmarkPositions(self): """Calculate a list of tick positions on the axis. Returns a list of numbers.""" self._tickValues = getattr(self,'valueSteps',None) if self._tickValues: return self._tickValues self._tickValues = self._calcTickPositions() self._adjustAxisTicks() return self._tickValues def _calcValueStep(self): '''Calculate _valueStep for the axis or get from valueStep.''' if self.valueStep is None: rawRange = self._valueMax - self._valueMin rawInterval = rawRange / min(float(self.maximumTicks-1),(float(self._length)/self.minimumTickSpacing)) self._valueStep = nextRoundNumber(rawInterval) else: self._valueStep = self.valueStep def _allIntTicks(self): return _allInt(self._tickValues) def makeTickLabels(self): g = Group() if not self.visibleLabels: return g f = self._labelTextFormat # perhaps someone already set it if f is None: f = self.labelTextFormat or (self._allIntTicks() and '%.0f' or _defaultLabelFormatter) elif f is str and self._allIntTicks(): f = '%.0f' elif hasattr(f,'calcPlaces'): f.calcPlaces(self._tickValues) post = self.labelTextPostFormat scl = self.labelTextScale pos = [self._x, self._y] d = self._dataIndex pos[1-d] = self._labelAxisPos() labels = self.labels if self.skipEndL!='none': if self.isXAxis: sk = self._x else: sk = self._y if self.skipEndL=='start': sk = [sk] else: sk = [sk,sk+self._length] if self.skipEndL=='end': del sk[0] else: sk = [] nticks = len(self._tickValues) nticks1 = nticks - 1 for i,tick in enumerate(self._tickValues): label = i-nticks if label in labels: label = labels[label] else: label = labels[i] if f and label.visible: v = self.scale(tick) if sk: for skv in sk: if abs(skv-v)<1e-6: v = None break if v is not None: if scl is not None: t = tick*scl else: t = tick if isinstance(f, str): txt = f % t elif isSeq(f): #it's a list, use as many items as we get if i < len(f): txt = f[i] else: txt = '' elif hasattr(f,'__call__'): if isinstance(f,TickLabeller): txt = f(self,t) else: txt = f(t) else: raise ValueError('Invalid labelTextFormat %s' % f) if post: txt = post % txt pos[d] = v label.setOrigin(*pos) label.setText(txt) #special property to ensure a label doesn't project beyond the bounds of an x-axis if self.keepTickLabelsInside: if isinstance(self, XValueAxis): #not done yet for y axes a_x = self._x if not i: #first one x0, y0, x1, y1 = label.getBounds() if x0 < a_x: label = label.clone(dx=label.dx + a_x - x0) if i==nticks1: #final one a_x1 = a_x +self._length x0, y0, x1, y1 = label.getBounds() if x1 > a_x1: label=label.clone(dx=label.dx-x1+a_x1) g.add(label) return g def scale(self, value): """Converts a numeric value to a plotarea position. The chart first configures the axis, then asks it to """ assert self._configured, "Axis cannot scale numbers before it is configured" if value is None: value = 0 #this could be made more efficient by moving the definition of org and sf into the configuration org = (self._x, self._y)[self._dataIndex] sf = self._scaleFactor if self.reverseDirection: sf = -sf org += self._length return org + sf*(value - self._valueMin) class XValueAxis(_XTicks,ValueAxis): "X/value axis" _attrMap = AttrMap(BASE=ValueAxis, tickUp = AttrMapValue(isNumber, desc='Tick length up the axis.'), tickDown = AttrMapValue(isNumber, desc='Tick length down the axis.'), joinAxis = AttrMapValue(None, desc='Join both axes if true.'), joinAxisMode = AttrMapValue(OneOf('bottom', 'top', 'value', 'points', None), desc="Mode used for connecting axis ('bottom', 'top', 'value', 'points', None)."), joinAxisPos = AttrMapValue(isNumberOrNone, desc='Position at which to join with other axis.'), ) # Indicate the dimension of the data we're interested in. _dataIndex = 0 def __init__(self,**kw): ValueAxis.__init__(self,**kw) self.labels.boxAnchor = 'n' self.labels.dx = 0 self.labels.dy = -5 self.tickUp = 0 self.tickDown = 5 self.joinAxis = None self.joinAxisMode = None self.joinAxisPos = None def demo(self): self.setPosition(20, 50, 150) self.configure([(10,20,30,40,50)]) d = Drawing(200, 100) d.add(self) return d def joinToAxis(self, yAxis, mode='bottom', pos=None): "Join with y-axis using some mode." _assertYAxis(yAxis) if mode == 'bottom': self._y = yAxis._y * 1.0 elif mode == 'top': self._y = (yAxis._y + yAxis._length) * 1.0 elif mode == 'value': self._y = yAxis.scale(pos) * 1.0 elif mode == 'points': self._y = pos * 1.0 def _joinToAxis(self): ja = self.joinAxis if ja: jam = self.joinAxisMode or 'bottom' if jam in ('bottom', 'top'): self.joinToAxis(ja, mode=jam) elif jam in ('value', 'points'): self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) def makeAxis(self): g = Group() self._joinToAxis() if not self.visibleAxis: return g axis = Line(self._x-self.loLLen, self._y, self._x + self._length+self.hiLLen, self._y) axis.strokeColor = self.strokeColor axis.strokeWidth = self.strokeWidth axis.strokeDashArray = self.strokeDashArray g.add(axis) return g #additional utilities to help specify calendar dates on which tick marks #are to be plotted. After some thought, when the magic algorithm fails, #we can let them specify a number of days-of-the-year to tick in any given #year. ################################################################################# # # Preliminary support objects/functions for the axis used in time series charts # ################################################################################# _months = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'] _maxDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] def parseDayAndMonth(dmstr): """This accepts and validates strings like "31-Dec" i.e. dates of no particular year. 29 Feb is allowed. These can be used for recurring dates. It returns a (dd, mm) pair where mm is the month integer. If the text is not valid it raises an error. """ dstr, mstr = dmstr.split('-') dd = int(dstr) mstr = mstr.lower() mm = _months.index(mstr) + 1 assert dd <= _maxDays[mm-1] return (dd, mm) class _isListOfDaysAndMonths(Validator): """This accepts and validates lists of strings like "31-Dec" i.e. dates of no particular year. 29 Feb is allowed. These can be used for recurring dates. """ def test(self,x): if isSeq(x): answer = True for element in x: try: dd, mm = parseDayAndMonth(element) except: answer = False return answer else: return False def normalize(self,x): #we store them as presented, it's the most presentable way return x isListOfDaysAndMonths = _isListOfDaysAndMonths() _NDINTM = 1,2,3,6,12,24,60,120,180,240,300,360,420,480,540,600,720,840,960,1080,1200,2400 class NormalDateXValueAxis(XValueAxis): """An X axis applying additional rules. Depending on the data and some built-in rules, the axis displays normalDate values as nicely formatted dates. The client chart should have NormalDate X values. """ _attrMap = AttrMap(BASE = XValueAxis, bottomAxisLabelSlack = AttrMapValue(isNumber, desc="Fractional amount used to adjust label spacing"), niceMonth = AttrMapValue(isBoolean, desc="Flag for displaying months 'nicely'."), forceEndDate = AttrMapValue(isBoolean, desc='Flag for enforced displaying of last date value.'), forceFirstDate = AttrMapValue(isBoolean, desc='Flag for enforced displaying of first date value.'), forceDatesEachYear = AttrMapValue(isListOfDaysAndMonths, desc='List of dates in format "31-Dec",' + '"1-Jan". If present they will always be used for tick marks in the current year, rather ' + 'than the dates chosen by the automatic algorithm. Hyphen compulsory, case of month optional.'), xLabelFormat = AttrMapValue(None, desc="Label format string (e.g. '{mm}/{yy}') or function."), dayOfWeekName = AttrMapValue(SequenceOf(isString,emptyOK=0,lo=7,hi=7), desc='Weekday names.'), monthName = AttrMapValue(SequenceOf(isString,emptyOK=0,lo=12,hi=12), desc='Month names.'), dailyFreq = AttrMapValue(isBoolean, desc='True if we are to assume daily data to be ticked at end of month.'), specifiedTickDates = AttrMapValue(NoneOr(SequenceOf(isNormalDate)), desc='Actual tick values to use; no calculations done'), specialTickClear = AttrMapValue(isBoolean, desc='clear rather than delete close ticks when forced first/end dates'), skipGrid = AttrMapValue(OneOf('none','top','both','bottom'),"grid lines to skip top bottom both none"), ) _valueClass = normalDate.ND def __init__(self,**kw): XValueAxis.__init__(self,**kw) # some global variables still used... self.bottomAxisLabelSlack = 0.1 self.niceMonth = 1 self.forceEndDate = 0 self.forceFirstDate = 0 self.forceDatesEachYear = [] self.dailyFreq = 0 self.xLabelFormat = "{mm}/{yy}" self.dayOfWeekName = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] self.monthName = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] self.specialTickClear = 0 self.valueSteps = self.specifiedTickDates = None def _scalar2ND(self, x): "Convert a scalar to a NormalDate value." d = self._valueClass() d.normalize(x) return d def _dateFormatter(self, v): "Create a formatted label for some value." if not isinstance(v,normalDate.NormalDate): v = self._scalar2ND(v) d, m = normalDate._dayOfWeekName, normalDate._monthName try: normalDate._dayOfWeekName, normalDate._monthName = self.dayOfWeekName, self.monthName return v.formatMS(self.xLabelFormat) finally: normalDate._dayOfWeekName, normalDate._monthName = d, m def _xAxisTicker(self, xVals): """Complex stuff... Needs explanation... Yes please says Andy :-(. Modified on 19 June 2006 to attempt to allow a mode where one can specify recurring days and months. """ VC = self._valueClass axisLength = self._length formatter = self._dateFormatter if isinstance(formatter,TickLabeller): def formatter(tick): return self._dateFormatter(self,tick) firstDate = xVals[0] if not self.valueMin else VC(self.valueMin) endDate = xVals[-1] if not self.valueMax else VC(self.valueMax) labels = self.labels fontName, fontSize, leading = labels.fontName, labels.fontSize, labels.leading textAnchor, boxAnchor, angle = labels.textAnchor, labels.boxAnchor, labels.angle RBL = _textBoxLimits(formatter(firstDate).split('\n'),fontName, fontSize,leading or 1.2*fontSize,textAnchor,boxAnchor) RBL = _rotatedBoxLimits(RBL[0],RBL[1],RBL[2],RBL[3], angle) xLabelW = RBL[1]-RBL[0] xLabelH = RBL[3]-RBL[2] w = max(xLabelW,labels.width or 0,self.minimumTickSpacing) W = w+w*self.bottomAxisLabelSlack ticks = [] labels = [] maximumTicks = self.maximumTicks if self.specifiedTickDates: ticks = [VC(x) for x in self.specifiedTickDates] labels = [formatter(d) for d in ticks] if self.forceFirstDate and firstDate==ticks[0] and (axisLength/float(ticks[-1]-ticks[0]))*(ticks[1]-ticks[0])<=W: if self.specialTickClear: labels[1] = '' else: del ticks[1], labels[1] if self.forceEndDate and endDate==ticks[-1] and (axisLength/float(ticks[-1]-ticks[0]))*(ticks[-1]-ticks[-2])<=W: if self.specialTickClear: labels[-2] = '' else: del ticks[-2], labels[-2] return ticks, labels #AR 20060619 - first we try the approach where the user has explicitly #specified the days of year to be ticked. Other explicit routes may #be added. if self.forceDatesEachYear: forcedPartialDates = list(map(parseDayAndMonth, self.forceDatesEachYear)) #generate the list of dates in the range. #print 'dates range from %s to %s' % (firstDate, endDate) firstYear = firstDate.year() lastYear = endDate.year() ticks = [] labels = [] yyyy = firstYear #generate all forced dates between the year it starts and the year it #ends, adding them if within range. while yyyy <= lastYear: for (dd, mm) in forcedPartialDates: theDate = normalDate.ND((yyyy, mm, dd)) if theDate >= firstDate and theDate <= endDate: ticks.append(theDate) labels.append(formatter(theDate)) yyyy += 1 #first and last may still be forced in. if self.forceFirstDate and firstDate!=ticks[0]: ticks.insert(0, firstDate) labels.insert(0,formatter(firstDate)) if (axisLength/float(ticks[-1]-ticks[0]))*(ticks[1]-ticks[0])<=W: if self.specialTickClear: labels[1] = '' else: del ticks[1], labels[1] if self.forceEndDate and endDate!=ticks[-1]: ticks.append(endDate) labels.append(formatter(endDate)) if (axisLength/float(ticks[-1]-ticks[0]))*(ticks[-1]-ticks[-2])<=W: if self.specialTickClear: labels[-2] = '' else: del ticks[-2], labels[-2] #print 'xVals found on forced dates =', ticks return ticks, labels def addTick(i, xVals=xVals, formatter=formatter, ticks=ticks, labels=labels): ticks.insert(0,xVals[i]) labels.insert(0,formatter(xVals[i])) n = len(xVals) #otherwise, we apply the 'magic algorithm...' which looks for nice spacing #based on the size and separation of the labels. for d in _NDINTM: k = n/d if k<=maximumTicks and k*W <= axisLength: i = n-1 if self.niceMonth: j = endDate.month() % (d<=12 and d or 12) if j: if self.forceEndDate: addTick(i) ticks[0]._doSubTicks=0 i -= j #weird first date ie not at end of month try: wfd = firstDate.month() == xVals[1].month() except: wfd = 0 while i>=wfd: addTick(i) i -= d if self.forceFirstDate and ticks[0]!=firstDate: addTick(0) ticks[0]._doSubTicks=0 if (axisLength/float(ticks[-1]-ticks[0]))*(ticks[1]-ticks[0])<=W: if self.specialTickClear: labels[1] = '' else: del ticks[1], labels[1] if self.forceEndDate and self.niceMonth and j: if (axisLength/float(ticks[-1]-ticks[0]))*(ticks[-1]-ticks[-2])<=W: if self.specialTickClear: labels[-2] = '' else: del ticks[-2], labels[-2] try: if labels[0] and labels[0]==labels[1]: del ticks[1], labels[1] except IndexError: pass return ticks, labels raise ValueError('Problem selecting NormalDate value axis tick positions') def _convertXV(self,data): '''Convert all XValues to a standard normalDate type''' VC = self._valueClass for D in data: for i in xrange(len(D)): x, y = D[i] if not isinstance(x,VC): D[i] = (VC(x),y) def _getStepsAndLabels(self,xVals): if self.dailyFreq: xEOM = [] pm = 0 px = xVals[0] for x in xVals: m = x.month() if pm!=m: if pm: xEOM.append(px) pm = m px = x px = xVals[-1] if xEOM[-1]!=x: xEOM.append(px) steps, labels = self._xAxisTicker(xEOM) else: steps, labels = self._xAxisTicker(xVals) return steps, labels def configure(self, data): self._convertXV(data) xVals = set() for x in data: for dv in x: xVals.add(dv[0]) xVals = list(xVals) xVals.sort() VC = self._valueClass steps,labels = self._getStepsAndLabels(xVals) valueMin, valueMax = self.valueMin, self.valueMax valueMin = xVals[0] if valueMin is None else VC(valueMin) valueMax = xVals[-1] if valueMax is None else VC(valueMax) self._valueMin, self._valueMax = valueMin, valueMax self._tickValues = steps self._labelTextFormat = labels self._scaleFactor = self._length / float(valueMax - valueMin) self._tickValues = steps self._configured = 1 class YValueAxis(_YTicks,ValueAxis): "Y/value axis" _attrMap = AttrMap(BASE=ValueAxis, tickLeft = AttrMapValue(isNumber, desc='Tick length left of the axis.'), tickRight = AttrMapValue(isNumber, desc='Tick length right of the axis.'), joinAxis = AttrMapValue(None, desc='Join both axes if true.'), joinAxisMode = AttrMapValue(OneOf(('left', 'right', 'value', 'points', None)), desc="Mode used for connecting axis ('left', 'right', 'value', 'points', None)."), joinAxisPos = AttrMapValue(isNumberOrNone, desc='Position at which to join with other axis.'), ) # Indicate the dimension of the data we're interested in. _dataIndex = 1 def __init__(self): ValueAxis.__init__(self) self.labels.boxAnchor = 'e' self.labels.dx = -5 self.labels.dy = 0 self.tickRight = 0 self.tickLeft = 5 self.joinAxis = None self.joinAxisMode = None self.joinAxisPos = None def demo(self): data = [(10, 20, 30, 42)] self.setPosition(100, 10, 80) self.configure(data) drawing = Drawing(200, 100) drawing.add(self) return drawing def joinToAxis(self, xAxis, mode='left', pos=None): "Join with x-axis using some mode." _assertXAxis(xAxis) if mode == 'left': self._x = xAxis._x * 1.0 elif mode == 'right': self._x = (xAxis._x + xAxis._length) * 1.0 elif mode == 'value': self._x = xAxis.scale(pos) * 1.0 elif mode == 'points': self._x = pos * 1.0 def _joinToAxis(self): ja = self.joinAxis if ja: jam = self.joinAxisMode if jam in ('left', 'right'): self.joinToAxis(ja, mode=jam) elif jam in ('value', 'points'): self.joinToAxis(ja, mode=jam, pos=self.joinAxisPos) def makeAxis(self): g = Group() self._joinToAxis() if not self.visibleAxis: return g axis = Line(self._x, self._y-self.loLLen, self._x, self._y + self._length+self.hiLLen) axis.strokeColor = self.strokeColor axis.strokeWidth = self.strokeWidth axis.strokeDashArray = self.strokeDashArray g.add(axis) return g class TimeValueAxis: _mc = 60 _hc = 60*_mc _dc = 24*_hc def __init__(self,*args,**kwds): if not self.labelTextFormat: self.labelTextFormat = self.timeLabelTextFormatter self._saved_tickInfo = {} def _calcValueStep(self): '''Calculate _valueStep for the axis or get from valueStep.''' if self.valueStep is None: rawRange = self._valueMax - self._valueMin rawInterval = rawRange / min(float(self.maximumTicks-1),(float(self._length)/self.minimumTickSpacing)) #here's where we try to choose the correct value for the unit if rawInterval >= self._dc: d = self._dc self._unit = 'days' elif rawInterval >= self._hc: d = self._hc self._unit = 'hours' elif rawInterval >= self._mc: d = self._mc self._unit = 'minutes' else: d = 1 self._unit = 'seconds' self._unitd = d if d>1: rawInterval = int(rawInterval/d) self._valueStep = nextRoundNumber(rawInterval) * d else: self._valueStep = self.valueStep def timeLabelTextFormatter(self,val): u = self._unitd k = (u,tuple(self._tickValues)) if k in self._saved_tickInfo: fmt = self._saved_tickInfo[k] else: uf = float(u) tv = [v/uf for v in self._tickValues] s = self._unit[0] if _allInt(tv): fmt = lambda x, uf=uf, s=s: '%.0f%s' % (x/uf,s) else: stv = ['%.10f' % v for v in tv] stvl = max((len(v.rstrip('0'))-v.index('.')-1) for v in stv) if u==1: fmt = lambda x,uf=uf,fmt='%%.%dfs' % stvl: fmt % (x/uf) else: #see if we can represent fractions fm = 24 if u==self._dc else 60 fv = [(v - int(v))*fm for v in tv] if _allInt(fv): s1 = 'h' if u==self._dc else ('m' if u==self._mc else 's') fmt = lambda x,uf=uf,fm=fm, fmt='%%d%s%%d%%s' % (s,s1): fmt % (int(x/uf),int((x/uf - int(x/uf))*fm)) else: fmt = lambda x,uf=uf,fmt='%%.%df%s' % (stvl,s): fmt % (x/uf) self._saved_tickInfo[k] = fmt return fmt(val) class XTimeValueAxis(TimeValueAxis,XValueAxis): def __init__(self,*args,**kwds): XValueAxis.__init__(self,*args,**kwds) TimeValueAxis.__init__(self,*args,**kwds) class AdjYValueAxis(YValueAxis): """A Y-axis applying additional rules. Depending on the data and some built-in rules, the axis may choose to adjust its range and origin. """ _attrMap = AttrMap(BASE = YValueAxis, leftAxisPercent = AttrMapValue(isBoolean, desc='When true add percent sign to label values.'), leftAxisOrigShiftIPC = AttrMapValue(isNumber, desc='Lowest label shift interval ratio.'), leftAxisOrigShiftMin = AttrMapValue(isNumber, desc='Minimum amount to shift.'), leftAxisSkipLL0 = AttrMapValue(EitherOr((isBoolean,isListOfNumbers)), desc='Skip/Keep lowest tick label when true/false.\nOr skiplist'), labelVOffset = AttrMapValue(isNumber, desc='add this to the labels'), ) def __init__(self,**kw): YValueAxis.__init__(self,**kw) self.requiredRange = 30 self.leftAxisPercent = 1 self.leftAxisOrigShiftIPC = 0.15 self.leftAxisOrigShiftMin = 12 self.leftAxisSkipLL0 = self.labelVOffset = 0 self.valueSteps = None def _rangeAdjust(self): "Adjusts the value range of the axis." from reportlab.graphics.charts.utils import find_good_grid, ticks y_min, y_max = self._valueMin, self._valueMax m = self.maximumTicks n = list(filter(lambda x,m=m: x<=m,[4,5,6,7,8,9])) if not n: n = [m] valueStep, requiredRange = self.valueStep, self.requiredRange if requiredRange and y_max - y_min < requiredRange: y1, y2 = find_good_grid(y_min, y_max,n=n,grid=valueStep)[:2] if y2 - y1 < requiredRange: ym = (y1+y2)*0.5 y1 = min(ym-requiredRange*0.5,y_min) y2 = max(ym+requiredRange*0.5,y_max) if y_min>=100 and y1<100: y2 = y2 + 100 - y1 y1 = 100 elif y_min>=0 and y1<0: y2 = y2 - y1 y1 = 0 self._valueMin, self._valueMax = y1, y2 T, L = ticks(self._valueMin, self._valueMax, split=1, n=n, percent=self.leftAxisPercent,grid=valueStep, labelVOffset=self.labelVOffset) abf = self.avoidBoundFrac if abf: i1 = (T[1]-T[0]) if not isSeq(abf): i0 = i1 = i1*abf else: i0 = i1*abf[0] i1 = i1*abf[1] _n = getattr(self,'_cValueMin',T[0]) _x = getattr(self,'_cValueMax',T[-1]) if _n - T[0] < i0: self._valueMin = self._valueMin - i0 if T[-1]-_x < i1: self._valueMax = self._valueMax + i1 T, L = ticks(self._valueMin, self._valueMax, split=1, n=n, percent=self.leftAxisPercent,grid=valueStep, labelVOffset=self.labelVOffset) self._valueMin = T[0] self._valueMax = T[-1] self._tickValues = T if self.labelTextFormat is None: self._labelTextFormat = L else: self._labelTextFormat = self.labelTextFormat if abs(self._valueMin-100)<1e-6: self._calcValueStep() vMax, vMin = self._valueMax, self._valueMin m = max(self.leftAxisOrigShiftIPC*self._valueStep, (vMax-vMin)*self.leftAxisOrigShiftMin/self._length) self._valueMin = self._valueMin - m if self.leftAxisSkipLL0: if isSeq(self.leftAxisSkipLL0): for x in self.leftAxisSkipLL0: try: L[x] = '' except IndexError: pass L[0] = '' class LogValueAxis(ValueAxis): def _calcScaleFactor(self): """Calculate the axis' scale factor. This should be called only *after* the axis' range is set. Returns a number. """ self._scaleFactor = self._length / float( math_log10(self._valueMax) - math_log10(self._valueMin)) return self._scaleFactor def _setRange(self,dataSeries): valueMin = self.valueMin valueMax = self.valueMax aMin = _findMin(dataSeries,self._dataIndex,0) aMax = _findMax(dataSeries,self._dataIndex,0) if valueMin is None: valueMin = aMin if valueMax is None: valueMax = aMax if valueMin>valueMax: raise ValueError('%s: valueMin=%r should not be greater than valueMax=%r!' % (self.__class__.__name__valueMin, valueMax)) if valueMin<=0: raise ValueError('%s: valueMin=%r negative values are not allowed!' % valueMin) abS = self.avoidBoundSpace if abS: lMin = math_log10(aMin) lMax = math_log10(aMax) if not isSeq(abS): abS = abS, abS a0 = abS[0] or 0 a1 = abS[1] or 0 L = self._length - (a0 + a1) sf = (lMax-lMin)/float(L) lMin -= a0*sf lMax += a1*sf valueMin = min(valueMin,10**lMin) valueMax = max(valueMax,10**lMax) self._valueMin = valueMin self._valueMax = valueMax def _calcTickPositions(self): #self._calcValueStep() valueMin = cMin = math_log10(self._valueMin) valueMax = cMax = math_log10(self._valueMax) rr = self.rangeRound if rr: if rr in ('both','ceiling'): i = int(valueMax) valueMax = i + 1 if ivalueMin else i T = [].append tv = int(valueMin) if tvself.maximumTicks: i += 1 self._powerInc = i while True: if tv>valueMax: break if tv>=valueMin: T(10**tv) tv += i if valueMin!=cMin: self._valueMin = 10**valueMin if valueMax!=cMax: self._valueMax = 10**valueMax return T.__self__ def _calcSubTicks(self): if not hasattr(self,'_tickValues'): self._pseudo_configure() otv = self._tickValues if not hasattr(self,'_subTickValues'): T = [].append valueMin = math_log10(self._valueMin) valueMax = math_log10(self._valueMax)+1 tv = round(valueMin) i = self._powerInc if i==1: fac = 10 / float(self.subTickNum) start = 1 if self.subTickNum == 10: start = 2 while tv < valueMax: for j in xrange(start,self.subTickNum): v = fac*j*(10**tv) if v > self._valueMin and v < self._valueMax: T(v) tv += i else: ng = min(self.subTickNum+1,i-1) while ng: if (i % ng)==0: i /= ng break ng -= 1 else: i = 1 tv = round(valueMin) while True: v = 10**tv if v >= self._valueMax: break if v not in otv: T(v) tv += i self._subTickValues = T.__self__ self._tickValues = self._subTickValues return otv class LogAxisTickLabeller(TickLabeller): def __call__(self,axis,value): e = math_log10(value) e = int(e-0.001 if e<0 else e+0.001) if e==0: return '1' if e==1: return '10' return '10%s' % e class LogAxisLabellingSetup: def __init__(self): if DirectDrawFlowable is not None: self.labels = TypedPropertyCollection(XLabel) if self._dataIndex==1: self.labels.boxAnchor = 'e' self.labels.dx = -5 self.labels.dy = 0 else: self.labels.boxAnchor = 'n' self.labels.dx = 0 self.labels.dy = -5 self.labelTextFormat = LogAxisTickLabeller() else: self.labelTextFormat = "%.0e" class LogXValueAxis(LogValueAxis,LogAxisLabellingSetup,XValueAxis): _attrMap = AttrMap(BASE=XValueAxis) def __init__(self): XValueAxis.__init__(self) LogAxisLabellingSetup.__init__(self) def scale(self, value): """Converts a numeric value to a Y position. The chart first configures the axis, then asks it to work out the x value for each point when plotting lines or bars. You could override this to do logarithmic axes. """ msg = "Axis cannot scale numbers before it is configured" assert self._configured, msg if value is None: value = 0 if value == 0.: return self._x - self._scaleFactor * math_log10(self._valueMin) return self._x + self._scaleFactor * (math_log10(value) - math_log10(self._valueMin)) class LogYValueAxis(LogValueAxis,LogAxisLabellingSetup,YValueAxis): _attrMap = AttrMap(BASE=YValueAxis) def __init__(self): YValueAxis.__init__(self) LogAxisLabellingSetup.__init__(self) def scale(self, value): """Converts a numeric value to a Y position. The chart first configures the axis, then asks it to work out the x value for each point when plotting lines or bars. You could override this to do logarithmic axes. """ msg = "Axis cannot scale numbers before it is configured" assert self._configured, msg if value is None: value = 0 if value == 0.: return self._y - self._scaleFactor * math_log10(self._valueMin) return self._y + self._scaleFactor * (math_log10(value) - math_log10(self._valueMin)) reportlab-3.5.34/src/reportlab/graphics/charts/linecharts.py0000664000175000017500000006513013554340114024754 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/linecharts.py __version__='3.3.0' __doc__="""This modules defines a very preliminary Line Chart example.""" from reportlab.lib import colors from reportlab.lib.validators import isNumber, isNumberOrNone, isColor, isColorOrNone, isListOfStrings, \ isListOfStringsOrNone, SequenceOf, isBoolean, NoneOr, \ isListOfNumbersOrNone, isStringOrNone, OneOf, Percentage from reportlab.lib.attrmap import * from reportlab.lib.utils import flatten from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder, tpcGetItem from reportlab.graphics.shapes import Line, Rect, Group, Drawing, Polygon, PolyLine from reportlab.graphics.widgets.signsandsymbols import NoEntry from reportlab.graphics.charts.axes import XCategoryAxis, YValueAxis from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.widgets.markers import uSymbol2Symbol, isSymbol, makeMarker from reportlab.graphics.charts.areas import PlotArea from reportlab.graphics.charts.legends import _objStr from .utils import FillPairedData class LineChartProperties(PropHolder): _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber, desc='Width of a line.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color of a line or border.'), fillColor = AttrMapValue(isColorOrNone, desc='fill color of a bar.'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array of a line.'), symbol = AttrMapValue(NoneOr(isSymbol), desc='Widget placed at data points.',advancedUsage=1), shader = AttrMapValue(None, desc='Shader Class.',advancedUsage=1), filler = AttrMapValue(None, desc='Filler Class.',advancedUsage=1), name = AttrMapValue(isStringOrNone, desc='Name of the line.'), lineStyle = AttrMapValue(NoneOr(OneOf('line','joinedLine','bar')), desc="What kind of plot this line is",advancedUsage=1), barWidth = AttrMapValue(isNumberOrNone,desc="Percentage of available width to be used for a bar",advancedUsage=1), inFill = AttrMapValue(isBoolean, desc='If true flood fill to x axis',advancedUsage=1), ) class AbstractLineChart(PlotArea): def makeSwatchSample(self,rowNo, x, y, width, height): baseStyle = self.lines styleIdx = rowNo % len(baseStyle) style = baseStyle[styleIdx] color = style.strokeColor yh2 = y+height/2. lineStyle = getattr(style,'lineStyle',None) if lineStyle=='bar': dash = getattr(style, 'strokeDashArray', getattr(baseStyle,'strokeDashArray',None)) strokeWidth= getattr(style, 'strokeWidth', getattr(style, 'strokeWidth',None)) L = Rect(x,y,width,height,strokeWidth=strokeWidth,strokeColor=color,strokeLineCap=0,strokeDashArray=dash,fillColor=getattr(style,'fillColor',color)) elif self.joinedLines or lineStyle=='joinedLine': dash = getattr(style, 'strokeDashArray', getattr(baseStyle,'strokeDashArray',None)) strokeWidth= getattr(style, 'strokeWidth', getattr(style, 'strokeWidth',None)) L = Line(x,yh2,x+width,yh2,strokeColor=color,strokeLineCap=0) if strokeWidth: L.strokeWidth = strokeWidth if dash: L.strokeDashArray = dash else: L = None if hasattr(style, 'symbol'): S = style.symbol elif hasattr(baseStyle, 'symbol'): S = baseStyle.symbol else: S = None if S: S = uSymbol2Symbol(S,x+width/2.,yh2,color) if S and L: g = Group() g.add(L) g.add(S) return g return S or L def getSeriesName(self,i,default=None): '''return series name i or default''' return _objStr(getattr(self.lines[i],'name',default)) class LineChart(AbstractLineChart): pass # This is conceptually similar to the VerticalBarChart. # Still it is better named HorizontalLineChart... :-/ class HorizontalLineChart(LineChart): """Line chart with multiple lines. A line chart is assumed to have one category and one value axis. Despite its generic name this particular line chart class has a vertical value axis and a horizontal category one. It may evolve into individual horizontal and vertical variants (like with the existing bar charts). Available attributes are: x: x-position of lower-left chart origin y: y-position of lower-left chart origin width: chart width height: chart height useAbsolute: disables auto-scaling of chart elements (?) lineLabelNudge: distance of data labels to data points lineLabels: labels associated with data values lineLabelFormat: format string or callback function groupSpacing: space between categories joinedLines: enables drawing of lines strokeColor: color of chart lines (?) fillColor: color for chart background (?) lines: style list, used cyclically for data series valueAxis: value axis object categoryAxis: category axis object categoryNames: category names data: chart data, a list of data series of equal length """ _attrMap = AttrMap(BASE=LineChart, useAbsolute = AttrMapValue(isNumber, desc='Flag to use absolute spacing values.',advancedUsage=1), lineLabelNudge = AttrMapValue(isNumber, desc='Distance between a data point and its label.',advancedUsage=1), lineLabels = AttrMapValue(None, desc='Handle to the list of data point labels.'), lineLabelFormat = AttrMapValue(None, desc='Formatting string or function used for data point labels.'), lineLabelArray = AttrMapValue(None, desc='explicit array of line label values, must match size of data if present.'), groupSpacing = AttrMapValue(isNumber, desc='? - Likely to disappear.'), joinedLines = AttrMapValue(isNumber, desc='Display data points joined with lines if true.'), lines = AttrMapValue(None, desc='Handle of the lines.'), valueAxis = AttrMapValue(None, desc='Handle of the value axis.'), categoryAxis = AttrMapValue(None, desc='Handle of the category axis.'), categoryNames = AttrMapValue(isListOfStringsOrNone, desc='List of category names.'), data = AttrMapValue(None, desc='Data to be plotted, list of (lists of) numbers.'), inFill = AttrMapValue(isBoolean, desc='Whether infilling should be done.',advancedUsage=1), reversePlotOrder = AttrMapValue(isBoolean, desc='If true reverse plot order.',advancedUsage=1), annotations = AttrMapValue(None, desc='list of callables, will be called with self, xscale, yscale.',advancedUsage=1), ) def __init__(self): LineChart.__init__(self) # Allow for a bounding rectangle. self.strokeColor = None self.fillColor = None # Named so we have less recoding for the horizontal one :-) self.categoryAxis = XCategoryAxis() self.valueAxis = YValueAxis() # This defines two series of 3 points. Just an example. self.data = [(100,110,120,130), (70, 80, 80, 90)] self.categoryNames = ('North','South','East','West') self.lines = TypedPropertyCollection(LineChartProperties) self.lines.strokeWidth = 1 self.lines[0].strokeColor = colors.red self.lines[1].strokeColor = colors.green self.lines[2].strokeColor = colors.blue # control spacing. if useAbsolute = 1 then # the next parameters are in points; otherwise # they are 'proportions' and are normalized to # fit the available space. self.useAbsolute = 0 #- not done yet self.groupSpacing = 1 #5 self.lineLabels = TypedPropertyCollection(Label) self.lineLabelFormat = None self.lineLabelArray = None # This says whether the origin is above or below # the data point. +10 means put the origin ten points # above the data point if value > 0, or ten # points below if data value < 0. This is different # to label dx/dy which are not dependent on the # sign of the data. self.lineLabelNudge = 10 # If you have multiple series, by default they butt # together. # New line chart attributes. self.joinedLines = 1 # Connect items with straight lines. self.inFill = 0 self.reversePlotOrder = 0 def demo(self): """Shows basic use of a line chart.""" drawing = Drawing(200, 100) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (14, 10, 21, 28, 38, 46, 25, 5) ] lc = HorizontalLineChart() lc.x = 20 lc.y = 10 lc.height = 85 lc.width = 170 lc.data = data lc.lines.symbol = makeMarker('Circle') drawing.add(lc) return drawing def calcPositions(self): """Works out where they go. Sets an attribute _positions which is a list of lists of (x, y) matching the data. """ self._seriesCount = len(self.data) self._rowLength = max(list(map(len,self.data))) if self.useAbsolute: # Dimensions are absolute. normFactor = 1.0 else: # Dimensions are normalized to fit. normWidth = self.groupSpacing availWidth = self.categoryAxis.scale(0)[1] normFactor = availWidth / normWidth self._normFactor = normFactor self._yzero = yzero = self.valueAxis.scale(0) self._hngs = hngs = 0.5 * self.groupSpacing * normFactor pairs = set() P = [].append cscale = self.categoryAxis.scale vscale = self.valueAxis.scale data = self.data n = len(data) for rowNo,row in enumerate(data): if isinstance(row, FillPairedData): other = row.other if 0<=other 0: label.setOrigin(x, y + self.lineLabelNudge) else: label.setOrigin(x, y - self.lineLabelNudge) label.setText(labelText) else: label = None return label def drawLabel(self, G, rowNo, colNo, x, y): '''Draw a label for a given item in the list. G must have an add method''' G.add(self._innerDrawLabel(rowNo,colNo,x,y)) def makeLines(self): g = Group() labelFmt = self.lineLabelFormat P = self._positions if self.reversePlotOrder: P.reverse() lines = self.lines styleCount = len(lines) _inFill = self.inFill if (_inFill or self._pairInFills or [rowNo for rowNo in range(len(P)) if getattr(lines[rowNo%styleCount],'inFill',False)] ): inFillY = self.categoryAxis._y inFillX0 = self.valueAxis._x inFillX1 = inFillX0 + self.categoryAxis._length inFillG = getattr(self,'_inFillG',g) yzero = self._yzero # Iterate over data rows. for rowNo, row in enumerate(reversed(P) if self.reversePlotOrder else P): styleIdx = rowNo % styleCount rowStyle = lines[styleIdx] strokeColor = rowStyle.strokeColor fillColor = getattr(rowStyle,'fillColor',strokeColor) inFill = getattr(rowStyle,'inFill',_inFill) dash = getattr(rowStyle, 'strokeDashArray', None) lineStyle = getattr(rowStyle,'lineStyle',None) if hasattr(rowStyle, 'strokeWidth'): strokeWidth = rowStyle.strokeWidth elif hasattr(lines, 'strokeWidth'): strokeWidth = lines.strokeWidth else: strokeWidth = None # Iterate over data columns. if lineStyle=='bar': barWidth = getattr(rowStyle,'barWidth',Percentage(50)) if isinstance(barWidth,Percentage): hbw = self._hngs*barWidth*0.01 else: hbw = barWidth*0.5 for x, y in row: g.add(Rect(x-hbw,min(y,yzero),2*hbw,abs(y-yzero),strokeWidth=strokeWidth,strokeColor=strokeColor,fillColor=fillColor)) elif self.joinedLines or lineStyle=='joinedLine': points = flatten(row) if inFill or isinstance(row,FillPairedData): filler = getattr(rowStyle, 'filler', None) if isinstance(row,FillPairedData): fpoints = points + flatten(reversed(P[row.other])) else: fpoints = [inFillX0,inFillY] + points + [inFillX1,inFillY] if filler: filler.fill(self,inFillG,rowNo,fillColor,fpoints) else: inFillG.add(Polygon(fpoints,fillColor=fillColor,strokeColor=strokeColor if strokeColor==fillColor else None,strokeWidth=strokeWidth or 0.1)) if not inFill or inFill==2 or strokeColor!=fillColor: line = PolyLine(points,strokeColor=strokeColor,strokeLineCap=0,strokeLineJoin=1) if strokeWidth: line.strokeWidth = strokeWidth if dash: line.strokeDashArray = dash g.add(line) if hasattr(rowStyle, 'symbol'): uSymbol = rowStyle.symbol elif hasattr(lines, 'symbol'): uSymbol = lines.symbol else: uSymbol = None if uSymbol: for colNo,(x,y) in enumerate(row): symbol = uSymbol2Symbol(tpcGetItem(uSymbol,colNo),x,y,rowStyle.strokeColor) if symbol: g.add(symbol) # Draw item labels. for colNo, (x, y) in enumerate(row): self.drawLabel(g, rowNo, colNo, x, y) return g def draw(self): "Draws itself." vA, cA = self.valueAxis, self.categoryAxis vA.setPosition(self.x, self.y, self.height) if vA: vA.joinAxis = cA if cA: cA.joinAxis = vA vA.configure(self.data) # If zero is in chart, put x axis there, otherwise # use bottom. xAxisCrossesAt = vA.scale(0) if ((xAxisCrossesAt > self.y + self.height) or (xAxisCrossesAt < self.y)): y = self.y else: y = xAxisCrossesAt cA.setPosition(self.x, y, self.width) cA.configure(self.data) self.calcPositions() g = Group() g.add(self.makeBackground()) if self.inFill: self._inFillG = Group() g.add(self._inFillG) g.add(cA) g.add(vA) cAdgl = getattr(cA,'drawGridLast',False) vAdgl = getattr(vA,'drawGridLast',False) if not cAdgl: cA.makeGrid(g,parent=self,dim=vA.getGridDims) if not vAdgl: vA.makeGrid(g,parent=self,dim=cA.getGridDims) g.add(self.makeLines()) if cAdgl: cA.makeGrid(g,parent=self,dim=vA.getGridDims) if vAdgl: vA.makeGrid(g,parent=self,dim=cA.getGridDims) for a in getattr(self,'annotations',()): g.add(a(self,cA.scale,vA.scale)) return g def _fakeItemKey(a): '''t, z0, z1, x, y = a[:5]''' return (-a[1],a[3],a[0],-a[4]) class _FakeGroup: def __init__(self): self._data = [] def add(self,what): if what: self._data.append(what) def value(self): return self._data def sort(self): self._data.sort(key=_fakeItemKey) #for t in self._data: print t class HorizontalLineChart3D(HorizontalLineChart): _attrMap = AttrMap(BASE=HorizontalLineChart, theta_x = AttrMapValue(isNumber, desc='dx/dz'), theta_y = AttrMapValue(isNumber, desc='dy/dz'), zDepth = AttrMapValue(isNumber, desc='depth of an individual series'), zSpace = AttrMapValue(isNumber, desc='z gap around series'), ) theta_x = .5 theta_y = .5 zDepth = 10 zSpace = 3 def calcPositions(self): HorizontalLineChart.calcPositions(self) nSeries = self._seriesCount zSpace = self.zSpace zDepth = self.zDepth if self.categoryAxis.style=='parallel_3d': _3d_depth = nSeries*zDepth+(nSeries+1)*zSpace else: _3d_depth = zDepth + 2*zSpace self._3d_dx = self.theta_x*_3d_depth self._3d_dy = self.theta_y*_3d_depth def _calc_z0(self,rowNo): zSpace = self.zSpace if self.categoryAxis.style=='parallel_3d': z0 = rowNo*(self.zDepth+zSpace)+zSpace else: z0 = zSpace return z0 def _zadjust(self,x,y,z): return x+z*self.theta_x, y+z*self.theta_y def makeLines(self): labelFmt = self.lineLabelFormat P = list(range(len(self._positions))) if self.reversePlotOrder: P.reverse() inFill = self.inFill assert not inFill, "inFill not supported for 3d yet" #if inFill: #inFillY = self.categoryAxis._y #inFillX0 = self.valueAxis._x #inFillX1 = inFillX0 + self.categoryAxis._length #inFillG = getattr(self,'_inFillG',g) zDepth = self.zDepth _zadjust = self._zadjust theta_x = self.theta_x theta_y = self.theta_y F = _FakeGroup() from reportlab.graphics.charts.utils3d import _make_3d_line_info tileWidth = getattr(self,'_3d_tilewidth',None) if not tileWidth and self.categoryAxis.style!='parallel_3d': tileWidth = 1 # Iterate over data rows. for rowNo in P: row = self._positions[rowNo] n = len(row) styleCount = len(self.lines) styleIdx = rowNo % styleCount rowStyle = self.lines[styleIdx] rowColor = rowStyle.strokeColor dash = getattr(rowStyle, 'strokeDashArray', None) z0 = self._calc_z0(rowNo) z1 = z0 + zDepth if hasattr(self.lines[styleIdx], 'strokeWidth'): strokeWidth = self.lines[styleIdx].strokeWidth elif hasattr(self.lines, 'strokeWidth'): strokeWidth = self.lines.strokeWidth else: strokeWidth = None # Iterate over data columns. if self.joinedLines: if n: x0, y0 = row[0] for colNo in range(1,n): x1, y1 = row[colNo] _make_3d_line_info( F, x0, x1, y0, y1, z0, z1, theta_x, theta_y, rowColor, fillColorShaded=None, tileWidth=tileWidth, strokeColor=None, strokeWidth=None, strokeDashArray=None, shading=0.1) x0, y0 = x1, y1 if hasattr(self.lines[styleIdx], 'symbol'): uSymbol = self.lines[styleIdx].symbol elif hasattr(self.lines, 'symbol'): uSymbol = self.lines.symbol else: uSymbol = None if uSymbol: for colNo in range(n): x1, y1 = row[colNo] x1, y1 = _zadjust(x1,y1,z0) symbol = uSymbol2Symbol(uSymbol,x1,y1,rowColor) if symbol: F.add((2,z0,z0,x1,y1,symbol)) # Draw item labels. for colNo in range(n): x1, y1 = row[colNo] x1, y1 = _zadjust(x1,y1,z0) L = self._innerDrawLabel(rowNo, colNo, x1, y1) if L: F.add((2,z0,z0,x1,y1,L)) F.sort() g = Group() for v in F.value(): g.add(v[-1]) return g class VerticalLineChart(LineChart): pass def sample1(): drawing = Drawing(400, 200) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (5, 20, 46, 38, 23, 21, 6, 14) ] lc = HorizontalLineChart() lc.x = 50 lc.y = 50 lc.height = 125 lc.width = 300 lc.data = data lc.joinedLines = 1 lc.lines.symbol = makeMarker('FilledDiamond') lc.lineLabelFormat = '%2.0f' catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') lc.categoryAxis.categoryNames = catNames lc.categoryAxis.labels.boxAnchor = 'n' lc.valueAxis.valueMin = 0 lc.valueAxis.valueMax = 60 lc.valueAxis.valueStep = 15 drawing.add(lc) return drawing class SampleHorizontalLineChart(HorizontalLineChart): "Sample class overwriting one method to draw additional horizontal lines." def demo(self): """Shows basic use of a line chart.""" drawing = Drawing(200, 100) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (14, 10, 21, 28, 38, 46, 25, 5) ] lc = SampleHorizontalLineChart() lc.x = 20 lc.y = 10 lc.height = 85 lc.width = 170 lc.data = data lc.strokeColor = colors.white lc.fillColor = colors.HexColor(0xCCCCCC) drawing.add(lc) return drawing def makeBackground(self): g = Group() g.add(HorizontalLineChart.makeBackground(self)) valAxis = self.valueAxis valTickPositions = valAxis._tickValues for y in valTickPositions: y = valAxis.scale(y) g.add(Line(self.x, y, self.x+self.width, y, strokeColor = self.strokeColor)) return g def sample1a(): drawing = Drawing(400, 200) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (5, 20, 46, 38, 23, 21, 6, 14) ] lc = SampleHorizontalLineChart() lc.x = 50 lc.y = 50 lc.height = 125 lc.width = 300 lc.data = data lc.joinedLines = 1 lc.strokeColor = colors.white lc.fillColor = colors.HexColor(0xCCCCCC) lc.lines.symbol = makeMarker('FilledDiamond') lc.lineLabelFormat = '%2.0f' catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') lc.categoryAxis.categoryNames = catNames lc.categoryAxis.labels.boxAnchor = 'n' lc.valueAxis.valueMin = 0 lc.valueAxis.valueMax = 60 lc.valueAxis.valueStep = 15 drawing.add(lc) return drawing def sample2(): drawing = Drawing(400, 200) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (5, 20, 46, 38, 23, 21, 6, 14) ] lc = HorizontalLineChart() lc.x = 50 lc.y = 50 lc.height = 125 lc.width = 300 lc.data = data lc.joinedLines = 1 lc.lines.symbol = makeMarker('Smiley') lc.lineLabelFormat = '%2.0f' lc.strokeColor = colors.black lc.fillColor = colors.lightblue catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') lc.categoryAxis.categoryNames = catNames lc.categoryAxis.labels.boxAnchor = 'n' lc.valueAxis.valueMin = 0 lc.valueAxis.valueMax = 60 lc.valueAxis.valueStep = 15 drawing.add(lc) return drawing def sample3(): drawing = Drawing(400, 200) data = [ (13, 5, 20, 22, 37, 45, 19, 4), (5, 20, 46, 38, 23, 21, 6, 14) ] lc = HorizontalLineChart() lc.x = 50 lc.y = 50 lc.height = 125 lc.width = 300 lc.data = data lc.joinedLines = 1 lc.lineLabelFormat = '%2.0f' lc.strokeColor = colors.black lc.lines[0].symbol = makeMarker('Smiley') lc.lines[1].symbol = NoEntry lc.lines[0].strokeWidth = 2 lc.lines[1].strokeWidth = 4 catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') lc.categoryAxis.categoryNames = catNames lc.categoryAxis.labels.boxAnchor = 'n' lc.valueAxis.valueMin = 0 lc.valueAxis.valueMax = 60 lc.valueAxis.valueStep = 15 drawing.add(lc) return drawing def sampleCandleStick(): from reportlab.graphics.widgetbase import CandleSticks d = Drawing(400, 200) chart = HorizontalLineChart() d.add(chart) chart.y = 20 boxMid = (100, 110, 120, 130) hi = [m+10 for m in boxMid] lo = [m-10 for m in boxMid] boxHi = [m+6 for m in boxMid] boxLo = [m-4 for m in boxMid] boxFillColor = colors.pink boxWidth = 20 crossWidth = 10 candleStrokeWidth = 0.5 candleStrokeColor = colors.black chart.valueAxis.avoidBoundSpace = 5 chart.valueAxis.valueMin = min(min(boxMid),min(hi),min(lo),min(boxLo),min(boxHi)) chart.valueAxis.valueMax = max(max(boxMid),max(hi),max(lo),max(boxLo),max(boxHi)) lines = chart.lines lines[0].strokeColor = None I = range(len(boxMid)) chart.data = [boxMid] lines[0].symbol = candles = CandleSticks(chart=chart, boxFillColor=boxFillColor, boxWidth=boxWidth, crossWidth=crossWidth, strokeWidth=candleStrokeWidth, strokeColor=candleStrokeColor) for i in I: candles[i].setProperties(dict(position=i,boxMid=boxMid[i],crossLo=lo[i],crossHi=hi[i],boxLo=boxLo[i],boxHi=boxHi[i])) return d reportlab-3.5.34/src/reportlab/graphics/charts/__init__.py0000664000175000017500000000035213544671343024364 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/__init__.py __version__='3.3.0' __doc__='''Business charts''' reportlab-3.5.34/src/reportlab/graphics/charts/spider.py0000664000175000017500000003724713544671343024130 0ustar rptlabrptlab00000000000000 #Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/spider.py # spider chart, also known as radar chart __version__='3.3.0' __doc__="""Spider Chart Normal use shows variation of 5-10 parameters against some 'norm' or target. When there is more than one series, place the series with the largest numbers first, as it will be overdrawn by each successive one. """ import copy from math import sin, cos, pi from reportlab.lib import colors from reportlab.lib.validators import isColor, isNumber, isListOfNumbersOrNone,\ isListOfNumbers, isColorOrNone, isString,\ isListOfStringsOrNone, OneOf, SequenceOf,\ isBoolean, isListOfColors, isNumberOrNone,\ isNoneOrListOfNoneOrStrings, isTextAnchor,\ isNoneOrListOfNoneOrNumbers, isBoxAnchor,\ isStringOrNone, isStringOrNone, EitherOr,\ isCallable from reportlab.lib.attrmap import * from reportlab.pdfgen.canvas import Canvas from reportlab.graphics.shapes import Group, Drawing, Line, Rect, Polygon, PolyLine, Ellipse, \ Wedge, String, STATE_DEFAULTS from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder from reportlab.graphics.charts.areas import PlotArea from reportlab.graphics.charts.legends import _objStr from reportlab.graphics.charts.piecharts import WedgeLabel from reportlab.graphics.widgets.markers import makeMarker, uSymbol2Symbol, isSymbol class StrandProperty(PropHolder): _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber,desc='width'), fillColor = AttrMapValue(isColorOrNone,desc='filling color'), strokeColor = AttrMapValue(isColorOrNone,desc='stroke color'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc='dashing pattern, e.g. (3,2)'), symbol = AttrMapValue(EitherOr((isStringOrNone,isSymbol)), desc='Widget placed at data points.',advancedUsage=1), symbolSize= AttrMapValue(isNumber, desc='Symbol size.',advancedUsage=1), name = AttrMapValue(isStringOrNone, desc='Name of the strand.'), ) def __init__(self): self.strokeWidth = 1 self.fillColor = None self.strokeColor = STATE_DEFAULTS["strokeColor"] self.strokeDashArray = STATE_DEFAULTS["strokeDashArray"] self.symbol = None self.symbolSize = 5 self.name = None class SpokeProperty(PropHolder): _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber,desc='width'), fillColor = AttrMapValue(isColorOrNone,desc='filling color'), strokeColor = AttrMapValue(isColorOrNone,desc='stroke color'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc='dashing pattern, e.g. (2,1)'), labelRadius = AttrMapValue(isNumber,desc='label radius',advancedUsage=1), visible = AttrMapValue(isBoolean,desc="True if the spoke line is to be drawn"), ) def __init__(self,**kw): self.strokeWidth = 0.5 self.fillColor = None self.strokeColor = STATE_DEFAULTS["strokeColor"] self.strokeDashArray = STATE_DEFAULTS["strokeDashArray"] self.visible = 1 self.labelRadius = 1.05 class SpokeLabel(WedgeLabel): def __init__(self,**kw): WedgeLabel.__init__(self,**kw) if '_text' not in list(kw.keys()): self._text = '' class StrandLabel(SpokeLabel): _attrMap = AttrMap(BASE=SpokeLabel, format = AttrMapValue(EitherOr((isStringOrNone,isCallable)),desc="Format for the label"), dR = AttrMapValue(isNumberOrNone,desc="radial shift for label"), ) def __init__(self,**kw): self.format = '' self.dR = 0 SpokeLabel.__init__(self,**kw) def _setupLabel(labelClass, text, radius, cx, cy, angle, car, sar, sty): L = labelClass() L._text = text L.x = cx + radius*car L.y = cy + radius*sar L._pmv = angle*180/pi L.boxAnchor = sty.boxAnchor L.dx = sty.dx L.dy = sty.dy L.angle = sty.angle L.boxAnchor = sty.boxAnchor L.boxStrokeColor = sty.boxStrokeColor L.boxStrokeWidth = sty.boxStrokeWidth L.boxFillColor = sty.boxFillColor L.strokeColor = sty.strokeColor L.strokeWidth = sty.strokeWidth L.leading = sty.leading L.width = sty.width L.maxWidth = sty.maxWidth L.height = sty.height L.textAnchor = sty.textAnchor L.visible = sty.visible L.topPadding = sty.topPadding L.leftPadding = sty.leftPadding L.rightPadding = sty.rightPadding L.bottomPadding = sty.bottomPadding L.fontName = sty.fontName L.fontSize = sty.fontSize L.fillColor = sty.fillColor return L class SpiderChart(PlotArea): _attrMap = AttrMap(BASE=PlotArea, data = AttrMapValue(None, desc='Data to be plotted, list of (lists of) numbers.'), labels = AttrMapValue(isListOfStringsOrNone, desc="optional list of labels to use for each data point"), startAngle = AttrMapValue(isNumber, desc="angle of first slice; like the compass, 0 is due North"), direction = AttrMapValue( OneOf('clockwise', 'anticlockwise'), desc="'clockwise' or 'anticlockwise'"), strands = AttrMapValue(None, desc="collection of strand descriptor objects"), spokes = AttrMapValue(None, desc="collection of spoke descriptor objects"), strandLabels = AttrMapValue(None, desc="collection of strand label descriptor objects"), spokeLabels = AttrMapValue(None, desc="collection of spoke label descriptor objects"), ) def makeSwatchSample(self, rowNo, x, y, width, height): baseStyle = self.strands styleIdx = rowNo % len(baseStyle) style = baseStyle[styleIdx] strokeColor = getattr(style, 'strokeColor', getattr(baseStyle,'strokeColor',None)) fillColor = getattr(style, 'fillColor', getattr(baseStyle,'fillColor',None)) strokeDashArray = getattr(style, 'strokeDashArray', getattr(baseStyle,'strokeDashArray',None)) strokeWidth = getattr(style, 'strokeWidth', getattr(baseStyle, 'strokeWidth',0)) symbol = getattr(style, 'symbol', getattr(baseStyle, 'symbol',None)) ym = y+height/2.0 if fillColor is None and strokeColor is not None and strokeWidth>0: bg = Line(x,ym,x+width,ym,strokeWidth=strokeWidth,strokeColor=strokeColor, strokeDashArray=strokeDashArray) elif fillColor is not None: bg = Rect(x,y,width,height,strokeWidth=strokeWidth,strokeColor=strokeColor, strokeDashArray=strokeDashArray,fillColor=fillColor) else: bg = None if symbol: symbol = uSymbol2Symbol(symbol,x+width/2.,ym,color) if bg: g = Group() g.add(bg) g.add(symbol) return g return symbol or bg def getSeriesName(self,i,default=None): '''return series name i or default''' return _objStr(getattr(self.strands[i],'name',default)) def __init__(self): PlotArea.__init__(self) self.data = [[10,12,14,16,14,12], [6,8,10,12,9,11]] self.labels = None # or list of strings self.labels = ['a','b','c','d','e','f'] self.startAngle = 90 self.direction = "clockwise" self.strands = TypedPropertyCollection(StrandProperty) self.spokes = TypedPropertyCollection(SpokeProperty) self.spokeLabels = TypedPropertyCollection(SpokeLabel) self.spokeLabels._text = None self.strandLabels = TypedPropertyCollection(StrandLabel) self.x = 10 self.y = 10 self.width = 180 self.height = 180 def demo(self): d = Drawing(200, 200) d.add(SpiderChart()) return d def normalizeData(self, outer = 0.0): """Turns data into normalized ones where each datum is < 1.0, and 1.0 = maximum radius. Adds 10% at outside edge by default""" data = self.data assert min(list(map(min,data))) >=0, "Cannot do spider plots of negative numbers!" norm = max(list(map(max,data))) norm *= (1.0+outer) if norm<1e-9: norm = 1.0 self._norm = norm return [[e/norm for e in row] for row in data] def _innerDrawLabel(self, sty, radius, cx, cy, angle, car, sar, labelClass=StrandLabel): "Draw a label for a given item in the list." fmt = sty.format value = radius*self._norm if not fmt: text = None elif isinstance(fmt,str): if fmt == 'values': text = sty._text else: text = fmt % value elif hasattr(fmt,'__call__'): text = fmt(value) else: raise ValueError("Unknown formatter type %s, expected string or function" % fmt) if text: dR = sty.dR if dR: radius += dR/self._radius L = _setupLabel(labelClass, text, radius, cx, cy, angle, car, sar, sty) if dR<0: L._anti = 1 else: L = None return L def draw(self): # normalize slice data g = self.makeBackground() or Group() xradius = self.width/2.0 yradius = self.height/2.0 self._radius = radius = min(xradius, yradius) cx = self.x + xradius cy = self.y + yradius data = self.normalizeData() self._seriesCount = len(data) n = len(data[0]) #labels if self.labels is None: labels = [''] * n else: labels = self.labels #there's no point in raising errors for less than enough errors if #we silently create all for the extreme case of no labels. i = n-len(labels) if i>0: labels = labels + ['']*i S = [] STRANDS = [] STRANDAREAS = [] syms = [] labs = [] csa = [] angle = self.startAngle*pi/180 direction = self.direction == "clockwise" and -1 or 1 angleBetween = direction*(2 * pi)/float(n) spokes = self.spokes spokeLabels = self.spokeLabels for i in range(n): car = cos(angle)*radius sar = sin(angle)*radius csa.append((car,sar,angle)) si = self.spokes[i] if si.visible: spoke = Line(cx, cy, cx + car, cy + sar, strokeWidth = si.strokeWidth, strokeColor=si.strokeColor, strokeDashArray=si.strokeDashArray) S.append(spoke) sli = spokeLabels[i] text = sli._text if not text: text = labels[i] if text: S.append(_setupLabel(WedgeLabel, text, si.labelRadius, cx, cy, angle, car, sar, sli)) angle += angleBetween # now plot the polygons rowIdx = 0 strands = self.strands strandLabels = self.strandLabels for row in data: # series plot rsty = strands[rowIdx] points = [] car, sar = csa[-1][:2] r = row[-1] points.append(cx+car*r) points.append(cy+sar*r) for i in range(n): car, sar, angle = csa[i] r = row[i] points.append(cx+car*r) points.append(cy+sar*r) L = self._innerDrawLabel(strandLabels[(rowIdx,i)], r, cx, cy, angle, car, sar, labelClass=StrandLabel) if L: labs.append(L) sty = strands[(rowIdx,i)] uSymbol = sty.symbol # put in a marker, if it needs one if uSymbol: s_x = cx+car*r s_y = cy+sar*r s_fillColor = sty.fillColor s_strokeColor = sty.strokeColor s_strokeWidth = sty.strokeWidth s_angle = 0 s_size = sty.symbolSize if type(uSymbol) is type(''): symbol = makeMarker(uSymbol, size = s_size, x = s_x, y = s_y, fillColor = s_fillColor, strokeColor = s_strokeColor, strokeWidth = s_strokeWidth, angle = s_angle, ) else: symbol = uSymbol2Symbol(uSymbol,s_x,s_y,s_fillColor) for k,v in (('size', s_size), ('fillColor', s_fillColor), ('x', s_x), ('y', s_y), ('strokeColor',s_strokeColor), ('strokeWidth',s_strokeWidth), ('angle',s_angle),): if getattr(symbol,k,None) is None: try: setattr(symbol,k,v) except: pass syms.append(symbol) # make up the 'strand' if rsty.fillColor: strand = Polygon(points) strand.fillColor = rsty.fillColor strand.strokeColor = None strand.strokeWidth = 0 STRANDAREAS.append(strand) if rsty.strokeColor and rsty.strokeWidth: strand = PolyLine(points) strand.strokeColor = rsty.strokeColor strand.strokeWidth = rsty.strokeWidth strand.strokeDashArray = rsty.strokeDashArray STRANDS.append(strand) rowIdx += 1 for s in (STRANDAREAS+STRANDS+syms+S+labs): g.add(s) return g def sample1(): "Make a simple spider chart" d = Drawing(400, 400) sp = SpiderChart() sp.x = 50 sp.y = 50 sp.width = 300 sp.height = 300 sp.data = [[10,12,14,16,14,12], [6,8,10,12,9,15],[7,8,17,4,12,8]] sp.labels = ['a','b','c','d','e','f'] sp.strands[0].strokeColor = colors.cornsilk sp.strands[1].strokeColor = colors.cyan sp.strands[2].strokeColor = colors.palegreen sp.strands[0].fillColor = colors.cornsilk sp.strands[1].fillColor = colors.cyan sp.strands[2].fillColor = colors.palegreen sp.spokes.strokeDashArray = (2,2) d.add(sp) return d def sample2(): "Make a spider chart with markers, but no fill" d = Drawing(400, 400) sp = SpiderChart() sp.x = 50 sp.y = 50 sp.width = 300 sp.height = 300 sp.data = [[10,12,14,16,14,12], [6,8,10,12,9,15],[7,8,17,4,12,8]] sp.labels = ['U','V','W','X','Y','Z'] sp.strands.strokeWidth = 1 sp.strands[0].fillColor = colors.pink sp.strands[1].fillColor = colors.lightblue sp.strands[2].fillColor = colors.palegreen sp.strands[0].strokeColor = colors.red sp.strands[1].strokeColor = colors.blue sp.strands[2].strokeColor = colors.green sp.strands.symbol = "FilledDiamond" sp.strands[1].symbol = makeMarker("Circle") sp.strands[1].symbol.strokeWidth = 0.5 sp.strands[1].symbol.fillColor = colors.yellow sp.strands.symbolSize = 6 sp.strandLabels[0,3]._text = 'special' sp.strandLabels[0,1]._text = 'one' sp.strandLabels[0,0]._text = 'zero' sp.strandLabels[1,0]._text = 'Earth' sp.strandLabels[2,2]._text = 'Mars' sp.strandLabels.format = 'values' sp.strandLabels.dR = -5 d.add(sp) return d if __name__=='__main__': d = sample1() from reportlab.graphics.renderPDF import drawToFile drawToFile(d, 'spider.pdf') d = sample2() drawToFile(d, 'spider2.pdf') reportlab-3.5.34/src/reportlab/graphics/charts/lineplots.py0000664000175000017500000014044613551321643024640 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/charts/lineplots.py __version__='3.3.0' __doc__="""This module defines a very preliminary Line Plot example.""" import string, time from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.attrmap import * from reportlab.lib.utils import flatten, isStr from reportlab.graphics.shapes import Drawing, Group, Rect, Line, PolyLine, Polygon, _SetKeyWordArgs from reportlab.graphics.widgetbase import Widget, TypedPropertyCollection, PropHolder, tpcGetItem from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.charts.axes import XValueAxis, YValueAxis, AdjYValueAxis, NormalDateXValueAxis from reportlab.graphics.charts.utils import * from reportlab.graphics.widgets.markers import uSymbol2Symbol, isSymbol, makeMarker from reportlab.graphics.widgets.grids import Grid, DoubleGrid, ShadedRect, ShadedPolygon from reportlab.pdfbase.pdfmetrics import stringWidth, getFont from reportlab.graphics.charts.areas import PlotArea from .utils import FillPairedData # This might be moved again from here... class LinePlotProperties(PropHolder): _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber, desc='Width of a line.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color of a line.'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array of a line.'), fillColor = AttrMapValue(isColorOrNone, desc='Color of infill defaults to the strokeColor.'), symbol = AttrMapValue(None, desc='Widget placed at data points.',advancedUsage=1), shader = AttrMapValue(None, desc='Shader Class.',advancedUsage=1), filler = AttrMapValue(None, desc='Filler Class.',advancedUsage=1), name = AttrMapValue(isStringOrNone, desc='Name of the line.'), inFill = AttrMapValue(isBoolean, desc='If true flood fill to x axis',advancedUsage=1), ) class InFillValue(int): def __new__(cls,v,yValue=None): self = int.__new__(cls,v) self.yValue = yValue return self class Shader(_SetKeyWordArgs): _attrMap = AttrMap(BASE=PlotArea, vertical = AttrMapValue(isBoolean, desc='If true shade to x axis'), colors = AttrMapValue(SequenceOf(isColorOrNone,lo=2,hi=2), desc='(AxisColor, LineColor)'), ) def shade(self, lp, g, rowNo, rowColor, row): c = [None,None] c = getattr(self,'colors',c) or c if not c[0]: c[0] = getattr(lp,'fillColor',colors.white) if not c[1]: c[1] = rowColor class NoFiller: def fill(self, lp, g, rowNo, rowColor, points): pass class Filler: '''mixin providing simple polygon fill''' _attrMap = AttrMap( fillColor = AttrMapValue(isColorOrNone, desc='filler interior color'), strokeColor = AttrMapValue(isColorOrNone, desc='filler edge color'), strokeWidth = AttrMapValue(isNumberOrNone, desc='filler edge width'), ) def __init__(self,**kw): self.__dict__ = kw def fill(self, lp, g, rowNo, rowColor, points): g.add(Polygon(points, fillColor=getattr(self,'fillColor',rowColor), strokeColor=getattr(self,'strokeColor',rowColor), strokeWidth=getattr(self,'strokeWidth',0.1))) class ShadedPolyFiller(Filler,ShadedPolygon): pass class PolyFiller(Filler,Polygon): pass from reportlab.graphics.charts.linecharts import AbstractLineChart class LinePlot(AbstractLineChart): """Line plot with multiple lines. Both x- and y-axis are value axis (so there are no seperate X and Y versions of this class). """ _attrMap = AttrMap(BASE=PlotArea, reversePlotOrder = AttrMapValue(isBoolean, desc='If true reverse plot order.',advancedUsage=1), lineLabelNudge = AttrMapValue(isNumber, desc='Distance between a data point and its label.',advancedUsage=1), lineLabels = AttrMapValue(None, desc='Handle to the list of data point labels.'), lineLabelFormat = AttrMapValue(None, desc='Formatting string or function used for data point labels.'), lineLabelArray = AttrMapValue(None, desc='explicit array of line label values, must match size of data if present.'), joinedLines = AttrMapValue(isNumber, desc='Display data points joined with lines if true.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color used for background border of plot area.'), fillColor = AttrMapValue(isColorOrNone, desc='Color used for background interior of plot area.'), lines = AttrMapValue(None, desc='Handle of the lines.'), xValueAxis = AttrMapValue(None, desc='Handle of the x axis.'), yValueAxis = AttrMapValue(None, desc='Handle of the y axis.'), data = AttrMapValue(None, desc='Data to be plotted, list of (lists of) x/y tuples.'), annotations = AttrMapValue(None, desc='list of callables, will be called with self, xscale, yscale.',advancedUsage=1), behindAxes = AttrMapValue(isBoolean, desc='If true use separate line group.',advancedUsage=1), gridFirst = AttrMapValue(isBoolean, desc='If true use draw grids before axes.',advancedUsage=1), ) def __init__(self): PlotArea.__init__(self) self.reversePlotOrder = 0 self.xValueAxis = XValueAxis() self.yValueAxis = YValueAxis() # this defines two series of 3 points. Just an example. self.data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3,4), (4,6)) ] self.lines = TypedPropertyCollection(LinePlotProperties) self.lines.strokeWidth = 1 self.lines[0].strokeColor = colors.red self.lines[1].strokeColor = colors.blue self.lineLabels = TypedPropertyCollection(Label) self.lineLabelFormat = None self.lineLabelArray = None # this says whether the origin is inside or outside # the bar - +10 means put the origin ten points # above the tip of the bar if value > 0, or ten # points inside if bar value < 0. This is different # to label dx/dy which are not dependent on the # sign of the data. self.lineLabelNudge = 10 # if you have multiple series, by default they butt # together. # New line chart attributes. self.joinedLines = 1 # Connect items with straight lines. #private attributes self._inFill = None self.annotations = [] self.behindAxes = 0 self.gridFirst = 0 def demo(self): """Shows basic use of a line chart.""" drawing = Drawing(400, 200) data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3.5,5), (4,6)) ] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.lines[0].strokeColor = colors.red lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].strokeColor = colors.blue lp.lines[1].symbol = makeMarker('FilledDiamond') lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueStep = 1 lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueStep = 1 drawing.add(lp) return drawing def calcPositions(self): """Works out where they go. Sets an attribute _positions which is a list of lists of (x, y) matching the data. """ self._seriesCount = len(self.data) self._rowLength = max(list(map(len,self.data))) pairs = set() P = [].append xscale = self.xValueAxis.scale yscale = self.yValueAxis.scale data = self.data n = len(data) for rowNo, row in enumerate(data): if isinstance(row, FillPairedData): other = row.other if 0<=other 0: label.setOrigin(x, y + self.lineLabelNudge) else: label.setOrigin(x, y - self.lineLabelNudge) label.setText(labelText) else: label = None return label def drawLabel(self, G, rowNo, colNo, x, y): '''Draw a label for a given item in the list. G must have an add method''' G.add(self._innerDrawLabel(rowNo,colNo,x,y)) def makeLines(self): g = Group() yA = self.yValueAxis xA = self.xValueAxis bubblePlot = getattr(self,'_bubblePlot',None) if bubblePlot: bubbleR = min(yA._bubbleRadius,xA._bubbleRadius) bubbleMax = xA._bubbleMax labelFmt = self.lineLabelFormat P = self._positions _inFill = getattr(self,'_inFill',None) lines = self.lines styleCount = len(lines) if (_inFill or self._pairInFills or [rowNo for rowNo in range(len(P)) if getattr(lines[rowNo%styleCount],'inFill',False)] ): inFillY = getattr(_inFill,'yValue',None) if inFillY is None: inFillY = xA._y else: inFillY = yA.scale(inFillY) inFillX0 = yA._x inFillX1 = inFillX0 + xA._length inFillG = getattr(self,'_inFillG',g) lG = getattr(self,'_lineG',g) # Iterate over data rows. for rowNo, row in enumerate(reversed(P) if self.reversePlotOrder else P): styleRowNo = rowNo % styleCount rowStyle = lines[styleRowNo] strokeColor = getattr(rowStyle,'strokeColor',None) fillColor = getattr(rowStyle, 'fillColor', strokeColor) inFill = getattr(rowStyle,'inFill',_inFill) dash = getattr(rowStyle, 'strokeDashArray', None) if hasattr(rowStyle, 'strokeWidth'): width = rowStyle.strokeWidth elif hasattr(lines, 'strokeWidth'): width = lines.strokeWidth else: width = None # Iterate over data columns. if self.joinedLines: points = flatten(row) if inFill or isinstance(row,FillPairedData): filler = getattr(rowStyle, 'filler', None) if isinstance(row,FillPairedData): fpoints = points + flatten(reversed(P[row.other])) else: fpoints = [inFillX0,inFillY] + points + [inFillX1,inFillY] if filler: filler.fill(self,inFillG,rowNo,fillColor,fpoints) else: inFillG.add(Polygon(fpoints,fillColor=fillColor,strokeColor=strokeColor if strokeColor==fillColor else None,strokeWidth=width or 0.1)) if not inFill or inFill==2 or strokeColor!=fillColor: line = PolyLine(points,strokeColor=strokeColor,strokeLineCap=0,strokeLineJoin=1) if width: line.strokeWidth = width if dash: line.strokeDashArray = dash lG.add(line) if hasattr(rowStyle, 'symbol'): uSymbol = rowStyle.symbol elif hasattr(lines, 'symbol'): uSymbol = lines.symbol else: uSymbol = None if uSymbol: if bubblePlot: drow = self.data[rowNo] for j,xy in enumerate(row): if (styleRowNo,j) in lines: juSymbol = getattr(lines[styleRowNo,j],'symbol',uSymbol) else: juSymbol = uSymbol if juSymbol is uSymbol: symbol = uSymbol symColor = strokeColor else: symbol = juSymbol symColor = getattr(symbol,'fillColor',strokeColor) symbol = uSymbol2Symbol(tpcGetItem(symbol,j),xy[0],xy[1],symColor) if symbol: if bubblePlot: symbol.size = bubbleR*(drow[j][2]/bubbleMax)**0.5 g.add(symbol) else: if bubblePlot: drow = self.data[rowNo] for j,xy in enumerate(row): juSymbol = getattr(lines[styleRowNo,j],'symbol',None) if not juSymbol: continue symColor = getattr(juSymbol,'fillColor',getattr(juSymbol,'strokeColor',strokeColor)) symbol = uSymbol2Symbol(juSymbol,xy[0],xy[1],symColor) if symbol: if bubblePlot: symbol.size = bubbleR*(drow[j][2]/bubbleMax)**0.5 g.add(symbol) # Draw data labels. for colNo,datum in enumerate(row): x1, y1 = datum self.drawLabel(g, rowNo, colNo, x1, y1) shader = getattr(rowStyle, 'shader', None) if shader: shader.shade(self,g,rowNo,strokeColor,row) return g def draw(self): yA = self.yValueAxis xA = self.xValueAxis if getattr(self,'_bubblePlot',None): yA._bubblePlot = xA._bubblePlot = 1 yA.setPosition(self.x, self.y, self.height) if yA: yA.joinAxis = xA if xA: xA.joinAxis = yA yA.configure(self.data) # if zero is in chart, put x axis there, otherwise use bottom. xAxisCrossesAt = yA.scale(0) if ((xAxisCrossesAt > self.y + self.height) or (xAxisCrossesAt < self.y)): y = self.y else: y = xAxisCrossesAt xA.setPosition(self.x, y, self.width) xA.configure(self.data) self.calcPositions() g = Group() g.add(self.makeBackground()) if self._inFill or self.behindAxes: xA._joinToAxis() if self._inFill: self._inFillG = Group() g.add(self._inFillG) if self.behindAxes: self._lineG = Group() g.add(self._lineG) xA._joinToAxis() yA._joinToAxis() xAex = xA.visibleAxis and [xA._y] or [] yAex = yA.visibleAxis and [yA._x] or [] skipGrid = getattr(xA,'skipGrid','none') if skipGrid!=None: if skipGrid in ('both','top'): yAex.append(xA._x+xA._length) if skipGrid in ('both','bottom'): yAex.append(xA._x) skipGrid = getattr(yA,'skipGrid','none') if skipGrid!=None: if skipGrid in ('both','top'): xAex.append(yA._y+yA._length) if skipGrid in ('both','bottom'): xAex.append(yA._y) if self.gridFirst: xA.makeGrid(g,parent=self,dim=yA.getGridDims,exclude=yAex) yA.makeGrid(g,parent=self,dim=xA.getGridDims,exclude=xAex) g.add(xA.draw()) g.add(yA.draw()) if not self.gridFirst: xAdgl = getattr(xA,'drawGridLast',False) yAdgl = getattr(yA,'drawGridLast',False) if not xAdgl: xA.makeGrid(g,parent=self,dim=yA.getGridDims,exclude=yAex) if not yAdgl: yA.makeGrid(g,parent=self,dim=xA.getGridDims,exclude=xAex) annotations = getattr(self,'annotations',[]) for a in annotations: if getattr(a,'beforeLines',None): g.add(a(self,xA.scale,yA.scale)) g.add(self.makeLines()) if not self.gridFirst: if xAdgl: xA.makeGrid(g,parent=self,dim=yA.getGridDims,exclude=yAex) if yAdgl: yA.makeGrid(g,parent=self,dim=xA.getGridDims,exclude=xAex) for a in annotations: if not getattr(a,'beforeLines',None): g.add(a(self,xA.scale,yA.scale)) return g def addCrossHair(self,name,xv,yv,strokeColor=colors.black,strokeWidth=1,beforeLines=True): from reportlab.graphics.shapes import Group, Line annotations = [a for a in getattr(self,'annotations',[]) if getattr(a,'name',None)!=name] def annotation(self,xScale,yScale): x = xScale(xv) y = yScale(yv) g = Group() xA = xScale.__self__ #the x axis g.add(Line(xA._x,y,xA._x+xA._length,y,strokeColor=strokeColor,strokeWidth=strokeWidth)) yA = yScale.__self__ #the y axis g.add(Line(x,yA._y,x,yA._y+yA._length,strokeColor=strokeColor,strokeWidth=strokeWidth)) return g annotation.beforeLines = beforeLines annotations.append(annotation) self.annotations = annotations class LinePlot3D(LinePlot): _attrMap = AttrMap(BASE=LinePlot, theta_x = AttrMapValue(isNumber, desc='dx/dz'), theta_y = AttrMapValue(isNumber, desc='dy/dz'), zDepth = AttrMapValue(isNumber, desc='depth of an individual series'), zSpace = AttrMapValue(isNumber, desc='z gap around series'), ) theta_x = .5 theta_y = .5 zDepth = 10 zSpace = 3 def calcPositions(self): LinePlot.calcPositions(self) nSeries = self._seriesCount zSpace = self.zSpace zDepth = self.zDepth if self.xValueAxis.style=='parallel_3d': _3d_depth = nSeries*zDepth+(nSeries+1)*zSpace else: _3d_depth = zDepth + 2*zSpace self._3d_dx = self.theta_x*_3d_depth self._3d_dy = self.theta_y*_3d_depth def _calc_z0(self,rowNo): zSpace = self.zSpace if self.xValueAxis.style=='parallel_3d': z0 = rowNo*(self.zDepth+zSpace)+zSpace else: z0 = zSpace return z0 def _zadjust(self,x,y,z): return x+z*self.theta_x, y+z*self.theta_y def makeLines(self): bubblePlot = getattr(self,'_bubblePlot',None) assert not bubblePlot, "_bubblePlot not supported for 3d yet" #if bubblePlot: # yA = self.yValueAxis # xA = self.xValueAxis # bubbleR = min(yA._bubbleRadius,xA._bubbleRadius) # bubbleMax = xA._bubbleMax labelFmt = self.lineLabelFormat positions = self._positions P = list(range(len(positions))) if self.reversePlotOrder: P.reverse() inFill = getattr(self,'_inFill',None) assert not inFill, "inFill not supported for 3d yet" #if inFill: # inFillY = self.xValueAxis._y # inFillX0 = self.yValueAxis._x # inFillX1 = inFillX0 + self.xValueAxis._length # inFillG = getattr(self,'_inFillG',g) zDepth = self.zDepth _zadjust = self._zadjust theta_x = self.theta_x theta_y = self.theta_y from reportlab.graphics.charts.linecharts import _FakeGroup F = _FakeGroup() from reportlab.graphics.charts.utils3d import _make_3d_line_info, find_intersections if self.xValueAxis.style!='parallel_3d': tileWidth = getattr(self,'_3d_tilewidth',1) if getattr(self,'_find_intersections',None): from copy import copy fpositions = list(map(copy,positions)) I = find_intersections(fpositions,small=tileWidth) ic = None for i,j,x,y in I: if ic!=i: ic = i jc = 0 else: jc+=1 fpositions[i].insert(j+jc,(x,y)) tileWidth = None else: fpositions = positions else: tileWidth = None fpositions = positions # Iterate over data rows. styleCount = len(self.lines) for rowNo in P: row = positions[rowNo] n = len(row) rowStyle = self.lines[rowNo % styleCount] rowColor = rowStyle.strokeColor dash = getattr(rowStyle, 'strokeDashArray', None) z0 = self._calc_z0(rowNo) z1 = z0 + zDepth if hasattr(rowStyle, 'strokeWidth'): width = rowStyle.strokeWidth elif hasattr(self.lines, 'strokeWidth'): width = self.lines.strokeWidth else: width = None # Iterate over data columns. if self.joinedLines: if n: frow = fpositions[rowNo] x0, y0 = frow[0] for colNo in range(1,len(frow)): x1, y1 = frow[colNo] _make_3d_line_info( F, x0, x1, y0, y1, z0, z1, theta_x, theta_y, rowColor, fillColorShaded=None, tileWidth=tileWidth, strokeColor=None, strokeWidth=None, strokeDashArray=None, shading=0.1) x0, y0 = x1, y1 if hasattr(rowStyle, 'symbol'): uSymbol = rowStyle.symbol elif hasattr(self.lines, 'symbol'): uSymbol = self.lines.symbol else: uSymbol = None if uSymbol: for xy in row: x1, y1 = row[colNo] x1, y1 = _zadjust(x1,y1,z0) symbol = uSymbol2Symbol(uSymbol,xy[0],xy[1],rowColor) if symbol: F.add((1,z0,z0,x1,y1,symbol)) # Draw data labels. for colNo in range(n): x1, y1 = row[colNo] x1, y1 = _zadjust(x1,y1,z0) L = self._innerDrawLabel(rowNo, colNo, x1, y1) if L: F.add((2,z0,z0,x1,y1,L)) F.sort() g = Group() for v in F.value(): g.add(v[-1]) return g _monthlyIndexData = [[(19971202, 100.0), (19971231, 100.1704367), (19980131, 101.5639577), (19980228, 102.1879927), (19980331, 101.6337257), (19980430, 102.7640446), (19980531, 102.9198038), (19980630, 103.25938789999999), (19980731, 103.2516421), (19980831, 105.4744329), (19980930, 109.3242705), (19981031, 111.9859291), (19981130, 110.9184642), (19981231, 110.9184642), (19990131, 111.9882532), (19990228, 109.7912614), (19990331, 110.24189629999999), (19990430, 110.4279321), (19990531, 109.33955469999999), (19990630, 108.2341748), (19990731, 110.21294469999999), (19990831, 110.9683062), (19990930, 112.4425371), (19991031, 112.7314032), (19991130, 112.3509645), (19991231, 112.3660659), (20000131, 110.9255248), (20000229, 110.5266306), (20000331, 113.3116101), (20000430, 111.0449133), (20000531, 111.702717), (20000630, 113.5832178)], [(19971202, 100.0), (19971231, 100.0), (19980131, 100.8), (19980228, 102.0), (19980331, 101.9), (19980430, 103.0), (19980531, 103.0), (19980630, 103.1), (19980731, 103.1), (19980831, 102.8), (19980930, 105.6), (19981031, 108.3), (19981130, 108.1), (19981231, 111.9), (19990131, 113.1), (19990228, 110.2), (19990331, 111.8), (19990430, 112.3), (19990531, 110.1), (19990630, 109.3), (19990731, 111.2), (19990831, 111.7), (19990930, 112.6), (19991031, 113.2), (19991130, 113.9), (19991231, 115.4), (20000131, 112.7), (20000229, 113.9), (20000331, 115.8), (20000430, 112.2), (20000531, 112.6), (20000630, 114.6)]] class SimpleTimeSeriesPlot(LinePlot): """A customized version of LinePlot. It uses NormalDateXValueAxis() and AdjYValueAxis() for the X and Y axes. """ def __init__(self): LinePlot.__init__(self) self.xValueAxis = NormalDateXValueAxis() self.yValueAxis = YValueAxis() self.data = _monthlyIndexData class GridLinePlot(SimpleTimeSeriesPlot): """A customized version of SimpleTimeSeriesSPlot. It uses NormalDateXValueAxis() and AdjYValueAxis() for the X and Y axes. The chart has a default grid background with thin horizontal lines aligned with the tickmarks (and labels). You can change the back- ground to be any Grid or ShadedRect, or scale the whole chart. If you do provide a background, you can specify the colours of the stripes with 'background.stripeColors'. """ _attrMap = AttrMap(BASE=LinePlot, background = AttrMapValue(None, desc='Background for chart area (now Grid or ShadedRect).'), scaleFactor = AttrMapValue(isNumberOrNone, desc='Scalefactor to apply to whole drawing.'), ) def __init__(self): from reportlab.lib import colors SimpleTimeSeriesPlot.__init__(self) self.scaleFactor = None self.background = Grid() self.background.orientation = 'horizontal' self.background.useRects = 0 self.background.useLines = 1 self.background.strokeWidth = 0.5 self.background.strokeColor = colors.black def demo(self,drawing=None): from reportlab.lib import colors if not drawing: drawing = Drawing(400, 200) lp = GridLinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = _monthlyIndexData lp.joinedLines = 1 lp.strokeColor = colors.black c0 = colors.PCMYKColor(100,65,0,30, spotName='PANTONE 288 CV', density=100) lp.lines[0].strokeColor = c0 lp.lines[0].strokeWidth = 2 lp.lines[0].strokeDashArray = None c1 = colors.PCMYKColor(0,79,91,0, spotName='PANTONE Wm Red CV', density=100) lp.lines[1].strokeColor = c1 lp.lines[1].strokeWidth = 1 lp.lines[1].strokeDashArray = [3,1] lp.xValueAxis.labels.fontSize = 10 lp.xValueAxis.labels.textAnchor = 'start' lp.xValueAxis.labels.boxAnchor = 'w' lp.xValueAxis.labels.angle = -45 lp.xValueAxis.labels.dx = 0 lp.xValueAxis.labels.dy = -8 lp.xValueAxis.xLabelFormat = '{mm}/{yy}' lp.yValueAxis.labelTextFormat = '%5d%% ' lp.yValueAxis.tickLeft = 5 lp.yValueAxis.labels.fontSize = 10 lp.background = Grid() lp.background.stripeColors = [colors.pink, colors.lightblue] lp.background.orientation = 'vertical' drawing.add(lp,'plot') return drawing def draw(self): xva, yva = self.xValueAxis, self.yValueAxis if xva: xva.joinAxis = yva if yva: yva.joinAxis = xva yva.setPosition(self.x, self.y, self.height) yva.configure(self.data) # if zero is in chart, put x axis there, otherwise # use bottom. xAxisCrossesAt = yva.scale(0) if ((xAxisCrossesAt > self.y + self.height) or (xAxisCrossesAt < self.y)): y = self.y else: y = xAxisCrossesAt xva.setPosition(self.x, y, self.width) xva.configure(self.data) back = self.background if isinstance(back, Grid): if back.orientation == 'vertical' and xva._tickValues: xpos = list(map(xva.scale, [xva._valueMin] + xva._tickValues)) steps = [] for i in range(len(xpos)-1): steps.append(xpos[i+1] - xpos[i]) back.deltaSteps = steps elif back.orientation == 'horizontal' and yva._tickValues: ypos = list(map(yva.scale, [yva._valueMin] + yva._tickValues)) steps = [] for i in range(len(ypos)-1): steps.append(ypos[i+1] - ypos[i]) back.deltaSteps = steps elif isinstance(back, DoubleGrid): # Ideally, these lines would not be needed... back.grid0.x = self.x back.grid0.y = self.y back.grid0.width = self.width back.grid0.height = self.height back.grid1.x = self.x back.grid1.y = self.y back.grid1.width = self.width back.grid1.height = self.height # some room left for optimization... if back.grid0.orientation == 'vertical' and xva._tickValues: xpos = list(map(xva.scale, [xva._valueMin] + xva._tickValues)) steps = [] for i in range(len(xpos)-1): steps.append(xpos[i+1] - xpos[i]) back.grid0.deltaSteps = steps elif back.grid0.orientation == 'horizontal' and yva._tickValues: ypos = list(map(yva.scale, [yva._valueMin] + yva._tickValues)) steps = [] for i in range(len(ypos)-1): steps.append(ypos[i+1] - ypos[i]) back.grid0.deltaSteps = steps if back.grid1.orientation == 'vertical' and xva._tickValues: xpos = list(map(xva.scale, [xva._valueMin] + xva._tickValues)) steps = [] for i in range(len(xpos)-1): steps.append(xpos[i+1] - xpos[i]) back.grid1.deltaSteps = steps elif back.grid1.orientation == 'horizontal' and yva._tickValues: ypos = list(map(yva.scale, [yva._valueMin] + yva._tickValues)) steps = [] for i in range(len(ypos)-1): steps.append(ypos[i+1] - ypos[i]) back.grid1.deltaSteps = steps self.calcPositions() width, height, scaleFactor = self.width, self.height, self.scaleFactor if scaleFactor and scaleFactor!=1: #g = Drawing(scaleFactor*width, scaleFactor*height) g.transform = (scaleFactor, 0, 0, scaleFactor,0,0) else: g = Group() g.add(self.makeBackground()) g.add(self.xValueAxis) g.add(self.yValueAxis) g.add(self.makeLines()) return g class AreaLinePlot(LinePlot): '''we're given data in the form [(X1,Y11,..Y1M)....(Xn,Yn1,...YnM)]'''#' def __init__(self): LinePlot.__init__(self) self._inFill = 1 self.reversePlotOrder = 1 self.data = [(1,20,100,30),(2,11,50,15),(3,15,70,40)] def draw(self): try: odata = self.data n = len(odata) m = len(odata[0]) S = n*[0] self.data = [] for i in range(1,m): D = [] for j in range(n): S[j] = S[j] + odata[j][i] D.append((odata[j][0],S[j])) self.data.append(D) return LinePlot.draw(self) finally: self.data = odata class SplitLinePlot(AreaLinePlot): def __init__(self): AreaLinePlot.__init__(self) self.xValueAxis = NormalDateXValueAxis() self.yValueAxis = AdjYValueAxis() self.data=[(20030601,0.95,0.05,0.0),(20030701,0.95,0.05,0.0),(20030801,0.95,0.05,0.0),(20030901,0.95,0.05,0.0),(20031001,0.95,0.05,0.0),(20031101,0.95,0.05,0.0),(20031201,0.95,0.05,0.0),(20040101,0.95,0.05,0.0),(20040201,0.95,0.05,0.0),(20040301,0.95,0.05,0.0),(20040401,0.95,0.05,0.0),(20040501,0.95,0.05,0.0),(20040601,0.95,0.05,0.0),(20040701,0.95,0.05,0.0),(20040801,0.95,0.05,0.0),(20040901,0.95,0.05,0.0),(20041001,0.95,0.05,0.0),(20041101,0.95,0.05,0.0),(20041201,0.95,0.05,0.0),(20050101,0.95,0.05,0.0),(20050201,0.95,0.05,0.0),(20050301,0.95,0.05,0.0),(20050401,0.95,0.05,0.0),(20050501,0.95,0.05,0.0),(20050601,0.95,0.05,0.0),(20050701,0.95,0.05,0.0),(20050801,0.95,0.05,0.0),(20050901,0.95,0.05,0.0),(20051001,0.95,0.05,0.0),(20051101,0.95,0.05,0.0),(20051201,0.95,0.05,0.0),(20060101,0.95,0.05,0.0),(20060201,0.95,0.05,0.0),(20060301,0.95,0.05,0.0),(20060401,0.95,0.05,0.0),(20060501,0.95,0.05,0.0),(20060601,0.95,0.05,0.0),(20060701,0.95,0.05,0.0),(20060801,0.95,0.05,0.0),(20060901,0.95,0.05,0.0),(20061001,0.95,0.05,0.0),(20061101,0.95,0.05,0.0),(20061201,0.95,0.05,0.0),(20070101,0.95,0.05,0.0),(20070201,0.95,0.05,0.0),(20070301,0.95,0.05,0.0),(20070401,0.95,0.05,0.0),(20070501,0.95,0.05,0.0),(20070601,0.95,0.05,0.0),(20070701,0.95,0.05,0.0),(20070801,0.95,0.05,0.0),(20070901,0.95,0.05,0.0),(20071001,0.95,0.05,0.0),(20071101,0.95,0.05,0.0),(20071201,0.95,0.05,0.0),(20080101,0.95,0.05,0.0),(20080201,0.95,0.05,0.0),(20080301,0.95,0.05,0.0),(20080401,0.95,0.05,0.0),(20080501,0.95,0.05,0.0),(20080601,0.95,0.05,0.0),(20080701,0.95,0.05,0.0),(20080801,0.95,0.05,0.0),(20080901,0.95,0.05,0.0),(20081001,0.95,0.05,0.0),(20081101,0.95,0.05,0.0),(20081201,0.95,0.05,0.0),(20090101,0.95,0.05,0.0),(20090201,0.91,0.09,0.0),(20090301,0.91,0.09,0.0),(20090401,0.91,0.09,0.0),(20090501,0.91,0.09,0.0),(20090601,0.91,0.09,0.0),(20090701,0.91,0.09,0.0),(20090801,0.91,0.09,0.0),(20090901,0.91,0.09,0.0),(20091001,0.91,0.09,0.0),(20091101,0.91,0.09,0.0),(20091201,0.91,0.09,0.0),(20100101,0.91,0.09,0.0),(20100201,0.81,0.19,0.0),(20100301,0.81,0.19,0.0),(20100401,0.81,0.19,0.0),(20100501,0.81,0.19,0.0),(20100601,0.81,0.19,0.0),(20100701,0.81,0.19,0.0),(20100801,0.81,0.19,0.0),(20100901,0.81,0.19,0.0),(20101001,0.81,0.19,0.0),(20101101,0.81,0.19,0.0),(20101201,0.81,0.19,0.0),(20110101,0.81,0.19,0.0),(20110201,0.72,0.28,0.0),(20110301,0.72,0.28,0.0),(20110401,0.72,0.28,0.0),(20110501,0.72,0.28,0.0),(20110601,0.72,0.28,0.0),(20110701,0.72,0.28,0.0),(20110801,0.72,0.28,0.0),(20110901,0.72,0.28,0.0),(20111001,0.72,0.28,0.0),(20111101,0.72,0.28,0.0),(20111201,0.72,0.28,0.0),(20120101,0.72,0.28,0.0),(20120201,0.53,0.47,0.0),(20120301,0.53,0.47,0.0),(20120401,0.53,0.47,0.0),(20120501,0.53,0.47,0.0),(20120601,0.53,0.47,0.0),(20120701,0.53,0.47,0.0),(20120801,0.53,0.47,0.0),(20120901,0.53,0.47,0.0),(20121001,0.53,0.47,0.0),(20121101,0.53,0.47,0.0),(20121201,0.53,0.47,0.0),(20130101,0.53,0.47,0.0),(20130201,0.44,0.56,0.0),(20130301,0.44,0.56,0.0),(20130401,0.44,0.56,0.0),(20130501,0.44,0.56,0.0),(20130601,0.44,0.56,0.0),(20130701,0.44,0.56,0.0),(20130801,0.44,0.56,0.0),(20130901,0.44,0.56,0.0),(20131001,0.44,0.56,0.0),(20131101,0.44,0.56,0.0),(20131201,0.44,0.56,0.0),(20140101,0.44,0.56,0.0),(20140201,0.36,0.5,0.14),(20140301,0.36,0.5,0.14),(20140401,0.36,0.5,0.14),(20140501,0.36,0.5,0.14),(20140601,0.36,0.5,0.14),(20140701,0.36,0.5,0.14),(20140801,0.36,0.5,0.14),(20140901,0.36,0.5,0.14),(20141001,0.36,0.5,0.14),(20141101,0.36,0.5,0.14),(20141201,0.36,0.5,0.14),(20150101,0.36,0.5,0.14),(20150201,0.3,0.41,0.29),(20150301,0.3,0.41,0.29),(20150401,0.3,0.41,0.29),(20150501,0.3,0.41,0.29),(20150601,0.3,0.41,0.29),(20150701,0.3,0.41,0.29),(20150801,0.3,0.41,0.29),(20150901,0.3,0.41,0.29),(20151001,0.3,0.41,0.29),(20151101,0.3,0.41,0.29),(20151201,0.3,0.41,0.29),(20160101,0.3,0.41,0.29),(20160201,0.26,0.36,0.38),(20160301,0.26,0.36,0.38),(20160401,0.26,0.36,0.38),(20160501,0.26,0.36,0.38),(20160601,0.26,0.36,0.38),(20160701,0.26,0.36,0.38),(20160801,0.26,0.36,0.38),(20160901,0.26,0.36,0.38),(20161001,0.26,0.36,0.38),(20161101,0.26,0.36,0.38),(20161201,0.26,0.36,0.38),(20170101,0.26,0.36,0.38),(20170201,0.2,0.3,0.5),(20170301,0.2,0.3,0.5),(20170401,0.2,0.3,0.5),(20170501,0.2,0.3,0.5),(20170601,0.2,0.3,0.5),(20170701,0.2,0.3,0.5),(20170801,0.2,0.3,0.5),(20170901,0.2,0.3,0.5),(20171001,0.2,0.3,0.5),(20171101,0.2,0.3,0.5),(20171201,0.2,0.3,0.5),(20180101,0.2,0.3,0.5),(20180201,0.13,0.37,0.5),(20180301,0.13,0.37,0.5),(20180401,0.13,0.37,0.5),(20180501,0.13,0.37,0.5),(20180601,0.13,0.37,0.5),(20180701,0.13,0.37,0.5),(20180801,0.13,0.37,0.5),(20180901,0.13,0.37,0.5),(20181001,0.13,0.37,0.5),(20181101,0.13,0.37,0.5),(20181201,0.13,0.37,0.5),(20190101,0.13,0.37,0.5),(20190201,0.1,0.4,0.5),(20190301,0.1,0.4,0.5),(20190401,0.1,0.4,0.5),(20190501,0.1,0.4,0.5),(20190601,0.1,0.4,0.5),(20190701,0.1,0.4,0.5),(20190801,0.1,0.4,0.5),(20190901,0.1,0.4,0.5),(20191001,0.1,0.4,0.5),(20191101,0.1,0.4,0.5),(20191201,0.1,0.4,0.5),(20200101,0.1,0.4,0.5)] self.yValueAxis.requiredRange = None self.yValueAxis.leftAxisPercent = 0 self.yValueAxis.leftAxisOrigShiftMin = 0 self.yValueAxis.leftAxisOrigShiftIPC = 0 self.lines[0].strokeColor = colors.toColor(0x0033cc) self.lines[1].strokeColor = colors.toColor(0x99c3ff) self.lines[2].strokeColor = colors.toColor(0xCC0033) def _maxWidth(T, fontName, fontSize): '''return max stringWidth for the list of strings T''' if not isinstance(T,(tuple,list)): T = (T,) T = [_f for _f in T if _f] return T and max(list(map(lambda t,sW=stringWidth,fN=fontName, fS=fontSize: sW(t,fN,fS),T))) or 0 class ScatterPlot(LinePlot): """A scatter plot widget""" _attrMap = AttrMap(BASE=LinePlot, width = AttrMapValue(isNumber, desc="Width of the area inside the axes"), height = AttrMapValue(isNumber, desc="Height of the area inside the axes"), outerBorderOn = AttrMapValue(isBoolean, desc="Is there an outer border (continuation of axes)"), outerBorderColor = AttrMapValue(isColorOrNone, desc="Color of outer border (if any)"), labelOffset = AttrMapValue(isNumber, desc="Space between label and Axis (or other labels)",advancedUsage=1), axisTickLengths = AttrMapValue(isNumber, desc="Lenth of the ticks on both axes"), axisStrokeWidth = AttrMapValue(isNumber, desc="Stroke width for both axes"), xLabel = AttrMapValue(isString, desc="Label for the whole X-Axis"), yLabel = AttrMapValue(isString, desc="Label for the whole Y-Axis"), data = AttrMapValue(isAnything, desc='Data points - a list of x/y tuples.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color used for border of plot area.'), fillColor = AttrMapValue(isColorOrNone, desc='Color used for background interior of plot area.'), leftPadding = AttrMapValue(isNumber, desc='Padding on left of drawing'), rightPadding = AttrMapValue(isNumber, desc='Padding on right of drawing'), topPadding = AttrMapValue(isNumber, desc='Padding at top of drawing'), bottomPadding = AttrMapValue(isNumber, desc='Padding at bottom of drawing'), ) def __init__(self): LinePlot.__init__(self) self.width = 142 self.height = 77 self.outerBorderOn = 1 self.outerBorderColor = colors.black self.background = None _labelOffset = 3 _axisTickLengths = 2 _axisStrokeWidth = 0.5 self.yValueAxis.valueMin = None self.yValueAxis.valueMax = None self.yValueAxis.valueStep = None self.yValueAxis.labelTextFormat = '%s' self.xLabel="X Lable" self.xValueAxis.labels.fontSize = 6 self.yLabel="Y Lable" self.yValueAxis.labels.fontSize = 6 self.data =[((0.030, 62.73), (0.074, 54.363), (1.216, 17.964)), ((1.360, 11.621), (1.387, 50.011), (1.428, 68.953)), ((1.444, 86.888), (1.754, 35.58), (1.766, 36.05))] #values for lineplot self.joinedLines = 0 self.leftPadding=5 self.rightPadding=10 self.topPadding=5 self.bottomPadding=5 self.x = self.leftPadding+_axisTickLengths+(_labelOffset*2) self.x=self.x+_maxWidth(str(self.yValueAxis.valueMax), self.yValueAxis.labels.fontName, self.yValueAxis.labels.fontSize) self.y = self.bottomPadding+_axisTickLengths+_labelOffset+self.xValueAxis.labels.fontSize self.xValueAxis.labels.dy = -_labelOffset self.xValueAxis.tickDown = _axisTickLengths self.xValueAxis.strokeWidth = _axisStrokeWidth self.xValueAxis.rangeRound='both' self.yValueAxis.labels.dx = -_labelOffset self.yValueAxis.tickLeft = _axisTickLengths self.yValueAxis.strokeWidth = _axisStrokeWidth self.yValueAxis.rangeRound='both' self.lineLabelFormat="%.2f" self.lineLabels.fontSize = 5 self.lineLabels.boxAnchor = 'e' self.lineLabels.dx = -2 self.lineLabelNudge = 0 self.lines.symbol=makeMarker('FilledCircle',size=3) self.lines[1].symbol=makeMarker('FilledDiamond',size=3) self.lines[2].symbol=makeMarker('FilledSquare',size=3) self.lines[2].strokeColor = colors.green def _getDrawingDimensions(self): tx = self.leftPadding+self.yValueAxis.tickLeft+(self.yValueAxis.labels.dx*2)+self.xValueAxis.labels.fontSize tx=tx+(5*_maxWidth(str(self.yValueAxis.valueMax), self.yValueAxis.labels.fontName, self.yValueAxis.labels.fontSize)) tx=tx+self.width+self.rightPadding t=('%.2f%%'%self.xValueAxis.valueMax) tx=tx+(_maxWidth(t, self.yValueAxis.labels.fontName, self.yValueAxis.labels.fontSize)) ty = self.bottomPadding+self.xValueAxis.tickDown+(self.xValueAxis.labels.dy*2)+(self.xValueAxis.labels.fontSize*2) ty=ty+self.yValueAxis.labels.fontSize+self.height+self.topPadding #print (tx, ty) return (tx,ty) def demo(self,drawing=None): if not drawing: tx,ty=self._getDrawingDimensions() drawing = Drawing(tx,ty) drawing.add(self.draw()) return drawing def draw(self): ascent=getFont(self.xValueAxis.labels.fontName).face.ascent if ascent==0: ascent=0.718 # default (from helvetica) ascent=ascent*self.xValueAxis.labels.fontSize # normalize #basic LinePlot - does the Axes, Ticks etc lp = LinePlot.draw(self) xLabel = self.xLabel if xLabel: #Overall label for the X-axis xl=Label() xl.x = (self.x+self.width)/2.0 xl.y = 0 xl.fontName = self.xValueAxis.labels.fontName xl.fontSize = self.xValueAxis.labels.fontSize xl.setText(xLabel) lp.add(xl) yLabel = self.yLabel if yLabel: #Overall label for the Y-axis yl=Label() yl.angle = 90 yl.x = 0 yl.y = (self.y+self.height/2.0) yl.fontName = self.yValueAxis.labels.fontName yl.fontSize = self.yValueAxis.labels.fontSize yl.setText(yLabel) lp.add(yl) # do a bounding box - in the same style as the axes if self.outerBorderOn: lp.add(Rect(self.x, self.y, self.width, self.height, strokeColor = self.outerBorderColor, strokeWidth = self.yValueAxis.strokeWidth, fillColor = None)) lp.shift(self.leftPadding, self.bottomPadding) return lp def sample1a(): "A line plot with non-equidistant points in x-axis." drawing = Drawing(400, 200) data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3.5,5), (4,6)) ] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.strokeColor = colors.black lp.lines.symbol = makeMarker('UK_Flag') lp.lines[0].strokeWidth = 2 lp.lines[1].strokeWidth = 4 lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueStep = 1 lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueStep = 1 drawing.add(lp) return drawing def sample1b(): "A line plot with non-equidistant points in x-axis." drawing = Drawing(400, 200) data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3.5,5), (4,6)) ] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.lines.symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueStep = 1 drawing.add(lp) return drawing def sample1c(): "A line plot with non-equidistant points in x-axis." drawing = Drawing(400, 200) data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3.5,5), (4,6)) ] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) return drawing def preprocessData(series): "Convert date strings into seconds and multiply values by 100." return [(str2seconds(x[0]), x[1]*100) for x in series] def sample2(): "A line plot with non-equidistant points in x-axis." drawing = Drawing(400, 200) data = [ (('25/11/1991',1), ('30/11/1991',1.000933333), ('31/12/1991',1.0062), ('31/01/1992',1.0112), ('29/02/1992',1.0158), ('31/03/1992',1.020733333), ('30/04/1992',1.026133333), ('31/05/1992',1.030266667), ('30/06/1992',1.034466667), ('31/07/1992',1.038733333), ('31/08/1992',1.0422), ('30/09/1992',1.045533333), ('31/10/1992',1.049866667), ('30/11/1992',1.054733333), ('31/12/1992',1.061), ), ] data[0] = preprocessData(data[0]) lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.lines.symbol = makeMarker('FilledDiamond') lp.strokeColor = colors.black start = mktime(mkTimeTuple('25/11/1991')) t0 = mktime(mkTimeTuple('30/11/1991')) t1 = mktime(mkTimeTuple('31/12/1991')) t2 = mktime(mkTimeTuple('31/03/1992')) t3 = mktime(mkTimeTuple('30/06/1992')) t4 = mktime(mkTimeTuple('30/09/1992')) end = mktime(mkTimeTuple('31/12/1992')) lp.xValueAxis.valueMin = start lp.xValueAxis.valueMax = end lp.xValueAxis.valueSteps = [start, t0, t1, t2, t3, t4, end] lp.xValueAxis.labelTextFormat = seconds2str lp.xValueAxis.labels[1].dy = -20 lp.xValueAxis.labels[2].dy = -35 lp.yValueAxis.labelTextFormat = '%4.2f' lp.yValueAxis.valueMin = 100 lp.yValueAxis.valueMax = 110 lp.yValueAxis.valueStep = 2 drawing.add(lp) return drawing def sampleFillPairedData(): d = Drawing(400,200) chart = SimpleTimeSeriesPlot() d.add(chart) chart.data = [FillPairedData(chart.data[0],1),chart.data[1]] chart.lines[0].filler= Filler(fillColor=colors.toColor('#9f9f9f'),strokeWidth=0,strokeColor=None) chart.lines[0].strokeColor = None chart.lines[1].strokeColor = None return d reportlab-3.5.34/src/reportlab/graphics/testshapes.py0000664000175000017500000004171013554340114023515 0ustar rptlabrptlab00000000000000#!/bin/env python #Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/testshapes.py # testshapes.py - draws shapes onto a PDF canvas. __version__ = ''' $Id $ ''' __doc__='''Execute this script to see some test drawings. This contains a number of routines to generate test drawings for reportlab/graphics. For now many of them are contrived, but we will expand them to try and trip up any parser. Feel free to add more. ''' import os, sys, base64 from reportlab.lib import colors from reportlab.lib.units import cm from reportlab.lib.utils import asNative from reportlab.pdfgen.canvas import Canvas from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.platypus import Flowable from reportlab.graphics.shapes import * from reportlab.graphics.renderPDF import _PDFRenderer import unittest _FONTS = ['Times-Roman','Vera','Times-BoldItalic',] def _setup(): from reportlab.pdfbase import pdfmetrics, ttfonts pdfmetrics.registerFont(ttfonts.TTFont("Vera", "Vera.ttf")) pdfmetrics.registerFont(ttfonts.TTFont("VeraBd", "VeraBd.ttf")) pdfmetrics.registerFont(ttfonts.TTFont("VeraIt", "VeraIt.ttf")) pdfmetrics.registerFont(ttfonts.TTFont("VeraBI", "VeraBI.ttf")) F = ['Times-Roman','Courier','Helvetica','Vera', 'VeraBd', 'VeraIt', 'VeraBI'] if sys.platform=='win32': for name, ttf in [ ('Adventurer Light SF','Advlit.ttf'),('ArialMS','ARIAL.TTF'), ('Arial Unicode MS', 'ARIALUNI.TTF'), ('Book Antiqua','BKANT.TTF'), ('Century Gothic','GOTHIC.TTF'), ('Comic Sans MS', 'COMIC.TTF'), ('Elementary Heavy SF Bold','Vwagh.ttf'), ('Firenze SF','flot.ttf'), ('Garamond','GARA.TTF'), ('Jagger','Rols.ttf'), ('Monotype Corsiva','MTCORSVA.TTF'), ('Seabird SF','seag.ttf'), ('Tahoma','TAHOMA.TTF'), ('VerdanaMS','VERDANA.TTF'), ]: for D in (r'c:\WINNT',r'c:\Windows'): fn = os.path.join(D,'Fonts',ttf) if os.path.isfile(fn): try: f = ttfonts.TTFont(name, fn) pdfmetrics.registerFont(f) F.append(name) except: pass return F def resetFonts(): for f in _setup(): if f not in _FONTS: _FONTS.append(f) from reportlab.rl_config import register_reset register_reset(resetFonts) resetFonts() ######################################################### # # Collections of shape drawings. # ######################################################### def getFailedDrawing(funcName): """Generate a drawing in case something goes really wrong. This will create a drawing to be displayed whenever some other drawing could not be executed, because the generating function does something terribly wrong! The box contains an attention triangle, plus some error message. """ D = Drawing(400, 200) points = [200,170, 140,80, 260,80] D.add(Polygon(points, strokeWidth=0.5*cm, strokeColor=colors.red, fillColor=colors.yellow)) s = String(200, 40, "Error in generating function '%s'!" % funcName, textAnchor='middle') D.add(s) return D # These are the real drawings to be eye-balled. def getDrawing01(): """Hello World, on a rectangular background. The rectangle's fillColor is yellow. The string's fillColor is red. """ D = Drawing(400, 200) D.add(Rect(50, 50, 300, 100, fillColor=colors.yellow)) D.add(String(180,100, 'Hello World', fillColor=colors.red)) D.add(String(180,86, b'Special characters \xc2\xa2\xc2\xa9\xc2\xae\xc2\xa3\xce\xb1\xce\xb2', fillColor=colors.red)) return D def getDrawing02(): """Various Line shapes. The lines are blue and their strokeWidth is 5 mm. One line has a strokeDashArray set to [5, 10, 15]. """ D = Drawing(400, 200) D.add(Line(50,50, 300,100, strokeColor=colors.blue, strokeWidth=0.5*cm, )) D.add(Line(50,100, 300,50, strokeColor=colors.blue, strokeWidth=0.5*cm, strokeDashArray=[5, 10, 15], )) #x = 1/0 # Comment this to see the actual drawing! return D def getDrawing03(): """Text strings in various sizes and different fonts. Font size increases from 12 to 36 and from bottom left to upper right corner. The first ones should be in Times-Roman. Finally, a solitary Courier string at the top right corner. """ D = Drawing(400, 200) for size in range(12, 36, 4): D.add(String(10+size*2, 10+size*2, 'Hello World', fontName=_FONTS[0], fontSize=size)) D.add(String(150, 150, 'Hello World', fontName=_FONTS[1], fontSize=36)) return D def getDrawing04(): """Text strings in various colours. Colours are blue, yellow and red from bottom left to upper right. """ D = Drawing(400, 200) i = 0 for color in (colors.blue, colors.yellow, colors.red): D.add(String(50+i*30, 50+i*30, 'Hello World', fillColor=color)) i = i + 1 return D def getDrawing05(): """Text strings with various anchors (alignments). Text alignment conforms to the anchors in the left column. """ D = Drawing(400, 200) lineX = 250 D.add(Line(lineX,10, lineX,190, strokeColor=colors.gray)) y = 130 for anchor in ('start', 'middle', 'end'): D.add(String(lineX, y, 'Hello World', textAnchor=anchor)) D.add(String(50, y, anchor + ':')) y = y - 30 return D def getDrawing06(): """This demonstrates all the basic shapes at once. There are no groups or references. Each solid shape should have a green fill. """ green = colors.green D = Drawing(400, 200) #, fillColor=green) D.add(Line(10,10, 390,190)) D.add(Circle(100,100,20, fillColor=green)) D.add(Circle(200,100,40, fillColor=green)) D.add(Circle(300,100,30, fillColor=green)) D.add(Wedge(330,100,40, -10,40, fillColor=green)) D.add(PolyLine([120,10, 130,20, 140,10, 150,20, 160,10, 170,20, 180,10, 190,20, 200,10], fillColor=green)) D.add(Polygon([300,20, 350,20, 390,80, 300,75, 330,40], fillColor=green)) D.add(Ellipse(50,150, 40, 20, fillColor=green)) D.add(Rect(120,150, 60,30, strokeWidth=10, strokeColor=colors.yellow, fillColor=green)) #square corners D.add(Rect(220, 150, 60, 30, 10, 10, fillColor=green)) #round corners D.add(String(10,50, 'Basic Shapes', fillColor=colors.black, fontName='Helvetica')) return D def getDrawing07(): """This tests the ability to translate and rotate groups. The first set of axes should be near the bottom left of the drawing. The second should be rotated counterclockwise by 15 degrees. The third should be rotated by 30 degrees.""" D = Drawing(400, 200) Axis = Group( Line(0,0,100,0), #x axis Line(0,0,0,50), # y axis Line(0,10,10,10), #ticks on y axis Line(0,20,10,20), Line(0,30,10,30), Line(0,40,10,40), Line(10,0,10,10), #ticks on x axis Line(20,0,20,10), Line(30,0,30,10), Line(40,0,40,10), Line(50,0,50,10), Line(60,0,60,10), Line(70,0,70,10), Line(80,0,80,10), Line(90,0,90,10), String(20, 35, 'Axes', fill=colors.black) ) firstAxisGroup = Group(Axis) firstAxisGroup.translate(10,10) D.add(firstAxisGroup) secondAxisGroup = Group(Axis) secondAxisGroup.translate(150,10) secondAxisGroup.rotate(15) D.add(secondAxisGroup) thirdAxisGroup = Group(Axis, transform=mmult(translate(300,10), rotate(30))) D.add(thirdAxisGroup) return D def getDrawing08(): """This tests the ability to scale coordinates. The bottom left set of axes should be near the bottom left of the drawing. The bottom right should be stretched vertically by a factor of 2. The top left one should be stretched horizontally by a factor of 2. The top right should have the vertical axiss leaning over to the right by 30 degrees.""" D = Drawing(400, 200) Axis = Group( Line(0,0,100,0), #x axis Line(0,0,0,50), # y axis Line(0,10,10,10), #ticks on y axis Line(0,20,10,20), Line(0,30,10,30), Line(0,40,10,40), Line(10,0,10,10), #ticks on x axis Line(20,0,20,10), Line(30,0,30,10), Line(40,0,40,10), Line(50,0,50,10), Line(60,0,60,10), Line(70,0,70,10), Line(80,0,80,10), Line(90,0,90,10), String(20, 35, 'Axes', fill=colors.black) ) firstAxisGroup = Group(Axis) firstAxisGroup.translate(10,10) D.add(firstAxisGroup) secondAxisGroup = Group(Axis) secondAxisGroup.translate(150,10) secondAxisGroup.scale(1,2) D.add(secondAxisGroup) thirdAxisGroup = Group(Axis) thirdAxisGroup.translate(10,125) thirdAxisGroup.scale(2,1) D.add(thirdAxisGroup) fourthAxisGroup = Group(Axis) fourthAxisGroup.translate(250,125) fourthAxisGroup.skew(30,0) D.add(fourthAxisGroup) return D def getDrawing09(): """This tests rotated strings Some renderers will have a separate mechanism for font drawing. This test just makes sure strings get transformed the same way as regular graphics.""" D = Drawing(400, 200) fontName = _FONTS[0] fontSize = 12 text = "I should be totally horizontal and enclosed in a box" textWidth = stringWidth(text, fontName, fontSize) g1 = Group( String(20, 20, text, fontName=fontName, fontSize = fontSize), Rect(18, 18, textWidth + 4, fontSize + 4, fillColor=None) ) D.add(g1) text = "I should slope up by 15 degrees, so my right end is higher than my left" textWidth = stringWidth(text, fontName, fontSize) g2 = Group( String(20, 20, text, fontName=fontName, fontSize = fontSize), Rect(18, 18, textWidth + 4, fontSize + 4, fillColor=None) ) g2.translate(0, 50) g2.rotate(15) D.add(g2) return D def getDrawing10(): """This tests nested groups with multiple levels of coordinate transformation. Each box should be staggered up and to the right, moving by 25 points each time.""" D = Drawing(400, 200) fontName = _FONTS[0] fontSize = 12 g1 = Group( Rect(0, 0, 100, 20, fillColor=colors.yellow), String(5, 5, 'Text in the box', fontName=fontName, fontSize = fontSize) ) D.add(g1) g2 = Group(g1, transform = translate(25,25)) D.add(g2) g3 = Group(g2, transform = translate(25,25)) D.add(g3) g4 = Group(g3, transform = translate(25,25)) D.add(g4) return D from reportlab.graphics.widgets.signsandsymbols import SmileyFace def getDrawing11(): '''test of anchoring''' def makeSmiley(x, y, size, color): "Make a smiley data item representation." d = size s = SmileyFace() s.fillColor = color s.x = x-d s.y = y-d s.size = d*2 return s D = Drawing(400, 200) #, fillColor=colors.purple) g = Group(transform=(1,0,0,1,0,0)) g.add(makeSmiley(100,100,10,colors.red)) g.add(Line(90,100,110,100,strokeColor=colors.green)) g.add(Line(100,90,100,110,strokeColor=colors.green)) D.add(g) g = Group(transform=(2,0,0,2,100,-100)) g.add(makeSmiley(100,100,10,colors.blue)) g.add(Line(90,100,110,100,strokeColor=colors.green)) g.add(Line(100,90,100,110,strokeColor=colors.green)) D.add(g) g = Group(transform=(2,0,0,2,0,0)) return D def getDrawing12(): """Text strings in a non-standard font. All that is required is to place the .afm and .pfb files on the font patch given in rl_config.py, for example in reportlab/lib/fonts/. """ faceName = "DarkGardenMK" D = Drawing(400, 200) for size in range(12, 36, 4): D.add(String(10+size*2, 10+size*2, 'Hello World', fontName=faceName, fontSize=size)) return D def getDrawing13(): 'Test Various TTF Fonts' def drawit(F,w=400,h=200,fontSize=12,slack=2,gap=5): D = Drawing(w,h) th = 2*gap + fontSize*1.2 gh = gap + .2*fontSize y = h maxx = 0 for fontName in F: y -= th text = fontName+asNative(b': I should be totally horizontal and enclosed in a box and end in alphabetagamma \xc2\xa2\xc2\xa9\xc2\xae\xc2\xa3\xca\xa5\xd0\x96\xd6\x83\xd7\x90\xd9\x82\xe0\xa6\x95\xce\xb1\xce\xb2\xce\xb3') textWidth = stringWidth(text, fontName, fontSize) maxx = max(maxx,textWidth+20) D.add( Group(Rect(8, y-gh, textWidth + 4, th, strokeColor=colors.red, strokeWidth=.5, fillColor=colors.lightgrey), String(10, y, text, fontName=fontName, fontSize = fontSize))) y -= 5 return maxx, h-y+gap, D maxx, maxy, D = drawit(_FONTS) if maxx>400 or maxy>200: _,_,D = drawit(_FONTS,maxx,maxy) return D def smallArrow(): '''create a small PIL image''' from reportlab.graphics.renderPM import _getImage from reportlab.lib.utils import getBytesIO b = base64.decodestring(b'''R0lGODdhCgAHAIMAAP/////29v/d3f+ysv9/f/9VVf9MTP8iIv8ICP8AAAAAAAAAAAAAAAAAAAAA AAAAACwAAAAACgAHAAAIMwABCBxIsKABAQASFli4MAECAgEAJJhIceKBAQkyasx4YECBjx8TICAQ AIDJkwYEAFgZEAA7''') return _getImage().open(getBytesIO(b)) def getDrawing14(): '''test shapes.Image''' from reportlab.graphics.shapes import Image D = Drawing(400, 200) im0 = smallArrow() D.add(Image(x=0,y=0,width=None,height=None,path=im0)) im1 = smallArrow() D.add(Image(x=400-20,y=200-14,width=20,height=14,path=im1)) return D def getAllFunctionDrawingNames(doTTF=1): "Get a list of drawing function names from somewhere." funcNames = [] # Here we get the names from the global name space. symbols = list(globals().keys()) symbols.sort() for funcName in symbols: if funcName[0:10] == 'getDrawing': if doTTF or funcName!='getDrawing13': funcNames.append(funcName) return funcNames def _evalFuncDrawing(name, D, l=None, g=None): if g is None: g = globals() if l is None: l = locals() func = l.get(name,g.get(name,None)) try: d = func() except: d = getFailedDrawing(name) D.append((d, getattr(func,'.__doc__',''), name[3:])) def getAllTestDrawings(doTTF=1): D = [] for f in getAllFunctionDrawingNames(doTTF=doTTF): _evalFuncDrawing(f,D) return D def writePDF(drawings): "Create and save a PDF file containing some drawings." pdfPath = os.path.splitext(sys.argv[0])[0] + '.pdf' c = Canvas(pdfPath) c.setFont(_FONTS[0], 32) c.drawString(80, 750, 'ReportLab Graphics-Shapes Test') # Print drawings in a loop, with their doc strings. c.setFont(_FONTS[0], 12) y = 740 i = 1 for (drawing, docstring, funcname) in drawings: if y < 300: # Allows 5-6 lines of text. c.showPage() y = 740 # Draw a title. y = y - 30 c.setFont(_FONTS[2],12) c.drawString(80, y, '%s (#%d)' % (funcname, i)) c.setFont(_FONTS[0],12) y = y - 14 textObj = c.beginText(80, y) textObj.textLines(docstring) c.drawText(textObj) y = textObj.getY() y = y - drawing.height drawing.drawOn(c, 80, y) i = i + 1 c.save() print('wrote %s ' % pdfPath) class ShapesTestCase(unittest.TestCase): "Test generating all kinds of shapes." def setUp(self): "Prepare some things before the tests start." self.funcNames = getAllFunctionDrawingNames() self.drawings = [] def tearDown(self): "Do what has to be done after the tests are over." writePDF(self.drawings) # This should always succeed. If each drawing would be # wrapped in a dedicated test method like this one, it # would be possible to have a count for wrong tests # as well... Something like this is left for later... def testAllDrawings(self): "Make a list of drawings." for f in self.funcNames: if f[0:10] == 'getDrawing': # Make an instance and get its doc string. # If that fails, use a default error drawing. _evalFuncDrawing(f,self.drawings) def makeSuite(): "Make a test suite for unit testing." suite = unittest.TestSuite() suite.addTest(ShapesTestCase('testAllDrawings')) return suite if __name__ == "__main__": unittest.TextTestRunner().run(makeSuite()) reportlab-3.5.34/src/reportlab/graphics/renderPS.py0000664000175000017500000010715413554340114023061 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/renderPS.py __version__='3.3.0' __doc__="""Render drawing objects in Postscript""" from reportlab.pdfbase.pdfmetrics import getFont, stringWidth, unicode2T1 # for font info from reportlab.lib.utils import getBytesIO, getStringIO, asBytes, char2int, rawBytes, asNative, isUnicode from reportlab.lib.rl_accel import fp_str from reportlab.lib.colors import black from reportlab.graphics.renderbase import Renderer, StateTracker, getStateDelta, renderScaledDrawing from reportlab.graphics.shapes import STATE_DEFAULTS import math from operator import getitem from reportlab import rl_config, xrange, ascii from reportlab.pdfgen.canvas import FILL_EVEN_ODD, FILL_NON_ZERO _ESCAPEDICT={} for c in xrange(256): if c<32 or c>=127: _ESCAPEDICT[c]= '\\%03o' % c elif c in (ord('\\'),ord('('),ord(')')): _ESCAPEDICT[c] = '\\'+chr(c) else: _ESCAPEDICT[c] = chr(c) del c def _escape_and_limit(s): s = asBytes(s) R = [] aR = R.append n = 0 for c in s: c = _ESCAPEDICT[char2int(c)] aR(c) n += len(c) if n>=200: n = 0 aR('\\\n') return ''.join(R) # we need to create encoding vectors for each font we use, or they will # come out in Adobe's old StandardEncoding, which NOBODY uses. PS_WinAnsiEncoding=""" /RE { %def findfont begin currentdict dup length dict begin { %forall 1 index /FID ne { def } { pop pop } ifelse } forall /FontName exch def dup length 0 ne { %if /Encoding Encoding 256 array copy def 0 exch { %forall dup type /nametype eq { %ifelse Encoding 2 index 2 index put pop 1 add }{ %else exch pop } ifelse } forall } if pop currentdict dup end end /FontName get exch definefont pop } bind def /WinAnsiEncoding [ 39/quotesingle 96/grave 128/euro 130/quotesinglbase/florin/quotedblbase /ellipsis/dagger/daggerdbl/circumflex/perthousand /Scaron/guilsinglleft/OE 145/quoteleft/quoteright /quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/dotlessi 159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright /ordfeminine 172/logicalnot 174/registered/macron/ring 177/plusminus/twosuperior/threesuperior/acute/mu 183/periodcentered/cedilla/onesuperior/ordmasculine 188/onequarter/onehalf/threequarters 192/Agrave/Aacute /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute /Ocircumflex/Otilde/Odieresis/multiply/Oslash /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn /germandbls/agrave/aacute/acircumflex/atilde/adieresis /aring/ae/ccedilla/egrave/eacute/ecircumflex /edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde /odieresis/divide/oslash/ugrave/uacute/ucircumflex /udieresis/yacute/thorn/ydieresis ] def """ class PSCanvas: def __init__(self,size=(300,300), PostScriptLevel=2): self.width, self.height = size xtraState = [] self._xtraState_push = xtraState.append self._xtraState_pop = xtraState.pop self.comments = 0 self.code = [] self.code_append = self.code.append self._sep = '\n' self._strokeColor = self._fillColor = self._lineWidth = \ self._font = self._fontSize = self._lineCap = \ self._lineJoin = self._color = None self._fontsUsed = [] # track them as we go self.setFont(STATE_DEFAULTS['fontName'],STATE_DEFAULTS['fontSize']) self.setStrokeColor(STATE_DEFAULTS['strokeColor']) self.setLineCap(2) self.setLineJoin(0) self.setLineWidth(1) self.PostScriptLevel=PostScriptLevel self._fillMode = FILL_EVEN_ODD def comment(self,msg): if self.comments: self.code_append('%'+msg) def drawImage(self, image, x1,y1, width=None,height=None): # Postscript Level2 version # select between postscript level 1 or level 2 if self.PostScriptLevel==1: self._drawImageLevel1(image, x1,y1, width, height) elif self.PostScriptLevel==2: self._drawImageLevel2(image, x1, y1, width, height) else : raise ValueError('Unsupported Postscript Level %s' % self.PostScriptLevel) def clear(self): self.code_append('showpage') # ugh, this makes no sense oh well. def _t1_re_encode(self): if not self._fontsUsed: return # for each font used, reencode the vectors C = [] for fontName in self._fontsUsed: fontObj = getFont(fontName) if not fontObj._dynamicFont and fontObj.encName=='WinAnsiEncoding': C.append('WinAnsiEncoding /%s /%s RE' % (fontName, fontName)) if C: C.insert(0,PS_WinAnsiEncoding) self.code.insert(1, self._sep.join(C)) def save(self,f=None): if not hasattr(f,'write'): _f = open(f,'wb') else: _f = f if self.code[-1]!='showpage': self.clear() self.code.insert(0,'''\ %%!PS-Adobe-3.0 EPSF-3.0 %%%%BoundingBox: 0 0 %d %d %%%% Initialization: /m {moveto} bind def /l {lineto} bind def /c {curveto} bind def ''' % (self.width,self.height)) self._t1_re_encode() _f.write(rawBytes(self._sep.join(self.code))) if _f is not f: _f.close() from reportlab.lib.utils import markfilename markfilename(f,creatorcode='XPR3',filetype='EPSF') def saveState(self): self._xtraState_push((self._fontCodeLoc,)) self.code_append('gsave') def restoreState(self): self.code_append('grestore') self._fontCodeLoc, = self._xtraState_pop() def stringWidth(self, s, font=None, fontSize=None): """Return the logical width of the string if it were drawn in the current font (defaults to self.font).""" font = font or self._font fontSize = fontSize or self._fontSize return stringWidth(s, font, fontSize) def setLineCap(self,v): if self._lineCap!=v: self._lineCap = v self.code_append('%d setlinecap'%v) def setLineJoin(self,v): if self._lineJoin!=v: self._lineJoin = v self.code_append('%d setlinejoin'%v) def setDash(self, array=[], phase=0): """Two notations. pass two numbers, or an array and phase""" # copied and modified from reportlab.canvas psoperation = "setdash" if isinstance(array,(float,int)): self.code_append('[%s %s] 0 %s' % (array, phase, psoperation)) elif isinstance(array,(tuple,list)): assert phase >= 0, "phase is a length in user space" textarray = ' '.join(map(str, array)) self.code_append('[%s] %s %s' % (textarray, phase, psoperation)) def setStrokeColor(self, color): self._strokeColor = color self.setColor(color) def setColor(self, color): if self._color!=color: self._color = color if color: if hasattr(color, "cyan"): self.code_append('%s setcmykcolor' % fp_str(color.cyan, color.magenta, color.yellow, color.black)) else: self.code_append('%s setrgbcolor' % fp_str(color.red, color.green, color.blue)) def setFillColor(self, color): self._fillColor = color self.setColor(color) def setFillMode(self, v): self._fillMode = v def setLineWidth(self, width): if width != self._lineWidth: self._lineWidth = width self.code_append('%s setlinewidth' % width) def setFont(self,font,fontSize,leading=None): if self._font!=font or self._fontSize!=fontSize: self._fontCodeLoc = len(self.code) self._font = font self._fontSize = fontSize self.code_append('') def line(self, x1, y1, x2, y2): if self._strokeColor != None: self.setColor(self._strokeColor) self.code_append('%s m %s l stroke' % (fp_str(x1, y1), fp_str(x2, y2))) def _escape(self, s): ''' return a copy of string s with special characters in postscript strings escaped with backslashes. ''' try: return _escape_and_limit(s) except: raise ValueError("cannot escape %s" % ascii(s)) def _issueT1String(self,fontObj,x,y,s): fc = fontObj code_append = self.code_append fontSize = self._fontSize fontsUsed = self._fontsUsed escape = self._escape if not isUnicode(s): try: s = s.decode('utf8') except UnicodeDecodeError as e: i,j = e.args[2:4] raise UnicodeDecodeError(*(e.args[:4]+('%s\n%s-->%s<--%s' % (e.args[4],s[i-10:i],s[i:j],s[j:j+10]),))) for f, t in unicode2T1(s,[fontObj]+fontObj.substitutionFonts): if f!=fc: psName = asNative(f.face.name) code_append('(%s) findfont %s scalefont setfont' % (psName,fp_str(fontSize))) if psName not in fontsUsed: fontsUsed.append(psName) fc = f code_append('%s m (%s) show ' % (fp_str(x,y),escape(t))) x += f.stringWidth(t.decode(f.encName),fontSize) if fontObj!=fc: self._font = None self.setFont(fontObj.face.name,fontSize) def drawString(self, x, y, s, angle=0): if self._fillColor != None: fontObj = getFont(self._font) if not self.code[self._fontCodeLoc]: psName = asNative(fontObj.face.name) self.code[self._fontCodeLoc]='(%s) findfont %s scalefont setfont' % (psName,fp_str(self._fontSize)) if psName not in self._fontsUsed: self._fontsUsed.append(psName) self.setColor(self._fillColor) if angle!=0: self.code_append('gsave %s translate %s rotate' % (fp_str(x,y),fp_str(angle))) x = y = 0 if fontObj._dynamicFont: s = self._escape(s) self.code_append('%s m (%s) show ' % (fp_str(x,y),s)) else: self._issueT1String(fontObj,x,y,s) if angle!=0: self.code_append('grestore') def drawCentredString(self, x, y, text, text_anchor='middle'): if self._fillColor is not None: textLen = stringWidth(text, self._font,self._fontSize) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen/2. elif text_anchor=='numeric': x -= numericXShift(text_anchor,text,textLen,self._font,self._fontSize) self.drawString(x,y,text) def drawRightString(self, text, x, y): self.drawCentredString(text,x,y,text_anchor='end') def drawCurve(self, x1, y1, x2, y2, x3, y3, x4, y4, closed=0): codeline = '%s m %s curveto' data = (fp_str(x1, y1), fp_str(x2, y2, x3, y3, x4, y4)) if self._fillColor != None: self.setColor(self._fillColor) self.code_append((codeline % data) + ' eofill') if self._strokeColor != None: self.setColor(self._strokeColor) self.code_append((codeline % data) + ((closed and ' closepath') or '') + ' stroke') ######################################################################################## def rect(self, x1,y1, x2,y2, stroke=1, fill=1): "Draw a rectangle between x1,y1, and x2,y2" # Path is drawn in counter-clockwise direction" x1, x2 = min(x1,x2), max(x1, x2) # from piddle.py y1, y2 = min(y1,y2), max(y1, y2) self.polygon(((x1,y1),(x2,y1),(x2,y2),(x1,y2)), closed=1, stroke=stroke, fill = fill) def roundRect(self, x1,y1, x2,y2, rx=8, ry=8): """Draw a rounded rectangle between x1,y1, and x2,y2, with corners inset as ellipses with x radius rx and y radius ry. These should have x10, and ry>0.""" # Path is drawn in counter-clockwise direction x1, x2 = min(x1,x2), max(x1, x2) # from piddle.py y1, y2 = min(y1,y2), max(y1, y2) # Note: arcto command draws a line from current point to beginning of arc # save current matrix, translate to center of ellipse, scale by rx ry, and draw # a circle of unit radius in counterclockwise dir, return to original matrix # arguments are (cx, cy, rx, ry, startAngle, endAngle) ellipsePath = 'matrix currentmatrix %s %s translate %s %s scale 0 0 1 %s %s arc setmatrix' # choice between newpath and moveTo beginning of arc # go with newpath for precision, does this violate any assumptions in code??? rr = ['newpath'] # Round Rect code path a = rr.append # upper left corner ellipse is first a(ellipsePath % (x1+rx, y1+ry, rx, -ry, 90, 180)) a(ellipsePath % (x1+rx, y2-ry, rx, -ry, 180, 270)) a(ellipsePath % (x2-rx, y2-ry, rx, -ry, 270, 360)) a(ellipsePath % (x2-rx, y1+ry, rx, -ry, 0, 90) ) a('closepath') self._fillAndStroke(rr) def ellipse(self, x1,y1, x2,y2): """Draw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2. These should have x1= 0: arc='arc' else: arc='arcn' data = (x,y, xScale, yScale, startAng, startAng+extent, arc) return codeline % data def polygon(self, p, closed=0, stroke=1, fill=1): assert len(p) >= 2, 'Polygon must have 2 or more points' start = p[0] p = p[1:] poly = [] a = poly.append a("%s m" % fp_str(start)) for point in p: a("%s l" % fp_str(point)) if closed: a("closepath") self._fillAndStroke(poly,stroke=stroke,fill=fill) def lines(self, lineList, color=None, width=None): if self._strokeColor != None: self._setColor(self._strokeColor) codeline = '%s m %s l stroke' for line in lineList: self.code_append(codeline % (fp_str(line[0]),fp_str(line[1]))) def moveTo(self,x,y): self.code_append('%s m' % fp_str(x, y)) def lineTo(self,x,y): self.code_append('%s l' % fp_str(x, y)) def curveTo(self,x1,y1,x2,y2,x3,y3): self.code_append('%s c' % fp_str(x1,y1,x2,y2,x3,y3)) def closePath(self): self.code_append('closepath') def polyLine(self, p): assert len(p) >= 1, 'Polyline must have 1 or more points' if self._strokeColor != None: self.setColor(self._strokeColor) self.moveTo(p[0][0], p[0][1]) for t in p[1:]: self.lineTo(t[0], t[1]) self.code_append('stroke') def drawFigure(self, partList, closed=0): figureCode = [] a = figureCode.append first = 1 for part in partList: op = part[0] args = list(part[1:]) if op == figureLine: if first: first = 0 a("%s m" % fp_str(args[:2])) else: a("%s l" % fp_str(args[:2])) a("%s l" % fp_str(args[2:])) elif op == figureArc: first = 0 x1,y1,x2,y2,startAngle,extent = args[:6] a(self._genArcCode(x1,y1,x2,y2,startAngle,extent)) elif op == figureCurve: if first: first = 0 a("%s m" % fp_str(args[:2])) else: a("%s l" % fp_str(args[:2])) a("%s curveto" % fp_str(args[2:])) else: raise TypeError("unknown figure operator: "+op) if closed: a("closepath") self._fillAndStroke(figureCode) def _fillAndStroke(self,code,clip=0,fill=1,stroke=1,fillMode=None): fill = self._fillColor and fill stroke = self._strokeColor and stroke if fill or stroke or clip: self.code.extend(code) if fill: if fillMode is None: fillMode = self._fillMode if stroke or clip: self.code_append("gsave") self.setColor(self._fillColor) self.code_append("eofill" if fillMode==FILL_EVEN_ODD else "fill") if stroke or clip: self.code_append("grestore") if stroke: if clip: self.code_append("gsave") self.setColor(self._strokeColor) self.code_append("stroke") if clip: self.code_append("grestore") if clip: self.code_append("clip") self.code_append("newpath") def translate(self,x,y): self.code_append('%s translate' % fp_str(x,y)) def scale(self,x,y): self.code_append('%s scale' % fp_str(x,y)) def transform(self,a,b,c,d,e,f): self.code_append('[%s] concat' % fp_str(a,b,c,d,e,f)) def _drawTimeResize(self,w,h): '''if this is used we're probably in the wrong world''' self.width, self.height = w, h def _drawImageLevel1(self, image, x1, y1, width=None, height=None): # Postscript Level1 version available for fallback mode when Level2 doesn't work # For now let's start with 24 bit RGB images (following piddlePDF again) component_depth = 8 myimage = image.convert('RGB') imgwidth, imgheight = myimage.size if not width: width = imgwidth if not height: height = imgheight #print 'Image size (%d, %d); Draw size (%d, %d)' % (imgwidth, imgheight, width, height) # now I need to tell postscript how big image is # "image operators assume that they receive sample data from # their data source in x-axis major index order. The coordinate # of the lower-left corner of the first sample is (0,0), of the # second (1,0) and so on" -PS2 ref manual p. 215 # # The ImageMatrix maps unit squre of user space to boundary of the source image # # The CurrentTransformationMatrix (CTM) maps the unit square of # user space to the rect...on the page that is to receive the # image. A common ImageMatrix is [width 0 0 -height 0 height] # (for a left to right, top to bottom image ) # first let's map the user coordinates start at offset x1,y1 on page self.code.extend([ 'gsave', '%s %s translate' % (x1,y1), # need to start are lower left of image '%s %s scale' % (width,height), '/scanline %d 3 mul string def' % imgwidth # scanline by multiples of image width ]) # now push the dimensions and depth info onto the stack # and push the ImageMatrix to map the source to the target rectangle (see above) # finally specify source (PS2 pp. 225 ) and by exmample self.code.extend([ '%s %s %s' % (imgwidth, imgheight, component_depth), '[%s %s %s %s %s %s]' % (imgwidth, 0, 0, -imgheight, 0, imgheight), '{ currentfile scanline readhexstring pop } false 3', 'colorimage ' ]) # data source output--now we just need to deliver a hex encode # series of lines of the right overall size can follow # piddlePDF again rawimage = (myimage.tobytes if hasattr(myimage,'tobytes') else myimage.tostring)() hex_encoded = self._AsciiHexEncode(rawimage) # write in blocks of 78 chars per line outstream = getStringIO(hex_encoded) dataline = outstream.read(78) while dataline != "": self.code_append(dataline) dataline= outstream.read(78) self.code_append('% end of image data') # for clarity self.code_append('grestore') # return coordinates to normal # end of drawImage def _AsciiHexEncode(self, input): # also based on piddlePDF "Helper function used by images" output = getStringIO() for char in asBytes(input): output.write('%02x' % char2int(char)) return output.getvalue() def _drawImageLevel2(self, image, x1,y1, width=None,height=None): # Postscript Level2 version '''At present we're handling only PIL''' ### what sort of image are we to draw if image.mode=='L' : imBitsPerComponent = 8 imNumComponents = 1 myimage = image elif image.mode == '1': myimage = image.convert('L') imNumComponents = 1 myimage = image else : myimage = image.convert('RGB') imNumComponents = 3 imBitsPerComponent = 8 imwidth, imheight = myimage.size if not width: width = imwidth if not height: height = imheight self.code.extend([ 'gsave', '%s %s translate' % (x1,y1), # need to start are lower left of image '%s %s scale' % (width,height)]) if imNumComponents == 3 : self.code_append('/DeviceRGB setcolorspace') elif imNumComponents == 1 : self.code_append('/DeviceGray setcolorspace') # create the image dictionary self.code_append(""" << /ImageType 1 /Width %d /Height %d %% dimensions of source image /BitsPerComponent %d""" % (imwidth, imheight, imBitsPerComponent) ) if imNumComponents == 1: self.code_append('/Decode [0 1]') if imNumComponents == 3: self.code_append('/Decode [0 1 0 1 0 1] %% decode color values normally') self.code.extend([ '/ImageMatrix [%s 0 0 %s 0 %s]' % (imwidth, -imheight, imheight), '/DataSource currentfile /ASCIIHexDecode filter', '>> % End image dictionary', 'image']) # after image operator just need to dump image dat to file as hexstring rawimage = (myimage.tobytes if hasattr(myimage,'tobytes') else myimage.tostring)() hex_encoded = self._AsciiHexEncode(rawimage) # write in blocks of 78 chars per line outstream = getStringIO(hex_encoded) dataline = outstream.read(78) while dataline != "": self.code_append(dataline) dataline= outstream.read(78) self.code_append('> % end of image data') # > is EOD for hex encoded filterfor clarity self.code_append('grestore') # return coordinates to normal # renderpdf - draws them onto a canvas """Usage: from reportlab.graphics import renderPS renderPS.draw(drawing, canvas, x, y) Execute the script to see some test drawings.""" from reportlab.graphics.shapes import * # hack so we only get warnings once each #warnOnce = WarnOnce() # the main entry point for users... def draw(drawing, canvas, x=0, y=0, showBoundary=rl_config.showBoundary): """As it says""" R = _PSRenderer() R.draw(renderScaledDrawing(drawing), canvas, x, y, showBoundary=showBoundary) def _pointsFromList(L): ''' given a list of coordinates [x0, y0, x1, y1....] produce a list of points [(x0,y0), (y1,y0),....] ''' P=[] a = P.append for i in range(0,len(L),2): a((L[i],L[i+1])) return P class _PSRenderer(Renderer): """This draws onto a EPS document. It needs to be a class rather than a function, as some EPS-specific state tracking is needed outside of the state info in the SVG model.""" def drawNode(self, node): """This is the recursive method called for each node in the tree""" self._canvas.comment('begin node %r'%node) color = self._canvas._color if not (isinstance(node, Path) and node.isClipPath): self._canvas.saveState() #apply state changes deltas = getStateDelta(node) self._tracker.push(deltas) self.applyStateChanges(deltas, {}) #draw the object, or recurse self.drawNodeDispatcher(node) rDeltas = self._tracker.pop() if not (isinstance(node, Path) and node.isClipPath): self._canvas.restoreState() self._canvas.comment('end node %r'%node) self._canvas._color = color #restore things we might have lost (without actually doing anything). for k, v in rDeltas.items(): if k in self._restores: setattr(self._canvas,self._restores[k],v) ## _restores = {'stroke':'_stroke','stroke_width': '_lineWidth','stroke_linecap':'_lineCap', ## 'stroke_linejoin':'_lineJoin','fill':'_fill','font_family':'_font', ## 'font_size':'_fontSize'} _restores = {'strokeColor':'_strokeColor','strokeWidth': '_lineWidth','strokeLineCap':'_lineCap', 'strokeLineJoin':'_lineJoin','fillColor':'_fillColor','fontName':'_font', 'fontSize':'_fontSize'} def drawRect(self, rect): if rect.rx == rect.ry == 0: #plain old rectangle self._canvas.rect( rect.x, rect.y, rect.x+rect.width, rect.y+rect.height) else: #cheat and assume ry = rx; better to generalize #pdfgen roundRect function. TODO self._canvas.roundRect( rect.x, rect.y, rect.x+rect.width, rect.y+rect.height, rect.rx, rect.ry ) def drawLine(self, line): if self._canvas._strokeColor: self._canvas.line(line.x1, line.y1, line.x2, line.y2) def drawCircle(self, circle): self._canvas.circle( circle.cx, circle.cy, circle.r) def drawWedge(self, wedge): yradius, radius1, yradius1 = wedge._xtraRadii() if (radius1==0 or radius1 is None) and (yradius1==0 or yradius1 is None) and not wedge.annular: startangledegrees = wedge.startangledegrees endangledegrees = wedge.endangledegrees centerx= wedge.centerx centery = wedge.centery radius = wedge.radius extent = endangledegrees - startangledegrees self._canvas.drawArc(centerx-radius, centery-yradius, centerx+radius, centery+yradius, startangledegrees, extent, fromcenter=1) else: P = wedge.asPolygon() if isinstance(P,Path): self.drawPath(P) else: self.drawPolygon(P) def drawPolyLine(self, p): if self._canvas._strokeColor: self._canvas.polyLine(_pointsFromList(p.points)) def drawEllipse(self, ellipse): #need to convert to pdfgen's bounding box representation x1 = ellipse.cx - ellipse.rx x2 = ellipse.cx + ellipse.rx y1 = ellipse.cy - ellipse.ry y2 = ellipse.cy + ellipse.ry self._canvas.ellipse(x1,y1,x2,y2) def drawPolygon(self, p): self._canvas.polygon(_pointsFromList(p.points), closed=1) def drawString(self, stringObj): if self._canvas._fillColor: S = self._tracker.getState() text_anchor, x, y, text = S['textAnchor'], stringObj.x,stringObj.y,stringObj.text if not text_anchor in ['start','inherited']: font, fontSize = S['fontName'], S['fontSize'] textLen = stringWidth(text, font,fontSize) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen/2 elif text_anchor=='numeric': x -= numericXShift(text_anchor,text,textLen,font,fontSize,encoding='winansi') else: raise ValueError('bad value for text_anchor '+str(text_anchor)) self._canvas.drawString(x,y,text) def drawPath(self, path, fillMode=None): from reportlab.graphics.shapes import _renderPath c = self._canvas drawFuncs = (c.moveTo, c.lineTo, c.curveTo, c.closePath) autoclose = getattr(path,'autoclose','') def rP(**kwds): return _renderPath(path, drawFuncs, **kwds) if fillMode is None: fillMode = getattr(path,'fillMode',c._fillMode) fill = c._fillColor is not None stroke = c._strokeColor is not None clip = path.isClipPath fas = lambda **kwds: c._fillAndStroke([], fillMode=fillMode, **kwds) pathFill = lambda : c._fillAndStroke([], stroke=0, fillMode=fillMode) pathStroke = lambda : c._fillAndStroke([], fill=0) if autoclose=='svg': rP() fas(stroke=stroke,fill=fill,clip=clip) elif autoclose=='pdf': if fill: rP(forceClose=True) fas(stroke=stroke,fill=fill,clip=clip) elif stroke or clip: rP() fas(stroke=stroke,fill=0,clip=clip) else: if fill and rP(countOnly=True): rP() elif stroke or clip: fas(stroke=stroke,fill=0,clip=clip) def applyStateChanges(self, delta, newState): """This takes a set of states, and outputs the operators needed to set those properties""" for key, value in delta.items(): if key == 'transform': self._canvas.transform(value[0], value[1], value[2], value[3], value[4], value[5]) elif key == 'strokeColor': #this has different semantics in PDF to SVG; #we always have a color, and either do or do #not apply it; in SVG one can have a 'None' color self._canvas.setStrokeColor(value) elif key == 'strokeWidth': self._canvas.setLineWidth(value) elif key == 'strokeLineCap': #0,1,2 self._canvas.setLineCap(value) elif key == 'strokeLineJoin': self._canvas.setLineJoin(value) elif key == 'strokeDashArray': if value: if isinstance(value,(list,tuple)) and len(value)==2 and isinstance(value[1],(tuple,list)): phase = value[0] value = value[1] else: phase = 0 self._canvas.setDash(value,phase) else: self._canvas.setDash() ## elif key == 'stroke_opacity': ## warnOnce('Stroke Opacity not supported yet') elif key == 'fillColor': #this has different semantics in PDF to SVG; #we always have a color, and either do or do #not apply it; in SVG one can have a 'None' color self._canvas.setFillColor(value) ## elif key == 'fill_rule': ## warnOnce('Fill rules not done yet') ## elif key == 'fill_opacity': ## warnOnce('Fill opacity not done yet') elif key in ['fontSize', 'fontName']: # both need setting together in PDF # one or both might be in the deltas, # so need to get whichever is missing fontname = delta.get('fontName', self._canvas._font) fontsize = delta.get('fontSize', self._canvas._fontSize) self._canvas.setFont(fontname, fontsize) def drawImage(self, image): from reportlab.lib.utils import ImageReader im = ImageReader(image.path) self._canvas.drawImage(im._image,image.x,image.y,image.width,image.height) def drawToFile(d,fn, showBoundary=rl_config.showBoundary,**kwd): d = renderScaledDrawing(d) c = PSCanvas((d.width,d.height)) draw(d, c, 0, 0, showBoundary=showBoundary) c.save(fn) def drawToString(d, showBoundary=rl_config.showBoundary): "Returns a PS as a string in memory, without touching the disk" s = getBytesIO() drawToFile(d, s, showBoundary=showBoundary) return s.getvalue() ######################################################### # # test code. First, define a bunch of drawings. # Routine to draw them comes at the end. # ######################################################### def test(outDir='epsout',shout=False): from reportlab.graphics import testshapes from reportlab.rl_config import verbose OLDFONTS = testshapes._FONTS[:] testshapes._FONTS[:] = ['Times-Roman','Times-Bold','Times-Italic', 'Times-BoldItalic','Courier'] try: import os # save all drawings and their doc strings from the test file if not os.path.isdir(outDir): os.mkdir(outDir) #grab all drawings from the test module drawings = [] for funcname in dir(testshapes): if funcname[0:10] == 'getDrawing': func = getattr(testshapes,funcname) drawing = func() docstring = getattr(func,'__doc__','') drawings.append((drawing, docstring)) i = 0 for (d, docstring) in drawings: filename = outDir + os.sep + 'renderPS_%d.eps'%i drawToFile(d,filename) if shout or verbose>2: print('renderPS test saved %s' % ascii(filename)) i += 1 finally: testshapes._FONTS[:] = OLDFONTS if __name__=='__main__': import sys if len(sys.argv)>1: outdir = sys.argv[1] else: outdir = 'epsout' test(outdir,shout=True) reportlab-3.5.34/src/reportlab/graphics/widgetbase.py0000664000175000017500000006170013556326125023461 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/widgetbase.py __version__='3.3.0' __doc__='''Base class for user-defined graphical widgets''' from reportlab.graphics import shapes from reportlab import rl_config from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.attrmap import * from weakref import ref as weakref_ref class PropHolder: '''Base for property holders''' _attrMap = None def verify(self): """If the _attrMap attribute is not None, this checks all expected attributes are present; no unwanted attributes are present; and (if a checking function is found) checks each attribute has a valid value. Either succeeds or raises an informative exception. """ if self._attrMap is not None: for key in self.__dict__.keys(): if key[0] != '_': msg = "Unexpected attribute %s found in %s" % (key, self) assert key in self._attrMap, msg for attr, metavalue in self._attrMap.items(): msg = "Missing attribute %s from %s" % (attr, self) assert hasattr(self, attr), msg value = getattr(self, attr) args = (value, attr, self.__class__.__name__) assert metavalue.validate(value), "Invalid value %s for attribute %s in class %s" % args if rl_config.shapeChecking: """This adds the ability to check every attribute assignment as it is made. It slows down shapes but is a big help when developing. It does not get defined if rl_config.shapeChecking = 0. """ def __setattr__(self, name, value): """By default we verify. This could be off in some parallel base classes.""" validateSetattr(self,name,value) def getProperties(self,recur=1): """Returns a list of all properties which can be edited and which are not marked as private. This may include 'child widgets' or 'primitive shapes'. You are free to override this and provide alternative implementations; the default one simply returns everything without a leading underscore. """ from reportlab.lib.validators import isValidChild # TODO when we need it, but not before - # expose sequence contents? props = {} for name in self.__dict__.keys(): if name[0:1] != '_': component = getattr(self, name) if recur and isValidChild(component): # child object, get its properties too childProps = component.getProperties(recur=recur) for childKey, childValue in childProps.items(): #key might be something indexed like '[2].fillColor' #or simple like 'fillColor'; in the former case we #don't need a '.' between me and my child. if childKey[0] == '[': props['%s%s' % (name, childKey)] = childValue else: props['%s.%s' % (name, childKey)] = childValue else: props[name] = component return props def setProperties(self, propDict): """Permits bulk setting of properties. These may include child objects e.g. "chart.legend.width = 200". All assignments will be validated by the object as if they were set individually in python code. All properties of a top-level object are guaranteed to be set before any of the children, which may be helpful to widget designers. """ childPropDicts = {} for name, value in propDict.items(): parts = name.split('.', 1) if len(parts) == 1: #simple attribute, set it now setattr(self, name, value) else: (childName, remains) = parts try: childPropDicts[childName][remains] = value except KeyError: childPropDicts[childName] = {remains: value} # now assign to children for childName, childPropDict in childPropDicts.items(): child = getattr(self, childName) child.setProperties(childPropDict) def dumpProperties(self, prefix=""): """Convenience. Lists them on standard output. You may provide a prefix - mostly helps to generate code samples for documentation. """ propList = list(self.getProperties().items()) propList.sort() if prefix: prefix = prefix + '.' for (name, value) in propList: print('%s%s = %s' % (prefix, name, value)) class Widget(PropHolder, shapes.UserNode): """Base for all user-defined widgets. Keep as simple as possible. Does not inherit from Shape so that we can rewrite shapes without breaking widgets and vice versa.""" def _setKeywords(self,**kw): for k,v in kw.items(): if k not in self.__dict__: setattr(self,k,v) def draw(self): msg = "draw() must be implemented for each Widget!" raise shapes.NotImplementedError(msg) def demo(self): msg = "demo() must be implemented for each Widget!" raise shapes.NotImplementedError(msg) def provideNode(self): return self.draw() def getBounds(self): "Return outer boundary as x1,y1,x2,y2. Can be overridden for efficiency" return self.draw().getBounds() class ScaleWidget(Widget): '''Contents with a scale and offset''' _attrMap = AttrMap( x = AttrMapValue(isNumber,desc="x offset"), y = AttrMapValue(isNumber,desc="y offset"), scale = AttrMapValue(isNumber,desc="scale"), contents = AttrMapValue(None,desc="Contained drawable elements"), ) def __init__(self,x=0,y=0,scale=1.0,contents=None): self.x = x self.y = y if not contents: contents=[] elif not isinstance(contents,(tuple,list)): contents = (contents,) self.contents = list(contents) self.scale = scale def draw(self): return shapes.Group(transform=(self.scale,0,0,self.scale,self.x,self.y),*self.contents) _ItemWrapper={} class CloneMixin: def clone(self,**kwds): n = self.__class__() n.__dict__.clear() n.__dict__.update(self.__dict__) if kwds: n.__dict__.update(kwds) return n class TypedPropertyCollection(PropHolder): """A container with properties for objects of the same kind. This makes it easy to create lists of objects. You initialize it with a class of what it is to contain, and that is all you can add to it. You can assign properties to the collection as a whole, or to a numeric index within it; if so it creates a new child object to hold that data. So: wedges = TypedPropertyCollection(WedgeProperties) wedges.strokeWidth = 2 # applies to all wedges.strokeColor = colors.red # applies to all wedges[3].strokeColor = colors.blue # only to one The last line should be taken as a prescription of how to create wedge no. 3 if one is needed; no error is raised if there are only two data points. We try and make sensible use of tuple indices. line[(3,x)] is backed by line[(3,)] == line[3] & line """ def __init__(self, exampleClass, **kwds): #give it same validation rules as what it holds self.__dict__['_value'] = exampleClass(**kwds) self.__dict__['_children'] = {} def wKlassFactory(self,Klass): class WKlass(Klass,CloneMixin): def __getattr__(self,name): try: return self.__class__.__bases__[0].__getattr__(self,name) except: parent = self.parent c = parent._children x = self.__propholder_index__ while x: if x in c: return getattr(c[x],name) x = x[:-1] return getattr(parent,name) @property def parent(self): return self.__propholder_parent__() return WKlass def __getitem__(self, x): if isinstance(x,(tuple,list)): x = tuple(x) else: x = (x,) try: return self._children[x] except KeyError: Klass = self._value.__class__ if Klass in _ItemWrapper: WKlass = _ItemWrapper[Klass] else: _ItemWrapper[Klass] = WKlass = self.wKlassFactory(Klass) child = WKlass() for i in filter(lambda x,K=list(child.__dict__.keys()): x in K,list(child._attrMap.keys())): del child.__dict__[i] child.__dict__.update(dict( __propholder_parent__ = weakref_ref(self), __propholder_index__ = x[:-1]) ) self._children[x] = child return child def __contains__(self,key): if isinstance(key,(tuple,list)): key = tuple(key) else: key = key, return key in self._children def __setitem__(self, key, value): assert isinstance(value, self._value.__class__), ( "This collection can only hold objects of type %s" % self._value.__class__.__name__) def __len__(self): return len(list(self._children.keys())) def getProperties(self,recur=1): # return any children which are defined and whatever # differs from the parent props = {} for key, value in self._value.getProperties(recur=recur).items(): props['%s' % key] = value for idx in self._children.keys(): childProps = self._children[idx].getProperties(recur=recur) for key, value in childProps.items(): if not hasattr(self,key) or getattr(self, key)!=value: newKey = '[%s].%s' % (idx if len(idx)>1 else idx[0], key) props[newKey] = value return props def setVector(self,**kw): for name, value in kw.items(): for i, v in enumerate(value): setattr(self[i],name,v) def __getattr__(self,name): return getattr(self._value,name) def __setattr__(self,name,value): return setattr(self._value,name,value) def tpcGetItem(obj,x): '''return obj if it's not a TypedPropertyCollection else obj[x]''' return obj[x] if isinstance(obj,TypedPropertyCollection) else obj def isWKlass(obj): if not hasattr(obj,'__propholder_parent__'): return ph = obj.__propholder_parent__ if not isinstance(ph,weakref_ref): return return isinstance(ph(),TypedPropertyCollection) ## No longer needed! class StyleProperties(PropHolder): """A container class for attributes used in charts and legends. Attributes contained can be those for any graphical element (shape?) in the ReportLab graphics package. The idea for this container class is to be useful in combination with legends and/or the individual appearance of data series in charts. A legend could be as simple as a wrapper around a list of style properties, where the 'desc' attribute contains a descriptive string and the rest could be used by the legend e.g. to draw something like a color swatch. The graphical presentation of the legend would be its own business, though. A chart could be inspecting a legend or, more directly, a list of style properties to pick individual attributes that it knows about in order to render a particular row of the data. A bar chart e.g. could simply use 'strokeColor' and 'fillColor' for drawing the bars while a line chart could also use additional ones like strokeWidth. """ _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber,desc='width of the stroke line'), strokeLineCap = AttrMapValue(isNumber,desc='Line cap 0=butt, 1=round & 2=square',advancedUsage=1), strokeLineJoin = AttrMapValue(isNumber,desc='Line join 0=miter, 1=round & 2=bevel',advancedUsage=1), strokeMiterLimit = AttrMapValue(None,desc='miter limit control miter line joins',advancedUsage=1), strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc='dashing patterns e.g. (1,3)'), strokeOpacity = AttrMapValue(isNumber,desc='level of transparency (alpha) accepts values between 0..1',advancedUsage=1), strokeColor = AttrMapValue(isColorOrNone,desc='the color of the stroke'), fillColor = AttrMapValue(isColorOrNone,desc='the filling color'), desc = AttrMapValue(isString), ) def __init__(self, **kwargs): "Initialize with attributes if any." for k, v in kwargs.items(): setattr(self, k, v) def __setattr__(self, name, value): "Verify attribute name and value, before setting it." validateSetattr(self,name,value) class TwoCircles(Widget): def __init__(self): self.leftCircle = shapes.Circle(100,100,20, fillColor=colors.red) self.rightCircle = shapes.Circle(300,100,20, fillColor=colors.red) def draw(self): return shapes.Group(self.leftCircle, self.rightCircle) class Face(Widget): """This draws a face with two eyes. It exposes a couple of properties to configure itself and hides all other details. """ _attrMap = AttrMap( x = AttrMapValue(isNumber), y = AttrMapValue(isNumber), size = AttrMapValue(isNumber), skinColor = AttrMapValue(isColorOrNone), eyeColor = AttrMapValue(isColorOrNone), mood = AttrMapValue(OneOf('happy','sad','ok')), ) def __init__(self): self.x = 10 self.y = 10 self.size = 80 self.skinColor = None self.eyeColor = colors.blue self.mood = 'happy' def demo(self): pass def draw(self): s = self.size # abbreviate as we will use this a lot g = shapes.Group() g.transform = [1,0,0,1,self.x, self.y] # background g.add(shapes.Circle(s * 0.5, s * 0.5, s * 0.5, fillColor=self.skinColor)) # left eye g.add(shapes.Circle(s * 0.35, s * 0.65, s * 0.1, fillColor=colors.white)) g.add(shapes.Circle(s * 0.35, s * 0.65, s * 0.05, fillColor=self.eyeColor)) # right eye g.add(shapes.Circle(s * 0.65, s * 0.65, s * 0.1, fillColor=colors.white)) g.add(shapes.Circle(s * 0.65, s * 0.65, s * 0.05, fillColor=self.eyeColor)) # nose g.add(shapes.Polygon( points=[s * 0.5, s * 0.6, s * 0.4, s * 0.3, s * 0.6, s * 0.3], fillColor=None)) # mouth if self.mood == 'happy': offset = -0.05 elif self.mood == 'sad': offset = +0.05 else: offset = 0 g.add(shapes.Polygon( points = [ s * 0.3, s * 0.2, #left of mouth s * 0.7, s * 0.2, #right of mouth s * 0.6, s * (0.2 + offset), # the bit going up or down s * 0.4, s * (0.2 + offset) # the bit going up or down ], fillColor = colors.pink, strokeColor = colors.red, strokeWidth = s * 0.03 )) return g class TwoFaces(Widget): def __init__(self): self.faceOne = Face() self.faceOne.mood = "happy" self.faceTwo = Face() self.faceTwo.x = 100 self.faceTwo.mood = "sad" def draw(self): """Just return a group""" return shapes.Group(self.faceOne, self.faceTwo) def demo(self): """The default case already looks good enough, no implementation needed here""" pass class Sizer(Widget): "Container to show size of all enclosed objects" _attrMap = AttrMap(BASE=shapes.SolidShape, contents = AttrMapValue(isListOfShapes,desc="Contained drawable elements"), ) def __init__(self, *elements): self.contents = [] self.fillColor = colors.cyan self.strokeColor = colors.magenta for elem in elements: self.add(elem) def _addNamedNode(self,name,node): 'if name is not None add an attribute pointing to node and add to the attrMap' if name: if name not in list(self._attrMap.keys()): self._attrMap[name] = AttrMapValue(isValidChild) setattr(self, name, node) def add(self, node, name=None): """Appends non-None child node to the 'contents' attribute. In addition, if a name is provided, it is subsequently accessible by name """ # propagates properties down if node is not None: assert isValidChild(node), "Can only add Shape or UserNode objects to a Group" self.contents.append(node) self._addNamedNode(name,node) def getBounds(self): # get bounds of each object if self.contents: b = [] for elem in self.contents: b.append(elem.getBounds()) return shapes.getRectsBounds(b) else: return (0,0,0,0) def draw(self): g = shapes.Group() (x1, y1, x2, y2) = self.getBounds() r = shapes.Rect( x = x1, y = y1, width = x2-x1, height = y2-y1, fillColor = self.fillColor, strokeColor = self.strokeColor ) g.add(r) for elem in self.contents: g.add(elem) return g class CandleStickProperties(PropHolder): _attrMap = AttrMap( strokeWidth = AttrMapValue(isNumber, desc='Width of a line.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color of a line or border.'), strokeDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array of a line.'), crossWidth = AttrMapValue(isNumberOrNone,desc="cross line width",advancedUsage=1), crossLo = AttrMapValue(isNumberOrNone,desc="cross line low value",advancedUsage=1), crossHi = AttrMapValue(isNumberOrNone,desc="cross line high value",advancedUsage=1), boxWidth = AttrMapValue(isNumberOrNone,desc="width of the box part",advancedUsage=1), boxFillColor = AttrMapValue(isColorOrNone, desc='fill color of box'), boxStrokeColor = AttrMapValue(NotSetOr(isColorOrNone), desc='stroke color of box'), boxStrokeDashArray = AttrMapValue(NotSetOr(isListOfNumbersOrNone), desc='Dash array of the box.'), boxStrokeWidth = AttrMapValue(NotSetOr(isNumber), desc='Width of the box lines.'), boxLo = AttrMapValue(isNumberOrNone,desc="low value of the box",advancedUsage=1), boxMid = AttrMapValue(isNumberOrNone,desc="middle box line value",advancedUsage=1), boxHi = AttrMapValue(isNumberOrNone,desc="high value of the box",advancedUsage=1), boxSides = AttrMapValue(isBoolean,desc="whether to show box sides",advancedUsage=1), position = AttrMapValue(isNumberOrNone,desc="position of the candle",advancedUsage=1), chart = AttrMapValue(None,desc="our chart",advancedUsage=1), candleKind = AttrMapValue(OneOf('vertical','horizontal'),desc="candle direction",advancedUsage=1), axes = AttrMapValue(SequenceOf(isString,emptyOK=0,lo=2,hi=2),desc="candle direction",advancedUsage=1), ) def __init__(self,**kwds): self.strokeWidth = kwds.pop('strokeWidth',1) self.strokeColor = kwds.pop('strokeColor',colors.black) self.strokeDashArray = kwds.pop('strokeDashArray',None) self.crossWidth = kwds.pop('crossWidth',5) self.crossLo = kwds.pop('crossLo',None) self.crossHi = kwds.pop('crossHi',None) self.boxWidth = kwds.pop('boxWidth',None) self.boxFillColor = kwds.pop('boxFillColor',None) self.boxStrokeColor =kwds.pop('boxStrokeColor',NotSetOr._not_set) self.boxStrokeWidth =kwds.pop('boxStrokeWidth',NotSetOr._not_set) self.boxStrokeDashArray =kwds.pop('boxStrokeDashArray',NotSetOr._not_set) self.boxLo = kwds.pop('boxLo',None) self.boxMid = kwds.pop('boxMid',None) self.boxHi = kwds.pop('boxHi',None) self.boxSides = kwds.pop('boxSides',True) self.position = kwds.pop('position',None) self.candleKind = kwds.pop('candleKind','vertical') self.axes = kwds.pop('axes',['categoryAxis','valueAxis']) chart = kwds.pop('chart',None) self.chart = weakref_ref(chart) if chart else (lambda:None) def __call__(self,_x,_y,_size,_color): '''the symbol interface''' chart = self.chart() xA = getattr(chart,self.axes[0]) _xScale = getattr(xA,'midScale',None) if not _xScale: _xScale = getattr(xA,'scale') xScale = lambda x: _xScale(x) if x is not None else None yA = getattr(chart,self.axes[1]) _yScale = getattr(yA,'midScale',None) if not _yScale: _yScale = getattr(yA,'scale') yScale = lambda x: _yScale(x) if x is not None else None G = shapes.Group().add strokeWidth = self.strokeWidth strokeColor = self.strokeColor strokeDashArray = self.strokeDashArray crossWidth = self.crossWidth crossLo = yScale(self.crossLo) crossHi = yScale(self.crossHi) boxWidth = self.boxWidth boxFillColor = self.boxFillColor boxStrokeColor = NotSetOr.conditionalValue(self.boxStrokeColor,strokeColor) boxStrokeWidth = NotSetOr.conditionalValue(self.boxStrokeWidth,strokeWidth) boxStrokeDashArray = NotSetOr.conditionalValue(self.boxStrokeDashArray,strokeDashArray) boxLo = yScale(self.boxLo) boxMid = yScale(self.boxMid) boxHi = yScale(self.boxHi) position = xScale(self.position) candleKind = self.candleKind haveBox = None not in (boxWidth,boxLo,boxHi) haveLine = None not in (crossLo,crossHi) def aLine(x0,y0,x1,y1): if candleKind!='vertical': x0,y0 = y0,x0 x1,y1 = y1,x1 G(shapes.Line(x0,y0,x1,y1,strokeWidth=strokeWidth,strokeColor=strokeColor,strokeDashArray=strokeDashArray)) if haveBox: boxLo, boxHi = min(boxLo,boxHi), max(boxLo,boxHi) if haveLine: crossLo, crossHi = min(crossLo,crossHi), max(crossLo,crossHi) if not haveBox or crossLo>=boxHi or crossHi<=boxLo: aLine(position,crossLo,position,crossHi) if crossWidth is not None: aLine(position-crossWidth*0.5,crossLo,position+crossWidth*0.5,crossLo) aLine(position-crossWidth*0.5,crossHi,position+crossWidth*0.5,crossHi) elif haveBox: if crossLoboxHi: aLine(position,boxHi,position,crossHi) aLine(position-crossWidth*0.5,crossHi,position+crossWidth*0.5,crossHi) if haveBox: x = position - boxWidth*0.5 y = boxLo h = boxHi - boxLo w = boxWidth if candleKind!='vertical': x, y, w, h = y, x, h, w G(shapes.Rect(x,y,w,h,strokeColor=boxStrokeColor if self.boxSides else None,strokeWidth=boxStrokeWidth,strokeDashArray=boxStrokeDashArray,fillColor=boxFillColor)) if not self.boxSides: aLine(position-0.5*boxWidth,boxHi,position+0.5*boxWidth,boxHi) aLine(position-0.5*boxWidth,boxLo,position+0.5*boxWidth,boxLo) if boxMid is not None: aLine(position-0.5*boxWidth,boxMid,position+0.5*boxWidth,boxMid) return G.__self__ def CandleSticks(**kwds): return TypedPropertyCollection(CandleStickProperties,**kwds) def test(): from reportlab.graphics.charts.piecharts import WedgeProperties wedges = TypedPropertyCollection(WedgeProperties) wedges.fillColor = colors.red wedges.setVector(fillColor=(colors.blue,colors.green,colors.white)) print(len(_ItemWrapper)) d = shapes.Drawing(400, 200) tc = TwoCircles() d.add(tc) from reportlab.graphics import renderPDF renderPDF.drawToFile(d, 'sample_widget.pdf', 'A Sample Widget') print('saved sample_widget.pdf') d = shapes.Drawing(400, 200) f = Face() f.skinColor = colors.yellow f.mood = "sad" d.add(f, name='theFace') print('drawing 1 properties:') d.dumpProperties() renderPDF.drawToFile(d, 'face.pdf', 'A Sample Widget') print('saved face.pdf') d2 = d.expandUserNodes() renderPDF.drawToFile(d2, 'face_copy.pdf', 'An expanded drawing') print('saved face_copy.pdf') print('drawing 2 properties:') d2.dumpProperties() if __name__=='__main__': test() reportlab-3.5.34/src/reportlab/graphics/widgets/0000775000175000017500000000000013607302651022426 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/graphics/widgets/eventcal.py0000664000175000017500000003164513544671343024621 0ustar rptlabrptlab00000000000000#see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/widgets/eventcal.py # Event Calendar widget # author: Andy Robinson __version__='3.3.0' __doc__="""This file is a """ from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.attrmap import * from reportlab.graphics.shapes import Line, Rect, Polygon, Drawing, Group, String, Circle, Wedge from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.widgetbase import Widget from reportlab.graphics import renderPDF class EventCalendar(Widget): def __init__(self): self.x = 0 self.y = 0 self.width = 300 self.height = 150 self.timeColWidth = None # if declared, use it; otherwise auto-size. self.trackRowHeight = 20 self.data = [] # list of Event objects self.trackNames = None self.startTime = None #displays ALL data on day if not set self.endTime = None # displays ALL data on day if not set self.day = 0 # we will keep any internal geometry variables # here. These are computed by computeSize(), # which is the first thing done when drawing. self._talksVisible = [] # subset of data which will get plotted, cache self._startTime = None self._endTime = None self._trackCount = 0 self._colWidths = [] self._colLeftEdges = [] # left edge of each column def computeSize(self): "Called at start of draw. Sets various column widths" self._talksVisible = self.getRelevantTalks(self.data) self._trackCount = len(self.getAllTracks()) self.computeStartAndEndTimes() self._colLeftEdges = [self.x] if self.timeColWidth is None: w = self.width / (1 + self._trackCount) self._colWidths = [w] * (1+ self._trackCount) for i in range(self._trackCount): self._colLeftEdges.append(self._colLeftEdges[-1] + w) else: self._colWidths = [self.timeColWidth] w = (self.width - self.timeColWidth) / self._trackCount for i in range(self._trackCount): self._colWidths.append(w) self._colLeftEdges.append(self._colLeftEdges[-1] + w) def computeStartAndEndTimes(self): "Work out first and last times to display" if self.startTime: self._startTime = self.startTime else: for (title, speaker, trackId, day, start, duration) in self._talksVisible: if self._startTime is None: #first one self._startTime = start else: if start < self._startTime: self._startTime = start if self.endTime: self._endTime = self.endTime else: for (title, speaker, trackId, day, start, duration) in self._talksVisible: if self._endTime is None: #first one self._endTime = start + duration else: if start + duration > self._endTime: self._endTime = start + duration def getAllTracks(self): tracks = [] for (title, speaker, trackId, day, hours, duration) in self.data: if trackId is not None: if trackId not in tracks: tracks.append(trackId) tracks.sort() return tracks def getRelevantTalks(self, talkList): "Scans for tracks actually used" used = [] for talk in talkList: (title, speaker, trackId, day, hours, duration) = talk assert trackId != 0, "trackId must be None or 1,2,3... zero not allowed!" if day == self.day: if (((self.startTime is None) or ((hours + duration) >= self.startTime)) and ((self.endTime is None) or (hours <= self.endTime))): used.append(talk) return used def scaleTime(self, theTime): "Return y-value corresponding to times given" axisHeight = self.height - self.trackRowHeight # compute fraction between 0 and 1, 0 is at start of period proportionUp = ((theTime - self._startTime) / (self._endTime - self._startTime)) y = self.y + axisHeight - (axisHeight * proportionUp) return y def getTalkRect(self, startTime, duration, trackId, text): "Return shapes for a specific talk" g = Group() y_bottom = self.scaleTime(startTime + duration) y_top = self.scaleTime(startTime) y_height = y_top - y_bottom if trackId is None: #spans all columns x = self._colLeftEdges[1] width = self.width - self._colWidths[0] else: #trackId is 1-based and these arrays have the margin info in column #zero, so no need to add 1 x = self._colLeftEdges[trackId] width = self._colWidths[trackId] lab = Label() lab.setText(text) lab.setOrigin(x + 0.5*width, y_bottom+0.5*y_height) lab.boxAnchor = 'c' lab.width = width lab.height = y_height lab.fontSize = 6 r = Rect(x, y_bottom, width, y_height, fillColor=colors.cyan) g.add(r) g.add(lab) #now for a label # would expect to color-code and add text return g def draw(self): self.computeSize() g = Group() # time column g.add(Rect(self.x, self.y, self._colWidths[0], self.height - self.trackRowHeight, fillColor=colors.cornsilk)) # track headers x = self.x + self._colWidths[0] y = self.y + self.height - self.trackRowHeight for trk in range(self._trackCount): wid = self._colWidths[trk+1] r = Rect(x, y, wid, self.trackRowHeight, fillColor=colors.yellow) s = String(x + 0.5*wid, y, 'Track %d' % trk, align='middle') g.add(r) g.add(s) x = x + wid for talk in self._talksVisible: (title, speaker, trackId, day, start, duration) = talk r = self.getTalkRect(start, duration, trackId, title + '\n' + speaker) g.add(r) return g def test(): "Make a conference event for day 1 of UP Python 2003" d = Drawing(400,200) cal = EventCalendar() cal.x = 50 cal.y = 25 cal.data = [ # these might be better as objects instead of tuples, since I # predict a large number of "optionsl" variables to affect # formatting in future. #title, speaker, track id, day, start time (hrs), duration (hrs) # track ID is 1-based not zero-based! ('Keynote: Why design another programming language?', 'Guido van Rossum', None, 1, 9.0, 1.0), ('Siena Web Service Architecture', 'Marc-Andre Lemburg', 1, 1, 10.5, 1.5), ('Extreme Programming in Python', 'Chris Withers', 2, 1, 10.5, 1.5), ('Pattern Experiences in C++', 'Mark Radford', 3, 1, 10.5, 1.5), ('What is the Type of std::toupper()', 'Gabriel Dos Reis', 4, 1, 10.5, 1.5), ('Linguistic Variables: Clear Thinking with Fuzzy Logic ', 'Walter Banks', 5, 1, 10.5, 1.5), ('lunch, short presentations, vendor presentations', '', None, 1, 12.0, 2.0), ("CORBA? Isn't that obsolete", 'Duncan Grisby', 1, 1, 14.0, 1.5), ("Python Design Patterns", 'Duncan Booth', 2, 1, 14.0, 1.5), ("Inside Security Checks and Safe Exceptions", 'Brandon Bray', 3, 1, 14.0, 1.5), ("Studying at a Distance", 'Panel Discussion, Panel to include Alan Lenton & Francis Glassborow', 4, 1, 14.0, 1.5), ("Coding Standards - Given the ANSI C Standard why do I still need a coding Standard", 'Randy Marques', 5, 1, 14.0, 1.5), ("RESTful Python", 'Hamish Lawson', 1, 1, 16.0, 1.5), ("Parsing made easier - a radical old idea", 'Andrew Koenig', 2, 1, 16.0, 1.5), ("C++ & Multimethods", 'Julian Smith', 3, 1, 16.0, 1.5), ("C++ Threading", 'Kevlin Henney', 4, 1, 16.0, 1.5), ("The Organisation Strikes Back", 'Alan Griffiths & Sarah Lees', 5, 1, 16.0, 1.5), ('Birds of a Feather meeting', '', None, 1, 17.5, 2.0), ('Keynote: In the Spirit of C', 'Greg Colvin', None, 2, 9.0, 1.0), ('The Infinite Filing Cabinet - object storage in Python', 'Jacob Hallen', 1, 2, 10.5, 1.5), ('Introduction to Python and Jython for C++ and Java Programmers', 'Alex Martelli', 2, 2, 10.5, 1.5), ('Template metaprogramming in Haskell', 'Simon Peyton Jones', 3, 2, 10.5, 1.5), ('Plenty People Programming: C++ Programming in a Group, Workshop with a difference', 'Nico Josuttis', 4, 2, 10.5, 1.5), ('Design and Implementation of the Boost Graph Library', 'Jeremy Siek', 5, 2, 10.5, 1.5), ('lunch, short presentations, vendor presentations', '', None, 2, 12.0, 2.0), ("Building GUI Applications with PythonCard and PyCrust", 'Andy Todd', 1, 2, 14.0, 1.5), ("Integrating Python, C and C++", 'Duncan Booth', 2, 2, 14.0, 1.5), ("Secrets and Pitfalls of Templates", 'Nicolai Josuttis & David Vandevoorde', 3, 2, 14.0, 1.5), ("Being a Mentor", 'Panel Discussion, Panel to include Alan Lenton & Francis Glassborow', 4, 2, 14.0, 1.5), ("The Embedded C Extensions to C", 'Willem Wakker', 5, 2, 14.0, 1.5), ("Lightning Talks", 'Paul Brian', 1, 2, 16.0, 1.5), ("Scripting Java Applications with Jython", 'Anthony Eden', 2, 2, 16.0, 1.5), ("Metaprogramming and the Boost Metaprogramming Library", 'David Abrahams', 3, 2, 16.0, 1.5), ("A Common Vendor ABI for C++ -- GCC's why, what and not", 'Nathan Sidwell & Gabriel Dos Reis', 4, 2, 16.0, 1.5), ("The Timing and Cost of Choices", 'Hubert Matthews', 5, 2, 16.0, 1.5), ('Birds of a Feather meeting', '', None, 2, 17.5, 2.0), ('Keynote: The Cost of C & C++ Compatibility', 'Andy Koenig', None, 3, 9.0, 1.0), ('Prying Eyes: Generic Observer Implementations in C++', 'Andrei Alexandrescu', 1, 2, 10.5, 1.5), ('The Roadmap to Generative Programming With C++', 'Ulrich Eisenecker', 2, 2, 10.5, 1.5), ('Design Patterns in C++ and C# for the Common Language Runtime', 'Brandon Bray', 3, 2, 10.5, 1.5), ('Extreme Hour (XH): (workshop) - Jutta Eckstein and Nico Josuttis', 'Jutta Ecstein', 4, 2, 10.5, 1.5), ('The Lambda Library : Unnamed Functions for C++', 'Jaako Jarvi', 5, 2, 10.5, 1.5), ('lunch, short presentations, vendor presentations', '', None, 3, 12.0, 2.0), ('Reflective Metaprogramming', 'Daveed Vandevoorde', 1, 3, 14.0, 1.5), ('Advanced Template Issues and Solutions (double session)', 'Herb Sutter',2, 3, 14.0, 3), ('Concurrent Programming in Java (double session)', 'Angelika Langer', 3, 3, 14.0, 3), ('What can MISRA-C (2nd Edition) do for us?', 'Chris Hills', 4, 3, 14.0, 1.5), ('C++ Metaprogramming Concepts and Results', 'Walter E Brown', 5, 3, 14.0, 1.5), ('Binding C++ to Python with the Boost Python Library', 'David Abrahams', 1, 3, 16.0, 1.5), ('Using Aspect Oriented Programming for Enterprise Application Integration', 'Arno Schmidmeier', 4, 3, 16.0, 1.5), ('Defective C++', 'Marc Paterno', 5, 3, 16.0, 1.5), ("Speakers' Banquet & Birds of a Feather meeting", '', None, 3, 17.5, 2.0), ('Keynote: The Internet, Software and Computers - A Report Card', 'Alan Lenton', None, 4, 9.0, 1.0), ('Multi-Platform Software Development; Lessons from the Boost libraries', 'Beman Dawes', 1, 5, 10.5, 1.5), ('The Stability of the C++ ABI', 'Steve Clamage', 2, 5, 10.5, 1.5), ('Generic Build Support - A Pragmatic Approach to the Software Build Process', 'Randy Marques', 3, 5, 10.5, 1.5), ('How to Handle Project Managers: a survival guide', 'Barb Byro', 4, 5, 10.5, 1.5), ('lunch, ACCU AGM', '', None, 5, 12.0, 2.0), ('Sauce: An OO recursive descent parser; its design and implementation.', 'Jon Jagger', 1, 5, 14.0, 1.5), ('GNIRTS ESAC REWOL - Bringing the UNIX filters to the C++ iostream library.', 'JC van Winkel', 2, 5, 14.0, 1.5), ('Pattern Writing: Live and Direct', 'Frank Buschmann & Kevlin Henney', 3, 5, 14.0, 3.0), ('The Future of Programming Languages - A Goldfish Bowl', 'Francis Glassborow and friends', 3, 5, 14.0, 1.5), ('Honey, I Shrunk the Threads: Compile-time checked multithreaded transactions in C++', 'Andrei Alexandrescu', 1, 5, 16.0, 1.5), ('Fun and Functionality with Functors', 'Lois Goldthwaite', 2, 5, 16.0, 1.5), ('Agile Enough?', 'Alan Griffiths', 4, 5, 16.0, 1.5), ("Conference Closure: A brief plenary session", '', None, 5, 17.5, 0.5), ] #return cal cal.day = 1 d.add(cal) for format in ['pdf']:#,'gif','png']: out = d.asString(format) open('eventcal.%s' % format, 'wb').write(out) print('saved eventcal.%s' % format) if __name__=='__main__': test() reportlab-3.5.34/src/reportlab/graphics/widgets/table.py0000664000175000017500000001551313544671343024103 0ustar rptlabrptlab00000000000000#!/usr/bin/env python #Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/widgets/table.py __version__='3.3.0' from reportlab.graphics.widgetbase import Widget from reportlab.graphics.charts.textlabels import Label from reportlab.graphics import shapes from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.attrmap import * from reportlab.graphics.shapes import Drawing class TableWidget(Widget): """A two dimensions table of labels """ _attrMap = AttrMap( x = AttrMapValue(isNumber, desc="x position of left edge of table"), y = AttrMapValue(isNumber, desc="y position of bottom edge of table"), width = AttrMapValue(isNumber, desc="table width"), height = AttrMapValue(isNumber, desc="table height"), borderStrokeColor = AttrMapValue(isColorOrNone, desc="table border color"), fillColor = AttrMapValue(isColorOrNone, desc="table fill color"), borderStrokeWidth = AttrMapValue(isNumber, desc="border line width"), horizontalDividerStrokeColor = AttrMapValue(isColorOrNone, desc="table inner horizontal lines color"), verticalDividerStrokeColor = AttrMapValue(isColorOrNone, desc="table inner vertical lines color"), horizontalDividerStrokeWidth = AttrMapValue(isNumber, desc="table inner horizontal lines width"), verticalDividerStrokeWidth = AttrMapValue(isNumber, desc="table inner vertical lines width"), dividerDashArray = AttrMapValue(isListOfNumbersOrNone, desc='Dash array for dividerLines.'), data = AttrMapValue(None, desc="a list of list of strings to be displayed in the cells"), boxAnchor = AttrMapValue(isBoxAnchor, desc="location of the table anchoring point"), fontName = AttrMapValue(isString, desc="text font in the table"), fontSize = AttrMapValue(isNumber, desc="font size of the table"), fontColor = AttrMapValue(isColorOrNone, desc="font color"), alignment = AttrMapValue(OneOf("left", "right"), desc="Alignment of text within cells"), textAnchor = AttrMapValue(OneOf('start','middle','end','numeric'), desc="Alignment of text within cells"), ) def __init__(self, x=10, y=10, **kw): self.x = x self.y = y self.width = 200 self.height = 100 self.borderStrokeColor = colors.black self.fillColor = None self.borderStrokeWidth = 0.5 self.horizontalDividerStrokeColor = colors.black self.verticalDividerStrokeColor = colors.black self.horizontalDividerStrokeWidth = 0.5 self.verticalDividerStrokeWidth = 0.25 self.dividerDashArray = None self.data = [['North','South','East','West'],[100,110,120,130],['A','B','C','D']] # list of rows each row is a list of columns self.boxAnchor = 'nw' #self.fontName = None self.fontSize = 8 self.fontColor = colors.black self.alignment = 'right' self.textAnchor = 'start' for k, v in kw.items(): if k in list(self.__class__._attrMap.keys()): setattr(self, k, v) else: raise ValueError('invalid argument supplied for class %s'%self.__class__) def demo(self): """ returns a sample of this widget with data """ d = Drawing(400, 200) t = TableWidget() d.add(t, name='table') d.table.dividerDashArray = (1, 3, 2) d.table.verticalDividerStrokeColor = None d.table.borderStrokeWidth = 0 d.table.borderStrokeColor = colors.red return d def draw(self): """ returns a group of shapes """ g = shapes.Group() #overall border and fill if self.borderStrokeColor or self.fillColor: # adds border and filling color rect = shapes.Rect(self.x, self.y, self.width, self.height) rect.fillColor = self.fillColor rect.strokeColor = self.borderStrokeColor rect.strokeWidth = self.borderStrokeWidth g.add(rect) #special case - for an empty table we want to avoid divide-by-zero data = self.preProcessData(self.data) rows = len(self.data) cols = len(self.data[0]) #print "(rows,cols)=(%s, %s)"%(rows,cols) row_step = self.height / float(rows) col_step = self.width / float(cols) #print "(row_step,col_step)=(%s, %s)"%(row_step,col_step) # draw the grid if self.horizontalDividerStrokeColor: for i in range(rows): # make horizontal lines x1 = self.x x2 = self.x + self.width y = self.y + row_step*i #print 'line (%s, %s), (%s, %s)'%(x1, y, x2, y) line = shapes.Line(x1, y, x2, y) line.strokeDashArray = self.dividerDashArray line.strokeWidth = self.horizontalDividerStrokeWidth line.strokeColor = self.horizontalDividerStrokeColor g.add(line) if self.verticalDividerStrokeColor: for i in range(cols): # make vertical lines x = self.x+col_step*i y1 = self.y y2 = self.y + self.height #print 'line (%s, %s), (%s, %s)'%(x, y1, x, y2) line = shapes.Line(x, y1, x, y2) line.strokeDashArray = self.dividerDashArray line.strokeWidth = self.verticalDividerStrokeWidth line.strokeColor = self.verticalDividerStrokeColor g.add(line) # since we plot data from down up, we reverse the list self.data.reverse() for (j, row) in enumerate(self.data): y = self.y + j*row_step + 0.5*row_step - 0.5 * self.fontSize for (i, datum) in enumerate(row): if datum: x = self.x + i*col_step + 0.5*col_step s = shapes.String(x, y, str(datum), textAnchor=self.textAnchor) s.fontName = self.fontName s.fontSize = self.fontSize s.fillColor = self.fontColor g.add(s) return g def preProcessData(self, data): """preprocess and return a new array with at least one row and column (use a None) if needed, and all rows the same length (adding Nones if needed) """ if not data: return [[None]] #make all rows have similar number of cells, append None when needed max_row = max( [len(x) for x in data] ) for rowNo, row in enumerate(data): if len(row) < max_row: row.extend([None]*(max_row-len(row))) return data #test if __name__ == '__main__': d = TableWidget().demo() import os d.save(formats=['pdf'],outDir=os.getcwd(),fnRoot=None) reportlab-3.5.34/src/reportlab/graphics/widgets/markers.py0000664000175000017500000002037213554340114024445 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __version__='3.3.0' __doc__="""This modules defines a collection of markers used in charts. """ from reportlab.graphics.shapes import Rect, Line, Circle, Polygon, Drawing, Group from reportlab.graphics.widgets.signsandsymbols import SmileyFace from reportlab.graphics.widgetbase import Widget from reportlab.lib.validators import isNumber, isColorOrNone, OneOf, Validator from reportlab.lib.attrmap import AttrMap, AttrMapValue from reportlab.lib.colors import black from reportlab.lib.utils import isFunction, isClass from reportlab.graphics.widgets.flags import Flag, _Symbol from math import sin, cos, pi _toradians = pi/180.0 class Marker(Widget): '''A polymorphic class of markers''' _attrMap = AttrMap(BASE=Widget, kind = AttrMapValue( OneOf(None, 'Square', 'Diamond', 'Circle', 'Cross', 'Triangle', 'StarSix', 'Pentagon', 'Hexagon', 'Heptagon', 'Octagon', 'StarFive', 'FilledSquare', 'FilledCircle', 'FilledDiamond', 'FilledCross', 'FilledTriangle','FilledStarSix', 'FilledPentagon', 'FilledHexagon', 'FilledHeptagon', 'FilledOctagon', 'FilledStarFive', 'Smiley','ArrowHead', 'FilledArrowHead'), desc='marker type name'), size = AttrMapValue(isNumber,desc='marker size'), x = AttrMapValue(isNumber,desc='marker x coordinate'), y = AttrMapValue(isNumber,desc='marker y coordinate'), dx = AttrMapValue(isNumber,desc='marker x coordinate adjustment'), dy = AttrMapValue(isNumber,desc='marker y coordinate adjustment'), angle = AttrMapValue(isNumber,desc='marker rotation'), fillColor = AttrMapValue(isColorOrNone, desc='marker fill colour'), strokeColor = AttrMapValue(isColorOrNone, desc='marker stroke colour'), strokeWidth = AttrMapValue(isNumber, desc='marker stroke width'), arrowBarbDx = AttrMapValue(isNumber, desc='arrow only the delta x for the barbs'), arrowHeight = AttrMapValue(isNumber, desc='arrow only height'), ) def __init__(self,*args,**kw): self.setProperties(kw) self._setKeywords( kind = None, strokeColor = black, strokeWidth = 0.1, fillColor = None, size = 5, x = 0, y = 0, dx = 0, dy = 0, angle = 0, arrowBarbDx = -1.25, arrowHeight = 1.875, ) def clone(self,**kwds): n = self.__class__(**self.__dict__) if kwds: n.__dict__.update(kwds) return n def _Smiley(self): x, y = self.x+self.dx, self.y+self.dy d = self.size/2.0 s = SmileyFace() s.fillColor = self.fillColor s.strokeWidth = self.strokeWidth s.strokeColor = self.strokeColor s.x = x-d s.y = y-d s.size = d*2 return s def _Square(self): x, y = self.x+self.dx, self.y+self.dy d = self.size/2.0 s = Rect(x-d,y-d,2*d,2*d,fillColor=self.fillColor,strokeColor=self.strokeColor,strokeWidth=self.strokeWidth) return s def _Diamond(self): d = self.size/2.0 return self._doPolygon((-d,0,0,d,d,0,0,-d)) def _Circle(self): x, y = self.x+self.dx, self.y+self.dy s = Circle(x,y,self.size/2.0,fillColor=self.fillColor,strokeColor=self.strokeColor,strokeWidth=self.strokeWidth) return s def _Cross(self): x, y = self.x+self.dx, self.y+self.dy s = float(self.size) h, s = s/2, s/6 return self._doPolygon((-s,-h,-s,-s,-h,-s,-h,s,-s,s,-s,h,s,h,s,s,h,s,h,-s,s,-s,s,-h)) def _Triangle(self): x, y = self.x+self.dx, self.y+self.dy r = float(self.size)/2 c = 30*_toradians s = sin(30*_toradians)*r c = cos(c)*r return self._doPolygon((0,r,-c,-s,c,-s)) def _StarSix(self): r = float(self.size)/2 c = 30*_toradians s = sin(c)*r c = cos(c)*r z = s/2 g = c/2 return self._doPolygon((0,r,-z,s,-c,s,-s,0,-c,-s,-z,-s,0,-r,z,-s,c,-s,s,0,c,s,z,s)) def _StarFive(self): R = float(self.size)/2 r = R*sin(18*_toradians)/cos(36*_toradians) P = [] angle = 90 for i in range(5): for radius in R, r: theta = angle*_toradians P.append(radius*cos(theta)) P.append(radius*sin(theta)) angle = angle + 36 return self._doPolygon(P) def _Pentagon(self): return self._doNgon(5) def _Hexagon(self): return self._doNgon(6) def _Heptagon(self): return self._doNgon(7) def _Octagon(self): return self._doNgon(8) def _ArrowHead(self): s = self.size h = self.arrowHeight b = self.arrowBarbDx return self._doPolygon((0,0,b,-h,s,0,b,h)) def _doPolygon(self,P): x, y = self.x+self.dx, self.y+self.dy if x or y: P = list(map(lambda i,P=P,A=[x,y]: P[i] + A[i&1], list(range(len(P))))) return Polygon(P, strokeWidth =self.strokeWidth, strokeColor=self.strokeColor, fillColor=self.fillColor) def _doFill(self): old = self.fillColor if old is None: self.fillColor = self.strokeColor r = (self.kind and getattr(self,'_'+self.kind[6:]) or Group)() self.fillColor = old return r def _doNgon(self,n): P = [] size = float(self.size)/2 for i in range(n): r = (2.*i/n+0.5)*pi P.append(size*cos(r)) P.append(size*sin(r)) return self._doPolygon(P) _FilledCircle = _doFill _FilledSquare = _doFill _FilledDiamond = _doFill _FilledCross = _doFill _FilledTriangle = _doFill _FilledStarSix = _doFill _FilledPentagon = _doFill _FilledHexagon = _doFill _FilledHeptagon = _doFill _FilledOctagon = _doFill _FilledStarFive = _doFill _FilledArrowHead = _doFill def draw(self): if self.kind: m = getattr(self,'_'+self.kind) if self.angle: _x, _dx, _y, _dy = self.x, self.dx, self.y, self.dy self.x, self.dx, self.y, self.dy = 0,0,0,0 try: m = m() finally: self.x, self.dx, self.y, self.dy = _x, _dx, _y, _dy if not isinstance(m,Group): _m, m = m, Group() m.add(_m) if self.angle: m.rotate(self.angle) x, y = _x+_dx, _y+_dy if x or y: m.shift(x,y) else: m = m() else: m = Group() return m def uSymbol2Symbol(uSymbol,x,y,color): if isClass(uSymbol) and issubclass(uSymbol,Widget): size = 10. symbol = uSymbol() symbol.x = x - (size/2) symbol.y = y - (size/2) try: symbol.size = size symbol.color = color except: pass elif isinstance(uSymbol,Marker) or isinstance(uSymbol,_Symbol): symbol = uSymbol.clone() if isinstance(uSymbol,Marker): symbol.fillColor = symbol.fillColor or color symbol.x, symbol.y = x, y elif callable(uSymbol): symbol = uSymbol(x, y, 5, color) else: symbol = None return symbol class _isSymbol(Validator): def test(self,x): return hasattr(x,'__call__') or isinstance(x,Marker) or isinstance(x,_Symbol) or (isClass(x) and issubclass(x,Widget)) isSymbol = _isSymbol() def makeMarker(name,**kw): if Marker._attrMap['kind'].validate(name): m = Marker(**kw) m.kind = name elif name[-5:]=='_Flag' and Flag._attrMap['kind'].validate(name[:-5]): m = Flag(**kw) m.kind = name[:-5] m.size = 10 else: raise ValueError("Invalid marker name %s" % name) return m if __name__=='__main__': D = Drawing() D.add(Marker()) D.save(fnRoot='Marker',formats=['pdf'], outDir='/tmp') reportlab-3.5.34/src/reportlab/graphics/widgets/flags.py0000664000175000017500000007311213544671343024107 0ustar rptlabrptlab00000000000000#see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/widgets/flags.py # Flag Widgets - a collection of flags as widgets # author: John Precedo (johnp@reportlab.com) __version__='3.3.0' __doc__="""This file is a collection of flag graphics as widgets. All flags are represented at the ratio of 1:2, even where the official ratio for the flag is something else (such as 3:5 for the German national flag). The only exceptions are for where this would look _very_ wrong, such as the Danish flag whose (ratio is 28:37), or the Swiss flag (which is square). Unless otherwise stated, these flags are all the 'national flags' of the countries, rather than their state flags, naval flags, ensigns or any other variants. (National flags are the flag flown by civilians of a country and the ones usually used to represent a country abroad. State flags are the variants used by the government and by diplomatic missions overseas). To check on how close these are to the 'official' representations of flags, check the World Flag Database at http://www.flags.ndirect.co.uk/ The flags this file contains are: EU Members: United Kingdom, Austria, Belgium, Denmark, Finland, France, Germany, Greece, Ireland, Italy, Luxembourg, Holland (The Netherlands), Spain, Sweden Others: USA, Czech Republic, European Union, Switzerland, Turkey, Brazil (Brazilian flag contributed by Publio da Costa Melo [publio@planetarium.com.br]). """ from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.attrmap import * from reportlab.graphics.shapes import Line, Rect, Polygon, Drawing, Group, String, Circle, Wedge from reportlab.graphics.widgetbase import Widget from reportlab.graphics import renderPDF from reportlab.graphics.widgets.signsandsymbols import _Symbol import copy from math import sin, cos, pi validFlag=OneOf(None, 'UK', 'USA', 'Afghanistan', 'Austria', 'Belgium', 'China', 'Cuba', 'Denmark', 'Finland', 'France', 'Germany', 'Greece', 'Ireland', 'Italy', 'Japan', 'Luxembourg', 'Holland', 'Palestine', 'Portugal', 'Russia', 'Spain', 'Sweden', 'Norway', 'CzechRepublic', 'Turkey', 'Switzerland', 'EU', 'Brazil' ) _size = 100. class Star(_Symbol): """This draws a 5-pointed star. possible attributes: 'x', 'y', 'size', 'fillColor', 'strokeColor' """ _attrMap = AttrMap(BASE=_Symbol, angle = AttrMapValue(isNumber, desc='angle in degrees'), ) _size = 100. def __init__(self): _Symbol.__init__(self) self.size = 100 self.fillColor = colors.yellow self.strokeColor = None self.angle = 0 def demo(self): D = Drawing(200, 100) et = Star() et.x=50 et.y=0 D.add(et) labelFontSize = 10 D.add(String(et.x+(et.size/2.0),(et.y-(1.2*labelFontSize)), et.__class__.__name__, fillColor=colors.black, textAnchor='middle', fontSize=labelFontSize)) return D def draw(self): s = float(self.size) #abbreviate as we will use this a lot g = Group() # new algorithm from markers.StarFive R = float(self.size)/2 r = R*sin(18*(pi/180.0))/cos(36*(pi/180.0)) P = [] angle = 90 for i in range(5): for radius in R, r: theta = angle*(pi/180.0) P.append(radius*cos(theta)) P.append(radius*sin(theta)) angle = angle + 36 # star specific bits star = Polygon(P, fillColor = self.fillColor, strokeColor = self.strokeColor, strokeWidth=s/50) g.rotate(self.angle) g.shift(self.x+self.dx,self.y+self.dy) g.add(star) return g class Flag(_Symbol): """This is a generic flag class that all the flags in this file use as a basis. This class basically provides edges and a tidy-up routine to hide any bits of line that overlap the 'outside' of the flag possible attributes: 'x', 'y', 'size', 'fillColor' """ _attrMap = AttrMap(BASE=_Symbol, fillColor = AttrMapValue(isColor, desc='Background color'), border = AttrMapValue(isBoolean, 'Whether a background is drawn'), kind = AttrMapValue(validFlag, desc='Which flag'), ) _cache = {} def __init__(self,**kw): _Symbol.__init__(self) self.kind = None self.size = 100 self.fillColor = colors.white self.border=1 self.setProperties(kw) def availableFlagNames(self): '''return a list of the things we can display''' return [x for x in self._attrMap['kind'].validate._enum if x is not None] def _Flag_None(self): s = _size # abbreviate as we will use this a lot g = Group() g.add(Rect(0, 0, s*2, s, fillColor = colors.purple, strokeColor = colors.black, strokeWidth=0)) return g def _borderDraw(self,f): s = self.size # abbreviate as we will use this a lot g = Group() g.add(f) x, y, sW = self.x+self.dx, self.y+self.dy, self.strokeWidth/2. g.insert(0,Rect(-sW, -sW, width=getattr(self,'_width',2*s)+3*sW, height=getattr(self,'_height',s)+2*sW, fillColor = None, strokeColor = self.strokeColor, strokeWidth=sW*2)) g.shift(x,y) g.scale(s/_size, s/_size) return g def draw(self): kind = self.kind or 'None' f = self._cache.get(kind) if not f: f = getattr(self,'_Flag_'+kind)() self._cache[kind] = f._explode() return self._borderDraw(f) def clone(self): return copy.copy(self) def demo(self): D = Drawing(200, 100) name = self.availableFlagNames() import time name = name[int(time.time()) % len(name)] fx = Flag() fx.kind = name fx.x = 0 fx.y = 0 D.add(fx) labelFontSize = 10 D.add(String(fx.x+(fx.size/2.0),(fx.y-(1.2*labelFontSize)), name, fillColor=colors.black, textAnchor='middle', fontSize=labelFontSize)) labelFontSize = int(fx.size/4.0) D.add(String(fx.x+(fx.size),(fx.y+((fx.size/2.0))), "SAMPLE", fillColor=colors.gold, textAnchor='middle', fontSize=labelFontSize, fontName="Helvetica-Bold")) return D def _Flag_UK(self): s = _size g = Group() w = s*2 g.add(Rect(0, 0, w, s, fillColor = colors.navy, strokeColor = colors.black, strokeWidth=0)) g.add(Polygon([0,0, s*.225,0, w,s*(1-.1125), w,s, w-s*.225,s, 0, s*.1125], fillColor = colors.mintcream, strokeColor=None, strokeWidth=0)) g.add(Polygon([0,s*(1-.1125), 0, s, s*.225,s, w, s*.1125, w,0, w-s*.225,0], fillColor = colors.mintcream, strokeColor=None, strokeWidth=0)) g.add(Polygon([0, s-(s/15.0), (s-((s/10.0)*4)), (s*0.65), (s-(s/10.0)*3), (s*0.65), 0, s], fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Polygon([0, 0, (s-((s/10.0)*3)), (s*0.35), (s-((s/10.0)*2)), (s*0.35), (s/10.0), 0], fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Polygon([w, s, (s+((s/10.0)*3)), (s*0.65), (s+((s/10.0)*2)), (s*0.65), w-(s/10.0), s], fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Polygon([w, (s/15.0), (s+((s/10.0)*4)), (s*0.35), (s+((s/10.0)*3)), (s*0.35), w, 0], fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Rect(((s*0.42)*2), 0, width=(0.16*s)*2, height=s, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0)) g.add(Rect(0, (s*0.35), width=w, height=s*0.3, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0)) g.add(Rect(((s*0.45)*2), 0, width=(0.1*s)*2, height=s, fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Rect(0, (s*0.4), width=w, height=s*0.2, fillColor = colors.red, strokeColor = None, strokeWidth=0)) return g def _Flag_USA(self): s = _size # abbreviate as we will use this a lot g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.mintcream, strokeColor = colors.black, strokeWidth=0) g.add(box) for stripecounter in range (13,0, -1): stripeheight = s/13.0 if not (stripecounter%2 == 0): stripecolor = colors.red else: stripecolor = colors.mintcream redorwhiteline = Rect(0, (s-(stripeheight*stripecounter)), width=s*2, height=stripeheight, fillColor = stripecolor, strokeColor = None, strokeWidth=20) g.add(redorwhiteline) bluebox = Rect(0, (s-(stripeheight*7)), width=0.8*s, height=stripeheight*7, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(bluebox) lss = s*0.045 lss2 = lss/2.0 s9 = s/9.0 s7 = s/7.0 for starxcounter in range(5): for starycounter in range(4): ls = Star() ls.size = lss ls.x = 0-s/22.0+lss/2.0+s7+starxcounter*s7 ls.fillColor = colors.mintcream ls.y = s-(starycounter+1)*s9+lss2 g.add(ls) for starxcounter in range(6): for starycounter in range(5): ls = Star() ls.size = lss ls.x = 0-(s/22.0)+lss/2.0+s/14.0+starxcounter*s7 ls.fillColor = colors.mintcream ls.y = s-(starycounter+1)*s9+(s/18.0)+lss2 g.add(ls) return g def _Flag_Afghanistan(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.mintcream, strokeColor = colors.black, strokeWidth=0) g.add(box) greenbox = Rect(0, ((s/3.0)*2.0), width=s*2.0, height=s/3.0, fillColor = colors.limegreen, strokeColor = None, strokeWidth=0) g.add(greenbox) blackbox = Rect(0, 0, width=s*2.0, height=s/3.0, fillColor = colors.black, strokeColor = None, strokeWidth=0) g.add(blackbox) return g def _Flag_Austria(self): s = _size # abbreviate as we will use this a lot g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.mintcream, strokeColor = colors.black, strokeWidth=0) g.add(box) redbox1 = Rect(0, 0, width=s*2.0, height=s/3.0, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redbox1) redbox2 = Rect(0, ((s/3.0)*2.0), width=s*2.0, height=s/3.0, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redbox2) return g def _Flag_Belgium(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.black, strokeColor = colors.black, strokeWidth=0) g.add(box) box1 = Rect(0, 0, width=(s/3.0)*2.0, height=s, fillColor = colors.black, strokeColor = None, strokeWidth=0) g.add(box1) box2 = Rect(((s/3.0)*2.0), 0, width=(s/3.0)*2.0, height=s, fillColor = colors.gold, strokeColor = None, strokeWidth=0) g.add(box2) box3 = Rect(((s/3.0)*4.0), 0, width=(s/3.0)*2.0, height=s, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(box3) return g def _Flag_China(self): s = _size g = Group() self._width = w = s*1.5 g.add(Rect(0, 0, w, s, fillColor=colors.red, strokeColor=None, strokeWidth=0)) def addStar(x,y,size,angle,g=g,w=s/20.0,x0=0,y0=s/2.0): s = Star() s.fillColor=colors.yellow s.angle = angle s.size = size*w*2 s.x = x*w+x0 s.y = y*w+y0 g.add(s) addStar(5,5,3, 0) addStar(10,1,1,36.86989765) addStar(12,3,1,8.213210702) addStar(12,6,1,16.60154960) addStar(10,8,1,53.13010235) return g def _Flag_Cuba(self): s = _size g = Group() for i in range(5): stripe = Rect(0, i*s/5.0, width=s*2, height=s/5.0, fillColor = [colors.darkblue, colors.mintcream][i%2], strokeColor = None, strokeWidth=0) g.add(stripe) redwedge = Polygon(points = [ 0, 0, 4*s/5.0, (s/2.0), 0, s], fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redwedge) star = Star() star.x = 2.5*s/10.0 star.y = s/2.0 star.size = 3*s/10.0 star.fillColor = colors.white g.add(star) box = Rect(0, 0, s*2, s, fillColor = None, strokeColor = colors.black, strokeWidth=0) g.add(box) return g def _Flag_Denmark(self): s = _size g = Group() self._width = w = s*1.4 box = Rect(0, 0, w, s, fillColor = colors.red, strokeColor = colors.black, strokeWidth=0) g.add(box) whitebox1 = Rect(((s/5.0)*2), 0, width=s/6.0, height=s, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whitebox1) whitebox2 = Rect(0, ((s/2.0)-(s/12.0)), width=w, height=s/6.0, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whitebox2) return g def _Flag_Finland(self): s = _size g = Group() # crossbox specific bits box = Rect(0, 0, s*2, s, fillColor = colors.ghostwhite, strokeColor = colors.black, strokeWidth=0) g.add(box) blueline1 = Rect((s*0.6), 0, width=0.3*s, height=s, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(blueline1) blueline2 = Rect(0, (s*0.4), width=s*2, height=s*0.3, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(blueline2) return g def _Flag_France(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.navy, strokeColor = colors.black, strokeWidth=0) g.add(box) bluebox = Rect(0, 0, width=((s/3.0)*2.0), height=s, fillColor = colors.blue, strokeColor = None, strokeWidth=0) g.add(bluebox) whitebox = Rect(((s/3.0)*2.0), 0, width=((s/3.0)*2.0), height=s, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whitebox) redbox = Rect(((s/3.0)*4.0), 0, width=((s/3.0)*2.0), height=s, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redbox) return g def _Flag_Germany(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.gold, strokeColor = colors.black, strokeWidth=0) g.add(box) blackbox1 = Rect(0, ((s/3.0)*2.0), width=s*2.0, height=s/3.0, fillColor = colors.black, strokeColor = None, strokeWidth=0) g.add(blackbox1) redbox1 = Rect(0, (s/3.0), width=s*2.0, height=s/3.0, fillColor = colors.orangered, strokeColor = None, strokeWidth=0) g.add(redbox1) return g def _Flag_Greece(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.gold, strokeColor = colors.black, strokeWidth=0) g.add(box) for stripecounter in range (9,0, -1): stripeheight = s/9.0 if not (stripecounter%2 == 0): stripecolor = colors.deepskyblue else: stripecolor = colors.mintcream blueorwhiteline = Rect(0, (s-(stripeheight*stripecounter)), width=s*2, height=stripeheight, fillColor = stripecolor, strokeColor = None, strokeWidth=20) g.add(blueorwhiteline) bluebox1 = Rect(0, ((s)-stripeheight*5), width=(stripeheight*5), height=stripeheight*5, fillColor = colors.deepskyblue, strokeColor = None, strokeWidth=0) g.add(bluebox1) whiteline1 = Rect(0, ((s)-stripeheight*3), width=stripeheight*5, height=stripeheight, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whiteline1) whiteline2 = Rect((stripeheight*2), ((s)-stripeheight*5), width=stripeheight, height=stripeheight*5, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whiteline2) return g def _Flag_Ireland(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.forestgreen, strokeColor = colors.black, strokeWidth=0) g.add(box) whitebox = Rect(((s*2.0)/3.0), 0, width=(2.0*(s*2.0)/3.0), height=s, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whitebox) orangebox = Rect(((2.0*(s*2.0)/3.0)), 0, width=(s*2.0)/3.0, height=s, fillColor = colors.darkorange, strokeColor = None, strokeWidth=0) g.add(orangebox) return g def _Flag_Italy(self): s = _size g = Group() g.add(Rect(0,0,s*2,s,fillColor=colors.forestgreen,strokeColor=None, strokeWidth=0)) g.add(Rect((2*s)/3.0, 0, width=(s*4)/3.0, height=s, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0)) g.add(Rect((4*s)/3.0, 0, width=(s*2)/3.0, height=s, fillColor = colors.red, strokeColor = None, strokeWidth=0)) return g def _Flag_Japan(self): s = _size g = Group() w = self._width = s*1.5 g.add(Rect(0,0,w,s,fillColor=colors.mintcream,strokeColor=None, strokeWidth=0)) g.add(Circle(cx=w/2.0,cy=s/2.0,r=0.3*w,fillColor=colors.red,strokeColor=None, strokeWidth=0)) return g def _Flag_Luxembourg(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.mintcream, strokeColor = colors.black, strokeWidth=0) g.add(box) redbox = Rect(0, ((s/3.0)*2.0), width=s*2.0, height=s/3.0, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redbox) bluebox = Rect(0, 0, width=s*2.0, height=s/3.0, fillColor = colors.dodgerblue, strokeColor = None, strokeWidth=0) g.add(bluebox) return g def _Flag_Holland(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.mintcream, strokeColor = colors.black, strokeWidth=0) g.add(box) redbox = Rect(0, ((s/3.0)*2.0), width=s*2.0, height=s/3.0, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redbox) bluebox = Rect(0, 0, width=s*2.0, height=s/3.0, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(bluebox) return g def _Flag_Portugal(self): return Group() def _Flag_Russia(self): s = _size g = Group() w = self._width = s*1.5 t = s/3.0 g.add(Rect(0, 0, width=w, height=t, fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Rect(0, t, width=w, height=t, fillColor = colors.blue, strokeColor = None, strokeWidth=0)) g.add(Rect(0, 2*t, width=w, height=t, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0)) return g def _Flag_Spain(self): s = _size g = Group() w = self._width = s*1.5 g.add(Rect(0, 0, width=w, height=s, fillColor = colors.red, strokeColor = None, strokeWidth=0)) g.add(Rect(0, (s/4.0), width=w, height=s/2.0, fillColor = colors.yellow, strokeColor = None, strokeWidth=0)) return g def _Flag_Sweden(self): s = _size g = Group() self._width = s*1.4 box = Rect(0, 0, self._width, s, fillColor = colors.dodgerblue, strokeColor = colors.black, strokeWidth=0) g.add(box) box1 = Rect(((s/5.0)*2), 0, width=s/6.0, height=s, fillColor = colors.gold, strokeColor = None, strokeWidth=0) g.add(box1) box2 = Rect(0, ((s/2.0)-(s/12.0)), width=self._width, height=s/6.0, fillColor = colors.gold, strokeColor = None, strokeWidth=0) g.add(box2) return g def _Flag_Norway(self): s = _size g = Group() self._width = s*1.4 box = Rect(0, 0, self._width, s, fillColor = colors.red, strokeColor = colors.black, strokeWidth=0) g.add(box) box = Rect(0, 0, self._width, s, fillColor = colors.red, strokeColor = colors.black, strokeWidth=0) g.add(box) whiteline1 = Rect(((s*0.2)*2), 0, width=s*0.2, height=s, fillColor = colors.ghostwhite, strokeColor = None, strokeWidth=0) g.add(whiteline1) whiteline2 = Rect(0, (s*0.4), width=self._width, height=s*0.2, fillColor = colors.ghostwhite, strokeColor = None, strokeWidth=0) g.add(whiteline2) blueline1 = Rect(((s*0.225)*2), 0, width=0.1*s, height=s, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(blueline1) blueline2 = Rect(0, (s*0.45), width=self._width, height=s*0.1, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(blueline2) return g def _Flag_CzechRepublic(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.mintcream, strokeColor = colors.black, strokeWidth=0) g.add(box) redbox = Rect(0, 0, width=s*2, height=s/2.0, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redbox) bluewedge = Polygon(points = [ 0, 0, s, (s/2.0), 0, s], fillColor = colors.darkblue, strokeColor = None, strokeWidth=0) g.add(bluewedge) return g def _Flag_Palestine(self): s = _size g = Group() box = Rect(0, s/3.0, s*2, s/3.0, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(box) greenbox = Rect(0, 0, width=s*2, height=s/3.0, fillColor = colors.limegreen, strokeColor = None, strokeWidth=0) g.add(greenbox) blackbox = Rect(0, 2*s/3.0, width=s*2, height=s/3.0, fillColor = colors.black, strokeColor = None, strokeWidth=0) g.add(blackbox) redwedge = Polygon(points = [ 0, 0, 2*s/3.0, (s/2.0), 0, s], fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redwedge) return g def _Flag_Turkey(self): s = _size g = Group() box = Rect(0, 0, s*2, s, fillColor = colors.red, strokeColor = colors.black, strokeWidth=0) g.add(box) whitecircle = Circle(cx=((s*0.35)*2), cy=s/2.0, r=s*0.3, fillColor = colors.mintcream, strokeColor = None, strokeWidth=0) g.add(whitecircle) redcircle = Circle(cx=((s*0.39)*2), cy=s/2.0, r=s*0.24, fillColor = colors.red, strokeColor = None, strokeWidth=0) g.add(redcircle) ws = Star() ws.angle = 15 ws.size = s/5.0 ws.x = (s*0.5)*2+ws.size/2.0 ws.y = (s*0.5) ws.fillColor = colors.mintcream ws.strokeColor = None g.add(ws) return g def _Flag_Switzerland(self): s = _size g = Group() self._width = s g.add(Rect(0, 0, s, s, fillColor = colors.red, strokeColor = colors.black, strokeWidth=0)) g.add(Line((s/2.0), (s/5.5), (s/2), (s-(s/5.5)), fillColor = colors.mintcream, strokeColor = colors.mintcream, strokeWidth=(s/5.0))) g.add(Line((s/5.5), (s/2.0), (s-(s/5.5)), (s/2.0), fillColor = colors.mintcream, strokeColor = colors.mintcream, strokeWidth=s/5.0)) return g def _Flag_EU(self): s = _size g = Group() w = self._width = 1.5*s g.add(Rect(0, 0, w, s, fillColor = colors.darkblue, strokeColor = None, strokeWidth=0)) centerx=w/2.0 centery=s/2.0 radius=s/3.0 yradius = radius xradius = radius nStars = 12 delta = 2*pi/nStars for i in range(nStars): rad = i*delta gs = Star() gs.x=cos(rad)*radius+centerx gs.y=sin(rad)*radius+centery gs.size=s/10.0 gs.fillColor=colors.gold g.add(gs) return g def _Flag_Brazil(self): s = _size # abbreviate as we will use this a lot g = Group() m = s/14.0 self._width = w = (m * 20) def addStar(x,y,size, g=g, w=w, s=s, m=m): st = Star() st.fillColor=colors.mintcream st.size = size*m st.x = (w/2.0) + (x * (0.35 * m)) st.y = (s/2.0) + (y * (0.35 * m)) g.add(st) g.add(Rect(0, 0, w, s, fillColor = colors.green, strokeColor = None, strokeWidth=0)) g.add(Polygon(points = [ 1.7*m, (s/2.0), (w/2.0), s-(1.7*m), w-(1.7*m),(s/2.0),(w/2.0), 1.7*m], fillColor = colors.yellow, strokeColor = None, strokeWidth=0)) g.add(Circle(cx=w/2.0, cy=s/2.0, r=3.5*m, fillColor=colors.blue,strokeColor=None, strokeWidth=0)) g.add(Wedge((w/2.0)-(2*m), 0, 8.5*m, 50, 98.1, 8.5*m, fillColor=colors.mintcream,strokeColor=None, strokeWidth=0)) g.add(Wedge((w/2.0), (s/2.0), 3.501*m, 156, 352, 3.501*m, fillColor=colors.mintcream,strokeColor=None, strokeWidth=0)) g.add(Wedge((w/2.0)-(2*m), 0, 8*m, 48.1, 100, 8*m, fillColor=colors.blue,strokeColor=None, strokeWidth=0)) g.add(Rect(0, 0, w, (s/4.0) + 1.7*m, fillColor = colors.green, strokeColor = None, strokeWidth=0)) g.add(Polygon(points = [ 1.7*m,(s/2.0), (w/2.0),s/2.0 - 2*m, w-(1.7*m),(s/2.0) , (w/2.0),1.7*m], fillColor = colors.yellow, strokeColor = None, strokeWidth=0)) g.add(Wedge(w/2.0, s/2.0, 3.502*m, 166, 342.1, 3.502*m, fillColor=colors.blue,strokeColor=None, strokeWidth=0)) addStar(3.2,3.5,0.3) addStar(-8.5,1.5,0.3) addStar(-7.5,-3,0.3) addStar(-4,-5.5,0.3) addStar(0,-4.5,0.3) addStar(7,-3.5,0.3) addStar(-3.5,-0.5,0.25) addStar(0,-1.5,0.25) addStar(1,-2.5,0.25) addStar(3,-7,0.25) addStar(5,-6.5,0.25) addStar(6.5,-5,0.25) addStar(7,-4.5,0.25) addStar(-5.5,-3.2,0.25) addStar(-6,-4.2,0.25) addStar(-1,-2.75,0.2) addStar(2,-5.5,0.2) addStar(4,-5.5,0.2) addStar(5,-7.5,0.2) addStar(5,-5.5,0.2) addStar(6,-5.5,0.2) addStar(-8.8,-3.2,0.2) addStar(2.5,0.5,0.2) addStar(-0.2,-3.2,0.14) addStar(-7.2,-2,0.14) addStar(0,-8,0.1) sTmp = "ORDEM E PROGRESSO" nTmp = len(sTmp) delta = 0.850848010347/nTmp radius = 7.9 *m centerx = (w/2.0)-(2*m) centery = 0 for i in range(nTmp): rad = 2*pi - i*delta -4.60766922527 x=cos(rad)*radius+centerx y=sin(rad)*radius+centery if i == 6: z = 0.35*m else: z= 0.45*m g2 = Group(String(x, y, sTmp[i], fontName='Helvetica-Bold', fontSize = z,strokeColor=None,fillColor=colors.green)) g2.rotate(rad) g.add(g2) return g def makeFlag(name): flag = Flag() flag.kind = name return flag def test(): """This function produces three pdf files with examples of all the signs and symbols from this file. """ # page 1 labelFontSize = 10 X = (20,245) flags = [ 'UK', 'USA', 'Afghanistan', 'Austria', 'Belgium', 'Denmark', 'Cuba', 'Finland', 'France', 'Germany', 'Greece', 'Ireland', 'Italy', 'Luxembourg', 'Holland', 'Palestine', 'Portugal', 'Spain', 'Sweden', 'Norway', 'CzechRepublic', 'Turkey', 'Switzerland', 'EU', 'Brazil', ] y = Y0 = 530 f = 0 D = None for name in flags: if not D: D = Drawing(450,650) flag = makeFlag(name) i = flags.index(name) flag.x = X[i%2] flag.y = y D.add(flag) D.add(String(flag.x+(flag.size/2.0),(flag.y-(1.2*labelFontSize)), name, fillColor=colors.black, textAnchor='middle', fontSize=labelFontSize)) if i%2: y = y - 125 if (i%2 and y<0) or name==flags[-1]: renderPDF.drawToFile(D, 'flags%02d.pdf'%f, 'flags.py - Page #%d'%(f+1)) y = Y0 f = f+1 D = None if __name__=='__main__': test() reportlab-3.5.34/src/reportlab/graphics/widgets/signsandsymbols.py0000664000175000017500000007300213544671343026230 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/widgets/signsandsymbols.py # signsandsymbols.py # A collection of new widgets # author: John Precedo (johnp@reportlab.com) __version__='3.3.0' __doc__="""This file is a collection of widgets to produce some common signs and symbols. Widgets include: - ETriangle (an equilateral triangle), - RTriangle (a right angled triangle), - Octagon, - Crossbox, - Tickbox, - SmileyFace, - StopSign, - NoEntry, - NotAllowed (the red roundel from 'no smoking' signs), - NoSmoking, - DangerSign (a black exclamation point in a yellow triangle), - YesNo (returns a tickbox or a crossbox depending on a testvalue), - FloppyDisk, - ArrowOne, and - ArrowTwo """ from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.attrmap import * from reportlab.graphics import shapes from reportlab.graphics.widgetbase import Widget from reportlab.graphics import renderPDF class _Symbol(Widget): """Abstract base widget possible attributes: 'x', 'y', 'size', 'fillColor', 'strokeColor' """ _nodoc = 1 _attrMap = AttrMap( x = AttrMapValue(isNumber,desc='symbol x coordinate'), y = AttrMapValue(isNumber,desc='symbol y coordinate'), dx = AttrMapValue(isNumber,desc='symbol x coordinate adjustment'), dy = AttrMapValue(isNumber,desc='symbol x coordinate adjustment'), size = AttrMapValue(isNumber), fillColor = AttrMapValue(isColorOrNone), strokeColor = AttrMapValue(isColorOrNone), strokeWidth = AttrMapValue(isNumber), ) def __init__(self): assert self.__class__.__name__!='_Symbol', 'Abstract class _Symbol instantiated' self.x = self.y = self.dx = self.dy = 0 self.size = 100 self.fillColor = colors.red self.strokeColor = None self.strokeWidth = 0.1 def demo(self): D = shapes.Drawing(200, 100) s = float(self.size) ob = self.__class__() ob.x=50 ob.y=0 ob.draw() D.add(ob) D.add(shapes.String(ob.x+(s/2),(ob.y-12), ob.__class__.__name__, fillColor=colors.black, textAnchor='middle', fontSize=10)) return D class ETriangle(_Symbol): """This draws an equilateral triangle.""" def __init__(self): pass #AbstractSymbol def draw(self): # general widget bits s = float(self.size) # abbreviate as we will use this a lot g = shapes.Group() # Triangle specific bits ae = s*0.125 #(ae = 'an eighth') triangle = shapes.Polygon(points = [ self.x, self.y, self.x+s, self.y, self.x+(s/2),self.y+s], fillColor = self.fillColor, strokeColor = self.strokeColor, strokeWidth=s/50.) g.add(triangle) return g class RTriangle(_Symbol): """This draws a right-angled triangle. possible attributes: 'x', 'y', 'size', 'fillColor', 'strokeColor' """ def __init__(self): self.x = 0 self.y = 0 self.size = 100 self.fillColor = colors.green self.strokeColor = None def draw(self): # general widget bits s = float(self.size) # abbreviate as we will use this a lot g = shapes.Group() # Triangle specific bits ae = s*0.125 #(ae = 'an eighth') triangle = shapes.Polygon(points = [ self.x, self.y, self.x+s, self.y, self.x,self.y+s], fillColor = self.fillColor, strokeColor = self.strokeColor, strokeWidth=s/50.) g.add(triangle) return g class Octagon(_Symbol): """This widget draws an Octagon. possible attributes: 'x', 'y', 'size', 'fillColor', 'strokeColor' """ def __init__(self): self.x = 0 self.y = 0 self.size = 100 self.fillColor = colors.yellow self.strokeColor = None def draw(self): # general widget bits s = float(self.size) # abbreviate as we will use this a lot g = shapes.Group() # Octagon specific bits athird=s/3 octagon = shapes.Polygon(points=[self.x+athird, self.y, self.x, self.y+athird, self.x, self.y+(athird*2), self.x+athird, self.y+s, self.x+(athird*2), self.y+s, self.x+s, self.y+(athird*2), self.x+s, self.y+athird, self.x+(athird*2), self.y], strokeColor = self.strokeColor, fillColor = self.fillColor, strokeWidth=10) g.add(octagon) return g class Crossbox(_Symbol): """This draws a black box with a red cross in it - a 'checkbox'. possible attributes: 'x', 'y', 'size', 'crossColor', 'strokeColor', 'crosswidth' """ _attrMap = AttrMap(BASE=_Symbol, crossColor = AttrMapValue(isColorOrNone), crosswidth = AttrMapValue(isNumber), ) def __init__(self): self.x = 0 self.y = 0 self.size = 100 self.fillColor = colors.white self.crossColor = colors.red self.strokeColor = colors.black self.crosswidth = 10 def draw(self): # general widget bits s = float(self.size) # abbreviate as we will use this a lot g = shapes.Group() # crossbox specific bits box = shapes.Rect(self.x+1, self.y+1, s-2, s-2, fillColor = self.fillColor, strokeColor = self.strokeColor, strokeWidth=2) g.add(box) crossLine1 = shapes.Line(self.x+(s*0.15), self.y+(s*0.15), self.x+(s*0.85), self.y+(s*0.85), fillColor = self.crossColor, strokeColor = self.crossColor, strokeWidth = self.crosswidth) g.add(crossLine1) crossLine2 = shapes.Line(self.x+(s*0.15), self.y+(s*0.85), self.x+(s*0.85) ,self.y+(s*0.15), fillColor = self.crossColor, strokeColor = self.crossColor, strokeWidth = self.crosswidth) g.add(crossLine2) return g class Tickbox(_Symbol): """This draws a black box with a red tick in it - another 'checkbox'. possible attributes: 'x', 'y', 'size', 'tickColor', 'strokeColor', 'tickwidth' """ _attrMap = AttrMap(BASE=_Symbol, tickColor = AttrMapValue(isColorOrNone), tickwidth = AttrMapValue(isNumber), ) def __init__(self): self.x = 0 self.y = 0 self.size = 100 self.tickColor = colors.red self.strokeColor = colors.black self.fillColor = colors.white self.tickwidth = 10 def draw(self): # general widget bits s = float(self.size) # abbreviate as we will use this a lot g = shapes.Group() # tickbox specific bits box = shapes.Rect(self.x+1, self.y+1, s-2, s-2, fillColor = self.fillColor, strokeColor = self.strokeColor, strokeWidth=2) g.add(box) tickLine = shapes.PolyLine(points = [self.x+(s*0.15), self.y+(s*0.35), self.x+(s*0.35), self.y+(s*0.15), self.x+(s*0.35), self.y+(s*0.15), self.x+(s*0.85) ,self.y+(s*0.85)], fillColor = self.tickColor, strokeColor = self.tickColor, strokeWidth = self.tickwidth) g.add(tickLine) return g class SmileyFace(_Symbol): """This draws a classic smiley face. possible attributes: 'x', 'y', 'size', 'fillColor' """ def __init__(self): _Symbol.__init__(self) self.x = 0 self.y = 0 self.size = 100 self.fillColor = colors.yellow self.strokeColor = colors.black def draw(self): # general widget bits s = float(self.size) # abbreviate as we will use this a lot g = shapes.Group() # SmileyFace specific bits g.add(shapes.Circle(cx=self.x+(s/2), cy=self.y+(s/2), r=s/2, fillColor=self.fillColor, strokeColor=self.strokeColor, strokeWidth=max(s/38.,self.strokeWidth))) for i in (1,2): g.add(shapes.Ellipse(self.x+(s/3)*i,self.y+(s/3)*2, s/30, s/10, fillColor=self.strokeColor, strokeColor = self.strokeColor, strokeWidth=max(s/38.,self.strokeWidth))) # calculate a pointslist for the mouth # THIS IS A HACK! - don't use if there is a 'shapes.Arc' centerx=self.x+(s/2) centery=self.y+(s/2) radius=s/3 yradius = radius xradius = radius startangledegrees=200 endangledegrees=340 degreedelta = 1 pointslist = [] a = pointslist.append from math import sin, cos, pi degreestoradians = pi/180.0 radiansdelta = degreedelta*degreestoradians startangle = startangledegrees*degreestoradians endangle = endangledegrees*degreestoradians while endangle 0 and next >= end: break elif inc < 0 and next <= end: break L.append(next) return L def makeDistancesList(list): """Returns a list of distances between adjacent numbers in some input list. E.g. [1, 1, 2, 3, 5, 7] -> [0, 1, 1, 2, 2] """ d = [] for i in range(len(list[:-1])): d.append(list[i+1] - list[i]) return d class Grid(Widget): """This makes a rectangular grid of equidistant stripes. The grid contains an outer border rectangle, and stripes inside which can be drawn with lines and/or as solid tiles. The drawing order is: outer rectangle, then lines and tiles. The stripes' width is indicated as 'delta'. The sequence of stripes can have an offset named 'delta0'. Both values need to be positive! """ _attrMap = AttrMap( x = AttrMapValue(isNumber, desc="The grid's lower-left x position."), y = AttrMapValue(isNumber, desc="The grid's lower-left y position."), width = AttrMapValue(isNumber, desc="The grid's width."), height = AttrMapValue(isNumber, desc="The grid's height."), orientation = AttrMapValue(OneOf(('vertical', 'horizontal')), desc='Determines if stripes are vertical or horizontal.'), useLines = AttrMapValue(OneOf((0, 1)), desc='Determines if stripes are drawn with lines.'), useRects = AttrMapValue(OneOf((0, 1)), desc='Determines if stripes are drawn with solid rectangles.'), delta = AttrMapValue(isNumber, desc='Determines the width/height of the stripes.'), delta0 = AttrMapValue(isNumber, desc='Determines the stripes initial width/height offset.'), deltaSteps = AttrMapValue(isListOfNumbers, desc='List of deltas to be used cyclically.'), stripeColors = AttrMapValue(isListOfColors, desc='Colors applied cyclically in the right or upper direction.'), fillColor = AttrMapValue(isColorOrNone, desc='Background color for entire rectangle.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color used for lines.'), strokeWidth = AttrMapValue(isNumber, desc='Width used for lines.'), rectStrokeColor = AttrMapValue(isColorOrNone, desc='Color for outer rect stroke.'), rectStrokeWidth = AttrMapValue(isNumberOrNone, desc='Width for outer rect stroke.'), ) def __init__(self): self.x = 0 self.y = 0 self.width = 100 self.height = 100 self.orientation = 'vertical' self.useLines = 0 self.useRects = 1 self.delta = 20 self.delta0 = 0 self.deltaSteps = [] self.fillColor = colors.white self.stripeColors = [colors.red, colors.green, colors.blue] self.strokeColor = colors.black self.strokeWidth = 2 def demo(self): D = Drawing(100, 100) g = Grid() D.add(g) return D def makeOuterRect(self): strokeColor = getattr(self,'rectStrokeColor',self.strokeColor) strokeWidth = getattr(self,'rectStrokeWidth',self.strokeWidth) if self.fillColor or (strokeColor and strokeWidth): rect = Rect(self.x, self.y, self.width, self.height) rect.fillColor = self.fillColor rect.strokeColor = strokeColor rect.strokeWidth = strokeWidth return rect else: return None def makeLinePosList(self, start, isX=0): "Returns a list of positions where to place lines." w, h = self.width, self.height if isX: length = w else: length = h if self.deltaSteps: r = [start + self.delta0] i = 0 while 1: if r[-1] > start + length: del r[-1] break r.append(r[-1] + self.deltaSteps[i % len(self.deltaSteps)]) i = i + 1 else: r = frange(start + self.delta0, start + length, self.delta) r.append(start + length) if self.delta0 != 0: r.insert(0, start) #print 'Grid.makeLinePosList() -> %s' % r return r def makeInnerLines(self): # inner grid lines group = Group() w, h = self.width, self.height if self.useLines == 1: if self.orientation == 'vertical': r = self.makeLinePosList(self.x, isX=1) for x in r: line = Line(x, self.y, x, self.y + h) line.strokeColor = self.strokeColor line.strokeWidth = self.strokeWidth group.add(line) elif self.orientation == 'horizontal': r = self.makeLinePosList(self.y, isX=0) for y in r: line = Line(self.x, y, self.x + w, y) line.strokeColor = self.strokeColor line.strokeWidth = self.strokeWidth group.add(line) return group def makeInnerTiles(self): # inner grid lines group = Group() w, h = self.width, self.height # inner grid stripes (solid rectangles) if self.useRects == 1: cols = self.stripeColors if self.orientation == 'vertical': r = self.makeLinePosList(self.x, isX=1) elif self.orientation == 'horizontal': r = self.makeLinePosList(self.y, isX=0) dist = makeDistancesList(r) i = 0 for j in range(len(dist)): if self.orientation == 'vertical': x = r[j] stripe = Rect(x, self.y, dist[j], h) elif self.orientation == 'horizontal': y = r[j] stripe = Rect(self.x, y, w, dist[j]) stripe.fillColor = cols[i % len(cols)] stripe.strokeColor = None group.add(stripe) i = i + 1 return group def draw(self): # general widget bits group = Group() group.add(self.makeOuterRect()) group.add(self.makeInnerTiles()) group.add(self.makeInnerLines(),name='_gridLines') return group class DoubleGrid(Widget): """This combines two ordinary Grid objects orthogonal to each other. """ _attrMap = AttrMap( x = AttrMapValue(isNumber, desc="The grid's lower-left x position."), y = AttrMapValue(isNumber, desc="The grid's lower-left y position."), width = AttrMapValue(isNumber, desc="The grid's width."), height = AttrMapValue(isNumber, desc="The grid's height."), grid0 = AttrMapValue(None, desc="The first grid component."), grid1 = AttrMapValue(None, desc="The second grid component."), ) def __init__(self): self.x = 0 self.y = 0 self.width = 100 self.height = 100 g0 = Grid() g0.x = self.x g0.y = self.y g0.width = self.width g0.height = self.height g0.orientation = 'vertical' g0.useLines = 1 g0.useRects = 0 g0.delta = 20 g0.delta0 = 0 g0.deltaSteps = [] g0.fillColor = colors.white g0.stripeColors = [colors.red, colors.green, colors.blue] g0.strokeColor = colors.black g0.strokeWidth = 1 g1 = Grid() g1.x = self.x g1.y = self.y g1.width = self.width g1.height = self.height g1.orientation = 'horizontal' g1.useLines = 1 g1.useRects = 0 g1.delta = 20 g1.delta0 = 0 g1.deltaSteps = [] g1.fillColor = colors.white g1.stripeColors = [colors.red, colors.green, colors.blue] g1.strokeColor = colors.black g1.strokeWidth = 1 self.grid0 = g0 self.grid1 = g1 ## # This gives an AttributeError: ## # DoubleGrid instance has no attribute 'grid0' ## def __setattr__(self, name, value): ## if name in ('x', 'y', 'width', 'height'): ## setattr(self.grid0, name, value) ## setattr(self.grid1, name, value) def demo(self): D = Drawing(100, 100) g = DoubleGrid() D.add(g) return D def draw(self): group = Group() g0, g1 = self.grid0, self.grid1 # Order groups to make sure both v and h lines # are visible (works only when there is only # one kind of stripes, v or h). G = g0.useRects == 1 and g1.useRects == 0 and (g0,g1) or (g1,g0) for g in G: group.add(g.makeOuterRect()) for g in G: group.add(g.makeInnerTiles()) group.add(g.makeInnerLines(),name='_gridLines') return group class ShadedRect(Widget): """This makes a rectangle with shaded colors between two colors. Colors are interpolated linearly between 'fillColorStart' and 'fillColorEnd', both of which appear at the margins. If 'numShades' is set to one, though, only 'fillColorStart' is used. """ _attrMap = AttrMap( x = AttrMapValue(isNumber, desc="The grid's lower-left x position."), y = AttrMapValue(isNumber, desc="The grid's lower-left y position."), width = AttrMapValue(isNumber, desc="The grid's width."), height = AttrMapValue(isNumber, desc="The grid's height."), orientation = AttrMapValue(OneOf(('vertical', 'horizontal')), desc='Determines if stripes are vertical or horizontal.'), numShades = AttrMapValue(isNumber, desc='The number of interpolating colors.'), fillColorStart = AttrMapValue(isColorOrNone, desc='Start value of the color shade.'), fillColorEnd = AttrMapValue(isColorOrNone, desc='End value of the color shade.'), strokeColor = AttrMapValue(isColorOrNone, desc='Color used for border line.'), strokeWidth = AttrMapValue(isNumber, desc='Width used for lines.'), cylinderMode = AttrMapValue(isBoolean, desc='True if shading reverses in middle.'), ) def __init__(self,**kw): self.x = 0 self.y = 0 self.width = 100 self.height = 100 self.orientation = 'vertical' self.numShades = 20 self.fillColorStart = colors.pink self.fillColorEnd = colors.black self.strokeColor = colors.black self.strokeWidth = 2 self.cylinderMode = 0 self.setProperties(kw) def demo(self): D = Drawing(100, 100) g = ShadedRect() D.add(g) return D def _flipRectCorners(self): "Flip rectangle's corners if width or height is negative." x, y, width, height, fillColorStart, fillColorEnd = self.x, self.y, self.width, self.height, self.fillColorStart, self.fillColorEnd if width < 0 and height > 0: x = x + width width = -width if self.orientation=='vertical': fillColorStart, fillColorEnd = fillColorEnd, fillColorStart elif height<0 and width>0: y = y + height height = -height if self.orientation=='horizontal': fillColorStart, fillColorEnd = fillColorEnd, fillColorStart elif height < 0 and height < 0: x = x + width width = -width y = y + height height = -height return x, y, width, height, fillColorStart, fillColorEnd def draw(self): # general widget bits group = Group() x, y, w, h, c0, c1 = self._flipRectCorners() numShades = self.numShades if self.cylinderMode: if not numShades%2: numShades = numShades+1 halfNumShades = int((numShades-1)/2) + 1 num = float(numShades) # must make it float! vertical = self.orientation == 'vertical' if vertical: if numShades == 1: V = [x] else: V = frange(x, x + w, w/num) else: if numShades == 1: V = [y] else: V = frange(y, y + h, h/num) for v in V: stripe = vertical and Rect(v, y, w/num, h) or Rect(x, v, w, h/num) if self.cylinderMode: if V.index(v)>=halfNumShades: col = colors.linearlyInterpolatedColor(c1,c0,V[halfNumShades],V[-1], v) else: col = colors.linearlyInterpolatedColor(c0,c1,V[0],V[halfNumShades], v) else: col = colors.linearlyInterpolatedColor(c0,c1,V[0],V[-1], v) stripe.fillColor = col stripe.strokeColor = col stripe.strokeWidth = 1 group.add(stripe) if self.strokeColor and self.strokeWidth>=0: rect = Rect(x, y, w, h) rect.strokeColor = self.strokeColor rect.strokeWidth = self.strokeWidth rect.fillColor = None group.add(rect) return group def colorRange(c0, c1, n): "Return a range of intermediate colors between c0 and c1" if n==1: return [c0] C = [] if n>1: lim = n-1 for i in range(n): C.append(colors.linearlyInterpolatedColor(c0,c1,0,lim, i)) return C def centroid(P): '''compute average point of a set of points''' cx = 0 cy = 0 for x,y in P: cx+=x cy+=y n = float(len(P)) return cx/n, cy/n def rotatedEnclosingRect(P, angle, rect): ''' given P a sequence P of x,y coordinate pairs and an angle in degrees find the centroid of P and the axis at angle theta through it find the extreme points of P wrt axis parallel distance and axis orthogonal distance. Then compute the least rectangle that will still enclose P when rotated by angle. The class R ''' from math import pi, cos, sin, tan x0, y0 = centroid(P) theta = (angle/180.)*pi s,c=sin(theta),cos(theta) def parallelAxisDist(xy,s=s,c=c,x0=x0,y0=y0): x,y = xy return (s*(y-y0)+c*(x-x0)) def orthogonalAxisDist(xy,s=s,c=c,x0=x0,y0=y0): x,y = xy return (c*(y-y0)+s*(x-x0)) L = list(map(parallelAxisDist,P)) L.sort() a0, a1 = L[0], L[-1] L = list(map(orthogonalAxisDist,P)) L.sort() b0, b1 = L[0], L[-1] rect.x, rect.width = a0, a1-a0 rect.y, rect.height = b0, b1-b0 g = Group(transform=(c,s,-s,c,x0,y0)) g.add(rect) return g class ShadedPolygon(Widget,LineShape): _attrMap = AttrMap(BASE=LineShape, angle = AttrMapValue(isNumber,desc="Shading angle"), fillColorStart = AttrMapValue(isColorOrNone), fillColorEnd = AttrMapValue(isColorOrNone), numShades = AttrMapValue(isNumber, desc='The number of interpolating colors.'), cylinderMode = AttrMapValue(isBoolean, desc='True if shading reverses in middle.'), points = AttrMapValue(isListOfNumbers), ) def __init__(self,**kw): self.angle = 90 self.fillColorStart = colors.red self.fillColorEnd = colors.green self.cylinderMode = 0 self.numShades = 50 self.points = [-1,-1,2,2,3,-1] LineShape.__init__(self,kw) def draw(self): P = self.points P = list(map(lambda i, P=P:(P[i],P[i+1]),range(0,len(P),2))) path = definePath([('moveTo',)+P[0]]+[('lineTo',)+x for x in P[1:]]+['closePath'], fillColor=None, strokeColor=None) path.isClipPath = 1 g = Group() g.add(path) angle = self.angle orientation = 'vertical' if angle==180: angle = 0 elif angle in (90,270): orientation ='horizontal' angle = 0 rect = ShadedRect(strokeWidth=0,strokeColor=None,orientation=orientation) for k in 'fillColorStart', 'fillColorEnd', 'numShades', 'cylinderMode': setattr(rect,k,getattr(self,k)) g.add(rotatedEnclosingRect(P, angle, rect)) g.add(EmptyClipPath) path = path.copy() path.isClipPath = 0 path.strokeColor = self.strokeColor path.strokeWidth = self.strokeWidth g.add(path) return g if __name__=='__main__': #noruntests from reportlab.lib.colors import blue from reportlab.graphics.shapes import Drawing angle=45 D = Drawing(120,120) D.add(ShadedPolygon(points=(10,10,60,60,110,10),strokeColor=None,strokeWidth=1,angle=90,numShades=50,cylinderMode=0)) D.save(formats=['gif'],fnRoot='shobj',outDir='/tmp') reportlab-3.5.34/src/reportlab/graphics/widgets/__init__.py0000664000175000017500000000036213544671343024547 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/widgets/__init__.py __version__='3.3.0' __doc__='''Some non-chart widgets''' reportlab-3.5.34/src/reportlab/graphics/__init__.py0000664000175000017500000000042213544671343023076 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/__init__.py __version__='3.3.0' __doc__='''Framework for reusable object graphics, in PDF or bitmap form''' reportlab-3.5.34/src/reportlab/graphics/shapes.py0000664000175000017500000015473313544671343022641 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/graphics/shapes.py __version__='3.3.0' __doc__='''Core of the graphics library - defines Drawing and Shapes''' import os, sys from math import pi, cos, sin, tan, sqrt from pprint import pprint from reportlab.platypus import Flowable from reportlab.rl_config import shapeChecking, verbose, defaultGraphicsFontName as _baseGFontName, _unset_, decimalSymbol from reportlab.lib import logger from reportlab.lib import colors from reportlab.lib.validators import * from reportlab.lib.utils import isSeq, asBytes isOpacity = NoneOr(isNumberInRange(0,1)) from reportlab.lib.attrmap import * from reportlab.lib.rl_accel import fp_str from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.lib.fonts import tt2ps from reportlab.pdfgen.canvas import FILL_EVEN_ODD, FILL_NON_ZERO from reportlab import xrange _baseGFontNameB = tt2ps(_baseGFontName,1,0) _baseGFontNameI = tt2ps(_baseGFontName,0,1) _baseGFontNameBI = tt2ps(_baseGFontName,1,1) class NotImplementedError(Exception): pass # two constants for filling rules NON_ZERO_WINDING = 'Non-Zero Winding' EVEN_ODD = 'Even-Odd' ## these can be overridden at module level before you start #creating shapes. So, if using a special color model, #this provides support for the rendering mechanism. #you can change defaults globally before you start #making shapes; one use is to substitute another #color model cleanly throughout the drawing. STATE_DEFAULTS = { # sensible defaults for all 'transform': (1,0,0,1,0,0), # styles follow SVG naming 'strokeColor': colors.black, 'strokeWidth': 1, 'strokeLineCap': 0, 'strokeLineJoin': 0, 'strokeMiterLimit' : 10, # don't know yet so let bomb here 'strokeDashArray': None, 'strokeOpacity': None, #100% 'fillOpacity': None, 'fillOverprint': False, 'strokeOverprint': False, 'overprintMask': 0, 'fillColor': colors.black, #...or text will be invisible 'fillMode': FILL_EVEN_ODD, #same as pdfgen.canvas 'fontSize': 10, 'fontName': _baseGFontName, 'textAnchor': 'start' # can be start, middle, end, inherited } #################################################################### # math utilities. These could probably be moved into lib # somewhere. #################################################################### # constructors for matrices: def nullTransform(): return (1, 0, 0, 1, 0, 0) def translate(dx, dy): return (1, 0, 0, 1, dx, dy) def scale(sx, sy): return (sx, 0, 0, sy, 0, 0) def rotate(angle): a = angle * pi/180 return (cos(a), sin(a), -sin(a), cos(a), 0, 0) def skewX(angle): a = angle * pi/180 return (1, 0, tan(a), 1, 0, 0) def skewY(angle): a = angle * pi/180 return (1, tan(a), 0, 1, 0, 0) def mmult(A, B): "A postmultiplied by B" # I checked this RGB # [a0 a2 a4] [b0 b2 b4] # [a1 a3 a5] * [b1 b3 b5] # [ 1 ] [ 1 ] # return (A[0]*B[0] + A[2]*B[1], A[1]*B[0] + A[3]*B[1], A[0]*B[2] + A[2]*B[3], A[1]*B[2] + A[3]*B[3], A[0]*B[4] + A[2]*B[5] + A[4], A[1]*B[4] + A[3]*B[5] + A[5]) def inverse(A): "For A affine 2D represented as 6vec return 6vec version of A**(-1)" # I checked this RGB det = float(A[0]*A[3] - A[2]*A[1]) R = [A[3]/det, -A[1]/det, -A[2]/det, A[0]/det] return tuple(R+[-R[0]*A[4]-R[2]*A[5],-R[1]*A[4]-R[3]*A[5]]) def zTransformPoint(A,v): "Apply the homogenous part of atransformation a to vector v --> A*v" return (A[0]*v[0]+A[2]*v[1],A[1]*v[0]+A[3]*v[1]) def transformPoint(A,v): "Apply transformation a to vector v --> A*v" return (A[0]*v[0]+A[2]*v[1]+A[4],A[1]*v[0]+A[3]*v[1]+A[5]) def transformPoints(matrix, V): r = [transformPoint(matrix,v) for v in V] if isinstance(V,tuple): r = tuple(r) return r def zTransformPoints(matrix, V): return list(map(lambda x,matrix=matrix: zTransformPoint(matrix,x), V)) def _textBoxLimits(text, font, fontSize, leading, textAnchor, boxAnchor): w = 0 for t in text: w = max(w,stringWidth(t,font, fontSize)) h = len(text)*leading yt = fontSize if boxAnchor[0]=='s': yb = -h yt = yt - h elif boxAnchor[0]=='n': yb = 0 else: yb = -h/2.0 yt = yt + yb if boxAnchor[-1]=='e': xb = -w if textAnchor=='end': xt = 0 elif textAnchor=='start': xt = -w else: xt = -w/2.0 elif boxAnchor[-1]=='w': xb = 0 if textAnchor=='end': xt = w elif textAnchor=='start': xt = 0 else: xt = w/2.0 else: xb = -w/2.0 if textAnchor=='end': xt = -xb elif textAnchor=='start': xt = xb else: xt = 0 return xb, yb, w, h, xt, yt def _rotatedBoxLimits( x, y, w, h, angle): ''' Find the corner points of the rotated w x h sized box at x,y return the corner points and the min max points in the original space ''' C = zTransformPoints(rotate(angle),((x,y),(x+w,y),(x+w,y+h),(x,y+h))) X = [x[0] for x in C] Y = [x[1] for x in C] return min(X), max(X), min(Y), max(Y), C class _DrawTimeResizeable: '''Addin class to provide the horribleness of _drawTimeResize''' def _drawTimeResize(self,w,h): if hasattr(self,'_canvas'): canvas = self._canvas drawing = canvas._drawing drawing.width, drawing.height = w, h if hasattr(canvas,'_drawTimeResize'): canvas._drawTimeResize(w,h) class _SetKeyWordArgs: def __init__(self, keywords={}): """In general properties may be supplied to the constructor.""" for key, value in keywords.items(): setattr(self, key, value) ################################################################# # # Helper functions for working out bounds # ################################################################# def getRectsBounds(rectList): # filter out any None objects, e.g. empty groups L = [x for x in rectList if x is not None] if not L: return None xMin, yMin, xMax, yMax = L[0] for (x1, y1, x2, y2) in L[1:]: if x1 < xMin: xMin = x1 if x2 > xMax: xMax = x2 if y1 < yMin: yMin = y1 if y2 > yMax: yMax = y2 return (xMin, yMin, xMax, yMax) def _getBezierExtrema(y0,y1,y2,y3): ''' this is used to find if a curveTo path operator has extrema in its range The curveTo operator is defined by the points y0, y1, y2, y3 B(t):=(1-t)^3*y0+3*(1-t)^2*t*y1+3*(1-t)*t^2*y2+t^3*y3 :=t^3*(y3-3*y2+3*y1-y0)+t^2*(3*y2-6*y1+3*y0)+t*(3*y1-3*y0)+y0 and is a cubic bezier curve. The differential is a quadratic t^2*(3*y3-9*y2+9*y1-3*y0)+t*(6*y2-12*y1+6*y0)+3*y1-3*y0 The extrema must be at real roots, r, of the above which lie in 0<=r<=1 The quadratic coefficients are a=3*y3-9*y2+9*y1-3*y0 b=6*y2-12*y1+6*y0 c=3*y1-3*y0 or a=y3-3*y2+3*y1-y0 b=2*y2-4*y1+2*y0 c=y1-y0 (remove common factor of 3) or a=y3-3*(y2-y1)-y0 b=2*(y2-2*y1+y0) c=y1-y0 The returned value is [y0,x1,x2,y3] where if found x1, x2 are any extremals that were found; there can be 0, 1 or 2 extremals ''' a=y3-3*(y2-y1)-y0 b=2*(y2-2*y1+y0) c=y1-y0 Y = [y0] #the set of points #standard method to find roots of quadratic d = b*b - 4*a*c if d>=0: d = sqrt(d) if b<0: d = -d q = -0.5*(b+d) R = [] try: R.append(q/a) except: pass try: R.append(c/q) except: pass b *= 1.5 c *= 3 for t in R: if 0<=t<=1: #real root in range evaluate spline there and add to X Y.append(t*(t*(t*a+b)+c)+y0) Y.append(y3) return Y def getPathBounds(points): n = len(points) f = lambda i,p = points: p[i] xs = list(map(f,range(0,n,2))) ys = list(map(f,range(1,n,2))) return (min(xs), min(ys), max(xs), max(ys)) def getPointsBounds(pointList): "Helper function for list of points" first = pointList[0] if isSeq(first): xs = [xy[0] for xy in pointList] ys = [xy[1] for xy in pointList] return (min(xs), min(ys), max(xs), max(ys)) else: return getPathBounds(pointList) ################################################################# # # And now the shapes themselves.... # ################################################################# class Shape(_SetKeyWordArgs,_DrawTimeResizeable): """Base class for all nodes in the tree. Nodes are simply packets of data to be created, stored, and ultimately rendered - they don't do anything active. They provide convenience methods for verification but do not check attribiute assignments or use any clever setattr tricks this time.""" _attrMap = AttrMap() def copy(self): """Return a clone of this shape.""" # implement this in the descendants as they need the right init methods. raise NotImplementedError("No copy method implemented for %s" % self.__class__.__name__) def getProperties(self,recur=1): """Interface to make it easy to extract automatic documentation""" #basic nodes have no children so this is easy. #for more complex objects like widgets you #may need to override this. props = {} for key, value in self.__dict__.items(): if key[0:1] != '_': props[key] = value return props def setProperties(self, props): """Supports the bulk setting if properties from, for example, a GUI application or a config file.""" self.__dict__.update(props) #self.verify() def dumpProperties(self, prefix=""): """Convenience. Lists them on standard output. You may provide a prefix - mostly helps to generate code samples for documentation.""" propList = list(self.getProperties().items()) propList.sort() if prefix: prefix = prefix + '.' for (name, value) in propList: print('%s%s = %s' % (prefix, name, value)) def verify(self): """If the programmer has provided the optional _attrMap attribute, this checks all expected attributes are present; no unwanted attributes are present; and (if a checking function is found) checks each attribute. Either succeeds or raises an informative exception.""" if self._attrMap is not None: for key in self.__dict__.keys(): if key[0] != '_': assert key in self._attrMap, "Unexpected attribute %s found in %s" % (key, self) for attr, metavalue in self._attrMap.items(): assert hasattr(self, attr), "Missing attribute %s from %s" % (attr, self) value = getattr(self, attr) assert metavalue.validate(value), "Invalid value %s for attribute %s in class %s" % (value, attr, self.__class__.__name__) if shapeChecking: """This adds the ability to check every attribute assignment as it is made. It slows down shapes but is a big help when developing. It does not get defined if rl_config.shapeChecking = 0""" def __setattr__(self, attr, value): """By default we verify. This could be off in some parallel base classes.""" validateSetattr(self,attr,value) #from reportlab.lib.attrmap def getBounds(self): "Returns bounding rectangle of object as (x1,y1,x2,y2)" raise NotImplementedError("Shapes and widgets must implement getBounds") class Group(Shape): """Groups elements together. May apply a transform to its contents. Has a publicly accessible property 'contents' which may be used to iterate over contents. In addition, child nodes may be given a name in which case they are subsequently accessible as properties.""" _attrMap = AttrMap( transform = AttrMapValue(isTransform,desc="Coordinate transformation to apply",advancedUsage=1), contents = AttrMapValue(isListOfShapes,desc="Contained drawable elements"), strokeOverprint = AttrMapValue(isBoolean,desc='Turn on stroke overprinting'), fillOverprint = AttrMapValue(isBoolean,desc='Turn on fill overprinting',advancedUsage=1), overprintMask = AttrMapValue(isBoolean,desc='overprinting for ordinary CMYK',advancedUsage=1), ) def __init__(self, *elements, **keywords): """Initial lists of elements may be provided to allow compact definitions in literal Python code. May or may not be useful.""" # Groups need _attrMap to be an instance rather than # a class attribute, as it may be extended at run time. self._attrMap = self._attrMap.clone() self.contents = [] self.transform = (1,0,0,1,0,0) for elt in elements: self.add(elt) # this just applies keywords; do it at the end so they #don;t get overwritten _SetKeyWordArgs.__init__(self, keywords) def _addNamedNode(self,name,node): 'if name is not None add an attribute pointing to node and add to the attrMap' if name: if name not in list(self._attrMap.keys()): self._attrMap[name] = AttrMapValue(isValidChild) setattr(self, name, node) def add(self, node, name=None): """Appends non-None child node to the 'contents' attribute. In addition, if a name is provided, it is subsequently accessible by name """ # propagates properties down if node is not None: assert isValidChild(node), "Can only add Shape or UserNode objects to a Group" self.contents.append(node) self._addNamedNode(name,node) def _nn(self,node): self.add(node) return self.contents[-1] def insert(self, i, n, name=None): 'Inserts sub-node n in contents at specified location' if n is not None: assert isValidChild(n), "Can only insert Shape or UserNode objects in a Group" if i<0: self.contents[i:i] =[n] else: self.contents.insert(i,n) self._addNamedNode(name,n) def expandUserNodes(self): """Return a new object which only contains primitive shapes.""" # many limitations - shared nodes become multiple ones, obj = isinstance(self,Drawing) and Drawing(self.width,self.height) or Group() obj._attrMap = self._attrMap.clone() if hasattr(obj,'transform'): obj.transform = self.transform[:] self_contents = self.contents a = obj.contents.append for child in self_contents: if isinstance(child, UserNode): newChild = child.provideNode() elif isinstance(child, Group): newChild = child.expandUserNodes() else: newChild = child.copy() a(newChild) self._copyNamedContents(obj) return obj def _explode(self): ''' return a fully expanded object''' from reportlab.graphics.widgetbase import Widget obj = Group() if hasattr(self,'__label__'): obj.__label__=self.__label__ if hasattr(obj,'transform'): obj.transform = self.transform[:] P = self.getContents()[:] # pending nodes while P: n = P.pop(0) if isinstance(n, UserNode): P.append(n.provideNode()) elif isinstance(n, Group): n = n._explode() if n.transform==(1,0,0,1,0,0): obj.contents.extend(n.contents) else: obj.add(n) else: obj.add(n) return obj def _copyContents(self,obj): for child in self.contents: obj.contents.append(child) def _copyNamedContents(self,obj,aKeys=None,noCopy=('contents',)): from copy import copy self_contents = self.contents if not aKeys: aKeys = list(self._attrMap.keys()) for k, v in self.__dict__.items(): if v in self_contents: pos = self_contents.index(v) setattr(obj, k, obj.contents[pos]) elif k in aKeys and k not in noCopy: setattr(obj, k, copy(v)) def _copy(self,obj): """copies to obj""" obj._attrMap = self._attrMap.clone() self._copyContents(obj) self._copyNamedContents(obj) return obj def copy(self): """returns a copy""" return self._copy(self.__class__()) def rotate(self, theta): """Convenience to help you set transforms""" self.transform = mmult(self.transform, rotate(theta)) def translate(self, dx, dy): """Convenience to help you set transforms""" self.transform = mmult(self.transform, translate(dx, dy)) def scale(self, sx, sy): """Convenience to help you set transforms""" self.transform = mmult(self.transform, scale(sx, sy)) def skew(self, kx, ky): """Convenience to help you set transforms""" self.transform = mmult(mmult(self.transform, skewX(kx)),skewY(ky)) def shift(self, x, y): '''Convenience function to set the origin arbitrarily''' self.transform = self.transform[:-2]+(x,y) def asDrawing(self, width, height): """ Convenience function to make a drawing from a group After calling this the instance will be a drawing! """ self.__class__ = Drawing self._attrMap.update(self._xtraAttrMap) self.width = width self.height = height def getContents(self): '''Return the list of things to be rendered override to get more complicated behaviour''' b = getattr(self,'background',None) C = self.contents if b and b not in C: C = [b]+C return C def getBounds(self): if self.contents: b = [] for elem in self.contents: b.append(elem.getBounds()) x1 = getRectsBounds(b) if x1 is None: return None x1, y1, x2, y2 = x1 trans = self.transform corners = [[x1,y1], [x1, y2], [x2, y1], [x2,y2]] newCorners = [] for corner in corners: newCorners.append(transformPoint(trans, corner)) return getPointsBounds(newCorners) else: #empty group needs a sane default; this #will happen when interactively creating a group #nothing has been added to yet. The alternative is #to handle None as an allowed return value everywhere. return None def _addObjImport(obj,I,n=None): '''add an import of obj's class to a dictionary of imports''' #' from inspect import getmodule c = obj.__class__ m = getmodule(c).__name__ n = n or c.__name__ if m not in I: I[m] = [n] elif n not in I[m]: I[m].append(n) def _repr(self,I=None): '''return a repr style string with named fixed args first, then keywords''' if isinstance(self,float): return fp_str(self) elif isSeq(self): s = '' for v in self: s = s + '%s,' % _repr(v,I) if isinstance(self,list): return '[%s]' % s[:-1] else: return '(%s%s)' % (s[:-1],len(self)==1 and ',' or '') elif self is EmptyClipPath: if I: _addObjImport(self,I,'EmptyClipPath') return 'EmptyClipPath' elif isinstance(self,Shape): if I: _addObjImport(self,I) from inspect import getargspec args, varargs, varkw, defaults = getargspec(self.__init__) if defaults: kargs = args[-len(defaults):] del args[-len(defaults):] else: kargs = [] P = self.getProperties() s = self.__class__.__name__+'(' for n in args[1:]: v = P[n] del P[n] s = s + '%s,' % _repr(v,I) for n in kargs: v = P[n] del P[n] s = s + '%s=%s,' % (n,_repr(v,I)) for n,v in P.items(): v = P[n] s = s + '%s=%s,' % (n, _repr(v,I)) return s[:-1]+')' else: return repr(self) def _renderGroupPy(G,pfx,I,i=0,indent='\t\t'): s = '' C = getattr(G,'transform',None) if C: s = s + ('%s%s.transform = %s\n' % (indent,pfx,_repr(C))) C = G.contents for n in C: if isinstance(n, Group): npfx = 'v%d' % i i += 1 l = getattr(n,'__label__','') if l: l='#'+l s = s + '%s%s=%s._nn(Group())%s\n' % (indent,npfx,pfx,l) s = s + _renderGroupPy(n,npfx,I,i,indent) i -= 1 else: s = s + '%s%s.add(%s)\n' % (indent,pfx,_repr(n,I)) return s def _extraKW(self,pfx,**kw): kw.update(self.__dict__) R = {} n = len(pfx) for k in kw.keys(): if k.startswith(pfx): R[k[n:]] = kw[k] return R class Drawing(Group, Flowable): """Outermost container; the thing a renderer works on. This has no properties except a height, width and list of contents.""" _saveModes=( 'pdf','ps','eps','gif','png','jpg','jpeg','pct', 'pict','tiff','tif','py','bmp','svg','tiffp','tiffl','tiff1', ) _xtraAttrMap = AttrMap( width = AttrMapValue(isNumber,desc="Drawing width in points."), height = AttrMapValue(isNumber,desc="Drawing height in points."), canv = AttrMapValue(None), background = AttrMapValue(isValidChildOrNone,desc="Background widget for the drawing e.g. Rect(0,0,width,height)"), hAlign = AttrMapValue(OneOf("LEFT", "RIGHT", "CENTER", "CENTRE"), desc="Horizontal alignment within parent document"), vAlign = AttrMapValue(OneOf("TOP", "BOTTOM", "CENTER", "CENTRE"), desc="Vertical alignment within parent document"), #AR temporary hack to track back up. #fontName = AttrMapValue(isStringOrNone), renderScale = AttrMapValue(isNumber,desc="Global scaling for rendering"), initialFontName = AttrMapValue(isStringOrNone,desc="override the STATE_DEFAULTS value for fontName"), initialFontSize = AttrMapValue(isNumberOrNone,desc="override the STATE_DEFAULTS value for fontSize"), ) _attrMap = AttrMap(BASE=Group, formats = AttrMapValue(SequenceOf( OneOf('pdf','gif','png','tif','jpg','tiff','pct','pict', 'bmp','tiffp','tiffl','tiff1','eps','svg','ps','py'), lo=1,emptyOK=0), desc='One or more plot modes'), ) _attrMap.update(_xtraAttrMap) def __init__(self, width=400, height=200, *nodes, **keywords): self.background = None Group.__init__(self,*nodes,**keywords) self.width = width self.height = height self.hAlign = 'LEFT' self.vAlign = 'BOTTOM' self.renderScale = 1.0 def _renderPy(self): I = { 'reportlab.graphics.shapes': ['_DrawingEditorMixin','Drawing','Group'], 'reportlab.lib.colors': ['Color','CMYKColor','PCMYKColor'], } G = _renderGroupPy(self._explode(),'self',I) n = 'ExplodedDrawing_' + self.__class__.__name__ s = '#Autogenerated by ReportLab guiedit do not edit\n' for m, o in I.items(): s = s + 'from %s import %s\n' % (m,str(o)[1:-1].replace("'","")) s = s + '\nclass %s(_DrawingEditorMixin,Drawing):\n' % n s = s + '\tdef __init__(self,width=%s,height=%s,*args,**kw):\n' % (self.width,self.height) s = s + '\t\tDrawing.__init__(self,width,height,*args,**kw)\n' s = s + G s = s + '\n\nif __name__=="__main__": #NORUNTESTS\n\t%s().save(formats=[\'pdf\'],outDir=\'.\',fnRoot=None)\n' % n return s def draw(self,showBoundary=_unset_): """This is used by the Platypus framework to let the document draw itself in a story. It is specific to PDF and should not be used directly.""" from reportlab.graphics import renderPDF renderPDF.draw(self, self.canv, 0, 0, showBoundary=showBoundary if showBoundary is not _unset_ else getattr(self,'_showBoundary',_unset_)) def wrap(self, availWidth, availHeight): width = self.width height = self.height renderScale = self.renderScale if renderScale!=1.0: width *= renderScale height *= renderScale return width, height def expandUserNodes(self): """Return a new drawing which only contains primitive shapes.""" obj = Group.expandUserNodes(self) obj.width = self.width obj.height = self.height return obj def copy(self): """Returns a copy""" return self._copy(self.__class__(self.width, self.height)) def asGroup(self,*args,**kw): return self._copy(Group(*args,**kw)) def save(self, formats=None, verbose=None, fnRoot=None, outDir=None, title='', **kw): """Saves copies of self in desired location and formats. Multiple formats can be supported in one call the extra keywords can be of the form _renderPM_dpi=96 (which passes dpi=96 to renderPM) """ genFmt = kw.pop('seqNumber','') if isinstance(genFmt,int): genFmt = '%4d: ' % genFmt else: genFmt = '' genFmt += 'generating %s file %s' from reportlab import rl_config ext = '' if not fnRoot: fnRoot = getattr(self,'fileNamePattern',(self.__class__.__name__+'%03d')) chartId = getattr(self,'chartId',0) if hasattr(chartId,'__call__'): chartId = chartId(self) if hasattr(fnRoot,'__call__'): fnRoot = fnRoot(chartId) else: try: fnRoot = fnRoot % chartId except TypeError as err: #the exact error message changed from 2.2 to 2.3 so we need to #check a substring if str(err).find('not all arguments converted') < 0: raise if os.path.isabs(fnRoot): outDir, fnRoot = os.path.split(fnRoot) else: outDir = outDir or getattr(self,'outDir','.') outDir = outDir.rstrip().rstrip(os.sep) if not outDir: outDir = '.' if not os.path.isabs(outDir): outDir = os.path.join(getattr(self,'_override_CWD',os.path.dirname(sys.argv[0])),outDir) if not os.path.isdir(outDir): os.makedirs(outDir) fnroot = os.path.normpath(os.path.join(outDir,fnRoot)) plotMode = os.path.splitext(fnroot) if plotMode[1][1:].lower() in self._saveModes: fnroot = plotMode[0] plotMode = [x.lower() for x in (formats or getattr(self,'formats',['pdf']))] verbose = (verbose is not None and (verbose,) or (getattr(self,'verbose',verbose),))[0] _saved = logger.warnOnce.enabled, logger.infoOnce.enabled logger.warnOnce.enabled = logger.infoOnce.enabled = verbose if 'pdf' in plotMode: from reportlab.graphics import renderPDF filename = fnroot+'.pdf' if verbose: print(genFmt % ('PDF',filename)) renderPDF.drawToFile(self, filename, title, showBoundary=getattr(self,'showBorder',rl_config.showBoundary),**_extraKW(self,'_renderPDF_',**kw)) ext = ext + '/.pdf' if sys.platform=='mac': import macfs, macostools macfs.FSSpec(filename).SetCreatorType("CARO", "PDF ") macostools.touched(filename) for bmFmt in ('gif','png','tif','jpg','tiff','pct','pict', 'bmp','tiffp','tiffl','tiff1'): if bmFmt in plotMode: from reportlab.graphics import renderPM filename = '%s.%s' % (fnroot,bmFmt) if verbose: print(genFmt % (bmFmt,filename)) dtc = getattr(self,'_drawTimeCollector',None) if dtc: dtcfmts = getattr(dtc,'formats',[bmFmt]) if bmFmt in dtcfmts and not getattr(dtc,'disabled',0): dtc.clear() else: dtc = None renderPM.drawToFile(self, filename,fmt=bmFmt,showBoundary=getattr(self,'showBorder',rl_config.showBoundary),**_extraKW(self,'_renderPM_',**kw)) ext = ext + '/.' + bmFmt if dtc: dtc.save(filename) if 'eps' in plotMode: try: from rlextra.graphics import renderPS_SEP as renderPS except ImportError: from reportlab.graphics import renderPS filename = fnroot+'.eps' if verbose: print(genFmt % ('EPS',filename)) renderPS.drawToFile(self, filename, title = fnroot, dept = getattr(self,'EPS_info',['Testing'])[0], company = getattr(self,'EPS_info',['','ReportLab'])[1], preview = getattr(self,'preview',rl_config.eps_preview), showBoundary=getattr(self,'showBorder',rl_config.showBoundary), ttf_embed=getattr(self,'ttf_embed',rl_config.eps_ttf_embed), **_extraKW(self,'_renderPS_',**kw)) ext = ext + '/.eps' if 'svg' in plotMode: from reportlab.graphics import renderSVG filename = fnroot+'.svg' if verbose: print(genFmt % ('SVG',filename)) renderSVG.drawToFile(self, filename, showBoundary=getattr(self,'showBorder',rl_config.showBoundary),**_extraKW(self,'_renderSVG_',**kw)) ext = ext + '/.svg' if 'ps' in plotMode: from reportlab.graphics import renderPS filename = fnroot+'.ps' if verbose: print(genFmt % ('EPS',filename)) renderPS.drawToFile(self, filename, showBoundary=getattr(self,'showBorder',rl_config.showBoundary),**_extraKW(self,'_renderPS_',**kw)) ext = ext + '/.ps' if 'py' in plotMode: filename = fnroot+'.py' if verbose: print(genFmt % ('py',filename)) with open(filename,'wb') as f: f.write(asBytes(self._renderPy().replace('\n',os.linesep))) ext = ext + '/.py' logger.warnOnce.enabled, logger.infoOnce.enabled = _saved if hasattr(self,'saveLogger'): self.saveLogger(fnroot,ext) return ext and fnroot+ext[1:] or '' def asString(self, format, verbose=None, preview=0, **kw): """Converts to an 8 bit string in given format.""" assert format in ('pdf','ps','eps','gif','png','jpg','jpeg','bmp','ppm','tiff','tif','py','pict','pct','tiffp','tiffl','tiff1'), 'Unknown file format "%s"' % format from reportlab import rl_config #verbose = verbose is not None and (verbose,) or (getattr(self,'verbose',verbose),)[0] if format == 'pdf': from reportlab.graphics import renderPDF return renderPDF.drawToString(self) elif format in ('gif','png','tif','tiff','jpg','pct','pict','bmp','ppm','tiffp','tiffl','tiff1'): from reportlab.graphics import renderPM return renderPM.drawToString(self, fmt=format,showBoundary=getattr(self,'showBorder', rl_config.showBoundary),**_extraKW(self,'_renderPM_',**kw)) elif format == 'eps': try: from rlextra.graphics import renderPS_SEP as renderPS except ImportError: from reportlab.graphics import renderPS return renderPS.drawToString(self, preview = preview, showBoundary=getattr(self,'showBorder',rl_config.showBoundary)) elif format == 'ps': from reportlab.graphics import renderPS return renderPS.drawToString(self, showBoundary=getattr(self,'showBorder',rl_config.showBoundary)) elif format == 'py': return self._renderPy() def resized(self,kind='fit',lpad=0,rpad=0,bpad=0,tpad=0): '''return a base class drawing which ensures all the contents fits''' C = self.getContents() oW = self.width oH = self.height drawing = Drawing(oW,oH,*C) xL,yL,xH,yH = drawing.getBounds() if kind=='fit' or (kind=='expand' and (xLoW-rpad or yLoH-tpad)): drawing.width = xH-xL+lpad+rpad drawing.height = yH-yL+tpad+bpad drawing.transform = (1,0,0,1,lpad-xL,bpad-yL) elif kind=='fitx' or (kind=='expandx' and (xLoW-rpad)): drawing.width = xH-xL+lpad+rpad drawing.transform = (1,0,0,1,lpad-xL,0) elif kind=='fity' or (kind=='expandy' and (yLoH-tpad)): drawing.height = yH-yL+tpad+bpad drawing.transform = (1,0,0,1,0,bpad-yL) return drawing class _DrawingEditorMixin: '''This is a mixin to provide functionality for edited drawings''' def _add(self,obj,value,name=None,validate=None,desc=None,pos=None): ''' effectively setattr(obj,name,value), but takes care of things with _attrMaps etc ''' ivc = isValidChild(value) if name and hasattr(obj,'_attrMap'): if '_attrMap' not in obj.__dict__: obj._attrMap = obj._attrMap.clone() if ivc and validate is None: validate = isValidChild obj._attrMap[name] = AttrMapValue(validate,desc) if hasattr(obj,'add') and ivc: if pos: obj.insert(pos,value,name) else: obj.add(value,name) elif name: setattr(obj,name,value) else: raise ValueError("Can't add, need name") class LineShape(Shape): # base for types of lines _attrMap = AttrMap( strokeColor = AttrMapValue(isColorOrNone), strokeWidth = AttrMapValue(isNumber), strokeLineCap = AttrMapValue(OneOf(0,1,2),desc="Line cap 0=butt, 1=round & 2=square"), strokeLineJoin = AttrMapValue(OneOf(0,1,2),desc="Line join 0=miter, 1=round & 2=bevel"), strokeMiterLimit = AttrMapValue(isNumber,desc="miter limit control miter line joins"), strokeDashArray = AttrMapValue(isListOfNumbersOrNone,desc="a sequence of numbers represents on and off, e.g. (2,1)"), strokeOpacity = AttrMapValue(isOpacity,desc="The level of transparency of the line, any real number betwen 0 and 1"), strokeOverprint = AttrMapValue(isBoolean,desc='Turn on stroke overprinting'), overprintMask = AttrMapValue(isBoolean,desc='overprinting for ordinary CMYK',advancedUsage=1), ) def __init__(self, kw): self.strokeColor = STATE_DEFAULTS['strokeColor'] self.strokeWidth = 1 self.strokeLineCap = 0 self.strokeLineJoin = 0 self.strokeMiterLimit = 0 self.strokeDashArray = None self.strokeOpacity = None self.setProperties(kw) class Line(LineShape): _attrMap = AttrMap(BASE=LineShape, x1 = AttrMapValue(isNumber,desc=""), y1 = AttrMapValue(isNumber,desc=""), x2 = AttrMapValue(isNumber,desc=""), y2 = AttrMapValue(isNumber,desc=""), ) def __init__(self, x1, y1, x2, y2, **kw): LineShape.__init__(self, kw) self.x1 = x1 self.y1 = y1 self.x2 = x2 self.y2 = y2 def getBounds(self): "Returns bounding rectangle of object as (x1,y1,x2,y2)" return (self.x1, self.y1, self.x2, self.y2) class SolidShape(LineShape): # base for anything with outline and content _attrMap = AttrMap(BASE=LineShape, fillColor = AttrMapValue(isColorOrNone,desc="filling color of the shape, e.g. red"), fillOpacity = AttrMapValue(isOpacity,desc="the level of transparency of the color, any real number between 0 and 1"), fillOverprint = AttrMapValue(isBoolean,desc='Turn on fill overprinting'), overprintMask = AttrMapValue(isBoolean,desc='overprinting for ordinary CMYK',advancedUsage=1), fillMode = AttrMapValue(OneOf(FILL_EVEN_ODD,FILL_NON_ZERO)), ) def __init__(self, kw): self.fillColor = STATE_DEFAULTS['fillColor'] self.fillOpacity = None # do this at the end so keywords overwrite #the above settings LineShape.__init__(self, kw) # path operator constants _MOVETO, _LINETO, _CURVETO, _CLOSEPATH = list(range(4)) _PATH_OP_ARG_COUNT = (2, 2, 6, 0) # [moveTo, lineTo, curveTo, closePath] _PATH_OP_NAMES=['moveTo','lineTo','curveTo','closePath'] def _renderPath(path,drawFuncs,countOnly=False,forceClose=False): """Helper function for renderers.""" # this could be a method of Path... points = path.points i = 0 hadClosePath = 0 hadMoveTo = 0 active = not countOnly for op in path.operators: if op == _MOVETO: if forceClose: if hadMoveTo and pop!=_CLOSEPATH: hadClosePath += 1 if active: drawFuncs[_CLOSEPATH]() hadMoveTo += 1 nArgs = _PATH_OP_ARG_COUNT[op] j = i + nArgs drawFuncs[op](*points[i:j]) i = j if op == _CLOSEPATH: hadClosePath += 1 pop = op if forceClose and hadMoveTo and pop!=_CLOSEPATH: hadClosePath += 1 if active: drawFuncs[_CLOSEPATH]() return hadMoveTo == hadClosePath _fillModeMap = { None: None, FILL_NON_ZERO: FILL_NON_ZERO, 'non-zero': FILL_NON_ZERO, 'nonzero': FILL_NON_ZERO, FILL_EVEN_ODD: FILL_EVEN_ODD, 'even-odd': FILL_EVEN_ODD, 'evenodd': FILL_EVEN_ODD, } class Path(SolidShape): """Path, made up of straight lines and bezier curves.""" _attrMap = AttrMap(BASE=SolidShape, points = AttrMapValue(isListOfNumbers), operators = AttrMapValue(isListOfNumbers), isClipPath = AttrMapValue(isBoolean), autoclose = AttrMapValue(NoneOr(OneOf('svg','pdf'))), fillMode = AttrMapValue(OneOf(FILL_EVEN_ODD,FILL_NON_ZERO)), ) def __init__(self, points=None, operators=None, isClipPath=0, autoclose=None, fillMode=None, **kw): SolidShape.__init__(self, kw) if points is None: points = [] if operators is None: operators = [] assert len(points) % 2 == 0, 'Point list must have even number of elements!' self.points = points self.operators = operators self.isClipPath = isClipPath self.autoclose=autoclose def copy(self): new = self.__class__(self.points[:], self.operators[:]) new.setProperties(self.getProperties()) return new def moveTo(self, x, y): self.points.extend([x, y]) self.operators.append(_MOVETO) def lineTo(self, x, y): self.points.extend([x, y]) self.operators.append(_LINETO) def curveTo(self, x1, y1, x2, y2, x3, y3): self.points.extend([x1, y1, x2, y2, x3, y3]) self.operators.append(_CURVETO) def closePath(self): self.operators.append(_CLOSEPATH) def getBounds(self): points = self.points try: #in case this complex algorithm is not yet ready :) X = [] aX = X.append eX = X.extend Y=[] aY = Y.append eY = Y.extend i = 0 for op in self.operators: nArgs = _PATH_OP_ARG_COUNT[op] j = i + nArgs if nArgs==2: #either moveTo or lineT0 aX(points[i]) aY(points[i+1]) elif nArgs==6: #curveTo x1,x2,x3 = points[i:j:2] eX(_getBezierExtrema(X[-1],x1,x2,x3)) y1,y2,y3 = points[i+1:j:2] eY(_getBezierExtrema(Y[-1],y1,y2,y3)) i = j return min(X),min(Y),max(X),max(Y) except: return getPathBounds(points) EmptyClipPath=Path() #special path def getArcPoints(centerx, centery, radius, startangledegrees, endangledegrees, yradius=None, degreedelta=None, reverse=None): if yradius is None: yradius = radius points = [] from math import sin, cos, pi degreestoradians = pi/180.0 startangle = startangledegrees*degreestoradians endangle = endangledegrees*degreestoradians while endangle.001: degreedelta = min(angle,degreedelta or 1.) radiansdelta = degreedelta*degreestoradians n = max(int(angle/radiansdelta+0.5),1) radiansdelta = angle/n n += 1 else: n = 1 radiansdelta = 0 for angle in range(n): angle = startangle+angle*radiansdelta a((centerx+radius*cos(angle),centery+yradius*sin(angle))) if reverse: points.reverse() return points class ArcPath(Path): '''Path with an addArc method''' def addArc(self, centerx, centery, radius, startangledegrees, endangledegrees, yradius=None, degreedelta=None, moveTo=None, reverse=None): P = getArcPoints(centerx, centery, radius, startangledegrees, endangledegrees, yradius=yradius, degreedelta=degreedelta, reverse=reverse) if moveTo or not len(self.operators): self.moveTo(P[0][0],P[0][1]) del P[0] for x, y in P: self.lineTo(x,y) def definePath(pathSegs=[],isClipPath=0, dx=0, dy=0, **kw): O = [] P = [] for seg in pathSegs: if not isSeq(seg): opName = seg args = [] else: opName = seg[0] args = seg[1:] if opName not in _PATH_OP_NAMES: raise ValueError('bad operator name %s' % opName) op = _PATH_OP_NAMES.index(opName) if len(args)!=_PATH_OP_ARG_COUNT[op]: raise ValueError('%s bad arguments %s' % (opName,str(args))) O.append(op) P.extend(list(args)) for d,o in (dx,0), (dy,1): for i in range(o,len(P),2): P[i] = P[i]+d return Path(P,O,isClipPath,**kw) class Rect(SolidShape): """Rectangle, possibly with rounded corners.""" _attrMap = AttrMap(BASE=SolidShape, x = AttrMapValue(isNumber), y = AttrMapValue(isNumber), width = AttrMapValue(isNumber,desc="width of the object in points"), height = AttrMapValue(isNumber,desc="height of the objects in points"), rx = AttrMapValue(isNumber), ry = AttrMapValue(isNumber), ) def __init__(self, x, y, width, height, rx=0, ry=0, **kw): SolidShape.__init__(self, kw) self.x = x self.y = y self.width = width self.height = height self.rx = rx self.ry = ry def copy(self): new = self.__class__(self.x, self.y, self.width, self.height) new.setProperties(self.getProperties()) return new def getBounds(self): return (self.x, self.y, self.x + self.width, self.y + self.height) class Image(SolidShape): """Bitmap image.""" _attrMap = AttrMap(BASE=SolidShape, x = AttrMapValue(isNumber), y = AttrMapValue(isNumber), width = AttrMapValue(isNumberOrNone,desc="width of the object in points"), height = AttrMapValue(isNumberOrNone,desc="height of the objects in points"), path = AttrMapValue(None), ) def __init__(self, x, y, width, height, path, **kw): SolidShape.__init__(self, kw) self.x = x self.y = y self.width = width self.height = height self.path = path def copy(self): new = self.__class__(self.x, self.y, self.width, self.height, self.path) new.setProperties(self.getProperties()) return new def getBounds(self): # bug fix contributed by Marcel Tromp return (self.x, self.y, self.x + self.width, self.y + self.height) class Circle(SolidShape): _attrMap = AttrMap(BASE=SolidShape, cx = AttrMapValue(isNumber,desc="x of the centre"), cy = AttrMapValue(isNumber,desc="y of the centre"), r = AttrMapValue(isNumber,desc="radius in points"), ) def __init__(self, cx, cy, r, **kw): SolidShape.__init__(self, kw) self.cx = cx self.cy = cy self.r = r def copy(self): new = self.__class__(self.cx, self.cy, self.r) new.setProperties(self.getProperties()) return new def getBounds(self): return (self.cx - self.r, self.cy - self.r, self.cx + self.r, self.cy + self.r) class Ellipse(SolidShape): _attrMap = AttrMap(BASE=SolidShape, cx = AttrMapValue(isNumber,desc="x of the centre"), cy = AttrMapValue(isNumber,desc="y of the centre"), rx = AttrMapValue(isNumber,desc="x radius"), ry = AttrMapValue(isNumber,desc="y radius"), ) def __init__(self, cx, cy, rx, ry, **kw): SolidShape.__init__(self, kw) self.cx = cx self.cy = cy self.rx = rx self.ry = ry def copy(self): new = self.__class__(self.cx, self.cy, self.rx, self.ry) new.setProperties(self.getProperties()) return new def getBounds(self): return (self.cx - self.rx, self.cy - self.ry, self.cx + self.rx, self.cy + self.ry) class Wedge(SolidShape): """A "slice of a pie" by default translates to a polygon moves anticlockwise from start angle to end angle""" _attrMap = AttrMap(BASE=SolidShape, centerx = AttrMapValue(isNumber,desc="x of the centre"), centery = AttrMapValue(isNumber,desc="y of the centre"), radius = AttrMapValue(isNumber,desc="radius in points"), startangledegrees = AttrMapValue(isNumber), endangledegrees = AttrMapValue(isNumber), yradius = AttrMapValue(isNumberOrNone), radius1 = AttrMapValue(isNumberOrNone), yradius1 = AttrMapValue(isNumberOrNone), annular = AttrMapValue(isBoolean,desc='treat as annular ring'), ) degreedelta = 1 # jump every 1 degrees def __init__(self, centerx, centery, radius, startangledegrees, endangledegrees, yradius=None, annular=False, **kw): SolidShape.__init__(self, kw) while endangledegrees0.001: degreedelta = min(self.degreedelta or 1.,angle) radiansdelta = degreedelta*degreestoradians n = max(1,int(angle/radiansdelta+0.5)) radiansdelta = angle/n n += 1 else: n = 1 radiansdelta = 0 CA = [] CAA = CA.append a = points.append for angle in xrange(n): angle = startangle+angle*radiansdelta CAA((cos(angle),sin(angle))) for c,s in CA: a(centerx+radius*c) a(centery+yradius*s) if (radius1==0 or radius1 is None) and (yradius1==0 or yradius1 is None): a(centerx); a(centery) else: CA.reverse() for c,s in CA: a(centerx+radius1*c) a(centery+yradius1*s) if self.annular: P = Path(fillMode=getattr(self,'fillMode',None)) P.moveTo(points[0],points[1]) for x in xrange(2,2*n,2): P.lineTo(points[x],points[x+1]) P.closePath() P.moveTo(points[2*n],points[2*n+1]) for x in xrange(2*n+2,4*n,2): P.lineTo(points[x],points[x+1]) P.closePath() return P else: return Polygon(points) def copy(self): new = self.__class__(self.centerx, self.centery, self.radius, self.startangledegrees, self.endangledegrees) new.setProperties(self.getProperties()) return new def getBounds(self): return self.asPolygon().getBounds() class Polygon(SolidShape): """Defines a closed shape; Is implicitly joined back to the start for you.""" _attrMap = AttrMap(BASE=SolidShape, points = AttrMapValue(isListOfNumbers,desc="list of numbers in the form x1, y1, x2, y2 ... xn, yn"), ) def __init__(self, points=[], **kw): SolidShape.__init__(self, kw) assert len(points) % 2 == 0, 'Point list must have even number of elements!' self.points = points or [] def copy(self): new = self.__class__(self.points) new.setProperties(self.getProperties()) return new def getBounds(self): return getPointsBounds(self.points) class PolyLine(LineShape): """Series of line segments. Does not define a closed shape; never filled even if apparently joined. Put the numbers in the list, not two-tuples.""" _attrMap = AttrMap(BASE=LineShape, points = AttrMapValue(isListOfNumbers,desc="list of numbers in the form x1, y1, x2, y2 ... xn, yn"), ) def __init__(self, points=[], **kw): LineShape.__init__(self, kw) points = points or [] lenPoints = len(points) if lenPoints: if isSeq(points[0]): L = [] for (x,y) in points: L.append(x) L.append(y) points = L else: assert len(points) % 2 == 0, 'Point list must have even number of elements!' self.points = points def copy(self): new = self.__class__(self.points) new.setProperties(self.getProperties()) return new def getBounds(self): return getPointsBounds(self.points) def numericXShift(tA,text,w,fontName,fontSize,encoding=None,pivotCharacter=decimalSymbol): dp = getattr(tA,'_dp',pivotCharacter) i = text.rfind(dp) if i>=0: dpOffs = getattr(tA,'_dpLen',0) w = dpOffs + stringWidth(text[:i],fontName,fontSize,encoding) return w class String(Shape): """Not checked against the spec, just a way to make something work. Can be anchored left, middle or end.""" # to do. _attrMap = AttrMap( x = AttrMapValue(isNumber,desc="x point of anchoring"), y = AttrMapValue(isNumber,desc="y point of anchoring"), text = AttrMapValue(isString,desc="the text of the string"), fontName = AttrMapValue(None,desc="font name of the text - font is either acrobat standard or registered when using external font."), fontSize = AttrMapValue(isNumber,desc="font size"), fillColor = AttrMapValue(isColorOrNone,desc="color of the font"), textAnchor = AttrMapValue(OneOf('start','middle','end','numeric'),desc="treat (x,y) as one of the options below."), encoding = AttrMapValue(isString), ) encoding = 'utf8' def __init__(self, x, y, text, **kw): self.x = x self.y = y self.text = text self.textAnchor = 'start' self.fontName = STATE_DEFAULTS['fontName'] self.fontSize = STATE_DEFAULTS['fontSize'] self.fillColor = STATE_DEFAULTS['fillColor'] self.setProperties(kw) def getEast(self): return self.x + stringWidth(self.text,self.fontName,self.fontSize, self.encoding) def copy(self): new = self.__class__(self.x, self.y, self.text) new.setProperties(self.getProperties()) return new def getBounds(self): # assumes constant drop of 0.2*size to baseline t = self.text w = stringWidth(t,self.fontName,self.fontSize,self.encoding) tA = self.textAnchor x = self.x if tA!='start': if tA=='middle': x -= 0.5*w elif tA=='end': x -= w elif tA=='numeric': x -= numericXShift(tA,t,w,self.fontName,self.fontSize,self.encoding) return (x, self.y - 0.2 * self.fontSize, x+w, self.y + self.fontSize) class UserNode(_DrawTimeResizeable): """A simple template for creating a new node. The user (Python programmer) may subclasses this. provideNode() must be defined to provide a Shape primitive when called by a renderer. It does NOT inherit from Shape, as the renderer always replaces it, and your own classes can safely inherit from it without getting lots of unintended behaviour.""" def provideNode(self): """Override this to create your own node. This lets widgets be added to drawings; they must create a shape (typically a group) so that the renderer can draw the custom node.""" raise NotImplementedError("this method must be redefined by the user/programmer") class DirectDraw(Shape): """try to draw directly on the canvas""" def drawDirectly(self,canvas): raise NotImplementedError("this method must be redefined by the user/programmer") def test(): r = Rect(10,10,200,50) import pprint pp = pprint.pprint w = sys.stdout.write w('a Rectangle: ') pp(r.getProperties()) w('\nverifying...') r.verify() w(' OK\n') #print 'setting rect.z = "spam"' #r.z = 'spam' w('deleting rect.width ') del r.width w('verifying...') r.verify() if __name__=='__main__': test() reportlab-3.5.34/src/reportlab/graphics/samples/0000775000175000017500000000000013607302651022424 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/graphics/samples/clustered_column.py0000664000175000017500000001014413544671343026354 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.samples.excelcolors import * from reportlab.graphics.charts.barcharts import VerticalBarChart from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label class ClusteredColumn(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,VerticalBarChart(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.bars[0].fillColor = color01 self.chart.bars[1].fillColor = color02 self.chart.bars[2].fillColor = color03 self.chart.bars[3].fillColor = color04 self.chart.bars[4].fillColor = color05 self.chart.bars[5].fillColor = color06 self.chart.bars[6].fillColor = color07 self.chart.bars[7].fillColor = color08 self.chart.bars[8].fillColor = color09 self.chart.bars[9].fillColor = color10 self.chart.fillColor = backgroundGrey self.chart.barLabels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontSize = 7 self.chart.valueAxis.forceZero = 1 self.chart.data = [(100, 150, 180), (125, 180, 200)] self.chart.groupSpacing = 15 self.chart.valueAxis.avoidBoundFrac = 1 self.chart.valueAxis.gridEnd = 115 self.chart.valueAxis.tickLeft = 3 self.chart.valueAxis.visibleGrid = 1 self.chart.categoryAxis.categoryNames = ['North', 'South', 'Central'] self.chart.categoryAxis.tickDown = 3 self.chart.categoryAxis.labels.fontName = 'Helvetica' self.chart.categoryAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,Label(),name='XLabel',validate=None,desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 7 self.XLabel.x = 85 self.XLabel.y = 10 self.XLabel.textAnchor ='middle' self.XLabel.maxWidth = 100 self.XLabel.height = 20 self.XLabel._text = "X Axis" self._add(self,Label(),name='YLabel',validate=None,desc="The label on the vertical axis") self.YLabel.fontName = 'Helvetica' self.YLabel.fontSize = 7 self.YLabel.x = 12 self.YLabel.y = 80 self.YLabel.angle = 90 self.YLabel.textAnchor ='middle' self.YLabel.maxWidth = 100 self.YLabel.height = 20 self.YLabel._text = "Y Axis" self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS ClusteredColumn().save(formats=['pdf'],outDir=None,fnRoot='clustered_column') reportlab-3.5.34/src/reportlab/graphics/samples/scatter_lines_markers.py0000664000175000017500000000727613544671343027404 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import ScatterPlot from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class ScatterLinesMarkers(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,ScatterPlot(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.lines[0].strokeColor = color01 self.chart.lines[1].strokeColor = color02 self.chart.lines[2].strokeColor = color03 self.chart.lines[3].strokeColor = color04 self.chart.lines[4].strokeColor = color05 self.chart.lines[5].strokeColor = color06 self.chart.lines[6].strokeColor = color07 self.chart.lines[7].strokeColor = color08 self.chart.lines[8].strokeColor = color09 self.chart.lines[9].strokeColor = color10 self.chart.fillColor = backgroundGrey self.chart.lineLabels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontSize = 7 self.chart.xValueAxis.forceZero = 0 self.chart.data = [((100,100), (200,200), (250,210), (300,300), (400,500)), ((100,200), (200,300), (250,200), (300,400), (400, 600))] self.chart.xValueAxis.avoidBoundFrac = 1 self.chart.xValueAxis.gridEnd = 115 self.chart.xValueAxis.tickDown = 3 self.chart.xValueAxis.visibleGrid = 1 self.chart.yValueAxis.tickLeft = 3 self.chart.yValueAxis.labels.fontName = 'Helvetica' self.chart.yValueAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.chart.lineLabelFormat = None self.chart.xLabel = 'X Axis' self.chart.y = 30 self.chart.yLabel = 'Y Axis' self.chart.yValueAxis.gridEnd = 115 self.chart.yValueAxis.visibleGrid = 1 self.chart.yValueAxis.labelTextFormat = '%d' self.chart.yValueAxis.forceZero = 1 self.chart.xValueAxis.forceZero = 1 self.chart.joinedLines = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS ScatterLinesMarkers().save(formats=['pdf'],outDir=None,fnRoot='scatter_lines_markers') reportlab-3.5.34/src/reportlab/graphics/samples/runall.py0000664000175000017500000000366213544671343024311 0ustar rptlabrptlab00000000000000# runs all the GUIedit charts in this directory - # makes a PDF sample for eaxh existing chart type import sys import glob import inspect import types def moduleClasses(mod): def P(obj, m=mod.__name__, CT=type): return (type(obj)==CT and obj.__module__==m) try: return inspect.getmembers(mod, P)[0][1] except: return None def getclass(f): return moduleClasses(__import__(f)) def run(format, VERBOSE=0): formats = format.split( ',') for i in range(0, len(formats)): formats[i] == formats[i].strip().lower() allfiles = glob.glob('*.py') allfiles.sort() for fn in allfiles: f = fn.split('.')[0] c = getclass(f) if c != None: print(c.__name__) try: for fmt in formats: if fmt: c().save(formats=[fmt],outDir='.',fnRoot=c.__name__) if VERBOSE: print(" %s.%s" % (c.__name__, fmt)) except: print(" COULDN'T CREATE '%s.%s'!" % (c.__name__, format)) if __name__ == "__main__": if len(sys.argv) == 1: run('pdf,pict,png') else: try: if sys.argv[1] == "-h": print('usage: runall.py [FORMAT] [-h]') print(' if format is supplied is should be one or more of pdf,gif,eps,png etc') print(' if format is missing the following formats are assumed: pdf,pict,png') print(' -h prints this message') else: t = sys.argv[1:] for f in t: run(f) except: print('usage: runall.py [FORMAT][-h]') print(' if format is supplied is should be one or more of pdf,gif,eps,png etc') print(' if format is missing the following formats are assumed: pdf,pict,png') print(' -h prints this message') raise reportlab-3.5.34/src/reportlab/graphics/samples/simple_pie.py0000664000175000017500000000557513544671343025147 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.piecharts import Pie from reportlab.graphics.widgets.grids import ShadedRect from reportlab.graphics.charts.legends import Legend from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class SimplePie(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,Pie(),name='chart',validate=None,desc="The main chart") self.chart.width = 100 self.chart.height = 100 self.chart.x = 25 self.chart.y = 25 self.chart.slices[0].fillColor = color01 self.chart.slices[1].fillColor = color02 self.chart.slices[2].fillColor = color03 self.chart.slices[3].fillColor = color04 self.chart.slices[4].fillColor = color05 self.chart.slices[5].fillColor = color06 self.chart.slices[6].fillColor = color07 self.chart.slices[7].fillColor = color08 self.chart.slices[8].fillColor = color09 self.chart.slices[9].fillColor = color10 self.chart.data = (100, 150, 180) self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'North'), (color02, 'South'),(color03, 'Central')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 160 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.chart.slices.strokeWidth = 1 self.chart.slices.fontName = 'Helvetica' self.background = ShadedRect() self.background.fillColorStart = backgroundGrey self.background.fillColorEnd = backgroundGrey self.background.numShades = 1 self.background.strokeWidth = 0.5 self.background.x = 25 self.background.y = 25 self.Legend.columnMaximum = 10 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS SimplePie().save(formats=['pdf'],outDir=None,fnRoot=None) reportlab-3.5.34/src/reportlab/graphics/samples/scatter.py0000664000175000017500000000676613544671343024471 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import ScatterPlot from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class Scatter(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,ScatterPlot(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.lines[0].strokeColor = color01 self.chart.lines[1].strokeColor = color02 self.chart.lines[2].strokeColor = color03 self.chart.lines[3].strokeColor = color04 self.chart.lines[4].strokeColor = color05 self.chart.lines[5].strokeColor = color06 self.chart.lines[6].strokeColor = color07 self.chart.lines[7].strokeColor = color08 self.chart.lines[8].strokeColor = color09 self.chart.lines[9].strokeColor = color10 self.chart.fillColor = backgroundGrey self.chart.lineLabels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontSize = 7 self.chart.xValueAxis.forceZero = 0 self.chart.data = [((100,100), (200,200), (250,210), (300,300), (400,500)), ((100,200), (200,300), (250,200), (300,400), (400, 600))] self.chart.xValueAxis.avoidBoundFrac = 1 self.chart.xValueAxis.gridEnd = 115 self.chart.xValueAxis.tickDown = 3 self.chart.xValueAxis.visibleGrid = 1 self.chart.yValueAxis.tickLeft = 3 self.chart.yValueAxis.labels.fontName = 'Helvetica' self.chart.yValueAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.chart.lineLabelFormat = None self.chart.xLabel = 'X Axis' self.chart.y = 30 self.chart.yLabel = 'Y Axis' self.chart.yValueAxis.labelTextFormat = '%d' self.chart.yValueAxis.forceZero = 1 self.chart.xValueAxis.forceZero = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS Scatter().save(formats=['pdf'],outDir=None,fnRoot='scatter') reportlab-3.5.34/src/reportlab/graphics/samples/clustered_bar.py0000664000175000017500000001023113544671343025620 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.samples.excelcolors import * from reportlab.graphics.charts.barcharts import HorizontalBarChart from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label class ClusteredBar(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,HorizontalBarChart(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.bars[0].fillColor = color01 self.chart.bars[1].fillColor = color02 self.chart.bars[2].fillColor = color03 self.chart.bars[3].fillColor = color04 self.chart.bars[4].fillColor = color05 self.chart.bars[5].fillColor = color06 self.chart.bars[6].fillColor = color07 self.chart.bars[7].fillColor = color08 self.chart.bars[8].fillColor = color09 self.chart.bars[9].fillColor = color10 self.chart.fillColor = backgroundGrey self.chart.barLabels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontSize = 6 self.chart.valueAxis.forceZero = 1 self.chart.data = [(100, 150, 180), (125, 180, 200)] self.chart.groupSpacing = 15 self.chart.valueAxis.avoidBoundFrac = 1 self.chart.valueAxis.gridEnd = 80 self.chart.valueAxis.tickDown = 3 self.chart.valueAxis.visibleGrid = 1 self.chart.categoryAxis.categoryNames = ['North', 'South', 'Central'] self.chart.categoryAxis.tickLeft = 3 self.chart.categoryAxis.labels.fontName = 'Helvetica' self.chart.categoryAxis.labels.fontSize = 6 self.chart.categoryAxis.labels.dx = -3 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,Label(),name='XLabel',validate=None,desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 7 self.XLabel.x = 85 self.XLabel.y = 10 self.XLabel.textAnchor ='middle' self.XLabel.maxWidth = 100 self.XLabel.height = 20 self.XLabel._text = "X Axis" self._add(self,Label(),name='YLabel',validate=None,desc="The label on the vertical axis") self.YLabel.fontName = 'Helvetica' self.YLabel.fontSize = 7 self.YLabel.x = 12 self.YLabel.y = 80 self.YLabel.angle = 90 self.YLabel.textAnchor ='middle' self.YLabel.maxWidth = 100 self.YLabel.height = 20 self.YLabel._text = "Y Axis" self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS ClusteredBar().save(formats=['pdf'],outDir=None,fnRoot='clustered_bar') reportlab-3.5.34/src/reportlab/graphics/samples/radar.py0000664000175000017500000000626413544671343024106 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.samples.excelcolors import * from reportlab.graphics.charts.spider import SpiderChart from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label class RadarChart(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,SpiderChart(),name='chart',validate=None,desc="The main chart") self.chart.width = 90 self.chart.height = 90 self.chart.x = 45 self.chart.y = 25 self.chart.strands[0].strokeColor= color01 self.chart.strands[1].strokeColor= color02 self.chart.strands[2].strokeColor= color03 self.chart.strands[3].strokeColor= color04 self.chart.strands[4].strokeColor= color05 self.chart.strands[5].strokeColor= color06 self.chart.strands[6].strokeColor= color07 self.chart.strands[7].strokeColor= color08 self.chart.strands[8].strokeColor= color09 self.chart.strands[9].strokeColor= color10 self.chart.strands[0].fillColor = None self.chart.strands[1].fillColor = None self.chart.strands[2].fillColor = None self.chart.strands[3].fillColor = None self.chart.strands[4].fillColor = None self.chart.strands[5].fillColor = None self.chart.strands[6].fillColor = None self.chart.strands[7].fillColor = None self.chart.strands[8].fillColor = None self.chart.strands[9].fillColor = None self.chart.strands.strokeWidth = 1 self.chart.strandLabels.fontName = 'Helvetica' self.chart.strandLabels.fontSize = 6 self.chart.fillColor = backgroundGrey self.chart.data = [(125, 180, 200), (100, 150, 180)] self.chart.labels = ['North', 'South', 'Central'] self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.chart.strands.strokeWidth = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS RadarChart().save(formats=['pdf'],outDir=None,fnRoot='radar') reportlab-3.5.34/src/reportlab/graphics/samples/filled_radar.py0000664000175000017500000000521313544671343025416 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.spider import SpiderChart from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class FilledRadarChart(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,SpiderChart(),name='chart',validate=None,desc="The main chart") self.chart.width = 90 self.chart.height = 90 self.chart.x = 45 self.chart.y = 25 self.chart.strands[0].fillColor = color01 self.chart.strands[1].fillColor = color02 self.chart.strands[2].fillColor = color03 self.chart.strands[3].fillColor = color04 self.chart.strands[4].fillColor = color05 self.chart.strands[5].fillColor = color06 self.chart.strands[6].fillColor = color07 self.chart.strands[7].fillColor = color08 self.chart.strands[8].fillColor = color09 self.chart.strands[9].fillColor = color10 self.chart.strandLabels.fontName = 'Helvetica' self.chart.strandLabels.fontSize = 6 self.chart.fillColor = backgroundGrey self.chart.data = [(125, 180, 200), (100, 150, 180)] self.chart.labels = ['North', 'South', 'Central'] self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS FilledRadarChart().save(formats=['pdf'],outDir=None,fnRoot='filled_radar') reportlab-3.5.34/src/reportlab/graphics/samples/stacked_column.py0000664000175000017500000001021613544671343026000 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.barcharts import VerticalBarChart from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class StackedColumn(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,VerticalBarChart(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.bars[0].fillColor = color01 self.chart.bars[1].fillColor = color02 self.chart.bars[2].fillColor = color03 self.chart.bars[3].fillColor = color04 self.chart.bars[4].fillColor = color05 self.chart.bars[5].fillColor = color06 self.chart.bars[6].fillColor = color07 self.chart.bars[7].fillColor = color08 self.chart.bars[8].fillColor = color09 self.chart.bars[9].fillColor = color10 self.chart.fillColor = backgroundGrey self.chart.barLabels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontSize = 7 self.chart.valueAxis.forceZero = 1 self.chart.data = [(100, 150, 180), (125, 180, 200)] self.chart.groupSpacing = 15 self.chart.valueAxis.avoidBoundFrac = 1 self.chart.valueAxis.gridEnd = 115 self.chart.valueAxis.tickLeft = 3 self.chart.valueAxis.visibleGrid = 1 self.chart.categoryAxis.categoryNames = ['North', 'South', 'Central'] self.chart.categoryAxis.tickDown = 3 self.chart.categoryAxis.labels.fontName = 'Helvetica' self.chart.categoryAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,Label(),name='XLabel',validate=None,desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 7 self.XLabel.x = 85 self.XLabel.y = 10 self.XLabel.textAnchor ='middle' self.XLabel.maxWidth = 100 self.XLabel.height = 20 self.XLabel._text = "X Axis" self._add(self,Label(),name='YLabel',validate=None,desc="The label on the vertical axis") self.YLabel.fontName = 'Helvetica' self.YLabel.fontSize = 7 self.YLabel.x = 12 self.YLabel.y = 80 self.YLabel.angle = 90 self.YLabel.textAnchor ='middle' self.YLabel.maxWidth = 100 self.YLabel.height = 20 self.YLabel._text = "Y Axis" self.chart.categoryAxis.style='stacked' self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS StackedColumn().save(formats=['pdf'],outDir=None,fnRoot='stacked_column') reportlab-3.5.34/src/reportlab/graphics/samples/bubble.py0000664000175000017500000000701013544671343024236 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import ScatterPlot from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class Bubble(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,ScatterPlot(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.lines[0].strokeColor = color01 self.chart.lines[1].strokeColor = color02 self.chart.lines[2].strokeColor = color03 self.chart.lines[3].strokeColor = color04 self.chart.lines[4].strokeColor = color05 self.chart.lines[5].strokeColor = color06 self.chart.lines[6].strokeColor = color07 self.chart.lines[7].strokeColor = color08 self.chart.lines[8].strokeColor = color09 self.chart.lines[9].strokeColor = color10 self.chart.lines.symbol.kind ='Circle' self.chart.lines.symbol.size = 15 self.chart.fillColor = backgroundGrey self.chart.lineLabels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontSize = 7 self.chart.xValueAxis.forceZero = 0 self.chart.data = [((100,100), (200,200), (250,210), (300,300), (350,450))] self.chart.xValueAxis.avoidBoundFrac = 1 self.chart.xValueAxis.gridEnd = 115 self.chart.xValueAxis.tickDown = 3 self.chart.xValueAxis.visibleGrid = 1 self.chart.yValueAxis.tickLeft = 3 self.chart.yValueAxis.labels.fontName = 'Helvetica' self.chart.yValueAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.chart.lineLabelFormat = None self.chart.xLabel = 'X Axis' self.chart.y = 30 self.chart.yLabel = 'Y Axis' self.chart.yValueAxis.labelTextFormat = '%d' self.chart.yValueAxis.forceZero = 1 self.chart.xValueAxis.forceZero = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS Bubble().save(formats=['pdf'],outDir=None,fnRoot='bubble') reportlab-3.5.34/src/reportlab/graphics/samples/scatter_lines.py0000664000175000017500000001011413544671343025641 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import ScatterPlot from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class ScatterLines(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,ScatterPlot(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.lines[0].strokeColor = color01 self.chart.lines[1].strokeColor = color02 self.chart.lines[2].strokeColor = color03 self.chart.lines[3].strokeColor = color04 self.chart.lines[4].strokeColor = color05 self.chart.lines[5].strokeColor = color06 self.chart.lines[6].strokeColor = color07 self.chart.lines[7].strokeColor = color08 self.chart.lines[8].strokeColor = color09 self.chart.lines[9].strokeColor = color10 self.chart.lines[0].symbol = None self.chart.lines[1].symbol = None self.chart.lines[2].symbol = None self.chart.lines[3].symbol = None self.chart.lines[4].symbol = None self.chart.lines[5].symbol = None self.chart.lines[6].symbol = None self.chart.lines[7].symbol = None self.chart.lines[8].symbol = None self.chart.lines[9].symbol = None self.chart.fillColor = backgroundGrey self.chart.lineLabels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontSize = 7 self.chart.xValueAxis.forceZero = 0 self.chart.data = [((100,100), (200,200), (250,210), (300,300), (400,500)), ((100,200), (200,300), (250,200), (300,400), (400, 600))] self.chart.xValueAxis.avoidBoundFrac = 1 self.chart.xValueAxis.gridEnd = 115 self.chart.xValueAxis.tickDown = 3 self.chart.xValueAxis.visibleGrid = 1 self.chart.yValueAxis.tickLeft = 3 self.chart.yValueAxis.labels.fontName = 'Helvetica' self.chart.yValueAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.chart.lineLabelFormat = None self.chart.xLabel = 'X Axis' self.chart.y = 30 self.chart.yLabel = 'Y Axis' self.chart.yValueAxis.gridEnd = 115 self.chart.yValueAxis.visibleGrid = 1 self.chart.yValueAxis.labelTextFormat = '%d' self.chart.yValueAxis.forceZero = 1 self.chart.xValueAxis.forceZero = 1 self.chart.joinedLines = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS ScatterLines().save(formats=['pdf'],outDir=None,fnRoot='scatter_lines') reportlab-3.5.34/src/reportlab/graphics/samples/exploded_pie.py0000664000175000017500000000607613544671343025457 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.piecharts import Pie from reportlab.graphics.samples.excelcolors import * from reportlab.graphics.widgets.grids import ShadedRect from reportlab.graphics.charts.legends import Legend from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label class ExplodedPie(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,Pie(),name='chart',validate=None,desc="The main chart") self.chart.width = 100 self.chart.height = 100 self.chart.x = 25 self.chart.y = 25 self.chart.slices[0].fillColor = color01 self.chart.slices[1].fillColor = color02 self.chart.slices[2].fillColor = color03 self.chart.slices[3].fillColor = color04 self.chart.slices[4].fillColor = color05 self.chart.slices[5].fillColor = color06 self.chart.slices[6].fillColor = color07 self.chart.slices[7].fillColor = color08 self.chart.slices[8].fillColor = color09 self.chart.slices[9].fillColor = color10 self.chart.data = (100, 150, 180) self.chart.startAngle = -90 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'North'), (color02, 'South'), (color03, 'Central')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 160 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self.Legend.columnMaximum = 10 self.chart.slices.strokeWidth = 1 self.chart.slices.fontName = 'Helvetica' self.background = ShadedRect() self.background.fillColorStart = backgroundGrey self.background.fillColorEnd = backgroundGrey self.background.numShades = 1 self.background.strokeWidth = 0.5 self.background.x = 20 self.background.y = 20 self.chart.slices.popout = 5 self.background.height = 110 self.background.width = 110 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS ExplodedPie().save(formats=['pdf'],outDir=None,fnRoot='exploded_pie') reportlab-3.5.34/src/reportlab/graphics/samples/linechart_with_markers.py0000664000175000017500000001162713544671343027544 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.widgets.markers import makeMarker from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class LineChartWithMarkers(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,LinePlot(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.lines[0].strokeColor = color01 self.chart.lines[1].strokeColor = color02 self.chart.lines[2].strokeColor = color03 self.chart.lines[3].strokeColor = color04 self.chart.lines[4].strokeColor = color05 self.chart.lines[5].strokeColor = color06 self.chart.lines[6].strokeColor = color07 self.chart.lines[7].strokeColor = color08 self.chart.lines[8].strokeColor = color09 self.chart.lines[9].strokeColor = color10 self.chart.lines[0].symbol = makeMarker('FilledSquare') self.chart.lines[1].symbol = makeMarker('FilledDiamond') self.chart.lines[2].symbol = makeMarker('FilledStarFive') self.chart.lines[3].symbol = makeMarker('FilledTriangle') self.chart.lines[4].symbol = makeMarker('FilledCircle') self.chart.lines[5].symbol = makeMarker('FilledPentagon') self.chart.lines[6].symbol = makeMarker('FilledStarSix') self.chart.lines[7].symbol = makeMarker('FilledHeptagon') self.chart.lines[8].symbol = makeMarker('FilledOctagon') self.chart.lines[9].symbol = makeMarker('FilledCross') self.chart.fillColor = backgroundGrey self.chart.lineLabels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontSize = 7 self.chart.xValueAxis.forceZero = 0 self.chart.data = [((0, 50), (100,100), (200,200), (250,210), (300,300), (400,500)), ((0, 150), (100,200), (200,300), (250,200), (300,400), (400, 600))] self.chart.xValueAxis.avoidBoundFrac = 1 self.chart.xValueAxis.gridEnd = 115 self.chart.xValueAxis.tickDown = 3 self.chart.xValueAxis.visibleGrid = 1 self.chart.yValueAxis.tickLeft = 3 self.chart.yValueAxis.labels.fontName = 'Helvetica' self.chart.yValueAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,Label(),name='XLabel',validate=None,desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 7 self.XLabel.x = 85 self.XLabel.y = 10 self.XLabel.textAnchor ='middle' self.XLabel.maxWidth = 100 self.XLabel.height = 20 self.XLabel._text = "X Axis" self._add(self,Label(),name='YLabel',validate=None,desc="The label on the vertical axis") self.YLabel.fontName = 'Helvetica' self.YLabel.fontSize = 7 self.YLabel.x = 12 self.YLabel.y = 80 self.YLabel.angle = 90 self.YLabel.textAnchor ='middle' self.YLabel.maxWidth = 100 self.YLabel.height = 20 self.YLabel._text = "Y Axis" self.chart.yValueAxis.forceZero = 1 self.chart.xValueAxis.forceZero = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS LineChartWithMarkers().save(formats=['pdf'],outDir=None,fnRoot='linechart_with_markers') reportlab-3.5.34/src/reportlab/graphics/samples/line_chart.py0000664000175000017500000001026313544671343025117 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class LineChart(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,LinePlot(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.lines[0].strokeColor = color01 self.chart.lines[1].strokeColor = color02 self.chart.lines[2].strokeColor = color03 self.chart.lines[3].strokeColor = color04 self.chart.lines[4].strokeColor = color05 self.chart.lines[5].strokeColor = color06 self.chart.lines[6].strokeColor = color07 self.chart.lines[7].strokeColor = color08 self.chart.lines[8].strokeColor = color09 self.chart.lines[9].strokeColor = color10 self.chart.fillColor = backgroundGrey self.chart.lineLabels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontName = 'Helvetica' self.chart.xValueAxis.labels.fontSize = 7 self.chart.xValueAxis.forceZero = 0 self.chart.data = [((0, 50), (100,100), (200,200), (250,210), (300,300), (400,500)), ((0, 150), (100,200), (200,300), (250,200), (300,400), (400, 600))] self.chart.xValueAxis.avoidBoundFrac = 1 self.chart.xValueAxis.gridEnd = 115 self.chart.xValueAxis.tickDown = 3 self.chart.xValueAxis.visibleGrid = 1 self.chart.yValueAxis.tickLeft = 3 self.chart.yValueAxis.labels.fontName = 'Helvetica' self.chart.yValueAxis.labels.fontSize = 7 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,Label(),name='XLabel',validate=None,desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 7 self.XLabel.x = 85 self.XLabel.y = 10 self.XLabel.textAnchor ='middle' self.XLabel.maxWidth = 100 self.XLabel.height = 20 self.XLabel._text = "X Axis" self._add(self,Label(),name='YLabel',validate=None,desc="The label on the vertical axis") self.YLabel.fontName = 'Helvetica' self.YLabel.fontSize = 7 self.YLabel.x = 12 self.YLabel.y = 80 self.YLabel.angle = 90 self.YLabel.textAnchor ='middle' self.YLabel.maxWidth = 100 self.YLabel.height = 20 self.YLabel._text = "Y Axis" self.chart.yValueAxis.forceZero = 1 self.chart.xValueAxis.forceZero = 1 self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS LineChart().save(formats=['pdf'],outDir=None,fnRoot='line_chart') reportlab-3.5.34/src/reportlab/graphics/samples/excelcolors.py0000664000175000017500000000364613544671343025340 0ustar rptlabrptlab00000000000000# define standard colors to mimic those used by Microsoft Excel from reportlab.lib.colors import CMYKColor, PCMYKColor #colour names as comments at the end of each line are as a memory jogger ONLY #NOT HTML named colours! #Main colours as used for bars etc color01 = PCMYKColor(40,40,0,0) # Lavender color02 = PCMYKColor(0,66,33,39) # Maroon color03 = PCMYKColor(0,0,20,0) # Yellow color04 = PCMYKColor(20,0,0,0) # Cyan color05 = PCMYKColor(0,100,0,59) # Purple color06 = PCMYKColor(0,49,49,0) # Salmon color07 = PCMYKColor(100,49,0,19) # Blue color08 = PCMYKColor(20,20,0,0) # PaleLavender color09 = PCMYKColor(100,100,0,49) # NavyBlue color10 = PCMYKColor(0,100,0,0) # Purple #Highlight colors - eg for the tops of bars color01Light = PCMYKColor(39,39,0,25) # Light Lavender color02Light = PCMYKColor(0,66,33,54) # Light Maroon color03Light = PCMYKColor(0,0,19,25) # Light Yellow color04Light = PCMYKColor(19,0,0,25) # Light Cyan color05Light = PCMYKColor(0,100,0,69) # Light Purple color06Light = PCMYKColor(0,49,49,25) # Light Salmon color07Light = PCMYKColor(100,49,0,39) # Light Blue color08Light = PCMYKColor(19,19,0,25) # Light PaleLavender color09Light = PCMYKColor(100,100,0,62) # Light NavyBlue color10Light = PCMYKColor(0,100,0,25) # Light Purple #Lowlight colors - eg for the sides of bars color01Dark = PCMYKColor(39,39,0,49) # Dark Lavender color02Dark = PCMYKColor(0,66,33,69) # Dark Maroon color03Dark = PCMYKColor(0,0,20,49) # Dark Yellow color04Dark = PCMYKColor(20,0,0,49) # Dark Cyan color05Dark = PCMYKColor(0,100,0,80) # Dark Purple color06Dark = PCMYKColor(0,50,50,49) # Dark Salmon color07Dark = PCMYKColor(100,50,0,59) # Dark Blue color08Dark = PCMYKColor(20,20,0,49) # Dark PaleLavender color09Dark = PCMYKColor(100,100,0,79) # Dark NavyBlue color10Dark = PCMYKColor(0,100,0,49) # Dark Purple #for standard grey backgrounds backgroundGrey = PCMYKColor(0,0,0,24) reportlab-3.5.34/src/reportlab/graphics/samples/__init__.py0000664000175000017500000000010513544671343024540 0ustar rptlabrptlab00000000000000__doc__="""Example drawings to review, used in autogenerated docs""" reportlab-3.5.34/src/reportlab/graphics/samples/stacked_bar.py0000664000175000017500000001030413544671343025245 0ustar rptlabrptlab00000000000000#Autogenerated by ReportLab guiedit do not edit from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.barcharts import HorizontalBarChart from reportlab.graphics.shapes import Drawing, _DrawingEditorMixin, String from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.samples.excelcolors import * class StackedBar(_DrawingEditorMixin,Drawing): def __init__(self,width=200,height=150,*args,**kw): Drawing.__init__(self,width,height,*args,**kw) self._add(self,HorizontalBarChart(),name='chart',validate=None,desc="The main chart") self.chart.width = 115 self.chart.height = 80 self.chart.x = 30 self.chart.y = 40 self.chart.bars[0].fillColor = color01 self.chart.bars[1].fillColor = color02 self.chart.bars[2].fillColor = color03 self.chart.bars[3].fillColor = color04 self.chart.bars[4].fillColor = color05 self.chart.bars[5].fillColor = color06 self.chart.bars[6].fillColor = color07 self.chart.bars[7].fillColor = color08 self.chart.bars[8].fillColor = color09 self.chart.bars[9].fillColor = color10 self.chart.fillColor = backgroundGrey self.chart.barLabels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontName = 'Helvetica' self.chart.valueAxis.labels.fontSize = 6 self.chart.valueAxis.forceZero = 1 self.chart.data = [(100, 150, 180), (125, 180, 200)] self.chart.groupSpacing = 15 self.chart.valueAxis.avoidBoundFrac = 1 self.chart.valueAxis.gridEnd = 80 self.chart.valueAxis.tickDown = 3 self.chart.valueAxis.visibleGrid = 1 self.chart.categoryAxis.categoryNames = ['North', 'South', 'Central'] self.chart.categoryAxis.tickLeft = 3 self.chart.categoryAxis.labels.fontName = 'Helvetica' self.chart.categoryAxis.labels.fontSize = 6 self.chart.categoryAxis.labels.dx = -3 self._add(self,Label(),name='Title',validate=None,desc="The title at the top of the chart") self.Title.fontName = 'Helvetica-Bold' self.Title.fontSize = 7 self.Title.x = 100 self.Title.y = 135 self.Title._text = 'Chart Title' self.Title.maxWidth = 180 self.Title.height = 20 self.Title.textAnchor ='middle' self._add(self,Legend(),name='Legend',validate=None,desc="The legend or key for the chart") self.Legend.colorNamePairs = [(color01, 'Widgets'), (color02, 'Sprockets')] self.Legend.fontName = 'Helvetica' self.Legend.fontSize = 7 self.Legend.x = 153 self.Legend.y = 85 self.Legend.dxTextSpace = 5 self.Legend.dy = 5 self.Legend.dx = 5 self.Legend.deltay = 5 self.Legend.alignment ='right' self._add(self,Label(),name='XLabel',validate=None,desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 7 self.XLabel.x = 85 self.XLabel.y = 10 self.XLabel.textAnchor ='middle' self.XLabel.maxWidth = 100 self.XLabel.height = 20 self.XLabel._text = "X Axis" self._add(self,Label(),name='YLabel',validate=None,desc="The label on the vertical axis") self.YLabel.fontName = 'Helvetica' self.YLabel.fontSize = 7 self.YLabel.x = 12 self.YLabel.y = 80 self.YLabel.angle = 90 self.YLabel.textAnchor ='middle' self.YLabel.maxWidth = 100 self.YLabel.height = 20 self.YLabel._text = "Y Axis" self.chart.categoryAxis.style='stacked' self._add(self,0,name='preview',validate=None,desc=None) if __name__=="__main__": #NORUNTESTS StackedBar().save(formats=['pdf'],outDir=None,fnRoot='stacked_bar') reportlab-3.5.34/src/reportlab/graphics/renderSVG.py0000664000175000017500000011014513554340114023170 0ustar rptlabrptlab00000000000000__doc__="""An experimental SVG renderer for the ReportLab graphics framework. This will create SVG code from the ReportLab Graphics API (RLG). To read existing SVG code and convert it into ReportLab graphics objects download the svglib module here: http://python.net/~gherman/#svglib """ import math, types, sys, os, codecs, base64 from operator import getitem from reportlab.pdfbase.pdfmetrics import stringWidth # for font info from reportlab.lib.rl_accel import fp_str from reportlab.lib.colors import black from reportlab.lib.utils import asNative, getBytesIO from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer, renderScaledDrawing from reportlab.graphics.shapes import STATE_DEFAULTS, Path, UserNode from reportlab.graphics.shapes import * # (only for test0) from reportlab import rl_config, ascii from reportlab.lib.utils import getStringIO, RLString, isPy3, isUnicode, isBytes from reportlab.pdfgen.canvas import FILL_EVEN_ODD, FILL_NON_ZERO from xml.dom import getDOMImplementation ### some constants ### sin = math.sin cos = math.cos pi = math.pi AREA_STYLES = 'stroke-width stroke-linecap stroke stroke-opacity fill fill-opacity stroke-dasharray id'.split() LINE_STYLES = 'stroke-width stroke-linecap stroke stroke-opacity stroke-dasharray id'.split() TEXT_STYLES = 'font-family font-weight font-style font-variant font-size id'.split() ### top-level user function ### def drawToString(d, showBoundary=rl_config.showBoundary,**kwds): "Returns a SVG as a string in memory, without touching the disk" s = getStringIO() drawToFile(d, s, showBoundary=showBoundary,**kwds) return s.getvalue() def drawToFile(d, fn, showBoundary=rl_config.showBoundary,**kwds): d = renderScaledDrawing(d) c = SVGCanvas((d.width, d.height),**kwds) draw(d, c, 0, 0, showBoundary=showBoundary) c.save(fn) def draw(drawing, canvas, x=0, y=0, showBoundary=rl_config.showBoundary): """As it says.""" r = _SVGRenderer() r.draw(renderScaledDrawing(drawing), canvas, x, y, showBoundary=showBoundary) ### helper functions ### def _pointsFromList(L): """ given a list of coordinates [x0, y0, x1, y1....] produce a list of points [(x0,y0), (y1,y0),....] """ P=[] for i in range(0,len(L), 2): P.append((L[i], L[i+1])) return P def transformNode(doc, newTag, node=None, **attrDict): """Transform a DOM node into new node and copy selected attributes. Creates a new DOM node with tag name 'newTag' for document 'doc' and copies selected attributes from an existing 'node' as provided in 'attrDict'. The source 'node' can be None. Attribute values will be converted to strings. E.g. n = transformNode(doc, "node1", x="0", y="1") -> DOM node for n = transformNode(doc, "node1", x=0, y=1+1) -> DOM node for n = transformNode(doc, "node1", node0, x="x0", y="x0", zoo=bar()) -> DOM node for """ newNode = doc.createElement(newTag) for newAttr, attr in attrDict.items(): sattr = str(attr) if not node: newNode.setAttribute(newAttr, sattr) else: attrVal = node.getAttribute(sattr) newNode.setAttribute(newAttr, attrVal or sattr) return newNode class EncodedWriter(list): ''' EncodedWriter(encoding) assumes .write will be called with either unicode or utf8 encoded bytes. it will accumulate unicode ''' BOMS = { 'utf-32':codecs.BOM_UTF32, 'utf-32-be':codecs.BOM_UTF32_BE, 'utf-32-le':codecs.BOM_UTF32_LE, 'utf-16':codecs.BOM_UTF16, 'utf-16-be':codecs.BOM_UTF16_BE, 'utf-16-le':codecs.BOM_UTF16_LE, } def __init__(self,encoding,bom=False): list.__init__(self) self.encoding = encoding = codecs.lookup(encoding).name if bom and '16' in encoding or '32' in encoding: self.write(self.BOMS[encoding]) def write(self,u): if isBytes(u): try: u = u.decode('utf-8') except: et, ev, tb = sys.exc_info() ev = str(ev) del et, tb raise ValueError("String %r not encoded as 'utf-8'\nerror=%s" % (u,ev)) elif not isUnicode(u): raise ValueError("EncodedWriter.write(%s) argument should be 'utf-8' bytes or str" % ascii(u)) self.append(u) def getvalue(self): r = ''.join(self) del self[:] return r _fillRuleMap = { FILL_NON_ZERO: 'nonzero', 'non-zero': 'nonzero', 'nonzero': 'nonzero', FILL_EVEN_ODD: 'evenodd', 'even-odd': 'evenodd', 'evenodd': 'evenodd', } ### classes ### class SVGCanvas: def __init__(self, size=(300,300), encoding='utf-8', verbose=0, bom=False, **kwds): ''' verbose = 0 >0 means do verbose stuff useClip = False True means don't use a clipPath definition put the global clip into the clip property to get around an issue with safari extraXmlDecl = '' use to add extra xml declarations scaleGroupId = '' id of an extra group to add around the drawing to allow easy scaling svgAttrs = {} dictionary of attributes to be applied to the svg tag itself ''' self.verbose = verbose self.encoding = codecs.lookup(encoding).name self.bom = bom useClip = kwds.pop('useClip',False) self.fontHacks = kwds.pop('fontHacks',{}) self.extraXmlDecl = kwds.pop('extraXmlDecl','') scaleGroupId = kwds.pop('scaleGroupId','') self._fillMode = FILL_EVEN_ODD self.width, self.height = self.size = size # self.height = size[1] self.code = [] self.style = {} self.path = '' self._strokeColor = self._fillColor = self._lineWidth = \ self._font = self._fontSize = self._lineCap = \ self._lineJoin = None if kwds.pop('use_fp_str',False): self.fp_str = fp_str else: self.fp_str = lambda *args: (' '.join(len(args)*['%f'])) % args self.cfp_str = lambda *args: self.fp_str(*args).replace(' ',',') implementation = getDOMImplementation('minidom') #Based on official example here http://www.w3.org/TR/SVG10/linking.html want: # #Thus, #doctype = implementation.createDocumentType("svg", # "-//W3C//DTD SVG 20010904//EN", # "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd") # #However, putting that example through http://validator.w3.org/ recommends: # #So we'll use that for our SVG 1.0 output. doctype = implementation.createDocumentType("svg", "-//W3C//DTD SVG 1.0//EN", "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd") self.doc = implementation.createDocument(None,"svg",doctype) self.svg = self.doc.documentElement svgAttrs = dict( width = str(size[0]), height=str(self.height), preserveAspectRatio="xMinYMin meet", viewBox="0 0 %d %d" % (self.width, self.height), #baseProfile = "full", #disliked in V 1.0 #these suggested by Tim Roberts, as updated by peter@maubp.freeserve.co.uk xmlns="http://www.w3.org/2000/svg", version="1.0", ) svgAttrs['fill-rule'] = _fillRuleMap[self._fillMode] svgAttrs["xmlns:xlink"] = "http://www.w3.org/1999/xlink" svgAttrs.update(kwds.pop('svgAttrs',{})) for k,v in svgAttrs.items(): self.svg.setAttribute(k,v) title = self.doc.createElement('title') text = self.doc.createTextNode('...') title.appendChild(text) self.svg.appendChild(title) desc = self.doc.createElement('desc') text = self.doc.createTextNode('...') desc.appendChild(text) self.svg.appendChild(desc) self.setFont(STATE_DEFAULTS['fontName'], STATE_DEFAULTS['fontSize']) self.setStrokeColor(STATE_DEFAULTS['strokeColor']) self.setLineCap(2) self.setLineJoin(0) self.setLineWidth(1) if not useClip: # Add a rectangular clipping path identical to view area. clipPath = transformNode(self.doc, "clipPath", id="clip") clipRect = transformNode(self.doc, "rect", x=0, y=0, width=self.width, height=self.height) clipPath.appendChild(clipRect) self.svg.appendChild(clipPath) gtkw = dict(style="clip-path: url(#clip)") else: gtkw = dict(clip="0 0 %d %d" % (self.width,self.height)) self.groupTree = transformNode(self.doc, "g", id="group", transform="scale(1,-1) translate(0,-%d)" % self.height, **gtkw ) if scaleGroupId: self.scaleTree = transformNode(self.doc, "g", id=scaleGroupId, transform="scale(1,1)") self.scaleTree.appendChild(self.groupTree) self.svg.appendChild(self.scaleTree) else: self.svg.appendChild(self.groupTree) self.currGroup = self.groupTree def save(self, fn=None): writer = EncodedWriter(self.encoding,bom=self.bom) self.doc.writexml(writer,addindent="\t",newl="\n",encoding=self.encoding) if hasattr(fn,'write'): f = fn else: if isPy3: f = open(fn, 'w',encoding=self.encoding) else: f = open(fn, 'w') svg = writer.getvalue() exd = self.extraXmlDecl if exd: svg = svg.replace('?>','?>'+exd) f.write(svg if isPy3 else svg.encode(self.encoding)) if f is not fn: f.close() ### helpers ### def NOTUSED_stringWidth(self, s, font=None, fontSize=None): """Return the logical width of the string if it were drawn in the current font (defaults to self.font). """ font = font or self._font fontSize = fontSize or self._fontSize return stringWidth(s, font, fontSize) def _formatStyle(self, include=[], exclude='',**kwds): style = self.style.copy() style.update(kwds) keys = list(style.keys()) if include: keys = [k for k in keys if k in include] if exclude: exclude = exclude.split() items = [k+': '+str(style[k]) for k in keys if k not in exclude] else: items = [k+': '+str(style[k]) for k in keys] return '; '.join(items) + ';' def _escape(self, s): '''I don't think this was ever needed; seems to have been copied from renderPS''' return s def _genArcCode(self, x1, y1, x2, y2, startAng, extent): """Calculate the path for an arc inscribed in rectangle defined by (x1,y1),(x2,y2).""" return #calculate semi-minor and semi-major axes of ellipse xScale = abs((x2-x1)/2.0) yScale = abs((y2-y1)/2.0) #calculate centre of ellipse x, y = (x1+x2)/2.0, (y1+y2)/2.0 codeline = 'matrix currentmatrix %s %s translate %s %s scale 0 0 1 %s %s %s setmatrix' if extent >= 0: arc='arc' else: arc='arcn' data = (x,y, xScale, yScale, startAng, startAng+extent, arc) return codeline % data def _fillAndStroke(self, code, clip=0, link_info=None,styles=AREA_STYLES,fillMode=None): xtra = {} if fillMode: xtra['fill-rule'] = _fillRuleName(fillMode) path = transformNode(self.doc, "path", d=self.path, style=self._formatStyle(styles), ) if link_info : path = self._add_link(path, link_info) self.currGroup.appendChild(path) self.path = '' ### styles ### def setLineCap(self, v): vals = {0:'butt', 1:'round', 2:'square'} if self._lineCap != v: self._lineCap = v self.style['stroke-linecap'] = vals[v] def setLineJoin(self, v): vals = {0:'miter', 1:'round', 2:'bevel'} if self._lineJoin != v: self._lineJoin = v self.style['stroke-linecap'] = vals[v] def setDash(self, array=[], phase=0): """Two notations. Pass two numbers, or an array and phase.""" if isinstance(array,(float,int)): self.style['stroke-dasharray'] = ', '.join(map(str, ([array, phase]))) elif isinstance(array,(tuple,list)) and len(array) > 0: assert phase >= 0, "phase is a length in user space" self.style['stroke-dasharray'] = ', '.join(map(str, (list(array)+[phase]))) def setStrokeColor(self, color): self._strokeColor = color if color == None: self.style['stroke'] = 'none' else: r, g, b = color.red, color.green, color.blue self.style['stroke'] = 'rgb(%d%%,%d%%,%d%%)' % (r*100, g*100, b*100) alpha = color.normalizedAlpha if alpha!=1: self.style['stroke-opacity'] = '%s' % alpha elif 'stroke-opacity' in self.style: del self.style['stroke-opacity'] def setFillColor(self, color): self._fillColor = color if color == None: self.style['fill'] = 'none' else: r, g, b = color.red, color.green, color.blue self.style['fill'] = 'rgb(%d%%,%d%%,%d%%)' % (r*100, g*100, b*100) alpha = color.normalizedAlpha if alpha!=1: self.style['fill-opacity'] = '%s' % alpha elif 'fill-opacity' in self.style: del self.style['fill-opacity'] def setFillMode(self, v): self._fillMode = v self.style['fill-rule'] = _fillRuleMap[v] def setLineWidth(self, width): if width != self._lineWidth: self._lineWidth = width self.style['stroke-width'] = width def setFont(self, font, fontSize): if self._font != font or self._fontSize != fontSize: self._font = font self._fontSize = fontSize style = self.style for k in TEXT_STYLES: if k in style: del style[k] svgAttrs = self.fontHacks[font] if font in self.fontHacks else {} if isinstance(font,RLString): svgAttrs.update(iter(font.svgAttrs.items())) if svgAttrs: for k,v in svgAttrs.items(): a = 'font-'+k if a in TEXT_STYLES: style[a] = v if 'font-family' not in style: style['font-family'] = font style['font-size'] = '%spx' % fontSize def _add_link(self, dom_object, link_info) : assert isinstance(link_info, dict) link = transformNode(self.doc, "a", **link_info) link.appendChild(dom_object) return link ### shapes ### def rect(self, x1,y1, x2,y2, rx=8, ry=8, link_info=None, **_svgAttrs): "Draw a rectangle between x1,y1 and x2,y2." if self.verbose: print("+++ SVGCanvas.rect") x = min(x1,x2) y = min(y1,y2) kwds = {} rect = transformNode(self.doc, "rect", x=x, y=y, width=max(x1,x2)-x, height=max(y1,y2)-y, style=self._formatStyle(AREA_STYLES),**_svgAttrs) if link_info : rect = self._add_link(rect, link_info) self.currGroup.appendChild(rect) def roundRect(self, x1,y1, x2,y2, rx=8, ry=8, link_info=None, **_svgAttrs): """Draw a rounded rectangle between x1,y1 and x2,y2. Corners inset as ellipses with x-radius rx and y-radius ry. These should have x10, and ry>0. """ rect = transformNode(self.doc, "rect", x=x1, y=y1, width=x2-x1, height=y2-y1, rx=rx, ry=ry, style=self._formatStyle(AREA_STYLES), **_svgAttrs) if link_info: rect = self._add_link(rect, link_info) self.currGroup.appendChild(rect) def drawString(self, s, x, y, angle=0, link_info=None,**_svgAttrs): s = asNative(s) if self.verbose: print("+++ SVGCanvas.drawString") if self._fillColor != None: s = self._escape(s) st = self._formatStyle(TEXT_STYLES) if angle != 0: st = st + " rotate(%s);" % self.fp_str(angle, x, y) st = st + " fill: %s;" % self.style['fill'] text = transformNode(self.doc, "text", x=x, y=y, style=st, transform="translate(0,%d) scale(1,-1)" % (2*y), **_svgAttrs ) content = self.doc.createTextNode(s) text.appendChild(content) if link_info: text = self._add_link(text, link_info) self.currGroup.appendChild(text) def drawCentredString(self, s, x, y, angle=0, text_anchor='middle', link_info=None): if self.verbose: print("+++ SVGCanvas.drawCentredString") if self._fillColor != None: if not text_anchor in ['start', 'inherited']: textLen = stringWidth(s,self._font,self._fontSize) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen/2. elif text_anchor=='numeric': x -= numericXShift(text_anchor,s,textLen,self._font,self._fontSize) else: raise ValueError('bad value for text_anchor ' + str(text_anchor)) self.drawString(s,x,y,angle=angle, link_info=link_info) def drawRightString(self, text, x, y, angle=0, link_info=None): self.drawCentredString(text,x,y,angle=angle,text_anchor='end', link_info=link_info) def comment(self, data): "Add a comment." comment = self.doc.createComment(data) # self.currGroup.appendChild(comment) def drawImage(self, image, x, y, width, height, embed=True): buf = getBytesIO() image.save(buf,'png') buf = asNative(base64.b64encode(buf.getvalue())) self.currGroup.appendChild( transformNode(self.doc,'image', x=x,y=y,width=width,height=height, href="data:image/png;base64,"+buf, ) ) def line(self, x1, y1, x2, y2): if self._strokeColor != None: if 0: # something is wrong with line in my SVG viewer... line = transformNode(self.doc, "line", x=x1, y=y1, x2=x2, y2=y2, style=self._formatStyle(LINE_STYLES)) self.currGroup.appendChild(line) path = transformNode(self.doc, "path", d="M %s L %s Z" % (self.cfp_str(x1,y1),self.cfp_str(x2,y2)), style=self._formatStyle(LINE_STYLES)) self.currGroup.appendChild(path) def ellipse(self, x1, y1, x2, y2, link_info=None): """Draw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2. These should have x1=180, 0, cfp_str(mx, my))) else: s("M %s A %s %d %d %d %s Z" % \ (cfp_str(mx, my), cfp_str(rx, ry), 0, extent>=180, 0, cfp_str(mx, my))) if fromcenter: s("L %s Z" % cfp_str(cx, cy)) path = transformNode(self.doc, "path", d=' '.join(s.__self__), style=self._formatStyle()) self.currGroup.appendChild(path) def polygon(self, points, closed=0, link_info=None): assert len(points) >= 2, 'Polygon must have 2 or more points' if self._strokeColor!=None or self._fillColor!=None: pts = ', '.join([fp_str(*p) for p in points]) polyline = transformNode(self.doc, "polygon", points=pts, style=self._formatStyle(AREA_STYLES)) if link_info: polyline = self._add_link(polyline, link_info) self.currGroup.appendChild(polyline) # self._fillAndStroke(polyCode) def lines(self, lineList, color=None, width=None): # print "### lineList", lineList return if self._strokeColor != None: codeline = '%s m %s l stroke' for line in lineList: self.code.append(codeline % (fp_str(line[0]), fp_str(line[1]))) def polyLine(self, points): assert len(points) >= 1, 'Polyline must have 1 or more points' if self._strokeColor != None: pts = ', '.join([fp_str(*p) for p in points]) polyline = transformNode(self.doc, "polyline", points=pts, style=self._formatStyle(AREA_STYLES,fill=None)) self.currGroup.appendChild(polyline) ### groups ### def startGroup(self,attrDict=dict(transform="")): if self.verbose: print("+++ begin SVGCanvas.startGroup") currGroup = self.currGroup group = transformNode(self.doc, "g", **attrDict) currGroup.appendChild(group) self.currGroup = group if self.verbose: print("+++ end SVGCanvas.startGroup") return currGroup def endGroup(self,currGroup): if self.verbose: print("+++ begin SVGCanvas.endGroup") self.currGroup = currGroup if self.verbose: print("+++ end SVGCanvas.endGroup") def transform(self, a, b, c, d, e, f): if self.verbose: print("!!! begin SVGCanvas.transform", a, b, c, d, e, f) tr = self.currGroup.getAttribute("transform") if (a, b, c, d, e, f) != (1, 0, 0, 1, 0, 0): t = 'matrix(%s)' % self.cfp_str(a,b,c,d,e,f) self.currGroup.setAttribute("transform", "%s %s" % (tr, t)) def translate(self, x, y): if (x,y) != (0,0): self.currGroup.setAttribute("transform", "%s %s" % (self.currGroup.getAttribute("transform"), 'translate(%s)' % self.cfp_str(x,y))) def scale(self, sx, sy): if (sx,sy) != (1,1): self.currGroup.setAttribute("transform", "%s %s" % (self.groups[-1].getAttribute("transform"), 'scale(%s)' % self.cfp_str(sx, sy))) ### paths ### def moveTo(self, x, y): self.path = self.path + 'M %s ' % self.fp_str(x, y) def lineTo(self, x, y): self.path = self.path + 'L %s ' % self.fp_str(x, y) def curveTo(self, x1, y1, x2, y2, x3, y3): self.path = self.path + 'C %s ' % self.fp_str(x1, y1, x2, y2, x3, y3) def closePath(self): self.path = self.path + 'Z ' def saveState(self): pass def restoreState(self): pass class _SVGRenderer(Renderer): """This draws onto an SVG document. """ def __init__(self): self.verbose = 0 def drawNode(self, node): """This is the recursive method called for each node in the tree. """ if self.verbose: print("### begin _SVGRenderer.drawNode(%r)" % node) self._canvas.comment('begin node %r'%node) style = self._canvas.style.copy() if not (isinstance(node, Path) and node.isClipPath): pass # self._canvas.saveState() #apply state changes deltas = getStateDelta(node) self._tracker.push(deltas) self.applyStateChanges(deltas, {}) #draw the object, or recurse self.drawNodeDispatcher(node) rDeltas = self._tracker.pop() if not (isinstance(node, Path) and node.isClipPath): pass #self._canvas.restoreState() self._canvas.comment('end node %r'%node) #restore things we might have lost (without actually doing anything). for k, v in rDeltas.items(): if k in self._restores: setattr(self._canvas,self._restores[k],v) self._canvas.style = style if self.verbose: print("### end _SVGRenderer.drawNode(%r)" % node) _restores = {'strokeColor':'_strokeColor','strokeWidth': '_lineWidth','strokeLineCap':'_lineCap', 'strokeLineJoin':'_lineJoin','fillColor':'_fillColor','fontName':'_font', 'fontSize':'_fontSize'} def _get_link_info_dict(self, obj): #We do not want None or False as the link, even if it is the #attribute's value - use the empty string instead. url = getattr(obj, "hrefURL", "") or "" title = getattr(obj, "hrefTitle", "") or "" if url : #Is it valid to have a link with no href? The XML requires #the xlink:href to be present, but you might just want a #tool tip shown (via the xlink:title attribute). Note that #giving an href of "" is equivalent to "the current page" #(a relative link saying go nowhere). return {"xlink:href":url, "xlink:title":title, "target":"_top"} #Currently of all the mainstream browsers I have tested, only Safari/webkit #will show SVG images embedded in HTML using a simple tag. #However, the links don't work (Safari 3.2.1 on the Mac). # #Therefore I use the following, which also works for Firefox, Opera, and #IE 6.0 with Adobe SVG Viewer 6 beta: # # #Once displayed, Firefox and Safari treat the SVG like a frame, and #by default clicking on links acts "in frame" and replaces the image. #Opera does what I expect, and replaces the whole page with the link. # #Therefore I use target="_top" to force the links to replace the whole page. #This now works as expected on Safari 3.2.1, Firefox 3.0.6, Opera 9.20. #Perhaps the target attribute should be an option, perhaps defaulting to #"_top" as used here? else : return None def drawGroup(self, group): if self.verbose: print("### begin _SVGRenderer.drawGroup") currGroup = self._canvas.startGroup() a, b, c, d, e, f = self._tracker.getState()['transform'] for childNode in group.getContents(): if isinstance(childNode, UserNode): node2 = childNode.provideNode() else: node2 = childNode self.drawNode(node2) self._canvas.transform(a, b, c, d, e, f) self._canvas.endGroup(currGroup) if self.verbose: print("### end _SVGRenderer.drawGroup") def drawRect(self, rect): link_info = self._get_link_info_dict(rect) svgAttrs = getattr(rect,'_svgAttrs',{}) if rect.rx == rect.ry == 0: #plain old rectangle self._canvas.rect( rect.x, rect.y, rect.x+rect.width, rect.y+rect.height, link_info=link_info, **svgAttrs) else: #cheat and assume ry = rx; better to generalize #pdfgen roundRect function. TODO self._canvas.roundRect( rect.x, rect.y, rect.x+rect.width, rect.y+rect.height, rect.rx, rect.ry, link_info=link_info, **svgAttrs) def drawString(self, stringObj): if self._canvas._fillColor: S = self._tracker.getState() text_anchor, x, y, text = S['textAnchor'], stringObj.x, stringObj.y, stringObj.text if not text_anchor in ('start', 'inherited'): font, fontSize = S['fontName'], S['fontSize'] textLen = stringWidth(text, font,fontSize) if text_anchor=='end': x -= textLen elif text_anchor=='middle': x -= textLen/2 elif text_anchor=='numeric': x -= numericXShift(text_anchor,text,textLen,font,fontSize) else: raise ValueError('bad value for text_anchor ' + str(text_anchor)) self._canvas.drawString(text,x,y,link_info=self._get_link_info_dict(stringObj),**getattr(stringObj,'_svgAttrs',{})) def drawLine(self, line): if self._canvas._strokeColor: self._canvas.line(line.x1, line.y1, line.x2, line.y2) def drawCircle(self, circle): self._canvas.circle( circle.cx, circle.cy, circle.r, link_info=self._get_link_info_dict(circle)) def drawWedge(self, wedge): yradius, radius1, yradius1 = wedge._xtraRadii() if (radius1==0 or radius1 is None) and (yradius1==0 or yradius1 is None) and not wedge.annular: centerx, centery, radius, startangledegrees, endangledegrees = \ wedge.centerx, wedge.centery, wedge.radius, wedge.startangledegrees, wedge.endangledegrees yradius = wedge.yradius or wedge.radius (x1, y1) = (centerx-radius, centery-yradius) (x2, y2) = (centerx+radius, centery+yradius) extent = endangledegrees - startangledegrees self._canvas.drawArc(x1, y1, x2, y2, startangledegrees, extent, fromcenter=1) else: P = wedge.asPolygon() if isinstance(P,Path): self.drawPath(P) else: self.drawPolygon(P) def drawPolyLine(self, p): if self._canvas._strokeColor: self._canvas.polyLine(_pointsFromList(p.points)) def drawEllipse(self, ellipse): #need to convert to pdfgen's bounding box representation x1 = ellipse.cx - ellipse.rx x2 = ellipse.cx + ellipse.rx y1 = ellipse.cy - ellipse.ry y2 = ellipse.cy + ellipse.ry self._canvas.ellipse(x1,y1,x2,y2, link_info=self._get_link_info_dict(ellipse)) def drawPolygon(self, p): self._canvas.polygon(_pointsFromList(p.points), closed=1, link_info=self._get_link_info_dict(p)) def drawPath(self, path, fillMode=None): # print "### drawPath", path.points from reportlab.graphics.shapes import _renderPath c = self._canvas drawFuncs = (c.moveTo, c.lineTo, c.curveTo, c.closePath) if fillMode is None: fillMode = getattr(path,'fillMode',None) link_info = self._get_link_info_dict(path) autoclose = getattr(path,'autoclose','') def rP(**kwds): return _renderPath(path, drawFuncs, **kwds) if autoclose=='svg': rP() c._fillAndStroke([], clip=path.isClipPath, link_info=link_info, fillMode=fillMode) elif autoclose=='pdf': rP(forceClose=True) c._fillAndStroke([], clip=path.isClipPath, link_info=link_info, fillMode=fillMode) else: isClosed = rP() if not isClosed: ofc = c._fillColor c.setFillColor(None) try: link_info = None c._fillAndStroke([], clip=path.isClipPath, link_info=link_info, fillMode=fillMode) finally: c.setFillColor(ofc) else: c._fillAndStroke([], clip=path.isClipPath, link_info=link_info, fillMode=fillMode) def drawImage(self, image): path = image.path if isinstance(path,str): if not (path and os.path.isfile(path)): return im = _getImage().open(path) elif hasattr(path,'convert'): im = path else: return srcW, srcH = im.size dstW, dstH = image.width, image.height if dstW is None: dstW = srcW if dstH is None: dstH = srcH self._canvas.drawImage(im, image.x, image.y, dstW, dstH, embed=True) def applyStateChanges(self, delta, newState): """This takes a set of states, and outputs the operators needed to set those properties""" for key, value in delta.items(): if key == 'transform': pass #self._canvas.transform(value[0], value[1], value[2], value[3], value[4], value[5]) elif key == 'strokeColor': self._canvas.setStrokeColor(value) elif key == 'strokeWidth': self._canvas.setLineWidth(value) elif key == 'strokeLineCap': #0,1,2 self._canvas.setLineCap(value) elif key == 'strokeLineJoin': self._canvas.setLineJoin(value) elif key == 'strokeDashArray': if value: if isinstance(value,(list,tuple)) and len(value)==2 and isinstance(value[1],(tuple,list)): phase = value[0] value = value[1] else: phase = 0 self._canvas.setDash(value,phase) else: self._canvas.setDash() elif key == 'fillColor': self._canvas.setFillColor(value) elif key in ['fontSize', 'fontName']: fontname = delta.get('fontName', self._canvas._font) fontsize = delta.get('fontSize', self._canvas._fontSize) self._canvas.setFont(fontname, fontsize) elif key == 'fillMode': self._canvas.setFillMode(value) def test(outDir='out-svg'): # print all drawings and their doc strings from the test # file if not os.path.isdir(outDir): os.mkdir(outDir) #grab all drawings from the test module from reportlab.graphics import testshapes drawings = [] for funcname in dir(testshapes): if funcname[0:10] == 'getDrawing': func = getattr(testshapes,funcname) drawing = func() docstring = getattr(func,'__doc__','') drawings.append((drawing, docstring)) i = 0 for (d, docstring) in drawings: filename = os.path.join(outDir,'renderSVG_%d.svg' % i) drawToFile(d, filename) i += 1 from reportlab.graphics.testshapes import getDrawing01 d = getDrawing01() drawToFile(d, os.path.join(outDir,"test.svg")) from reportlab.lib.corp import RL_CorpLogo from reportlab.graphics.shapes import Drawing rl = RL_CorpLogo() d = Drawing(rl.width,rl.height) d.add(rl) drawToFile(d, os.path.join(outDir,"corplogo.svg")) if __name__=='__main__': test() reportlab-3.5.34/src/reportlab/license.txt0000664000175000017500000000325313544671343021355 0ustar rptlabrptlab00000000000000##################################################################################### # # Copyright (c) 2000-2018, ReportLab Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # * Neither the name of the company nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE OFFICERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ##################################################################################### reportlab-3.5.34/src/reportlab/pdfbase/0000775000175000017500000000000013607302651020564 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_winansi.py0000664000175000017500000000567313544671343025474 0ustar rptlabrptlab00000000000000WinAnsiEncoding = ( None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft', 'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash', 'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet', 'zcaron', 'Ydieresis', 'space', 'exclamdown', 'cent', 'sterling', 'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered', 'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute', 'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters', 'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis') reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_timesbolditalic.py0000664000175000017500000000712413544671343027722 0ustar rptlabrptlab00000000000000widths = {'A': 667, 'AE': 944, 'Aacute': 667, 'Acircumflex': 667, 'Adieresis': 667, 'Agrave': 667, 'Aring': 667, 'Atilde': 667, 'B': 667, 'C': 667, 'Ccedilla': 667, 'D': 722, 'E': 667, 'Eacute': 667, 'Ecircumflex': 667, 'Edieresis': 667, 'Egrave': 667, 'Eth': 722, 'Euro': 500, 'F': 667, 'G': 722, 'H': 778, 'I': 389, 'Iacute': 389, 'Icircumflex': 389, 'Idieresis': 389, 'Igrave': 389, 'J': 500, 'K': 667, 'L': 611, 'Lslash': 611, 'M': 889, 'N': 722, 'Ntilde': 722, 'O': 722, 'OE': 944, 'Oacute': 722, 'Ocircumflex': 722, 'Odieresis': 722, 'Ograve': 722, 'Oslash': 722, 'Otilde': 722, 'P': 611, 'Q': 722, 'R': 667, 'S': 556, 'Scaron': 556, 'T': 611, 'Thorn': 611, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 667, 'W': 889, 'X': 667, 'Y': 611, 'Yacute': 611, 'Ydieresis': 611, 'Z': 611, 'Zcaron': 611, 'a': 500, 'aacute': 500, 'acircumflex': 500, 'acute': 333, 'adieresis': 500, 'ae': 722, 'agrave': 500, 'ampersand': 778, 'aring': 500, 'asciicircum': 570, 'asciitilde': 570, 'asterisk': 500, 'at': 832, 'atilde': 500, 'b': 500, 'backslash': 278, 'bar': 220, 'braceleft': 348, 'braceright': 348, 'bracketleft': 333, 'bracketright': 333, 'breve': 333, 'brokenbar': 220, 'bullet': 350, 'c': 444, 'caron': 333, 'ccedilla': 444, 'cedilla': 333, 'cent': 500, 'circumflex': 333, 'colon': 333, 'comma': 250, 'copyright': 747, 'currency': 500, 'd': 500, 'dagger': 500, 'daggerdbl': 500, 'degree': 400, 'dieresis': 333, 'divide': 570, 'dollar': 500, 'dotaccent': 333, 'dotlessi': 278, 'e': 444, 'eacute': 444, 'ecircumflex': 444, 'edieresis': 444, 'egrave': 444, 'eight': 500, 'ellipsis': 1000, 'emdash': 1000, 'endash': 500, 'equal': 570, 'eth': 500, 'exclam': 389, 'exclamdown': 389, 'f': 333, 'fi': 556, 'five': 500, 'fl': 556, 'florin': 500, 'four': 500, 'fraction': 167, 'g': 500, 'germandbls': 500, 'grave': 333, 'greater': 570, 'guillemotleft': 500, 'guillemotright': 500, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 556, 'hungarumlaut': 333, 'hyphen': 333, 'i': 278, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 278, 'k': 500, 'l': 278, 'less': 570, 'logicalnot': 606, 'lslash': 278, 'm': 778, 'macron': 333, 'minus': 606, 'mu': 576, 'multiply': 570, 'n': 556, 'nine': 500, 'ntilde': 556, 'numbersign': 500, 'o': 500, 'oacute': 500, 'ocircumflex': 500, 'odieresis': 500, 'oe': 722, 'ogonek': 333, 'ograve': 500, 'one': 500, 'onehalf': 750, 'onequarter': 750, 'onesuperior': 300, 'ordfeminine': 266, 'ordmasculine': 300, 'oslash': 500, 'otilde': 500, 'p': 500, 'paragraph': 500, 'parenleft': 333, 'parenright': 333, 'percent': 833, 'period': 250, 'periodcentered': 250, 'perthousand': 1000, 'plus': 570, 'plusminus': 570, 'q': 500, 'question': 500, 'questiondown': 500, 'quotedbl': 555, 'quotedblbase': 500, 'quotedblleft': 500, 'quotedblright': 500, 'quoteleft': 333, 'quoteright': 333, 'quotesinglbase': 333, 'quotesingle': 278, 'r': 389, 'registered': 747, 'ring': 333, 's': 389, 'scaron': 389, 'section': 500, 'semicolon': 333, 'seven': 500, 'six': 500, 'slash': 278, 'space': 250, 'sterling': 500, 't': 278, 'thorn': 500, 'three': 500, 'threequarters': 750, 'threesuperior': 300, 'tilde': 333, 'trademark': 1000, 'two': 500, 'twosuperior': 300, 'u': 556, 'uacute': 556, 'ucircumflex': 556, 'udieresis': 556, 'ugrave': 556, 'underscore': 500, 'v': 444, 'w': 667, 'x': 500, 'y': 444, 'yacute': 444, 'ydieresis': 444, 'yen': 500, 'z': 389, 'zcaron': 389, 'zero': 500} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_macexpert.py0000664000175000017500000000576213544671343026013 0ustar rptlabrptlab00000000000000MacExpertEncoding = (None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', None, 'threequartersemdash', None, 'questionsmall', None, None, None, None, 'Ethsmall', None, None, 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', None, None, None, None, None, None, 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', None, 'parenrightinferior', 'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', None, None, 'asuperior', 'centsuperior', None, None, None, None, 'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall', 'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall', 'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall', 'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', None, 'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior', 'eightinferior', 'seveninferior', 'Scaronsmall', None, 'centinferior', 'twoinferior', None, 'Dieresissmall', None, 'Caronsmall', 'osuperior', 'fiveinferior', None, 'commainferior', 'periodinferior', 'Yacutesmall', None, 'dollarinferior', None, None, 'Thornsmall', None, 'nineinferior', 'zeroinferior', 'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall', 'oneinferior', 'Lslashsmall', None, None, None, None, None, None, 'Cedillasmall', None, None, None, None, None, 'OEsmall', 'figuredash', 'hyphensuperior', None, None, None, None, 'exclamdownsmall', None, 'Ydieresissmall', None, 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'ninesuperior', 'zerosuperior', None, 'esuperior', 'rsuperior', 'tsuperior', None, None, 'isuperior', 'ssuperior', 'dsuperior', None, None, None, None, None, 'lsuperior', 'Ogoneksmall', 'Brevesmall', 'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior', 'periodsuperior', 'Dotaccentsmall', 'Ringsmall', None, None, None, None) reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_symbol.py0000664000175000017500000000644713544671343026066 0ustar rptlabrptlab00000000000000widths = {'Alpha': 722, 'Beta': 667, 'Chi': 722, 'Delta': 612, 'Epsilon': 611, 'Eta': 722, 'Euro': 750, 'Gamma': 603, 'Ifraktur': 686, 'Iota': 333, 'Kappa': 722, 'Lambda': 686, 'Mu': 889, 'Nu': 722, 'Omega': 768, 'Omicron': 722, 'Phi': 763, 'Pi': 768, 'Psi': 795, 'Rfraktur': 795, 'Rho': 556, 'Sigma': 592, 'Tau': 611, 'Theta': 741, 'Upsilon': 690, 'Upsilon1': 620, 'Xi': 645, 'Zeta': 611, 'aleph': 823, 'alpha': 631, 'ampersand': 778, 'angle': 768, 'angleleft': 329, 'angleright': 329, 'apple': 790, 'approxequal': 549, 'arrowboth': 1042, 'arrowdblboth': 1042, 'arrowdbldown': 603, 'arrowdblleft': 987, 'arrowdblright': 987, 'arrowdblup': 603, 'arrowdown': 603, 'arrowhorizex': 1000, 'arrowleft': 987, 'arrowright': 987, 'arrowup': 603, 'arrowvertex': 603, 'asteriskmath': 500, 'bar': 200, 'beta': 549, 'braceex': 494, 'braceleft': 480, 'braceleftbt': 494, 'braceleftmid': 494, 'bracelefttp': 494, 'braceright': 480, 'bracerightbt': 494, 'bracerightmid': 494, 'bracerighttp': 494, 'bracketleft': 333, 'bracketleftbt': 384, 'bracketleftex': 384, 'bracketlefttp': 384, 'bracketright': 333, 'bracketrightbt': 384, 'bracketrightex': 384, 'bracketrighttp': 384, 'bullet': 460, 'carriagereturn': 658, 'chi': 549, 'circlemultiply': 768, 'circleplus': 768, 'club': 753, 'colon': 278, 'comma': 250, 'congruent': 549, 'copyrightsans': 790, 'copyrightserif': 790, 'degree': 400, 'delta': 494, 'diamond': 753, 'divide': 549, 'dotmath': 250, 'eight': 500, 'element': 713, 'ellipsis': 1000, 'emptyset': 823, 'epsilon': 439, 'equal': 549, 'equivalence': 549, 'eta': 603, 'exclam': 333, 'existential': 549, 'five': 500, 'florin': 500, 'four': 500, 'fraction': 167, 'gamma': 411, 'gradient': 713, 'greater': 549, 'greaterequal': 549, 'heart': 753, 'infinity': 713, 'integral': 274, 'integralbt': 686, 'integralex': 686, 'integraltp': 686, 'intersection': 768, 'iota': 329, 'kappa': 549, 'lambda': 549, 'less': 549, 'lessequal': 549, 'logicaland': 603, 'logicalnot': 713, 'logicalor': 603, 'lozenge': 494, 'minus': 549, 'minute': 247, 'mu': 576, 'multiply': 549, 'nine': 500, 'notelement': 713, 'notequal': 549, 'notsubset': 713, 'nu': 521, 'numbersign': 500, 'omega': 686, 'omega1': 713, 'omicron': 549, 'one': 500, 'parenleft': 333, 'parenleftbt': 384, 'parenleftex': 384, 'parenlefttp': 384, 'parenright': 333, 'parenrightbt': 384, 'parenrightex': 384, 'parenrighttp': 384, 'partialdiff': 494, 'percent': 833, 'period': 250, 'perpendicular': 658, 'phi': 521, 'phi1': 603, 'pi': 549, 'plus': 549, 'plusminus': 549, 'product': 823, 'propersubset': 713, 'propersuperset': 713, 'proportional': 713, 'psi': 686, 'question': 444, 'radical': 549, 'radicalex': 500, 'reflexsubset': 713, 'reflexsuperset': 713, 'registersans': 790, 'registerserif': 790, 'rho': 549, 'second': 411, 'semicolon': 278, 'seven': 500, 'sigma': 603, 'sigma1': 439, 'similar': 549, 'six': 500, 'slash': 278, 'space': 250, 'spade': 753, 'suchthat': 439, 'summation': 713, 'tau': 439, 'therefore': 863, 'theta': 521, 'theta1': 631, 'three': 500, 'trademarksans': 786, 'trademarkserif': 890, 'two': 500, 'underscore': 500, 'union': 768, 'universal': 713, 'upsilon': 576, 'weierstrass': 987, 'xi': 493, 'zero': 500, 'zeta': 494} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_helveticaboldoblique.py0000664000175000017500000000712613544671343030742 0ustar rptlabrptlab00000000000000widths = {'A': 722, 'AE': 1000, 'Aacute': 722, 'Acircumflex': 722, 'Adieresis': 722, 'Agrave': 722, 'Aring': 722, 'Atilde': 722, 'B': 722, 'C': 722, 'Ccedilla': 722, 'D': 722, 'E': 667, 'Eacute': 667, 'Ecircumflex': 667, 'Edieresis': 667, 'Egrave': 667, 'Eth': 722, 'Euro': 556, 'F': 611, 'G': 778, 'H': 722, 'I': 278, 'Iacute': 278, 'Icircumflex': 278, 'Idieresis': 278, 'Igrave': 278, 'J': 556, 'K': 722, 'L': 611, 'Lslash': 611, 'M': 833, 'N': 722, 'Ntilde': 722, 'O': 778, 'OE': 1000, 'Oacute': 778, 'Ocircumflex': 778, 'Odieresis': 778, 'Ograve': 778, 'Oslash': 778, 'Otilde': 778, 'P': 667, 'Q': 778, 'R': 722, 'S': 667, 'Scaron': 667, 'T': 611, 'Thorn': 667, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 667, 'W': 944, 'X': 667, 'Y': 667, 'Yacute': 667, 'Ydieresis': 667, 'Z': 611, 'Zcaron': 611, 'a': 556, 'aacute': 556, 'acircumflex': 556, 'acute': 333, 'adieresis': 556, 'ae': 889, 'agrave': 556, 'ampersand': 722, 'aring': 556, 'asciicircum': 584, 'asciitilde': 584, 'asterisk': 389, 'at': 975, 'atilde': 556, 'b': 611, 'backslash': 278, 'bar': 280, 'braceleft': 389, 'braceright': 389, 'bracketleft': 333, 'bracketright': 333, 'breve': 333, 'brokenbar': 280, 'bullet': 350, 'c': 556, 'caron': 333, 'ccedilla': 556, 'cedilla': 333, 'cent': 556, 'circumflex': 333, 'colon': 333, 'comma': 278, 'copyright': 737, 'currency': 556, 'd': 611, 'dagger': 556, 'daggerdbl': 556, 'degree': 400, 'dieresis': 333, 'divide': 584, 'dollar': 556, 'dotaccent': 333, 'dotlessi': 278, 'e': 556, 'eacute': 556, 'ecircumflex': 556, 'edieresis': 556, 'egrave': 556, 'eight': 556, 'ellipsis': 1000, 'emdash': 1000, 'endash': 556, 'equal': 584, 'eth': 611, 'exclam': 333, 'exclamdown': 333, 'f': 333, 'fi': 611, 'five': 556, 'fl': 611, 'florin': 556, 'four': 556, 'fraction': 167, 'g': 611, 'germandbls': 611, 'grave': 333, 'greater': 584, 'guillemotleft': 556, 'guillemotright': 556, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 611, 'hungarumlaut': 333, 'hyphen': 333, 'i': 278, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 278, 'k': 556, 'l': 278, 'less': 584, 'logicalnot': 584, 'lslash': 278, 'm': 889, 'macron': 333, 'minus': 584, 'mu': 611, 'multiply': 584, 'n': 611, 'nine': 556, 'ntilde': 611, 'numbersign': 556, 'o': 611, 'oacute': 611, 'ocircumflex': 611, 'odieresis': 611, 'oe': 944, 'ogonek': 333, 'ograve': 611, 'one': 556, 'onehalf': 834, 'onequarter': 834, 'onesuperior': 333, 'ordfeminine': 370, 'ordmasculine': 365, 'oslash': 611, 'otilde': 611, 'p': 611, 'paragraph': 556, 'parenleft': 333, 'parenright': 333, 'percent': 889, 'period': 278, 'periodcentered': 278, 'perthousand': 1000, 'plus': 584, 'plusminus': 584, 'q': 611, 'question': 611, 'questiondown': 611, 'quotedbl': 474, 'quotedblbase': 500, 'quotedblleft': 500, 'quotedblright': 500, 'quoteleft': 278, 'quoteright': 278, 'quotesinglbase': 278, 'quotesingle': 238, 'r': 389, 'registered': 737, 'ring': 333, 's': 556, 'scaron': 556, 'section': 556, 'semicolon': 333, 'seven': 556, 'six': 556, 'slash': 278, 'space': 278, 'sterling': 556, 't': 333, 'thorn': 611, 'three': 556, 'threequarters': 834, 'threesuperior': 333, 'tilde': 333, 'trademark': 1000, 'two': 556, 'twosuperior': 333, 'u': 611, 'uacute': 611, 'ucircumflex': 611, 'udieresis': 611, 'ugrave': 611, 'underscore': 556, 'v': 556, 'w': 778, 'x': 556, 'y': 556, 'yacute': 556, 'ydieresis': 556, 'yen': 556, 'z': 500, 'zcaron': 500, 'zero': 556} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_helveticaoblique.py0000664000175000017500000000712713544671343030102 0ustar rptlabrptlab00000000000000widths = {'A': 667, 'AE': 1000, 'Aacute': 667, 'Acircumflex': 667, 'Adieresis': 667, 'Agrave': 667, 'Aring': 667, 'Atilde': 667, 'B': 667, 'C': 722, 'Ccedilla': 722, 'D': 722, 'E': 667, 'Eacute': 667, 'Ecircumflex': 667, 'Edieresis': 667, 'Egrave': 667, 'Eth': 722, 'Euro': 556, 'F': 611, 'G': 778, 'H': 722, 'I': 278, 'Iacute': 278, 'Icircumflex': 278, 'Idieresis': 278, 'Igrave': 278, 'J': 500, 'K': 667, 'L': 556, 'Lslash': 556, 'M': 833, 'N': 722, 'Ntilde': 722, 'O': 778, 'OE': 1000, 'Oacute': 778, 'Ocircumflex': 778, 'Odieresis': 778, 'Ograve': 778, 'Oslash': 778, 'Otilde': 778, 'P': 667, 'Q': 778, 'R': 722, 'S': 667, 'Scaron': 667, 'T': 611, 'Thorn': 667, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 667, 'W': 944, 'X': 667, 'Y': 667, 'Yacute': 667, 'Ydieresis': 667, 'Z': 611, 'Zcaron': 611, 'a': 556, 'aacute': 556, 'acircumflex': 556, 'acute': 333, 'adieresis': 556, 'ae': 889, 'agrave': 556, 'ampersand': 667, 'aring': 556, 'asciicircum': 469, 'asciitilde': 584, 'asterisk': 389, 'at': 1015, 'atilde': 556, 'b': 556, 'backslash': 278, 'bar': 260, 'braceleft': 334, 'braceright': 334, 'bracketleft': 278, 'bracketright': 278, 'breve': 333, 'brokenbar': 260, 'bullet': 350, 'c': 500, 'caron': 333, 'ccedilla': 500, 'cedilla': 333, 'cent': 556, 'circumflex': 333, 'colon': 278, 'comma': 278, 'copyright': 737, 'currency': 556, 'd': 556, 'dagger': 556, 'daggerdbl': 556, 'degree': 400, 'dieresis': 333, 'divide': 584, 'dollar': 556, 'dotaccent': 333, 'dotlessi': 278, 'e': 556, 'eacute': 556, 'ecircumflex': 556, 'edieresis': 556, 'egrave': 556, 'eight': 556, 'ellipsis': 1000, 'emdash': 1000, 'endash': 556, 'equal': 584, 'eth': 556, 'exclam': 278, 'exclamdown': 333, 'f': 278, 'fi': 500, 'five': 556, 'fl': 500, 'florin': 556, 'four': 556, 'fraction': 167, 'g': 556, 'germandbls': 611, 'grave': 333, 'greater': 584, 'guillemotleft': 556, 'guillemotright': 556, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 556, 'hungarumlaut': 333, 'hyphen': 333, 'i': 222, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 222, 'k': 500, 'l': 222, 'less': 584, 'logicalnot': 584, 'lslash': 222, 'm': 833, 'macron': 333, 'minus': 584, 'mu': 556, 'multiply': 584, 'n': 556, 'nine': 556, 'ntilde': 556, 'numbersign': 556, 'o': 556, 'oacute': 556, 'ocircumflex': 556, 'odieresis': 556, 'oe': 944, 'ogonek': 333, 'ograve': 556, 'one': 556, 'onehalf': 834, 'onequarter': 834, 'onesuperior': 333, 'ordfeminine': 370, 'ordmasculine': 365, 'oslash': 611, 'otilde': 556, 'p': 556, 'paragraph': 537, 'parenleft': 333, 'parenright': 333, 'percent': 889, 'period': 278, 'periodcentered': 278, 'perthousand': 1000, 'plus': 584, 'plusminus': 584, 'q': 556, 'question': 556, 'questiondown': 611, 'quotedbl': 355, 'quotedblbase': 333, 'quotedblleft': 333, 'quotedblright': 333, 'quoteleft': 222, 'quoteright': 222, 'quotesinglbase': 222, 'quotesingle': 191, 'r': 333, 'registered': 737, 'ring': 333, 's': 500, 'scaron': 500, 'section': 556, 'semicolon': 278, 'seven': 556, 'six': 556, 'slash': 278, 'space': 278, 'sterling': 556, 't': 278, 'thorn': 556, 'three': 556, 'threequarters': 834, 'threesuperior': 333, 'tilde': 333, 'trademark': 1000, 'two': 556, 'twosuperior': 333, 'u': 556, 'uacute': 556, 'ucircumflex': 556, 'udieresis': 556, 'ugrave': 556, 'underscore': 556, 'v': 500, 'w': 722, 'x': 500, 'y': 500, 'yacute': 500, 'ydieresis': 500, 'yen': 556, 'z': 500, 'zcaron': 500, 'zero': 556} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_helveticabold.py0000664000175000017500000000712613544671343027361 0ustar rptlabrptlab00000000000000widths = {'A': 722, 'AE': 1000, 'Aacute': 722, 'Acircumflex': 722, 'Adieresis': 722, 'Agrave': 722, 'Aring': 722, 'Atilde': 722, 'B': 722, 'C': 722, 'Ccedilla': 722, 'D': 722, 'E': 667, 'Eacute': 667, 'Ecircumflex': 667, 'Edieresis': 667, 'Egrave': 667, 'Eth': 722, 'Euro': 556, 'F': 611, 'G': 778, 'H': 722, 'I': 278, 'Iacute': 278, 'Icircumflex': 278, 'Idieresis': 278, 'Igrave': 278, 'J': 556, 'K': 722, 'L': 611, 'Lslash': 611, 'M': 833, 'N': 722, 'Ntilde': 722, 'O': 778, 'OE': 1000, 'Oacute': 778, 'Ocircumflex': 778, 'Odieresis': 778, 'Ograve': 778, 'Oslash': 778, 'Otilde': 778, 'P': 667, 'Q': 778, 'R': 722, 'S': 667, 'Scaron': 667, 'T': 611, 'Thorn': 667, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 667, 'W': 944, 'X': 667, 'Y': 667, 'Yacute': 667, 'Ydieresis': 667, 'Z': 611, 'Zcaron': 611, 'a': 556, 'aacute': 556, 'acircumflex': 556, 'acute': 333, 'adieresis': 556, 'ae': 889, 'agrave': 556, 'ampersand': 722, 'aring': 556, 'asciicircum': 584, 'asciitilde': 584, 'asterisk': 389, 'at': 975, 'atilde': 556, 'b': 611, 'backslash': 278, 'bar': 280, 'braceleft': 389, 'braceright': 389, 'bracketleft': 333, 'bracketright': 333, 'breve': 333, 'brokenbar': 280, 'bullet': 350, 'c': 556, 'caron': 333, 'ccedilla': 556, 'cedilla': 333, 'cent': 556, 'circumflex': 333, 'colon': 333, 'comma': 278, 'copyright': 737, 'currency': 556, 'd': 611, 'dagger': 556, 'daggerdbl': 556, 'degree': 400, 'dieresis': 333, 'divide': 584, 'dollar': 556, 'dotaccent': 333, 'dotlessi': 278, 'e': 556, 'eacute': 556, 'ecircumflex': 556, 'edieresis': 556, 'egrave': 556, 'eight': 556, 'ellipsis': 1000, 'emdash': 1000, 'endash': 556, 'equal': 584, 'eth': 611, 'exclam': 333, 'exclamdown': 333, 'f': 333, 'fi': 611, 'five': 556, 'fl': 611, 'florin': 556, 'four': 556, 'fraction': 167, 'g': 611, 'germandbls': 611, 'grave': 333, 'greater': 584, 'guillemotleft': 556, 'guillemotright': 556, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 611, 'hungarumlaut': 333, 'hyphen': 333, 'i': 278, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 278, 'k': 556, 'l': 278, 'less': 584, 'logicalnot': 584, 'lslash': 278, 'm': 889, 'macron': 333, 'minus': 584, 'mu': 611, 'multiply': 584, 'n': 611, 'nine': 556, 'ntilde': 611, 'numbersign': 556, 'o': 611, 'oacute': 611, 'ocircumflex': 611, 'odieresis': 611, 'oe': 944, 'ogonek': 333, 'ograve': 611, 'one': 556, 'onehalf': 834, 'onequarter': 834, 'onesuperior': 333, 'ordfeminine': 370, 'ordmasculine': 365, 'oslash': 611, 'otilde': 611, 'p': 611, 'paragraph': 556, 'parenleft': 333, 'parenright': 333, 'percent': 889, 'period': 278, 'periodcentered': 278, 'perthousand': 1000, 'plus': 584, 'plusminus': 584, 'q': 611, 'question': 611, 'questiondown': 611, 'quotedbl': 474, 'quotedblbase': 500, 'quotedblleft': 500, 'quotedblright': 500, 'quoteleft': 278, 'quoteright': 278, 'quotesinglbase': 278, 'quotesingle': 238, 'r': 389, 'registered': 737, 'ring': 333, 's': 556, 'scaron': 556, 'section': 556, 'semicolon': 333, 'seven': 556, 'six': 556, 'slash': 278, 'space': 278, 'sterling': 556, 't': 333, 'thorn': 611, 'three': 556, 'threequarters': 834, 'threesuperior': 333, 'tilde': 333, 'trademark': 1000, 'two': 556, 'twosuperior': 333, 'u': 611, 'uacute': 611, 'ucircumflex': 611, 'udieresis': 611, 'ugrave': 611, 'underscore': 556, 'v': 556, 'w': 778, 'x': 556, 'y': 556, 'yacute': 556, 'ydieresis': 556, 'yen': 556, 'z': 500, 'zcaron': 500, 'zero': 556} reportlab-3.5.34/src/reportlab/pdfbase/pdfpattern.py0000664000175000017500000000732713544671343023325 0ustar rptlabrptlab00000000000000__doc__="""helper for importing pdf structures into a ReportLab generated document """ from reportlab.pdfbase.pdfdoc import format, PDFObject, pdfdocEnc from reportlab import ascii from reportlab.lib.utils import strTypes def _patternSequenceCheck(pattern_sequence): allowedTypes = strTypes if isinstance(strTypes, tuple) else (strTypes,) allowedTypes = allowedTypes + (PDFObject,PDFPatternIf) for x in pattern_sequence: if not isinstance(x,allowedTypes): if len(x)!=1: raise ValueError("sequence elts must be strings/bytes/PDFPatternIfs or singletons containing strings: "+ascii(x)) if not isinstance(x[0],strTypes): raise ValueError("Singletons must contain strings/bytes or PDFObject instances only: "+ascii(x[0])) class PDFPattern(PDFObject): __RefOnly__ = 1 def __init__(self, pattern_sequence, **keywordargs): """ Description of a kind of PDF object using a pattern. Pattern sequence should contain strings, singletons of form [string] or PDFPatternIf objects. Strings are literal strings to be used in the object. Singletons are names of keyword arguments to include. PDFpatternIf objects allow some conditionality. Keyword arguments can be non-instances which are substituted directly in string conversion, or they can be object instances in which case they should be pdfdoc.* style objects with a x.format(doc) method. Keyword arguments may be set on initialization or subsequently using __setitem__, before format. "constant object" instances can also be inserted in the patterns. """ _patternSequenceCheck(pattern_sequence) self.pattern = pattern_sequence self.arguments = keywordargs def __setitem__(self, item, value): self.arguments[item] = value def __getitem__(self, item): return self.arguments[item] def eval(self,L): arguments = self.arguments document = self.__document for x in L: if isinstance(x,strTypes): yield pdfdocEnc(x) elif isinstance(x,PDFObject): yield x.format(document) elif isinstance(x,PDFPatternIf): result = list(self.eval(x.cond)) cond = result and result[0] for z in self.eval(x.thenPart if cond else x.elsePart): yield z else: name = x[0] value = arguments.get(name, None) if value is None: raise ValueError("%s value not defined" % ascii(name)) if isinstance(value,PDFObject): yield format(value,document) elif isinstance(value,strTypes): yield pdfdocEnc(value) else: yield pdfdocEnc(str(value)) def format(self, document): self.__document = document try: return b"".join(self.eval(self.pattern)) finally: del self.__document def clone(self): c = object.__new__(self.__class__) c.pattern = self.pattern c.arguments = self.arguments return c class PDFPatternIf(object): '''cond will be evaluated as [cond] in PDFpattern eval. It should evaluate to a list with value 0/1 etc etc. thenPart is a list to be evaluated if the cond evaulates true, elsePart is the false sequence. ''' def __init__(self,cond,thenPart=[],elsePart=[]): if not isinstance(cond,list): cond = [cond] for x in cond, thenPart, elsePart: _patternSequenceCheck(x) self.cond = cond self.thenPart = thenPart self.elsePart = elsePart reportlab-3.5.34/src/reportlab/pdfbase/acroform.py0000664000175000017500000013113513544671343022761 0ustar rptlabrptlab00000000000000__all__=('AcroForm',) from reportlab.pdfbase.pdfdoc import PDFObject, PDFArray, PDFDictionary, PDFString, pdfdocEnc, PDFName, PDFStream, PDFStreamFilterZCompress, escapePDF from reportlab.pdfgen.canvas import Canvas from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.lib.colors import Color, CMYKColor, Whiter, Blacker, opaqueColor from reportlab.lib.rl_accel import fp_str from reportlab.lib.utils import isStr, asNative from reportlab import xrange import weakref visibilities = dict( visible=0, hidden=0, visibleNonPrinting=0, hiddenPrintable=0, ) orientations = { 0: [], 90: [], 180: [], 270: [], } #adobe counts bits 1 - 32 fieldFlagValues = dict( readOnly = 1<<0, required = 1<<1, noExport = 1<<2, noToggleToOff = 1<<14, radio = 1<<15, pushButton = 1<<16, radiosInUnison = 1<<25, #text fields multiline = 1<<12, password = 1<<13, fileSelect = 1<<20, #1.4 doNotSpellCheck = 1<<22, #1.4 doNotScroll = 1<<23, #1.4 comb = 1<<24, #1.5 richText = 1<<25, #1.5 #choice fields combo = 1<<17, edit = 1<<18, sort = 1<<19, multiSelect = 1<<21, #1.4 commitOnSelChange = 1<<26, #1.5 ) annotationFlagValues = dict( invisible=1<<0, hidden=1<<1, nozoom=1<<3, norotate=1<<4, noview=1<<5, readonly=1<<6, locked=1<<7, #1.4 togglenoview=1<<8, #1.9 lockedcontents=1<<9, #1.7 ) annotationFlagValues['print']=1<<2 _bsStyles = dict( solid='S', dashed='D', bevelled='B', inset='I', underlined='U', ) def bsPDF(borderWidth,borderStyle,dashLen): d = dict(W=borderWidth,S=PDFName(_bsStyles[borderStyle])) if borderStyle=='dashed': if not dashLen: dashLen = [3] elif not isinstance(dashLen,(list,tuple)): dashLen = [dashLen] d['D'] = PDFArray(dashLen) return PDFDictionary(d) def escPDF(s): return escapePDF(s).replace('%','\\045') def makeFlags(s,d=annotationFlagValues): if not isinstance(s,int): v = s s = 0 for x in v.split(): s |= d[x] return s class PDFFromString(PDFObject): def __init__(self,s): if not isStr(s): raise ValueError('need a unicode/bytes argument not %r' % s) self._s = s def format(self,document): return pdfdocEnc(self._s) class RadioGroup(PDFObject): def __init__(self,name,tooltip='',fieldFlags='noToggleToOff required radio'): if not name: raise ValueError('RadioGroup created with no name') self.TU = tooltip self.Ff = makeFlags(fieldFlags,fieldFlagValues) self.kids = [] self.T = name self.V = None def format(self,doc): kids = self.kids d = len(kids) if d<2: raise ValueError('RadioGroup:%s has %d < 2 RadioBoxes' % (self.T,d)) d = dict( Ff=self.Ff, Kids = PDFArray([k for k in self.kids]), FT = PDFName('Btn'), T = PDFString(self.T), #DA = PDFString('0 g'), ) if self.V: d['V'] = PDFName(self.V) if self.TU: d['TU'] =PDFString(self.TU) r = PDFDictionary(d).format(doc) return r def _pdfObjToStr(obj): if isinstance(obj,PDFArray): return '[%s]' % ''.join((_pdfObjToStr(e) for e in obj.sequence)) if isinstance(obj,PDFFromString): return obj._s return str(obj) class AcroForm(PDFObject): formFontNames = { "Helvetica": "Helv", "Helvetica-Bold": "HeBo", 'Courier': "Cour", 'Courier-Bold': "CoBo", 'Courier-Oblique': "CoOb", 'Courier-BoldOblique': "CoBO", 'Helvetica-Oblique': "HeOb", 'Helvetica-BoldOblique': "HeBO", 'Times-Roman': "Time", 'Times-Bold': "TiBo", 'Times-Italic': "TiIt", 'Times-BoldItalic': "TiBI", } def __init__(self,canv,**kwds): self.referenceMap = {} self._canv = weakref.ref(canv) self.fonts = {} self.fields = [] self._radios = {} self._refMap = {} self._pdfdocenc = {} self.sigFlags = None @property def canv(self): _canv = self._canv() if _canv is None: raise ValueError('%s.canv is no longer available' % self.__class__.__name__) return _canv def fontRef(self,f): return '/Font << /%s %s >>' % (f,self.fonts[f]) def format(self,doc): d = dict( Fields = PDFArray([self.getRef(f) for f in self.fields]), ) if self.sigFlags: d['SigFlags'] = self.sigFlags if self.fonts: FK = list(sorted(self.fonts.keys())) F = [self.fontRef(f) for f in FK] d['DA'] = PDFString('/%s 0 Tf 0 g' % FK[0]) d['DR'] = PDFFromString('<< /Encoding\n<<\n/RLAFencoding\n%s\n>>\n%s\n>>' % (self.encRefStr,'\n'.join(F))) r = PDFDictionary(d).format(doc) return r def colorTuple(self,c): # ISO-32000-1, Table 189: An array of numbers that shall be in ther # range 0.0 to 1.0 specifying the colour [..]. The number of array # elements determines the colour space in which the colour shall # be defined: # 0 No colour; transparent 1 DeviceGray 3 DeviceRGB 4 DeviceCMYK if c is None or c.alpha == 0: return () return c.cmyk() if isinstance(c,CMYKColor) else c.rgb() def streamFillColor(self,c): t = self.colorTuple(c) return fp_str(*t)+(' k' if len(t)==4 else ' rg') def streamStrokeColor(self,c): t = self.colorTuple(c) return fp_str(*t)+(' K' if len(t)==4 else ' RG') def checkboxAP(self, key, #N/D/R value, #Yes/Off buttonStyle='circle', shape='square', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', size=20, dashLen=3, ): stream = [].append ds = size if shape=='square': stream('q') streamFill = self.streamFillColor(fillColor) stream('1 g 1 G %(streamFill)s 0 0 %(size)s %(size)s re f') if borderWidth!=None: streamStroke = self.streamStrokeColor(borderColor) hbw = borderWidth*0.5 smbw = size - borderWidth ds = smbw if borderStyle=='underlined': stream('%(streamStroke)s %(borderWidth)s w 0 %(hbw)s m %(size)s %(hbw)s l s') elif borderStyle in ('dashed','inset','bevelled','solid'): if borderStyle=='dashed': dash = ' [%s ] 0 d' % fp_str(dashLen) else: dash = '' stream('%(streamStroke)s%(dash)s %(borderWidth)s w %(hbw)s %(hbw)s %(smbw)s %(smbw)s re s') if borderStyle in ('bevelled','inset'): _2bw = 2*borderWidth sm2bw = size - _2bw ds = sm2bw bbs0 = Blacker(fillColor,0.5) bbs1 = fillColor if key!='D': bbs0, bbs1 = bbs1, bbs0 bbs0 = self.streamFillColor(bbs0) bbs1 = self.streamFillColor(bbs1) stream('%(bbs0)s %(borderWidth)s %(borderWidth)s m %(borderWidth)s %(smbw)s l %(smbw)s %(smbw)s l %(sm2bw)s %(sm2bw)s l %(_2bw)s %(sm2bw)s l %(_2bw)s %(_2bw)s l f %(bbs1)s %(smbw)s %(smbw)s m %(smbw)s %(borderWidth)s l %(borderWidth)s %(borderWidth)s l %(_2bw)s %(_2bw)s l %(sm2bw)s %(_2bw)s l %(sm2bw)s %(sm2bw)s l f') stream('Q') elif shape=='circle': cas = lambda _r,**_casKwds: self.circleArcStream(size,_r,**_casKwds) r = size*0.5 streamFill = self.streamFillColor(fillColor) stream('q 1 g 1 G %(streamFill)s') stream(cas(r)) stream('f') stream('Q') if borderWidth!=None: stream('q') streamStroke = self.streamStrokeColor(borderColor) hbw = borderWidth*0.5 ds = size - borderWidth if borderStyle=='underlined': stream('q %(streamStroke)s %(borderWidth)s w 0 %(hbw)s m %(size)s %(hbw)s l s Q') elif borderStyle in ('dashed','inset','bevelled','solid'): if borderStyle=='dashed': dash = ' [3 ] 0 d' else: dash = '' stream('%(streamStroke)s%(dash)s %(borderWidth)s w') stream(cas(r-hbw)) stream('s') stream('Q') if borderStyle in ('bevelled','inset'): _3bwh = 3*hbw ds = size - _3bwh bbs0 = Blacker(fillColor,0.5) bbs1 = Whiter(fillColor,0.5) a0 = (0,1) a1 = (2,3) if borderStyle=='inset': bbs0, bbs1 = bbs1, bbs0 if key!='D': bbs0, bbs1 = bbs1, bbs0 bbs0 = self.streamStrokeColor(bbs0) bbs1 = self.streamStrokeColor(bbs1) stream('q %(bbs0)s %(borderWidth)s w') stream(cas(r-_3bwh,rotated=True,arcs=a0)) stream('S Q %(bbs1)s q') stream(cas(r-_3bwh,rotated=True,arcs=a1)) stream('S Q') if value=='Yes': textFillColor = self.streamFillColor(textColor) textStrokeColor = self.streamStrokeColor(textColor) stream('q %(textFillColor)s %(textStrokeColor)s') cbm = cbmarks[buttonStyle] if shape=='circle' and buttonStyle=='circle': stream(cas((max(r-(size-ds),1))*0.5)) stream('f') else: stream(cbm.scaledRender(size,size-ds)) stream('Q') stream = ('\n'.join(stream.__self__) % vars()).replace(' ',' ').replace('\n\n','\n') return self.makeStream( size, size, stream, Resources = PDFFromString('<< /ProcSet [/PDF] >>'), ) @staticmethod def circleArcStream(size, r, arcs=(0,1,2,3), rotated=False): R = [].append rlen = R.__self__.__len__ hsize = size * 0.5 f = size / 20.0 size *= f hsize *= f r *= f cp = fp_str(0.55231 * r) r = fp_str(r) hsize = fp_str(hsize) mx = '0.7071 0.7071 -0.7071 0.7071' if rotated else '1 0 0 1' R('%(mx)s %(hsize)s %(hsize)s cm') if 0 in arcs: if rlen()==1: R('%(r)s 0 m') R('%(r)s %(cp)s %(cp)s %(r)s 0 %(r)s c') if 1 in arcs: if rlen()==1: R('0 %(r)s m') R('-%(cp)s %(r)s -%(r)s %(cp)s -%(r)s 0 c') if 2 in arcs: if rlen()==1: R('-%(r)s 0 m') R('-%(r)s -%(cp)s -%(cp)s -%(r)s 0 -%(r)s c') if 3 in arcs: if rlen()==1: R('0 -%(r)s m') R('%(cp)s -%(r)s %(r)s -%(cp)s %(r)s 0 c') return '\n'.join(R.__self__) % vars() def zdMark(self,c,size,ds,iFontName): c = ZDSyms[c] W = H = size-ds fs = H/1.2 w = float(stringWidth(c,'ZapfDingbats',fs)) if w>W: fs *= W/w dx = ds + 0.5*(W-w) dy = 0 return 'BT %(iFontName)s %(fs)s Tf %(dx)s %(dy)s Td %(fs)s TL (%(c)s) Tj ET' % vars() def getRef(self,obj): return self.canv._doc.Reference(obj) def getRefStr(self,obj): return asNative(self.getRef(obj).format(self.canv._doc)) @staticmethod def stdColors(t,b,f): if isinstance(f,CMYKColor) or isinstance(t,CMYKColor) or isinstance(b,CMYKColor): return (t or CMYKColor(0,0,0,0.9), b or CMYKColor(0,0,0,0.9), f or CMYKColor(0.12,0.157,0,0)) else: return (t or Color(0.1,0.1,0.1), b or Color(0.1,0.1,0.1), f or Color(0.8,0.843,1)) @staticmethod def varyColors(key,t,b,f): if key!='N': func = Whiter if key=='R' else Blacker t,b,f = [func(c,0.9) for c in (t,b,f)] return t,b,f def checkForceBorder(self,x,y,width,height,forceBorder,shape,borderStyle,borderWidth,borderColor,fillColor): if forceBorder: canv = self.canv canv.saveState() canv.resetTransforms() if borderWidth!=None: hbw = 0.5*borderWidth canv.setLineWidth(borderWidth) canv.setStrokeColor(borderColor) s = 1 else: s = hbw = 0 width -= 2*hbw height -= 2*hbw x += hbw y += hbw canv.setFillColor(fillColor) if shape=='square': canv.rect(x,y,width,height,stroke=s,fill=1) else: r = min(width,height) * 0.5 canv.circle(x+r,y+r,r,stroke=s,fill=1) canv.restoreState() def checkbox(self, checked=False, buttonStyle='check', shape='square', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', size=20, x=0, y=0, tooltip=None, name=None, annotationFlags='print', fieldFlags='required', forceBorder=False, relative=False, dashLen = 3, ): initialValue = 'Yes' if checked else 'Off' textColor,borderColor,fillColor=self.stdColors(textColor,borderColor,fillColor) canv = self.canv if relative: x, y = self.canv.absolutePosition(x,y) doc = canv._doc AP = {} for key in 'NDR': APV = {} tC,bC,fC = self.varyColors(key,textColor,borderColor,fillColor) for value in ('Yes','Off'): ap = self.checkboxAP( key, value, buttonStyle=buttonStyle, shape=shape, fillColor=fC, borderColor=bC, textColor=tC, borderWidth=borderWidth, borderStyle=borderStyle, size=size, dashLen=dashLen, ) if ap._af_refstr in self._refMap: ref = self._refMap[ap._af_refstr] else: ref = self.getRef(ap) self._refMap[ap._af_refstr] = ref APV[value]=ref AP[key] = PDFDictionary(APV) del APV CB = dict( FT = PDFName('Btn'), P = doc.thisPageRef(), V = PDFName(initialValue), AS = PDFName(initialValue), #DV = PDFName(initialValue), Rect = PDFArray((x,y,x+size,y+size)), AP = PDFDictionary(AP), Subtype = PDFName('Widget'), Type = PDFName('Annot'), F = makeFlags(annotationFlags,annotationFlagValues), Ff = makeFlags(fieldFlags,fieldFlagValues), H=PDFName('N'), ) if tooltip: CB['TU'] = PDFString(tooltip) if not name: name = 'AFF%03d' % len(self.fields) if borderWidth: CB['BS'] = bsPDF(borderWidth,borderStyle,dashLen) CB['T'] = PDFString(name) MK = dict( CA='(%s)' % ZDSyms[buttonStyle], BC=PDFArray(self.colorTuple(borderColor)), BG=PDFArray(self.colorTuple(fillColor)), ) CB['MK'] = PDFDictionary(MK) CB = PDFDictionary(CB) self.canv._addAnnotation(CB) self.fields.append(self.getRef(CB)) self.checkForceBorder(x,y,size,size,forceBorder,shape,borderStyle,borderWidth,borderColor,fillColor) def radio(self, value=None, selected=False, buttonStyle='circle', shape='circle', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', size=20, x=0, y=0, tooltip=None, name=None, annotationFlags='print', fieldFlags='noToggleToOff required radio', forceBorder=False, relative=False, dashLen=3, ): if name not in self._radios: group = RadioGroup(name,tooltip=tooltip,fieldFlags=fieldFlags) group._ref = self.getRef(group) self._radios[name] = group self.fields.append(group._ref) else: group = self._radios[name] fieldFlags = makeFlags(fieldFlags,fieldFlagValues) if fieldFlags!=group.Ff: raise ValueError('radio.%s.%s created with different flags' % (name,value)) if not value: raise ValueError('bad value %r for radio.%s' % (value,name)) initialValue = value if selected else 'Off' textColor,borderColor,fillColor=self.stdColors(textColor,borderColor,fillColor) if initialValue==value: if group.V is not None: if group.V!=value: raise ValueError('radio.%s.%s sets initial value conflicting with %s'%(name,value,group.V)) else: group.V = value canv = self.canv if relative: x, y = self.canv.absolutePosition(x,y) doc = canv._doc AP = {} for key in 'NDR': APV = {} tC,bC,fC = self.varyColors(key,textColor,borderColor,fillColor) for v in (value,'Off'): ap = self.checkboxAP( key, 'Yes' if v==value else 'Off', buttonStyle=buttonStyle, shape=shape, fillColor=fC, borderColor=bC, textColor=tC, borderWidth=borderWidth, borderStyle=borderStyle, size=size, dashLen=dashLen, ) if ap._af_refstr in self._refMap: ref = self._refMap[ap._af_refstr] else: ref = self.getRef(ap) self._refMap[ap._af_refstr] = ref APV[v]=ref AP[key] = PDFDictionary(APV) del APV RB = dict( FT = PDFName('Btn'), P = doc.thisPageRef(), AS = PDFName(initialValue), #DV = PDFName(initialValue), Rect = PDFArray((x,y,x+size,y+size)), AP = PDFDictionary(AP), Subtype = PDFName('Widget'), Type = PDFName('Annot'), F = makeFlags(annotationFlags,annotationFlagValues), Parent = group._ref, #DA = PDFString('1 g '+(self.streamFillColor(fillColor) if fillColor else '-0.25 0.75 -0.25 rg')) H=PDFName('N'), ) #RB['T'] = PDFString(name) MK = dict( CA='(%s)' % ZDSyms[buttonStyle], BC=PDFArray(self.colorTuple(borderColor)), BG=PDFArray(self.colorTuple(fillColor)), ) if borderWidth: RB['BS'] = bsPDF(borderWidth,borderStyle,dashLen) RB['MK'] = PDFDictionary(MK) RB = PDFDictionary(RB) self.canv._addAnnotation(RB) group.kids.append(self.getRef(RB)) self.checkForceBorder(x,y,size,size,forceBorder,shape,borderStyle,borderWidth,borderColor,fillColor) def makeStream(self, width, height, stream, **D ): D['Matrix'] = PDFArray([1.0,0.0,0.0,1.0,0.0,0.0]) D['BBox'] = PDFArray([0,0,width,height]) D['Subtype'] = PDFName('Form') D['Type'] = PDFName('XObject') D['FormType'] = 1 s = PDFStream( PDFDictionary(D), stream, filters = [PDFStreamFilterZCompress()] if self.canv._doc.compression else None, ) #compute a lookup string s._af_refstr = stream+'\n'.join(('%s=%r' % (k,_pdfObjToStr(v)) for k,v in sorted(D.items()))) return s def txAP(self, key, #N/D/R value, iFontName, rFontName, fontSize, shape='square', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', width=120, height=36, dashLen=3, wkind='textfield', labels=[], I=[], sel_bg='0.600006 0.756866 0.854904 rg', sel_fg='0 g', ): stream = [].append if opaqueColor(fillColor): streamFill = self.streamFillColor(fillColor) stream('%(streamFill)s\n0 0 %(width)s %(height)s re\nf') if borderWidth!=None and borderWidth>0 and opaqueColor(borderColor): hbw = borderWidth*0.5 bww = width - borderWidth bwh = height - borderWidth _2bw = 2*borderWidth if borderStyle in ('bevelled','inset'): bw2w = width - _2bw bw2h = height - _2bw if borderStyle == 'bevelled': bbs0 = '1 g' if fillColor or borderColor: bbs1 = '-0.250977 0.749023 -0.250977 rg' else: bbs1 = '.75293 g' else: bbs0 = '.501953 g' bbs1 = '.75293 g' stream('%(bbs0)s\n%(borderWidth)s %(borderWidth)s m\n%(borderWidth)s %(bwh)s l\n%(bww)s %(bwh)s l\n%(bw2w)s %(bw2h)s l\n%(_2bw)s %(bw2h)s l\n%(_2bw)s %(_2bw)s l\nf\n%(bbs1)s\n%(bww)s %(bwh)s m\n%(bww)s %(borderWidth)s l\n%(borderWidth)s %(borderWidth)s l\n%(_2bw)s %(_2bw)s l\n%(bw2w)s %(_2bw)s l\n%(bw2w)s %(bw2h)s l\nf') else: hbw = _2bw = borderWidth = 0 bww = width bwh = height undash = '' if opaqueColor(borderColor) and borderWidth: streamStroke = self.streamStrokeColor(borderColor) if borderStyle=='underlined': stream('%(streamStroke)s %(borderWidth)s w 0 %(hbw)s m %(width)s %(hbw)s l s') elif borderStyle in ('dashed','inset','bevelled','solid'): if borderStyle=='dashed': dash = '\n[%s ] 0 d\n' % fp_str(dashLen) undash = '[] 0 d' else: dash = '\n%s w' % borderWidth stream('%(streamStroke)s\n%(dash)s\n%(hbw)s %(hbw)s %(bww)s %(bwh)s re\ns') _4bw = 4*borderWidth w4bw = width - _4bw h4bw = height - _4bw textFill = self.streamFillColor(textColor) stream('/Tx BMC \nq\n%(_2bw)s %(_2bw)s %(w4bw)s %(h4bw)s re\nW\nn') leading = 1.2 * fontSize if wkind=='listbox': nopts = int(h4bw/leading) leading = h4bw/float(nopts) if nopts>len(labels): i0 = 0 nopts = len(labels) elif len(I)<=1: i0 = I[0] if I else 0 if i0: if i0=i: i0 = i else: #|I|>1 if I[1]y: i0 = i - y ilim = min(y,i0+nopts) if I: i = i0 y = height - _2bw - leading stream(sel_bg) while i>' % vars()), ) def makeFont(self,fontName): if fontName is None: fontName = 'Helvetica' if fontName not in self.formFontNames: raise ValueError('form font name, %r, is not one of the standard 14 fonts' % fontName) fn = self.formFontNames[fontName] ref = self.getRefStr(PDFFromString('<< /BaseFont /%s /Subtype /Type1 /Name /%s /Type /Font /Encoding %s >>' % ( fontName,fn,self.encRefStr))) if fn not in self.fonts: self.fonts[fn] = ref return ref, fn def _textfield(self, value='', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', width=120, height=36, x=0, y=0, tooltip=None, name=None, annotationFlags='print', fieldFlags='', forceBorder=False, relative=False, maxlen=100, fontName=None, fontSize=None, wkind=None, options=None, dashLen=3, ): rFontName, iFontName = self.makeFont(fontName) if fontSize is None: fontSize = 12 textColor,borderColor,fillColor=self.stdColors(textColor,borderColor,fillColor) canv = self.canv if relative: x, y = self.canv.absolutePosition(x,y) doc = canv._doc rFontName = '<>' % (iFontName,rFontName) Ff = makeFlags(fieldFlags,fieldFlagValues) if wkind!='textfield': #options must be a list of pairs (label value) #value must be a list of the values FT='Ch' if wkind=='choice': Ff |= fieldFlagValues['combo'] #just in case V = [] Opt = [] AP = [] I = [] TF = [] if not isinstance(options,(list,tuple)): raise TypeError('%s options=%r is wrong type' % (wkind,options)) for v in options: if isStr(v): Opt.append(PDFString(v)) l = v elif isinstance(v,(list,tuple)): if len(v)==1: v=l=v[0] else: l,v = v Opt.append(PDFArray([PDFString(v),PDFString(l)])) else: raise TypeError('%s option %r is wrong type' % (wkind,v)) AP.append(v) TF.append(l) Opt = PDFArray(Opt) if value: if not isinstance(value,(list,tuple)): value = [value] for v in value: if v not in AP: if v not in TF: raise ValueError('%s value %r is not in option\nvalues %r\nor labels %r' % (wkind,v,AP,TF)) else: v = AP[TF.index(v)] I.append(AP.index(v)) V.append(PDFString(v)) I.sort() if not (Ff & fieldFlagValues['multiSelect']) or len(value)==1: if wkind=='choice': value = TF[I[0]] else: value = value[:1] V = V[:1] V = V[0] if len(V)==1 else PDFArray(V) lbextras = dict(labels=TF,I=I,wkind=wkind) else: V = PDFString(value) else: I = Opt = [] lbextras = {} FT='Tx' if not isStr(value): raise TypeError('textfield value=%r is wrong type' % value) V = PDFString(value) AP = {} for key in 'N': tC,bC,fC = self.varyColors(key,textColor,borderColor,fillColor) ap = self.txAP( key, value, iFontName, rFontName, fontSize, fillColor=fC, borderColor=bC, textColor=tC, borderWidth=borderWidth, borderStyle=borderStyle, width=width, height=height, dashLen = dashLen, **lbextras ) if ap._af_refstr in self._refMap: ref = self._refMap[ap._af_refstr] else: ref = self.getRef(ap) self._refMap[ap._af_refstr] = ref AP[key] = ref TF = dict( FT = PDFName(FT), P = doc.thisPageRef(), V = V, #AS = PDFName(value), DV = V, Rect = PDFArray((x,y,x+width,y+height)), AP = PDFDictionary(AP), Subtype = PDFName('Widget'), Type = PDFName('Annot'), F = makeFlags(annotationFlags,annotationFlagValues), Ff = Ff, #H=PDFName('N'), DA=PDFString('/%s %d Tf %s' % (iFontName,fontSize, self.streamFillColor(textColor))), ) if Opt: TF['Opt'] = Opt if I: TF['I'] = PDFArray(I) if maxlen: TF['MaxLen'] = maxlen if tooltip: TF['TU'] = PDFString(tooltip) if not name: name = 'AFF%03d' % len(self.fields) TF['T'] = PDFString(name) MK = dict( BG=PDFArray(self.colorTuple(fillColor)), ) # Acrobat seems to draw a thin border when BS is defined, so only # include this if there actually is a border to draw if borderWidth: TF['BS'] = bsPDF(borderWidth,borderStyle,dashLen) MK['BC'] = PDFArray(self.colorTuple(borderColor)) TF['MK'] = PDFDictionary(MK) TF = PDFDictionary(TF) self.canv._addAnnotation(TF) self.fields.append(self.getRef(TF)) self.checkForceBorder(x,y,width,height,forceBorder,'square',borderStyle,borderWidth,borderColor,fillColor) def textfield(self, value='', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', width=120, height=36, x=0, y=0, tooltip=None, name=None, annotationFlags='print', fieldFlags='', forceBorder=False, relative=False, maxlen=100, fontName=None, fontSize=None, dashLen=3, ): return self._textfield( value=value, fillColor=fillColor, borderColor=borderColor, textColor=textColor, borderWidth=borderWidth, borderStyle=borderStyle, width=width, height=height, x=x, y=y, tooltip=tooltip, name=name, annotationFlags=annotationFlags, fieldFlags=fieldFlags, forceBorder=forceBorder, relative=relative, maxlen=maxlen, fontName=fontName, fontSize=fontSize, dashLen=dashLen, wkind='textfield', ) def listbox(self, value='', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', width=120, height=36, x=0, y=0, tooltip=None, name=None, annotationFlags='print', fieldFlags='', forceBorder=False, relative=False, fontName=None, fontSize=None, dashLen=3, maxlen=None, options=[], ): return self._textfield( value=value, fillColor=fillColor, borderColor=borderColor, textColor=textColor, borderWidth=borderWidth, borderStyle=borderStyle, width=width, height=height, x=x, y=y, tooltip=tooltip, name=name, annotationFlags=annotationFlags, fieldFlags=fieldFlags, forceBorder=forceBorder, relative=relative, maxlen=maxlen, fontName=fontName, fontSize=fontSize, dashLen=dashLen, wkind='listbox', options = options, ) def choice(self, value='', fillColor=None, borderColor=None, textColor=None, borderWidth=1, borderStyle='solid', width=120, height=36, x=0, y=0, tooltip=None, name=None, annotationFlags='print', fieldFlags='combo', forceBorder=False, relative=False, fontName=None, fontSize=None, dashLen=3, maxlen=None, options=[], ): return self._textfield( value=value, fillColor=fillColor, borderColor=borderColor, textColor=textColor, borderWidth=borderWidth, borderStyle=borderStyle, width=width, height=height, x=x, y=y, tooltip=tooltip, name=name, annotationFlags=annotationFlags, fieldFlags=fieldFlags, forceBorder=forceBorder, relative=relative, maxlen=maxlen, fontName=fontName, fontSize=fontSize, dashLen=dashLen, wkind='choice', options = options, ) def checkboxRelative(self, **kwds): "same as checkbox except the x and y are relative to the canvas coordinate transform" kwds['relative']=True self.checkbox(**kwds) def radioRelative(self, **kwds): "same as radio except the x and y are relative to the canvas coordinate transform" kwds['relative']=True self.radio(**kwds) def textfieldRelative(self, **kwds): "same as textfield except the x and y are relative to the canvas coordinate transform" kwds['relative']=True self.textfield(**kwds) def listboxRelative(self, **kwds): "same as textfield except the x and y are relative to the canvas coordinate transform" kwds['relative']=True self.textfield(**kwds) def choiceRelative(self, **kwds): "same as textfield except the x and y are relative to the canvas coordinate transform" kwds['relative']=True self.textfield(**kwds) @property def encRefStr(self): if not self._pdfdocenc: self._pdfdocenc = PDFFromString('''<>''') return self.getRefStr(self._pdfdocenc) class CBMark: opNames = 'm l c h'.split() opCount = 1,1,3,0 def __init__(self,ops,points,bounds,slack=0.05): self.ops = ops self.xmin,self.ymin,self.xmax,self.ymax = bounds self.points = points self.slack = slack def scaledRender(self,size,ds=0): ''' >>> print(cbmarks['check'].scaledRender(20)) 12.97075 14.68802 m 15.00139 17.16992 l 15.9039 18.1727 17.93454 18.67409 19.2883 18.67409 c 19.46379 18.27298 l 17.13231 15.51532 l 11.91783 8.62117 l 8.307799 3.030641 l 7.430362 1.526462 l 7.305014 1.275766 7.154596 .97493 6.9039 .824513 c 6.577994 .674095 5.825905 .674095 5.47493 .674095 c 4.672702 .674095 4.497214 .674095 4.321727 .799443 c 4.071031 .97493 3.945682 1.325905 3.770195 1.67688 c 3.218663 2.830084 2.240947 5.337047 2.240947 6.590529 c 2.240947 7.016713 2.491643 7.21727 2.817549 7.442897 c 3.344011 7.818942 4.0961 8.245125 4.747911 8.245125 c 5.249304 8.245125 5.299443 7.818942 5.449861 7.417827 c 5.951253 6.239554 l 6.026462 6.038997 6.252089 5.337047 6.527855 5.337047 c 6.778552 5.337047 7.079387 5.913649 7.179666 6.089136 c 12.97075 14.68802 l h f >>> print(cbmarks['cross'].scaledRender(20)) 19.9104 17.43931 m 12.41908 10 l 19.9104 2.534682 l 18.37572 1 l 10.9104 8.491329 l 3.445087 1 l 1.910405 2.534682 l 9.427746 10 l 1.910405 17.46532 l 3.445087 19 l 10.9104 11.50867 l 18.37572 19 l 19.9104 17.43931 l h f >>> print(cbmarks['circle'].scaledRender(20)) 1.872576 9.663435 m 1.872576 14.64958 5.936288 18.61357 10.89751 18.61357 c 15.8338 18.61357 19.87258 14.59972 19.87258 9.663435 c 19.87258 4.727147 15.8338 .688366 10.89751 .688366 c 5.936288 .688366 1.872576 4.677285 1.872576 9.663435 c h f >>> print(cbmarks['star'].scaledRender(20)) 10.85542 18.3253 m 12.90361 11.84337 l 19.84337 11.84337 l 14.25301 7.650602 l 16.42169 1 l 10.85542 5.096386 l 5.289157 1 l 7.481928 7.650602 l 1.843373 11.84337 l 8.759036 11.84337 l 10.85542 18.3253 l h f >>> print(cbmarks['diamond'].scaledRender(20)) 17.43533 9.662031 m 15.63282 7.484006 l 10.85118 .649513 l 8.422809 4.329624 l 5.919332 7.659249 l 4.267038 9.662031 l 6.16968 12.0153 l 10.85118 18.64951 l 12.75382 15.4701 15.00695 12.49096 17.43533 9.662031 c h f ''' #work out the scale and translation W = H = size - 2*ds xmin = self.xmin ymin = self.ymin w = self.xmax-xmin h = self.ymax-ymin slack = self.slack*min(W,H) sx = (W - 2*slack)/float(w) sy = (H - 2*slack)/float(h) sx = sy = min(sx,sy) w *= sx h *= sy dx = ds+(W - w)*0.5 dy = ds+(H - h)*0.5 xsc = lambda v: fp_str((v-xmin)*sx+dx) ysc = lambda v: fp_str((v-ymin)*sy+dy) opNames = self.opNames opCount = self.opCount C = [].append i = 0 points = self.points for op in self.ops: c = opCount[op] for _ in xrange(c): C(xsc(points[i])) C(ysc(points[i+1])) i += 2 C(opNames[op]) C('f') return ' '.join(C.__self__) cbmarks = dict( check=CBMark( [0, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, 3], [462, 546, 543, 645, 579, 685, 660, 705, 714, 705, 721, 689, 628, 579, 420, 304, 276, 81, 241, 21, 236, 11, 230, -1, 220, -7, 207, -13, 177, -13, 163, -13, 131, -13, 124, -13, 117, -8, 107, -1, 102, 13, 95, 27, 73, 73, 34, 173, 34, 223, 34, 240, 44, 248, 57, 257, 78, 272, 108, 289, 134, 289, 154, 289, 156, 272, 162, 256, 182, 209, 185, 201, 194, 173, 205, 173, 215, 173, 227, 196, 231, 203, 462, 546], (34,-12,721,706), ), cross = CBMark( [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3], [727, 632, 439, 346, 727, 59, 668, 0, 381, 288, 94, 0, 35, 59, 324, 346, 35, 633, 94, 692, 381, 404, 668, 692, 727, 632], (35,0,727,692), ), circle = CBMark( [0, 2, 2, 2, 2, 3], [35, 346, 35, 546, 198, 705, 397, 705, 595, 705, 757, 544, 757, 346, 757, 148, 595, -14, 397, -14, 198, -14, 35, 146, 35, 346], (35,-14,757,705), ), star = CBMark( [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3], [409, 705, 494, 436, 782, 436, 550, 262, 640, -14, 409, 156, 178, -14, 269, 262, 35, 436, 322, 436, 409, 705], (35,-14,782,705), ), diamond = CBMark( [0, 1, 1, 1, 1, 1, 1, 1, 2, 3], [560, 346, 488, 259, 297, -14, 200, 133, 100, 266, 34, 346, 110, 440, 297, 705, 373, 578, 463, 459, 560, 346], (34,-14,560,705), ), ) ZDSyms=dict(check='4',cross='5',circle='l',star='N',diamond='u') if __name__ == "__main__": import doctest doctest.testmod() reportlab-3.5.34/src/reportlab/pdfbase/cidfonts.py0000664000175000017500000004462613544671343022772 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/cidfonts.py #$Header $ __version__='3.3.0' __doc__="""CID (Asian multi-byte) font support. This defines classes to represent CID fonts. They know how to calculate their own width and how to write themselves into PDF files.""" import os import marshal import time try: from hashlib import md5 except ImportError: from md5 import md5 import reportlab from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase._cidfontdata import allowedTypeFaces, allowedEncodings, CIDFontInfo, \ defaultUnicodeEncodings, widthsByUnichar from reportlab.pdfgen.canvas import Canvas from reportlab.pdfbase import pdfdoc from reportlab.lib.rl_accel import escapePDF from reportlab.rl_config import CMapSearchPath from reportlab.lib.utils import isSeq, isBytes #quick hackery for 2.0 release. Now we always do unicode, and have built in #the CMAP data, any code to load CMap files is not needed. DISABLE_CMAP = True def findCMapFile(name): "Returns full filename, or raises error" for dirname in CMapSearchPath: cmapfile = dirname + os.sep + name if os.path.isfile(cmapfile): #print "found", cmapfile return cmapfile raise IOError('CMAP file for encodings "%s" not found!' % name) def structToPDF(structure): "Converts deeply nested structure to PDFdoc dictionary/array objects" if isinstance(structure,dict): newDict = {} for k, v in structure.items(): newDict[k] = structToPDF(v) return pdfdoc.PDFDictionary(newDict) elif isSeq(structure): newList = [] for elem in structure: newList.append(structToPDF(elem)) return pdfdoc.PDFArray(newList) else: return structure class CIDEncoding(pdfmetrics.Encoding): """Multi-byte encoding. These are loaded from CMAP files. A CMAP file is like a mini-codec. It defines the correspondence between code points in the (multi-byte) input data and Character IDs. """ # aims to do similar things to Brian Hooper's CMap class, # but I could not get it working and had to rewrite. # also, we should really rearrange our current encoding # into a SingleByteEncoding since many of its methods # should not apply here. def __init__(self, name, useCache=1): self.name = name self._mapFileHash = None self._codeSpaceRanges = [] self._notDefRanges = [] self._cmap = {} self.source = None if not DISABLE_CMAP: if useCache: from reportlab.lib.utils import get_rl_tempdir fontmapdir = get_rl_tempdir('FastCMAPS') if os.path.isfile(fontmapdir + os.sep + name + '.fastmap'): self.fastLoad(fontmapdir) self.source = fontmapdir + os.sep + name + '.fastmap' else: self.parseCMAPFile(name) self.source = 'CMAP: ' + name self.fastSave(fontmapdir) else: self.parseCMAPFile(name) def _hash(self, text): hasher = md5() hasher.update(text) return hasher.digest() def parseCMAPFile(self, name): """This is a tricky one as CMAP files are Postscript ones. Some refer to others with a 'usecmap' command""" #started = time.clock() cmapfile = findCMapFile(name) # this will CRAWL with the unicode encodings... rawdata = open(cmapfile, 'r').read() self._mapFileHash = self._hash(rawdata) #if it contains the token 'usecmap', parse the other #cmap file first.... usecmap_pos = rawdata.find('usecmap') if usecmap_pos > -1: #they tell us to look in another file #for the code space ranges. The one # to use will be the previous word. chunk = rawdata[0:usecmap_pos] words = chunk.split() otherCMAPName = words[-1] #print 'referred to another CMAP %s' % otherCMAPName self.parseCMAPFile(otherCMAPName) # now continue parsing this, as it may # override some settings words = rawdata.split() while words != []: if words[0] == 'begincodespacerange': words = words[1:] while words[0] != 'endcodespacerange': strStart, strEnd, words = words[0], words[1], words[2:] start = int(strStart[1:-1], 16) end = int(strEnd[1:-1], 16) self._codeSpaceRanges.append((start, end),) elif words[0] == 'beginnotdefrange': words = words[1:] while words[0] != 'endnotdefrange': strStart, strEnd, strValue = words[0:3] start = int(strStart[1:-1], 16) end = int(strEnd[1:-1], 16) value = int(strValue) self._notDefRanges.append((start, end, value),) words = words[3:] elif words[0] == 'begincidrange': words = words[1:] while words[0] != 'endcidrange': strStart, strEnd, strValue = words[0:3] start = int(strStart[1:-1], 16) end = int(strEnd[1:-1], 16) value = int(strValue) # this means that 'start' corresponds to 'value', # start+1 corresponds to value+1 and so on up # to end offset = 0 while start + offset <= end: self._cmap[start + offset] = value + offset offset = offset + 1 words = words[3:] else: words = words[1:] #finished = time.clock() #print 'parsed CMAP %s in %0.4f seconds' % (self.name, finished - started) def translate(self, text): "Convert a string into a list of CIDs" output = [] cmap = self._cmap lastChar = '' for char in text: if lastChar != '': #print 'convert character pair "%s"' % (lastChar + char) num = ord(lastChar) * 256 + ord(char) else: #print 'convert character "%s"' % char num = ord(char) lastChar = char found = 0 for low, high in self._codeSpaceRanges: if low < num < high: try: cid = cmap[num] #print '%d -> %d' % (num, cid) except KeyError: #not defined. Try to find the appropriate # notdef character, or failing that return # zero cid = 0 for low2, high2, notdef in self._notDefRanges: if low2 < num < high2: cid = notdef break output.append(cid) found = 1 break if found: lastChar = '' else: lastChar = char return output def fastSave(self, directory): f = open(os.path.join(directory, self.name + '.fastmap'), 'wb') marshal.dump(self._mapFileHash, f) marshal.dump(self._codeSpaceRanges, f) marshal.dump(self._notDefRanges, f) marshal.dump(self._cmap, f) f.close() def fastLoad(self, directory): started = time.clock() f = open(os.path.join(directory, self.name + '.fastmap'), 'rb') self._mapFileHash = marshal.load(f) self._codeSpaceRanges = marshal.load(f) self._notDefRanges = marshal.load(f) self._cmap = marshal.load(f) f.close() finished = time.clock() #print 'loaded %s in %0.4f seconds' % (self.name, finished - started) def getData(self): """Simple persistence helper. Return a dict with all that matters.""" return { 'mapFileHash': self._mapFileHash, 'codeSpaceRanges': self._codeSpaceRanges, 'notDefRanges': self._notDefRanges, 'cmap': self._cmap, } class CIDTypeFace(pdfmetrics.TypeFace): """Multi-byte type face. Conceptually similar to a single byte typeface, but the glyphs are identified by a numeric Character ID (CID) and not a glyph name. """ def __init__(self, name): """Initialised from one of the canned dictionaries in allowedEncodings Or rather, it will be shortly...""" pdfmetrics.TypeFace.__init__(self, name) self._extractDictInfo(name) def _extractDictInfo(self, name): try: fontDict = CIDFontInfo[name] except KeyError: raise KeyError("Unable to find information on CID typeface '%s'" % name + "Only the following font names work:" + repr(allowedTypeFaces)) descFont = fontDict['DescendantFonts'][0] self.ascent = descFont['FontDescriptor']['Ascent'] self.descent = descFont['FontDescriptor']['Descent'] self._defaultWidth = descFont['DW'] self._explicitWidths = self._expandWidths(descFont['W']) # should really support self.glyphWidths, self.glyphNames # but not done yet. def _expandWidths(self, compactWidthArray): """Expands Adobe nested list structure to get a dictionary of widths. Here is an example of such a structure.:: ( # starting at character ID 1, next n characters have the widths given. 1, (277,305,500,668,668,906,727,305,445,445,508,668,305,379,305,539), # all Characters from ID 17 to 26 are 668 em units wide 17, 26, 668, 27, (305, 305, 668, 668, 668, 566, 871, 727, 637, 652, 699, 574, 555, 676, 687, 242, 492, 664, 582, 789, 707, 734, 582, 734, 605, 605, 641, 668, 727, 945, 609, 609, 574, 445, 668, 445, 668, 668, 590, 555, 609, 547, 602, 574, 391, 609, 582, 234, 277, 539, 234, 895, 582, 605, 602, 602, 387, 508, 441, 582, 562, 781, 531, 570, 555, 449, 246, 449, 668), # these must be half width katakana and the like. 231, 632, 500 ) """ data = compactWidthArray[:] widths = {} while data: start, data = data[0], data[1:] if isSeq(data[0]): items, data = data[0], data[1:] for offset in range(len(items)): widths[start + offset] = items[offset] else: end, width, data = data[0], data[1], data[2:] for idx in range(start, end+1): widths[idx] = width return widths def getCharWidth(self, characterId): return self._explicitWidths.get(characterId, self._defaultWidth) class CIDFont(pdfmetrics.Font): "Represents a built-in multi-byte font" _multiByte = 1 def __init__(self, face, encoding): assert face in allowedTypeFaces, "TypeFace '%s' not supported! Use any of these instead: %s" % (face, allowedTypeFaces) self.faceName = face #should cache in registry... self.face = CIDTypeFace(face) assert encoding in allowedEncodings, "Encoding '%s' not supported! Use any of these instead: %s" % (encoding, allowedEncodings) self.encodingName = encoding self.encoding = CIDEncoding(encoding) #legacy hack doing quick cut and paste. self.fontName = self.faceName + '-' + self.encodingName self.name = self.fontName # need to know if it is vertical or horizontal self.isVertical = (self.encodingName[-1] == 'V') #no substitutes initially self.substitutionFonts = [] def formatForPdf(self, text): encoded = escapePDF(text) #print 'encoded CIDFont:', encoded return encoded def stringWidth(self, text, size, encoding=None): """This presumes non-Unicode input. UnicodeCIDFont wraps it for that context""" cidlist = self.encoding.translate(text) if self.isVertical: #this part is "not checked!" but seems to work. #assume each is 1000 ems high return len(cidlist) * size else: w = 0 for cid in cidlist: w = w + self.face.getCharWidth(cid) return 0.001 * w * size def addObjects(self, doc): """The explicit code in addMinchoObjects and addGothicObjects will be replaced by something that pulls the data from _cidfontdata.py in the next few days.""" internalName = 'F' + repr(len(doc.fontMapping)+1) bigDict = CIDFontInfo[self.face.name] bigDict['Name'] = '/' + internalName bigDict['Encoding'] = '/' + self.encodingName #convert to PDF dictionary/array objects cidObj = structToPDF(bigDict) # link into document, and add to font map r = doc.Reference(cidObj, internalName) fontDict = doc.idToObject['BasicFonts'].dict fontDict[internalName] = r doc.fontMapping[self.name] = '/' + internalName class UnicodeCIDFont(CIDFont): """Wraps up CIDFont to hide explicit encoding choice; encodes text for output as UTF16. lang should be one of 'jpn',chs','cht','kor' for now. if vertical is set, it will select a different widths array and possibly glyphs for some punctuation marks. halfWidth is only for Japanese. >>> dodgy = UnicodeCIDFont('nonexistent') Traceback (most recent call last): ... KeyError: "don't know anything about CID font nonexistent" >>> heisei = UnicodeCIDFont('HeiseiMin-W3') >>> heisei.name 'HeiseiMin-W3' >>> heisei.language 'jpn' >>> heisei.encoding.name 'UniJIS-UCS2-H' >>> #This is how PDF data gets encoded. >>> print(heisei.formatForPdf('hello')) \\000h\\000e\\000l\\000l\\000o >>> tokyo = u'\u6771\u4AEC' >>> print(heisei.formatForPdf(tokyo)) gqJ\\354 >>> print(heisei.stringWidth(tokyo,10)) 20.0 >>> print(heisei.stringWidth('hello world',10)) 45.83 """ def __init__(self, face, isVertical=False, isHalfWidth=False): #pass try: lang, defaultEncoding = defaultUnicodeEncodings[face] except KeyError: raise KeyError("don't know anything about CID font %s" % face) #we know the languages now. self.language = lang #rebuilt encoding string. They follow rules which work #for the 7 fonts provided. enc = defaultEncoding[:-1] if isHalfWidth: enc = enc + 'HW-' if isVertical: enc = enc + 'V' else: enc = enc + 'H' #now we can do the more general case CIDFont.__init__(self, face, enc) #self.encName = 'utf_16_le' #it's simpler for unicode, just use the face name self.name = self.fontName = face self.vertical = isVertical self.isHalfWidth = isHalfWidth self.unicodeWidths = widthsByUnichar[self.name] def formatForPdf(self, text): #these ones should be encoded asUTF16 minus the BOM from codecs import utf_16_be_encode #print 'formatting %s: %s' % (type(text), repr(text)) if isBytes(text): text = text.decode('utf8') utfText = utf_16_be_encode(text)[0] encoded = escapePDF(utfText) #print ' encoded:',encoded return encoded # #result = escapePDF(encoded) #print ' -> %s' % repr(result) #return result def stringWidth(self, text, size, encoding=None): "Just ensure we do width test on characters, not bytes..." if isBytes(text): text = text.decode('utf8') widths = self.unicodeWidths return size * 0.001 * sum([widths.get(uch, 1000) for uch in text]) #return CIDFont.stringWidth(self, text, size, encoding) def precalculate(cmapdir): # crunches through all, making 'fastmap' files import os files = os.listdir(cmapdir) for file in files: if os.path.isfile(cmapdir + os.sep + file + '.fastmap'): continue try: enc = CIDEncoding(file) except: print('cannot parse %s, skipping' % enc) continue enc.fastSave(cmapdir) print('saved %s.fastmap' % file) def test(): # only works if you have cirrect encodings on your box! c = Canvas('test_japanese.pdf') c.setFont('Helvetica', 30) c.drawString(100,700, 'Japanese Font Support') pdfmetrics.registerFont(CIDFont('HeiseiMin-W3','90ms-RKSJ-H')) pdfmetrics.registerFont(CIDFont('HeiseiKakuGo-W5','90ms-RKSJ-H')) # the two typefaces c.setFont('HeiseiMin-W3-90ms-RKSJ-H', 16) # this says "This is HeiseiMincho" in shift-JIS. Not all our readers # have a Japanese PC, so I escaped it. On a Japanese-capable # system, print the string to see Kanji message1 = '\202\261\202\352\202\315\225\275\220\254\226\276\222\251\202\305\202\267\201B' c.drawString(100, 675, message1) c.save() print('saved test_japanese.pdf') ## print 'CMAP_DIR = ', CMAP_DIR ## tf1 = CIDTypeFace('HeiseiMin-W3') ## print 'ascent = ',tf1.ascent ## print 'descent = ',tf1.descent ## for cid in [1,2,3,4,5,18,19,28,231,1742]: ## print 'width of cid %d = %d' % (cid, tf1.getCharWidth(cid)) encName = '90ms-RKSJ-H' enc = CIDEncoding(encName) print(message1, '->', enc.translate(message1)) f = CIDFont('HeiseiMin-W3','90ms-RKSJ-H') print('width = %0.2f' % f.stringWidth(message1, 10)) #testing all encodings ## import time ## started = time.time() ## import glob ## for encName in _cidfontdata.allowedEncodings: ## #encName = '90ms-RKSJ-H' ## enc = CIDEncoding(encName) ## print 'encoding %s:' % encName ## print ' codeSpaceRanges = %s' % enc._codeSpaceRanges ## print ' notDefRanges = %s' % enc._notDefRanges ## print ' mapping size = %d' % len(enc._cmap) ## finished = time.time() ## print 'constructed all encodings in %0.2f seconds' % (finished - started) if __name__=='__main__': import doctest from reportlab.pdfbase import cidfonts doctest.testmod(cidfonts) #test() reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_courierbold.py0000664000175000017500000000712013544671343027057 0ustar rptlabrptlab00000000000000widths = {'A': 600, 'AE': 600, 'Aacute': 600, 'Acircumflex': 600, 'Adieresis': 600, 'Agrave': 600, 'Aring': 600, 'Atilde': 600, 'B': 600, 'C': 600, 'Ccedilla': 600, 'D': 600, 'E': 600, 'Eacute': 600, 'Ecircumflex': 600, 'Edieresis': 600, 'Egrave': 600, 'Eth': 600, 'Euro': 600, 'F': 600, 'G': 600, 'H': 600, 'I': 600, 'Iacute': 600, 'Icircumflex': 600, 'Idieresis': 600, 'Igrave': 600, 'J': 600, 'K': 600, 'L': 600, 'Lslash': 600, 'M': 600, 'N': 600, 'Ntilde': 600, 'O': 600, 'OE': 600, 'Oacute': 600, 'Ocircumflex': 600, 'Odieresis': 600, 'Ograve': 600, 'Oslash': 600, 'Otilde': 600, 'P': 600, 'Q': 600, 'R': 600, 'S': 600, 'Scaron': 600, 'T': 600, 'Thorn': 600, 'U': 600, 'Uacute': 600, 'Ucircumflex': 600, 'Udieresis': 600, 'Ugrave': 600, 'V': 600, 'W': 600, 'X': 600, 'Y': 600, 'Yacute': 600, 'Ydieresis': 600, 'Z': 600, 'Zcaron': 600, 'a': 600, 'aacute': 600, 'acircumflex': 600, 'acute': 600, 'adieresis': 600, 'ae': 600, 'agrave': 600, 'ampersand': 600, 'aring': 600, 'asciicircum': 600, 'asciitilde': 600, 'asterisk': 600, 'at': 600, 'atilde': 600, 'b': 600, 'backslash': 600, 'bar': 600, 'braceleft': 600, 'braceright': 600, 'bracketleft': 600, 'bracketright': 600, 'breve': 600, 'brokenbar': 600, 'bullet': 600, 'c': 600, 'caron': 600, 'ccedilla': 600, 'cedilla': 600, 'cent': 600, 'circumflex': 600, 'colon': 600, 'comma': 600, 'copyright': 600, 'currency': 600, 'd': 600, 'dagger': 600, 'daggerdbl': 600, 'degree': 600, 'dieresis': 600, 'divide': 600, 'dollar': 600, 'dotaccent': 600, 'dotlessi': 600, 'e': 600, 'eacute': 600, 'ecircumflex': 600, 'edieresis': 600, 'egrave': 600, 'eight': 600, 'ellipsis': 600, 'emdash': 600, 'endash': 600, 'equal': 600, 'eth': 600, 'exclam': 600, 'exclamdown': 600, 'f': 600, 'fi': 600, 'five': 600, 'fl': 600, 'florin': 600, 'four': 600, 'fraction': 600, 'g': 600, 'germandbls': 600, 'grave': 600, 'greater': 600, 'guillemotleft': 600, 'guillemotright': 600, 'guilsinglleft': 600, 'guilsinglright': 600, 'h': 600, 'hungarumlaut': 600, 'hyphen': 600, 'i': 600, 'iacute': 600, 'icircumflex': 600, 'idieresis': 600, 'igrave': 600, 'j': 600, 'k': 600, 'l': 600, 'less': 600, 'logicalnot': 600, 'lslash': 600, 'm': 600, 'macron': 600, 'minus': 600, 'mu': 600, 'multiply': 600, 'n': 600, 'nine': 600, 'ntilde': 600, 'numbersign': 600, 'o': 600, 'oacute': 600, 'ocircumflex': 600, 'odieresis': 600, 'oe': 600, 'ogonek': 600, 'ograve': 600, 'one': 600, 'onehalf': 600, 'onequarter': 600, 'onesuperior': 600, 'ordfeminine': 600, 'ordmasculine': 600, 'oslash': 600, 'otilde': 600, 'p': 600, 'paragraph': 600, 'parenleft': 600, 'parenright': 600, 'percent': 600, 'period': 600, 'periodcentered': 600, 'perthousand': 600, 'plus': 600, 'plusminus': 600, 'q': 600, 'question': 600, 'questiondown': 600, 'quotedbl': 600, 'quotedblbase': 600, 'quotedblleft': 600, 'quotedblright': 600, 'quoteleft': 600, 'quoteright': 600, 'quotesinglbase': 600, 'quotesingle': 600, 'r': 600, 'registered': 600, 'ring': 600, 's': 600, 'scaron': 600, 'section': 600, 'semicolon': 600, 'seven': 600, 'six': 600, 'slash': 600, 'space': 600, 'sterling': 600, 't': 600, 'thorn': 600, 'three': 600, 'threequarters': 600, 'threesuperior': 600, 'tilde': 600, 'trademark': 600, 'two': 600, 'twosuperior': 600, 'u': 600, 'uacute': 600, 'ucircumflex': 600, 'udieresis': 600, 'ugrave': 600, 'underscore': 600, 'v': 600, 'w': 600, 'x': 600, 'y': 600, 'yacute': 600, 'ydieresis': 600, 'yen': 600, 'z': 600, 'zcaron': 600, 'zero': 600} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_courier.py0000664000175000017500000000712013544671343026216 0ustar rptlabrptlab00000000000000widths = {'A': 600, 'AE': 600, 'Aacute': 600, 'Acircumflex': 600, 'Adieresis': 600, 'Agrave': 600, 'Aring': 600, 'Atilde': 600, 'B': 600, 'C': 600, 'Ccedilla': 600, 'D': 600, 'E': 600, 'Eacute': 600, 'Ecircumflex': 600, 'Edieresis': 600, 'Egrave': 600, 'Eth': 600, 'Euro': 600, 'F': 600, 'G': 600, 'H': 600, 'I': 600, 'Iacute': 600, 'Icircumflex': 600, 'Idieresis': 600, 'Igrave': 600, 'J': 600, 'K': 600, 'L': 600, 'Lslash': 600, 'M': 600, 'N': 600, 'Ntilde': 600, 'O': 600, 'OE': 600, 'Oacute': 600, 'Ocircumflex': 600, 'Odieresis': 600, 'Ograve': 600, 'Oslash': 600, 'Otilde': 600, 'P': 600, 'Q': 600, 'R': 600, 'S': 600, 'Scaron': 600, 'T': 600, 'Thorn': 600, 'U': 600, 'Uacute': 600, 'Ucircumflex': 600, 'Udieresis': 600, 'Ugrave': 600, 'V': 600, 'W': 600, 'X': 600, 'Y': 600, 'Yacute': 600, 'Ydieresis': 600, 'Z': 600, 'Zcaron': 600, 'a': 600, 'aacute': 600, 'acircumflex': 600, 'acute': 600, 'adieresis': 600, 'ae': 600, 'agrave': 600, 'ampersand': 600, 'aring': 600, 'asciicircum': 600, 'asciitilde': 600, 'asterisk': 600, 'at': 600, 'atilde': 600, 'b': 600, 'backslash': 600, 'bar': 600, 'braceleft': 600, 'braceright': 600, 'bracketleft': 600, 'bracketright': 600, 'breve': 600, 'brokenbar': 600, 'bullet': 600, 'c': 600, 'caron': 600, 'ccedilla': 600, 'cedilla': 600, 'cent': 600, 'circumflex': 600, 'colon': 600, 'comma': 600, 'copyright': 600, 'currency': 600, 'd': 600, 'dagger': 600, 'daggerdbl': 600, 'degree': 600, 'dieresis': 600, 'divide': 600, 'dollar': 600, 'dotaccent': 600, 'dotlessi': 600, 'e': 600, 'eacute': 600, 'ecircumflex': 600, 'edieresis': 600, 'egrave': 600, 'eight': 600, 'ellipsis': 600, 'emdash': 600, 'endash': 600, 'equal': 600, 'eth': 600, 'exclam': 600, 'exclamdown': 600, 'f': 600, 'fi': 600, 'five': 600, 'fl': 600, 'florin': 600, 'four': 600, 'fraction': 600, 'g': 600, 'germandbls': 600, 'grave': 600, 'greater': 600, 'guillemotleft': 600, 'guillemotright': 600, 'guilsinglleft': 600, 'guilsinglright': 600, 'h': 600, 'hungarumlaut': 600, 'hyphen': 600, 'i': 600, 'iacute': 600, 'icircumflex': 600, 'idieresis': 600, 'igrave': 600, 'j': 600, 'k': 600, 'l': 600, 'less': 600, 'logicalnot': 600, 'lslash': 600, 'm': 600, 'macron': 600, 'minus': 600, 'mu': 600, 'multiply': 600, 'n': 600, 'nine': 600, 'ntilde': 600, 'numbersign': 600, 'o': 600, 'oacute': 600, 'ocircumflex': 600, 'odieresis': 600, 'oe': 600, 'ogonek': 600, 'ograve': 600, 'one': 600, 'onehalf': 600, 'onequarter': 600, 'onesuperior': 600, 'ordfeminine': 600, 'ordmasculine': 600, 'oslash': 600, 'otilde': 600, 'p': 600, 'paragraph': 600, 'parenleft': 600, 'parenright': 600, 'percent': 600, 'period': 600, 'periodcentered': 600, 'perthousand': 600, 'plus': 600, 'plusminus': 600, 'q': 600, 'question': 600, 'questiondown': 600, 'quotedbl': 600, 'quotedblbase': 600, 'quotedblleft': 600, 'quotedblright': 600, 'quoteleft': 600, 'quoteright': 600, 'quotesinglbase': 600, 'quotesingle': 600, 'r': 600, 'registered': 600, 'ring': 600, 's': 600, 'scaron': 600, 'section': 600, 'semicolon': 600, 'seven': 600, 'six': 600, 'slash': 600, 'space': 600, 'sterling': 600, 't': 600, 'thorn': 600, 'three': 600, 'threequarters': 600, 'threesuperior': 600, 'tilde': 600, 'trademark': 600, 'two': 600, 'twosuperior': 600, 'u': 600, 'uacute': 600, 'ucircumflex': 600, 'udieresis': 600, 'ugrave': 600, 'underscore': 600, 'v': 600, 'w': 600, 'x': 600, 'y': 600, 'yacute': 600, 'ydieresis': 600, 'yen': 600, 'z': 600, 'zcaron': 600, 'zero': 600} reportlab-3.5.34/src/reportlab/pdfbase/rl_codecs.py0000664000175000017500000015351313544671343023112 0ustar rptlabrptlab00000000000000#codecs support __all__=['RL_Codecs'] from collections import namedtuple import codecs StdCodecData=namedtuple('StdCodecData','exceptions rexceptions') ExtCodecData=namedtuple('ExtCodecData','baseName exceptions rexceptions') class RL_Codecs: __rl_codecs_data = { 'winansi':StdCodecData({ 0x007f: 0x2022, # BULLET 0x0080: 0x20ac, # EURO SIGN 0x0081: 0x2022, # BULLET 0x0082: 0x201a, # SINGLE LOW-9 QUOTATION MARK 0x0083: 0x0192, # LATIN SMALL LETTER F WITH HOOK 0x0084: 0x201e, # DOUBLE LOW-9 QUOTATION MARK 0x0085: 0x2026, # HORIZONTAL ELLIPSIS 0x0086: 0x2020, # DAGGER 0x0087: 0x2021, # DOUBLE DAGGER 0x0088: 0x02c6, # MODIFIER LETTER CIRCUMFLEX ACCENT 0x0089: 0x2030, # PER MILLE SIGN 0x008a: 0x0160, # LATIN CAPITAL LETTER S WITH CARON 0x008b: 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x008c: 0x0152, # LATIN CAPITAL LIGATURE OE 0x008d: 0x2022, # BULLET 0x008e: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON 0x008f: 0x2022, # BULLET 0x0090: 0x2022, # BULLET 0x0091: 0x2018, # LEFT SINGLE QUOTATION MARK 0x0092: 0x2019, # RIGHT SINGLE QUOTATION MARK 0x0093: 0x201c, # LEFT DOUBLE QUOTATION MARK 0x0094: 0x201d, # RIGHT DOUBLE QUOTATION MARK 0x0095: 0x2022, # BULLET 0x0096: 0x2013, # EN DASH 0x0097: 0x2014, # EM DASH 0x0098: 0x02dc, # SMALL TILDE 0x0099: 0x2122, # TRADE MARK SIGN 0x009a: 0x0161, # LATIN SMALL LETTER S WITH CARON 0x009b: 0x203a, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x009c: 0x0153, # LATIN SMALL LIGATURE OE 0x009d: 0x2022, # BULLET 0x009e: 0x017e, # LATIN SMALL LETTER Z WITH CARON 0x009f: 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS 0x00a0: 0x0020, # SPACE }, {0x2022:0x7f,0x20:0x20,0xa0:0x20}), 'macroman':StdCodecData({ 0x007f: None, # UNDEFINED 0x0080: 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS 0x0081: 0x00c5, # LATIN CAPITAL LETTER A WITH RING ABOVE 0x0082: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA 0x0083: 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE 0x0084: 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE 0x0085: 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS 0x0086: 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS 0x0087: 0x00e1, # LATIN SMALL LETTER A WITH ACUTE 0x0088: 0x00e0, # LATIN SMALL LETTER A WITH GRAVE 0x0089: 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX 0x008a: 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS 0x008b: 0x00e3, # LATIN SMALL LETTER A WITH TILDE 0x008c: 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE 0x008d: 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA 0x008e: 0x00e9, # LATIN SMALL LETTER E WITH ACUTE 0x008f: 0x00e8, # LATIN SMALL LETTER E WITH GRAVE 0x0090: 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX 0x0091: 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS 0x0092: 0x00ed, # LATIN SMALL LETTER I WITH ACUTE 0x0093: 0x00ec, # LATIN SMALL LETTER I WITH GRAVE 0x0094: 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX 0x0095: 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS 0x0096: 0x00f1, # LATIN SMALL LETTER N WITH TILDE 0x0097: 0x00f3, # LATIN SMALL LETTER O WITH ACUTE 0x0098: 0x00f2, # LATIN SMALL LETTER O WITH GRAVE 0x0099: 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX 0x009a: 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS 0x009b: 0x00f5, # LATIN SMALL LETTER O WITH TILDE 0x009c: 0x00fa, # LATIN SMALL LETTER U WITH ACUTE 0x009d: 0x00f9, # LATIN SMALL LETTER U WITH GRAVE 0x009e: 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX 0x009f: 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS 0x00a0: 0x2020, # DAGGER 0x00a1: 0x00b0, # DEGREE SIGN 0x00a4: 0x00a7, # SECTION SIGN 0x00a5: 0x2022, # BULLET 0x00a6: 0x00b6, # PILCROW SIGN 0x00a7: 0x00df, # LATIN SMALL LETTER SHARP S 0x00a8: 0x00ae, # REGISTERED SIGN 0x00aa: 0x2122, # TRADE MARK SIGN 0x00ab: 0x00b4, # ACUTE ACCENT 0x00ac: 0x00a8, # DIAERESIS 0x00ad: None, # UNDEFINED 0x00ae: 0x00c6, # LATIN CAPITAL LETTER AE 0x00af: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE 0x00b0: None, # UNDEFINED 0x00b2: None, # UNDEFINED 0x00b3: None, # UNDEFINED 0x00b4: 0x00a5, # YEN SIGN 0x00b6: None, # UNDEFINED 0x00b7: None, # UNDEFINED 0x00b8: None, # UNDEFINED 0x00b9: None, # UNDEFINED 0x00ba: None, # UNDEFINED 0x00bb: 0x00aa, # FEMININE ORDINAL INDICATOR 0x00bc: 0x00ba, # MASCULINE ORDINAL INDICATOR 0x00bd: None, # UNDEFINED 0x00be: 0x00e6, # LATIN SMALL LETTER AE 0x00bf: 0x00f8, # LATIN SMALL LETTER O WITH STROKE 0x00c0: 0x00bf, # INVERTED QUESTION MARK 0x00c1: 0x00a1, # INVERTED EXCLAMATION MARK 0x00c2: 0x00ac, # NOT SIGN 0x00c3: None, # UNDEFINED 0x00c4: 0x0192, # LATIN SMALL LETTER F WITH HOOK 0x00c5: None, # UNDEFINED 0x00c6: None, # UNDEFINED 0x00c7: 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0x00c8: 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x00c9: 0x2026, # HORIZONTAL ELLIPSIS 0x00ca: 0x0020, # SPACE 0x00cb: 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE 0x00cc: 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE 0x00cd: 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE 0x00ce: 0x0152, # LATIN CAPITAL LIGATURE OE 0x00cf: 0x0153, # LATIN SMALL LIGATURE OE 0x00d0: 0x2013, # EN DASH 0x00d1: 0x2014, # EM DASH 0x00d2: 0x201c, # LEFT DOUBLE QUOTATION MARK 0x00d3: 0x201d, # RIGHT DOUBLE QUOTATION MARK 0x00d4: 0x2018, # LEFT SINGLE QUOTATION MARK 0x00d5: 0x2019, # RIGHT SINGLE QUOTATION MARK 0x00d6: 0x00f7, # DIVISION SIGN 0x00d7: None, # UNDEFINED 0x00d8: 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS 0x00d9: 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS 0x00da: 0x2044, # FRACTION SLASH 0x00db: 0x00a4, # CURRENCY SIGN 0x00dc: 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x00dd: 0x203a, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x00de: 0xfb01, # LATIN SMALL LIGATURE FI 0x00df: 0xfb02, # LATIN SMALL LIGATURE FL 0x00e0: 0x2021, # DOUBLE DAGGER 0x00e1: 0x00b7, # MIDDLE DOT 0x00e2: 0x201a, # SINGLE LOW-9 QUOTATION MARK 0x00e3: 0x201e, # DOUBLE LOW-9 QUOTATION MARK 0x00e4: 0x2030, # PER MILLE SIGN 0x00e5: 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 0x00e6: 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 0x00e7: 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE 0x00e8: 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS 0x00e9: 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE 0x00ea: 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE 0x00eb: 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 0x00ec: 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS 0x00ed: 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE 0x00ee: 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE 0x00ef: 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 0x00f0: None, # UNDEFINED 0x00f1: 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE 0x00f2: 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE 0x00f3: 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 0x00f4: 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE 0x00f5: 0x0131, # LATIN SMALL LETTER DOTLESS I 0x00f6: 0x02c6, # MODIFIER LETTER CIRCUMFLEX ACCENT 0x00f7: 0x02dc, # SMALL TILDE 0x00f8: 0x00af, # MACRON 0x00f9: 0x02d8, # BREVE 0x00fa: 0x02d9, # DOT ABOVE 0x00fb: 0x02da, # RING ABOVE 0x00fc: 0x00b8, # CEDILLA 0x00fd: 0x02dd, # DOUBLE ACUTE ACCENT 0x00fe: 0x02db, # OGONEK 0x00ff: 0x02c7, # CARON },None), 'standard':StdCodecData({ 0x0027: 0x2019, # RIGHT SINGLE QUOTATION MARK 0x0060: 0x2018, # LEFT SINGLE QUOTATION MARK 0x007f: None, # UNDEFINED 0x0080: None, # UNDEFINED 0x0081: None, # UNDEFINED 0x0082: None, # UNDEFINED 0x0083: None, # UNDEFINED 0x0084: None, # UNDEFINED 0x0085: None, # UNDEFINED 0x0086: None, # UNDEFINED 0x0087: None, # UNDEFINED 0x0088: None, # UNDEFINED 0x0089: None, # UNDEFINED 0x008a: None, # UNDEFINED 0x008b: None, # UNDEFINED 0x008c: None, # UNDEFINED 0x008d: None, # UNDEFINED 0x008e: None, # UNDEFINED 0x008f: None, # UNDEFINED 0x0090: None, # UNDEFINED 0x0091: None, # UNDEFINED 0x0092: None, # UNDEFINED 0x0093: None, # UNDEFINED 0x0094: None, # UNDEFINED 0x0095: None, # UNDEFINED 0x0096: None, # UNDEFINED 0x0097: None, # UNDEFINED 0x0098: None, # UNDEFINED 0x0099: None, # UNDEFINED 0x009a: None, # UNDEFINED 0x009b: None, # UNDEFINED 0x009c: None, # UNDEFINED 0x009d: None, # UNDEFINED 0x009e: None, # UNDEFINED 0x009f: None, # UNDEFINED 0x00a0: None, # UNDEFINED 0x00a4: 0x2044, # FRACTION SLASH 0x00a6: 0x0192, # LATIN SMALL LETTER F WITH HOOK 0x00a8: 0x00a4, # CURRENCY SIGN 0x00a9: 0x0027, # APOSTROPHE 0x00aa: 0x201c, # LEFT DOUBLE QUOTATION MARK 0x00ac: 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x00ad: 0x203a, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x00ae: 0xfb01, # LATIN SMALL LIGATURE FI 0x00af: 0xfb02, # LATIN SMALL LIGATURE FL 0x00b0: None, # UNDEFINED 0x00b1: 0x2013, # EN DASH 0x00b2: 0x2020, # DAGGER 0x00b3: 0x2021, # DOUBLE DAGGER 0x00b4: 0x00b7, # MIDDLE DOT 0x00b5: None, # UNDEFINED 0x00b7: 0x2022, # BULLET 0x00b8: 0x201a, # SINGLE LOW-9 QUOTATION MARK 0x00b9: 0x201e, # DOUBLE LOW-9 QUOTATION MARK 0x00ba: 0x201d, # RIGHT DOUBLE QUOTATION MARK 0x00bc: 0x2026, # HORIZONTAL ELLIPSIS 0x00bd: 0x2030, # PER MILLE SIGN 0x00be: None, # UNDEFINED 0x00c0: None, # UNDEFINED 0x00c1: 0x0060, # GRAVE ACCENT 0x00c2: 0x00b4, # ACUTE ACCENT 0x00c3: 0x02c6, # MODIFIER LETTER CIRCUMFLEX ACCENT 0x00c4: 0x02dc, # SMALL TILDE 0x00c5: 0x00af, # MACRON 0x00c6: 0x02d8, # BREVE 0x00c7: 0x02d9, # DOT ABOVE 0x00c8: 0x00a8, # DIAERESIS 0x00c9: None, # UNDEFINED 0x00ca: 0x02da, # RING ABOVE 0x00cb: 0x00b8, # CEDILLA 0x00cc: None, # UNDEFINED 0x00cd: 0x02dd, # DOUBLE ACUTE ACCENT 0x00ce: 0x02db, # OGONEK 0x00cf: 0x02c7, # CARON 0x00d0: 0x2014, # EM DASH 0x00d1: None, # UNDEFINED 0x00d2: None, # UNDEFINED 0x00d3: None, # UNDEFINED 0x00d4: None, # UNDEFINED 0x00d5: None, # UNDEFINED 0x00d6: None, # UNDEFINED 0x00d7: None, # UNDEFINED 0x00d8: None, # UNDEFINED 0x00d9: None, # UNDEFINED 0x00da: None, # UNDEFINED 0x00db: None, # UNDEFINED 0x00dc: None, # UNDEFINED 0x00dd: None, # UNDEFINED 0x00de: None, # UNDEFINED 0x00df: None, # UNDEFINED 0x00e0: None, # UNDEFINED 0x00e1: 0x00c6, # LATIN CAPITAL LETTER AE 0x00e2: None, # UNDEFINED 0x00e3: 0x00aa, # FEMININE ORDINAL INDICATOR 0x00e4: None, # UNDEFINED 0x00e5: None, # UNDEFINED 0x00e6: None, # UNDEFINED 0x00e7: None, # UNDEFINED 0x00e8: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE 0x00e9: 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE 0x00ea: 0x0152, # LATIN CAPITAL LIGATURE OE 0x00eb: 0x00ba, # MASCULINE ORDINAL INDICATOR 0x00ec: None, # UNDEFINED 0x00ed: None, # UNDEFINED 0x00ee: None, # UNDEFINED 0x00ef: None, # UNDEFINED 0x00f0: None, # UNDEFINED 0x00f1: 0x00e6, # LATIN SMALL LETTER AE 0x00f2: None, # UNDEFINED 0x00f3: None, # UNDEFINED 0x00f4: None, # UNDEFINED 0x00f5: 0x0131, # LATIN SMALL LETTER DOTLESS I 0x00f6: None, # UNDEFINED 0x00f7: None, # UNDEFINED 0x00f8: 0x0142, # LATIN SMALL LETTER L WITH STROKE 0x00f9: 0x00f8, # LATIN SMALL LETTER O WITH STROKE 0x00fa: 0x0153, # LATIN SMALL LIGATURE OE 0x00fb: 0x00df, # LATIN SMALL LETTER SHARP S 0x00fc: None, # UNDEFINED 0x00fd: None, # UNDEFINED 0x00fe: None, # UNDEFINED 0x00ff: None, # UNDEFINED },None), 'symbol':StdCodecData({ 0x0022: 0x2200, # FOR ALL 0x0024: 0x2203, # THERE EXISTS 0x0027: 0x220b, # CONTAINS AS MEMBER 0x002a: 0x2217, # ASTERISK OPERATOR 0x002d: 0x2212, # MINUS SIGN 0x0040: 0x2245, # APPROXIMATELY EQUAL TO 0x0041: 0x0391, # GREEK CAPITAL LETTER ALPHA 0x0042: 0x0392, # GREEK CAPITAL LETTER BETA 0x0043: 0x03a7, # GREEK CAPITAL LETTER CHI 0x0044: 0x2206, # INCREMENT 0x0045: 0x0395, # GREEK CAPITAL LETTER EPSILON 0x0046: 0x03a6, # GREEK CAPITAL LETTER PHI 0x0047: 0x0393, # GREEK CAPITAL LETTER GAMMA 0x0048: 0x0397, # GREEK CAPITAL LETTER ETA 0x0049: 0x0399, # GREEK CAPITAL LETTER IOTA 0x004a: 0x03d1, # GREEK THETA SYMBOL 0x004b: 0x039a, # GREEK CAPITAL LETTER KAPPA 0x004c: 0x039b, # GREEK CAPITAL LETTER LAMDA 0x004d: 0x039c, # GREEK CAPITAL LETTER MU 0x004e: 0x039d, # GREEK CAPITAL LETTER NU 0x004f: 0x039f, # GREEK CAPITAL LETTER OMICRON 0x0050: 0x03a0, # GREEK CAPITAL LETTER PI 0x0051: 0x0398, # GREEK CAPITAL LETTER THETA 0x0052: 0x03a1, # GREEK CAPITAL LETTER RHO 0x0053: 0x03a3, # GREEK CAPITAL LETTER SIGMA 0x0054: 0x03a4, # GREEK CAPITAL LETTER TAU 0x0055: 0x03a5, # GREEK CAPITAL LETTER UPSILON 0x0056: 0x03c2, # GREEK SMALL LETTER FINAL SIGMA 0x0057: 0x2126, # OHM SIGN 0x0058: 0x039e, # GREEK CAPITAL LETTER XI 0x0059: 0x03a8, # GREEK CAPITAL LETTER PSI 0x005a: 0x0396, # GREEK CAPITAL LETTER ZETA 0x005c: 0x2234, # THEREFORE 0x005e: 0x22a5, # UP TACK 0x0060: 0xf8e5, # [unknown unicode name for radicalex] 0x0061: 0x03b1, # GREEK SMALL LETTER ALPHA 0x0062: 0x03b2, # GREEK SMALL LETTER BETA 0x0063: 0x03c7, # GREEK SMALL LETTER CHI 0x0064: 0x03b4, # GREEK SMALL LETTER DELTA 0x0065: 0x03b5, # GREEK SMALL LETTER EPSILON 0x0066: 0x03c6, # GREEK SMALL LETTER PHI 0x0067: 0x03b3, # GREEK SMALL LETTER GAMMA 0x0068: 0x03b7, # GREEK SMALL LETTER ETA 0x0069: 0x03b9, # GREEK SMALL LETTER IOTA 0x006a: 0x03d5, # GREEK PHI SYMBOL 0x006b: 0x03ba, # GREEK SMALL LETTER KAPPA 0x006c: 0x03bb, # GREEK SMALL LETTER LAMDA 0x006d: 0x00b5, # MICRO SIGN 0x006e: 0x03bd, # GREEK SMALL LETTER NU 0x006f: 0x03bf, # GREEK SMALL LETTER OMICRON 0x0070: 0x03c0, # GREEK SMALL LETTER PI 0x0071: 0x03b8, # GREEK SMALL LETTER THETA 0x0072: 0x03c1, # GREEK SMALL LETTER RHO 0x0073: 0x03c3, # GREEK SMALL LETTER SIGMA 0x0074: 0x03c4, # GREEK SMALL LETTER TAU 0x0075: 0x03c5, # GREEK SMALL LETTER UPSILON 0x0076: 0x03d6, # GREEK PI SYMBOL 0x0077: 0x03c9, # GREEK SMALL LETTER OMEGA 0x0078: 0x03be, # GREEK SMALL LETTER XI 0x0079: 0x03c8, # GREEK SMALL LETTER PSI 0x007a: 0x03b6, # GREEK SMALL LETTER ZETA 0x007e: 0x223c, # TILDE OPERATOR 0x007f: None, # UNDEFINED 0x0080: None, # UNDEFINED 0x0081: None, # UNDEFINED 0x0082: None, # UNDEFINED 0x0083: None, # UNDEFINED 0x0084: None, # UNDEFINED 0x0085: None, # UNDEFINED 0x0086: None, # UNDEFINED 0x0087: None, # UNDEFINED 0x0088: None, # UNDEFINED 0x0089: None, # UNDEFINED 0x008a: None, # UNDEFINED 0x008b: None, # UNDEFINED 0x008c: None, # UNDEFINED 0x008d: None, # UNDEFINED 0x008e: None, # UNDEFINED 0x008f: None, # UNDEFINED 0x0090: None, # UNDEFINED 0x0091: None, # UNDEFINED 0x0092: None, # UNDEFINED 0x0093: None, # UNDEFINED 0x0094: None, # UNDEFINED 0x0095: None, # UNDEFINED 0x0096: None, # UNDEFINED 0x0097: None, # UNDEFINED 0x0098: None, # UNDEFINED 0x0099: None, # UNDEFINED 0x009a: None, # UNDEFINED 0x009b: None, # UNDEFINED 0x009c: None, # UNDEFINED 0x009d: None, # UNDEFINED 0x009e: None, # UNDEFINED 0x009f: None, # UNDEFINED 0x00a0: 0x20ac, # EURO SIGN 0x00a1: 0x03d2, # GREEK UPSILON WITH HOOK SYMBOL 0x00a2: 0x2032, # PRIME 0x00a3: 0x2264, # LESS-THAN OR EQUAL TO 0x00a4: 0x2044, # FRACTION SLASH 0x00a5: 0x221e, # INFINITY 0x00a6: 0x0192, # LATIN SMALL LETTER F WITH HOOK 0x00a7: 0x2663, # BLACK CLUB SUIT 0x00a8: 0x2666, # BLACK DIAMOND SUIT 0x00a9: 0x2665, # BLACK HEART SUIT 0x00aa: 0x2660, # BLACK SPADE SUIT 0x00ab: 0x2194, # LEFT RIGHT ARROW 0x00ac: 0x2190, # LEFTWARDS ARROW 0x00ad: 0x2191, # UPWARDS ARROW 0x00ae: 0x2192, # RIGHTWARDS ARROW 0x00af: 0x2193, # DOWNWARDS ARROW 0x00b2: 0x2033, # DOUBLE PRIME 0x00b3: 0x2265, # GREATER-THAN OR EQUAL TO 0x00b4: 0x00d7, # MULTIPLICATION SIGN 0x00b5: 0x221d, # PROPORTIONAL TO 0x00b6: 0x2202, # PARTIAL DIFFERENTIAL 0x00b7: 0x2022, # BULLET 0x00b8: 0x00f7, # DIVISION SIGN 0x00b9: 0x2260, # NOT EQUAL TO 0x00ba: 0x2261, # IDENTICAL TO 0x00bb: 0x2248, # ALMOST EQUAL TO 0x00bc: 0x2026, # HORIZONTAL ELLIPSIS 0x00bd: 0xf8e6, # [unknown unicode name for arrowvertex] 0x00be: 0xf8e7, # [unknown unicode name for arrowhorizex] 0x00bf: 0x21b5, # DOWNWARDS ARROW WITH CORNER LEFTWARDS 0x00c0: 0x2135, # ALEF SYMBOL 0x00c1: 0x2111, # BLACK-LETTER CAPITAL I 0x00c2: 0x211c, # BLACK-LETTER CAPITAL R 0x00c3: 0x2118, # SCRIPT CAPITAL P 0x00c4: 0x2297, # CIRCLED TIMES 0x00c5: 0x2295, # CIRCLED PLUS 0x00c6: 0x2205, # EMPTY SET 0x00c7: 0x2229, # INTERSECTION 0x00c8: 0x222a, # UNION 0x00c9: 0x2283, # SUPERSET OF 0x00ca: 0x2287, # SUPERSET OF OR EQUAL TO 0x00cb: 0x2284, # NOT A SUBSET OF 0x00cc: 0x2282, # SUBSET OF 0x00cd: 0x2286, # SUBSET OF OR EQUAL TO 0x00ce: 0x2208, # ELEMENT OF 0x00cf: 0x2209, # NOT AN ELEMENT OF 0x00d0: 0x2220, # ANGLE 0x00d1: 0x2207, # NABLA 0x00d2: 0xf6da, # [unknown unicode name for registerserif] 0x00d3: 0xf6d9, # [unknown unicode name for copyrightserif] 0x00d4: 0xf6db, # [unknown unicode name for trademarkserif] 0x00d5: 0x220f, # N-ARY PRODUCT 0x00d6: 0x221a, # SQUARE ROOT 0x00d7: 0x22c5, # DOT OPERATOR 0x00d8: 0x00ac, # NOT SIGN 0x00d9: 0x2227, # LOGICAL AND 0x00da: 0x2228, # LOGICAL OR 0x00db: 0x21d4, # LEFT RIGHT DOUBLE ARROW 0x00dc: 0x21d0, # LEFTWARDS DOUBLE ARROW 0x00dd: 0x21d1, # UPWARDS DOUBLE ARROW 0x00de: 0x21d2, # RIGHTWARDS DOUBLE ARROW 0x00df: 0x21d3, # DOWNWARDS DOUBLE ARROW 0x00e0: 0x25ca, # LOZENGE 0x00e1: 0x2329, # LEFT-POINTING ANGLE BRACKET 0x00e2: 0xf8e8, # [unknown unicode name for registersans] 0x00e3: 0xf8e9, # [unknown unicode name for copyrightsans] 0x00e4: 0xf8ea, # [unknown unicode name for trademarksans] 0x00e5: 0x2211, # N-ARY SUMMATION 0x00e6: 0xf8eb, # [unknown unicode name for parenlefttp] 0x00e7: 0xf8ec, # [unknown unicode name for parenleftex] 0x00e8: 0xf8ed, # [unknown unicode name for parenleftbt] 0x00e9: 0xf8ee, # [unknown unicode name for bracketlefttp] 0x00ea: 0xf8ef, # [unknown unicode name for bracketleftex] 0x00eb: 0xf8f0, # [unknown unicode name for bracketleftbt] 0x00ec: 0xf8f1, # [unknown unicode name for bracelefttp] 0x00ed: 0xf8f2, # [unknown unicode name for braceleftmid] 0x00ee: 0xf8f3, # [unknown unicode name for braceleftbt] 0x00ef: 0xf8f4, # [unknown unicode name for braceex] 0x00f0: None, # UNDEFINED 0x00f1: 0x232a, # RIGHT-POINTING ANGLE BRACKET 0x00f2: 0x222b, # INTEGRAL 0x00f3: 0x2320, # TOP HALF INTEGRAL 0x00f4: 0xf8f5, # [unknown unicode name for integralex] 0x00f5: 0x2321, # BOTTOM HALF INTEGRAL 0x00f6: 0xf8f6, # [unknown unicode name for parenrighttp] 0x00f7: 0xf8f7, # [unknown unicode name for parenrightex] 0x00f8: 0xf8f8, # [unknown unicode name for parenrightbt] 0x00f9: 0xf8f9, # [unknown unicode name for bracketrighttp] 0x00fa: 0xf8fa, # [unknown unicode name for bracketrightex] 0x00fb: 0xf8fb, # [unknown unicode name for bracketrightbt] 0x00fc: 0xf8fc, # [unknown unicode name for bracerighttp] 0x00fd: 0xf8fd, # [unknown unicode name for bracerightmid] 0x00fe: 0xf8fe, # [unknown unicode name for bracerightbt] 0x00ff: None, # UNDEFINED }, { 0x0394:0x0044, # GREEK CAPITAL LETTER DELTA 0x03a9:0x0057, # GREEK CAPITAL LETTER OMEGA 0x03bc:0x006d, # GREEK SMALL LETTER MU } ), 'zapfdingbats':StdCodecData({ 0x0021: 0x2701, # UPPER BLADE SCISSORS 0x0022: 0x2702, # BLACK SCISSORS 0x0023: 0x2703, # LOWER BLADE SCISSORS 0x0024: 0x2704, # WHITE SCISSORS 0x0025: 0x260e, # BLACK TELEPHONE 0x0026: 0x2706, # TELEPHONE LOCATION SIGN 0x0027: 0x2707, # TAPE DRIVE 0x0028: 0x2708, # AIRPLANE 0x0029: 0x2709, # ENVELOPE 0x002a: 0x261b, # BLACK RIGHT POINTING INDEX 0x002b: 0x261e, # WHITE RIGHT POINTING INDEX 0x002c: 0x270c, # VICTORY HAND 0x002d: 0x270d, # WRITING HAND 0x002e: 0x270e, # LOWER RIGHT PENCIL 0x002f: 0x270f, # PENCIL 0x0030: 0x2710, # UPPER RIGHT PENCIL 0x0031: 0x2711, # WHITE NIB 0x0032: 0x2712, # BLACK NIB 0x0033: 0x2713, # CHECK MARK 0x0034: 0x2714, # HEAVY CHECK MARK 0x0035: 0x2715, # MULTIPLICATION X 0x0036: 0x2716, # HEAVY MULTIPLICATION X 0x0037: 0x2717, # BALLOT X 0x0038: 0x2718, # HEAVY BALLOT X 0x0039: 0x2719, # OUTLINED GREEK CROSS 0x003a: 0x271a, # HEAVY GREEK CROSS 0x003b: 0x271b, # OPEN CENTRE CROSS 0x003c: 0x271c, # HEAVY OPEN CENTRE CROSS 0x003d: 0x271d, # LATIN CROSS 0x003e: 0x271e, # SHADOWED WHITE LATIN CROSS 0x003f: 0x271f, # OUTLINED LATIN CROSS 0x0040: 0x2720, # MALTESE CROSS 0x0041: 0x2721, # STAR OF DAVID 0x0042: 0x2722, # FOUR TEARDROP-SPOKED ASTERISK 0x0043: 0x2723, # FOUR BALLOON-SPOKED ASTERISK 0x0044: 0x2724, # HEAVY FOUR BALLOON-SPOKED ASTERISK 0x0045: 0x2725, # FOUR CLUB-SPOKED ASTERISK 0x0046: 0x2726, # BLACK FOUR POINTED STAR 0x0047: 0x2727, # WHITE FOUR POINTED STAR 0x0048: 0x2605, # BLACK STAR 0x0049: 0x2729, # STRESS OUTLINED WHITE STAR 0x004a: 0x272a, # CIRCLED WHITE STAR 0x004b: 0x272b, # OPEN CENTRE BLACK STAR 0x004c: 0x272c, # BLACK CENTRE WHITE STAR 0x004d: 0x272d, # OUTLINED BLACK STAR 0x004e: 0x272e, # HEAVY OUTLINED BLACK STAR 0x004f: 0x272f, # PINWHEEL STAR 0x0050: 0x2730, # SHADOWED WHITE STAR 0x0051: 0x2731, # HEAVY ASTERISK 0x0052: 0x2732, # OPEN CENTRE ASTERISK 0x0053: 0x2733, # EIGHT SPOKED ASTERISK 0x0054: 0x2734, # EIGHT POINTED BLACK STAR 0x0055: 0x2735, # EIGHT POINTED PINWHEEL STAR 0x0056: 0x2736, # SIX POINTED BLACK STAR 0x0057: 0x2737, # EIGHT POINTED RECTILINEAR BLACK STAR 0x0058: 0x2738, # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR 0x0059: 0x2739, # TWELVE POINTED BLACK STAR 0x005a: 0x273a, # SIXTEEN POINTED ASTERISK 0x005b: 0x273b, # TEARDROP-SPOKED ASTERISK 0x005c: 0x273c, # OPEN CENTRE TEARDROP-SPOKED ASTERISK 0x005d: 0x273d, # HEAVY TEARDROP-SPOKED ASTERISK 0x005e: 0x273e, # SIX PETALLED BLACK AND WHITE FLORETTE 0x005f: 0x273f, # BLACK FLORETTE 0x0060: 0x2740, # WHITE FLORETTE 0x0061: 0x2741, # EIGHT PETALLED OUTLINED BLACK FLORETTE 0x0062: 0x2742, # CIRCLED OPEN CENTRE EIGHT POINTED STAR 0x0063: 0x2743, # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK 0x0064: 0x2744, # SNOWFLAKE 0x0065: 0x2745, # TIGHT TRIFOLIATE SNOWFLAKE 0x0066: 0x2746, # HEAVY CHEVRON SNOWFLAKE 0x0067: 0x2747, # SPARKLE 0x0068: 0x2748, # HEAVY SPARKLE 0x0069: 0x2749, # BALLOON-SPOKED ASTERISK 0x006a: 0x274a, # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK 0x006b: 0x274b, # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK 0x006c: 0x25cf, # BLACK CIRCLE 0x006d: 0x274d, # SHADOWED WHITE CIRCLE 0x006e: 0x25a0, # BLACK SQUARE 0x006f: 0x274f, # LOWER RIGHT DROP-SHADOWED WHITE SQUARE 0x0070: 0x2750, # UPPER RIGHT DROP-SHADOWED WHITE SQUARE 0x0071: 0x2751, # LOWER RIGHT SHADOWED WHITE SQUARE 0x0072: 0x2752, # UPPER RIGHT SHADOWED WHITE SQUARE 0x0073: 0x25b2, # BLACK UP-POINTING TRIANGLE 0x0074: 0x25bc, # BLACK DOWN-POINTING TRIANGLE 0x0075: 0x25c6, # BLACK DIAMOND 0x0076: 0x2756, # BLACK DIAMOND MINUS WHITE X 0x0077: 0x25d7, # RIGHT HALF BLACK CIRCLE 0x0078: 0x2758, # LIGHT VERTICAL BAR 0x0079: 0x2759, # MEDIUM VERTICAL BAR 0x007a: 0x275a, # HEAVY VERTICAL BAR 0x007b: 0x275b, # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT 0x007c: 0x275c, # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT 0x007d: 0x275d, # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT 0x007e: 0x275e, # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT 0x007f: None, # UNDEFINED 0x0080: 0x2768, # MEDIUM LEFT PARENTHESIS ORNAMENT 0x0081: 0x2769, # MEDIUM RIGHT PARENTHESIS ORNAMENT 0x0082: 0x276a, # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT 0x0083: 0x276b, # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT 0x0084: 0x276c, # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT 0x0085: 0x276d, # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT 0x0086: 0x276e, # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT 0x0087: 0x276f, # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT 0x0088: 0x2770, # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT 0x0089: 0x2771, # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT 0x008a: 0x2772, # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT 0x008b: 0x2773, # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT 0x008c: 0x2774, # MEDIUM LEFT CURLY BRACKET ORNAMENT 0x008d: 0x2775, # MEDIUM RIGHT CURLY BRACKET ORNAMENT 0x008e: None, # UNDEFINED 0x008f: None, # UNDEFINED 0x0090: None, # UNDEFINED 0x0091: None, # UNDEFINED 0x0092: None, # UNDEFINED 0x0093: None, # UNDEFINED 0x0094: None, # UNDEFINED 0x0095: None, # UNDEFINED 0x0096: None, # UNDEFINED 0x0097: None, # UNDEFINED 0x0098: None, # UNDEFINED 0x0099: None, # UNDEFINED 0x009a: None, # UNDEFINED 0x009b: None, # UNDEFINED 0x009c: None, # UNDEFINED 0x009d: None, # UNDEFINED 0x009e: None, # UNDEFINED 0x009f: None, # UNDEFINED 0x00a0: None, # UNDEFINED 0x00a1: 0x2761, # CURVED STEM PARAGRAPH SIGN ORNAMENT 0x00a2: 0x2762, # HEAVY EXCLAMATION MARK ORNAMENT 0x00a3: 0x2763, # HEAVY HEART EXCLAMATION MARK ORNAMENT 0x00a4: 0x2764, # HEAVY BLACK HEART 0x00a5: 0x2765, # ROTATED HEAVY BLACK HEART BULLET 0x00a6: 0x2766, # FLORAL HEART 0x00a7: 0x2767, # ROTATED FLORAL HEART BULLET 0x00a8: 0x2663, # BLACK CLUB SUIT 0x00a9: 0x2666, # BLACK DIAMOND SUIT 0x00aa: 0x2665, # BLACK HEART SUIT 0x00ab: 0x2660, # BLACK SPADE SUIT 0x00ac: 0x2460, # CIRCLED DIGIT ONE 0x00ad: 0x2461, # CIRCLED DIGIT TWO 0x00ae: 0x2462, # CIRCLED DIGIT THREE 0x00af: 0x2463, # CIRCLED DIGIT FOUR 0x00b0: 0x2464, # CIRCLED DIGIT FIVE 0x00b1: 0x2465, # CIRCLED DIGIT SIX 0x00b2: 0x2466, # CIRCLED DIGIT SEVEN 0x00b3: 0x2467, # CIRCLED DIGIT EIGHT 0x00b4: 0x2468, # CIRCLED DIGIT NINE 0x00b5: 0x2469, # CIRCLED NUMBER TEN 0x00b6: 0x2776, # DINGBAT NEGATIVE CIRCLED DIGIT ONE 0x00b7: 0x2777, # DINGBAT NEGATIVE CIRCLED DIGIT TWO 0x00b8: 0x2778, # DINGBAT NEGATIVE CIRCLED DIGIT THREE 0x00b9: 0x2779, # DINGBAT NEGATIVE CIRCLED DIGIT FOUR 0x00ba: 0x277a, # DINGBAT NEGATIVE CIRCLED DIGIT FIVE 0x00bb: 0x277b, # DINGBAT NEGATIVE CIRCLED DIGIT SIX 0x00bc: 0x277c, # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN 0x00bd: 0x277d, # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT 0x00be: 0x277e, # DINGBAT NEGATIVE CIRCLED DIGIT NINE 0x00bf: 0x277f, # DINGBAT NEGATIVE CIRCLED NUMBER TEN 0x00c0: 0x2780, # DINGBAT CIRCLED SANS-SERIF DIGIT ONE 0x00c1: 0x2781, # DINGBAT CIRCLED SANS-SERIF DIGIT TWO 0x00c2: 0x2782, # DINGBAT CIRCLED SANS-SERIF DIGIT THREE 0x00c3: 0x2783, # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR 0x00c4: 0x2784, # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE 0x00c5: 0x2785, # DINGBAT CIRCLED SANS-SERIF DIGIT SIX 0x00c6: 0x2786, # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN 0x00c7: 0x2787, # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT 0x00c8: 0x2788, # DINGBAT CIRCLED SANS-SERIF DIGIT NINE 0x00c9: 0x2789, # DINGBAT CIRCLED SANS-SERIF NUMBER TEN 0x00ca: 0x278a, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE 0x00cb: 0x278b, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO 0x00cc: 0x278c, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE 0x00cd: 0x278d, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR 0x00ce: 0x278e, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE 0x00cf: 0x278f, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX 0x00d0: 0x2790, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN 0x00d1: 0x2791, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT 0x00d2: 0x2792, # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE 0x00d3: 0x2793, # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN 0x00d4: 0x2794, # HEAVY WIDE-HEADED RIGHTWARDS ARROW 0x00d5: 0x2192, # RIGHTWARDS ARROW 0x00d6: 0x2194, # LEFT RIGHT ARROW 0x00d7: 0x2195, # UP DOWN ARROW 0x00d8: 0x2798, # HEAVY SOUTH EAST ARROW 0x00d9: 0x2799, # HEAVY RIGHTWARDS ARROW 0x00da: 0x279a, # HEAVY NORTH EAST ARROW 0x00db: 0x279b, # DRAFTING POINT RIGHTWARDS ARROW 0x00dc: 0x279c, # HEAVY ROUND-TIPPED RIGHTWARDS ARROW 0x00dd: 0x279d, # TRIANGLE-HEADED RIGHTWARDS ARROW 0x00de: 0x279e, # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW 0x00df: 0x279f, # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW 0x00e0: 0x27a0, # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW 0x00e1: 0x27a1, # BLACK RIGHTWARDS ARROW 0x00e2: 0x27a2, # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD 0x00e3: 0x27a3, # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD 0x00e4: 0x27a4, # BLACK RIGHTWARDS ARROWHEAD 0x00e5: 0x27a5, # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW 0x00e6: 0x27a6, # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW 0x00e7: 0x27a7, # SQUAT BLACK RIGHTWARDS ARROW 0x00e8: 0x27a8, # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW 0x00e9: 0x27a9, # RIGHT-SHADED WHITE RIGHTWARDS ARROW 0x00ea: 0x27aa, # LEFT-SHADED WHITE RIGHTWARDS ARROW 0x00eb: 0x27ab, # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW 0x00ec: 0x27ac, # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW 0x00ed: 0x27ad, # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 0x00ee: 0x27ae, # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 0x00ef: 0x27af, # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 0x00f0: None, # UNDEFINED 0x00f1: 0x27b1, # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW 0x00f2: 0x27b2, # CIRCLED HEAVY WHITE RIGHTWARDS ARROW 0x00f3: 0x27b3, # WHITE-FEATHERED RIGHTWARDS ARROW 0x00f4: 0x27b4, # BLACK-FEATHERED SOUTH EAST ARROW 0x00f5: 0x27b5, # BLACK-FEATHERED RIGHTWARDS ARROW 0x00f6: 0x27b6, # BLACK-FEATHERED NORTH EAST ARROW 0x00f7: 0x27b7, # HEAVY BLACK-FEATHERED SOUTH EAST ARROW 0x00f8: 0x27b8, # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW 0x00f9: 0x27b9, # HEAVY BLACK-FEATHERED NORTH EAST ARROW 0x00fa: 0x27ba, # TEARDROP-BARBED RIGHTWARDS ARROW 0x00fb: 0x27bb, # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW 0x00fc: 0x27bc, # WEDGE-TAILED RIGHTWARDS ARROW 0x00fd: 0x27bd, # HEAVY WEDGE-TAILED RIGHTWARDS ARROW 0x00fe: 0x27be, # OPEN-OUTLINED RIGHTWARDS ARROW 0x00ff: None, # UNDEFINED },None), 'pdfdoc':StdCodecData({ 0x007f: None, # UNDEFINED 0x0080: 0x2022, # BULLET 0x0081: 0x2020, # DAGGER 0x0082: 0x2021, # DOUBLE DAGGER 0x0083: 0x2026, # HORIZONTAL ELLIPSIS 0x0084: 0x2014, # EM DASH 0x0085: 0x2013, # EN DASH 0x0086: 0x0192, # LATIN SMALL LETTER F WITH HOOK 0x0087: 0x2044, # FRACTION SLASH 0x0088: 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x0089: 0x203a, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x008a: 0x2212, # MINUS SIGN 0x008b: 0x2030, # PER MILLE SIGN 0x008c: 0x201e, # DOUBLE LOW-9 QUOTATION MARK 0x008d: 0x201c, # LEFT DOUBLE QUOTATION MARK 0x008e: 0x201d, # RIGHT DOUBLE QUOTATION MARK 0x008f: 0x2018, # LEFT SINGLE QUOTATION MARK 0x0090: 0x2019, # RIGHT SINGLE QUOTATION MARK 0x0091: 0x201a, # SINGLE LOW-9 QUOTATION MARK 0x0092: 0x2122, # TRADE MARK SIGN 0x0093: 0xfb01, # LATIN SMALL LIGATURE FI 0x0094: 0xfb02, # LATIN SMALL LIGATURE FL 0x0095: 0x0141, # LATIN CAPITAL LETTER L WITH STROKE 0x0096: 0x0152, # LATIN CAPITAL LIGATURE OE 0x0097: 0x0160, # LATIN CAPITAL LETTER S WITH CARON 0x0098: 0x0178, # LATIN CAPITAL LETTER Y WITH DIAERESIS 0x0099: 0x017d, # LATIN CAPITAL LETTER Z WITH CARON 0x009a: 0x0131, # LATIN SMALL LETTER DOTLESS I 0x009b: 0x0142, # LATIN SMALL LETTER L WITH STROKE 0x009c: 0x0153, # LATIN SMALL LIGATURE OE 0x009d: 0x0161, # LATIN SMALL LETTER S WITH CARON 0x009e: 0x017e, # LATIN SMALL LETTER Z WITH CARON 0x009f: None, # UNDEFINED 0x00a0: 0x20ac, # EURO SIGN 0x00ad: None, # UNDEFINED 24: 0x02d8, #breve 25: 0x02c7, #caron 26: 0x02c6, #circumflex 27: 0x02d9, #dotaccent 28: 0x02dd, #hungarumlaut 29: 0x02db, #ogonek 30: 0x02da, #ring 31: 0x02dc, #tilde },None), 'macexpert':StdCodecData({ 0x0021: 0xf721, # [unknown unicode name for exclamsmall] 0x0022: 0xf6f8, # [unknown unicode name for Hungarumlautsmall] 0x0023: 0xf7a2, # [unknown unicode name for centoldstyle] 0x0024: 0xf724, # [unknown unicode name for dollaroldstyle] 0x0025: 0xf6e4, # [unknown unicode name for dollarsuperior] 0x0026: 0xf726, # [unknown unicode name for ampersandsmall] 0x0027: 0xf7b4, # [unknown unicode name for Acutesmall] 0x0028: 0x207d, # SUPERSCRIPT LEFT PARENTHESIS 0x0029: 0x207e, # SUPERSCRIPT RIGHT PARENTHESIS 0x002a: 0x2025, # TWO DOT LEADER 0x002b: 0x2024, # ONE DOT LEADER 0x002f: 0x2044, # FRACTION SLASH 0x0030: 0xf730, # [unknown unicode name for zerooldstyle] 0x0031: 0xf731, # [unknown unicode name for oneoldstyle] 0x0032: 0xf732, # [unknown unicode name for twooldstyle] 0x0033: 0xf733, # [unknown unicode name for threeoldstyle] 0x0034: 0xf734, # [unknown unicode name for fouroldstyle] 0x0035: 0xf735, # [unknown unicode name for fiveoldstyle] 0x0036: 0xf736, # [unknown unicode name for sixoldstyle] 0x0037: 0xf737, # [unknown unicode name for sevenoldstyle] 0x0038: 0xf738, # [unknown unicode name for eightoldstyle] 0x0039: 0xf739, # [unknown unicode name for nineoldstyle] 0x003c: None, # UNDEFINED 0x003d: 0xf6de, # [unknown unicode name for threequartersemdash] 0x003e: None, # UNDEFINED 0x003f: 0xf73f, # [unknown unicode name for questionsmall] 0x0040: None, # UNDEFINED 0x0041: None, # UNDEFINED 0x0042: None, # UNDEFINED 0x0043: None, # UNDEFINED 0x0044: 0xf7f0, # [unknown unicode name for Ethsmall] 0x0045: None, # UNDEFINED 0x0046: None, # UNDEFINED 0x0047: 0x00bc, # VULGAR FRACTION ONE QUARTER 0x0048: 0x00bd, # VULGAR FRACTION ONE HALF 0x0049: 0x00be, # VULGAR FRACTION THREE QUARTERS 0x004a: 0x215b, # VULGAR FRACTION ONE EIGHTH 0x004b: 0x215c, # VULGAR FRACTION THREE EIGHTHS 0x004c: 0x215d, # VULGAR FRACTION FIVE EIGHTHS 0x004d: 0x215e, # VULGAR FRACTION SEVEN EIGHTHS 0x004e: 0x2153, # VULGAR FRACTION ONE THIRD 0x004f: 0x2154, # VULGAR FRACTION TWO THIRDS 0x0050: None, # UNDEFINED 0x0051: None, # UNDEFINED 0x0052: None, # UNDEFINED 0x0053: None, # UNDEFINED 0x0054: None, # UNDEFINED 0x0055: None, # UNDEFINED 0x0056: 0xfb00, # LATIN SMALL LIGATURE FF 0x0057: 0xfb01, # LATIN SMALL LIGATURE FI 0x0058: 0xfb02, # LATIN SMALL LIGATURE FL 0x0059: 0xfb03, # LATIN SMALL LIGATURE FFI 0x005a: 0xfb04, # LATIN SMALL LIGATURE FFL 0x005b: 0x208d, # SUBSCRIPT LEFT PARENTHESIS 0x005c: None, # UNDEFINED 0x005d: 0x208e, # SUBSCRIPT RIGHT PARENTHESIS 0x005e: 0xf6f6, # [unknown unicode name for Circumflexsmall] 0x005f: 0xf6e5, # [unknown unicode name for hypheninferior] 0x0060: 0xf760, # [unknown unicode name for Gravesmall] 0x0061: 0xf761, # [unknown unicode name for Asmall] 0x0062: 0xf762, # [unknown unicode name for Bsmall] 0x0063: 0xf763, # [unknown unicode name for Csmall] 0x0064: 0xf764, # [unknown unicode name for Dsmall] 0x0065: 0xf765, # [unknown unicode name for Esmall] 0x0066: 0xf766, # [unknown unicode name for Fsmall] 0x0067: 0xf767, # [unknown unicode name for Gsmall] 0x0068: 0xf768, # [unknown unicode name for Hsmall] 0x0069: 0xf769, # [unknown unicode name for Ismall] 0x006a: 0xf76a, # [unknown unicode name for Jsmall] 0x006b: 0xf76b, # [unknown unicode name for Ksmall] 0x006c: 0xf76c, # [unknown unicode name for Lsmall] 0x006d: 0xf76d, # [unknown unicode name for Msmall] 0x006e: 0xf76e, # [unknown unicode name for Nsmall] 0x006f: 0xf76f, # [unknown unicode name for Osmall] 0x0070: 0xf770, # [unknown unicode name for Psmall] 0x0071: 0xf771, # [unknown unicode name for Qsmall] 0x0072: 0xf772, # [unknown unicode name for Rsmall] 0x0073: 0xf773, # [unknown unicode name for Ssmall] 0x0074: 0xf774, # [unknown unicode name for Tsmall] 0x0075: 0xf775, # [unknown unicode name for Usmall] 0x0076: 0xf776, # [unknown unicode name for Vsmall] 0x0077: 0xf777, # [unknown unicode name for Wsmall] 0x0078: 0xf778, # [unknown unicode name for Xsmall] 0x0079: 0xf779, # [unknown unicode name for Ysmall] 0x007a: 0xf77a, # [unknown unicode name for Zsmall] 0x007b: 0x20a1, # COLON SIGN 0x007c: 0xf6dc, # [unknown unicode name for onefitted] 0x007d: 0xf6dd, # [unknown unicode name for rupiah] 0x007e: 0xf6fe, # [unknown unicode name for Tildesmall] 0x007f: None, # UNDEFINED 0x0080: None, # UNDEFINED 0x0081: 0xf6e9, # [unknown unicode name for asuperior] 0x0082: 0xf6e0, # [unknown unicode name for centsuperior] 0x0083: None, # UNDEFINED 0x0084: None, # UNDEFINED 0x0085: None, # UNDEFINED 0x0086: None, # UNDEFINED 0x0087: 0xf7e1, # [unknown unicode name for Aacutesmall] 0x0088: 0xf7e0, # [unknown unicode name for Agravesmall] 0x0089: 0xf7e2, # [unknown unicode name for Acircumflexsmall] 0x008a: 0xf7e4, # [unknown unicode name for Adieresissmall] 0x008b: 0xf7e3, # [unknown unicode name for Atildesmall] 0x008c: 0xf7e5, # [unknown unicode name for Aringsmall] 0x008d: 0xf7e7, # [unknown unicode name for Ccedillasmall] 0x008e: 0xf7e9, # [unknown unicode name for Eacutesmall] 0x008f: 0xf7e8, # [unknown unicode name for Egravesmall] 0x0090: 0xf7ea, # [unknown unicode name for Ecircumflexsmall] 0x0091: 0xf7eb, # [unknown unicode name for Edieresissmall] 0x0092: 0xf7ed, # [unknown unicode name for Iacutesmall] 0x0093: 0xf7ec, # [unknown unicode name for Igravesmall] 0x0094: 0xf7ee, # [unknown unicode name for Icircumflexsmall] 0x0095: 0xf7ef, # [unknown unicode name for Idieresissmall] 0x0096: 0xf7f1, # [unknown unicode name for Ntildesmall] 0x0097: 0xf7f3, # [unknown unicode name for Oacutesmall] 0x0098: 0xf7f2, # [unknown unicode name for Ogravesmall] 0x0099: 0xf7f4, # [unknown unicode name for Ocircumflexsmall] 0x009a: 0xf7f6, # [unknown unicode name for Odieresissmall] 0x009b: 0xf7f5, # [unknown unicode name for Otildesmall] 0x009c: 0xf7fa, # [unknown unicode name for Uacutesmall] 0x009d: 0xf7f9, # [unknown unicode name for Ugravesmall] 0x009e: 0xf7fb, # [unknown unicode name for Ucircumflexsmall] 0x009f: 0xf7fc, # [unknown unicode name for Udieresissmall] 0x00a0: None, # UNDEFINED 0x00a1: 0x2078, # SUPERSCRIPT EIGHT 0x00a2: 0x2084, # SUBSCRIPT FOUR 0x00a3: 0x2083, # SUBSCRIPT THREE 0x00a4: 0x2086, # SUBSCRIPT SIX 0x00a5: 0x2088, # SUBSCRIPT EIGHT 0x00a6: 0x2087, # SUBSCRIPT SEVEN 0x00a7: 0xf6fd, # [unknown unicode name for Scaronsmall] 0x00a8: None, # UNDEFINED 0x00a9: 0xf6df, # [unknown unicode name for centinferior] 0x00aa: 0x2082, # SUBSCRIPT TWO 0x00ab: None, # UNDEFINED 0x00ac: 0xf7a8, # [unknown unicode name for Dieresissmall] 0x00ad: None, # UNDEFINED 0x00ae: 0xf6f5, # [unknown unicode name for Caronsmall] 0x00af: 0xf6f0, # [unknown unicode name for osuperior] 0x00b0: 0x2085, # SUBSCRIPT FIVE 0x00b1: None, # UNDEFINED 0x00b2: 0xf6e1, # [unknown unicode name for commainferior] 0x00b3: 0xf6e7, # [unknown unicode name for periodinferior] 0x00b4: 0xf7fd, # [unknown unicode name for Yacutesmall] 0x00b5: None, # UNDEFINED 0x00b6: 0xf6e3, # [unknown unicode name for dollarinferior] 0x00b7: None, # UNDEFINED 0x00b8: None, # UNDEFINED 0x00b9: 0xf7fe, # [unknown unicode name for Thornsmall] 0x00ba: None, # UNDEFINED 0x00bb: 0x2089, # SUBSCRIPT NINE 0x00bc: 0x2080, # SUBSCRIPT ZERO 0x00bd: 0xf6ff, # [unknown unicode name for Zcaronsmall] 0x00be: 0xf7e6, # [unknown unicode name for AEsmall] 0x00bf: 0xf7f8, # [unknown unicode name for Oslashsmall] 0x00c0: 0xf7bf, # [unknown unicode name for questiondownsmall] 0x00c1: 0x2081, # SUBSCRIPT ONE 0x00c2: 0xf6f9, # [unknown unicode name for Lslashsmall] 0x00c3: None, # UNDEFINED 0x00c4: None, # UNDEFINED 0x00c5: None, # UNDEFINED 0x00c6: None, # UNDEFINED 0x00c7: None, # UNDEFINED 0x00c8: None, # UNDEFINED 0x00c9: 0xf7b8, # [unknown unicode name for Cedillasmall] 0x00ca: None, # UNDEFINED 0x00cb: None, # UNDEFINED 0x00cc: None, # UNDEFINED 0x00cd: None, # UNDEFINED 0x00ce: None, # UNDEFINED 0x00cf: 0xf6fa, # [unknown unicode name for OEsmall] 0x00d0: 0x2012, # FIGURE DASH 0x00d1: 0xf6e6, # [unknown unicode name for hyphensuperior] 0x00d2: None, # UNDEFINED 0x00d3: None, # UNDEFINED 0x00d4: None, # UNDEFINED 0x00d5: None, # UNDEFINED 0x00d6: 0xf7a1, # [unknown unicode name for exclamdownsmall] 0x00d7: None, # UNDEFINED 0x00d8: 0xf7ff, # [unknown unicode name for Ydieresissmall] 0x00d9: None, # UNDEFINED 0x00da: 0x00b9, # SUPERSCRIPT ONE 0x00db: 0x00b2, # SUPERSCRIPT TWO 0x00dc: 0x00b3, # SUPERSCRIPT THREE 0x00dd: 0x2074, # SUPERSCRIPT FOUR 0x00de: 0x2075, # SUPERSCRIPT FIVE 0x00df: 0x2076, # SUPERSCRIPT SIX 0x00e0: 0x2077, # SUPERSCRIPT SEVEN 0x00e1: 0x2079, # SUPERSCRIPT NINE 0x00e2: 0x2070, # SUPERSCRIPT ZERO 0x00e3: None, # UNDEFINED 0x00e4: 0xf6ec, # [unknown unicode name for esuperior] 0x00e5: 0xf6f1, # [unknown unicode name for rsuperior] 0x00e6: 0xf6f3, # [unknown unicode name for tsuperior] 0x00e7: None, # UNDEFINED 0x00e8: None, # UNDEFINED 0x00e9: 0xf6ed, # [unknown unicode name for isuperior] 0x00ea: 0xf6f2, # [unknown unicode name for ssuperior] 0x00eb: 0xf6eb, # [unknown unicode name for dsuperior] 0x00ec: None, # UNDEFINED 0x00ed: None, # UNDEFINED 0x00ee: None, # UNDEFINED 0x00ef: None, # UNDEFINED 0x00f0: None, # UNDEFINED 0x00f1: 0xf6ee, # [unknown unicode name for lsuperior] 0x00f2: 0xf6fb, # [unknown unicode name for Ogoneksmall] 0x00f3: 0xf6f4, # [unknown unicode name for Brevesmall] 0x00f4: 0xf7af, # [unknown unicode name for Macronsmall] 0x00f5: 0xf6ea, # [unknown unicode name for bsuperior] 0x00f6: 0x207f, # SUPERSCRIPT LATIN SMALL LETTER N 0x00f7: 0xf6ef, # [unknown unicode name for msuperior] 0x00f8: 0xf6e2, # [unknown unicode name for commasuperior] 0x00f9: 0xf6e8, # [unknown unicode name for periodsuperior] 0x00fa: 0xf6f7, # [unknown unicode name for Dotaccentsmall] 0x00fb: 0xf6fc, # [unknown unicode name for Ringsmall] 0x00fc: None, # UNDEFINED 0x00fd: None, # UNDEFINED 0x00fe: None, # UNDEFINED 0x00ff: None, # UNDEFINED },None), } __rl_extension_codecs = { 'extpdfdoc':ExtCodecData('pdfdoc',{0x000a:0x000a,0x000d:0x000d},None), } #for k,v in __rl_codecs_data.items(): # __rl_codecs_data[k+'enc'] = __rl_codecs_data[k+'encoding'] = v #del k,v __rl_dynamic_codecs = [] def __init__(self): raise NotImplementedError @staticmethod def _makeCodecInfo(name,encoding_map,decoding_map): ### Codec APIs class Codec(codecs.Codec): def encode(self,input,errors='strict',charmap_encode=codecs.charmap_encode,encoding_map=encoding_map): return charmap_encode(input,errors,encoding_map) def decode(self,input,errors='strict',charmap_decode=codecs.charmap_decode,decoding_map=decoding_map): return charmap_decode(input,errors,decoding_map) class StreamWriter(Codec,codecs.StreamWriter): pass class StreamReader(Codec,codecs.StreamReader): pass C = Codec() return codecs.CodecInfo(C.encode,C.decode,streamreader=StreamReader,streamwriter=StreamWriter,name=name) @staticmethod def _256_exception_codec(name,exceptions,rexceptions,baseRange=range(32,256)): decoding_map = codecs.make_identity_dict(baseRange) decoding_map.update(exceptions) encoding_map = codecs.make_encoding_map(decoding_map) if rexceptions: encoding_map.update(rexceptions) return RL_Codecs._makeCodecInfo(name,encoding_map,decoding_map) __rl_codecs_cache = {} @staticmethod def __rl_codecs(name,cache=__rl_codecs_cache,data=__rl_codecs_data,extension_codecs=__rl_extension_codecs,_256=True): try: return cache[name] except KeyError: if name in extension_codecs: x = extension_codecs[name] e,r = data[x.baseName] if x.exceptions: if e: e = e.copy() e.update(x.exceptions) else: e = x.exceptions if x.rexceptions: if r: r = r.copy() r.update(x.rexceptions) else: r = x.exceptions else: e,r = data[name] cache[name] = c = RL_Codecs._256_exception_codec(name,e,r) if _256 else RL_Codecs._makeCodecInfo(name, e,r or {}) return c @staticmethod def _rl_codecs(name): name = name.lower() from reportlab.pdfbase.pdfmetrics import standardEncodings for e in standardEncodings+('ExtPdfdocEncoding',): e = e[:-8].lower() if name.startswith(e): return RL_Codecs.__rl_codecs(e) if name in RL_Codecs.__rl_dynamic_codecs: return RL_Codecs.__rl_codecs(name,_256=False) return None @staticmethod def register(): codecs.register(RL_Codecs._rl_codecs) @staticmethod def add_dynamic_codec(name,exceptions,rexceptions): name = name.lower() RL_Codecs.remove_dynamic_codec(name) RL_Codecs.__rl_codecs_data[name] = (exceptions,rexceptions) RL_Codecs.__rl_dynamic_codecs.append(name) @staticmethod def remove_dynamic_codec(name): name = name.lower() if name in RL_Codecs.__rl_dynamic_codecs: RL_Codecs.__rl_codecs_data.pop(name,None) RL_Codecs.__rl_codecs_cache.pop(name,None) RL_Codecs.__rl_dynamic_codecs.remove(name) @staticmethod def reset_dynamic_codecs(): map(RL_Codecs.remove_dynamic_codec, RL_Codecs.__rl_dynamic_codecs) reportlab-3.5.34/src/reportlab/pdfbase/pdfutils.py0000775000175000017500000002321713544671343023007 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/pdfutils.py __version__='3.3.0' __doc__='' # pdfutils.py - everything to do with images, streams, # compression, and some constants import sys import os import binascii from reportlab import rl_config from reportlab.lib.utils import getBytesIO, ImageReader, isUnicode, isPy3 from reportlab.lib.rl_accel import asciiBase85Encode, asciiBase85Decode def _chunker(src,dst=[],chunkSize=60): for i in range(0,len(src),chunkSize): dst.append(src[i:i+chunkSize]) return dst ########################################################## # # Image compression helpers. Preprocessing a directory # of images will offer a vast speedup. # ########################################################## _mode2cs = {'RGB':'RGB', 'CMYK': 'CMYK', 'L': 'G'} _mode2bpp = {'RGB': 3, 'CMYK':4, 'L':1} def makeA85Image(filename,IMG=None, detectJpeg=False): import zlib img = ImageReader(filename) if IMG is not None: IMG.append(img) if detectJpeg and img.jpeg_fh(): return None imgwidth, imgheight = img.getSize() raw = img.getRGBData() code = [] append = code.append # this describes what is in the image itself append('BI') append('/W %s /H %s /BPC 8 /CS /%s /F [/A85 /Fl]' % (imgwidth, imgheight,_mode2cs[img.mode])) append('ID') #use a flate filter and Ascii Base 85 assert len(raw) == imgwidth * imgheight*_mode2bpp[img.mode], "Wrong amount of data for image" compressed = zlib.compress(raw) #this bit is very fast... encoded = asciiBase85Encode(compressed) #...sadly this may not be #append in blocks of 60 characters _chunker(encoded,code) append('EI') return code def makeRawImage(filename,IMG=None,detectJpeg=False): import zlib img = ImageReader(filename) if IMG is not None: IMG.append(img) if detectJpeg and img.jpeg_fh(): return None imgwidth, imgheight = img.getSize() raw = img.getRGBData() code = [] append = code.append # this describes what is in the image itself append('BI') append('/W %s /H %s /BPC 8 /CS /%s /F [/Fl]' % (imgwidth, imgheight,_mode2cs[img.mode])) append('ID') #use a flate filter assert len(raw) == imgwidth * imgheight*_mode2bpp[img.mode], "Wrong amount of data for image" compressed = zlib.compress(raw) #this bit is very fast... #append in blocks of 60 characters _chunker(compressed,code) append('EI') return code def cacheImageFile(filename, returnInMemory=0, IMG=None): "Processes image as if for encoding, saves to a file with .a85 extension." cachedname = os.path.splitext(filename)[0] + (rl_config.useA85 and '.a85' or '.bin') if filename==cachedname: if cachedImageExists(filename): from reportlab.lib.utils import open_for_read if returnInMemory: return filter(None,open_for_read(cachedname).read().split('\r\n')) else: raise IOError('No such cached image %s' % filename) else: if rl_config.useA85: code = makeA85Image(filename,IMG) else: code = makeRawImage(filename,IMG) if returnInMemory: return code #save it to a file f = open(cachedname,'wb') f.write('\r\n'.join(code)+'\r\n') f.close() if rl_config.verbose: print('cached image as %s' % cachedname) def preProcessImages(spec): """Preprocesses one or more image files. Accepts either a filespec ('C:\\mydir\\*.jpg') or a list of image filenames, crunches them all to save time. Run this to save huge amounts of time when repeatedly building image documents.""" import glob if isinstance(spec,str): filelist = glob.glob(spec) else: #list or tuple OK filelist = spec for filename in filelist: if cachedImageExists(filename): if rl_config.verbose: print('cached version of %s already exists' % filename) else: cacheImageFile(filename) def cachedImageExists(filename): """Determines if a cached image already exists for a given file. Determines if a cached image exists which has the same name and equal or newer date to the given file.""" cachedname = os.path.splitext(filename)[0] + (rl_config.useA85 and '.a85' or 'bin') if os.path.isfile(cachedname): #see if it is newer original_date = os.stat(filename)[8] cached_date = os.stat(cachedname)[8] if original_date > cached_date: return 0 else: return 1 else: return 0 ############################################################## # # PDF Helper functions # ############################################################## def _normalizeLineEnds(text,desired='\r\n',unlikely='\x00\x01\x02\x03'): """Normalizes different line end character(s). Ensures all instances of CR, LF and CRLF end up as the specified one.""" return (text .replace('\r\n', unlikely) .replace('\r', unlikely) .replace('\n', unlikely) .replace(unlikely, desired)) def _AsciiHexEncode(input): """Encodes input using ASCII-Hex coding. This is a verbose encoding used for binary data within a PDF file. One byte binary becomes two bytes of ASCII. Helper function used by images.""" if isUnicode(input): input = input.encode('utf-8') output = getBytesIO() output.write(binascii.b2a_hex(input)) output.write(b'>') return output.getvalue() def _AsciiHexDecode(input): """Decodes input using ASCII-Hex coding. Not used except to provide a test of the inverse function.""" #strip out all whitespace if not isUnicode(input): input = input.decode('utf-8') stripped = ''.join(input.split()) assert stripped[-1] == '>', 'Invalid terminator for Ascii Hex Stream' stripped = stripped[:-1] #chop off terminator assert len(stripped) % 2 == 0, 'Ascii Hex stream has odd number of bytes' return ''.join([chr(int(stripped[i:i+2],16)) for i in range(0,len(stripped),2)]) def _wrap(input, columns=60): "Wraps input at a given column size by inserting \r\n characters." output = [] length = len(input) i = 0 pos = columns * i while pos < length: output.append(input[pos:pos+columns]) i = i + 1 pos = columns * i #avoid HP printer problem if len(output[-1])==1: output[-2:] = [output[-2][:-1],output[-2][-1]+output[-1]] return '\r\n'.join(output) ######################################################################### # # JPEG processing code - contributed by Eric Johnson # ######################################################################### # Read data from the JPEG file. We should probably be using PIL to # get this information for us -- but this way is more fun! # Returns (width, height, color components) as a triple # This is based on Thomas Merz's code from GhostScript (viewjpeg.ps) def readJPEGInfo(image): "Read width, height and number of components from open JPEG file." import struct from reportlab.pdfbase.pdfdoc import PDFError #Acceptable JPEG Markers: # SROF0=baseline, SOF1=extended sequential or SOF2=progressive validMarkers = [0xC0, 0xC1, 0xC2] #JPEG markers without additional parameters noParamMarkers = \ [ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0x01 ] #Unsupported JPEG Markers unsupportedMarkers = \ [ 0xC3, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCD, 0xCE, 0xCF ] #read JPEG marker segments until we find SOFn marker or EOF done = 0 while not done: x = struct.unpack('B', image.read(1)) if x[0] == 0xFF: #found marker x = struct.unpack('B', image.read(1)) #print "Marker: ", '%0.2x' % x[0] #check marker type is acceptable and process it if x[0] in validMarkers: image.seek(2, 1) #skip segment length x = struct.unpack('B', image.read(1)) #data precision if x[0] != 8: raise PDFError('JPEG must have 8 bits per component') y = struct.unpack('BB', image.read(2)) height = (y[0] << 8) + y[1] y = struct.unpack('BB', image.read(2)) width = (y[0] << 8) + y[1] y = struct.unpack('B', image.read(1)) color = y[0] return width, height, color elif x[0] in unsupportedMarkers: raise PDFError('JPEG Unsupported JPEG marker: %0.2x' % x[0]) elif x[0] not in noParamMarkers: #skip segments with parameters #read length and skip the data x = struct.unpack('BB', image.read(2)) image.seek( (x[0] << 8) + x[1] - 2, 1) class _fusc: def __init__(self,k, n): assert k, 'Argument k should be a non empty string' self._k = k self._klen = len(k) self._n = int(n) or 7 def encrypt(self,s): return self.__rotate(asciiBase85Encode(''.join(map(chr,self.__fusc(list(map(ord,s)))))),self._n) def decrypt(self,s): return ''.join(map(chr,self.__fusc(list(map(ord,asciiBase85Decode(self.__rotate(s,-self._n))))))) def __rotate(self,s,n): l = len(s) if n<0: n = l+n n %= l if not n: return s return s[-n:]+s[:l-n] def __fusc(self,s): slen = len(s) return list(map(lambda x,y: x ^ y,s,list(map(ord,((int(slen/self._klen)+1)*self._k)[:slen])))) reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_timesitalic.py0000664000175000017500000000712113544671343027056 0ustar rptlabrptlab00000000000000widths = {'A': 611, 'AE': 889, 'Aacute': 611, 'Acircumflex': 611, 'Adieresis': 611, 'Agrave': 611, 'Aring': 611, 'Atilde': 611, 'B': 611, 'C': 667, 'Ccedilla': 667, 'D': 722, 'E': 611, 'Eacute': 611, 'Ecircumflex': 611, 'Edieresis': 611, 'Egrave': 611, 'Eth': 722, 'Euro': 500, 'F': 611, 'G': 722, 'H': 722, 'I': 333, 'Iacute': 333, 'Icircumflex': 333, 'Idieresis': 333, 'Igrave': 333, 'J': 444, 'K': 667, 'L': 556, 'Lslash': 556, 'M': 833, 'N': 667, 'Ntilde': 667, 'O': 722, 'OE': 944, 'Oacute': 722, 'Ocircumflex': 722, 'Odieresis': 722, 'Ograve': 722, 'Oslash': 722, 'Otilde': 722, 'P': 611, 'Q': 722, 'R': 611, 'S': 500, 'Scaron': 500, 'T': 556, 'Thorn': 611, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 611, 'W': 833, 'X': 611, 'Y': 556, 'Yacute': 556, 'Ydieresis': 556, 'Z': 556, 'Zcaron': 556, 'a': 500, 'aacute': 500, 'acircumflex': 500, 'acute': 333, 'adieresis': 500, 'ae': 667, 'agrave': 500, 'ampersand': 778, 'aring': 500, 'asciicircum': 422, 'asciitilde': 541, 'asterisk': 500, 'at': 920, 'atilde': 500, 'b': 500, 'backslash': 278, 'bar': 275, 'braceleft': 400, 'braceright': 400, 'bracketleft': 389, 'bracketright': 389, 'breve': 333, 'brokenbar': 275, 'bullet': 350, 'c': 444, 'caron': 333, 'ccedilla': 444, 'cedilla': 333, 'cent': 500, 'circumflex': 333, 'colon': 333, 'comma': 250, 'copyright': 760, 'currency': 500, 'd': 500, 'dagger': 500, 'daggerdbl': 500, 'degree': 400, 'dieresis': 333, 'divide': 675, 'dollar': 500, 'dotaccent': 333, 'dotlessi': 278, 'e': 444, 'eacute': 444, 'ecircumflex': 444, 'edieresis': 444, 'egrave': 444, 'eight': 500, 'ellipsis': 889, 'emdash': 889, 'endash': 500, 'equal': 675, 'eth': 500, 'exclam': 333, 'exclamdown': 389, 'f': 278, 'fi': 500, 'five': 500, 'fl': 500, 'florin': 500, 'four': 500, 'fraction': 167, 'g': 500, 'germandbls': 500, 'grave': 333, 'greater': 675, 'guillemotleft': 500, 'guillemotright': 500, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 500, 'hungarumlaut': 333, 'hyphen': 333, 'i': 278, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 278, 'k': 444, 'l': 278, 'less': 675, 'logicalnot': 675, 'lslash': 278, 'm': 722, 'macron': 333, 'minus': 675, 'mu': 500, 'multiply': 675, 'n': 500, 'nine': 500, 'ntilde': 500, 'numbersign': 500, 'o': 500, 'oacute': 500, 'ocircumflex': 500, 'odieresis': 500, 'oe': 667, 'ogonek': 333, 'ograve': 500, 'one': 500, 'onehalf': 750, 'onequarter': 750, 'onesuperior': 300, 'ordfeminine': 276, 'ordmasculine': 310, 'oslash': 500, 'otilde': 500, 'p': 500, 'paragraph': 523, 'parenleft': 333, 'parenright': 333, 'percent': 833, 'period': 250, 'periodcentered': 250, 'perthousand': 1000, 'plus': 675, 'plusminus': 675, 'q': 500, 'question': 500, 'questiondown': 500, 'quotedbl': 420, 'quotedblbase': 556, 'quotedblleft': 556, 'quotedblright': 556, 'quoteleft': 333, 'quoteright': 333, 'quotesinglbase': 333, 'quotesingle': 214, 'r': 389, 'registered': 760, 'ring': 333, 's': 389, 'scaron': 389, 'section': 500, 'semicolon': 333, 'seven': 500, 'six': 500, 'slash': 278, 'space': 250, 'sterling': 500, 't': 278, 'thorn': 500, 'three': 500, 'threequarters': 750, 'threesuperior': 300, 'tilde': 333, 'trademark': 980, 'two': 500, 'twosuperior': 300, 'u': 500, 'uacute': 500, 'ucircumflex': 500, 'udieresis': 500, 'ugrave': 500, 'underscore': 500, 'v': 444, 'w': 667, 'x': 444, 'y': 444, 'yacute': 444, 'ydieresis': 444, 'yen': 500, 'z': 389, 'zcaron': 389, 'zero': 500} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_courieroblique.py0000664000175000017500000000712013544671343027577 0ustar rptlabrptlab00000000000000widths = {'A': 600, 'AE': 600, 'Aacute': 600, 'Acircumflex': 600, 'Adieresis': 600, 'Agrave': 600, 'Aring': 600, 'Atilde': 600, 'B': 600, 'C': 600, 'Ccedilla': 600, 'D': 600, 'E': 600, 'Eacute': 600, 'Ecircumflex': 600, 'Edieresis': 600, 'Egrave': 600, 'Eth': 600, 'Euro': 600, 'F': 600, 'G': 600, 'H': 600, 'I': 600, 'Iacute': 600, 'Icircumflex': 600, 'Idieresis': 600, 'Igrave': 600, 'J': 600, 'K': 600, 'L': 600, 'Lslash': 600, 'M': 600, 'N': 600, 'Ntilde': 600, 'O': 600, 'OE': 600, 'Oacute': 600, 'Ocircumflex': 600, 'Odieresis': 600, 'Ograve': 600, 'Oslash': 600, 'Otilde': 600, 'P': 600, 'Q': 600, 'R': 600, 'S': 600, 'Scaron': 600, 'T': 600, 'Thorn': 600, 'U': 600, 'Uacute': 600, 'Ucircumflex': 600, 'Udieresis': 600, 'Ugrave': 600, 'V': 600, 'W': 600, 'X': 600, 'Y': 600, 'Yacute': 600, 'Ydieresis': 600, 'Z': 600, 'Zcaron': 600, 'a': 600, 'aacute': 600, 'acircumflex': 600, 'acute': 600, 'adieresis': 600, 'ae': 600, 'agrave': 600, 'ampersand': 600, 'aring': 600, 'asciicircum': 600, 'asciitilde': 600, 'asterisk': 600, 'at': 600, 'atilde': 600, 'b': 600, 'backslash': 600, 'bar': 600, 'braceleft': 600, 'braceright': 600, 'bracketleft': 600, 'bracketright': 600, 'breve': 600, 'brokenbar': 600, 'bullet': 600, 'c': 600, 'caron': 600, 'ccedilla': 600, 'cedilla': 600, 'cent': 600, 'circumflex': 600, 'colon': 600, 'comma': 600, 'copyright': 600, 'currency': 600, 'd': 600, 'dagger': 600, 'daggerdbl': 600, 'degree': 600, 'dieresis': 600, 'divide': 600, 'dollar': 600, 'dotaccent': 600, 'dotlessi': 600, 'e': 600, 'eacute': 600, 'ecircumflex': 600, 'edieresis': 600, 'egrave': 600, 'eight': 600, 'ellipsis': 600, 'emdash': 600, 'endash': 600, 'equal': 600, 'eth': 600, 'exclam': 600, 'exclamdown': 600, 'f': 600, 'fi': 600, 'five': 600, 'fl': 600, 'florin': 600, 'four': 600, 'fraction': 600, 'g': 600, 'germandbls': 600, 'grave': 600, 'greater': 600, 'guillemotleft': 600, 'guillemotright': 600, 'guilsinglleft': 600, 'guilsinglright': 600, 'h': 600, 'hungarumlaut': 600, 'hyphen': 600, 'i': 600, 'iacute': 600, 'icircumflex': 600, 'idieresis': 600, 'igrave': 600, 'j': 600, 'k': 600, 'l': 600, 'less': 600, 'logicalnot': 600, 'lslash': 600, 'm': 600, 'macron': 600, 'minus': 600, 'mu': 600, 'multiply': 600, 'n': 600, 'nine': 600, 'ntilde': 600, 'numbersign': 600, 'o': 600, 'oacute': 600, 'ocircumflex': 600, 'odieresis': 600, 'oe': 600, 'ogonek': 600, 'ograve': 600, 'one': 600, 'onehalf': 600, 'onequarter': 600, 'onesuperior': 600, 'ordfeminine': 600, 'ordmasculine': 600, 'oslash': 600, 'otilde': 600, 'p': 600, 'paragraph': 600, 'parenleft': 600, 'parenright': 600, 'percent': 600, 'period': 600, 'periodcentered': 600, 'perthousand': 600, 'plus': 600, 'plusminus': 600, 'q': 600, 'question': 600, 'questiondown': 600, 'quotedbl': 600, 'quotedblbase': 600, 'quotedblleft': 600, 'quotedblright': 600, 'quoteleft': 600, 'quoteright': 600, 'quotesinglbase': 600, 'quotesingle': 600, 'r': 600, 'registered': 600, 'ring': 600, 's': 600, 'scaron': 600, 'section': 600, 'semicolon': 600, 'seven': 600, 'six': 600, 'slash': 600, 'space': 600, 'sterling': 600, 't': 600, 'thorn': 600, 'three': 600, 'threequarters': 600, 'threesuperior': 600, 'tilde': 600, 'trademark': 600, 'two': 600, 'twosuperior': 600, 'u': 600, 'uacute': 600, 'ucircumflex': 600, 'udieresis': 600, 'ugrave': 600, 'underscore': 600, 'v': 600, 'w': 600, 'x': 600, 'y': 600, 'yacute': 600, 'ydieresis': 600, 'yen': 600, 'z': 600, 'zcaron': 600, 'zero': 600} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_zapfdingbats.py0000664000175000017500000000425613544671343026474 0ustar rptlabrptlab00000000000000ZapfDingbatsEncoding = ( None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117', 'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19', 'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7', 'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36', 'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46', 'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56', 'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66', 'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75', 'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97', 'a98', 'a99', 'a100', None, 'a89', 'a90', 'a93', 'a94', 'a91', 'a92', 'a205', 'a85', 'a206', 'a86', 'a87', 'a88', 'a95', 'a96', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'a101', 'a102', 'a103', 'a104', 'a106', 'a107', 'a108', 'a112', 'a111', 'a110', 'a109', 'a120', 'a121', 'a122', 'a123', 'a124', 'a125', 'a126', 'a127', 'a128', 'a129', 'a130', 'a131', 'a132', 'a133', 'a134', 'a135', 'a136', 'a137', 'a138', 'a139', 'a140', 'a141', 'a142', 'a143', 'a144', 'a145', 'a146', 'a147', 'a148', 'a149', 'a150', 'a151', 'a152', 'a153', 'a154', 'a155', 'a156', 'a157', 'a158', 'a159', 'a160', 'a161', 'a163', 'a164', 'a196', 'a165', 'a192', 'a166', 'a167', 'a168', 'a169', 'a170', 'a171', 'a172', 'a173', 'a162', 'a174', 'a175', 'a176', 'a177', 'a178', 'a179', 'a193', 'a180', 'a199', 'a181', 'a200', 'a182', None, 'a201', 'a183', 'a184', 'a197', 'a185', 'a194', 'a198', 'a186', 'a195', 'a187', 'a188', 'a189', 'a190', 'a191', None) reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_courierboldoblique.py0000664000175000017500000000712013544671343030440 0ustar rptlabrptlab00000000000000widths = {'A': 600, 'AE': 600, 'Aacute': 600, 'Acircumflex': 600, 'Adieresis': 600, 'Agrave': 600, 'Aring': 600, 'Atilde': 600, 'B': 600, 'C': 600, 'Ccedilla': 600, 'D': 600, 'E': 600, 'Eacute': 600, 'Ecircumflex': 600, 'Edieresis': 600, 'Egrave': 600, 'Eth': 600, 'Euro': 600, 'F': 600, 'G': 600, 'H': 600, 'I': 600, 'Iacute': 600, 'Icircumflex': 600, 'Idieresis': 600, 'Igrave': 600, 'J': 600, 'K': 600, 'L': 600, 'Lslash': 600, 'M': 600, 'N': 600, 'Ntilde': 600, 'O': 600, 'OE': 600, 'Oacute': 600, 'Ocircumflex': 600, 'Odieresis': 600, 'Ograve': 600, 'Oslash': 600, 'Otilde': 600, 'P': 600, 'Q': 600, 'R': 600, 'S': 600, 'Scaron': 600, 'T': 600, 'Thorn': 600, 'U': 600, 'Uacute': 600, 'Ucircumflex': 600, 'Udieresis': 600, 'Ugrave': 600, 'V': 600, 'W': 600, 'X': 600, 'Y': 600, 'Yacute': 600, 'Ydieresis': 600, 'Z': 600, 'Zcaron': 600, 'a': 600, 'aacute': 600, 'acircumflex': 600, 'acute': 600, 'adieresis': 600, 'ae': 600, 'agrave': 600, 'ampersand': 600, 'aring': 600, 'asciicircum': 600, 'asciitilde': 600, 'asterisk': 600, 'at': 600, 'atilde': 600, 'b': 600, 'backslash': 600, 'bar': 600, 'braceleft': 600, 'braceright': 600, 'bracketleft': 600, 'bracketright': 600, 'breve': 600, 'brokenbar': 600, 'bullet': 600, 'c': 600, 'caron': 600, 'ccedilla': 600, 'cedilla': 600, 'cent': 600, 'circumflex': 600, 'colon': 600, 'comma': 600, 'copyright': 600, 'currency': 600, 'd': 600, 'dagger': 600, 'daggerdbl': 600, 'degree': 600, 'dieresis': 600, 'divide': 600, 'dollar': 600, 'dotaccent': 600, 'dotlessi': 600, 'e': 600, 'eacute': 600, 'ecircumflex': 600, 'edieresis': 600, 'egrave': 600, 'eight': 600, 'ellipsis': 600, 'emdash': 600, 'endash': 600, 'equal': 600, 'eth': 600, 'exclam': 600, 'exclamdown': 600, 'f': 600, 'fi': 600, 'five': 600, 'fl': 600, 'florin': 600, 'four': 600, 'fraction': 600, 'g': 600, 'germandbls': 600, 'grave': 600, 'greater': 600, 'guillemotleft': 600, 'guillemotright': 600, 'guilsinglleft': 600, 'guilsinglright': 600, 'h': 600, 'hungarumlaut': 600, 'hyphen': 600, 'i': 600, 'iacute': 600, 'icircumflex': 600, 'idieresis': 600, 'igrave': 600, 'j': 600, 'k': 600, 'l': 600, 'less': 600, 'logicalnot': 600, 'lslash': 600, 'm': 600, 'macron': 600, 'minus': 600, 'mu': 600, 'multiply': 600, 'n': 600, 'nine': 600, 'ntilde': 600, 'numbersign': 600, 'o': 600, 'oacute': 600, 'ocircumflex': 600, 'odieresis': 600, 'oe': 600, 'ogonek': 600, 'ograve': 600, 'one': 600, 'onehalf': 600, 'onequarter': 600, 'onesuperior': 600, 'ordfeminine': 600, 'ordmasculine': 600, 'oslash': 600, 'otilde': 600, 'p': 600, 'paragraph': 600, 'parenleft': 600, 'parenright': 600, 'percent': 600, 'period': 600, 'periodcentered': 600, 'perthousand': 600, 'plus': 600, 'plusminus': 600, 'q': 600, 'question': 600, 'questiondown': 600, 'quotedbl': 600, 'quotedblbase': 600, 'quotedblleft': 600, 'quotedblright': 600, 'quoteleft': 600, 'quoteright': 600, 'quotesinglbase': 600, 'quotesingle': 600, 'r': 600, 'registered': 600, 'ring': 600, 's': 600, 'scaron': 600, 'section': 600, 'semicolon': 600, 'seven': 600, 'six': 600, 'slash': 600, 'space': 600, 'sterling': 600, 't': 600, 'thorn': 600, 'three': 600, 'threequarters': 600, 'threesuperior': 600, 'tilde': 600, 'trademark': 600, 'two': 600, 'twosuperior': 600, 'u': 600, 'uacute': 600, 'ucircumflex': 600, 'udieresis': 600, 'ugrave': 600, 'underscore': 600, 'v': 600, 'w': 600, 'x': 600, 'y': 600, 'yacute': 600, 'ydieresis': 600, 'yen': 600, 'z': 600, 'zcaron': 600, 'zero': 600} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_timesroman.py0000664000175000017500000000712313544671343026727 0ustar rptlabrptlab00000000000000widths = {'A': 722, 'AE': 889, 'Aacute': 722, 'Acircumflex': 722, 'Adieresis': 722, 'Agrave': 722, 'Aring': 722, 'Atilde': 722, 'B': 667, 'C': 667, 'Ccedilla': 667, 'D': 722, 'E': 611, 'Eacute': 611, 'Ecircumflex': 611, 'Edieresis': 611, 'Egrave': 611, 'Eth': 722, 'Euro': 500, 'F': 556, 'G': 722, 'H': 722, 'I': 333, 'Iacute': 333, 'Icircumflex': 333, 'Idieresis': 333, 'Igrave': 333, 'J': 389, 'K': 722, 'L': 611, 'Lslash': 611, 'M': 889, 'N': 722, 'Ntilde': 722, 'O': 722, 'OE': 889, 'Oacute': 722, 'Ocircumflex': 722, 'Odieresis': 722, 'Ograve': 722, 'Oslash': 722, 'Otilde': 722, 'P': 556, 'Q': 722, 'R': 667, 'S': 556, 'Scaron': 556, 'T': 611, 'Thorn': 556, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 722, 'W': 944, 'X': 722, 'Y': 722, 'Yacute': 722, 'Ydieresis': 722, 'Z': 611, 'Zcaron': 611, 'a': 444, 'aacute': 444, 'acircumflex': 444, 'acute': 333, 'adieresis': 444, 'ae': 667, 'agrave': 444, 'ampersand': 778, 'aring': 444, 'asciicircum': 469, 'asciitilde': 541, 'asterisk': 500, 'at': 921, 'atilde': 444, 'b': 500, 'backslash': 278, 'bar': 200, 'braceleft': 480, 'braceright': 480, 'bracketleft': 333, 'bracketright': 333, 'breve': 333, 'brokenbar': 200, 'bullet': 350, 'c': 444, 'caron': 333, 'ccedilla': 444, 'cedilla': 333, 'cent': 500, 'circumflex': 333, 'colon': 278, 'comma': 250, 'copyright': 760, 'currency': 500, 'd': 500, 'dagger': 500, 'daggerdbl': 500, 'degree': 400, 'dieresis': 333, 'divide': 564, 'dollar': 500, 'dotaccent': 333, 'dotlessi': 278, 'e': 444, 'eacute': 444, 'ecircumflex': 444, 'edieresis': 444, 'egrave': 444, 'eight': 500, 'ellipsis': 1000, 'emdash': 1000, 'endash': 500, 'equal': 564, 'eth': 500, 'exclam': 333, 'exclamdown': 333, 'f': 333, 'fi': 556, 'five': 500, 'fl': 556, 'florin': 500, 'four': 500, 'fraction': 167, 'g': 500, 'germandbls': 500, 'grave': 333, 'greater': 564, 'guillemotleft': 500, 'guillemotright': 500, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 500, 'hungarumlaut': 333, 'hyphen': 333, 'i': 278, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 278, 'k': 500, 'l': 278, 'less': 564, 'logicalnot': 564, 'lslash': 278, 'm': 778, 'macron': 333, 'minus': 564, 'mu': 500, 'multiply': 564, 'n': 500, 'nine': 500, 'ntilde': 500, 'numbersign': 500, 'o': 500, 'oacute': 500, 'ocircumflex': 500, 'odieresis': 500, 'oe': 722, 'ogonek': 333, 'ograve': 500, 'one': 500, 'onehalf': 750, 'onequarter': 750, 'onesuperior': 300, 'ordfeminine': 276, 'ordmasculine': 310, 'oslash': 500, 'otilde': 500, 'p': 500, 'paragraph': 453, 'parenleft': 333, 'parenright': 333, 'percent': 833, 'period': 250, 'periodcentered': 250, 'perthousand': 1000, 'plus': 564, 'plusminus': 564, 'q': 500, 'question': 444, 'questiondown': 444, 'quotedbl': 408, 'quotedblbase': 444, 'quotedblleft': 444, 'quotedblright': 444, 'quoteleft': 333, 'quoteright': 333, 'quotesinglbase': 333, 'quotesingle': 180, 'r': 333, 'registered': 760, 'ring': 333, 's': 389, 'scaron': 389, 'section': 500, 'semicolon': 278, 'seven': 500, 'six': 500, 'slash': 278, 'space': 250, 'sterling': 500, 't': 278, 'thorn': 500, 'three': 500, 'threequarters': 750, 'threesuperior': 300, 'tilde': 333, 'trademark': 980, 'two': 500, 'twosuperior': 300, 'u': 500, 'uacute': 500, 'ucircumflex': 500, 'udieresis': 500, 'ugrave': 500, 'underscore': 500, 'v': 500, 'w': 722, 'x': 500, 'y': 500, 'yacute': 500, 'ydieresis': 500, 'yen': 500, 'z': 444, 'zcaron': 444, 'zero': 500} reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_symbol.py0000664000175000017500000000616313544671343025324 0ustar rptlabrptlab00000000000000SymbolEncoding = ( None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent', 'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus', 'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi', 'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft', 'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex', 'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota', 'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho', 'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta', 'braceleft', 'bar', 'braceright', 'similar', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'Euro', 'Upsilon1', 'minute', 'lessequal', 'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade', 'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree', 'plusminus', 'second', 'greaterequal', 'multiply', 'proportional', 'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence', 'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn', 'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply', 'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset', 'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element', 'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif', 'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot', 'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup', 'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans', 'copyrightsans', 'trademarksans', 'summation', 'parenlefttp', 'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex', 'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex', None, 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt', 'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp', 'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid', 'bracerightbt', None) reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_pdfdoc.py0000664000175000017500000000440413544671343025252 0ustar rptlabrptlab00000000000000PDFDocEncoding = (None, None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None, None,None,None,None,None,"breve","caron","circumflex", "dotaccent","hungarumlaut","ogonek","ring","tilde","space","exclam","quotedbl","numbersign","dollar","percent", "ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero", "one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater", "question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X", "Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g", "h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright", "asciitilde",None,"bullet","dagger","daggerdbl","ellipsis","emdash","endash","florin","fraction","guilsinglleft", "guilsinglright","minus","perthousand","quotedblbase","quotedblleft","quotedblright","quoteleft","quoteright", "quotesinglbase","trademark","fi","fl","Lslash","OE","Scaron","Ydieresis","Zcaron","dotlessi","lslash","oe", "scaron","zcaron",None,"Euro","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis", "copyright","ordfeminine","guillemotleft","logicalnot",None,"registered","macron","degree","plusminus","twosuperior", "threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright", "onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring", "AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth", "Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex", "Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae", "ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde", "ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis", "yacute","thorn","ydieresis") reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_standard.py0000664000175000017500000000344513544671343025617 0ustar rptlabrptlab00000000000000StandardEncoding =(None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,"space","exclam", "quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus", "comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon", "semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O", "P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore", "quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y", "z","braceleft","bar","braceright","asciitilde",None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None, None,None,None,"exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft", "guillemotleft","guilsinglleft","guilsinglright","fi","fl",None,"endash","dagger","daggerdbl","periodcentered",None, "paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand", None,"questiondown",None,"grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis",None,"ring", "cedilla",None,"hungarumlaut","ogonek","caron","emdash",None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,None,"AE",None,"ordfeminine", None,None,None,None,"Lslash","Oslash","OE","ordmasculine",None,None,None,None,None,"ae",None,None,None,"dotlessi",None,None,"lslash","oslash", "oe","germandbls",None,None,None,None) reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_zapfdingbats.py0000664000175000017500000000525413544671343027230 0ustar rptlabrptlab00000000000000widths = {'a1': 974, 'a10': 692, 'a100': 668, 'a101': 732, 'a102': 544, 'a103': 544, 'a104': 910, 'a105': 911, 'a106': 667, 'a107': 760, 'a108': 760, 'a109': 626, 'a11': 960, 'a110': 694, 'a111': 595, 'a112': 776, 'a117': 690, 'a118': 791, 'a119': 790, 'a12': 939, 'a120': 788, 'a121': 788, 'a122': 788, 'a123': 788, 'a124': 788, 'a125': 788, 'a126': 788, 'a127': 788, 'a128': 788, 'a129': 788, 'a13': 549, 'a130': 788, 'a131': 788, 'a132': 788, 'a133': 788, 'a134': 788, 'a135': 788, 'a136': 788, 'a137': 788, 'a138': 788, 'a139': 788, 'a14': 855, 'a140': 788, 'a141': 788, 'a142': 788, 'a143': 788, 'a144': 788, 'a145': 788, 'a146': 788, 'a147': 788, 'a148': 788, 'a149': 788, 'a15': 911, 'a150': 788, 'a151': 788, 'a152': 788, 'a153': 788, 'a154': 788, 'a155': 788, 'a156': 788, 'a157': 788, 'a158': 788, 'a159': 788, 'a16': 933, 'a160': 894, 'a161': 838, 'a162': 924, 'a163': 1016, 'a164': 458, 'a165': 924, 'a166': 918, 'a167': 927, 'a168': 928, 'a169': 928, 'a17': 945, 'a170': 834, 'a171': 873, 'a172': 828, 'a173': 924, 'a174': 917, 'a175': 930, 'a176': 931, 'a177': 463, 'a178': 883, 'a179': 836, 'a18': 974, 'a180': 867, 'a181': 696, 'a182': 874, 'a183': 760, 'a184': 946, 'a185': 865, 'a186': 967, 'a187': 831, 'a188': 873, 'a189': 927, 'a19': 755, 'a190': 970, 'a191': 918, 'a192': 748, 'a193': 836, 'a194': 771, 'a195': 888, 'a196': 748, 'a197': 771, 'a198': 888, 'a199': 867, 'a2': 961, 'a20': 846, 'a200': 696, 'a201': 874, 'a202': 974, 'a203': 762, 'a204': 759, 'a205': 509, 'a206': 410, 'a21': 762, 'a22': 761, 'a23': 571, 'a24': 677, 'a25': 763, 'a26': 760, 'a27': 759, 'a28': 754, 'a29': 786, 'a3': 980, 'a30': 788, 'a31': 788, 'a32': 790, 'a33': 793, 'a34': 794, 'a35': 816, 'a36': 823, 'a37': 789, 'a38': 841, 'a39': 823, 'a4': 719, 'a40': 833, 'a41': 816, 'a42': 831, 'a43': 923, 'a44': 744, 'a45': 723, 'a46': 749, 'a47': 790, 'a48': 792, 'a49': 695, 'a5': 789, 'a50': 776, 'a51': 768, 'a52': 792, 'a53': 759, 'a54': 707, 'a55': 708, 'a56': 682, 'a57': 701, 'a58': 826, 'a59': 815, 'a6': 494, 'a60': 789, 'a61': 789, 'a62': 707, 'a63': 687, 'a64': 696, 'a65': 689, 'a66': 786, 'a67': 787, 'a68': 713, 'a69': 791, 'a7': 552, 'a70': 785, 'a71': 791, 'a72': 873, 'a73': 761, 'a74': 762, 'a75': 759, 'a76': 892, 'a77': 892, 'a78': 788, 'a79': 784, 'a8': 537, 'a81': 438, 'a82': 138, 'a83': 277, 'a84': 415, 'a85': 509, 'a86': 410, 'a87': 234, 'a88': 234, 'a89': 390, 'a9': 577, 'a90': 390, 'a91': 276, 'a92': 276, 'a93': 317, 'a94': 317, 'a95': 334, 'a96': 334, 'a97': 392, 'a98': 392, 'a99': 668, 'space': 278} reportlab-3.5.34/src/reportlab/pdfbase/ttfonts.py0000664000175000017500000014731213544671343022656 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details __version__ = '$Id$' __doc__="""TrueType font support This defines classes to represent TrueType fonts. They know how to calculate their own width and how to write themselves into PDF files. They support subsetting and embedding and can represent all 16-bit Unicode characters. Note on dynamic fonts --------------------- Usually a Font in ReportLab corresponds to a fixed set of PDF objects (Font, FontDescriptor, Encoding). But with dynamic font subsetting a single TTFont will result in a number of Font/FontDescriptor/Encoding object sets, and the contents of those will depend on the actual characters used for printing. To support dynamic font subsetting a concept of "dynamic font" was introduced. Dynamic Fonts have a _dynamicFont attribute set to 1. Dynamic fonts have the following additional functions:: def splitString(self, text, doc): '''Splits text into a number of chunks, each of which belongs to a single subset. Returns a list of tuples (subset, string). Use subset numbers with getSubsetInternalName. Doc is used to identify a document so that different documents may have different dynamically constructed subsets.''' def getSubsetInternalName(self, subset, doc): '''Returns the name of a PDF Font object corresponding to a given subset of this dynamic font. Use this function instead of PDFDocument.getInternalFontName.''' You must never call PDFDocument.getInternalFontName for dynamic fonts. If you have a traditional static font, mapping to PDF text output operators is simple:: '%s 14 Tf (%s) Tj' % (getInternalFontName(psfontname), text) If you have a dynamic font, use this instead:: for subset, chunk in font.splitString(text, doc): '%s 14 Tf (%s) Tj' % (font.getSubsetInternalName(subset, doc), chunk) (Tf is a font setting operator and Tj is a text ouput operator. You should also escape invalid characters in Tj argument, see TextObject._formatText. Oh, and that 14 up there is font size.) Canvas and TextObject have special support for dynamic fonts. """ from struct import pack, unpack, error as structError from reportlab.lib.utils import getBytesIO, isPy3, bytestr, isUnicode, char2int from reportlab.pdfbase import pdfmetrics, pdfdoc from reportlab import rl_config, xrange, ascii from reportlab.lib.rl_accel import hex32, add32, calcChecksum, instanceStringWidthTTF from collections import namedtuple import os, time class TTFError(pdfdoc.PDFError): "TrueType font exception" pass if isPy3: def SUBSETN(n,table=bytes.maketrans(b'0123456789',b'ABCDEFGIJK')): return bytes('%6.6d'%n,'ASCII').translate(table) else: import string def SUBSETN(n,table=string.maketrans(b'0123456789',b'ABCDEFGIJK'),translate=string.translate): return translate('%6.6d'%n,table) # # Helpers # def makeToUnicodeCMap(fontname, subset): """Creates a ToUnicode CMap for a given subset. See Adobe _PDF_Reference (ISBN 0-201-75839-3) for more information.""" cmap = [ "/CIDInit /ProcSet findresource begin", "12 dict begin", "begincmap", "/CIDSystemInfo", "<< /Registry (%s)" % fontname, "/Ordering (%s)" % fontname, "/Supplement 0", ">> def", "/CMapName /%s def" % fontname, "/CMapType 2 def", "1 begincodespacerange", "<00> <%02X>" % (len(subset) - 1), "endcodespacerange", "%d beginbfchar" % len(subset) ] + ["<%02X> <%04X>" % (i,v) for i,v in enumerate(subset)] + [ "endbfchar", "endcmap", "CMapName currentdict /CMap defineresource pop", "end", "end" ] return '\n'.join(cmap) def splice(stream, offset, value): """Splices the given value into stream at the given offset and returns the resulting stream (the original is unchanged)""" return stream[:offset] + value + stream[offset + len(value):] def _set_ushort(stream, offset, value): """Writes the given unsigned short value into stream at the given offset and returns the resulting stream (the original is unchanged)""" return splice(stream, offset, pack(">H", value)) # # TrueType font handling # GF_ARG_1_AND_2_ARE_WORDS = 1 << 0 GF_ARGS_ARE_XY_VALUES = 1 << 1 GF_ROUND_XY_TO_GRID = 1 << 2 GF_WE_HAVE_A_SCALE = 1 << 3 GF_RESERVED = 1 << 4 GF_MORE_COMPONENTS = 1 << 5 GF_WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6 GF_WE_HAVE_A_TWO_BY_TWO = 1 << 7 GF_WE_HAVE_INSTRUCTIONS = 1 << 8 GF_USE_MY_METRICS = 1 << 9 GF_OVERLAP_COMPOUND = 1 << 10 GF_SCALED_COMPONENT_OFFSET = 1 << 11 GF_UNSCALED_COMPONENT_OFFSET = 1 << 12 _cached_ttf_dirs={} def _ttf_dirs(*roots): R = _cached_ttf_dirs.get(roots,None) if R is None: join = os.path.join realpath = os.path.realpath R = [] aR = R.append for root in roots: for r, d, f in os.walk(root,followlinks=True): s = realpath(r) if s not in R: aR(s) for s in d: s = realpath(join(r,s)) if s not in R: aR(s) _cached_ttf_dirs[roots] = R return R def TTFOpenFile(fn): '''Opens a TTF file possibly after searching TTFSearchPath returns (filename,file) ''' from reportlab.lib.utils import rl_isfile, open_for_read try: f = open_for_read(fn,'rb') return fn, f except IOError: import os if not os.path.isabs(fn): for D in _ttf_dirs(*rl_config.TTFSearchPath): tfn = os.path.join(D,fn) if rl_isfile(tfn): f = open_for_read(tfn,'rb') return tfn, f raise TTFError('Can\'t open file "%s"' % fn) class TTFontParser: "Basic TTF file parser" ttfVersions = (0x00010000,0x74727565,0x74746366) ttcVersions = (0x00010000,0x00020000) fileKind='TTF' def __init__(self, file, validate=0,subfontIndex=0): """Loads and parses a TrueType font file. file can be a filename or a file object. If validate is set to a false values, skips checksum validation. This can save time, especially if the font is large. """ self.validate = validate self.readFile(file) self._filename = getattr(file,'name','') if self._filename.startswith('<'): self._filename = '' isCollection = self.readHeader() if isCollection: self.readTTCHeader() self.getSubfont(subfontIndex) else: if self.validate: self.checksumFile() self.readTableDirectory() self.subfontNameX = b'' def readTTCHeader(self): self.ttcVersion = self.read_ulong() self.fileKind = 'TTC' self.ttfVersions = self.ttfVersions[:-1] if self.ttcVersion not in self.ttcVersions: raise TTFError('"%s" is not a %s file: can\'t read version 0x%8.8x' %(self.filename,self.fileKind,self.ttcVersion)) self.numSubfonts = self.read_ulong() self.subfontOffsets = [] a = self.subfontOffsets.append for i in xrange(self.numSubfonts): a(self.read_ulong()) def getSubfont(self,subfontIndex): if self.fileKind!='TTC': raise TTFError('"%s" is not a TTC file: use this method' % (self.filename,self.fileKind)) try: pos = self.subfontOffsets[subfontIndex] except IndexError: raise TTFError('TTC file "%s": bad subfontIndex %s not in [0,%d]' % (self.filename,subfontIndex,self.numSubfonts-1)) self.seek(pos) self.readHeader() self.readTableDirectory() self.subfontNameX = bytestr('-'+str(subfontIndex)) def readTableDirectory(self): try: self.numTables = self.read_ushort() self.searchRange = self.read_ushort() self.entrySelector = self.read_ushort() self.rangeShift = self.read_ushort() # Read table directory self.table = {} self.tables = [] for n in xrange(self.numTables): record = {} record['tag'] = self.read_tag() record['checksum'] = self.read_ulong() record['offset'] = self.read_ulong() record['length'] = self.read_ulong() self.tables.append(record) self.table[record['tag']] = record except: raise TTFError('Corrupt %s file "%s" cannot read Table Directory' % (self.fileKind, self.filename)) if self.validate: self.checksumTables() def readHeader(self): '''read the sfnt header at the current position''' try: self.version = version = self.read_ulong() except: raise TTFError('"%s" is not a %s file: can\'t read version' %(self.filename,self.fileKind)) if version==0x4F54544F: raise TTFError('%s file "%s": postscript outlines are not supported'%(self.fileKind,self.filename)) if version not in self.ttfVersions: raise TTFError('Not a TrueType font: version=0x%8.8X' % version) return version==self.ttfVersions[-1] def readFile(self,f): if hasattr(f,'read'): self.filename = getattr(f,'name','(ttf)') #good idea Marius self._ttf_data = f.read() else: self.filename, f = TTFOpenFile(f) self._ttf_data = f.read() f.close() self._pos = 0 def checksumTables(self): # Check the checksums for all tables for t in self.tables: table = self.get_chunk(t['offset'], t['length']) checksum = calcChecksum(table) if t['tag'] == 'head': adjustment = unpack('>l', table[8:8+4])[0] checksum = add32(checksum, -adjustment) xchecksum = t['checksum'] if xchecksum != checksum: raise TTFError('TTF file "%s": invalid checksum %s table: %s (expected %s)' % (self.filename,hex32(checksum),t['tag'],hex32(xchecksum))) def checksumFile(self): # Check the checksums for the whole file checksum = calcChecksum(self._ttf_data) if 0xB1B0AFBA!=checksum: raise TTFError('TTF file "%s": invalid checksum %s (expected 0xB1B0AFBA) len: %d &3: %d' % (self.filename,hex32(checksum),len(self._ttf_data),(len(self._ttf_data)&3))) def get_table_pos(self, tag): "Returns the offset and size of a given TTF table." offset = self.table[tag]['offset'] length = self.table[tag]['length'] return (offset, length) def seek(self, pos): "Moves read pointer to a given offset in file." self._pos = pos def skip(self, delta): "Skip the given number of bytes." self._pos = self._pos + delta def seek_table(self, tag, offset_in_table = 0): """Moves read pointer to the given offset within a given table and returns absolute offset of that position in the file.""" self._pos = self.get_table_pos(tag)[0] + offset_in_table return self._pos if isPy3: def read_tag(self): "Read a 4-character tag" self._pos += 4 return str(self._ttf_data[self._pos - 4:self._pos],'utf8') def get_chunk(self, pos, length): "Return a chunk of raw data at given position" return bytes(self._ttf_data[pos:pos+length]) def read_uint8(self): self._pos += 1 return int(self._ttf_data[self._pos-1]) else: def read_tag(self): "Read a 4-character tag" self._pos += 4 return self._ttf_data[self._pos - 4:self._pos] def get_chunk(self, pos, length): "Return a chunk of raw data at given position" return self._ttf_data[pos:pos+length] def read_uint8(self): self._pos += 1 return ord(self._ttf_data[self._pos-1]) def read_ushort(self): "Reads an unsigned short" self._pos += 2 return unpack('>H',self._ttf_data[self._pos-2:self._pos])[0] def read_ulong(self): "Reads an unsigned long" self._pos += 4 return unpack('>L',self._ttf_data[self._pos - 4:self._pos])[0] def read_short(self): "Reads a signed short" self._pos += 2 try: return unpack('>h',self._ttf_data[self._pos-2:self._pos])[0] except structError as error: raise TTFError(error) def get_ushort(self, pos): "Return an unsigned short at given position" return unpack('>H',self._ttf_data[pos:pos+2])[0] def get_ulong(self, pos): "Return an unsigned long at given position" return unpack('>L',self._ttf_data[pos:pos+4])[0] def get_table(self, tag): "Return the given TTF table" pos, length = self.get_table_pos(tag) return self._ttf_data[pos:pos+length] class TTFontMaker: "Basic TTF file generator" def __init__(self): "Initializes the generator." self.tables = {} def add(self, tag, data): "Adds a table to the TTF file." if tag == 'head': data = splice(data, 8, b'\0\0\0\0') self.tables[tag] = data def makeStream(self): "Finishes the generation and returns the TTF file as a string" stm = getBytesIO() write = stm.write tables = self.tables numTables = len(tables) searchRange = 1 entrySelector = 0 while searchRange * 2 <= numTables: searchRange = searchRange * 2 entrySelector = entrySelector + 1 searchRange = searchRange * 16 rangeShift = numTables * 16 - searchRange # Header write(pack(">lHHHH", 0x00010000, numTables, searchRange, entrySelector, rangeShift)) # Table directory offset = 12 + numTables * 16 wStr = (lambda x:write(bytes(tag,'latin1'))) if isPy3 else write tables_items = list(sorted(tables.items())) for tag, data in tables_items: if tag == 'head': head_start = offset checksum = calcChecksum(data) wStr(tag) write(pack(">LLL", checksum, offset, len(data))) paddedLength = (len(data)+3)&~3 offset = offset + paddedLength # Table data for tag, data in tables_items: data += b"\0\0\0" write(data[:len(data)&~3]) checksum = calcChecksum(stm.getvalue()) checksum = add32(0xB1B0AFBA, -checksum) stm.seek(head_start + 8) write(pack('>L', checksum)) return stm.getvalue() #this is used in the cmap encoding fmt==2 case CMapFmt2SubHeader = namedtuple('CMapFmt2SubHeader', 'firstCode entryCount idDelta idRangeOffset') class TTFontFile(TTFontParser): "TTF file parser and generator" _agfnc = 0 _agfnm = {} def __init__(self, file, charInfo=1, validate=0,subfontIndex=0): """Loads and parses a TrueType font file. file can be a filename or a file object. If validate is set to a false values, skips checksum validation. This can save time, especially if the font is large. See TTFontFile.extractInfo for more information. """ TTFontParser.__init__(self, file, validate=validate,subfontIndex=subfontIndex) self.extractInfo(charInfo) def extractInfo(self, charInfo=1): """ Extract typographic information from the loaded font file. The following attributes will be set:: name PostScript font name flags Font flags ascent Typographic ascender in 1/1000ths of a point descent Typographic descender in 1/1000ths of a point capHeight Cap height in 1/1000ths of a point (0 if not available) bbox Glyph bounding box [l,t,r,b] in 1/1000ths of a point _bbox Glyph bounding box [l,t,r,b] in unitsPerEm unitsPerEm Glyph units per em italicAngle Italic angle in degrees ccw stemV stem weight in 1/1000ths of a point (approximate) If charInfo is true, the following will also be set:: defaultWidth default glyph width in 1/1000ths of a point charWidths dictionary of character widths for every supported UCS character code This will only work if the font has a Unicode cmap (platform 3, encoding 1, format 4 or platform 0 any encoding format 4). Setting charInfo to false avoids this requirement """ # name - Naming table name_offset = self.seek_table("name") format = self.read_ushort() if format != 0: raise TTFError("Unknown name table format (%d)" % format) numRecords = self.read_ushort() string_data_offset = name_offset + self.read_ushort() names = {1:None,2:None,3:None,4:None,6:None} K = list(names.keys()) nameCount = len(names) for i in xrange(numRecords): platformId = self.read_ushort() encodingId = self.read_ushort() languageId = self.read_ushort() nameId = self.read_ushort() length = self.read_ushort() offset = self.read_ushort() if nameId not in K: continue N = None if platformId == 3 and encodingId == 1 and languageId == 0x409: # Microsoft, Unicode, US English, PS Name opos = self._pos try: self.seek(string_data_offset + offset) if length % 2 != 0: raise TTFError("PostScript name is UTF-16BE string of odd length") length /= 2 N = [] A = N.append while length > 0: char = self.read_ushort() A(bytes([char]) if isPy3 else chr(char)) length -= 1 N = b''.join(N) finally: self._pos = opos elif platformId == 1 and encodingId == 0 and languageId == 0: # Macintosh, Roman, English, PS Name # According to OpenType spec, if PS name exists, it must exist # both in MS Unicode and Macintosh Roman formats. Apparently, # you can find live TTF fonts which only have Macintosh format. N = self.get_chunk(string_data_offset + offset, length) if N and names[nameId]==None: names[nameId] = N nameCount -= 1 if nameCount==0: break if names[6] is not None: psName = names[6] elif names[4] is not None: psName = names[4] # Fine, one last try before we bail. elif names[1] is not None: psName = names[1] else: psName = None # Don't just assume, check for None since some shoddy fonts cause crashes here... if not psName: if rl_config.autoGenerateTTFMissingTTFName: fn = self._filename if fn: bfn = os.path.splitext(os.path.basename(fn))[0] if not fn: psName = bytestr('_RL_%s_%s_TTF' % (time.time(), self.__class__._agfnc)) self.__class__._agfnc += 1 else: psName = self._agfnm.get(fn,'') if not psName: if bfn: psName = bytestr('_RL_%s_TTF' % bfn) else: psName = bytestr('_RL_%s_%s_TTF' % (time.time(), self.__class__._agfnc)) self.__class__._agfnc += 1 self._agfnm[fn] = psName else: raise TTFError("Could not find PostScript font name") psName = psName.replace(b" ", b"-") #Dinu Gherman's fix for font names with spaces for c in psName: if char2int(c)>126 or c in b' [](){}<>/%': raise TTFError("psName=%r contains invalid character %s" % (psName,ascii(c))) self.name = psName self.familyName = names[1] or psName self.styleName = names[2] or 'Regular' self.fullName = names[4] or psName self.uniqueFontID = names[3] or psName # head - Font header table try: self.seek_table("head") except: raise TTFError('head table not found ttf name=%s' % self.name) ver_maj, ver_min = self.read_ushort(), self.read_ushort() if ver_maj != 1: raise TTFError('Unknown head table version %d.%04x' % (ver_maj, ver_min)) self.fontRevision = self.read_ushort(), self.read_ushort() self.skip(4) magic = self.read_ulong() if magic != 0x5F0F3CF5: raise TTFError('Invalid head table magic %04x' % magic) self.skip(2) self.unitsPerEm = unitsPerEm = self.read_ushort() scale = lambda x, unitsPerEm=unitsPerEm: x * 1000. / unitsPerEm self.skip(16) xMin = self.read_short() yMin = self.read_short() xMax = self.read_short() yMax = self.read_short() self.bbox = list(map(scale, [xMin, yMin, xMax, yMax])) self.skip(3*2) indexToLocFormat = self.read_ushort() glyphDataFormat = self.read_ushort() # OS/2 - OS/2 and Windows metrics table # (needs data from head table) subsettingAllowed = True if "OS/2" in self.table: self.seek_table("OS/2") version = self.read_ushort() self.skip(2) usWeightClass = self.read_ushort() self.skip(2) fsType = self.read_ushort() if fsType==0x0002 or (fsType & 0x0300): subsettingAllowed = os.path.basename(self.filename) not in rl_config.allowTTFSubsetting self.skip(58) #11*2 + 10 + 4*4 + 4 + 3*2 sTypoAscender = self.read_short() sTypoDescender = self.read_short() self.ascent = scale(sTypoAscender) # XXX: for some reason it needs to be multiplied by 1.24--1.28 self.descent = scale(sTypoDescender) if version > 1: self.skip(16) #3*2 + 2*4 + 2 sCapHeight = self.read_short() self.capHeight = scale(sCapHeight) else: self.capHeight = self.ascent else: # Microsoft TTFs require an OS/2 table; Apple ones do not. Try to # cope. The data is not very important anyway. usWeightClass = 500 self.ascent = scale(yMax) self.descent = scale(yMin) self.capHeight = self.ascent # There's no way to get stemV from a TTF file short of analyzing actual outline data # This fuzzy formula is taken from pdflib sources, but we could just use 0 here self.stemV = 50 + int((usWeightClass / 65.0) ** 2) # post - PostScript table # (needs data from OS/2 table) self.seek_table("post") ver_maj, ver_min = self.read_ushort(), self.read_ushort() if ver_maj not in (1, 2, 3, 4): # Adobe/MS documents 1, 2, 2.5, 3; Apple also has 4. # From Apple docs it seems that we do not need to care # about the exact version, so if you get this error, you can # try to remove this check altogether. raise TTFError('Unknown post table version %d.%04x' % (ver_maj, ver_min)) self.italicAngle = self.read_short() + self.read_ushort() / 65536.0 self.underlinePosition = self.read_short() self.underlineThickness = self.read_short() isFixedPitch = self.read_ulong() self.flags = FF_SYMBOLIC # All fonts that contain characters # outside the original Adobe character # set are considered "symbolic". if self.italicAngle!= 0: self.flags = self.flags | FF_ITALIC if usWeightClass >= 600: # FW_REGULAR == 500, FW_SEMIBOLD == 600 self.flags = self.flags | FF_FORCEBOLD if isFixedPitch: self.flags = self.flags | FF_FIXED # XXX: FF_SERIF? FF_SCRIPT? FF_ALLCAP? FF_SMALLCAP? # hhea - Horizontal header table self.seek_table("hhea") ver_maj, ver_min = self.read_ushort(), self.read_ushort() if ver_maj != 1: raise TTFError('Unknown hhea table version %d.%04x' % (ver_maj, ver_min)) self.skip(28) metricDataFormat = self.read_ushort() if metricDataFormat != 0: raise TTFError('Unknown horizontal metric data format (%d)' % metricDataFormat) numberOfHMetrics = self.read_ushort() if numberOfHMetrics == 0: raise TTFError('Number of horizontal metrics is 0') # maxp - Maximum profile table self.seek_table("maxp") ver_maj, ver_min = self.read_ushort(), self.read_ushort() if ver_maj != 1: raise TTFError('Unknown maxp table version %d.%04x' % (ver_maj, ver_min)) self.numGlyphs = numGlyphs = self.read_ushort() if not subsettingAllowed: if self.numGlyphs>0xFF: raise TTFError('Font does not allow subsetting/embedding (%04X)' % fsType) else: self._full_font = True else: self._full_font = False if not charInfo: self.charToGlyph = None self.defaultWidth = None self.charWidths = None return if glyphDataFormat != 0: raise TTFError('Unknown glyph data format (%d)' % glyphDataFormat) # cmap - Character to glyph index mapping table cmap_offset = self.seek_table("cmap") cmapVersion = self.read_ushort() cmapTableCount = self.read_ushort() if cmapTableCount==0 and cmapVersion!=0: cmapTableCount, cmapVersion = cmapVersion, cmapTableCount encoffs = None enc = 0 for n in xrange(cmapTableCount): platform = self.read_ushort() encoding = self.read_ushort() offset = self.read_ulong() if platform==3: enc = 1 encoffs = offset elif platform==1 and encoding==0 and enc!=1: enc = 2 encoffs = offset elif platform==1 and encoding==1: enc = 1 encoffs = offset elif platform==0 and encoding!=5: enc = 1 encoffs = offset if encoffs is None: raise TTFError('could not find a suitable cmap encoding') encoffs += cmap_offset self.seek(encoffs) fmt = self.read_ushort() self.charToGlyph = charToGlyph = {} glyphToChar = {} if fmt in (13,12,10,8): self.skip(2) #padding length = self.read_ulong() lang = self.read_ulong() else: length = self.read_ushort() lang = self.read_ushort() if fmt==0: T = [self.read_uint8() for i in xrange(length-6)] for unichar in xrange(min(256,self.numGlyphs,len(table))): glyph = T[glyph] charToGlyph[unichar] = glyph glyphToChar.setdefault(glyph,[]).append(unichar) elif fmt==4: limit = encoffs + length segCount = int(self.read_ushort() / 2.0) self.skip(6) endCount = [self.read_ushort() for _ in xrange(segCount)] self.skip(2) startCount = [self.read_ushort() for _ in xrange(segCount)] idDelta = [self.read_short() for _ in xrange(segCount)] idRangeOffset_start = self._pos idRangeOffset = [self.read_ushort() for _ in xrange(segCount)] # Now it gets tricky. for n in xrange(segCount): for unichar in xrange(startCount[n], endCount[n] + 1): if idRangeOffset[n] == 0: glyph = (unichar + idDelta[n]) & 0xFFFF else: offset = (unichar - startCount[n]) * 2 + idRangeOffset[n] offset = idRangeOffset_start + 2 * n + offset if offset >= limit: # workaround for broken fonts (like Thryomanes) glyph = 0 else: glyph = self.get_ushort(offset) if glyph != 0: glyph = (glyph + idDelta[n]) & 0xFFFF charToGlyph[unichar] = glyph glyphToChar.setdefault(glyph,[]).append(unichar) elif fmt==6: first = self.read_ushort() count = self.read_ushort() for glyph in xrange(first,first+count): unichar = self.read_ushort() charToGlyph[unichar] = glyph glyphToChar.setdefault(glyph,[]).append(unichar) elif fmt==10: first = self.read_ulong() count = self.read_ulong() for glyph in xrange(first,first+count): unichar = self.read_ushort() charToGlyph[unichar] = glyph glyphToChar.setdefault(glyph,[]).append(unichar) elif fmt==12: segCount = self.read_ulong() for n in xrange(segCount): start = self.read_ulong() end = self.read_ulong() inc = self.read_ulong() - start for unichar in xrange(start,end+1): glyph = unichar + inc charToGlyph[unichar] = glyph glyphToChar.setdefault(glyph,[]).append(unichar) elif fmt==13: segCount = self.read_ulong() for n in xrange(segCount): start = self.read_ulong() end = self.read_ulong() gid = self.read_ulong() for unichar in xrange(start,end+1): charToGlyph[unichar] = gid glyphToChar.setdefault(gid,[]).append(unichar) elif fmt==2: T = [self.read_ushort() for i in xrange(256)] #subheader keys maxSHK = max(T) SH = [] for i in xrange(maxSHK+1): firstCode = self.read_ushort() entryCount = self.read_ushort() idDelta = self.read_ushort() idRangeOffset = (self.read_ushort()-(maxSHK-i)*8-2)>>1 SH.append(CMapFmt2SubHeader(firstCode,entryCount,idDelta,idRangeOffset)) #number of glyph indexes to read. it is the length of the entire subtable minus that bit we've read so far entryCount = (length-(self._pos-(cmap_offset+encoffs)))>>1 glyphs = [self.read_short() for i in xrange(entryCount)] last = -1 for unichar in xrange(256): if T[unichar]==0: #Special case, single byte encoding entry, look unichar up in subhead if last!=-1: glyph = 0 elif (unichar=SH[0].firstCode+SH[0].entryCount or SH[0].idRangeOffset+(unichar-SH[0].firstCode)>=entryCount): glyph = 0 else: glyph = glyphs[SH[0].idRangeOffset+(unichar-SH[0].firstCode)] if glyph!=0: glyph += SH[0].idDelta #assume the single byte codes are ascii if glyph!=0 and glyph=entryCount: glyph = 0 else: glyph = glyphs[SH[k].idRangeOffset+j] if glyph!= 0: glyph += SH[k].idDelta if glyph!=0 and glyph 0: "missing character" glyphMap = [0] # new glyph index -> old glyph index glyphSet = {0:0} # old glyph index -> new glyph index codeToGlyph = {} # unicode -> new glyph index for code in subset: if code in self.charToGlyph: originalGlyphIdx = self.charToGlyph[code] else: originalGlyphIdx = 0 if originalGlyphIdx not in glyphSet: glyphSet[originalGlyphIdx] = len(glyphMap) glyphMap.append(originalGlyphIdx) codeToGlyph[code] = glyphSet[originalGlyphIdx] # Also include glyphs that are parts of composite glyphs start = self.get_table_pos('glyf')[0] n = 0 while n < len(glyphMap): originalGlyphIdx = glyphMap[n] glyphPos = self.glyphPos[originalGlyphIdx] glyphLen = self.glyphPos[originalGlyphIdx + 1] - glyphPos n += 1 if not glyphLen: continue self.seek(start + glyphPos) numberOfContours = self.read_short() if numberOfContours < 0: # composite glyph self.skip(8) flags = GF_MORE_COMPONENTS while flags & GF_MORE_COMPONENTS: flags = self.read_ushort() glyphIdx = self.read_ushort() if glyphIdx not in glyphSet: glyphSet[glyphIdx] = len(glyphMap) glyphMap.append(glyphIdx) if flags & GF_ARG_1_AND_2_ARE_WORDS: self.skip(4) else: self.skip(2) if flags & GF_WE_HAVE_A_SCALE: self.skip(2) elif flags & GF_WE_HAVE_AN_X_AND_Y_SCALE: self.skip(4) elif flags & GF_WE_HAVE_A_TWO_BY_TWO: self.skip(8) # The following tables are simply copied from the original for tag in ('name', 'OS/2', 'cvt ', 'fpgm', 'prep'): try: output.add(tag, self.get_table(tag)) except KeyError: # Apparently some of the tables are optional (cvt, fpgm, prep). # The lack of the required ones (name, OS/2) would have already # been caught before. pass # post - PostScript post = b"\x00\x03\x00\x00" + self.get_table('post')[4:16] + b"\x00" * 16 output.add('post', post) numGlyphs = len(glyphMap) # hmtx - Horizontal Metrics hmtx = [] for n in xrange(numGlyphs): aw, lsb = self.hmetrics[glyphMap[n]] hmtx.append(int(aw)) hmtx.append(int(lsb)) #work out n as 0 or first aw that's the start of a run n = len(hmtx)-2 while n and hmtx[n]==hmtx[n-2]: n -= 2 if not n: n = 2 #need at least one pair numberOfHMetrics = n>>1 #number of full H Metric pairs hmtx = hmtx[:n] + hmtx[n+1::2] #full pairs + all the trailing lsb's hmtx = pack(*([">%dH" % len(hmtx)] + hmtx)) output.add('hmtx', hmtx) # hhea - Horizontal Header hhea = self.get_table('hhea') hhea = _set_ushort(hhea, 34, numberOfHMetrics) output.add('hhea', hhea) # maxp - Maximum Profile maxp = self.get_table('maxp') maxp = _set_ushort(maxp, 4, numGlyphs) output.add('maxp', maxp) # cmap - Character to glyph mapping # XXX maybe use format 0 if possible, not 6? entryCount = len(subset) length = 10 + entryCount * 2 cmap = [0, 1, # version, number of tables 1, 0, 0,12, # platform, encoding, offset (hi,lo) 6, length, 0, # format, length, language 0, entryCount] + \ list(map(codeToGlyph.get, subset)) cmap = pack(*([">%dH" % len(cmap)] + cmap)) output.add('cmap', cmap) # glyf - Glyph data glyphData = self.get_table('glyf') offsets = [] glyf = [] pos = 0 for n in xrange(numGlyphs): offsets.append(pos) originalGlyphIdx = glyphMap[n] glyphPos = self.glyphPos[originalGlyphIdx] glyphLen = self.glyphPos[originalGlyphIdx + 1] - glyphPos data = glyphData[glyphPos:glyphPos+glyphLen] # Fix references in composite glyphs if glyphLen > 2 and unpack(">h", data[:2])[0] < 0: # composite glyph pos_in_glyph = 10 flags = GF_MORE_COMPONENTS while flags & GF_MORE_COMPONENTS: flags = unpack(">H", data[pos_in_glyph:pos_in_glyph+2])[0] glyphIdx = unpack(">H", data[pos_in_glyph+2:pos_in_glyph+4])[0] data = _set_ushort(data, pos_in_glyph + 2, glyphSet[glyphIdx]) pos_in_glyph = pos_in_glyph + 4 if flags & GF_ARG_1_AND_2_ARE_WORDS: pos_in_glyph = pos_in_glyph + 4 else: pos_in_glyph = pos_in_glyph + 2 if flags & GF_WE_HAVE_A_SCALE: pos_in_glyph = pos_in_glyph + 2 elif flags & GF_WE_HAVE_AN_X_AND_Y_SCALE: pos_in_glyph = pos_in_glyph + 4 elif flags & GF_WE_HAVE_A_TWO_BY_TWO: pos_in_glyph = pos_in_glyph + 8 glyf.append(data) pos = pos + glyphLen if pos % 4 != 0: padding = 4 - pos % 4 glyf.append(b'\0' * padding) pos = pos + padding offsets.append(pos) output.add('glyf', b''.join(glyf)) # loca - Index to location loca = [] if (pos + 1) >> 1 > 0xFFFF: indexToLocFormat = 1 # long format for offset in offsets: loca.append(offset) loca = pack(*([">%dL" % len(loca)] + loca)) else: indexToLocFormat = 0 # short format for offset in offsets: loca.append(offset >> 1) loca = pack(*([">%dH" % len(loca)] + loca)) output.add('loca', loca) # head - Font header head = self.get_table('head') head = _set_ushort(head, 50, indexToLocFormat) output.add('head', head) return output.makeStream() # # TrueType font embedding # # PDF font flags (see PDF Reference Guide table 5.19) FF_FIXED = 1 << 1-1 FF_SERIF = 1 << 2-1 FF_SYMBOLIC = 1 << 3-1 FF_SCRIPT = 1 << 4-1 FF_NONSYMBOLIC = 1 << 6-1 FF_ITALIC = 1 << 7-1 FF_ALLCAP = 1 << 17-1 FF_SMALLCAP = 1 << 18-1 FF_FORCEBOLD = 1 << 19-1 class TTFontFace(TTFontFile, pdfmetrics.TypeFace): """TrueType typeface. Conceptually similar to a single byte typeface, but the glyphs are identified by UCS character codes instead of glyph names.""" def __init__(self, filename, validate=0, subfontIndex=0): "Loads a TrueType font from filename." pdfmetrics.TypeFace.__init__(self, None) TTFontFile.__init__(self, filename, validate=validate, subfontIndex=subfontIndex) def getCharWidth(self, code): "Returns the width of character U+" return self.charWidths.get(code, self.defaultWidth) def addSubsetObjects(self, doc, fontname, subset): """Generate a TrueType font subset and add it to the PDF document. Returns a PDFReference to the new FontDescriptor object.""" fontFile = pdfdoc.PDFStream() fontFile.content = self.makeSubset(subset) fontFile.dictionary['Length1'] = len(fontFile.content) if doc.compression: fontFile.filters = [pdfdoc.PDFZCompress] fontFileRef = doc.Reference(fontFile, 'fontFile:%s(%s)' % (self.filename, fontname)) flags = self.flags & ~ FF_NONSYMBOLIC flags = flags | FF_SYMBOLIC fontDescriptor = pdfdoc.PDFDictionary({ 'Type': '/FontDescriptor', 'Ascent': self.ascent, 'CapHeight': self.capHeight, 'Descent': self.descent, 'Flags': flags, 'FontBBox': pdfdoc.PDFArray(self.bbox), 'FontName': pdfdoc.PDFName(fontname), 'ItalicAngle': self.italicAngle, 'StemV': self.stemV, 'FontFile2': fontFileRef, }) return doc.Reference(fontDescriptor, 'fontDescriptor:' + fontname) class TTEncoding: """Encoding for TrueType fonts (always UTF-8). TTEncoding does not directly participate in PDF object creation, since we need a number of different 8-bit encodings for every generated font subset. TTFont itself cares about that.""" def __init__(self): self.name = "UTF-8" class TTFont: """Represents a TrueType font. Its encoding is always UTF-8. Note: you cannot use the same TTFont object for different documents at the same time. Example of usage: font = ttfonts.TTFont('PostScriptFontName', '/path/to/font.ttf') pdfmetrics.registerFont(font) canvas.setFont('PostScriptFontName', size) canvas.drawString(x, y, "Some text encoded in UTF-8") """ class State: namePrefix = 'F' def __init__(self,asciiReadable=None,ttf=None): A = self.assignments = {} self.nextCode = 0 self.internalName = None self.frozen = 0 if getattr(getattr(ttf,'face',None),'_full_font',None): C = set(self.charToGlyph.keys()) if 0xa0 in C: C.remove(0xa0) for n in xrange(256): if n in C: A[n] = n C.remove(n) for n in C: A[n] = n self.subsets = [[n for n in A]] self.frozen = True return if asciiReadable is None: asciiReadable = rl_config.ttfAsciiReadable if asciiReadable: # Let's add the first 128 unicodes to the 0th subset, so ' ' # always has code 32 (for word spacing to work) and the ASCII # output is readable subset0 = list(xrange(128)) self.subsets = [subset0] for n in subset0: A[n] = n self.nextCode = 128 else: self.subsets = [[32]*33] A[32] = 32 _multiByte = 1 # We want our own stringwidth _dynamicFont = 1 # We want dynamic subsetting def __init__(self, name, filename, validate=0, subfontIndex=0,asciiReadable=None): """Loads a TrueType font from filename. If validate is set to a false values, skips checksum validation. This can save time, especially if the font is large. """ self.fontName = name self.face = TTFontFace(filename, validate=validate, subfontIndex=subfontIndex) self.encoding = TTEncoding() from weakref import WeakKeyDictionary self.state = WeakKeyDictionary() if asciiReadable is None: asciiReadable = rl_config.ttfAsciiReadable self._asciiReadable = asciiReadable def stringWidth(self,text,size,encoding='utf8'): return instanceStringWidthTTF(self,text,size,encoding) def _assignState(self,doc,asciiReadable=None,namePrefix=None): '''convenience function for those wishing to roll their own state properties''' if asciiReadable is None: asciiReadable = self._asciiReadable try: state = self.state[doc] except KeyError: state = self.state[doc] = TTFont.State(asciiReadable,self) if namePrefix is not None: state.namePrefix = namePrefix return state def splitString(self, text, doc, encoding='utf-8'): """Splits text into a number of chunks, each of which belongs to a single subset. Returns a list of tuples (subset, string). Use subset numbers with getSubsetInternalName. Doc is needed for distinguishing subsets when building different documents at the same time.""" asciiReadable = self._asciiReadable try: state = self.state[doc] except KeyError: state = self.state[doc] = TTFont.State(asciiReadable,self) curSet = -1 cur = [] results = [] if not isUnicode(text): text = text.decode('utf-8') # encoding defaults to utf-8 assignments = state.assignments subsets = state.subsets reserveTTFNotdef = rl_config.reserveTTFNotdef for code in map(ord,text): if code==0xa0: code = 32 #map nbsp into space if code in assignments: n = assignments[code] else: if state.frozen: raise pdfdoc.PDFError("Font %s is already frozen, cannot add new character U+%04X" % (self.fontName, code)) n = state.nextCode if n&0xFF==32: # make code 32 always be a space character if n!=32: subsets[n >> 8].append(32) state.nextCode += 1 n = state.nextCode if n>32: if not(n&0xFF): if reserveTTFNotdef: subsets.append([0]) #force code 0 in as notdef state.nextCode += 1 n = state.nextCode else: subsets.append([]) subsets[n >> 8].append(code) else: subsets[0][n] = code state.nextCode += 1 assignments[code] = n #subsets[n>>8].append(code) if (n >> 8) != curSet: if cur: results.append((curSet,bytes(cur) if isPy3 else ''.join(chr(c) for c in cur))) curSet = (n >> 8) cur = [] cur.append(n & 0xFF) if cur: results.append((curSet,bytes(cur) if isPy3 else ''.join(chr(c) for c in cur))) return results def getSubsetInternalName(self, subset, doc): """Returns the name of a PDF Font object corresponding to a given subset of this dynamic font. Use this function instead of PDFDocument.getInternalFontName.""" try: state = self.state[doc] except KeyError: state = self.state[doc] = TTFont.State(self._asciiReadable) if subset < 0 or subset >= len(state.subsets): raise IndexError('Subset %d does not exist in font %s' % (subset, self.fontName)) if state.internalName is None: state.internalName = state.namePrefix +repr(len(doc.fontMapping) + 1) doc.fontMapping[self.fontName] = '/' + state.internalName doc.delayedFonts.append(self) return '/%s+%d' % (state.internalName, subset) def addObjects(self, doc): """Makes one or more PDF objects to be added to the document. The caller supplies the internal name to be used (typically F1, F2, ... in sequence). This method creates a number of Font and FontDescriptor objects. Every FontDescriptor is a (no more than) 256 character subset of the original TrueType font.""" try: state = self.state[doc] except KeyError: state = self.state[doc] = TTFont.State(self._asciiReadable) state.frozen = 1 for n,subset in enumerate(state.subsets): internalName = self.getSubsetInternalName(n, doc)[1:] baseFontName = (b''.join((SUBSETN(n),b'+',self.face.name,self.face.subfontNameX))).decode('pdfdoc') pdfFont = pdfdoc.PDFTrueTypeFont() pdfFont.__Comment__ = 'Font %s subset %d' % (self.fontName, n) pdfFont.Name = internalName pdfFont.BaseFont = baseFontName pdfFont.FirstChar = 0 pdfFont.LastChar = len(subset) - 1 widths = list(map(self.face.getCharWidth, subset)) pdfFont.Widths = pdfdoc.PDFArray(widths) cmapStream = pdfdoc.PDFStream() cmapStream.content = makeToUnicodeCMap(baseFontName, subset) if doc.compression: cmapStream.filters = [pdfdoc.PDFZCompress] pdfFont.ToUnicode = doc.Reference(cmapStream, 'toUnicodeCMap:' + baseFontName) pdfFont.FontDescriptor = self.face.addSubsetObjects(doc, baseFontName, subset) # link it in ref = doc.Reference(pdfFont, internalName) fontDict = doc.idToObject['BasicFonts'].dict fontDict[internalName] = pdfFont del self.state[doc] #preserve the initial values here def _reset(): _cached_ttf_dirs.clear() from reportlab.rl_config import register_reset register_reset(_reset) del register_reset reportlab-3.5.34/src/reportlab/pdfbase/pdfform.py0000664000175000017500000003654613544671343022620 0ustar rptlabrptlab00000000000000 """Support for Acrobat Forms in ReportLab documents This module is somewhat experimental at this time. Includes basic support for textfields, select fields (drop down lists), and check buttons. The public interface consists of functions at the moment. At some later date these operations may be made into canvas methods. (comments?) The ...Absolute(...) functions position the fields with respect to the absolute canvas coordinate space -- that is, they do not respect any coordinate transforms in effect for the canvas. The ...Relative(...) functions position the ONLY THE LOWER LEFT CORNER of the field using the coordinate transform in effect for the canvas. THIS WILL ONLY WORK CORRECTLY FOR TRANSLATED COORDINATES -- THE SHAPE, SIZE, FONTSIZE, AND ORIENTATION OF THE FIELD WILL NOT BE EFFECTED BY SCALING, ROTATION, SKEWING OR OTHER NON-TRANSLATION COORDINATE TRANSFORMS. Please note that all field names (titles) in a given document must be unique. Textfields and select fields only support the "base 14" canvas fonts at this time. See individual function docstrings below for more information. The function test1(...) generates a simple test file. THIS CONTRIBUTION WAS COMMISSIONED BY REPORTLAB USERS WHO WISH TO REMAIN ANONYMOUS. """ ### NOTE: MAKE THE STRING FORMATS DYNAMIC IN PATTERNS TO SUPPORT ENCRYPTION XXXX import string from reportlab.pdfbase.pdfdoc import PDFString, PDFStream, PDFDictionary, PDFName, PDFObject from reportlab.lib.colors import obj_R_G_B #==========================public interfaces def textFieldAbsolute(canvas, title, x, y, width, height, value="", maxlen=1000000, multiline=0): """Place a text field on the current page with name title at ABSOLUTE position (x,y) with dimensions (width, height), using value as the default value and maxlen as the maximum permissible length. If multiline is set make it a multiline field. """ theform = getForm(canvas) return theform.textField(canvas, title, x, y, x+width, y+height, value, maxlen, multiline) def textFieldRelative(canvas, title, xR, yR, width, height, value="", maxlen=1000000, multiline=0): "same as textFieldAbsolute except the x and y are relative to the canvas coordinate transform" (xA, yA) = canvas.absolutePosition(xR,yR) return textFieldAbsolute(canvas, title, xA, yA, width, height, value, maxlen, multiline) def buttonFieldAbsolute(canvas, title, value, x, y, width=16.7704, height=14.907): """Place a check button field on the current page with name title and default value value (one of "Yes" or "Off") at ABSOLUTE position (x,y). """ theform = getForm(canvas) return theform.buttonField(canvas, title, value, x, y, width=width, height=height) def buttonFieldRelative(canvas, title, value, xR, yR, width=16.7704, height=14.907): "same as buttonFieldAbsolute except the x and y are relative to the canvas coordinate transform" (xA, yA) = canvas.absolutePosition(xR,yR) return buttonFieldAbsolute(canvas, title, value, xA, yA, width=width, height=height) def selectFieldAbsolute(canvas, title, value, options, x, y, width, height): """Place a select field (drop down list) on the current page with name title and with options listed in the sequence options default value value (must be one of options) at ABSOLUTE position (x,y) with dimensions (width, height).""" theform = getForm(canvas) theform.selectField(canvas, title, value, options, x, y, x+width, y+height) def selectFieldRelative(canvas, title, value, options, xR, yR, width, height): "same as textFieldAbsolute except the x and y are relative to the canvas coordinate transform" (xA, yA) = canvas.absolutePosition(xR,yR) return selectFieldAbsolute(canvas, title, value, options, xA, yA, width, height) #==========================end of public interfaces from reportlab.pdfbase.pdfpattern import PDFPattern, PDFPatternIf def getForm(canvas): "get form from canvas, create the form if needed" try: return canvas.AcroForm except AttributeError: theform = canvas.AcroForm = AcroForm() # install the form in the document d = canvas._doc cat = d._catalog cat.AcroForm = theform return theform class AcroForm(PDFObject): def __init__(self): self.fields = [] def textField(self, canvas, title, xmin, ymin, xmax, ymax, value="", maxlen=1000000, multiline=0): # determine the page ref doc = canvas._doc page = doc.thisPageRef() # determine text info R, G, B = obj_R_G_B(canvas._fillColorObj) #print "rgb", (R,G,B) font = canvas. _fontname fontsize = canvas. _fontsize field = TextField(title, value, xmin, ymin, xmax, ymax, page, maxlen, font, fontsize, R, G, B, multiline) self.fields.append(field) canvas._addAnnotation(field) def selectField(self, canvas, title, value, options, xmin, ymin, xmax, ymax): # determine the page ref doc = canvas._doc page = doc.thisPageRef() # determine text info R, G, B = obj_R_G_B(canvas._fillColorObj) #print "rgb", (R,G,B) font = canvas. _fontname fontsize = canvas. _fontsize field = SelectField(title, value, options, xmin, ymin, xmax, ymax, page, font=font, fontsize=fontsize, R=R, G=G, B=B) self.fields.append(field) canvas._addAnnotation(field) def buttonField(self, canvas, title, value, xmin, ymin, width=16.7704, height=14.907): # determine the page ref doc = canvas._doc page = doc.thisPageRef() field = ButtonField(title, value, xmin, ymin, page, width=width, height=height) self.fields.append(field) canvas._addAnnotation(field) def format(self, document): from reportlab.pdfbase.pdfdoc import PDFArray proxy = PDFPattern(FormPattern, Resources=getattr(self,'resources',None) or FormResources(), NeedAppearances=getattr(self,'needAppearances','false'), fields=PDFArray(self.fields), SigFlags=getattr(self,'sigFlags',0)) return proxy.format(document) FormPattern = [ '<<\r\n', '/NeedAppearances ',['NeedAppearances'],'\r\n' '/DA ', PDFString('/Helv 0 Tf 0 g '), '\r\n', '/DR ',["Resources"],'\r\n', '/Fields ', ["fields"],'\r\n', PDFPatternIf('SigFlags',['\r\n/SigFlags ',['SigFlags']]), '>>' ] def FormFontsDictionary(): from reportlab.pdfbase.pdfdoc import PDFDictionary fontsdictionary = PDFDictionary() fontsdictionary.__RefOnly__ = 1 for fullname, shortname in FORMFONTNAMES.items(): fontsdictionary[shortname] = FormFont(fullname, shortname) fontsdictionary["ZaDb"] = PDFPattern(ZaDbPattern) return fontsdictionary def FormResources(): return PDFPattern(FormResourcesDictionaryPattern, Encoding=PDFPattern(EncodingPattern,PDFDocEncoding=PDFPattern(PDFDocEncodingPattern)), Font=FormFontsDictionary()) ZaDbPattern = [ ' <<' ' /BaseFont' ' /ZapfDingbats' ' /Name' ' /ZaDb' ' /Subtype' ' /Type1' ' /Type' ' /Font' '>>'] FormResourcesDictionaryPattern = [ '<<', ' /Encoding ', ["Encoding"], '\r\n', ' /Font ', ["Font"], '\r\n', '>>' ] FORMFONTNAMES = { "Helvetica": "Helv", "Helvetica-Bold": "HeBo", 'Courier': "Cour", 'Courier-Bold': "CoBo", 'Courier-Oblique': "CoOb", 'Courier-BoldOblique': "CoBO", 'Helvetica-Oblique': "HeOb", 'Helvetica-BoldOblique': "HeBO", 'Times-Roman': "Time", 'Times-Bold': "TiBo", 'Times-Italic': "TiIt", 'Times-BoldItalic': "TiBI", } EncodingPattern = [ '<<', ' /PDFDocEncoding ', ["PDFDocEncoding"], '\r\n', '>>', ] PDFDocEncodingPattern = [ '<<' ' /Differences' ' [' ' 24' ' /breve' ' /caron' ' /circumflex' ' /dotaccent' ' /hungarumlaut' ' /ogonek' ' /ring' ' /tilde' ' 39' ' /quotesingle' ' 96' ' /grave' ' 128' ' /bullet' ' /dagger' ' /daggerdbl' ' /ellipsis' ' /emdash' ' /endash' ' /florin' ' /fraction' ' /guilsinglleft' ' /guilsinglright' ' /minus' ' /perthousand' ' /quotedblbase' ' /quotedblleft' ' /quotedblright' ' /quoteleft' ' /quoteright' ' /quotesinglbase' ' /trademark' ' /fi' ' /fl' ' /Lslash' ' /OE' ' /Scaron' ' /Ydieresis' ' /Zcaron' ' /dotlessi' ' /lslash' ' /oe' ' /scaron' ' /zcaron' ' 160' ' /Euro' ' 164' ' /currency' ' 166' ' /brokenbar' ' 168' ' /dieresis' ' /copyright' ' /ordfeminine' ' 172' ' /logicalnot' ' /.notdef' ' /registered' ' /macron' ' /degree' ' /plusminus' ' /twosuperior' ' /threesuperior' ' /acute' ' /mu' ' 183' ' /periodcentered' ' /cedilla' ' /onesuperior' ' /ordmasculine' ' 188' ' /onequarter' ' /onehalf' ' /threequarters' ' 192' ' /Agrave' ' /Aacute' ' /Acircumflex' ' /Atilde' ' /Adieresis' ' /Aring' ' /AE' ' /Ccedilla' ' /Egrave' ' /Eacute' ' /Ecircumflex' ' /Edieresis' ' /Igrave' ' /Iacute' ' /Icircumflex' ' /Idieresis' ' /Eth' ' /Ntilde' ' /Ograve' ' /Oacute' ' /Ocircumflex' ' /Otilde' ' /Odieresis' ' /multiply' ' /Oslash' ' /Ugrave' ' /Uacute' ' /Ucircumflex' ' /Udieresis' ' /Yacute' ' /Thorn' ' /germandbls' ' /agrave' ' /aacute' ' /acircumflex' ' /atilde' ' /adieresis' ' /aring' ' /ae' ' /ccedilla' ' /egrave' ' /eacute' ' /ecircumflex' ' /edieresis' ' /igrave' ' /iacute' ' /icircumflex' ' /idieresis' ' /eth' ' /ntilde' ' /ograve' ' /oacute' ' /ocircumflex' ' /otilde' ' /odieresis' ' /divide' ' /oslash' ' /ugrave' ' /uacute' ' /ucircumflex' ' /udieresis' ' /yacute' ' /thorn' ' /ydieresis' ' ]' ' /Type' ' /Encoding' '>>'] def FormFont(BaseFont, Name): from reportlab.pdfbase.pdfdoc import PDFName return PDFPattern(FormFontPattern, BaseFont=PDFName(BaseFont), Name=PDFName(Name), Encoding=PDFPattern(PDFDocEncodingPattern)) FormFontPattern = [ '<<', ' /BaseFont ', ["BaseFont"], '\r\n', ' /Encoding ', ["Encoding"], '\r\n', ' /Name ', ["Name"], '\r\n', ' /Subtype ' ' /Type1 ' ' /Type ' ' /Font ' '>>' ] def resetPdfForm(): pass from reportlab.rl_config import register_reset register_reset(resetPdfForm) resetPdfForm() def TextField(title, value, xmin, ymin, xmax, ymax, page, maxlen=1000000, font="Helvetica-Bold", fontsize=9, R=0, G=0, B=0.627, multiline=0): from reportlab.pdfbase.pdfdoc import PDFString, PDFName Flags = 0 if multiline: Flags = Flags | (1<<12) # bit 13 is at position 12 :) fontname = FORMFONTNAMES[font] return PDFPattern(TextFieldPattern, value=PDFString(value), maxlen=maxlen, page=page, title=PDFString(title), xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax, fontname=PDFName(fontname), fontsize=fontsize, R=R, G=G, B=B, Flags=Flags) TextFieldPattern = [ '<<' ' /DA' ' (', ["fontname"],' ',["fontsize"],' Tf ',["R"],' ',["G"],' ',["B"],' rg)' ' /DV ', ["value"], '\r\n', ' /F 4 /FT /Tx' '/MK << /BC [ 0 0 0 ] >>' ' /MaxLen ', ["maxlen"], '\r\n', ' /P ', ["page"], '\r\n', ' /Rect ' ' [', ["xmin"], " ", ["ymin"], " ", ["xmax"], " ", ["ymax"], ' ]' '/Subtype /Widget' ' /T ', ["title"], '\r\n', ' /Type' ' /Annot' ' /V ', ["value"], '\r\n', ' /Ff ', ["Flags"],'\r\n', '>>'] def SelectField(title, value, options, xmin, ymin, xmax, ymax, page, font="Helvetica-Bold", fontsize=9, R=0, G=0, B=0.627): #print "ARGS", (title, value, options, xmin, ymin, xmax, ymax, page, font, fontsize, R, G, B) from reportlab.pdfbase.pdfdoc import PDFString, PDFName, PDFArray if value not in options: raise ValueError("value %s must be one of options %s" % (repr(value), repr(options))) fontname = FORMFONTNAMES[font] optionstrings = list(map(PDFString, options)) optionarray = PDFArray(optionstrings) return PDFPattern(SelectFieldPattern, Options=optionarray, Selected=PDFString(value), Page=page, Name=PDFString(title), xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax, fontname=PDFName(fontname), fontsize=fontsize, R=R, G=G, B=B) SelectFieldPattern = [ '<< % a select list\r\n' ' /DA ', ' (', ["fontname"],' ',["fontsize"],' Tf ',["R"],' ',["G"],' ',["B"],' rg)\r\n', #' (/Helv 12 Tf 0 g)\r\n', ' /DV ', ["Selected"],'\r\n', ' /F ', ' 4\r\n', ' /FT ', ' /Ch\r\n', ' /MK ', ' <<', ' /BC', ' [', ' 0', ' 0', ' 0', ' ]', ' /BG', ' [', ' 1', ' 1', ' 1', ' ]', ' >>\r\n', ' /Opt ', ["Options"],'\r\n', ' /P ', ["Page"],'\r\n', '/Rect', ' [',["xmin"], " ", ["ymin"], " ", ["xmax"], " ", ["ymax"], ' ] \r\n', '/Subtype', ' /Widget\r\n', ' /T ', ["Name"],'\r\n', ' /Type ', ' /Annot', ' /V ', ["Selected"],'\r\n', '>>'] def ButtonField(title, value, xmin, ymin, page, width=16.7704, height=14.907): if value not in ("Yes", "Off"): raise ValueError("button value must be 'Yes' or 'Off': "+repr(value)) fontSize = (11.3086/14.907)*height dx = (3.6017/16.7704)*width dy = (3.3881/14.907)*height return PDFPattern(ButtonFieldPattern, Name=PDFString(title), xmin=xmin, ymin=ymin, xmax=xmin+width, ymax=ymin+width, Hide=PDFPattern(['<< /S /Hide >>']), APDOff=ButtonStream('0.749 g 0 0 %(width)s %(height)s re f\r\n' % vars(), width=width, height=height), APDYes=ButtonStream('0.749 g 0 0 %(width)s %(height)s re f q 1 1 %(width)s %(height)s re W n BT /ZaDb %(fontSize)s Tf 0 g 1 0 0 1 %(dx)s %(dy)s Tm (4) Tj ET\r\n' % vars(), width=width, height=height), APNYes=ButtonStream('q 1 1 %(width)s %(height)s re W n BT /ZaDb %(fontSize)s Tf 0 g 1 0 0 1 %(dx)s %(dy)s Tm (4) Tj ET Q\r\n' % vars(), width=width, height=height), Value=PDFName(value), Page=page) ButtonFieldPattern = ['<< ', '/AA', ' <<', ' /D ', ["Hide"],'\r\n', #' %(imported.18.0)s', ' >> ', '/AP ', ' <<', ' /D', ' <<', ' /Off ', #' %(imported.40.0)s', ["APDOff"], '\r\n', ' /Yes ', #' %(imported.39.0)s', ["APDYes"], '\r\n', ' >>', '\r\n', ' /N', ' << ', ' /Yes ', #' %(imported.38.0)s', ["APNYes"], '\r\n', ' >>', ' >>\r\n', ' /AS ', ["Value"], '\r\n', ' /DA ', PDFString('/ZaDb 0 Tf 0 g'), '\r\n', '/DV ', ["Value"], '\r\n', '/F ', ' 4 ', '/FT ', ' /Btn ', '/H ', ' /T ', '/MK ', ' <<', ' /AC (\\376\\377)', #PDFString('\376\377'), ' /CA ', PDFString('4'), ' /RC ', PDFString('\376\377'), ' >> ','\r\n', '/P ', ["Page"], '\r\n', '/Rect', ' [',["xmin"], " ", ["ymin"], " ", ["xmax"], " ", ["ymax"], ' ] ','\r\n', '/Subtype', ' /Widget ', '/T ', ["Name"], '\r\n', '/Type', ' /Annot ', '/V ', ["Value"], '\r\n', ' >>'] def buttonStreamDictionary(width=16.7704, height=14.907): "everything except the length for the button appearance streams" result = PDFDictionary() result["SubType"] = "/Form" result["BBox"] = "[0 0 %(width)s %(height)s]" % vars() font = PDFDictionary() font["ZaDb"] = PDFPattern(ZaDbPattern) resources = PDFDictionary() resources["ProcSet"] = "[ /PDF /Text ]" resources["Font"] = font result["Resources"] = resources return result def ButtonStream(content, width=16.7704, height=14.907): result = PDFStream(buttonStreamDictionary(width=width,height=height), content) result.filters = [] return result reportlab-3.5.34/src/reportlab/pdfbase/_fontdata.py0000664000175000017500000002363513544671343023115 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/_fontdata.py #$Header $ __version__='3.3.0' __doc__="""Database of font related things - standardFonts - tuple of the 14 standard string font names - standardEncodings - tuple of the known standard font names - encodings - a mapping object from standard encoding names (and minor variants) to the encoding vectors ie the tuple of string glyph names - widthsByFontGlyph - fontname x glyphname --> width of glyph - widthVectorsByFont - fontName -> vector of widths This module defines a static, large data structure. At the request of the Jython project, we have split this off into separate modules as Jython cannot handle more than 64k of bytecode in the 'top level' code of a Python module. """ import os, sys # mapping of name to width vector, starts empty until fonts are added # e.g. widths['Courier'] = [...600,600,600,...] widthVectorsByFont = {} fontsByName = {} fontsByBaseEnc = {} # this is a list of the standard 14 font names in Acrobat Reader standardFonts = ( 'Courier', 'Courier-Bold', 'Courier-Oblique', 'Courier-BoldOblique', 'Helvetica', 'Helvetica-Bold', 'Helvetica-Oblique', 'Helvetica-BoldOblique', 'Times-Roman', 'Times-Bold', 'Times-Italic', 'Times-BoldItalic', 'Symbol','ZapfDingbats') standardFontAttributes = { #family, bold, italic defined for basic ones 'Courier':('Courier',0,0), 'Courier-Bold':('Courier',1,0), 'Courier-Oblique':('Courier',0,1), 'Courier-BoldOblique':('Courier',1,1), 'Helvetica':('Helvetica',0,0), 'Helvetica-Bold':('Helvetica',1,0), 'Helvetica-Oblique':('Helvetica',0,1), 'Helvetica-BoldOblique':('Helvetica',1,1), 'Times-Roman':('Times-Roman',0,0), 'Times-Bold':('Times-Roman',1,0), 'Times-Italic':('Times-Roman',0,1), 'Times-BoldItalic':('Times-Roman',1,1), 'Symbol':('Symbol',0,0), 'ZapfDingbats':('ZapfDingbats',0,0) } #this maps fontnames to the equivalent filename root. _font2fnrMapWin32 = { 'symbol': 'sy______', 'zapfdingbats': 'zd______', 'helvetica': '_a______', 'helvetica-bold': '_ab_____', 'helvetica-boldoblique': '_abi____', 'helvetica-oblique': '_ai_____', 'times-bold': '_eb_____', 'times-bolditalic': '_ebi____', 'times-italic': '_ei_____', 'times-roman': '_er_____', 'courier-bold': 'cob_____', 'courier-boldoblique': 'cobo____', 'courier': 'com_____', 'courier-oblique': 'coo_____', } if sys.platform in ('linux2',): _font2fnrMapLinux2 ={ 'symbol': 'Symbol', 'zapfdingbats': 'ZapfDingbats', 'helvetica': 'Arial', 'helvetica-bold': 'Arial-Bold', 'helvetica-boldoblique': 'Arial-BoldItalic', 'helvetica-oblique': 'Arial-Italic', 'times-bold': 'TimesNewRoman-Bold', 'times-bolditalic':'TimesNewRoman-BoldItalic', 'times-italic': 'TimesNewRoman-Italic', 'times-roman': 'TimesNewRoman', 'courier-bold': 'Courier-Bold', 'courier-boldoblique': 'Courier-BoldOblique', 'courier': 'Courier', 'courier-oblique': 'Courier-Oblique', } _font2fnrMap = _font2fnrMapLinux2 for k, v in _font2fnrMap.items(): if k in _font2fnrMapWin32.keys(): _font2fnrMapWin32[v.lower()] = _font2fnrMapWin32[k] del k, v else: _font2fnrMap = _font2fnrMapWin32 def _findFNR(fontName): return _font2fnrMap[fontName.lower()] from reportlab.rl_config import T1SearchPath from reportlab.lib.utils import rl_isfile def _searchT1Dirs(n,rl_isfile=rl_isfile,T1SearchPath=T1SearchPath): assert T1SearchPath!=[], "No Type-1 font search path" for d in T1SearchPath: f = os.path.join(d,n) if rl_isfile(f): return f return None del T1SearchPath, rl_isfile def findT1File(fontName,ext='.pfb'): if sys.platform in ('linux2',) and ext=='.pfb': try: f = _searchT1Dirs(_findFNR(fontName)) if f: return f except: pass try: f = _searchT1Dirs(_font2fnrMapWin32[fontName.lower()]+ext) if f: return f except: pass return _searchT1Dirs(_findFNR(fontName)+ext) # this lists the predefined font encodings - WinAnsi and MacRoman. We have # not added MacExpert - it's possible, but would complicate life and nobody # is asking. StandardEncoding means something special. standardEncodings = ('WinAnsiEncoding','MacRomanEncoding','StandardEncoding','SymbolEncoding','ZapfDingbatsEncoding','PDFDocEncoding', 'MacExpertEncoding') #this is the global mapping of standard encodings to name vectors class _Name2StandardEncodingMap(dict): '''Trivial fake dictionary with some [] magic''' _XMap = {'winansi':'WinAnsiEncoding','macroman': 'MacRomanEncoding','standard':'StandardEncoding','symbol':'SymbolEncoding', 'zapfdingbats':'ZapfDingbatsEncoding','pdfdoc':'PDFDocEncoding', 'macexpert':'MacExpertEncoding'} def __setitem__(self,x,v): y = x.lower() if y[-8:]=='encoding': y = y[:-8] y = self._XMap[y] if y in self: raise IndexError('Encoding %s is already set' % y) dict.__setitem__(self,y,v) def __getitem__(self,x): y = x.lower() if y[-8:]=='encoding': y = y[:-8] y = self._XMap[y] return dict.__getitem__(self,y) encodings = _Name2StandardEncodingMap() #due to compiled method size limits in Jython, #we pull these in from separate modules to keep this module #well under 64k. We might well be able to ditch many of #these anyway now we run on Unicode. from reportlab.pdfbase._fontdata_enc_winansi import WinAnsiEncoding from reportlab.pdfbase._fontdata_enc_macroman import MacRomanEncoding from reportlab.pdfbase._fontdata_enc_standard import StandardEncoding from reportlab.pdfbase._fontdata_enc_symbol import SymbolEncoding from reportlab.pdfbase._fontdata_enc_zapfdingbats import ZapfDingbatsEncoding from reportlab.pdfbase._fontdata_enc_pdfdoc import PDFDocEncoding from reportlab.pdfbase._fontdata_enc_macexpert import MacExpertEncoding encodings.update({ 'WinAnsiEncoding': WinAnsiEncoding, 'MacRomanEncoding': MacRomanEncoding, 'StandardEncoding': StandardEncoding, 'SymbolEncoding': SymbolEncoding, 'ZapfDingbatsEncoding': ZapfDingbatsEncoding, 'PDFDocEncoding': PDFDocEncoding, 'MacExpertEncoding': MacExpertEncoding, }) ascent_descent = { 'Courier': (629, -157), 'Courier-Bold': (626, -142), 'Courier-BoldOblique': (626, -142), 'Courier-Oblique': (629, -157), 'Helvetica': (718, -207), 'Helvetica-Bold': (718, -207), 'Helvetica-BoldOblique': (718, -207), 'Helvetica-Oblique': (718, -207), 'Times-Roman': (683, -217), 'Times-Bold': (676, -205), 'Times-BoldItalic': (699, -205), 'Times-Italic': (683, -205), 'Symbol': (0, 0), 'ZapfDingbats': (0, 0) } # ditto about 64k limit - profusion of external files import reportlab.pdfbase._fontdata_widths_courier import reportlab.pdfbase._fontdata_widths_courierbold import reportlab.pdfbase._fontdata_widths_courieroblique import reportlab.pdfbase._fontdata_widths_courierboldoblique import reportlab.pdfbase._fontdata_widths_helvetica import reportlab.pdfbase._fontdata_widths_helveticabold import reportlab.pdfbase._fontdata_widths_helveticaoblique import reportlab.pdfbase._fontdata_widths_helveticaboldoblique import reportlab.pdfbase._fontdata_widths_timesroman import reportlab.pdfbase._fontdata_widths_timesbold import reportlab.pdfbase._fontdata_widths_timesitalic import reportlab.pdfbase._fontdata_widths_timesbolditalic import reportlab.pdfbase._fontdata_widths_symbol import reportlab.pdfbase._fontdata_widths_zapfdingbats widthsByFontGlyph = { 'Courier': reportlab.pdfbase._fontdata_widths_courier.widths, 'Courier-Bold': reportlab.pdfbase._fontdata_widths_courierbold.widths, 'Courier-Oblique': reportlab.pdfbase._fontdata_widths_courieroblique.widths, 'Courier-BoldOblique': reportlab.pdfbase._fontdata_widths_courierboldoblique.widths, 'Helvetica': reportlab.pdfbase._fontdata_widths_helvetica.widths, 'Helvetica-Bold': reportlab.pdfbase._fontdata_widths_helveticabold.widths, 'Helvetica-Oblique': reportlab.pdfbase._fontdata_widths_helveticaoblique.widths, 'Helvetica-BoldOblique': reportlab.pdfbase._fontdata_widths_helveticaboldoblique.widths, 'Times-Roman': reportlab.pdfbase._fontdata_widths_timesroman.widths, 'Times-Bold': reportlab.pdfbase._fontdata_widths_timesbold.widths, 'Times-Italic': reportlab.pdfbase._fontdata_widths_timesitalic.widths, 'Times-BoldItalic': reportlab.pdfbase._fontdata_widths_timesbolditalic.widths, 'Symbol': reportlab.pdfbase._fontdata_widths_symbol.widths, 'ZapfDingbats': reportlab.pdfbase._fontdata_widths_zapfdingbats.widths, } #preserve the initial values here def _reset( initial_dicts=dict( ascent_descent=ascent_descent.copy(), fontsByBaseEnc=fontsByBaseEnc.copy(), fontsByName=fontsByName.copy(), standardFontAttributes=standardFontAttributes.copy(), widthVectorsByFont=widthVectorsByFont.copy(), widthsByFontGlyph=widthsByFontGlyph.copy(), ) ): for k,v in initial_dicts.items(): d=globals()[k] d.clear() d.update(v) from reportlab.rl_config import register_reset register_reset(_reset) del register_reset reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_timesbold.py0000664000175000017500000000713013544671343026531 0ustar rptlabrptlab00000000000000widths = {'A': 722, 'AE': 1000, 'Aacute': 722, 'Acircumflex': 722, 'Adieresis': 722, 'Agrave': 722, 'Aring': 722, 'Atilde': 722, 'B': 667, 'C': 722, 'Ccedilla': 722, 'D': 722, 'E': 667, 'Eacute': 667, 'Ecircumflex': 667, 'Edieresis': 667, 'Egrave': 667, 'Eth': 722, 'Euro': 500, 'F': 611, 'G': 778, 'H': 778, 'I': 389, 'Iacute': 389, 'Icircumflex': 389, 'Idieresis': 389, 'Igrave': 389, 'J': 500, 'K': 778, 'L': 667, 'Lslash': 667, 'M': 944, 'N': 722, 'Ntilde': 722, 'O': 778, 'OE': 1000, 'Oacute': 778, 'Ocircumflex': 778, 'Odieresis': 778, 'Ograve': 778, 'Oslash': 778, 'Otilde': 778, 'P': 611, 'Q': 778, 'R': 722, 'S': 556, 'Scaron': 556, 'T': 667, 'Thorn': 611, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 722, 'W': 1000, 'X': 722, 'Y': 722, 'Yacute': 722, 'Ydieresis': 722, 'Z': 667, 'Zcaron': 667, 'a': 500, 'aacute': 500, 'acircumflex': 500, 'acute': 333, 'adieresis': 500, 'ae': 722, 'agrave': 500, 'ampersand': 833, 'aring': 500, 'asciicircum': 581, 'asciitilde': 520, 'asterisk': 500, 'at': 930, 'atilde': 500, 'b': 556, 'backslash': 278, 'bar': 220, 'braceleft': 394, 'braceright': 394, 'bracketleft': 333, 'bracketright': 333, 'breve': 333, 'brokenbar': 220, 'bullet': 350, 'c': 444, 'caron': 333, 'ccedilla': 444, 'cedilla': 333, 'cent': 500, 'circumflex': 333, 'colon': 333, 'comma': 250, 'copyright': 747, 'currency': 500, 'd': 556, 'dagger': 500, 'daggerdbl': 500, 'degree': 400, 'dieresis': 333, 'divide': 570, 'dollar': 500, 'dotaccent': 333, 'dotlessi': 278, 'e': 444, 'eacute': 444, 'ecircumflex': 444, 'edieresis': 444, 'egrave': 444, 'eight': 500, 'ellipsis': 1000, 'emdash': 1000, 'endash': 500, 'equal': 570, 'eth': 500, 'exclam': 333, 'exclamdown': 333, 'f': 333, 'fi': 556, 'five': 500, 'fl': 556, 'florin': 500, 'four': 500, 'fraction': 167, 'g': 500, 'germandbls': 556, 'grave': 333, 'greater': 570, 'guillemotleft': 500, 'guillemotright': 500, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 556, 'hungarumlaut': 333, 'hyphen': 333, 'i': 278, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 333, 'k': 556, 'l': 278, 'less': 570, 'logicalnot': 570, 'lslash': 278, 'm': 833, 'macron': 333, 'minus': 570, 'mu': 556, 'multiply': 570, 'n': 556, 'nine': 500, 'ntilde': 556, 'numbersign': 500, 'o': 500, 'oacute': 500, 'ocircumflex': 500, 'odieresis': 500, 'oe': 722, 'ogonek': 333, 'ograve': 500, 'one': 500, 'onehalf': 750, 'onequarter': 750, 'onesuperior': 300, 'ordfeminine': 300, 'ordmasculine': 330, 'oslash': 500, 'otilde': 500, 'p': 556, 'paragraph': 540, 'parenleft': 333, 'parenright': 333, 'percent': 1000, 'period': 250, 'periodcentered': 250, 'perthousand': 1000, 'plus': 570, 'plusminus': 570, 'q': 556, 'question': 500, 'questiondown': 500, 'quotedbl': 555, 'quotedblbase': 500, 'quotedblleft': 500, 'quotedblright': 500, 'quoteleft': 333, 'quoteright': 333, 'quotesinglbase': 333, 'quotesingle': 278, 'r': 444, 'registered': 747, 'ring': 333, 's': 389, 'scaron': 389, 'section': 500, 'semicolon': 333, 'seven': 500, 'six': 500, 'slash': 278, 'space': 250, 'sterling': 500, 't': 333, 'thorn': 556, 'three': 500, 'threequarters': 750, 'threesuperior': 300, 'tilde': 333, 'trademark': 1000, 'two': 500, 'twosuperior': 300, 'u': 556, 'uacute': 556, 'ucircumflex': 556, 'udieresis': 556, 'ugrave': 556, 'underscore': 500, 'v': 500, 'w': 722, 'x': 500, 'y': 500, 'yacute': 500, 'ydieresis': 500, 'yen': 500, 'z': 444, 'zcaron': 444, 'zero': 500} reportlab-3.5.34/src/reportlab/pdfbase/_glyphlist.py0000664000175000017500000032366313607302651023331 0ustar rptlabrptlab00000000000000#see https://github.com/adobe-type-tools/agl-aglfn # ----------------------------------------------------------- # Copyright 2002-2019 Adobe (http://www.adobe.com/). # # Redistribution and use in source and binary forms, with or # without modification, are permitted provided that the # following conditions are met: # # Redistributions of source code must retain the above # copyright notice, this list of conditions and the following # disclaimer. # # Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials # provided with the distribution. # # Neither the name of Adobe nor the names of its contributors # may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ----------------------------------------------------------- # Name: Adobe Glyph List # Table version: 2.0 # Date: September 20, 2002 # URL: https://github.com/adobe-type-tools/agl-aglfn # # Format: two semicolon-delimited fields: # (1) glyph name--upper/lowercase letters and digits # (2) Unicode scalar value--four uppercase hexadecimal digits # # END _glyphname2unicode = { 'A': 0x0041, 'AE': 0x00C6, 'AEacute': 0x01FC, 'AEmacron': 0x01E2, 'AEsmall': 0xF7E6, 'Aacute': 0x00C1, 'Aacutesmall': 0xF7E1, 'Abreve': 0x0102, 'Abreveacute': 0x1EAE, 'Abrevecyrillic': 0x04D0, 'Abrevedotbelow': 0x1EB6, 'Abrevegrave': 0x1EB0, 'Abrevehookabove': 0x1EB2, 'Abrevetilde': 0x1EB4, 'Acaron': 0x01CD, 'Acircle': 0x24B6, 'Acircumflex': 0x00C2, 'Acircumflexacute': 0x1EA4, 'Acircumflexdotbelow': 0x1EAC, 'Acircumflexgrave': 0x1EA6, 'Acircumflexhookabove': 0x1EA8, 'Acircumflexsmall': 0xF7E2, 'Acircumflextilde': 0x1EAA, 'Acute': 0xF6C9, 'Acutesmall': 0xF7B4, 'Acyrillic': 0x0410, 'Adblgrave': 0x0200, 'Adieresis': 0x00C4, 'Adieresiscyrillic': 0x04D2, 'Adieresismacron': 0x01DE, 'Adieresissmall': 0xF7E4, 'Adotbelow': 0x1EA0, 'Adotmacron': 0x01E0, 'Agrave': 0x00C0, 'Agravesmall': 0xF7E0, 'Ahookabove': 0x1EA2, 'Aiecyrillic': 0x04D4, 'Ainvertedbreve': 0x0202, 'Alpha': 0x0391, 'Alphatonos': 0x0386, 'Amacron': 0x0100, 'Amonospace': 0xFF21, 'Aogonek': 0x0104, 'Aring': 0x00C5, 'Aringacute': 0x01FA, 'Aringbelow': 0x1E00, 'Aringsmall': 0xF7E5, 'Asmall': 0xF761, 'Atilde': 0x00C3, 'Atildesmall': 0xF7E3, 'Aybarmenian': 0x0531, 'B': 0x0042, 'Bcircle': 0x24B7, 'Bdotaccent': 0x1E02, 'Bdotbelow': 0x1E04, 'Becyrillic': 0x0411, 'Benarmenian': 0x0532, 'Beta': 0x0392, 'Bhook': 0x0181, 'Blinebelow': 0x1E06, 'Bmonospace': 0xFF22, 'Brevesmall': 0xF6F4, 'Bsmall': 0xF762, 'Btopbar': 0x0182, 'C': 0x0043, 'Caarmenian': 0x053E, 'Cacute': 0x0106, 'Caron': 0xF6CA, 'Caronsmall': 0xF6F5, 'Ccaron': 0x010C, 'Ccedilla': 0x00C7, 'Ccedillaacute': 0x1E08, 'Ccedillasmall': 0xF7E7, 'Ccircle': 0x24B8, 'Ccircumflex': 0x0108, 'Cdot': 0x010A, 'Cdotaccent': 0x010A, 'Cedillasmall': 0xF7B8, 'Chaarmenian': 0x0549, 'Cheabkhasiancyrillic': 0x04BC, 'Checyrillic': 0x0427, 'Chedescenderabkhasiancyrillic': 0x04BE, 'Chedescendercyrillic': 0x04B6, 'Chedieresiscyrillic': 0x04F4, 'Cheharmenian': 0x0543, 'Chekhakassiancyrillic': 0x04CB, 'Cheverticalstrokecyrillic': 0x04B8, 'Chi': 0x03A7, 'Chook': 0x0187, 'Circumflexsmall': 0xF6F6, 'Cmonospace': 0xFF23, 'Coarmenian': 0x0551, 'Csmall': 0xF763, 'D': 0x0044, 'DZ': 0x01F1, 'DZcaron': 0x01C4, 'Daarmenian': 0x0534, 'Dafrican': 0x0189, 'Dcaron': 0x010E, 'Dcedilla': 0x1E10, 'Dcircle': 0x24B9, 'Dcircumflexbelow': 0x1E12, 'Dcroat': 0x0110, 'Ddotaccent': 0x1E0A, 'Ddotbelow': 0x1E0C, 'Decyrillic': 0x0414, 'Deicoptic': 0x03EE, 'Delta': 0x2206, 'Deltagreek': 0x0394, 'Dhook': 0x018A, 'Dieresis': 0xF6CB, 'DieresisAcute': 0xF6CC, 'DieresisGrave': 0xF6CD, 'Dieresissmall': 0xF7A8, 'Digammagreek': 0x03DC, 'Djecyrillic': 0x0402, 'Dlinebelow': 0x1E0E, 'Dmonospace': 0xFF24, 'Dotaccentsmall': 0xF6F7, 'Dslash': 0x0110, 'Dsmall': 0xF764, 'Dtopbar': 0x018B, 'Dz': 0x01F2, 'Dzcaron': 0x01C5, 'Dzeabkhasiancyrillic': 0x04E0, 'Dzecyrillic': 0x0405, 'Dzhecyrillic': 0x040F, 'E': 0x0045, 'Eacute': 0x00C9, 'Eacutesmall': 0xF7E9, 'Ebreve': 0x0114, 'Ecaron': 0x011A, 'Ecedillabreve': 0x1E1C, 'Echarmenian': 0x0535, 'Ecircle': 0x24BA, 'Ecircumflex': 0x00CA, 'Ecircumflexacute': 0x1EBE, 'Ecircumflexbelow': 0x1E18, 'Ecircumflexdotbelow': 0x1EC6, 'Ecircumflexgrave': 0x1EC0, 'Ecircumflexhookabove': 0x1EC2, 'Ecircumflexsmall': 0xF7EA, 'Ecircumflextilde': 0x1EC4, 'Ecyrillic': 0x0404, 'Edblgrave': 0x0204, 'Edieresis': 0x00CB, 'Edieresissmall': 0xF7EB, 'Edot': 0x0116, 'Edotaccent': 0x0116, 'Edotbelow': 0x1EB8, 'Efcyrillic': 0x0424, 'Egrave': 0x00C8, 'Egravesmall': 0xF7E8, 'Eharmenian': 0x0537, 'Ehookabove': 0x1EBA, 'Eightroman': 0x2167, 'Einvertedbreve': 0x0206, 'Eiotifiedcyrillic': 0x0464, 'Elcyrillic': 0x041B, 'Elevenroman': 0x216A, 'Emacron': 0x0112, 'Emacronacute': 0x1E16, 'Emacrongrave': 0x1E14, 'Emcyrillic': 0x041C, 'Emonospace': 0xFF25, 'Encyrillic': 0x041D, 'Endescendercyrillic': 0x04A2, 'Eng': 0x014A, 'Enghecyrillic': 0x04A4, 'Enhookcyrillic': 0x04C7, 'Eogonek': 0x0118, 'Eopen': 0x0190, 'Epsilon': 0x0395, 'Epsilontonos': 0x0388, 'Ercyrillic': 0x0420, 'Ereversed': 0x018E, 'Ereversedcyrillic': 0x042D, 'Escyrillic': 0x0421, 'Esdescendercyrillic': 0x04AA, 'Esh': 0x01A9, 'Esmall': 0xF765, 'Eta': 0x0397, 'Etarmenian': 0x0538, 'Etatonos': 0x0389, 'Eth': 0x00D0, 'Ethsmall': 0xF7F0, 'Etilde': 0x1EBC, 'Etildebelow': 0x1E1A, 'Euro': 0x20AC, 'Ezh': 0x01B7, 'Ezhcaron': 0x01EE, 'Ezhreversed': 0x01B8, 'F': 0x0046, 'Fcircle': 0x24BB, 'Fdotaccent': 0x1E1E, 'Feharmenian': 0x0556, 'Feicoptic': 0x03E4, 'Fhook': 0x0191, 'Fitacyrillic': 0x0472, 'Fiveroman': 0x2164, 'Fmonospace': 0xFF26, 'Fourroman': 0x2163, 'Fsmall': 0xF766, 'G': 0x0047, 'GBsquare': 0x3387, 'Gacute': 0x01F4, 'Gamma': 0x0393, 'Gammaafrican': 0x0194, 'Gangiacoptic': 0x03EA, 'Gbreve': 0x011E, 'Gcaron': 0x01E6, 'Gcedilla': 0x0122, 'Gcircle': 0x24BC, 'Gcircumflex': 0x011C, 'Gcommaaccent': 0x0122, 'Gdot': 0x0120, 'Gdotaccent': 0x0120, 'Gecyrillic': 0x0413, 'Ghadarmenian': 0x0542, 'Ghemiddlehookcyrillic': 0x0494, 'Ghestrokecyrillic': 0x0492, 'Gheupturncyrillic': 0x0490, 'Ghook': 0x0193, 'Gimarmenian': 0x0533, 'Gjecyrillic': 0x0403, 'Gmacron': 0x1E20, 'Gmonospace': 0xFF27, 'Grave': 0xF6CE, 'Gravesmall': 0xF760, 'Gsmall': 0xF767, 'Gsmallhook': 0x029B, 'Gstroke': 0x01E4, 'H': 0x0048, 'H18533': 0x25CF, 'H18543': 0x25AA, 'H18551': 0x25AB, 'H22073': 0x25A1, 'HPsquare': 0x33CB, 'Haabkhasiancyrillic': 0x04A8, 'Hadescendercyrillic': 0x04B2, 'Hardsigncyrillic': 0x042A, 'Hbar': 0x0126, 'Hbrevebelow': 0x1E2A, 'Hcedilla': 0x1E28, 'Hcircle': 0x24BD, 'Hcircumflex': 0x0124, 'Hdieresis': 0x1E26, 'Hdotaccent': 0x1E22, 'Hdotbelow': 0x1E24, 'Hmonospace': 0xFF28, 'Hoarmenian': 0x0540, 'Horicoptic': 0x03E8, 'Hsmall': 0xF768, 'Hungarumlaut': 0xF6CF, 'Hungarumlautsmall': 0xF6F8, 'Hzsquare': 0x3390, 'I': 0x0049, 'IAcyrillic': 0x042F, 'IJ': 0x0132, 'IUcyrillic': 0x042E, 'Iacute': 0x00CD, 'Iacutesmall': 0xF7ED, 'Ibreve': 0x012C, 'Icaron': 0x01CF, 'Icircle': 0x24BE, 'Icircumflex': 0x00CE, 'Icircumflexsmall': 0xF7EE, 'Icyrillic': 0x0406, 'Idblgrave': 0x0208, 'Idieresis': 0x00CF, 'Idieresisacute': 0x1E2E, 'Idieresiscyrillic': 0x04E4, 'Idieresissmall': 0xF7EF, 'Idot': 0x0130, 'Idotaccent': 0x0130, 'Idotbelow': 0x1ECA, 'Iebrevecyrillic': 0x04D6, 'Iecyrillic': 0x0415, 'Ifraktur': 0x2111, 'Igrave': 0x00CC, 'Igravesmall': 0xF7EC, 'Ihookabove': 0x1EC8, 'Iicyrillic': 0x0418, 'Iinvertedbreve': 0x020A, 'Iishortcyrillic': 0x0419, 'Imacron': 0x012A, 'Imacroncyrillic': 0x04E2, 'Imonospace': 0xFF29, 'Iniarmenian': 0x053B, 'Iocyrillic': 0x0401, 'Iogonek': 0x012E, 'Iota': 0x0399, 'Iotaafrican': 0x0196, 'Iotadieresis': 0x03AA, 'Iotatonos': 0x038A, 'Ismall': 0xF769, 'Istroke': 0x0197, 'Itilde': 0x0128, 'Itildebelow': 0x1E2C, 'Izhitsacyrillic': 0x0474, 'Izhitsadblgravecyrillic': 0x0476, 'J': 0x004A, 'Jaarmenian': 0x0541, 'Jcircle': 0x24BF, 'Jcircumflex': 0x0134, 'Jecyrillic': 0x0408, 'Jheharmenian': 0x054B, 'Jmonospace': 0xFF2A, 'Jsmall': 0xF76A, 'K': 0x004B, 'KBsquare': 0x3385, 'KKsquare': 0x33CD, 'Kabashkircyrillic': 0x04A0, 'Kacute': 0x1E30, 'Kacyrillic': 0x041A, 'Kadescendercyrillic': 0x049A, 'Kahookcyrillic': 0x04C3, 'Kappa': 0x039A, 'Kastrokecyrillic': 0x049E, 'Kaverticalstrokecyrillic': 0x049C, 'Kcaron': 0x01E8, 'Kcedilla': 0x0136, 'Kcircle': 0x24C0, 'Kcommaaccent': 0x0136, 'Kdotbelow': 0x1E32, 'Keharmenian': 0x0554, 'Kenarmenian': 0x053F, 'Khacyrillic': 0x0425, 'Kheicoptic': 0x03E6, 'Khook': 0x0198, 'Kjecyrillic': 0x040C, 'Klinebelow': 0x1E34, 'Kmonospace': 0xFF2B, 'Koppacyrillic': 0x0480, 'Koppagreek': 0x03DE, 'Ksicyrillic': 0x046E, 'Ksmall': 0xF76B, 'L': 0x004C, 'LJ': 0x01C7, 'LL': 0xF6BF, 'Lacute': 0x0139, 'Lambda': 0x039B, 'Lcaron': 0x013D, 'Lcedilla': 0x013B, 'Lcircle': 0x24C1, 'Lcircumflexbelow': 0x1E3C, 'Lcommaaccent': 0x013B, 'Ldot': 0x013F, 'Ldotaccent': 0x013F, 'Ldotbelow': 0x1E36, 'Ldotbelowmacron': 0x1E38, 'Liwnarmenian': 0x053C, 'Lj': 0x01C8, 'Ljecyrillic': 0x0409, 'Llinebelow': 0x1E3A, 'Lmonospace': 0xFF2C, 'Lslash': 0x0141, 'Lslashsmall': 0xF6F9, 'Lsmall': 0xF76C, 'M': 0x004D, 'MBsquare': 0x3386, 'Macron': 0xF6D0, 'Macronsmall': 0xF7AF, 'Macute': 0x1E3E, 'Mcircle': 0x24C2, 'Mdotaccent': 0x1E40, 'Mdotbelow': 0x1E42, 'Menarmenian': 0x0544, 'Mmonospace': 0xFF2D, 'Msmall': 0xF76D, 'Mturned': 0x019C, 'Mu': 0x039C, 'N': 0x004E, 'NJ': 0x01CA, 'Nacute': 0x0143, 'Ncaron': 0x0147, 'Ncedilla': 0x0145, 'Ncircle': 0x24C3, 'Ncircumflexbelow': 0x1E4A, 'Ncommaaccent': 0x0145, 'Ndotaccent': 0x1E44, 'Ndotbelow': 0x1E46, 'Nhookleft': 0x019D, 'Nineroman': 0x2168, 'Nj': 0x01CB, 'Njecyrillic': 0x040A, 'Nlinebelow': 0x1E48, 'Nmonospace': 0xFF2E, 'Nowarmenian': 0x0546, 'Nsmall': 0xF76E, 'Ntilde': 0x00D1, 'Ntildesmall': 0xF7F1, 'Nu': 0x039D, 'O': 0x004F, 'OE': 0x0152, 'OEsmall': 0xF6FA, 'Oacute': 0x00D3, 'Oacutesmall': 0xF7F3, 'Obarredcyrillic': 0x04E8, 'Obarreddieresiscyrillic': 0x04EA, 'Obreve': 0x014E, 'Ocaron': 0x01D1, 'Ocenteredtilde': 0x019F, 'Ocircle': 0x24C4, 'Ocircumflex': 0x00D4, 'Ocircumflexacute': 0x1ED0, 'Ocircumflexdotbelow': 0x1ED8, 'Ocircumflexgrave': 0x1ED2, 'Ocircumflexhookabove': 0x1ED4, 'Ocircumflexsmall': 0xF7F4, 'Ocircumflextilde': 0x1ED6, 'Ocyrillic': 0x041E, 'Odblacute': 0x0150, 'Odblgrave': 0x020C, 'Odieresis': 0x00D6, 'Odieresiscyrillic': 0x04E6, 'Odieresissmall': 0xF7F6, 'Odotbelow': 0x1ECC, 'Ogoneksmall': 0xF6FB, 'Ograve': 0x00D2, 'Ogravesmall': 0xF7F2, 'Oharmenian': 0x0555, 'Ohm': 0x2126, 'Ohookabove': 0x1ECE, 'Ohorn': 0x01A0, 'Ohornacute': 0x1EDA, 'Ohorndotbelow': 0x1EE2, 'Ohorngrave': 0x1EDC, 'Ohornhookabove': 0x1EDE, 'Ohorntilde': 0x1EE0, 'Ohungarumlaut': 0x0150, 'Oi': 0x01A2, 'Oinvertedbreve': 0x020E, 'Omacron': 0x014C, 'Omacronacute': 0x1E52, 'Omacrongrave': 0x1E50, 'Omega': 0x2126, 'Omegacyrillic': 0x0460, 'Omegagreek': 0x03A9, 'Omegaroundcyrillic': 0x047A, 'Omegatitlocyrillic': 0x047C, 'Omegatonos': 0x038F, 'Omicron': 0x039F, 'Omicrontonos': 0x038C, 'Omonospace': 0xFF2F, 'Oneroman': 0x2160, 'Oogonek': 0x01EA, 'Oogonekmacron': 0x01EC, 'Oopen': 0x0186, 'Oslash': 0x00D8, 'Oslashacute': 0x01FE, 'Oslashsmall': 0xF7F8, 'Osmall': 0xF76F, 'Ostrokeacute': 0x01FE, 'Otcyrillic': 0x047E, 'Otilde': 0x00D5, 'Otildeacute': 0x1E4C, 'Otildedieresis': 0x1E4E, 'Otildesmall': 0xF7F5, 'P': 0x0050, 'Pacute': 0x1E54, 'Pcircle': 0x24C5, 'Pdotaccent': 0x1E56, 'Pecyrillic': 0x041F, 'Peharmenian': 0x054A, 'Pemiddlehookcyrillic': 0x04A6, 'Phi': 0x03A6, 'Phook': 0x01A4, 'Pi': 0x03A0, 'Piwrarmenian': 0x0553, 'Pmonospace': 0xFF30, 'Psi': 0x03A8, 'Psicyrillic': 0x0470, 'Psmall': 0xF770, 'Q': 0x0051, 'Qcircle': 0x24C6, 'Qmonospace': 0xFF31, 'Qsmall': 0xF771, 'R': 0x0052, 'Raarmenian': 0x054C, 'Racute': 0x0154, 'Rcaron': 0x0158, 'Rcedilla': 0x0156, 'Rcircle': 0x24C7, 'Rcommaaccent': 0x0156, 'Rdblgrave': 0x0210, 'Rdotaccent': 0x1E58, 'Rdotbelow': 0x1E5A, 'Rdotbelowmacron': 0x1E5C, 'Reharmenian': 0x0550, 'Rfraktur': 0x211C, 'Rho': 0x03A1, 'Ringsmall': 0xF6FC, 'Rinvertedbreve': 0x0212, 'Rlinebelow': 0x1E5E, 'Rmonospace': 0xFF32, 'Rsmall': 0xF772, 'Rsmallinverted': 0x0281, 'Rsmallinvertedsuperior': 0x02B6, 'S': 0x0053, 'SF010000': 0x250C, 'SF020000': 0x2514, 'SF030000': 0x2510, 'SF040000': 0x2518, 'SF050000': 0x253C, 'SF060000': 0x252C, 'SF070000': 0x2534, 'SF080000': 0x251C, 'SF090000': 0x2524, 'SF100000': 0x2500, 'SF110000': 0x2502, 'SF190000': 0x2561, 'SF200000': 0x2562, 'SF210000': 0x2556, 'SF220000': 0x2555, 'SF230000': 0x2563, 'SF240000': 0x2551, 'SF250000': 0x2557, 'SF260000': 0x255D, 'SF270000': 0x255C, 'SF280000': 0x255B, 'SF360000': 0x255E, 'SF370000': 0x255F, 'SF380000': 0x255A, 'SF390000': 0x2554, 'SF400000': 0x2569, 'SF410000': 0x2566, 'SF420000': 0x2560, 'SF430000': 0x2550, 'SF440000': 0x256C, 'SF450000': 0x2567, 'SF460000': 0x2568, 'SF470000': 0x2564, 'SF480000': 0x2565, 'SF490000': 0x2559, 'SF500000': 0x2558, 'SF510000': 0x2552, 'SF520000': 0x2553, 'SF530000': 0x256B, 'SF540000': 0x256A, 'Sacute': 0x015A, 'Sacutedotaccent': 0x1E64, 'Sampigreek': 0x03E0, 'Scaron': 0x0160, 'Scarondotaccent': 0x1E66, 'Scaronsmall': 0xF6FD, 'Scedilla': 0x015E, 'Schwa': 0x018F, 'Schwacyrillic': 0x04D8, 'Schwadieresiscyrillic': 0x04DA, 'Scircle': 0x24C8, 'Scircumflex': 0x015C, 'Scommaaccent': 0x0218, 'Sdotaccent': 0x1E60, 'Sdotbelow': 0x1E62, 'Sdotbelowdotaccent': 0x1E68, 'Seharmenian': 0x054D, 'Sevenroman': 0x2166, 'Shaarmenian': 0x0547, 'Shacyrillic': 0x0428, 'Shchacyrillic': 0x0429, 'Sheicoptic': 0x03E2, 'Shhacyrillic': 0x04BA, 'Shimacoptic': 0x03EC, 'Sigma': 0x03A3, 'Sixroman': 0x2165, 'Smonospace': 0xFF33, 'Softsigncyrillic': 0x042C, 'Ssmall': 0xF773, 'Stigmagreek': 0x03DA, 'T': 0x0054, 'Tau': 0x03A4, 'Tbar': 0x0166, 'Tcaron': 0x0164, 'Tcedilla': 0x0162, 'Tcircle': 0x24C9, 'Tcircumflexbelow': 0x1E70, 'Tcommaaccent': 0x0162, 'Tdotaccent': 0x1E6A, 'Tdotbelow': 0x1E6C, 'Tecyrillic': 0x0422, 'Tedescendercyrillic': 0x04AC, 'Tenroman': 0x2169, 'Tetsecyrillic': 0x04B4, 'Theta': 0x0398, 'Thook': 0x01AC, 'Thorn': 0x00DE, 'Thornsmall': 0xF7FE, 'Threeroman': 0x2162, 'Tildesmall': 0xF6FE, 'Tiwnarmenian': 0x054F, 'Tlinebelow': 0x1E6E, 'Tmonospace': 0xFF34, 'Toarmenian': 0x0539, 'Tonefive': 0x01BC, 'Tonesix': 0x0184, 'Tonetwo': 0x01A7, 'Tretroflexhook': 0x01AE, 'Tsecyrillic': 0x0426, 'Tshecyrillic': 0x040B, 'Tsmall': 0xF774, 'Twelveroman': 0x216B, 'Tworoman': 0x2161, 'U': 0x0055, 'Uacute': 0x00DA, 'Uacutesmall': 0xF7FA, 'Ubreve': 0x016C, 'Ucaron': 0x01D3, 'Ucircle': 0x24CA, 'Ucircumflex': 0x00DB, 'Ucircumflexbelow': 0x1E76, 'Ucircumflexsmall': 0xF7FB, 'Ucyrillic': 0x0423, 'Udblacute': 0x0170, 'Udblgrave': 0x0214, 'Udieresis': 0x00DC, 'Udieresisacute': 0x01D7, 'Udieresisbelow': 0x1E72, 'Udieresiscaron': 0x01D9, 'Udieresiscyrillic': 0x04F0, 'Udieresisgrave': 0x01DB, 'Udieresismacron': 0x01D5, 'Udieresissmall': 0xF7FC, 'Udotbelow': 0x1EE4, 'Ugrave': 0x00D9, 'Ugravesmall': 0xF7F9, 'Uhookabove': 0x1EE6, 'Uhorn': 0x01AF, 'Uhornacute': 0x1EE8, 'Uhorndotbelow': 0x1EF0, 'Uhorngrave': 0x1EEA, 'Uhornhookabove': 0x1EEC, 'Uhorntilde': 0x1EEE, 'Uhungarumlaut': 0x0170, 'Uhungarumlautcyrillic': 0x04F2, 'Uinvertedbreve': 0x0216, 'Ukcyrillic': 0x0478, 'Umacron': 0x016A, 'Umacroncyrillic': 0x04EE, 'Umacrondieresis': 0x1E7A, 'Umonospace': 0xFF35, 'Uogonek': 0x0172, 'Upsilon': 0x03A5, 'Upsilon1': 0x03D2, 'Upsilonacutehooksymbolgreek': 0x03D3, 'Upsilonafrican': 0x01B1, 'Upsilondieresis': 0x03AB, 'Upsilondieresishooksymbolgreek': 0x03D4, 'Upsilonhooksymbol': 0x03D2, 'Upsilontonos': 0x038E, 'Uring': 0x016E, 'Ushortcyrillic': 0x040E, 'Usmall': 0xF775, 'Ustraightcyrillic': 0x04AE, 'Ustraightstrokecyrillic': 0x04B0, 'Utilde': 0x0168, 'Utildeacute': 0x1E78, 'Utildebelow': 0x1E74, 'V': 0x0056, 'Vcircle': 0x24CB, 'Vdotbelow': 0x1E7E, 'Vecyrillic': 0x0412, 'Vewarmenian': 0x054E, 'Vhook': 0x01B2, 'Vmonospace': 0xFF36, 'Voarmenian': 0x0548, 'Vsmall': 0xF776, 'Vtilde': 0x1E7C, 'W': 0x0057, 'Wacute': 0x1E82, 'Wcircle': 0x24CC, 'Wcircumflex': 0x0174, 'Wdieresis': 0x1E84, 'Wdotaccent': 0x1E86, 'Wdotbelow': 0x1E88, 'Wgrave': 0x1E80, 'Wmonospace': 0xFF37, 'Wsmall': 0xF777, 'X': 0x0058, 'Xcircle': 0x24CD, 'Xdieresis': 0x1E8C, 'Xdotaccent': 0x1E8A, 'Xeharmenian': 0x053D, 'Xi': 0x039E, 'Xmonospace': 0xFF38, 'Xsmall': 0xF778, 'Y': 0x0059, 'Yacute': 0x00DD, 'Yacutesmall': 0xF7FD, 'Yatcyrillic': 0x0462, 'Ycircle': 0x24CE, 'Ycircumflex': 0x0176, 'Ydieresis': 0x0178, 'Ydieresissmall': 0xF7FF, 'Ydotaccent': 0x1E8E, 'Ydotbelow': 0x1EF4, 'Yericyrillic': 0x042B, 'Yerudieresiscyrillic': 0x04F8, 'Ygrave': 0x1EF2, 'Yhook': 0x01B3, 'Yhookabove': 0x1EF6, 'Yiarmenian': 0x0545, 'Yicyrillic': 0x0407, 'Yiwnarmenian': 0x0552, 'Ymonospace': 0xFF39, 'Ysmall': 0xF779, 'Ytilde': 0x1EF8, 'Yusbigcyrillic': 0x046A, 'Yusbigiotifiedcyrillic': 0x046C, 'Yuslittlecyrillic': 0x0466, 'Yuslittleiotifiedcyrillic': 0x0468, 'Z': 0x005A, 'Zaarmenian': 0x0536, 'Zacute': 0x0179, 'Zcaron': 0x017D, 'Zcaronsmall': 0xF6FF, 'Zcircle': 0x24CF, 'Zcircumflex': 0x1E90, 'Zdot': 0x017B, 'Zdotaccent': 0x017B, 'Zdotbelow': 0x1E92, 'Zecyrillic': 0x0417, 'Zedescendercyrillic': 0x0498, 'Zedieresiscyrillic': 0x04DE, 'Zeta': 0x0396, 'Zhearmenian': 0x053A, 'Zhebrevecyrillic': 0x04C1, 'Zhecyrillic': 0x0416, 'Zhedescendercyrillic': 0x0496, 'Zhedieresiscyrillic': 0x04DC, 'Zlinebelow': 0x1E94, 'Zmonospace': 0xFF3A, 'Zsmall': 0xF77A, 'Zstroke': 0x01B5, 'a': 0x0061, 'aabengali': 0x0986, 'aacute': 0x00E1, 'aadeva': 0x0906, 'aagujarati': 0x0A86, 'aagurmukhi': 0x0A06, 'aamatragurmukhi': 0x0A3E, 'aarusquare': 0x3303, 'aavowelsignbengali': 0x09BE, 'aavowelsigndeva': 0x093E, 'aavowelsigngujarati': 0x0ABE, 'abbreviationmarkarmenian': 0x055F, 'abbreviationsigndeva': 0x0970, 'abengali': 0x0985, 'abopomofo': 0x311A, 'abreve': 0x0103, 'abreveacute': 0x1EAF, 'abrevecyrillic': 0x04D1, 'abrevedotbelow': 0x1EB7, 'abrevegrave': 0x1EB1, 'abrevehookabove': 0x1EB3, 'abrevetilde': 0x1EB5, 'acaron': 0x01CE, 'acircle': 0x24D0, 'acircumflex': 0x00E2, 'acircumflexacute': 0x1EA5, 'acircumflexdotbelow': 0x1EAD, 'acircumflexgrave': 0x1EA7, 'acircumflexhookabove': 0x1EA9, 'acircumflextilde': 0x1EAB, 'acute': 0x00B4, 'acutebelowcmb': 0x0317, 'acutecmb': 0x0301, 'acutecomb': 0x0301, 'acutedeva': 0x0954, 'acutelowmod': 0x02CF, 'acutetonecmb': 0x0341, 'acyrillic': 0x0430, 'adblgrave': 0x0201, 'addakgurmukhi': 0x0A71, 'adeva': 0x0905, 'adieresis': 0x00E4, 'adieresiscyrillic': 0x04D3, 'adieresismacron': 0x01DF, 'adotbelow': 0x1EA1, 'adotmacron': 0x01E1, 'ae': 0x00E6, 'aeacute': 0x01FD, 'aekorean': 0x3150, 'aemacron': 0x01E3, 'afii00208': 0x2015, 'afii08941': 0x20A4, 'afii10017': 0x0410, 'afii10018': 0x0411, 'afii10019': 0x0412, 'afii10020': 0x0413, 'afii10021': 0x0414, 'afii10022': 0x0415, 'afii10023': 0x0401, 'afii10024': 0x0416, 'afii10025': 0x0417, 'afii10026': 0x0418, 'afii10027': 0x0419, 'afii10028': 0x041A, 'afii10029': 0x041B, 'afii10030': 0x041C, 'afii10031': 0x041D, 'afii10032': 0x041E, 'afii10033': 0x041F, 'afii10034': 0x0420, 'afii10035': 0x0421, 'afii10036': 0x0422, 'afii10037': 0x0423, 'afii10038': 0x0424, 'afii10039': 0x0425, 'afii10040': 0x0426, 'afii10041': 0x0427, 'afii10042': 0x0428, 'afii10043': 0x0429, 'afii10044': 0x042A, 'afii10045': 0x042B, 'afii10046': 0x042C, 'afii10047': 0x042D, 'afii10048': 0x042E, 'afii10049': 0x042F, 'afii10050': 0x0490, 'afii10051': 0x0402, 'afii10052': 0x0403, 'afii10053': 0x0404, 'afii10054': 0x0405, 'afii10055': 0x0406, 'afii10056': 0x0407, 'afii10057': 0x0408, 'afii10058': 0x0409, 'afii10059': 0x040A, 'afii10060': 0x040B, 'afii10061': 0x040C, 'afii10062': 0x040E, 'afii10063': 0xF6C4, 'afii10064': 0xF6C5, 'afii10065': 0x0430, 'afii10066': 0x0431, 'afii10067': 0x0432, 'afii10068': 0x0433, 'afii10069': 0x0434, 'afii10070': 0x0435, 'afii10071': 0x0451, 'afii10072': 0x0436, 'afii10073': 0x0437, 'afii10074': 0x0438, 'afii10075': 0x0439, 'afii10076': 0x043A, 'afii10077': 0x043B, 'afii10078': 0x043C, 'afii10079': 0x043D, 'afii10080': 0x043E, 'afii10081': 0x043F, 'afii10082': 0x0440, 'afii10083': 0x0441, 'afii10084': 0x0442, 'afii10085': 0x0443, 'afii10086': 0x0444, 'afii10087': 0x0445, 'afii10088': 0x0446, 'afii10089': 0x0447, 'afii10090': 0x0448, 'afii10091': 0x0449, 'afii10092': 0x044A, 'afii10093': 0x044B, 'afii10094': 0x044C, 'afii10095': 0x044D, 'afii10096': 0x044E, 'afii10097': 0x044F, 'afii10098': 0x0491, 'afii10099': 0x0452, 'afii10100': 0x0453, 'afii10101': 0x0454, 'afii10102': 0x0455, 'afii10103': 0x0456, 'afii10104': 0x0457, 'afii10105': 0x0458, 'afii10106': 0x0459, 'afii10107': 0x045A, 'afii10108': 0x045B, 'afii10109': 0x045C, 'afii10110': 0x045E, 'afii10145': 0x040F, 'afii10146': 0x0462, 'afii10147': 0x0472, 'afii10148': 0x0474, 'afii10192': 0xF6C6, 'afii10193': 0x045F, 'afii10194': 0x0463, 'afii10195': 0x0473, 'afii10196': 0x0475, 'afii10831': 0xF6C7, 'afii10832': 0xF6C8, 'afii10846': 0x04D9, 'afii299': 0x200E, 'afii300': 0x200F, 'afii301': 0x200D, 'afii57381': 0x066A, 'afii57388': 0x060C, 'afii57392': 0x0660, 'afii57393': 0x0661, 'afii57394': 0x0662, 'afii57395': 0x0663, 'afii57396': 0x0664, 'afii57397': 0x0665, 'afii57398': 0x0666, 'afii57399': 0x0667, 'afii57400': 0x0668, 'afii57401': 0x0669, 'afii57403': 0x061B, 'afii57407': 0x061F, 'afii57409': 0x0621, 'afii57410': 0x0622, 'afii57411': 0x0623, 'afii57412': 0x0624, 'afii57413': 0x0625, 'afii57414': 0x0626, 'afii57415': 0x0627, 'afii57416': 0x0628, 'afii57417': 0x0629, 'afii57418': 0x062A, 'afii57419': 0x062B, 'afii57420': 0x062C, 'afii57421': 0x062D, 'afii57422': 0x062E, 'afii57423': 0x062F, 'afii57424': 0x0630, 'afii57425': 0x0631, 'afii57426': 0x0632, 'afii57427': 0x0633, 'afii57428': 0x0634, 'afii57429': 0x0635, 'afii57430': 0x0636, 'afii57431': 0x0637, 'afii57432': 0x0638, 'afii57433': 0x0639, 'afii57434': 0x063A, 'afii57440': 0x0640, 'afii57441': 0x0641, 'afii57442': 0x0642, 'afii57443': 0x0643, 'afii57444': 0x0644, 'afii57445': 0x0645, 'afii57446': 0x0646, 'afii57448': 0x0648, 'afii57449': 0x0649, 'afii57450': 0x064A, 'afii57451': 0x064B, 'afii57452': 0x064C, 'afii57453': 0x064D, 'afii57454': 0x064E, 'afii57455': 0x064F, 'afii57456': 0x0650, 'afii57457': 0x0651, 'afii57458': 0x0652, 'afii57470': 0x0647, 'afii57505': 0x06A4, 'afii57506': 0x067E, 'afii57507': 0x0686, 'afii57508': 0x0698, 'afii57509': 0x06AF, 'afii57511': 0x0679, 'afii57512': 0x0688, 'afii57513': 0x0691, 'afii57514': 0x06BA, 'afii57519': 0x06D2, 'afii57534': 0x06D5, 'afii57636': 0x20AA, 'afii57645': 0x05BE, 'afii57658': 0x05C3, 'afii57664': 0x05D0, 'afii57665': 0x05D1, 'afii57666': 0x05D2, 'afii57667': 0x05D3, 'afii57668': 0x05D4, 'afii57669': 0x05D5, 'afii57670': 0x05D6, 'afii57671': 0x05D7, 'afii57672': 0x05D8, 'afii57673': 0x05D9, 'afii57674': 0x05DA, 'afii57675': 0x05DB, 'afii57676': 0x05DC, 'afii57677': 0x05DD, 'afii57678': 0x05DE, 'afii57679': 0x05DF, 'afii57680': 0x05E0, 'afii57681': 0x05E1, 'afii57682': 0x05E2, 'afii57683': 0x05E3, 'afii57684': 0x05E4, 'afii57685': 0x05E5, 'afii57686': 0x05E6, 'afii57687': 0x05E7, 'afii57688': 0x05E8, 'afii57689': 0x05E9, 'afii57690': 0x05EA, 'afii57694': 0xFB2A, 'afii57695': 0xFB2B, 'afii57700': 0xFB4B, 'afii57705': 0xFB1F, 'afii57716': 0x05F0, 'afii57717': 0x05F1, 'afii57718': 0x05F2, 'afii57723': 0xFB35, 'afii57793': 0x05B4, 'afii57794': 0x05B5, 'afii57795': 0x05B6, 'afii57796': 0x05BB, 'afii57797': 0x05B8, 'afii57798': 0x05B7, 'afii57799': 0x05B0, 'afii57800': 0x05B2, 'afii57801': 0x05B1, 'afii57802': 0x05B3, 'afii57803': 0x05C2, 'afii57804': 0x05C1, 'afii57806': 0x05B9, 'afii57807': 0x05BC, 'afii57839': 0x05BD, 'afii57841': 0x05BF, 'afii57842': 0x05C0, 'afii57929': 0x02BC, 'afii61248': 0x2105, 'afii61289': 0x2113, 'afii61352': 0x2116, 'afii61573': 0x202C, 'afii61574': 0x202D, 'afii61575': 0x202E, 'afii61664': 0x200C, 'afii63167': 0x066D, 'afii64937': 0x02BD, 'agrave': 0x00E0, 'agujarati': 0x0A85, 'agurmukhi': 0x0A05, 'ahiragana': 0x3042, 'ahookabove': 0x1EA3, 'aibengali': 0x0990, 'aibopomofo': 0x311E, 'aideva': 0x0910, 'aiecyrillic': 0x04D5, 'aigujarati': 0x0A90, 'aigurmukhi': 0x0A10, 'aimatragurmukhi': 0x0A48, 'ainarabic': 0x0639, 'ainfinalarabic': 0xFECA, 'aininitialarabic': 0xFECB, 'ainmedialarabic': 0xFECC, 'ainvertedbreve': 0x0203, 'aivowelsignbengali': 0x09C8, 'aivowelsigndeva': 0x0948, 'aivowelsigngujarati': 0x0AC8, 'akatakana': 0x30A2, 'akatakanahalfwidth': 0xFF71, 'akorean': 0x314F, 'alef': 0x05D0, 'alefarabic': 0x0627, 'alefdageshhebrew': 0xFB30, 'aleffinalarabic': 0xFE8E, 'alefhamzaabovearabic': 0x0623, 'alefhamzaabovefinalarabic': 0xFE84, 'alefhamzabelowarabic': 0x0625, 'alefhamzabelowfinalarabic': 0xFE88, 'alefhebrew': 0x05D0, 'aleflamedhebrew': 0xFB4F, 'alefmaddaabovearabic': 0x0622, 'alefmaddaabovefinalarabic': 0xFE82, 'alefmaksuraarabic': 0x0649, 'alefmaksurafinalarabic': 0xFEF0, 'alefmaksurainitialarabic': 0xFEF3, 'alefmaksuramedialarabic': 0xFEF4, 'alefpatahhebrew': 0xFB2E, 'alefqamatshebrew': 0xFB2F, 'aleph': 0x2135, 'allequal': 0x224C, 'alpha': 0x03B1, 'alphatonos': 0x03AC, 'amacron': 0x0101, 'amonospace': 0xFF41, 'ampersand': 0x0026, 'ampersandmonospace': 0xFF06, 'ampersandsmall': 0xF726, 'amsquare': 0x33C2, 'anbopomofo': 0x3122, 'angbopomofo': 0x3124, 'angkhankhuthai': 0x0E5A, 'angle': 0x2220, 'anglebracketleft': 0x3008, 'anglebracketleftvertical': 0xFE3F, 'anglebracketright': 0x3009, 'anglebracketrightvertical': 0xFE40, 'angleleft': 0x2329, 'angleright': 0x232A, 'angstrom': 0x212B, 'anoteleia': 0x0387, 'anudattadeva': 0x0952, 'anusvarabengali': 0x0982, 'anusvaradeva': 0x0902, 'anusvaragujarati': 0x0A82, 'aogonek': 0x0105, 'apaatosquare': 0x3300, 'aparen': 0x249C, 'apostrophearmenian': 0x055A, 'apostrophemod': 0x02BC, 'apple': 0xF8FF, 'approaches': 0x2250, 'approxequal': 0x2248, 'approxequalorimage': 0x2252, 'approximatelyequal': 0x2245, 'araeaekorean': 0x318E, 'araeakorean': 0x318D, 'arc': 0x2312, 'arighthalfring': 0x1E9A, 'aring': 0x00E5, 'aringacute': 0x01FB, 'aringbelow': 0x1E01, 'arrowboth': 0x2194, 'arrowdashdown': 0x21E3, 'arrowdashleft': 0x21E0, 'arrowdashright': 0x21E2, 'arrowdashup': 0x21E1, 'arrowdblboth': 0x21D4, 'arrowdbldown': 0x21D3, 'arrowdblleft': 0x21D0, 'arrowdblright': 0x21D2, 'arrowdblup': 0x21D1, 'arrowdown': 0x2193, 'arrowdownleft': 0x2199, 'arrowdownright': 0x2198, 'arrowdownwhite': 0x21E9, 'arrowheaddownmod': 0x02C5, 'arrowheadleftmod': 0x02C2, 'arrowheadrightmod': 0x02C3, 'arrowheadupmod': 0x02C4, 'arrowhorizex': 0xF8E7, 'arrowleft': 0x2190, 'arrowleftdbl': 0x21D0, 'arrowleftdblstroke': 0x21CD, 'arrowleftoverright': 0x21C6, 'arrowleftwhite': 0x21E6, 'arrowright': 0x2192, 'arrowrightdblstroke': 0x21CF, 'arrowrightheavy': 0x279E, 'arrowrightoverleft': 0x21C4, 'arrowrightwhite': 0x21E8, 'arrowtableft': 0x21E4, 'arrowtabright': 0x21E5, 'arrowup': 0x2191, 'arrowupdn': 0x2195, 'arrowupdnbse': 0x21A8, 'arrowupdownbase': 0x21A8, 'arrowupleft': 0x2196, 'arrowupleftofdown': 0x21C5, 'arrowupright': 0x2197, 'arrowupwhite': 0x21E7, 'arrowvertex': 0xF8E6, 'asciicircum': 0x005E, 'asciicircummonospace': 0xFF3E, 'asciitilde': 0x007E, 'asciitildemonospace': 0xFF5E, 'ascript': 0x0251, 'ascriptturned': 0x0252, 'asmallhiragana': 0x3041, 'asmallkatakana': 0x30A1, 'asmallkatakanahalfwidth': 0xFF67, 'asterisk': 0x002A, 'asteriskaltonearabic': 0x066D, 'asteriskarabic': 0x066D, 'asteriskmath': 0x2217, 'asteriskmonospace': 0xFF0A, 'asterisksmall': 0xFE61, 'asterism': 0x2042, 'asuperior': 0xF6E9, 'asymptoticallyequal': 0x2243, 'at': 0x0040, 'atilde': 0x00E3, 'atmonospace': 0xFF20, 'atsmall': 0xFE6B, 'aturned': 0x0250, 'aubengali': 0x0994, 'aubopomofo': 0x3120, 'audeva': 0x0914, 'augujarati': 0x0A94, 'augurmukhi': 0x0A14, 'aulengthmarkbengali': 0x09D7, 'aumatragurmukhi': 0x0A4C, 'auvowelsignbengali': 0x09CC, 'auvowelsigndeva': 0x094C, 'auvowelsigngujarati': 0x0ACC, 'avagrahadeva': 0x093D, 'aybarmenian': 0x0561, 'ayin': 0x05E2, 'ayinaltonehebrew': 0xFB20, 'ayinhebrew': 0x05E2, 'b': 0x0062, 'babengali': 0x09AC, 'backslash': 0x005C, 'backslashmonospace': 0xFF3C, 'badeva': 0x092C, 'bagujarati': 0x0AAC, 'bagurmukhi': 0x0A2C, 'bahiragana': 0x3070, 'bahtthai': 0x0E3F, 'bakatakana': 0x30D0, 'bar': 0x007C, 'barmonospace': 0xFF5C, 'bbopomofo': 0x3105, 'bcircle': 0x24D1, 'bdotaccent': 0x1E03, 'bdotbelow': 0x1E05, 'beamedsixteenthnotes': 0x266C, 'because': 0x2235, 'becyrillic': 0x0431, 'beharabic': 0x0628, 'behfinalarabic': 0xFE90, 'behinitialarabic': 0xFE91, 'behiragana': 0x3079, 'behmedialarabic': 0xFE92, 'behmeeminitialarabic': 0xFC9F, 'behmeemisolatedarabic': 0xFC08, 'behnoonfinalarabic': 0xFC6D, 'bekatakana': 0x30D9, 'benarmenian': 0x0562, 'bet': 0x05D1, 'beta': 0x03B2, 'betasymbolgreek': 0x03D0, 'betdagesh': 0xFB31, 'betdageshhebrew': 0xFB31, 'bethebrew': 0x05D1, 'betrafehebrew': 0xFB4C, 'bhabengali': 0x09AD, 'bhadeva': 0x092D, 'bhagujarati': 0x0AAD, 'bhagurmukhi': 0x0A2D, 'bhook': 0x0253, 'bihiragana': 0x3073, 'bikatakana': 0x30D3, 'bilabialclick': 0x0298, 'bindigurmukhi': 0x0A02, 'birusquare': 0x3331, 'blackcircle': 0x25CF, 'blackdiamond': 0x25C6, 'blackdownpointingtriangle': 0x25BC, 'blackleftpointingpointer': 0x25C4, 'blackleftpointingtriangle': 0x25C0, 'blacklenticularbracketleft': 0x3010, 'blacklenticularbracketleftvertical': 0xFE3B, 'blacklenticularbracketright': 0x3011, 'blacklenticularbracketrightvertical': 0xFE3C, 'blacklowerlefttriangle': 0x25E3, 'blacklowerrighttriangle': 0x25E2, 'blackrectangle': 0x25AC, 'blackrightpointingpointer': 0x25BA, 'blackrightpointingtriangle': 0x25B6, 'blacksmallsquare': 0x25AA, 'blacksmilingface': 0x263B, 'blacksquare': 0x25A0, 'blackstar': 0x2605, 'blackupperlefttriangle': 0x25E4, 'blackupperrighttriangle': 0x25E5, 'blackuppointingsmalltriangle': 0x25B4, 'blackuppointingtriangle': 0x25B2, 'blank': 0x2423, 'blinebelow': 0x1E07, 'block': 0x2588, 'bmonospace': 0xFF42, 'bobaimaithai': 0x0E1A, 'bohiragana': 0x307C, 'bokatakana': 0x30DC, 'bparen': 0x249D, 'bqsquare': 0x33C3, 'braceex': 0xF8F4, 'braceleft': 0x007B, 'braceleftbt': 0xF8F3, 'braceleftmid': 0xF8F2, 'braceleftmonospace': 0xFF5B, 'braceleftsmall': 0xFE5B, 'bracelefttp': 0xF8F1, 'braceleftvertical': 0xFE37, 'braceright': 0x007D, 'bracerightbt': 0xF8FE, 'bracerightmid': 0xF8FD, 'bracerightmonospace': 0xFF5D, 'bracerightsmall': 0xFE5C, 'bracerighttp': 0xF8FC, 'bracerightvertical': 0xFE38, 'bracketleft': 0x005B, 'bracketleftbt': 0xF8F0, 'bracketleftex': 0xF8EF, 'bracketleftmonospace': 0xFF3B, 'bracketlefttp': 0xF8EE, 'bracketright': 0x005D, 'bracketrightbt': 0xF8FB, 'bracketrightex': 0xF8FA, 'bracketrightmonospace': 0xFF3D, 'bracketrighttp': 0xF8F9, 'breve': 0x02D8, 'brevebelowcmb': 0x032E, 'brevecmb': 0x0306, 'breveinvertedbelowcmb': 0x032F, 'breveinvertedcmb': 0x0311, 'breveinverteddoublecmb': 0x0361, 'bridgebelowcmb': 0x032A, 'bridgeinvertedbelowcmb': 0x033A, 'brokenbar': 0x00A6, 'bstroke': 0x0180, 'bsuperior': 0xF6EA, 'btopbar': 0x0183, 'buhiragana': 0x3076, 'bukatakana': 0x30D6, 'bullet': 0x2022, 'bulletinverse': 0x25D8, 'bulletoperator': 0x2219, 'bullseye': 0x25CE, 'c': 0x0063, 'caarmenian': 0x056E, 'cabengali': 0x099A, 'cacute': 0x0107, 'cadeva': 0x091A, 'cagujarati': 0x0A9A, 'cagurmukhi': 0x0A1A, 'calsquare': 0x3388, 'candrabindubengali': 0x0981, 'candrabinducmb': 0x0310, 'candrabindudeva': 0x0901, 'candrabindugujarati': 0x0A81, 'capslock': 0x21EA, 'careof': 0x2105, 'caron': 0x02C7, 'caronbelowcmb': 0x032C, 'caroncmb': 0x030C, 'carriagereturn': 0x21B5, 'cbopomofo': 0x3118, 'ccaron': 0x010D, 'ccedilla': 0x00E7, 'ccedillaacute': 0x1E09, 'ccircle': 0x24D2, 'ccircumflex': 0x0109, 'ccurl': 0x0255, 'cdot': 0x010B, 'cdotaccent': 0x010B, 'cdsquare': 0x33C5, 'cedilla': 0x00B8, 'cedillacmb': 0x0327, 'cent': 0x00A2, 'centigrade': 0x2103, 'centinferior': 0xF6DF, 'centmonospace': 0xFFE0, 'centoldstyle': 0xF7A2, 'centsuperior': 0xF6E0, 'chaarmenian': 0x0579, 'chabengali': 0x099B, 'chadeva': 0x091B, 'chagujarati': 0x0A9B, 'chagurmukhi': 0x0A1B, 'chbopomofo': 0x3114, 'cheabkhasiancyrillic': 0x04BD, 'checkmark': 0x2713, 'checyrillic': 0x0447, 'chedescenderabkhasiancyrillic': 0x04BF, 'chedescendercyrillic': 0x04B7, 'chedieresiscyrillic': 0x04F5, 'cheharmenian': 0x0573, 'chekhakassiancyrillic': 0x04CC, 'cheverticalstrokecyrillic': 0x04B9, 'chi': 0x03C7, 'chieuchacirclekorean': 0x3277, 'chieuchaparenkorean': 0x3217, 'chieuchcirclekorean': 0x3269, 'chieuchkorean': 0x314A, 'chieuchparenkorean': 0x3209, 'chochangthai': 0x0E0A, 'chochanthai': 0x0E08, 'chochingthai': 0x0E09, 'chochoethai': 0x0E0C, 'chook': 0x0188, 'cieucacirclekorean': 0x3276, 'cieucaparenkorean': 0x3216, 'cieuccirclekorean': 0x3268, 'cieuckorean': 0x3148, 'cieucparenkorean': 0x3208, 'cieucuparenkorean': 0x321C, 'circle': 0x25CB, 'circlemultiply': 0x2297, 'circleot': 0x2299, 'circleplus': 0x2295, 'circlepostalmark': 0x3036, 'circlewithlefthalfblack': 0x25D0, 'circlewithrighthalfblack': 0x25D1, 'circumflex': 0x02C6, 'circumflexbelowcmb': 0x032D, 'circumflexcmb': 0x0302, 'clear': 0x2327, 'clickalveolar': 0x01C2, 'clickdental': 0x01C0, 'clicklateral': 0x01C1, 'clickretroflex': 0x01C3, 'club': 0x2663, 'clubsuitblack': 0x2663, 'clubsuitwhite': 0x2667, 'cmcubedsquare': 0x33A4, 'cmonospace': 0xFF43, 'cmsquaredsquare': 0x33A0, 'coarmenian': 0x0581, 'colon': 0x003A, 'colonmonetary': 0x20A1, 'colonmonospace': 0xFF1A, 'colonsign': 0x20A1, 'colonsmall': 0xFE55, 'colontriangularhalfmod': 0x02D1, 'colontriangularmod': 0x02D0, 'comma': 0x002C, 'commaabovecmb': 0x0313, 'commaaboverightcmb': 0x0315, 'commaaccent': 0xF6C3, 'commaarabic': 0x060C, 'commaarmenian': 0x055D, 'commainferior': 0xF6E1, 'commamonospace': 0xFF0C, 'commareversedabovecmb': 0x0314, 'commareversedmod': 0x02BD, 'commasmall': 0xFE50, 'commasuperior': 0xF6E2, 'commaturnedabovecmb': 0x0312, 'commaturnedmod': 0x02BB, 'compass': 0x263C, 'congruent': 0x2245, 'contourintegral': 0x222E, 'control': 0x2303, 'controlACK': 0x0006, 'controlBEL': 0x0007, 'controlBS': 0x0008, 'controlCAN': 0x0018, 'controlCR': 0x000D, 'controlDC1': 0x0011, 'controlDC2': 0x0012, 'controlDC3': 0x0013, 'controlDC4': 0x0014, 'controlDEL': 0x007F, 'controlDLE': 0x0010, 'controlEM': 0x0019, 'controlENQ': 0x0005, 'controlEOT': 0x0004, 'controlESC': 0x001B, 'controlETB': 0x0017, 'controlETX': 0x0003, 'controlFF': 0x000C, 'controlFS': 0x001C, 'controlGS': 0x001D, 'controlHT': 0x0009, 'controlLF': 0x000A, 'controlNAK': 0x0015, 'controlRS': 0x001E, 'controlSI': 0x000F, 'controlSO': 0x000E, 'controlSOT': 0x0002, 'controlSTX': 0x0001, 'controlSUB': 0x001A, 'controlSYN': 0x0016, 'controlUS': 0x001F, 'controlVT': 0x000B, 'copyright': 0x00A9, 'copyrightsans': 0xF8E9, 'copyrightserif': 0xF6D9, 'cornerbracketleft': 0x300C, 'cornerbracketlefthalfwidth': 0xFF62, 'cornerbracketleftvertical': 0xFE41, 'cornerbracketright': 0x300D, 'cornerbracketrighthalfwidth': 0xFF63, 'cornerbracketrightvertical': 0xFE42, 'corporationsquare': 0x337F, 'cosquare': 0x33C7, 'coverkgsquare': 0x33C6, 'cparen': 0x249E, 'cruzeiro': 0x20A2, 'cstretched': 0x0297, 'curlyand': 0x22CF, 'curlyor': 0x22CE, 'currency': 0x00A4, 'cyrBreve': 0xF6D1, 'cyrFlex': 0xF6D2, 'cyrbreve': 0xF6D4, 'cyrflex': 0xF6D5, 'd': 0x0064, 'daarmenian': 0x0564, 'dabengali': 0x09A6, 'dadarabic': 0x0636, 'dadeva': 0x0926, 'dadfinalarabic': 0xFEBE, 'dadinitialarabic': 0xFEBF, 'dadmedialarabic': 0xFEC0, 'dagesh': 0x05BC, 'dageshhebrew': 0x05BC, 'dagger': 0x2020, 'daggerdbl': 0x2021, 'dagujarati': 0x0AA6, 'dagurmukhi': 0x0A26, 'dahiragana': 0x3060, 'dakatakana': 0x30C0, 'dalarabic': 0x062F, 'dalet': 0x05D3, 'daletdagesh': 0xFB33, 'daletdageshhebrew': 0xFB33, 'dalethebrew': 0x05D3, 'dalfinalarabic': 0xFEAA, 'dammaarabic': 0x064F, 'dammalowarabic': 0x064F, 'dammatanaltonearabic': 0x064C, 'dammatanarabic': 0x064C, 'danda': 0x0964, 'dargahebrew': 0x05A7, 'dargalefthebrew': 0x05A7, 'dasiapneumatacyrilliccmb': 0x0485, 'dblGrave': 0xF6D3, 'dblanglebracketleft': 0x300A, 'dblanglebracketleftvertical': 0xFE3D, 'dblanglebracketright': 0x300B, 'dblanglebracketrightvertical': 0xFE3E, 'dblarchinvertedbelowcmb': 0x032B, 'dblarrowleft': 0x21D4, 'dblarrowright': 0x21D2, 'dbldanda': 0x0965, 'dblgrave': 0xF6D6, 'dblgravecmb': 0x030F, 'dblintegral': 0x222C, 'dbllowline': 0x2017, 'dbllowlinecmb': 0x0333, 'dbloverlinecmb': 0x033F, 'dblprimemod': 0x02BA, 'dblverticalbar': 0x2016, 'dblverticallineabovecmb': 0x030E, 'dbopomofo': 0x3109, 'dbsquare': 0x33C8, 'dcaron': 0x010F, 'dcedilla': 0x1E11, 'dcircle': 0x24D3, 'dcircumflexbelow': 0x1E13, 'dcroat': 0x0111, 'ddabengali': 0x09A1, 'ddadeva': 0x0921, 'ddagujarati': 0x0AA1, 'ddagurmukhi': 0x0A21, 'ddalarabic': 0x0688, 'ddalfinalarabic': 0xFB89, 'dddhadeva': 0x095C, 'ddhabengali': 0x09A2, 'ddhadeva': 0x0922, 'ddhagujarati': 0x0AA2, 'ddhagurmukhi': 0x0A22, 'ddotaccent': 0x1E0B, 'ddotbelow': 0x1E0D, 'decimalseparatorarabic': 0x066B, 'decimalseparatorpersian': 0x066B, 'decyrillic': 0x0434, 'degree': 0x00B0, 'dehihebrew': 0x05AD, 'dehiragana': 0x3067, 'deicoptic': 0x03EF, 'dekatakana': 0x30C7, 'deleteleft': 0x232B, 'deleteright': 0x2326, 'delta': 0x03B4, 'deltaturned': 0x018D, 'denominatorminusonenumeratorbengali': 0x09F8, 'dezh': 0x02A4, 'dhabengali': 0x09A7, 'dhadeva': 0x0927, 'dhagujarati': 0x0AA7, 'dhagurmukhi': 0x0A27, 'dhook': 0x0257, 'dialytikatonos': 0x0385, 'dialytikatonoscmb': 0x0344, 'diamond': 0x2666, 'diamondsuitwhite': 0x2662, 'dieresis': 0x00A8, 'dieresisacute': 0xF6D7, 'dieresisbelowcmb': 0x0324, 'dieresiscmb': 0x0308, 'dieresisgrave': 0xF6D8, 'dieresistonos': 0x0385, 'dihiragana': 0x3062, 'dikatakana': 0x30C2, 'dittomark': 0x3003, 'divide': 0x00F7, 'divides': 0x2223, 'divisionslash': 0x2215, 'djecyrillic': 0x0452, 'dkshade': 0x2593, 'dlinebelow': 0x1E0F, 'dlsquare': 0x3397, 'dmacron': 0x0111, 'dmonospace': 0xFF44, 'dnblock': 0x2584, 'dochadathai': 0x0E0E, 'dodekthai': 0x0E14, 'dohiragana': 0x3069, 'dokatakana': 0x30C9, 'dollar': 0x0024, 'dollarinferior': 0xF6E3, 'dollarmonospace': 0xFF04, 'dollaroldstyle': 0xF724, 'dollarsmall': 0xFE69, 'dollarsuperior': 0xF6E4, 'dong': 0x20AB, 'dorusquare': 0x3326, 'dotaccent': 0x02D9, 'dotaccentcmb': 0x0307, 'dotbelowcmb': 0x0323, 'dotbelowcomb': 0x0323, 'dotkatakana': 0x30FB, 'dotlessi': 0x0131, 'dotlessj': 0xF6BE, 'dotlessjstrokehook': 0x0284, 'dotmath': 0x22C5, 'dottedcircle': 0x25CC, 'doubleyodpatah': 0xFB1F, 'doubleyodpatahhebrew': 0xFB1F, 'downtackbelowcmb': 0x031E, 'downtackmod': 0x02D5, 'dparen': 0x249F, 'dsuperior': 0xF6EB, 'dtail': 0x0256, 'dtopbar': 0x018C, 'duhiragana': 0x3065, 'dukatakana': 0x30C5, 'dz': 0x01F3, 'dzaltone': 0x02A3, 'dzcaron': 0x01C6, 'dzcurl': 0x02A5, 'dzeabkhasiancyrillic': 0x04E1, 'dzecyrillic': 0x0455, 'dzhecyrillic': 0x045F, 'e': 0x0065, 'eacute': 0x00E9, 'earth': 0x2641, 'ebengali': 0x098F, 'ebopomofo': 0x311C, 'ebreve': 0x0115, 'ecandradeva': 0x090D, 'ecandragujarati': 0x0A8D, 'ecandravowelsigndeva': 0x0945, 'ecandravowelsigngujarati': 0x0AC5, 'ecaron': 0x011B, 'ecedillabreve': 0x1E1D, 'echarmenian': 0x0565, 'echyiwnarmenian': 0x0587, 'ecircle': 0x24D4, 'ecircumflex': 0x00EA, 'ecircumflexacute': 0x1EBF, 'ecircumflexbelow': 0x1E19, 'ecircumflexdotbelow': 0x1EC7, 'ecircumflexgrave': 0x1EC1, 'ecircumflexhookabove': 0x1EC3, 'ecircumflextilde': 0x1EC5, 'ecyrillic': 0x0454, 'edblgrave': 0x0205, 'edeva': 0x090F, 'edieresis': 0x00EB, 'edot': 0x0117, 'edotaccent': 0x0117, 'edotbelow': 0x1EB9, 'eegurmukhi': 0x0A0F, 'eematragurmukhi': 0x0A47, 'efcyrillic': 0x0444, 'egrave': 0x00E8, 'egujarati': 0x0A8F, 'eharmenian': 0x0567, 'ehbopomofo': 0x311D, 'ehiragana': 0x3048, 'ehookabove': 0x1EBB, 'eibopomofo': 0x311F, 'eight': 0x0038, 'eightarabic': 0x0668, 'eightbengali': 0x09EE, 'eightcircle': 0x2467, 'eightcircleinversesansserif': 0x2791, 'eightdeva': 0x096E, 'eighteencircle': 0x2471, 'eighteenparen': 0x2485, 'eighteenperiod': 0x2499, 'eightgujarati': 0x0AEE, 'eightgurmukhi': 0x0A6E, 'eighthackarabic': 0x0668, 'eighthangzhou': 0x3028, 'eighthnotebeamed': 0x266B, 'eightideographicparen': 0x3227, 'eightinferior': 0x2088, 'eightmonospace': 0xFF18, 'eightoldstyle': 0xF738, 'eightparen': 0x247B, 'eightperiod': 0x248F, 'eightpersian': 0x06F8, 'eightroman': 0x2177, 'eightsuperior': 0x2078, 'eightthai': 0x0E58, 'einvertedbreve': 0x0207, 'eiotifiedcyrillic': 0x0465, 'ekatakana': 0x30A8, 'ekatakanahalfwidth': 0xFF74, 'ekonkargurmukhi': 0x0A74, 'ekorean': 0x3154, 'elcyrillic': 0x043B, 'element': 0x2208, 'elevencircle': 0x246A, 'elevenparen': 0x247E, 'elevenperiod': 0x2492, 'elevenroman': 0x217A, 'ellipsis': 0x2026, 'ellipsisvertical': 0x22EE, 'emacron': 0x0113, 'emacronacute': 0x1E17, 'emacrongrave': 0x1E15, 'emcyrillic': 0x043C, 'emdash': 0x2014, 'emdashvertical': 0xFE31, 'emonospace': 0xFF45, 'emphasismarkarmenian': 0x055B, 'emptyset': 0x2205, 'enbopomofo': 0x3123, 'encyrillic': 0x043D, 'endash': 0x2013, 'endashvertical': 0xFE32, 'endescendercyrillic': 0x04A3, 'eng': 0x014B, 'engbopomofo': 0x3125, 'enghecyrillic': 0x04A5, 'enhookcyrillic': 0x04C8, 'enspace': 0x2002, 'eogonek': 0x0119, 'eokorean': 0x3153, 'eopen': 0x025B, 'eopenclosed': 0x029A, 'eopenreversed': 0x025C, 'eopenreversedclosed': 0x025E, 'eopenreversedhook': 0x025D, 'eparen': 0x24A0, 'epsilon': 0x03B5, 'epsilontonos': 0x03AD, 'equal': 0x003D, 'equalmonospace': 0xFF1D, 'equalsmall': 0xFE66, 'equalsuperior': 0x207C, 'equivalence': 0x2261, 'erbopomofo': 0x3126, 'ercyrillic': 0x0440, 'ereversed': 0x0258, 'ereversedcyrillic': 0x044D, 'escyrillic': 0x0441, 'esdescendercyrillic': 0x04AB, 'esh': 0x0283, 'eshcurl': 0x0286, 'eshortdeva': 0x090E, 'eshortvowelsigndeva': 0x0946, 'eshreversedloop': 0x01AA, 'eshsquatreversed': 0x0285, 'esmallhiragana': 0x3047, 'esmallkatakana': 0x30A7, 'esmallkatakanahalfwidth': 0xFF6A, 'estimated': 0x212E, 'esuperior': 0xF6EC, 'eta': 0x03B7, 'etarmenian': 0x0568, 'etatonos': 0x03AE, 'eth': 0x00F0, 'etilde': 0x1EBD, 'etildebelow': 0x1E1B, 'etnahtafoukhhebrew': 0x0591, 'etnahtafoukhlefthebrew': 0x0591, 'etnahtahebrew': 0x0591, 'etnahtalefthebrew': 0x0591, 'eturned': 0x01DD, 'eukorean': 0x3161, 'euro': 0x20AC, 'evowelsignbengali': 0x09C7, 'evowelsigndeva': 0x0947, 'evowelsigngujarati': 0x0AC7, 'exclam': 0x0021, 'exclamarmenian': 0x055C, 'exclamdbl': 0x203C, 'exclamdown': 0x00A1, 'exclamdownsmall': 0xF7A1, 'exclammonospace': 0xFF01, 'exclamsmall': 0xF721, 'existential': 0x2203, 'ezh': 0x0292, 'ezhcaron': 0x01EF, 'ezhcurl': 0x0293, 'ezhreversed': 0x01B9, 'ezhtail': 0x01BA, 'f': 0x0066, 'fadeva': 0x095E, 'fagurmukhi': 0x0A5E, 'fahrenheit': 0x2109, 'fathaarabic': 0x064E, 'fathalowarabic': 0x064E, 'fathatanarabic': 0x064B, 'fbopomofo': 0x3108, 'fcircle': 0x24D5, 'fdotaccent': 0x1E1F, 'feharabic': 0x0641, 'feharmenian': 0x0586, 'fehfinalarabic': 0xFED2, 'fehinitialarabic': 0xFED3, 'fehmedialarabic': 0xFED4, 'feicoptic': 0x03E5, 'female': 0x2640, 'ff': 0xFB00, 'ffi': 0xFB03, 'ffl': 0xFB04, 'fi': 0xFB01, 'fifteencircle': 0x246E, 'fifteenparen': 0x2482, 'fifteenperiod': 0x2496, 'figuredash': 0x2012, 'filledbox': 0x25A0, 'filledrect': 0x25AC, 'finalkaf': 0x05DA, 'finalkafdagesh': 0xFB3A, 'finalkafdageshhebrew': 0xFB3A, 'finalkafhebrew': 0x05DA, 'finalmem': 0x05DD, 'finalmemhebrew': 0x05DD, 'finalnun': 0x05DF, 'finalnunhebrew': 0x05DF, 'finalpe': 0x05E3, 'finalpehebrew': 0x05E3, 'finaltsadi': 0x05E5, 'finaltsadihebrew': 0x05E5, 'firsttonechinese': 0x02C9, 'fisheye': 0x25C9, 'fitacyrillic': 0x0473, 'five': 0x0035, 'fivearabic': 0x0665, 'fivebengali': 0x09EB, 'fivecircle': 0x2464, 'fivecircleinversesansserif': 0x278E, 'fivedeva': 0x096B, 'fiveeighths': 0x215D, 'fivegujarati': 0x0AEB, 'fivegurmukhi': 0x0A6B, 'fivehackarabic': 0x0665, 'fivehangzhou': 0x3025, 'fiveideographicparen': 0x3224, 'fiveinferior': 0x2085, 'fivemonospace': 0xFF15, 'fiveoldstyle': 0xF735, 'fiveparen': 0x2478, 'fiveperiod': 0x248C, 'fivepersian': 0x06F5, 'fiveroman': 0x2174, 'fivesuperior': 0x2075, 'fivethai': 0x0E55, 'fl': 0xFB02, 'florin': 0x0192, 'fmonospace': 0xFF46, 'fmsquare': 0x3399, 'fofanthai': 0x0E1F, 'fofathai': 0x0E1D, 'fongmanthai': 0x0E4F, 'forall': 0x2200, 'four': 0x0034, 'fourarabic': 0x0664, 'fourbengali': 0x09EA, 'fourcircle': 0x2463, 'fourcircleinversesansserif': 0x278D, 'fourdeva': 0x096A, 'fourgujarati': 0x0AEA, 'fourgurmukhi': 0x0A6A, 'fourhackarabic': 0x0664, 'fourhangzhou': 0x3024, 'fourideographicparen': 0x3223, 'fourinferior': 0x2084, 'fourmonospace': 0xFF14, 'fournumeratorbengali': 0x09F7, 'fouroldstyle': 0xF734, 'fourparen': 0x2477, 'fourperiod': 0x248B, 'fourpersian': 0x06F4, 'fourroman': 0x2173, 'foursuperior': 0x2074, 'fourteencircle': 0x246D, 'fourteenparen': 0x2481, 'fourteenperiod': 0x2495, 'fourthai': 0x0E54, 'fourthtonechinese': 0x02CB, 'fparen': 0x24A1, 'fraction': 0x2044, 'franc': 0x20A3, 'g': 0x0067, 'gabengali': 0x0997, 'gacute': 0x01F5, 'gadeva': 0x0917, 'gafarabic': 0x06AF, 'gaffinalarabic': 0xFB93, 'gafinitialarabic': 0xFB94, 'gafmedialarabic': 0xFB95, 'gagujarati': 0x0A97, 'gagurmukhi': 0x0A17, 'gahiragana': 0x304C, 'gakatakana': 0x30AC, 'gamma': 0x03B3, 'gammalatinsmall': 0x0263, 'gammasuperior': 0x02E0, 'gangiacoptic': 0x03EB, 'gbopomofo': 0x310D, 'gbreve': 0x011F, 'gcaron': 0x01E7, 'gcedilla': 0x0123, 'gcircle': 0x24D6, 'gcircumflex': 0x011D, 'gcommaaccent': 0x0123, 'gdot': 0x0121, 'gdotaccent': 0x0121, 'gecyrillic': 0x0433, 'gehiragana': 0x3052, 'gekatakana': 0x30B2, 'geometricallyequal': 0x2251, 'gereshaccenthebrew': 0x059C, 'gereshhebrew': 0x05F3, 'gereshmuqdamhebrew': 0x059D, 'germandbls': 0x00DF, 'gershayimaccenthebrew': 0x059E, 'gershayimhebrew': 0x05F4, 'getamark': 0x3013, 'ghabengali': 0x0998, 'ghadarmenian': 0x0572, 'ghadeva': 0x0918, 'ghagujarati': 0x0A98, 'ghagurmukhi': 0x0A18, 'ghainarabic': 0x063A, 'ghainfinalarabic': 0xFECE, 'ghaininitialarabic': 0xFECF, 'ghainmedialarabic': 0xFED0, 'ghemiddlehookcyrillic': 0x0495, 'ghestrokecyrillic': 0x0493, 'gheupturncyrillic': 0x0491, 'ghhadeva': 0x095A, 'ghhagurmukhi': 0x0A5A, 'ghook': 0x0260, 'ghzsquare': 0x3393, 'gihiragana': 0x304E, 'gikatakana': 0x30AE, 'gimarmenian': 0x0563, 'gimel': 0x05D2, 'gimeldagesh': 0xFB32, 'gimeldageshhebrew': 0xFB32, 'gimelhebrew': 0x05D2, 'gjecyrillic': 0x0453, 'glottalinvertedstroke': 0x01BE, 'glottalstop': 0x0294, 'glottalstopinverted': 0x0296, 'glottalstopmod': 0x02C0, 'glottalstopreversed': 0x0295, 'glottalstopreversedmod': 0x02C1, 'glottalstopreversedsuperior': 0x02E4, 'glottalstopstroke': 0x02A1, 'glottalstopstrokereversed': 0x02A2, 'gmacron': 0x1E21, 'gmonospace': 0xFF47, 'gohiragana': 0x3054, 'gokatakana': 0x30B4, 'gparen': 0x24A2, 'gpasquare': 0x33AC, 'gradient': 0x2207, 'grave': 0x0060, 'gravebelowcmb': 0x0316, 'gravecmb': 0x0300, 'gravecomb': 0x0300, 'gravedeva': 0x0953, 'gravelowmod': 0x02CE, 'gravemonospace': 0xFF40, 'gravetonecmb': 0x0340, 'greater': 0x003E, 'greaterequal': 0x2265, 'greaterequalorless': 0x22DB, 'greatermonospace': 0xFF1E, 'greaterorequivalent': 0x2273, 'greaterorless': 0x2277, 'greateroverequal': 0x2267, 'greatersmall': 0xFE65, 'gscript': 0x0261, 'gstroke': 0x01E5, 'guhiragana': 0x3050, 'guillemotleft': 0x00AB, 'guillemotright': 0x00BB, 'guilsinglleft': 0x2039, 'guilsinglright': 0x203A, 'gukatakana': 0x30B0, 'guramusquare': 0x3318, 'gysquare': 0x33C9, 'h': 0x0068, 'haabkhasiancyrillic': 0x04A9, 'haaltonearabic': 0x06C1, 'habengali': 0x09B9, 'hadescendercyrillic': 0x04B3, 'hadeva': 0x0939, 'hagujarati': 0x0AB9, 'hagurmukhi': 0x0A39, 'haharabic': 0x062D, 'hahfinalarabic': 0xFEA2, 'hahinitialarabic': 0xFEA3, 'hahiragana': 0x306F, 'hahmedialarabic': 0xFEA4, 'haitusquare': 0x332A, 'hakatakana': 0x30CF, 'hakatakanahalfwidth': 0xFF8A, 'halantgurmukhi': 0x0A4D, 'hamzaarabic': 0x0621, 'hamzalowarabic': 0x0621, 'hangulfiller': 0x3164, 'hardsigncyrillic': 0x044A, 'harpoonleftbarbup': 0x21BC, 'harpoonrightbarbup': 0x21C0, 'hasquare': 0x33CA, 'hatafpatah': 0x05B2, 'hatafpatah16': 0x05B2, 'hatafpatah23': 0x05B2, 'hatafpatah2f': 0x05B2, 'hatafpatahhebrew': 0x05B2, 'hatafpatahnarrowhebrew': 0x05B2, 'hatafpatahquarterhebrew': 0x05B2, 'hatafpatahwidehebrew': 0x05B2, 'hatafqamats': 0x05B3, 'hatafqamats1b': 0x05B3, 'hatafqamats28': 0x05B3, 'hatafqamats34': 0x05B3, 'hatafqamatshebrew': 0x05B3, 'hatafqamatsnarrowhebrew': 0x05B3, 'hatafqamatsquarterhebrew': 0x05B3, 'hatafqamatswidehebrew': 0x05B3, 'hatafsegol': 0x05B1, 'hatafsegol17': 0x05B1, 'hatafsegol24': 0x05B1, 'hatafsegol30': 0x05B1, 'hatafsegolhebrew': 0x05B1, 'hatafsegolnarrowhebrew': 0x05B1, 'hatafsegolquarterhebrew': 0x05B1, 'hatafsegolwidehebrew': 0x05B1, 'hbar': 0x0127, 'hbopomofo': 0x310F, 'hbrevebelow': 0x1E2B, 'hcedilla': 0x1E29, 'hcircle': 0x24D7, 'hcircumflex': 0x0125, 'hdieresis': 0x1E27, 'hdotaccent': 0x1E23, 'hdotbelow': 0x1E25, 'he': 0x05D4, 'heart': 0x2665, 'heartsuitblack': 0x2665, 'heartsuitwhite': 0x2661, 'hedagesh': 0xFB34, 'hedageshhebrew': 0xFB34, 'hehaltonearabic': 0x06C1, 'heharabic': 0x0647, 'hehebrew': 0x05D4, 'hehfinalaltonearabic': 0xFBA7, 'hehfinalalttwoarabic': 0xFEEA, 'hehfinalarabic': 0xFEEA, 'hehhamzaabovefinalarabic': 0xFBA5, 'hehhamzaaboveisolatedarabic': 0xFBA4, 'hehinitialaltonearabic': 0xFBA8, 'hehinitialarabic': 0xFEEB, 'hehiragana': 0x3078, 'hehmedialaltonearabic': 0xFBA9, 'hehmedialarabic': 0xFEEC, 'heiseierasquare': 0x337B, 'hekatakana': 0x30D8, 'hekatakanahalfwidth': 0xFF8D, 'hekutaarusquare': 0x3336, 'henghook': 0x0267, 'herutusquare': 0x3339, 'het': 0x05D7, 'hethebrew': 0x05D7, 'hhook': 0x0266, 'hhooksuperior': 0x02B1, 'hieuhacirclekorean': 0x327B, 'hieuhaparenkorean': 0x321B, 'hieuhcirclekorean': 0x326D, 'hieuhkorean': 0x314E, 'hieuhparenkorean': 0x320D, 'hihiragana': 0x3072, 'hikatakana': 0x30D2, 'hikatakanahalfwidth': 0xFF8B, 'hiriq': 0x05B4, 'hiriq14': 0x05B4, 'hiriq21': 0x05B4, 'hiriq2d': 0x05B4, 'hiriqhebrew': 0x05B4, 'hiriqnarrowhebrew': 0x05B4, 'hiriqquarterhebrew': 0x05B4, 'hiriqwidehebrew': 0x05B4, 'hlinebelow': 0x1E96, 'hmonospace': 0xFF48, 'hoarmenian': 0x0570, 'hohipthai': 0x0E2B, 'hohiragana': 0x307B, 'hokatakana': 0x30DB, 'hokatakanahalfwidth': 0xFF8E, 'holam': 0x05B9, 'holam19': 0x05B9, 'holam26': 0x05B9, 'holam32': 0x05B9, 'holamhebrew': 0x05B9, 'holamnarrowhebrew': 0x05B9, 'holamquarterhebrew': 0x05B9, 'holamwidehebrew': 0x05B9, 'honokhukthai': 0x0E2E, 'hookabovecomb': 0x0309, 'hookcmb': 0x0309, 'hookpalatalizedbelowcmb': 0x0321, 'hookretroflexbelowcmb': 0x0322, 'hoonsquare': 0x3342, 'horicoptic': 0x03E9, 'horizontalbar': 0x2015, 'horncmb': 0x031B, 'hotsprings': 0x2668, 'house': 0x2302, 'hparen': 0x24A3, 'hsuperior': 0x02B0, 'hturned': 0x0265, 'huhiragana': 0x3075, 'huiitosquare': 0x3333, 'hukatakana': 0x30D5, 'hukatakanahalfwidth': 0xFF8C, 'hungarumlaut': 0x02DD, 'hungarumlautcmb': 0x030B, 'hv': 0x0195, 'hyphen': 0x002D, 'hypheninferior': 0xF6E5, 'hyphenmonospace': 0xFF0D, 'hyphensmall': 0xFE63, 'hyphensuperior': 0xF6E6, 'hyphentwo': 0x2010, 'i': 0x0069, 'iacute': 0x00ED, 'iacyrillic': 0x044F, 'ibengali': 0x0987, 'ibopomofo': 0x3127, 'ibreve': 0x012D, 'icaron': 0x01D0, 'icircle': 0x24D8, 'icircumflex': 0x00EE, 'icyrillic': 0x0456, 'idblgrave': 0x0209, 'ideographearthcircle': 0x328F, 'ideographfirecircle': 0x328B, 'ideographicallianceparen': 0x323F, 'ideographiccallparen': 0x323A, 'ideographiccentrecircle': 0x32A5, 'ideographicclose': 0x3006, 'ideographiccomma': 0x3001, 'ideographiccommaleft': 0xFF64, 'ideographiccongratulationparen': 0x3237, 'ideographiccorrectcircle': 0x32A3, 'ideographicearthparen': 0x322F, 'ideographicenterpriseparen': 0x323D, 'ideographicexcellentcircle': 0x329D, 'ideographicfestivalparen': 0x3240, 'ideographicfinancialcircle': 0x3296, 'ideographicfinancialparen': 0x3236, 'ideographicfireparen': 0x322B, 'ideographichaveparen': 0x3232, 'ideographichighcircle': 0x32A4, 'ideographiciterationmark': 0x3005, 'ideographiclaborcircle': 0x3298, 'ideographiclaborparen': 0x3238, 'ideographicleftcircle': 0x32A7, 'ideographiclowcircle': 0x32A6, 'ideographicmedicinecircle': 0x32A9, 'ideographicmetalparen': 0x322E, 'ideographicmoonparen': 0x322A, 'ideographicnameparen': 0x3234, 'ideographicperiod': 0x3002, 'ideographicprintcircle': 0x329E, 'ideographicreachparen': 0x3243, 'ideographicrepresentparen': 0x3239, 'ideographicresourceparen': 0x323E, 'ideographicrightcircle': 0x32A8, 'ideographicsecretcircle': 0x3299, 'ideographicselfparen': 0x3242, 'ideographicsocietyparen': 0x3233, 'ideographicspace': 0x3000, 'ideographicspecialparen': 0x3235, 'ideographicstockparen': 0x3231, 'ideographicstudyparen': 0x323B, 'ideographicsunparen': 0x3230, 'ideographicsuperviseparen': 0x323C, 'ideographicwaterparen': 0x322C, 'ideographicwoodparen': 0x322D, 'ideographiczero': 0x3007, 'ideographmetalcircle': 0x328E, 'ideographmooncircle': 0x328A, 'ideographnamecircle': 0x3294, 'ideographsuncircle': 0x3290, 'ideographwatercircle': 0x328C, 'ideographwoodcircle': 0x328D, 'ideva': 0x0907, 'idieresis': 0x00EF, 'idieresisacute': 0x1E2F, 'idieresiscyrillic': 0x04E5, 'idotbelow': 0x1ECB, 'iebrevecyrillic': 0x04D7, 'iecyrillic': 0x0435, 'ieungacirclekorean': 0x3275, 'ieungaparenkorean': 0x3215, 'ieungcirclekorean': 0x3267, 'ieungkorean': 0x3147, 'ieungparenkorean': 0x3207, 'igrave': 0x00EC, 'igujarati': 0x0A87, 'igurmukhi': 0x0A07, 'ihiragana': 0x3044, 'ihookabove': 0x1EC9, 'iibengali': 0x0988, 'iicyrillic': 0x0438, 'iideva': 0x0908, 'iigujarati': 0x0A88, 'iigurmukhi': 0x0A08, 'iimatragurmukhi': 0x0A40, 'iinvertedbreve': 0x020B, 'iishortcyrillic': 0x0439, 'iivowelsignbengali': 0x09C0, 'iivowelsigndeva': 0x0940, 'iivowelsigngujarati': 0x0AC0, 'ij': 0x0133, 'ikatakana': 0x30A4, 'ikatakanahalfwidth': 0xFF72, 'ikorean': 0x3163, 'ilde': 0x02DC, 'iluyhebrew': 0x05AC, 'imacron': 0x012B, 'imacroncyrillic': 0x04E3, 'imageorapproximatelyequal': 0x2253, 'imatragurmukhi': 0x0A3F, 'imonospace': 0xFF49, 'increment': 0x2206, 'infinity': 0x221E, 'iniarmenian': 0x056B, 'integral': 0x222B, 'integralbottom': 0x2321, 'integralbt': 0x2321, 'integralex': 0xF8F5, 'integraltop': 0x2320, 'integraltp': 0x2320, 'intersection': 0x2229, 'intisquare': 0x3305, 'invbullet': 0x25D8, 'invcircle': 0x25D9, 'invsmileface': 0x263B, 'iocyrillic': 0x0451, 'iogonek': 0x012F, 'iota': 0x03B9, 'iotadieresis': 0x03CA, 'iotadieresistonos': 0x0390, 'iotalatin': 0x0269, 'iotatonos': 0x03AF, 'iparen': 0x24A4, 'irigurmukhi': 0x0A72, 'ismallhiragana': 0x3043, 'ismallkatakana': 0x30A3, 'ismallkatakanahalfwidth': 0xFF68, 'issharbengali': 0x09FA, 'istroke': 0x0268, 'isuperior': 0xF6ED, 'iterationhiragana': 0x309D, 'iterationkatakana': 0x30FD, 'itilde': 0x0129, 'itildebelow': 0x1E2D, 'iubopomofo': 0x3129, 'iucyrillic': 0x044E, 'ivowelsignbengali': 0x09BF, 'ivowelsigndeva': 0x093F, 'ivowelsigngujarati': 0x0ABF, 'izhitsacyrillic': 0x0475, 'izhitsadblgravecyrillic': 0x0477, 'j': 0x006A, 'jaarmenian': 0x0571, 'jabengali': 0x099C, 'jadeva': 0x091C, 'jagujarati': 0x0A9C, 'jagurmukhi': 0x0A1C, 'jbopomofo': 0x3110, 'jcaron': 0x01F0, 'jcircle': 0x24D9, 'jcircumflex': 0x0135, 'jcrossedtail': 0x029D, 'jdotlessstroke': 0x025F, 'jecyrillic': 0x0458, 'jeemarabic': 0x062C, 'jeemfinalarabic': 0xFE9E, 'jeeminitialarabic': 0xFE9F, 'jeemmedialarabic': 0xFEA0, 'jeharabic': 0x0698, 'jehfinalarabic': 0xFB8B, 'jhabengali': 0x099D, 'jhadeva': 0x091D, 'jhagujarati': 0x0A9D, 'jhagurmukhi': 0x0A1D, 'jheharmenian': 0x057B, 'jis': 0x3004, 'jmonospace': 0xFF4A, 'jparen': 0x24A5, 'jsuperior': 0x02B2, 'k': 0x006B, 'kabashkircyrillic': 0x04A1, 'kabengali': 0x0995, 'kacute': 0x1E31, 'kacyrillic': 0x043A, 'kadescendercyrillic': 0x049B, 'kadeva': 0x0915, 'kaf': 0x05DB, 'kafarabic': 0x0643, 'kafdagesh': 0xFB3B, 'kafdageshhebrew': 0xFB3B, 'kaffinalarabic': 0xFEDA, 'kafhebrew': 0x05DB, 'kafinitialarabic': 0xFEDB, 'kafmedialarabic': 0xFEDC, 'kafrafehebrew': 0xFB4D, 'kagujarati': 0x0A95, 'kagurmukhi': 0x0A15, 'kahiragana': 0x304B, 'kahookcyrillic': 0x04C4, 'kakatakana': 0x30AB, 'kakatakanahalfwidth': 0xFF76, 'kappa': 0x03BA, 'kappasymbolgreek': 0x03F0, 'kapyeounmieumkorean': 0x3171, 'kapyeounphieuphkorean': 0x3184, 'kapyeounpieupkorean': 0x3178, 'kapyeounssangpieupkorean': 0x3179, 'karoriisquare': 0x330D, 'kashidaautoarabic': 0x0640, 'kashidaautonosidebearingarabic': 0x0640, 'kasmallkatakana': 0x30F5, 'kasquare': 0x3384, 'kasraarabic': 0x0650, 'kasratanarabic': 0x064D, 'kastrokecyrillic': 0x049F, 'katahiraprolongmarkhalfwidth': 0xFF70, 'kaverticalstrokecyrillic': 0x049D, 'kbopomofo': 0x310E, 'kcalsquare': 0x3389, 'kcaron': 0x01E9, 'kcedilla': 0x0137, 'kcircle': 0x24DA, 'kcommaaccent': 0x0137, 'kdotbelow': 0x1E33, 'keharmenian': 0x0584, 'kehiragana': 0x3051, 'kekatakana': 0x30B1, 'kekatakanahalfwidth': 0xFF79, 'kenarmenian': 0x056F, 'kesmallkatakana': 0x30F6, 'kgreenlandic': 0x0138, 'khabengali': 0x0996, 'khacyrillic': 0x0445, 'khadeva': 0x0916, 'khagujarati': 0x0A96, 'khagurmukhi': 0x0A16, 'khaharabic': 0x062E, 'khahfinalarabic': 0xFEA6, 'khahinitialarabic': 0xFEA7, 'khahmedialarabic': 0xFEA8, 'kheicoptic': 0x03E7, 'khhadeva': 0x0959, 'khhagurmukhi': 0x0A59, 'khieukhacirclekorean': 0x3278, 'khieukhaparenkorean': 0x3218, 'khieukhcirclekorean': 0x326A, 'khieukhkorean': 0x314B, 'khieukhparenkorean': 0x320A, 'khokhaithai': 0x0E02, 'khokhonthai': 0x0E05, 'khokhuatthai': 0x0E03, 'khokhwaithai': 0x0E04, 'khomutthai': 0x0E5B, 'khook': 0x0199, 'khorakhangthai': 0x0E06, 'khzsquare': 0x3391, 'kihiragana': 0x304D, 'kikatakana': 0x30AD, 'kikatakanahalfwidth': 0xFF77, 'kiroguramusquare': 0x3315, 'kiromeetorusquare': 0x3316, 'kirosquare': 0x3314, 'kiyeokacirclekorean': 0x326E, 'kiyeokaparenkorean': 0x320E, 'kiyeokcirclekorean': 0x3260, 'kiyeokkorean': 0x3131, 'kiyeokparenkorean': 0x3200, 'kiyeoksioskorean': 0x3133, 'kjecyrillic': 0x045C, 'klinebelow': 0x1E35, 'klsquare': 0x3398, 'kmcubedsquare': 0x33A6, 'kmonospace': 0xFF4B, 'kmsquaredsquare': 0x33A2, 'kohiragana': 0x3053, 'kohmsquare': 0x33C0, 'kokaithai': 0x0E01, 'kokatakana': 0x30B3, 'kokatakanahalfwidth': 0xFF7A, 'kooposquare': 0x331E, 'koppacyrillic': 0x0481, 'koreanstandardsymbol': 0x327F, 'koroniscmb': 0x0343, 'kparen': 0x24A6, 'kpasquare': 0x33AA, 'ksicyrillic': 0x046F, 'ktsquare': 0x33CF, 'kturned': 0x029E, 'kuhiragana': 0x304F, 'kukatakana': 0x30AF, 'kukatakanahalfwidth': 0xFF78, 'kvsquare': 0x33B8, 'kwsquare': 0x33BE, 'l': 0x006C, 'labengali': 0x09B2, 'lacute': 0x013A, 'ladeva': 0x0932, 'lagujarati': 0x0AB2, 'lagurmukhi': 0x0A32, 'lakkhangyaothai': 0x0E45, 'lamaleffinalarabic': 0xFEFC, 'lamalefhamzaabovefinalarabic': 0xFEF8, 'lamalefhamzaaboveisolatedarabic': 0xFEF7, 'lamalefhamzabelowfinalarabic': 0xFEFA, 'lamalefhamzabelowisolatedarabic': 0xFEF9, 'lamalefisolatedarabic': 0xFEFB, 'lamalefmaddaabovefinalarabic': 0xFEF6, 'lamalefmaddaaboveisolatedarabic': 0xFEF5, 'lamarabic': 0x0644, 'lambda': 0x03BB, 'lambdastroke': 0x019B, 'lamed': 0x05DC, 'lameddagesh': 0xFB3C, 'lameddageshhebrew': 0xFB3C, 'lamedhebrew': 0x05DC, 'lamfinalarabic': 0xFEDE, 'lamhahinitialarabic': 0xFCCA, 'laminitialarabic': 0xFEDF, 'lamjeeminitialarabic': 0xFCC9, 'lamkhahinitialarabic': 0xFCCB, 'lamlamhehisolatedarabic': 0xFDF2, 'lammedialarabic': 0xFEE0, 'lammeemhahinitialarabic': 0xFD88, 'lammeeminitialarabic': 0xFCCC, 'largecircle': 0x25EF, 'lbar': 0x019A, 'lbelt': 0x026C, 'lbopomofo': 0x310C, 'lcaron': 0x013E, 'lcedilla': 0x013C, 'lcircle': 0x24DB, 'lcircumflexbelow': 0x1E3D, 'lcommaaccent': 0x013C, 'ldot': 0x0140, 'ldotaccent': 0x0140, 'ldotbelow': 0x1E37, 'ldotbelowmacron': 0x1E39, 'leftangleabovecmb': 0x031A, 'lefttackbelowcmb': 0x0318, 'less': 0x003C, 'lessequal': 0x2264, 'lessequalorgreater': 0x22DA, 'lessmonospace': 0xFF1C, 'lessorequivalent': 0x2272, 'lessorgreater': 0x2276, 'lessoverequal': 0x2266, 'lesssmall': 0xFE64, 'lezh': 0x026E, 'lfblock': 0x258C, 'lhookretroflex': 0x026D, 'lira': 0x20A4, 'liwnarmenian': 0x056C, 'lj': 0x01C9, 'ljecyrillic': 0x0459, 'll': 0xF6C0, 'lladeva': 0x0933, 'llagujarati': 0x0AB3, 'llinebelow': 0x1E3B, 'llladeva': 0x0934, 'llvocalicbengali': 0x09E1, 'llvocalicdeva': 0x0961, 'llvocalicvowelsignbengali': 0x09E3, 'llvocalicvowelsigndeva': 0x0963, 'lmiddletilde': 0x026B, 'lmonospace': 0xFF4C, 'lmsquare': 0x33D0, 'lochulathai': 0x0E2C, 'logicaland': 0x2227, 'logicalnot': 0x00AC, 'logicalnotreversed': 0x2310, 'logicalor': 0x2228, 'lolingthai': 0x0E25, 'longs': 0x017F, 'lowlinecenterline': 0xFE4E, 'lowlinecmb': 0x0332, 'lowlinedashed': 0xFE4D, 'lozenge': 0x25CA, 'lparen': 0x24A7, 'lslash': 0x0142, 'lsquare': 0x2113, 'lsuperior': 0xF6EE, 'ltshade': 0x2591, 'luthai': 0x0E26, 'lvocalicbengali': 0x098C, 'lvocalicdeva': 0x090C, 'lvocalicvowelsignbengali': 0x09E2, 'lvocalicvowelsigndeva': 0x0962, 'lxsquare': 0x33D3, 'm': 0x006D, 'mabengali': 0x09AE, 'macron': 0x00AF, 'macronbelowcmb': 0x0331, 'macroncmb': 0x0304, 'macronlowmod': 0x02CD, 'macronmonospace': 0xFFE3, 'macute': 0x1E3F, 'madeva': 0x092E, 'magujarati': 0x0AAE, 'magurmukhi': 0x0A2E, 'mahapakhhebrew': 0x05A4, 'mahapakhlefthebrew': 0x05A4, 'mahiragana': 0x307E, 'maichattawalowleftthai': 0xF895, 'maichattawalowrightthai': 0xF894, 'maichattawathai': 0x0E4B, 'maichattawaupperleftthai': 0xF893, 'maieklowleftthai': 0xF88C, 'maieklowrightthai': 0xF88B, 'maiekthai': 0x0E48, 'maiekupperleftthai': 0xF88A, 'maihanakatleftthai': 0xF884, 'maihanakatthai': 0x0E31, 'maitaikhuleftthai': 0xF889, 'maitaikhuthai': 0x0E47, 'maitholowleftthai': 0xF88F, 'maitholowrightthai': 0xF88E, 'maithothai': 0x0E49, 'maithoupperleftthai': 0xF88D, 'maitrilowleftthai': 0xF892, 'maitrilowrightthai': 0xF891, 'maitrithai': 0x0E4A, 'maitriupperleftthai': 0xF890, 'maiyamokthai': 0x0E46, 'makatakana': 0x30DE, 'makatakanahalfwidth': 0xFF8F, 'male': 0x2642, 'mansyonsquare': 0x3347, 'maqafhebrew': 0x05BE, 'mars': 0x2642, 'masoracirclehebrew': 0x05AF, 'masquare': 0x3383, 'mbopomofo': 0x3107, 'mbsquare': 0x33D4, 'mcircle': 0x24DC, 'mcubedsquare': 0x33A5, 'mdotaccent': 0x1E41, 'mdotbelow': 0x1E43, 'meemarabic': 0x0645, 'meemfinalarabic': 0xFEE2, 'meeminitialarabic': 0xFEE3, 'meemmedialarabic': 0xFEE4, 'meemmeeminitialarabic': 0xFCD1, 'meemmeemisolatedarabic': 0xFC48, 'meetorusquare': 0x334D, 'mehiragana': 0x3081, 'meizierasquare': 0x337E, 'mekatakana': 0x30E1, 'mekatakanahalfwidth': 0xFF92, 'mem': 0x05DE, 'memdagesh': 0xFB3E, 'memdageshhebrew': 0xFB3E, 'memhebrew': 0x05DE, 'menarmenian': 0x0574, 'merkhahebrew': 0x05A5, 'merkhakefulahebrew': 0x05A6, 'merkhakefulalefthebrew': 0x05A6, 'merkhalefthebrew': 0x05A5, 'mhook': 0x0271, 'mhzsquare': 0x3392, 'middledotkatakanahalfwidth': 0xFF65, 'middot': 0x00B7, 'mieumacirclekorean': 0x3272, 'mieumaparenkorean': 0x3212, 'mieumcirclekorean': 0x3264, 'mieumkorean': 0x3141, 'mieumpansioskorean': 0x3170, 'mieumparenkorean': 0x3204, 'mieumpieupkorean': 0x316E, 'mieumsioskorean': 0x316F, 'mihiragana': 0x307F, 'mikatakana': 0x30DF, 'mikatakanahalfwidth': 0xFF90, 'minus': 0x2212, 'minusbelowcmb': 0x0320, 'minuscircle': 0x2296, 'minusmod': 0x02D7, 'minusplus': 0x2213, 'minute': 0x2032, 'miribaarusquare': 0x334A, 'mirisquare': 0x3349, 'mlonglegturned': 0x0270, 'mlsquare': 0x3396, 'mmcubedsquare': 0x33A3, 'mmonospace': 0xFF4D, 'mmsquaredsquare': 0x339F, 'mohiragana': 0x3082, 'mohmsquare': 0x33C1, 'mokatakana': 0x30E2, 'mokatakanahalfwidth': 0xFF93, 'molsquare': 0x33D6, 'momathai': 0x0E21, 'moverssquare': 0x33A7, 'moverssquaredsquare': 0x33A8, 'mparen': 0x24A8, 'mpasquare': 0x33AB, 'mssquare': 0x33B3, 'msuperior': 0xF6EF, 'mturned': 0x026F, 'mu': 0x00B5, 'mu1': 0x00B5, 'muasquare': 0x3382, 'muchgreater': 0x226B, 'muchless': 0x226A, 'mufsquare': 0x338C, 'mugreek': 0x03BC, 'mugsquare': 0x338D, 'muhiragana': 0x3080, 'mukatakana': 0x30E0, 'mukatakanahalfwidth': 0xFF91, 'mulsquare': 0x3395, 'multiply': 0x00D7, 'mumsquare': 0x339B, 'munahhebrew': 0x05A3, 'munahlefthebrew': 0x05A3, 'musicalnote': 0x266A, 'musicalnotedbl': 0x266B, 'musicflatsign': 0x266D, 'musicsharpsign': 0x266F, 'mussquare': 0x33B2, 'muvsquare': 0x33B6, 'muwsquare': 0x33BC, 'mvmegasquare': 0x33B9, 'mvsquare': 0x33B7, 'mwmegasquare': 0x33BF, 'mwsquare': 0x33BD, 'n': 0x006E, 'nabengali': 0x09A8, 'nabla': 0x2207, 'nacute': 0x0144, 'nadeva': 0x0928, 'nagujarati': 0x0AA8, 'nagurmukhi': 0x0A28, 'nahiragana': 0x306A, 'nakatakana': 0x30CA, 'nakatakanahalfwidth': 0xFF85, 'napostrophe': 0x0149, 'nasquare': 0x3381, 'nbopomofo': 0x310B, 'nbspace': 0x00A0, 'ncaron': 0x0148, 'ncedilla': 0x0146, 'ncircle': 0x24DD, 'ncircumflexbelow': 0x1E4B, 'ncommaaccent': 0x0146, 'ndotaccent': 0x1E45, 'ndotbelow': 0x1E47, 'nehiragana': 0x306D, 'nekatakana': 0x30CD, 'nekatakanahalfwidth': 0xFF88, 'newsheqelsign': 0x20AA, 'nfsquare': 0x338B, 'ngabengali': 0x0999, 'ngadeva': 0x0919, 'ngagujarati': 0x0A99, 'ngagurmukhi': 0x0A19, 'ngonguthai': 0x0E07, 'nhiragana': 0x3093, 'nhookleft': 0x0272, 'nhookretroflex': 0x0273, 'nieunacirclekorean': 0x326F, 'nieunaparenkorean': 0x320F, 'nieuncieuckorean': 0x3135, 'nieuncirclekorean': 0x3261, 'nieunhieuhkorean': 0x3136, 'nieunkorean': 0x3134, 'nieunpansioskorean': 0x3168, 'nieunparenkorean': 0x3201, 'nieunsioskorean': 0x3167, 'nieuntikeutkorean': 0x3166, 'nihiragana': 0x306B, 'nikatakana': 0x30CB, 'nikatakanahalfwidth': 0xFF86, 'nikhahitleftthai': 0xF899, 'nikhahitthai': 0x0E4D, 'nine': 0x0039, 'ninearabic': 0x0669, 'ninebengali': 0x09EF, 'ninecircle': 0x2468, 'ninecircleinversesansserif': 0x2792, 'ninedeva': 0x096F, 'ninegujarati': 0x0AEF, 'ninegurmukhi': 0x0A6F, 'ninehackarabic': 0x0669, 'ninehangzhou': 0x3029, 'nineideographicparen': 0x3228, 'nineinferior': 0x2089, 'ninemonospace': 0xFF19, 'nineoldstyle': 0xF739, 'nineparen': 0x247C, 'nineperiod': 0x2490, 'ninepersian': 0x06F9, 'nineroman': 0x2178, 'ninesuperior': 0x2079, 'nineteencircle': 0x2472, 'nineteenparen': 0x2486, 'nineteenperiod': 0x249A, 'ninethai': 0x0E59, 'nj': 0x01CC, 'njecyrillic': 0x045A, 'nkatakana': 0x30F3, 'nkatakanahalfwidth': 0xFF9D, 'nlegrightlong': 0x019E, 'nlinebelow': 0x1E49, 'nmonospace': 0xFF4E, 'nmsquare': 0x339A, 'nnabengali': 0x09A3, 'nnadeva': 0x0923, 'nnagujarati': 0x0AA3, 'nnagurmukhi': 0x0A23, 'nnnadeva': 0x0929, 'nohiragana': 0x306E, 'nokatakana': 0x30CE, 'nokatakanahalfwidth': 0xFF89, 'nonbreakingspace': 0x00A0, 'nonenthai': 0x0E13, 'nonuthai': 0x0E19, 'noonarabic': 0x0646, 'noonfinalarabic': 0xFEE6, 'noonghunnaarabic': 0x06BA, 'noonghunnafinalarabic': 0xFB9F, 'nooninitialarabic': 0xFEE7, 'noonjeeminitialarabic': 0xFCD2, 'noonjeemisolatedarabic': 0xFC4B, 'noonmedialarabic': 0xFEE8, 'noonmeeminitialarabic': 0xFCD5, 'noonmeemisolatedarabic': 0xFC4E, 'noonnoonfinalarabic': 0xFC8D, 'notcontains': 0x220C, 'notelement': 0x2209, 'notelementof': 0x2209, 'notequal': 0x2260, 'notgreater': 0x226F, 'notgreaternorequal': 0x2271, 'notgreaternorless': 0x2279, 'notidentical': 0x2262, 'notless': 0x226E, 'notlessnorequal': 0x2270, 'notparallel': 0x2226, 'notprecedes': 0x2280, 'notsubset': 0x2284, 'notsucceeds': 0x2281, 'notsuperset': 0x2285, 'nowarmenian': 0x0576, 'nparen': 0x24A9, 'nssquare': 0x33B1, 'nsuperior': 0x207F, 'ntilde': 0x00F1, 'nu': 0x03BD, 'nuhiragana': 0x306C, 'nukatakana': 0x30CC, 'nukatakanahalfwidth': 0xFF87, 'nuktabengali': 0x09BC, 'nuktadeva': 0x093C, 'nuktagujarati': 0x0ABC, 'nuktagurmukhi': 0x0A3C, 'numbersign': 0x0023, 'numbersignmonospace': 0xFF03, 'numbersignsmall': 0xFE5F, 'numeralsigngreek': 0x0374, 'numeralsignlowergreek': 0x0375, 'numero': 0x2116, 'nun': 0x05E0, 'nundagesh': 0xFB40, 'nundageshhebrew': 0xFB40, 'nunhebrew': 0x05E0, 'nvsquare': 0x33B5, 'nwsquare': 0x33BB, 'nyabengali': 0x099E, 'nyadeva': 0x091E, 'nyagujarati': 0x0A9E, 'nyagurmukhi': 0x0A1E, 'o': 0x006F, 'oacute': 0x00F3, 'oangthai': 0x0E2D, 'obarred': 0x0275, 'obarredcyrillic': 0x04E9, 'obarreddieresiscyrillic': 0x04EB, 'obengali': 0x0993, 'obopomofo': 0x311B, 'obreve': 0x014F, 'ocandradeva': 0x0911, 'ocandragujarati': 0x0A91, 'ocandravowelsigndeva': 0x0949, 'ocandravowelsigngujarati': 0x0AC9, 'ocaron': 0x01D2, 'ocircle': 0x24DE, 'ocircumflex': 0x00F4, 'ocircumflexacute': 0x1ED1, 'ocircumflexdotbelow': 0x1ED9, 'ocircumflexgrave': 0x1ED3, 'ocircumflexhookabove': 0x1ED5, 'ocircumflextilde': 0x1ED7, 'ocyrillic': 0x043E, 'odblacute': 0x0151, 'odblgrave': 0x020D, 'odeva': 0x0913, 'odieresis': 0x00F6, 'odieresiscyrillic': 0x04E7, 'odotbelow': 0x1ECD, 'oe': 0x0153, 'oekorean': 0x315A, 'ogonek': 0x02DB, 'ogonekcmb': 0x0328, 'ograve': 0x00F2, 'ogujarati': 0x0A93, 'oharmenian': 0x0585, 'ohiragana': 0x304A, 'ohookabove': 0x1ECF, 'ohorn': 0x01A1, 'ohornacute': 0x1EDB, 'ohorndotbelow': 0x1EE3, 'ohorngrave': 0x1EDD, 'ohornhookabove': 0x1EDF, 'ohorntilde': 0x1EE1, 'ohungarumlaut': 0x0151, 'oi': 0x01A3, 'oinvertedbreve': 0x020F, 'okatakana': 0x30AA, 'okatakanahalfwidth': 0xFF75, 'okorean': 0x3157, 'olehebrew': 0x05AB, 'omacron': 0x014D, 'omacronacute': 0x1E53, 'omacrongrave': 0x1E51, 'omdeva': 0x0950, 'omega': 0x03C9, 'omega1': 0x03D6, 'omegacyrillic': 0x0461, 'omegalatinclosed': 0x0277, 'omegaroundcyrillic': 0x047B, 'omegatitlocyrillic': 0x047D, 'omegatonos': 0x03CE, 'omgujarati': 0x0AD0, 'omicron': 0x03BF, 'omicrontonos': 0x03CC, 'omonospace': 0xFF4F, 'one': 0x0031, 'onearabic': 0x0661, 'onebengali': 0x09E7, 'onecircle': 0x2460, 'onecircleinversesansserif': 0x278A, 'onedeva': 0x0967, 'onedotenleader': 0x2024, 'oneeighth': 0x215B, 'onefitted': 0xF6DC, 'onegujarati': 0x0AE7, 'onegurmukhi': 0x0A67, 'onehackarabic': 0x0661, 'onehalf': 0x00BD, 'onehangzhou': 0x3021, 'oneideographicparen': 0x3220, 'oneinferior': 0x2081, 'onemonospace': 0xFF11, 'onenumeratorbengali': 0x09F4, 'oneoldstyle': 0xF731, 'oneparen': 0x2474, 'oneperiod': 0x2488, 'onepersian': 0x06F1, 'onequarter': 0x00BC, 'oneroman': 0x2170, 'onesuperior': 0x00B9, 'onethai': 0x0E51, 'onethird': 0x2153, 'oogonek': 0x01EB, 'oogonekmacron': 0x01ED, 'oogurmukhi': 0x0A13, 'oomatragurmukhi': 0x0A4B, 'oopen': 0x0254, 'oparen': 0x24AA, 'openbullet': 0x25E6, 'option': 0x2325, 'ordfeminine': 0x00AA, 'ordmasculine': 0x00BA, 'orthogonal': 0x221F, 'oshortdeva': 0x0912, 'oshortvowelsigndeva': 0x094A, 'oslash': 0x00F8, 'oslashacute': 0x01FF, 'osmallhiragana': 0x3049, 'osmallkatakana': 0x30A9, 'osmallkatakanahalfwidth': 0xFF6B, 'ostrokeacute': 0x01FF, 'osuperior': 0xF6F0, 'otcyrillic': 0x047F, 'otilde': 0x00F5, 'otildeacute': 0x1E4D, 'otildedieresis': 0x1E4F, 'oubopomofo': 0x3121, 'overline': 0x203E, 'overlinecenterline': 0xFE4A, 'overlinecmb': 0x0305, 'overlinedashed': 0xFE49, 'overlinedblwavy': 0xFE4C, 'overlinewavy': 0xFE4B, 'overscore': 0x00AF, 'ovowelsignbengali': 0x09CB, 'ovowelsigndeva': 0x094B, 'ovowelsigngujarati': 0x0ACB, 'p': 0x0070, 'paampssquare': 0x3380, 'paasentosquare': 0x332B, 'pabengali': 0x09AA, 'pacute': 0x1E55, 'padeva': 0x092A, 'pagedown': 0x21DF, 'pageup': 0x21DE, 'pagujarati': 0x0AAA, 'pagurmukhi': 0x0A2A, 'pahiragana': 0x3071, 'paiyannoithai': 0x0E2F, 'pakatakana': 0x30D1, 'palatalizationcyrilliccmb': 0x0484, 'palochkacyrillic': 0x04C0, 'pansioskorean': 0x317F, 'paragraph': 0x00B6, 'parallel': 0x2225, 'parenleft': 0x0028, 'parenleftaltonearabic': 0xFD3E, 'parenleftbt': 0xF8ED, 'parenleftex': 0xF8EC, 'parenleftinferior': 0x208D, 'parenleftmonospace': 0xFF08, 'parenleftsmall': 0xFE59, 'parenleftsuperior': 0x207D, 'parenlefttp': 0xF8EB, 'parenleftvertical': 0xFE35, 'parenright': 0x0029, 'parenrightaltonearabic': 0xFD3F, 'parenrightbt': 0xF8F8, 'parenrightex': 0xF8F7, 'parenrightinferior': 0x208E, 'parenrightmonospace': 0xFF09, 'parenrightsmall': 0xFE5A, 'parenrightsuperior': 0x207E, 'parenrighttp': 0xF8F6, 'parenrightvertical': 0xFE36, 'partialdiff': 0x2202, 'paseqhebrew': 0x05C0, 'pashtahebrew': 0x0599, 'pasquare': 0x33A9, 'patah': 0x05B7, 'patah11': 0x05B7, 'patah1d': 0x05B7, 'patah2a': 0x05B7, 'patahhebrew': 0x05B7, 'patahnarrowhebrew': 0x05B7, 'patahquarterhebrew': 0x05B7, 'patahwidehebrew': 0x05B7, 'pazerhebrew': 0x05A1, 'pbopomofo': 0x3106, 'pcircle': 0x24DF, 'pdotaccent': 0x1E57, 'pe': 0x05E4, 'pecyrillic': 0x043F, 'pedagesh': 0xFB44, 'pedageshhebrew': 0xFB44, 'peezisquare': 0x333B, 'pefinaldageshhebrew': 0xFB43, 'peharabic': 0x067E, 'peharmenian': 0x057A, 'pehebrew': 0x05E4, 'pehfinalarabic': 0xFB57, 'pehinitialarabic': 0xFB58, 'pehiragana': 0x307A, 'pehmedialarabic': 0xFB59, 'pekatakana': 0x30DA, 'pemiddlehookcyrillic': 0x04A7, 'perafehebrew': 0xFB4E, 'percent': 0x0025, 'percentarabic': 0x066A, 'percentmonospace': 0xFF05, 'percentsmall': 0xFE6A, 'period': 0x002E, 'periodarmenian': 0x0589, 'periodcentered': 0x00B7, 'periodhalfwidth': 0xFF61, 'periodinferior': 0xF6E7, 'periodmonospace': 0xFF0E, 'periodsmall': 0xFE52, 'periodsuperior': 0xF6E8, 'perispomenigreekcmb': 0x0342, 'perpendicular': 0x22A5, 'perthousand': 0x2030, 'peseta': 0x20A7, 'pfsquare': 0x338A, 'phabengali': 0x09AB, 'phadeva': 0x092B, 'phagujarati': 0x0AAB, 'phagurmukhi': 0x0A2B, 'phi': 0x03C6, 'phi1': 0x03D5, 'phieuphacirclekorean': 0x327A, 'phieuphaparenkorean': 0x321A, 'phieuphcirclekorean': 0x326C, 'phieuphkorean': 0x314D, 'phieuphparenkorean': 0x320C, 'philatin': 0x0278, 'phinthuthai': 0x0E3A, 'phisymbolgreek': 0x03D5, 'phook': 0x01A5, 'phophanthai': 0x0E1E, 'phophungthai': 0x0E1C, 'phosamphaothai': 0x0E20, 'pi': 0x03C0, 'pieupacirclekorean': 0x3273, 'pieupaparenkorean': 0x3213, 'pieupcieuckorean': 0x3176, 'pieupcirclekorean': 0x3265, 'pieupkiyeokkorean': 0x3172, 'pieupkorean': 0x3142, 'pieupparenkorean': 0x3205, 'pieupsioskiyeokkorean': 0x3174, 'pieupsioskorean': 0x3144, 'pieupsiostikeutkorean': 0x3175, 'pieupthieuthkorean': 0x3177, 'pieuptikeutkorean': 0x3173, 'pihiragana': 0x3074, 'pikatakana': 0x30D4, 'pisymbolgreek': 0x03D6, 'piwrarmenian': 0x0583, 'plus': 0x002B, 'plusbelowcmb': 0x031F, 'pluscircle': 0x2295, 'plusminus': 0x00B1, 'plusmod': 0x02D6, 'plusmonospace': 0xFF0B, 'plussmall': 0xFE62, 'plussuperior': 0x207A, 'pmonospace': 0xFF50, 'pmsquare': 0x33D8, 'pohiragana': 0x307D, 'pointingindexdownwhite': 0x261F, 'pointingindexleftwhite': 0x261C, 'pointingindexrightwhite': 0x261E, 'pointingindexupwhite': 0x261D, 'pokatakana': 0x30DD, 'poplathai': 0x0E1B, 'postalmark': 0x3012, 'postalmarkface': 0x3020, 'pparen': 0x24AB, 'precedes': 0x227A, 'prescription': 0x211E, 'primemod': 0x02B9, 'primereversed': 0x2035, 'product': 0x220F, 'projective': 0x2305, 'prolongedkana': 0x30FC, 'propellor': 0x2318, 'propersubset': 0x2282, 'propersuperset': 0x2283, 'proportion': 0x2237, 'proportional': 0x221D, 'psi': 0x03C8, 'psicyrillic': 0x0471, 'psilipneumatacyrilliccmb': 0x0486, 'pssquare': 0x33B0, 'puhiragana': 0x3077, 'pukatakana': 0x30D7, 'pvsquare': 0x33B4, 'pwsquare': 0x33BA, 'q': 0x0071, 'qadeva': 0x0958, 'qadmahebrew': 0x05A8, 'qafarabic': 0x0642, 'qaffinalarabic': 0xFED6, 'qafinitialarabic': 0xFED7, 'qafmedialarabic': 0xFED8, 'qamats': 0x05B8, 'qamats10': 0x05B8, 'qamats1a': 0x05B8, 'qamats1c': 0x05B8, 'qamats27': 0x05B8, 'qamats29': 0x05B8, 'qamats33': 0x05B8, 'qamatsde': 0x05B8, 'qamatshebrew': 0x05B8, 'qamatsnarrowhebrew': 0x05B8, 'qamatsqatanhebrew': 0x05B8, 'qamatsqatannarrowhebrew': 0x05B8, 'qamatsqatanquarterhebrew': 0x05B8, 'qamatsqatanwidehebrew': 0x05B8, 'qamatsquarterhebrew': 0x05B8, 'qamatswidehebrew': 0x05B8, 'qarneyparahebrew': 0x059F, 'qbopomofo': 0x3111, 'qcircle': 0x24E0, 'qhook': 0x02A0, 'qmonospace': 0xFF51, 'qof': 0x05E7, 'qofdagesh': 0xFB47, 'qofdageshhebrew': 0xFB47, 'qofhebrew': 0x05E7, 'qparen': 0x24AC, 'quarternote': 0x2669, 'qubuts': 0x05BB, 'qubuts18': 0x05BB, 'qubuts25': 0x05BB, 'qubuts31': 0x05BB, 'qubutshebrew': 0x05BB, 'qubutsnarrowhebrew': 0x05BB, 'qubutsquarterhebrew': 0x05BB, 'qubutswidehebrew': 0x05BB, 'question': 0x003F, 'questionarabic': 0x061F, 'questionarmenian': 0x055E, 'questiondown': 0x00BF, 'questiondownsmall': 0xF7BF, 'questiongreek': 0x037E, 'questionmonospace': 0xFF1F, 'questionsmall': 0xF73F, 'quotedbl': 0x0022, 'quotedblbase': 0x201E, 'quotedblleft': 0x201C, 'quotedblmonospace': 0xFF02, 'quotedblprime': 0x301E, 'quotedblprimereversed': 0x301D, 'quotedblright': 0x201D, 'quoteleft': 0x2018, 'quoteleftreversed': 0x201B, 'quotereversed': 0x201B, 'quoteright': 0x2019, 'quoterightn': 0x0149, 'quotesinglbase': 0x201A, 'quotesingle': 0x0027, 'quotesinglemonospace': 0xFF07, 'r': 0x0072, 'raarmenian': 0x057C, 'rabengali': 0x09B0, 'racute': 0x0155, 'radeva': 0x0930, 'radical': 0x221A, 'radicalex': 0xF8E5, 'radoverssquare': 0x33AE, 'radoverssquaredsquare': 0x33AF, 'radsquare': 0x33AD, 'rafe': 0x05BF, 'rafehebrew': 0x05BF, 'ragujarati': 0x0AB0, 'ragurmukhi': 0x0A30, 'rahiragana': 0x3089, 'rakatakana': 0x30E9, 'rakatakanahalfwidth': 0xFF97, 'ralowerdiagonalbengali': 0x09F1, 'ramiddlediagonalbengali': 0x09F0, 'ramshorn': 0x0264, 'ratio': 0x2236, 'rbopomofo': 0x3116, 'rcaron': 0x0159, 'rcedilla': 0x0157, 'rcircle': 0x24E1, 'rcommaaccent': 0x0157, 'rdblgrave': 0x0211, 'rdotaccent': 0x1E59, 'rdotbelow': 0x1E5B, 'rdotbelowmacron': 0x1E5D, 'referencemark': 0x203B, 'reflexsubset': 0x2286, 'reflexsuperset': 0x2287, 'registered': 0x00AE, 'registersans': 0xF8E8, 'registerserif': 0xF6DA, 'reharabic': 0x0631, 'reharmenian': 0x0580, 'rehfinalarabic': 0xFEAE, 'rehiragana': 0x308C, 'rekatakana': 0x30EC, 'rekatakanahalfwidth': 0xFF9A, 'resh': 0x05E8, 'reshdageshhebrew': 0xFB48, 'reshhebrew': 0x05E8, 'reversedtilde': 0x223D, 'reviahebrew': 0x0597, 'reviamugrashhebrew': 0x0597, 'revlogicalnot': 0x2310, 'rfishhook': 0x027E, 'rfishhookreversed': 0x027F, 'rhabengali': 0x09DD, 'rhadeva': 0x095D, 'rho': 0x03C1, 'rhook': 0x027D, 'rhookturned': 0x027B, 'rhookturnedsuperior': 0x02B5, 'rhosymbolgreek': 0x03F1, 'rhotichookmod': 0x02DE, 'rieulacirclekorean': 0x3271, 'rieulaparenkorean': 0x3211, 'rieulcirclekorean': 0x3263, 'rieulhieuhkorean': 0x3140, 'rieulkiyeokkorean': 0x313A, 'rieulkiyeoksioskorean': 0x3169, 'rieulkorean': 0x3139, 'rieulmieumkorean': 0x313B, 'rieulpansioskorean': 0x316C, 'rieulparenkorean': 0x3203, 'rieulphieuphkorean': 0x313F, 'rieulpieupkorean': 0x313C, 'rieulpieupsioskorean': 0x316B, 'rieulsioskorean': 0x313D, 'rieulthieuthkorean': 0x313E, 'rieultikeutkorean': 0x316A, 'rieulyeorinhieuhkorean': 0x316D, 'rightangle': 0x221F, 'righttackbelowcmb': 0x0319, 'righttriangle': 0x22BF, 'rihiragana': 0x308A, 'rikatakana': 0x30EA, 'rikatakanahalfwidth': 0xFF98, 'ring': 0x02DA, 'ringbelowcmb': 0x0325, 'ringcmb': 0x030A, 'ringhalfleft': 0x02BF, 'ringhalfleftarmenian': 0x0559, 'ringhalfleftbelowcmb': 0x031C, 'ringhalfleftcentered': 0x02D3, 'ringhalfright': 0x02BE, 'ringhalfrightbelowcmb': 0x0339, 'ringhalfrightcentered': 0x02D2, 'rinvertedbreve': 0x0213, 'rittorusquare': 0x3351, 'rlinebelow': 0x1E5F, 'rlongleg': 0x027C, 'rlonglegturned': 0x027A, 'rmonospace': 0xFF52, 'rohiragana': 0x308D, 'rokatakana': 0x30ED, 'rokatakanahalfwidth': 0xFF9B, 'roruathai': 0x0E23, 'rparen': 0x24AD, 'rrabengali': 0x09DC, 'rradeva': 0x0931, 'rragurmukhi': 0x0A5C, 'rreharabic': 0x0691, 'rrehfinalarabic': 0xFB8D, 'rrvocalicbengali': 0x09E0, 'rrvocalicdeva': 0x0960, 'rrvocalicgujarati': 0x0AE0, 'rrvocalicvowelsignbengali': 0x09C4, 'rrvocalicvowelsigndeva': 0x0944, 'rrvocalicvowelsigngujarati': 0x0AC4, 'rsuperior': 0xF6F1, 'rtblock': 0x2590, 'rturned': 0x0279, 'rturnedsuperior': 0x02B4, 'ruhiragana': 0x308B, 'rukatakana': 0x30EB, 'rukatakanahalfwidth': 0xFF99, 'rupeemarkbengali': 0x09F2, 'rupeesignbengali': 0x09F3, 'rupiah': 0xF6DD, 'ruthai': 0x0E24, 'rvocalicbengali': 0x098B, 'rvocalicdeva': 0x090B, 'rvocalicgujarati': 0x0A8B, 'rvocalicvowelsignbengali': 0x09C3, 'rvocalicvowelsigndeva': 0x0943, 'rvocalicvowelsigngujarati': 0x0AC3, 's': 0x0073, 'sabengali': 0x09B8, 'sacute': 0x015B, 'sacutedotaccent': 0x1E65, 'sadarabic': 0x0635, 'sadeva': 0x0938, 'sadfinalarabic': 0xFEBA, 'sadinitialarabic': 0xFEBB, 'sadmedialarabic': 0xFEBC, 'sagujarati': 0x0AB8, 'sagurmukhi': 0x0A38, 'sahiragana': 0x3055, 'sakatakana': 0x30B5, 'sakatakanahalfwidth': 0xFF7B, 'sallallahoualayhewasallamarabic': 0xFDFA, 'samekh': 0x05E1, 'samekhdagesh': 0xFB41, 'samekhdageshhebrew': 0xFB41, 'samekhhebrew': 0x05E1, 'saraaathai': 0x0E32, 'saraaethai': 0x0E41, 'saraaimaimalaithai': 0x0E44, 'saraaimaimuanthai': 0x0E43, 'saraamthai': 0x0E33, 'saraathai': 0x0E30, 'saraethai': 0x0E40, 'saraiileftthai': 0xF886, 'saraiithai': 0x0E35, 'saraileftthai': 0xF885, 'saraithai': 0x0E34, 'saraothai': 0x0E42, 'saraueeleftthai': 0xF888, 'saraueethai': 0x0E37, 'saraueleftthai': 0xF887, 'sarauethai': 0x0E36, 'sarauthai': 0x0E38, 'sarauuthai': 0x0E39, 'sbopomofo': 0x3119, 'scaron': 0x0161, 'scarondotaccent': 0x1E67, 'scedilla': 0x015F, 'schwa': 0x0259, 'schwacyrillic': 0x04D9, 'schwadieresiscyrillic': 0x04DB, 'schwahook': 0x025A, 'scircle': 0x24E2, 'scircumflex': 0x015D, 'scommaaccent': 0x0219, 'sdotaccent': 0x1E61, 'sdotbelow': 0x1E63, 'sdotbelowdotaccent': 0x1E69, 'seagullbelowcmb': 0x033C, 'second': 0x2033, 'secondtonechinese': 0x02CA, 'section': 0x00A7, 'seenarabic': 0x0633, 'seenfinalarabic': 0xFEB2, 'seeninitialarabic': 0xFEB3, 'seenmedialarabic': 0xFEB4, 'segol': 0x05B6, 'segol13': 0x05B6, 'segol1f': 0x05B6, 'segol2c': 0x05B6, 'segolhebrew': 0x05B6, 'segolnarrowhebrew': 0x05B6, 'segolquarterhebrew': 0x05B6, 'segoltahebrew': 0x0592, 'segolwidehebrew': 0x05B6, 'seharmenian': 0x057D, 'sehiragana': 0x305B, 'sekatakana': 0x30BB, 'sekatakanahalfwidth': 0xFF7E, 'semicolon': 0x003B, 'semicolonarabic': 0x061B, 'semicolonmonospace': 0xFF1B, 'semicolonsmall': 0xFE54, 'semivoicedmarkkana': 0x309C, 'semivoicedmarkkanahalfwidth': 0xFF9F, 'sentisquare': 0x3322, 'sentosquare': 0x3323, 'seven': 0x0037, 'sevenarabic': 0x0667, 'sevenbengali': 0x09ED, 'sevencircle': 0x2466, 'sevencircleinversesansserif': 0x2790, 'sevendeva': 0x096D, 'seveneighths': 0x215E, 'sevengujarati': 0x0AED, 'sevengurmukhi': 0x0A6D, 'sevenhackarabic': 0x0667, 'sevenhangzhou': 0x3027, 'sevenideographicparen': 0x3226, 'seveninferior': 0x2087, 'sevenmonospace': 0xFF17, 'sevenoldstyle': 0xF737, 'sevenparen': 0x247A, 'sevenperiod': 0x248E, 'sevenpersian': 0x06F7, 'sevenroman': 0x2176, 'sevensuperior': 0x2077, 'seventeencircle': 0x2470, 'seventeenparen': 0x2484, 'seventeenperiod': 0x2498, 'seventhai': 0x0E57, 'sfthyphen': 0x00AD, 'shaarmenian': 0x0577, 'shabengali': 0x09B6, 'shacyrillic': 0x0448, 'shaddaarabic': 0x0651, 'shaddadammaarabic': 0xFC61, 'shaddadammatanarabic': 0xFC5E, 'shaddafathaarabic': 0xFC60, 'shaddakasraarabic': 0xFC62, 'shaddakasratanarabic': 0xFC5F, 'shade': 0x2592, 'shadedark': 0x2593, 'shadelight': 0x2591, 'shademedium': 0x2592, 'shadeva': 0x0936, 'shagujarati': 0x0AB6, 'shagurmukhi': 0x0A36, 'shalshelethebrew': 0x0593, 'shbopomofo': 0x3115, 'shchacyrillic': 0x0449, 'sheenarabic': 0x0634, 'sheenfinalarabic': 0xFEB6, 'sheeninitialarabic': 0xFEB7, 'sheenmedialarabic': 0xFEB8, 'sheicoptic': 0x03E3, 'sheqel': 0x20AA, 'sheqelhebrew': 0x20AA, 'sheva': 0x05B0, 'sheva115': 0x05B0, 'sheva15': 0x05B0, 'sheva22': 0x05B0, 'sheva2e': 0x05B0, 'shevahebrew': 0x05B0, 'shevanarrowhebrew': 0x05B0, 'shevaquarterhebrew': 0x05B0, 'shevawidehebrew': 0x05B0, 'shhacyrillic': 0x04BB, 'shimacoptic': 0x03ED, 'shin': 0x05E9, 'shindagesh': 0xFB49, 'shindageshhebrew': 0xFB49, 'shindageshshindot': 0xFB2C, 'shindageshshindothebrew': 0xFB2C, 'shindageshsindot': 0xFB2D, 'shindageshsindothebrew': 0xFB2D, 'shindothebrew': 0x05C1, 'shinhebrew': 0x05E9, 'shinshindot': 0xFB2A, 'shinshindothebrew': 0xFB2A, 'shinsindot': 0xFB2B, 'shinsindothebrew': 0xFB2B, 'shook': 0x0282, 'sigma': 0x03C3, 'sigma1': 0x03C2, 'sigmafinal': 0x03C2, 'sigmalunatesymbolgreek': 0x03F2, 'sihiragana': 0x3057, 'sikatakana': 0x30B7, 'sikatakanahalfwidth': 0xFF7C, 'siluqhebrew': 0x05BD, 'siluqlefthebrew': 0x05BD, 'similar': 0x223C, 'sindothebrew': 0x05C2, 'siosacirclekorean': 0x3274, 'siosaparenkorean': 0x3214, 'sioscieuckorean': 0x317E, 'sioscirclekorean': 0x3266, 'sioskiyeokkorean': 0x317A, 'sioskorean': 0x3145, 'siosnieunkorean': 0x317B, 'siosparenkorean': 0x3206, 'siospieupkorean': 0x317D, 'siostikeutkorean': 0x317C, 'six': 0x0036, 'sixarabic': 0x0666, 'sixbengali': 0x09EC, 'sixcircle': 0x2465, 'sixcircleinversesansserif': 0x278F, 'sixdeva': 0x096C, 'sixgujarati': 0x0AEC, 'sixgurmukhi': 0x0A6C, 'sixhackarabic': 0x0666, 'sixhangzhou': 0x3026, 'sixideographicparen': 0x3225, 'sixinferior': 0x2086, 'sixmonospace': 0xFF16, 'sixoldstyle': 0xF736, 'sixparen': 0x2479, 'sixperiod': 0x248D, 'sixpersian': 0x06F6, 'sixroman': 0x2175, 'sixsuperior': 0x2076, 'sixteencircle': 0x246F, 'sixteencurrencydenominatorbengali': 0x09F9, 'sixteenparen': 0x2483, 'sixteenperiod': 0x2497, 'sixthai': 0x0E56, 'slash': 0x002F, 'slashmonospace': 0xFF0F, 'slong': 0x017F, 'slongdotaccent': 0x1E9B, 'smileface': 0x263A, 'smonospace': 0xFF53, 'sofpasuqhebrew': 0x05C3, 'softhyphen': 0x00AD, 'softsigncyrillic': 0x044C, 'sohiragana': 0x305D, 'sokatakana': 0x30BD, 'sokatakanahalfwidth': 0xFF7F, 'soliduslongoverlaycmb': 0x0338, 'solidusshortoverlaycmb': 0x0337, 'sorusithai': 0x0E29, 'sosalathai': 0x0E28, 'sosothai': 0x0E0B, 'sosuathai': 0x0E2A, 'space': 0x0020, 'spacehackarabic': 0x0020, 'spade': 0x2660, 'spadesuitblack': 0x2660, 'spadesuitwhite': 0x2664, 'sparen': 0x24AE, 'squarebelowcmb': 0x033B, 'squarecc': 0x33C4, 'squarecm': 0x339D, 'squarediagonalcrosshatchfill': 0x25A9, 'squarehorizontalfill': 0x25A4, 'squarekg': 0x338F, 'squarekm': 0x339E, 'squarekmcapital': 0x33CE, 'squareln': 0x33D1, 'squarelog': 0x33D2, 'squaremg': 0x338E, 'squaremil': 0x33D5, 'squaremm': 0x339C, 'squaremsquared': 0x33A1, 'squareorthogonalcrosshatchfill': 0x25A6, 'squareupperlefttolowerrightfill': 0x25A7, 'squareupperrighttolowerleftfill': 0x25A8, 'squareverticalfill': 0x25A5, 'squarewhitewithsmallblack': 0x25A3, 'srsquare': 0x33DB, 'ssabengali': 0x09B7, 'ssadeva': 0x0937, 'ssagujarati': 0x0AB7, 'ssangcieuckorean': 0x3149, 'ssanghieuhkorean': 0x3185, 'ssangieungkorean': 0x3180, 'ssangkiyeokkorean': 0x3132, 'ssangnieunkorean': 0x3165, 'ssangpieupkorean': 0x3143, 'ssangsioskorean': 0x3146, 'ssangtikeutkorean': 0x3138, 'ssuperior': 0xF6F2, 'sterling': 0x00A3, 'sterlingmonospace': 0xFFE1, 'strokelongoverlaycmb': 0x0336, 'strokeshortoverlaycmb': 0x0335, 'subset': 0x2282, 'subsetnotequal': 0x228A, 'subsetorequal': 0x2286, 'succeeds': 0x227B, 'suchthat': 0x220B, 'suhiragana': 0x3059, 'sukatakana': 0x30B9, 'sukatakanahalfwidth': 0xFF7D, 'sukunarabic': 0x0652, 'summation': 0x2211, 'sun': 0x263C, 'superset': 0x2283, 'supersetnotequal': 0x228B, 'supersetorequal': 0x2287, 'svsquare': 0x33DC, 'syouwaerasquare': 0x337C, 't': 0x0074, 'tabengali': 0x09A4, 'tackdown': 0x22A4, 'tackleft': 0x22A3, 'tadeva': 0x0924, 'tagujarati': 0x0AA4, 'tagurmukhi': 0x0A24, 'taharabic': 0x0637, 'tahfinalarabic': 0xFEC2, 'tahinitialarabic': 0xFEC3, 'tahiragana': 0x305F, 'tahmedialarabic': 0xFEC4, 'taisyouerasquare': 0x337D, 'takatakana': 0x30BF, 'takatakanahalfwidth': 0xFF80, 'tatweelarabic': 0x0640, 'tau': 0x03C4, 'tav': 0x05EA, 'tavdages': 0xFB4A, 'tavdagesh': 0xFB4A, 'tavdageshhebrew': 0xFB4A, 'tavhebrew': 0x05EA, 'tbar': 0x0167, 'tbopomofo': 0x310A, 'tcaron': 0x0165, 'tccurl': 0x02A8, 'tcedilla': 0x0163, 'tcheharabic': 0x0686, 'tchehfinalarabic': 0xFB7B, 'tchehinitialarabic': 0xFB7C, 'tchehmedialarabic': 0xFB7D, 'tcircle': 0x24E3, 'tcircumflexbelow': 0x1E71, 'tcommaaccent': 0x0163, 'tdieresis': 0x1E97, 'tdotaccent': 0x1E6B, 'tdotbelow': 0x1E6D, 'tecyrillic': 0x0442, 'tedescendercyrillic': 0x04AD, 'teharabic': 0x062A, 'tehfinalarabic': 0xFE96, 'tehhahinitialarabic': 0xFCA2, 'tehhahisolatedarabic': 0xFC0C, 'tehinitialarabic': 0xFE97, 'tehiragana': 0x3066, 'tehjeeminitialarabic': 0xFCA1, 'tehjeemisolatedarabic': 0xFC0B, 'tehmarbutaarabic': 0x0629, 'tehmarbutafinalarabic': 0xFE94, 'tehmedialarabic': 0xFE98, 'tehmeeminitialarabic': 0xFCA4, 'tehmeemisolatedarabic': 0xFC0E, 'tehnoonfinalarabic': 0xFC73, 'tekatakana': 0x30C6, 'tekatakanahalfwidth': 0xFF83, 'telephone': 0x2121, 'telephoneblack': 0x260E, 'telishagedolahebrew': 0x05A0, 'telishaqetanahebrew': 0x05A9, 'tencircle': 0x2469, 'tenideographicparen': 0x3229, 'tenparen': 0x247D, 'tenperiod': 0x2491, 'tenroman': 0x2179, 'tesh': 0x02A7, 'tet': 0x05D8, 'tetdagesh': 0xFB38, 'tetdageshhebrew': 0xFB38, 'tethebrew': 0x05D8, 'tetsecyrillic': 0x04B5, 'tevirhebrew': 0x059B, 'tevirlefthebrew': 0x059B, 'thabengali': 0x09A5, 'thadeva': 0x0925, 'thagujarati': 0x0AA5, 'thagurmukhi': 0x0A25, 'thalarabic': 0x0630, 'thalfinalarabic': 0xFEAC, 'thanthakhatlowleftthai': 0xF898, 'thanthakhatlowrightthai': 0xF897, 'thanthakhatthai': 0x0E4C, 'thanthakhatupperleftthai': 0xF896, 'theharabic': 0x062B, 'thehfinalarabic': 0xFE9A, 'thehinitialarabic': 0xFE9B, 'thehmedialarabic': 0xFE9C, 'thereexists': 0x2203, 'therefore': 0x2234, 'theta': 0x03B8, 'theta1': 0x03D1, 'thetasymbolgreek': 0x03D1, 'thieuthacirclekorean': 0x3279, 'thieuthaparenkorean': 0x3219, 'thieuthcirclekorean': 0x326B, 'thieuthkorean': 0x314C, 'thieuthparenkorean': 0x320B, 'thirteencircle': 0x246C, 'thirteenparen': 0x2480, 'thirteenperiod': 0x2494, 'thonangmonthothai': 0x0E11, 'thook': 0x01AD, 'thophuthaothai': 0x0E12, 'thorn': 0x00FE, 'thothahanthai': 0x0E17, 'thothanthai': 0x0E10, 'thothongthai': 0x0E18, 'thothungthai': 0x0E16, 'thousandcyrillic': 0x0482, 'thousandsseparatorarabic': 0x066C, 'thousandsseparatorpersian': 0x066C, 'three': 0x0033, 'threearabic': 0x0663, 'threebengali': 0x09E9, 'threecircle': 0x2462, 'threecircleinversesansserif': 0x278C, 'threedeva': 0x0969, 'threeeighths': 0x215C, 'threegujarati': 0x0AE9, 'threegurmukhi': 0x0A69, 'threehackarabic': 0x0663, 'threehangzhou': 0x3023, 'threeideographicparen': 0x3222, 'threeinferior': 0x2083, 'threemonospace': 0xFF13, 'threenumeratorbengali': 0x09F6, 'threeoldstyle': 0xF733, 'threeparen': 0x2476, 'threeperiod': 0x248A, 'threepersian': 0x06F3, 'threequarters': 0x00BE, 'threequartersemdash': 0xF6DE, 'threeroman': 0x2172, 'threesuperior': 0x00B3, 'threethai': 0x0E53, 'thzsquare': 0x3394, 'tihiragana': 0x3061, 'tikatakana': 0x30C1, 'tikatakanahalfwidth': 0xFF81, 'tikeutacirclekorean': 0x3270, 'tikeutaparenkorean': 0x3210, 'tikeutcirclekorean': 0x3262, 'tikeutkorean': 0x3137, 'tikeutparenkorean': 0x3202, 'tilde': 0x02DC, 'tildebelowcmb': 0x0330, 'tildecmb': 0x0303, 'tildecomb': 0x0303, 'tildedoublecmb': 0x0360, 'tildeoperator': 0x223C, 'tildeoverlaycmb': 0x0334, 'tildeverticalcmb': 0x033E, 'timescircle': 0x2297, 'tipehahebrew': 0x0596, 'tipehalefthebrew': 0x0596, 'tippigurmukhi': 0x0A70, 'titlocyrilliccmb': 0x0483, 'tiwnarmenian': 0x057F, 'tlinebelow': 0x1E6F, 'tmonospace': 0xFF54, 'toarmenian': 0x0569, 'tohiragana': 0x3068, 'tokatakana': 0x30C8, 'tokatakanahalfwidth': 0xFF84, 'tonebarextrahighmod': 0x02E5, 'tonebarextralowmod': 0x02E9, 'tonebarhighmod': 0x02E6, 'tonebarlowmod': 0x02E8, 'tonebarmidmod': 0x02E7, 'tonefive': 0x01BD, 'tonesix': 0x0185, 'tonetwo': 0x01A8, 'tonos': 0x0384, 'tonsquare': 0x3327, 'topatakthai': 0x0E0F, 'tortoiseshellbracketleft': 0x3014, 'tortoiseshellbracketleftsmall': 0xFE5D, 'tortoiseshellbracketleftvertical': 0xFE39, 'tortoiseshellbracketright': 0x3015, 'tortoiseshellbracketrightsmall': 0xFE5E, 'tortoiseshellbracketrightvertical': 0xFE3A, 'totaothai': 0x0E15, 'tpalatalhook': 0x01AB, 'tparen': 0x24AF, 'trademark': 0x2122, 'trademarksans': 0xF8EA, 'trademarkserif': 0xF6DB, 'tretroflexhook': 0x0288, 'triagdn': 0x25BC, 'triaglf': 0x25C4, 'triagrt': 0x25BA, 'triagup': 0x25B2, 'ts': 0x02A6, 'tsadi': 0x05E6, 'tsadidagesh': 0xFB46, 'tsadidageshhebrew': 0xFB46, 'tsadihebrew': 0x05E6, 'tsecyrillic': 0x0446, 'tsere': 0x05B5, 'tsere12': 0x05B5, 'tsere1e': 0x05B5, 'tsere2b': 0x05B5, 'tserehebrew': 0x05B5, 'tserenarrowhebrew': 0x05B5, 'tserequarterhebrew': 0x05B5, 'tserewidehebrew': 0x05B5, 'tshecyrillic': 0x045B, 'tsuperior': 0xF6F3, 'ttabengali': 0x099F, 'ttadeva': 0x091F, 'ttagujarati': 0x0A9F, 'ttagurmukhi': 0x0A1F, 'tteharabic': 0x0679, 'ttehfinalarabic': 0xFB67, 'ttehinitialarabic': 0xFB68, 'ttehmedialarabic': 0xFB69, 'tthabengali': 0x09A0, 'tthadeva': 0x0920, 'tthagujarati': 0x0AA0, 'tthagurmukhi': 0x0A20, 'tturned': 0x0287, 'tuhiragana': 0x3064, 'tukatakana': 0x30C4, 'tukatakanahalfwidth': 0xFF82, 'tusmallhiragana': 0x3063, 'tusmallkatakana': 0x30C3, 'tusmallkatakanahalfwidth': 0xFF6F, 'twelvecircle': 0x246B, 'twelveparen': 0x247F, 'twelveperiod': 0x2493, 'twelveroman': 0x217B, 'twentycircle': 0x2473, 'twentyhangzhou': 0x5344, 'twentyparen': 0x2487, 'twentyperiod': 0x249B, 'two': 0x0032, 'twoarabic': 0x0662, 'twobengali': 0x09E8, 'twocircle': 0x2461, 'twocircleinversesansserif': 0x278B, 'twodeva': 0x0968, 'twodotenleader': 0x2025, 'twodotleader': 0x2025, 'twodotleadervertical': 0xFE30, 'twogujarati': 0x0AE8, 'twogurmukhi': 0x0A68, 'twohackarabic': 0x0662, 'twohangzhou': 0x3022, 'twoideographicparen': 0x3221, 'twoinferior': 0x2082, 'twomonospace': 0xFF12, 'twonumeratorbengali': 0x09F5, 'twooldstyle': 0xF732, 'twoparen': 0x2475, 'twoperiod': 0x2489, 'twopersian': 0x06F2, 'tworoman': 0x2171, 'twostroke': 0x01BB, 'twosuperior': 0x00B2, 'twothai': 0x0E52, 'twothirds': 0x2154, 'u': 0x0075, 'uacute': 0x00FA, 'ubar': 0x0289, 'ubengali': 0x0989, 'ubopomofo': 0x3128, 'ubreve': 0x016D, 'ucaron': 0x01D4, 'ucircle': 0x24E4, 'ucircumflex': 0x00FB, 'ucircumflexbelow': 0x1E77, 'ucyrillic': 0x0443, 'udattadeva': 0x0951, 'udblacute': 0x0171, 'udblgrave': 0x0215, 'udeva': 0x0909, 'udieresis': 0x00FC, 'udieresisacute': 0x01D8, 'udieresisbelow': 0x1E73, 'udieresiscaron': 0x01DA, 'udieresiscyrillic': 0x04F1, 'udieresisgrave': 0x01DC, 'udieresismacron': 0x01D6, 'udotbelow': 0x1EE5, 'ugrave': 0x00F9, 'ugujarati': 0x0A89, 'ugurmukhi': 0x0A09, 'uhiragana': 0x3046, 'uhookabove': 0x1EE7, 'uhorn': 0x01B0, 'uhornacute': 0x1EE9, 'uhorndotbelow': 0x1EF1, 'uhorngrave': 0x1EEB, 'uhornhookabove': 0x1EED, 'uhorntilde': 0x1EEF, 'uhungarumlaut': 0x0171, 'uhungarumlautcyrillic': 0x04F3, 'uinvertedbreve': 0x0217, 'ukatakana': 0x30A6, 'ukatakanahalfwidth': 0xFF73, 'ukcyrillic': 0x0479, 'ukorean': 0x315C, 'umacron': 0x016B, 'umacroncyrillic': 0x04EF, 'umacrondieresis': 0x1E7B, 'umatragurmukhi': 0x0A41, 'umonospace': 0xFF55, 'underscore': 0x005F, 'underscoredbl': 0x2017, 'underscoremonospace': 0xFF3F, 'underscorevertical': 0xFE33, 'underscorewavy': 0xFE4F, 'union': 0x222A, 'universal': 0x2200, 'uogonek': 0x0173, 'uparen': 0x24B0, 'upblock': 0x2580, 'upperdothebrew': 0x05C4, 'upsilon': 0x03C5, 'upsilondieresis': 0x03CB, 'upsilondieresistonos': 0x03B0, 'upsilonlatin': 0x028A, 'upsilontonos': 0x03CD, 'uptackbelowcmb': 0x031D, 'uptackmod': 0x02D4, 'uragurmukhi': 0x0A73, 'uring': 0x016F, 'ushortcyrillic': 0x045E, 'usmallhiragana': 0x3045, 'usmallkatakana': 0x30A5, 'usmallkatakanahalfwidth': 0xFF69, 'ustraightcyrillic': 0x04AF, 'ustraightstrokecyrillic': 0x04B1, 'utilde': 0x0169, 'utildeacute': 0x1E79, 'utildebelow': 0x1E75, 'uubengali': 0x098A, 'uudeva': 0x090A, 'uugujarati': 0x0A8A, 'uugurmukhi': 0x0A0A, 'uumatragurmukhi': 0x0A42, 'uuvowelsignbengali': 0x09C2, 'uuvowelsigndeva': 0x0942, 'uuvowelsigngujarati': 0x0AC2, 'uvowelsignbengali': 0x09C1, 'uvowelsigndeva': 0x0941, 'uvowelsigngujarati': 0x0AC1, 'v': 0x0076, 'vadeva': 0x0935, 'vagujarati': 0x0AB5, 'vagurmukhi': 0x0A35, 'vakatakana': 0x30F7, 'vav': 0x05D5, 'vavdagesh': 0xFB35, 'vavdagesh65': 0xFB35, 'vavdageshhebrew': 0xFB35, 'vavhebrew': 0x05D5, 'vavholam': 0xFB4B, 'vavholamhebrew': 0xFB4B, 'vavvavhebrew': 0x05F0, 'vavyodhebrew': 0x05F1, 'vcircle': 0x24E5, 'vdotbelow': 0x1E7F, 'vecyrillic': 0x0432, 'veharabic': 0x06A4, 'vehfinalarabic': 0xFB6B, 'vehinitialarabic': 0xFB6C, 'vehmedialarabic': 0xFB6D, 'vekatakana': 0x30F9, 'venus': 0x2640, 'verticalbar': 0x007C, 'verticallineabovecmb': 0x030D, 'verticallinebelowcmb': 0x0329, 'verticallinelowmod': 0x02CC, 'verticallinemod': 0x02C8, 'vewarmenian': 0x057E, 'vhook': 0x028B, 'vikatakana': 0x30F8, 'viramabengali': 0x09CD, 'viramadeva': 0x094D, 'viramagujarati': 0x0ACD, 'visargabengali': 0x0983, 'visargadeva': 0x0903, 'visargagujarati': 0x0A83, 'vmonospace': 0xFF56, 'voarmenian': 0x0578, 'voicediterationhiragana': 0x309E, 'voicediterationkatakana': 0x30FE, 'voicedmarkkana': 0x309B, 'voicedmarkkanahalfwidth': 0xFF9E, 'vokatakana': 0x30FA, 'vparen': 0x24B1, 'vtilde': 0x1E7D, 'vturned': 0x028C, 'vuhiragana': 0x3094, 'vukatakana': 0x30F4, 'w': 0x0077, 'wacute': 0x1E83, 'waekorean': 0x3159, 'wahiragana': 0x308F, 'wakatakana': 0x30EF, 'wakatakanahalfwidth': 0xFF9C, 'wakorean': 0x3158, 'wasmallhiragana': 0x308E, 'wasmallkatakana': 0x30EE, 'wattosquare': 0x3357, 'wavedash': 0x301C, 'wavyunderscorevertical': 0xFE34, 'wawarabic': 0x0648, 'wawfinalarabic': 0xFEEE, 'wawhamzaabovearabic': 0x0624, 'wawhamzaabovefinalarabic': 0xFE86, 'wbsquare': 0x33DD, 'wcircle': 0x24E6, 'wcircumflex': 0x0175, 'wdieresis': 0x1E85, 'wdotaccent': 0x1E87, 'wdotbelow': 0x1E89, 'wehiragana': 0x3091, 'weierstrass': 0x2118, 'wekatakana': 0x30F1, 'wekorean': 0x315E, 'weokorean': 0x315D, 'wgrave': 0x1E81, 'whitebullet': 0x25E6, 'whitecircle': 0x25CB, 'whitecircleinverse': 0x25D9, 'whitecornerbracketleft': 0x300E, 'whitecornerbracketleftvertical': 0xFE43, 'whitecornerbracketright': 0x300F, 'whitecornerbracketrightvertical': 0xFE44, 'whitediamond': 0x25C7, 'whitediamondcontainingblacksmalldiamond': 0x25C8, 'whitedownpointingsmalltriangle': 0x25BF, 'whitedownpointingtriangle': 0x25BD, 'whiteleftpointingsmalltriangle': 0x25C3, 'whiteleftpointingtriangle': 0x25C1, 'whitelenticularbracketleft': 0x3016, 'whitelenticularbracketright': 0x3017, 'whiterightpointingsmalltriangle': 0x25B9, 'whiterightpointingtriangle': 0x25B7, 'whitesmallsquare': 0x25AB, 'whitesmilingface': 0x263A, 'whitesquare': 0x25A1, 'whitestar': 0x2606, 'whitetelephone': 0x260F, 'whitetortoiseshellbracketleft': 0x3018, 'whitetortoiseshellbracketright': 0x3019, 'whiteuppointingsmalltriangle': 0x25B5, 'whiteuppointingtriangle': 0x25B3, 'wihiragana': 0x3090, 'wikatakana': 0x30F0, 'wikorean': 0x315F, 'wmonospace': 0xFF57, 'wohiragana': 0x3092, 'wokatakana': 0x30F2, 'wokatakanahalfwidth': 0xFF66, 'won': 0x20A9, 'wonmonospace': 0xFFE6, 'wowaenthai': 0x0E27, 'wparen': 0x24B2, 'wring': 0x1E98, 'wsuperior': 0x02B7, 'wturned': 0x028D, 'wynn': 0x01BF, 'x': 0x0078, 'xabovecmb': 0x033D, 'xbopomofo': 0x3112, 'xcircle': 0x24E7, 'xdieresis': 0x1E8D, 'xdotaccent': 0x1E8B, 'xeharmenian': 0x056D, 'xi': 0x03BE, 'xmonospace': 0xFF58, 'xparen': 0x24B3, 'xsuperior': 0x02E3, 'y': 0x0079, 'yaadosquare': 0x334E, 'yabengali': 0x09AF, 'yacute': 0x00FD, 'yadeva': 0x092F, 'yaekorean': 0x3152, 'yagujarati': 0x0AAF, 'yagurmukhi': 0x0A2F, 'yahiragana': 0x3084, 'yakatakana': 0x30E4, 'yakatakanahalfwidth': 0xFF94, 'yakorean': 0x3151, 'yamakkanthai': 0x0E4E, 'yasmallhiragana': 0x3083, 'yasmallkatakana': 0x30E3, 'yasmallkatakanahalfwidth': 0xFF6C, 'yatcyrillic': 0x0463, 'ycircle': 0x24E8, 'ycircumflex': 0x0177, 'ydieresis': 0x00FF, 'ydotaccent': 0x1E8F, 'ydotbelow': 0x1EF5, 'yeharabic': 0x064A, 'yehbarreearabic': 0x06D2, 'yehbarreefinalarabic': 0xFBAF, 'yehfinalarabic': 0xFEF2, 'yehhamzaabovearabic': 0x0626, 'yehhamzaabovefinalarabic': 0xFE8A, 'yehhamzaaboveinitialarabic': 0xFE8B, 'yehhamzaabovemedialarabic': 0xFE8C, 'yehinitialarabic': 0xFEF3, 'yehmedialarabic': 0xFEF4, 'yehmeeminitialarabic': 0xFCDD, 'yehmeemisolatedarabic': 0xFC58, 'yehnoonfinalarabic': 0xFC94, 'yehthreedotsbelowarabic': 0x06D1, 'yekorean': 0x3156, 'yen': 0x00A5, 'yenmonospace': 0xFFE5, 'yeokorean': 0x3155, 'yeorinhieuhkorean': 0x3186, 'yerahbenyomohebrew': 0x05AA, 'yerahbenyomolefthebrew': 0x05AA, 'yericyrillic': 0x044B, 'yerudieresiscyrillic': 0x04F9, 'yesieungkorean': 0x3181, 'yesieungpansioskorean': 0x3183, 'yesieungsioskorean': 0x3182, 'yetivhebrew': 0x059A, 'ygrave': 0x1EF3, 'yhook': 0x01B4, 'yhookabove': 0x1EF7, 'yiarmenian': 0x0575, 'yicyrillic': 0x0457, 'yikorean': 0x3162, 'yinyang': 0x262F, 'yiwnarmenian': 0x0582, 'ymonospace': 0xFF59, 'yod': 0x05D9, 'yoddagesh': 0xFB39, 'yoddageshhebrew': 0xFB39, 'yodhebrew': 0x05D9, 'yodyodhebrew': 0x05F2, 'yodyodpatahhebrew': 0xFB1F, 'yohiragana': 0x3088, 'yoikorean': 0x3189, 'yokatakana': 0x30E8, 'yokatakanahalfwidth': 0xFF96, 'yokorean': 0x315B, 'yosmallhiragana': 0x3087, 'yosmallkatakana': 0x30E7, 'yosmallkatakanahalfwidth': 0xFF6E, 'yotgreek': 0x03F3, 'yoyaekorean': 0x3188, 'yoyakorean': 0x3187, 'yoyakthai': 0x0E22, 'yoyingthai': 0x0E0D, 'yparen': 0x24B4, 'ypogegrammeni': 0x037A, 'ypogegrammenigreekcmb': 0x0345, 'yr': 0x01A6, 'yring': 0x1E99, 'ysuperior': 0x02B8, 'ytilde': 0x1EF9, 'yturned': 0x028E, 'yuhiragana': 0x3086, 'yuikorean': 0x318C, 'yukatakana': 0x30E6, 'yukatakanahalfwidth': 0xFF95, 'yukorean': 0x3160, 'yusbigcyrillic': 0x046B, 'yusbigiotifiedcyrillic': 0x046D, 'yuslittlecyrillic': 0x0467, 'yuslittleiotifiedcyrillic': 0x0469, 'yusmallhiragana': 0x3085, 'yusmallkatakana': 0x30E5, 'yusmallkatakanahalfwidth': 0xFF6D, 'yuyekorean': 0x318B, 'yuyeokorean': 0x318A, 'yyabengali': 0x09DF, 'yyadeva': 0x095F, 'z': 0x007A, 'zaarmenian': 0x0566, 'zacute': 0x017A, 'zadeva': 0x095B, 'zagurmukhi': 0x0A5B, 'zaharabic': 0x0638, 'zahfinalarabic': 0xFEC6, 'zahinitialarabic': 0xFEC7, 'zahiragana': 0x3056, 'zahmedialarabic': 0xFEC8, 'zainarabic': 0x0632, 'zainfinalarabic': 0xFEB0, 'zakatakana': 0x30B6, 'zaqefgadolhebrew': 0x0595, 'zaqefqatanhebrew': 0x0594, 'zarqahebrew': 0x0598, 'zayin': 0x05D6, 'zayindagesh': 0xFB36, 'zayindageshhebrew': 0xFB36, 'zayinhebrew': 0x05D6, 'zbopomofo': 0x3117, 'zcaron': 0x017E, 'zcircle': 0x24E9, 'zcircumflex': 0x1E91, 'zcurl': 0x0291, 'zdot': 0x017C, 'zdotaccent': 0x017C, 'zdotbelow': 0x1E93, 'zecyrillic': 0x0437, 'zedescendercyrillic': 0x0499, 'zedieresiscyrillic': 0x04DF, 'zehiragana': 0x305C, 'zekatakana': 0x30BC, 'zero': 0x0030, 'zeroarabic': 0x0660, 'zerobengali': 0x09E6, 'zerodeva': 0x0966, 'zerogujarati': 0x0AE6, 'zerogurmukhi': 0x0A66, 'zerohackarabic': 0x0660, 'zeroinferior': 0x2080, 'zeromonospace': 0xFF10, 'zerooldstyle': 0xF730, 'zeropersian': 0x06F0, 'zerosuperior': 0x2070, 'zerothai': 0x0E50, 'zerowidthjoiner': 0xFEFF, 'zerowidthnonjoiner': 0x200C, 'zerowidthspace': 0x200B, 'zeta': 0x03B6, 'zhbopomofo': 0x3113, 'zhearmenian': 0x056A, 'zhebrevecyrillic': 0x04C2, 'zhecyrillic': 0x0436, 'zhedescendercyrillic': 0x0497, 'zhedieresiscyrillic': 0x04DD, 'zihiragana': 0x3058, 'zikatakana': 0x30B8, 'zinorhebrew': 0x05AE, 'zlinebelow': 0x1E95, 'zmonospace': 0xFF5A, 'zohiragana': 0x305E, 'zokatakana': 0x30BE, 'zparen': 0x24B5, 'zretroflexhook': 0x0290, 'zstroke': 0x01B6, 'zuhiragana': 0x305A, 'zukatakana': 0x30BA, } _glyphname2unicodes = { 'dalethatafpatah': (0x05D3,0x05B2), 'dalethatafpatahhebrew': (0x05D3,0x05B2), 'dalethatafsegol': (0x05D3,0x05B1), 'dalethatafsegolhebrew': (0x05D3,0x05B1), 'dalethiriq': (0x05D3,0x05B4), 'dalethiriqhebrew': (0x05D3,0x05B4), 'daletholam': (0x05D3,0x05B9), 'daletholamhebrew': (0x05D3,0x05B9), 'daletpatah': (0x05D3,0x05B7), 'daletpatahhebrew': (0x05D3,0x05B7), 'daletqamats': (0x05D3,0x05B8), 'daletqamatshebrew': (0x05D3,0x05B8), 'daletqubuts': (0x05D3,0x05BB), 'daletqubutshebrew': (0x05D3,0x05BB), 'daletsegol': (0x05D3,0x05B6), 'daletsegolhebrew': (0x05D3,0x05B6), 'daletsheva': (0x05D3,0x05B0), 'daletshevahebrew': (0x05D3,0x05B0), 'dalettsere': (0x05D3,0x05B5), 'dalettserehebrew': (0x05D3,0x05B5), 'finalkafqamats': (0x05DA,0x05B8), 'finalkafqamatshebrew': (0x05DA,0x05B8), 'finalkafsheva': (0x05DA,0x05B0), 'finalkafshevahebrew': (0x05DA,0x05B0), 'hamzadammaarabic': (0x0621,0x064F), 'hamzadammatanarabic': (0x0621,0x064C), 'hamzafathaarabic': (0x0621,0x064E), 'hamzafathatanarabic': (0x0621,0x064B), 'hamzalowkasraarabic': (0x0621,0x0650), 'hamzalowkasratanarabic': (0x0621,0x064D), 'hamzasukunarabic': (0x0621,0x0652), 'lamedholam': (0x05DC,0x05B9), 'lamedholamdagesh': (0x05DC,0x05B9,0x05BC), 'lamedholamdageshhebrew': (0x05DC,0x05B9,0x05BC), 'lamedholamhebrew': (0x05DC,0x05B9), 'lammeemjeeminitialarabic': (0xFEDF,0xFEE4,0xFEA0), 'lammeemkhahinitialarabic': (0xFEDF,0xFEE4,0xFEA8), 'noonhehinitialarabic': (0xFEE7,0xFEEC), 'qofhatafpatah': (0x05E7,0x05B2), 'qofhatafpatahhebrew': (0x05E7,0x05B2), 'qofhatafsegol': (0x05E7,0x05B1), 'qofhatafsegolhebrew': (0x05E7,0x05B1), 'qofhiriq': (0x05E7,0x05B4), 'qofhiriqhebrew': (0x05E7,0x05B4), 'qofholam': (0x05E7,0x05B9), 'qofholamhebrew': (0x05E7,0x05B9), 'qofpatah': (0x05E7,0x05B7), 'qofpatahhebrew': (0x05E7,0x05B7), 'qofqamats': (0x05E7,0x05B8), 'qofqamatshebrew': (0x05E7,0x05B8), 'qofqubuts': (0x05E7,0x05BB), 'qofqubutshebrew': (0x05E7,0x05BB), 'qofsegol': (0x05E7,0x05B6), 'qofsegolhebrew': (0x05E7,0x05B6), 'qofsheva': (0x05E7,0x05B0), 'qofshevahebrew': (0x05E7,0x05B0), 'qoftsere': (0x05E7,0x05B5), 'qoftserehebrew': (0x05E7,0x05B5), 'rehyehaleflamarabic': (0x0631,0xFEF3,0xFE8E,0x0644), 'reshhatafpatah': (0x05E8,0x05B2), 'reshhatafpatahhebrew': (0x05E8,0x05B2), 'reshhatafsegol': (0x05E8,0x05B1), 'reshhatafsegolhebrew': (0x05E8,0x05B1), 'reshhiriq': (0x05E8,0x05B4), 'reshhiriqhebrew': (0x05E8,0x05B4), 'reshholam': (0x05E8,0x05B9), 'reshholamhebrew': (0x05E8,0x05B9), 'reshpatah': (0x05E8,0x05B7), 'reshpatahhebrew': (0x05E8,0x05B7), 'reshqamats': (0x05E8,0x05B8), 'reshqamatshebrew': (0x05E8,0x05B8), 'reshqubuts': (0x05E8,0x05BB), 'reshqubutshebrew': (0x05E8,0x05BB), 'reshsegol': (0x05E8,0x05B6), 'reshsegolhebrew': (0x05E8,0x05B6), 'reshsheva': (0x05E8,0x05B0), 'reshshevahebrew': (0x05E8,0x05B0), 'reshtsere': (0x05E8,0x05B5), 'reshtserehebrew': (0x05E8,0x05B5), 'shaddafathatanarabic': (0x0651,0x064B), 'tchehmeeminitialarabic': (0xFB7C,0xFEE4), } reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_widths_helvetica.py0000664000175000017500000000712713544671343026521 0ustar rptlabrptlab00000000000000widths = {'A': 667, 'AE': 1000, 'Aacute': 667, 'Acircumflex': 667, 'Adieresis': 667, 'Agrave': 667, 'Aring': 667, 'Atilde': 667, 'B': 667, 'C': 722, 'Ccedilla': 722, 'D': 722, 'E': 667, 'Eacute': 667, 'Ecircumflex': 667, 'Edieresis': 667, 'Egrave': 667, 'Eth': 722, 'Euro': 556, 'F': 611, 'G': 778, 'H': 722, 'I': 278, 'Iacute': 278, 'Icircumflex': 278, 'Idieresis': 278, 'Igrave': 278, 'J': 500, 'K': 667, 'L': 556, 'Lslash': 556, 'M': 833, 'N': 722, 'Ntilde': 722, 'O': 778, 'OE': 1000, 'Oacute': 778, 'Ocircumflex': 778, 'Odieresis': 778, 'Ograve': 778, 'Oslash': 778, 'Otilde': 778, 'P': 667, 'Q': 778, 'R': 722, 'S': 667, 'Scaron': 667, 'T': 611, 'Thorn': 667, 'U': 722, 'Uacute': 722, 'Ucircumflex': 722, 'Udieresis': 722, 'Ugrave': 722, 'V': 667, 'W': 944, 'X': 667, 'Y': 667, 'Yacute': 667, 'Ydieresis': 667, 'Z': 611, 'Zcaron': 611, 'a': 556, 'aacute': 556, 'acircumflex': 556, 'acute': 333, 'adieresis': 556, 'ae': 889, 'agrave': 556, 'ampersand': 667, 'aring': 556, 'asciicircum': 469, 'asciitilde': 584, 'asterisk': 389, 'at': 1015, 'atilde': 556, 'b': 556, 'backslash': 278, 'bar': 260, 'braceleft': 334, 'braceright': 334, 'bracketleft': 278, 'bracketright': 278, 'breve': 333, 'brokenbar': 260, 'bullet': 350, 'c': 500, 'caron': 333, 'ccedilla': 500, 'cedilla': 333, 'cent': 556, 'circumflex': 333, 'colon': 278, 'comma': 278, 'copyright': 737, 'currency': 556, 'd': 556, 'dagger': 556, 'daggerdbl': 556, 'degree': 400, 'dieresis': 333, 'divide': 584, 'dollar': 556, 'dotaccent': 333, 'dotlessi': 278, 'e': 556, 'eacute': 556, 'ecircumflex': 556, 'edieresis': 556, 'egrave': 556, 'eight': 556, 'ellipsis': 1000, 'emdash': 1000, 'endash': 556, 'equal': 584, 'eth': 556, 'exclam': 278, 'exclamdown': 333, 'f': 278, 'fi': 500, 'five': 556, 'fl': 500, 'florin': 556, 'four': 556, 'fraction': 167, 'g': 556, 'germandbls': 611, 'grave': 333, 'greater': 584, 'guillemotleft': 556, 'guillemotright': 556, 'guilsinglleft': 333, 'guilsinglright': 333, 'h': 556, 'hungarumlaut': 333, 'hyphen': 333, 'i': 222, 'iacute': 278, 'icircumflex': 278, 'idieresis': 278, 'igrave': 278, 'j': 222, 'k': 500, 'l': 222, 'less': 584, 'logicalnot': 584, 'lslash': 222, 'm': 833, 'macron': 333, 'minus': 584, 'mu': 556, 'multiply': 584, 'n': 556, 'nine': 556, 'ntilde': 556, 'numbersign': 556, 'o': 556, 'oacute': 556, 'ocircumflex': 556, 'odieresis': 556, 'oe': 944, 'ogonek': 333, 'ograve': 556, 'one': 556, 'onehalf': 834, 'onequarter': 834, 'onesuperior': 333, 'ordfeminine': 370, 'ordmasculine': 365, 'oslash': 611, 'otilde': 556, 'p': 556, 'paragraph': 537, 'parenleft': 333, 'parenright': 333, 'percent': 889, 'period': 278, 'periodcentered': 278, 'perthousand': 1000, 'plus': 584, 'plusminus': 584, 'q': 556, 'question': 556, 'questiondown': 611, 'quotedbl': 355, 'quotedblbase': 333, 'quotedblleft': 333, 'quotedblright': 333, 'quoteleft': 222, 'quoteright': 222, 'quotesinglbase': 222, 'quotesingle': 191, 'r': 333, 'registered': 737, 'ring': 333, 's': 500, 'scaron': 500, 'section': 556, 'semicolon': 278, 'seven': 556, 'six': 556, 'slash': 278, 'space': 278, 'sterling': 556, 't': 278, 'thorn': 556, 'three': 556, 'threequarters': 834, 'threesuperior': 333, 'tilde': 333, 'trademark': 1000, 'two': 556, 'twosuperior': 333, 'u': 556, 'uacute': 556, 'ucircumflex': 556, 'udieresis': 556, 'ugrave': 556, 'underscore': 556, 'v': 500, 'w': 722, 'x': 500, 'y': 500, 'yacute': 500, 'ydieresis': 500, 'yen': 556, 'z': 500, 'zcaron': 500, 'zero': 556} reportlab-3.5.34/src/reportlab/pdfbase/pdfmetrics.py0000775000175000017500000007371013544671343023320 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/pdfmetrics.py #$Header $ __version__='3.3.0' __doc__="""This provides a database of font metric information and efines Font, Encoding and TypeFace classes aimed at end users. There are counterparts to some of these in pdfbase/pdfdoc.py, but the latter focus on constructing the right PDF objects. These classes are declarative and focus on letting the user construct and query font objects. The module maintains a registry of font objects at run time. It is independent of the canvas or any particular context. It keeps a registry of Font, TypeFace and Encoding objects. Ideally these would be pre-loaded, but due to a nasty circularity problem we trap attempts to access them and do it on first access. """ import string, os, sys from reportlab.pdfbase import _fontdata from reportlab.lib.logger import warnOnce from reportlab.lib.utils import rl_isfile, rl_glob, rl_isdir, open_and_read, open_and_readlines, findInPaths, isSeq, isStr, isUnicode, isPy3 from reportlab.rl_config import defaultEncoding, T1SearchPath from reportlab.lib.rl_accel import unicode2T1, instanceStringWidthT1 from reportlab.pdfbase import rl_codecs from reportlab import ascii _notdefChar = b'n' rl_codecs.RL_Codecs.register() standardFonts = _fontdata.standardFonts standardEncodings = _fontdata.standardEncodings _typefaces = {} _encodings = {} _fonts = {} _dynFaceNames = {} #record dynamicFont face names class FontError(Exception): pass class FontNotFoundError(Exception): pass def parseAFMFile(afmFileName): """Quick and dirty - gives back a top-level dictionary with top-level items, and a 'widths' key containing a dictionary of glyph names and widths. Just enough needed for embedding. A better parser would accept options for what data you wwanted, and preserve the order.""" lines = open_and_readlines(afmFileName, 'r') if len(lines)<=1: #likely to be a MAC file if lines: lines = lines[0].split('\r') if len(lines)<=1: raise ValueError('AFM file %s hasn\'t enough data' % afmFileName) topLevel = {} glyphLevel = [] lines = [l.strip() for l in lines] lines = [l for l in lines if not l.lower().startswith('comment')] #pass 1 - get the widths inMetrics = 0 # os 'TOP', or 'CHARMETRICS' for line in lines: if line[0:16] == 'StartCharMetrics': inMetrics = 1 elif line[0:14] == 'EndCharMetrics': inMetrics = 0 elif inMetrics: chunks = line.split(';') chunks = [chunk.strip() for chunk in chunks] cidChunk, widthChunk, nameChunk = chunks[0:3] # character ID l, r = cidChunk.split() assert l == 'C', 'bad line in font file %s' % line cid = int(r) # width l, r = widthChunk.split() assert l == 'WX', 'bad line in font file %s' % line try: width = int(r) except ValueError: width = float(r) # name l, r = nameChunk.split() assert l == 'N', 'bad line in font file %s' % line name = r glyphLevel.append((cid, width, name)) # pass 2 font info inHeader = 0 for line in lines: if line[0:16] == 'StartFontMetrics': inHeader = 1 if line[0:16] == 'StartCharMetrics': inHeader = 0 elif inHeader: if line[0:7] == 'Comment': pass try: left, right = line.split(' ',1) except: raise ValueError("Header information error in afm %s: line='%s'" % (afmFileName, line)) try: right = int(right) except: pass topLevel[left] = right return (topLevel, glyphLevel) class TypeFace: def __init__(self, name): self.name = name self.glyphNames = [] self.glyphWidths = {} self.ascent = 0 self.descent = 0 # all typefaces of whatever class should have these 3 attributes. # these are the basis for family detection. self.familyName = None # should set on load/construction if possible self.bold = 0 # bold faces should set this self.italic = 0 #italic faces should set this if name == 'ZapfDingbats': self.requiredEncoding = 'ZapfDingbatsEncoding' elif name == 'Symbol': self.requiredEncoding = 'SymbolEncoding' else: self.requiredEncoding = None if name in standardFonts: self.builtIn = 1 self._loadBuiltInData(name) else: self.builtIn = 0 def _loadBuiltInData(self, name): """Called for the built in 14 fonts. Gets their glyph data. We presume they never change so this can be a shared reference.""" name = str(name) #needed for pycanvas&jython/2.1 compatibility self.glyphWidths = _fontdata.widthsByFontGlyph[name] self.glyphNames = list(self.glyphWidths.keys()) self.ascent,self.descent = _fontdata.ascent_descent[name] def getFontFiles(self): "Info function, return list of the font files this depends on." return [] def findT1File(self, ext='.pfb'): possible_exts = (ext.lower(), ext.upper()) if hasattr(self,'pfbFileName'): r_basename = os.path.splitext(self.pfbFileName)[0] for e in possible_exts: if rl_isfile(r_basename + e): return r_basename + e try: r = _fontdata.findT1File(self.name) except: afm = bruteForceSearchForAFM(self.name) if afm: if ext.lower() == '.pfb': for e in possible_exts: pfb = os.path.splitext(afm)[0] + e if rl_isfile(pfb): r = pfb else: r = None elif ext.lower() == '.afm': r = afm else: r = None if r is None: warnOnce("Can't find %s for face '%s'" % (ext, self.name)) return r def bruteForceSearchForFile(fn,searchPath=None): if searchPath is None: from reportlab.rl_config import T1SearchPath as searchPath if rl_isfile(fn): return fn bfn = os.path.basename(fn) for dirname in searchPath: if not rl_isdir(dirname): continue tfn = os.path.join(dirname,bfn) if rl_isfile(tfn): return tfn return fn def bruteForceSearchForAFM(faceName): """Looks in all AFM files on path for face with given name. Returns AFM file name or None. Ouch!""" from reportlab.rl_config import T1SearchPath for dirname in T1SearchPath: if not rl_isdir(dirname): continue possibles = rl_glob(dirname + os.sep + '*.[aA][fF][mM]') for possible in possibles: try: topDict, glyphDict = parseAFMFile(possible) if topDict['FontName'] == faceName: return possible except: t,v,b=sys.exc_info() v.args = (' '.join(map(str,v.args))+', while looking for faceName=%r' % faceName,) raise #for faceName in standardFonts: # registerTypeFace(TypeFace(faceName)) class Encoding: """Object to help you create and refer to encodings.""" def __init__(self, name, base=None): self.name = name self.frozen = 0 if name in standardEncodings: assert base is None, "Can't have a base encoding for a standard encoding" self.baseEncodingName = name self.vector = _fontdata.encodings[name] elif base == None: # assume based on the usual one self.baseEncodingName = defaultEncoding self.vector = _fontdata.encodings[defaultEncoding] elif isStr(base): baseEnc = getEncoding(base) self.baseEncodingName = baseEnc.name self.vector = baseEnc.vector[:] elif isSeq(base): self.baseEncodingName = defaultEncoding self.vector = base[:] elif isinstance(base, Encoding): # accept a vector self.baseEncodingName = base.name self.vector = base.vector[:] def __getitem__(self, index): "Return glyph name for that code point, or None" # THIS SHOULD BE INLINED FOR SPEED return self.vector[index] def __setitem__(self, index, value): # should fail if they are frozen assert self.frozen == 0, 'Cannot modify a frozen encoding' if self.vector[index]!=value: L = list(self.vector) L[index] = value self.vector = tuple(L) def freeze(self): self.vector = tuple(self.vector) self.frozen = 1 def isEqual(self, other): return self.name==other.name and tuple(self.vector)==tuple(other.vector) def modifyRange(self, base, newNames): """Set a group of character names starting at the code point 'base'.""" assert self.frozen == 0, 'Cannot modify a frozen encoding' idx = base for name in newNames: self.vector[idx] = name idx = idx + 1 def getDifferences(self, otherEnc): """ Return a compact list of the code points differing between two encodings This is in the Adobe format: list of [[b1, name1, name2, name3], [b2, name4]] where b1...bn is the starting code point, and the glyph names following are assigned consecutive code points. """ ranges = [] curRange = None for i in range(len(self.vector)): glyph = self.vector[i] if glyph==otherEnc.vector[i]: if curRange: ranges.append(curRange) curRange = [] else: if curRange: curRange.append(glyph) elif glyph: curRange = [i, glyph] if curRange: ranges.append(curRange) return ranges def makePDFObject(self): "Returns a PDF Object representing self" # avoid circular imports - this cannot go at module level from reportlab.pdfbase import pdfdoc D = {} baseEncodingName = self.baseEncodingName baseEnc = getEncoding(baseEncodingName) differences = self.getDifferences(baseEnc) #[None] * 256) # if no differences, we just need the base name if differences == []: return pdfdoc.PDFName(baseEncodingName) else: #make up a dictionary describing the new encoding diffArray = [] for range in differences: diffArray.append(range[0]) # numbers go 'as is' for glyphName in range[1:]: if glyphName is not None: # there is no way to 'unset' a character in the base font. diffArray.append('/' + glyphName) #print 'diffArray = %s' % diffArray D["Differences"] = pdfdoc.PDFArray(diffArray) if baseEncodingName in ('MacRomanEncoding','MacExpertEncoding','WinAnsiEncoding'): #https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf page 263 D["BaseEncoding"] = pdfdoc.PDFName(baseEncodingName) D["Type"] = pdfdoc.PDFName("Encoding") PD = pdfdoc.PDFDictionary(D) return PD #for encName in standardEncodings: # registerEncoding(Encoding(encName)) standardT1SubstitutionFonts = [] class Font: """Represents a font (i.e combination of face and encoding). Defines suitable machinery for single byte fonts. This is a concrete class which can handle the basic built-in fonts; not clear yet if embedded ones need a new font class or just a new typeface class (which would do the job through composition)""" _multiByte = 0 # do not want our own stringwidth _dynamicFont = 0 # do not want dynamic subsetting def __init__(self, name, faceName, encName, substitutionFonts=None): self.fontName = name face = self.face = getTypeFace(faceName) self.encoding= getEncoding(encName) self.encName = encName self.substitutionFonts = (standardT1SubstitutionFonts if face.builtIn and face.requiredEncoding is None else substitutionFonts or []) self._calcWidths() self._notdefChar = _notdefChar self._notdefFont = name=='ZapfDingbats' and self or _notdefFont def stringWidth(self, text, size, encoding='utf8'): return instanceStringWidthT1(self, text, size, encoding=encoding) def __repr__(self): return "<%s %s>" % (self.__class__.__name__, self.face.name) def _calcWidths(self): """Vector of widths for stringWidth function""" #synthesize on first request w = [0] * 256 gw = self.face.glyphWidths vec = self.encoding.vector for i in range(256): glyphName = vec[i] if glyphName is not None: try: width = gw[glyphName] w[i] = width except KeyError: import reportlab.rl_config if reportlab.rl_config.warnOnMissingFontGlyphs: print('typeface "%s" does not have a glyph "%s", bad font!' % (self.face.name, glyphName)) else: pass self.widths = w def _formatWidths(self): "returns a pretty block in PDF Array format to aid inspection" text = b'[' for i in range(256): text = text + b' ' + bytes(str(self.widths[i]),'utf8') if i == 255: text = text + b' ]' if i % 16 == 15: text = text + b'\n' return text def addObjects(self, doc): """Makes and returns one or more PDF objects to be added to the document. The caller supplies the internal name to be used (typically F1, F2... in sequence) """ # avoid circular imports - this cannot go at module level from reportlab.pdfbase import pdfdoc # construct a Type 1 Font internal object internalName = 'F' + repr(len(doc.fontMapping)+1) pdfFont = pdfdoc.PDFType1Font() pdfFont.Name = internalName pdfFont.BaseFont = self.face.name pdfFont.__Comment__ = 'Font %s' % self.fontName e = self.encoding.makePDFObject() if not isStr(e) or e in ('/MacRomanEncoding','/MacExpertEncoding','/WinAnsiEncoding'): #https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf page 255 pdfFont.Encoding = e # is it a built-in one? if not, need more stuff. if not self.face.name in standardFonts: pdfFont.FirstChar = 0 pdfFont.LastChar = 255 pdfFont.Widths = pdfdoc.PDFArray(self.widths) pdfFont.FontDescriptor = self.face.addObjects(doc) # now link it in ref = doc.Reference(pdfFont, internalName) # also refer to it in the BasicFonts dictionary fontDict = doc.idToObject['BasicFonts'].dict fontDict[internalName] = pdfFont # and in the font mappings doc.fontMapping[self.fontName] = '/' + internalName PFB_MARKER=chr(0x80) PFB_ASCII=chr(1) PFB_BINARY=chr(2) PFB_EOF=chr(3) if isPy3: def _pfbCheck(p,d,m,fn): if chr(d[p])!=PFB_MARKER or chr(d[p+1])!=m: raise ValueError('Bad pfb file\'%s\' expected chr(%d)chr(%d) at char %d, got chr(%d)chr(%d)' % (fn,ord(PFB_MARKER),ord(m),p,d[p],d[p+1])) if m==PFB_EOF: return p = p + 2 l = (((((d[p+3])<<8)|(d[p+2])<<8)|(d[p+1]))<<8)|(d[p]) p = p + 4 if p+l>len(d): raise ValueError('Bad pfb file\'%s\' needed %d+%d bytes have only %d!' % (fn,p,l,len(d))) return p, p+l else: def _pfbSegLen(p,d): '''compute a pfb style length from the first 4 bytes of string d''' return ((((ord(d[p+3])<<8)|ord(d[p+2])<<8)|ord(d[p+1]))<<8)|ord(d[p]) def _pfbCheck(p,d,m,fn): if d[p]!=PFB_MARKER or d[p+1]!=m: raise ValueError('Bad pfb file\'%s\' expected chr(%d)chr(%d) at char %d, got chr(%d)chr(%d)' % (fn,ord(PFB_MARKER),ord(m),p,ord(d[p]),ord(d[p+1]))) if m==PFB_EOF: return p = p + 2 l = _pfbSegLen(p,d) p = p + 4 if p+l>len(d): raise ValueError('Bad pfb file\'%s\' needed %d+%d bytes have only %d!' % (fn,p,l,len(d))) return p, p+l _postScriptNames2Unicode = None class EmbeddedType1Face(TypeFace): """A Type 1 font other than one of the basic 14. Its glyph data will be embedded in the PDF file.""" def __init__(self, afmFileName, pfbFileName): # ignore afm file for now TypeFace.__init__(self, None) #None is a hack, name will be supplied by AFM parse lower done #in this __init__ method. afmFileName = findInPaths(afmFileName,T1SearchPath) pfbFileName = findInPaths(pfbFileName,T1SearchPath) self.afmFileName = os.path.abspath(afmFileName) self.pfbFileName = os.path.abspath(pfbFileName) self.requiredEncoding = None self._loadGlyphs(pfbFileName) self._loadMetrics(afmFileName) def getFontFiles(self): return [self.afmFileName, self.pfbFileName] def _loadGlyphs(self, pfbFileName): """Loads in binary glyph data, and finds the four length measurements needed for the font descriptor""" pfbFileName = bruteForceSearchForFile(pfbFileName) assert rl_isfile(pfbFileName), 'file %s not found' % pfbFileName d = open_and_read(pfbFileName, 'b') s1, l1 = _pfbCheck(0,d,PFB_ASCII,pfbFileName) s2, l2 = _pfbCheck(l1,d,PFB_BINARY,pfbFileName) s3, l3 = _pfbCheck(l2,d,PFB_ASCII,pfbFileName) _pfbCheck(l3,d,PFB_EOF,pfbFileName) self._binaryData = d[s1:l1]+d[s2:l2]+d[s3:l3] self._length = len(self._binaryData) self._length1 = l1-s1 self._length2 = l2-s2 self._length3 = l3-s3 def _loadMetrics(self, afmFileName): """Loads in and parses font metrics""" #assert os.path.isfile(afmFileName), "AFM file %s not found" % afmFileName afmFileName = bruteForceSearchForFile(afmFileName) (topLevel, glyphData) = parseAFMFile(afmFileName) self.name = topLevel['FontName'] self.familyName = topLevel['FamilyName'] self.ascent = topLevel.get('Ascender', 1000) self.descent = topLevel.get('Descender', 0) self.capHeight = topLevel.get('CapHeight', 1000) self.italicAngle = topLevel.get('ItalicAngle', 0) self.stemV = topLevel.get('stemV', 0) self.xHeight = topLevel.get('XHeight', 1000) strBbox = topLevel.get('FontBBox', [0,0,1000,1000]) tokens = strBbox.split() self.bbox = [] for tok in tokens: self.bbox.append(int(tok)) glyphWidths = {} for (cid, width, name) in glyphData: glyphWidths[name] = width self.glyphWidths = glyphWidths self.glyphNames = list(glyphWidths.keys()) self.glyphNames.sort() # for font-specific encodings like Symbol, Dingbats, Carta we # need to make a new encoding as well.... if topLevel.get('EncodingScheme', None) == 'FontSpecific': global _postScriptNames2Unicode if _postScriptNames2Unicode is None: try: from reportlab.pdfbase._glyphlist import _glyphname2unicode _postScriptNames2Unicode = _glyphname2unicode del _glyphname2unicode except: _postScriptNames2Unicode = {} raise ValueError( "cannot import module reportlab.pdfbase._glyphlist module\n" "you can obtain a version from here\n" "https://www.reportlab.com/ftp/_glyphlist.py\n" ) names = [None] * 256 ex = {} rex = {} for (code, width, name) in glyphData: if 0<=code<=255: names[code] = name u = _postScriptNames2Unicode.get(name,None) if u is not None: rex[code] = u ex[u] = code encName = 'rl-dynamic-%s-encoding' % self.name.lower() rl_codecs.RL_Codecs.add_dynamic_codec(encName,ex,rex) self.requiredEncoding = encName enc = Encoding(encName, names) registerEncoding(enc) def addObjects(self, doc): """Add whatever needed to PDF file, and return a FontDescriptor reference""" from reportlab.pdfbase import pdfdoc fontFile = pdfdoc.PDFStream() fontFile.content = self._binaryData #fontFile.dictionary['Length'] = self._length fontFile.dictionary['Length1'] = self._length1 fontFile.dictionary['Length2'] = self._length2 fontFile.dictionary['Length3'] = self._length3 #fontFile.filters = [pdfdoc.PDFZCompress] fontFileRef = doc.Reference(fontFile, 'fontFile:' + self.pfbFileName) fontDescriptor = pdfdoc.PDFDictionary({ 'Type': '/FontDescriptor', 'Ascent':self.ascent, 'CapHeight':self.capHeight, 'Descent':self.descent, 'Flags': 34, 'FontBBox':pdfdoc.PDFArray(self.bbox), 'FontName':pdfdoc.PDFName(self.name), 'ItalicAngle':self.italicAngle, 'StemV':self.stemV, 'XHeight':self.xHeight, 'FontFile': fontFileRef, }) fontDescriptorRef = doc.Reference(fontDescriptor, 'fontDescriptor:' + self.name) return fontDescriptorRef def registerTypeFace(face): assert isinstance(face, TypeFace), 'Not a TypeFace: %s' % face _typefaces[face.name] = face if not face.name in standardFonts: # HACK - bold/italic do not apply for type 1, so egister # all combinations of mappings. registerFontFamily(face.name) def registerEncoding(enc): assert isinstance(enc, Encoding), 'Not an Encoding: %s' % enc if enc.name in _encodings: # already got one, complain if they are not the same if enc.isEqual(_encodings[enc.name]): enc.freeze() else: raise FontError('Encoding "%s" already registered with a different name vector!' % enc.name) else: _encodings[enc.name] = enc enc.freeze() # have not yet dealt with immutability! def registerFontFamily(family,normal=None,bold=None,italic=None,boldItalic=None): from reportlab.lib import fonts if not normal: normal = family family = family.lower() if not boldItalic: boldItalic = italic or bold or normal if not bold: bold = normal if not italic: italic = normal fonts.addMapping(family, 0, 0, normal) fonts.addMapping(family, 1, 0, bold) fonts.addMapping(family, 0, 1, italic) fonts.addMapping(family, 1, 1, boldItalic) def registerFont(font): "Registers a font, including setting up info for accelerated stringWidth" #assert isinstance(font, Font), 'Not a Font: %s' % font fontName = font.fontName if font._dynamicFont: faceName = font.face.name if fontName not in _fonts: if faceName in _dynFaceNames: ofont = _dynFaceNames[faceName] if not ofont._dynamicFont: raise ValueError('Attempt to register fonts %r %r for face %r' % (ofont, font, faceName)) else: _fonts[fontName] = ofont else: _dynFaceNames[faceName] = _fonts[fontName] = font else: _fonts[fontName] = font if font._multiByte: # CID fonts don't need to have typeface registered. #need to set mappings so it can go in a paragraph even if within # bold tags registerFontFamily(font.fontName) def getTypeFace(faceName): """Lazily construct known typefaces if not found""" try: return _typefaces[faceName] except KeyError: # not found, construct it if known if faceName in standardFonts: face = TypeFace(faceName) (face.familyName, face.bold, face.italic) = _fontdata.standardFontAttributes[faceName] registerTypeFace(face) ## print 'auto-constructing type face %s with family=%s, bold=%d, italic=%d' % ( ## face.name, face.familyName, face.bold, face.italic) return face else: #try a brute force search afm = bruteForceSearchForAFM(faceName) if afm: for e in ('.pfb', '.PFB'): pfb = os.path.splitext(afm)[0] + e if rl_isfile(pfb): break assert rl_isfile(pfb), 'file %s not found!' % pfb face = EmbeddedType1Face(afm, pfb) registerTypeFace(face) return face else: raise def getEncoding(encName): """Lazily construct known encodings if not found""" try: return _encodings[encName] except KeyError: if encName in standardEncodings: enc = Encoding(encName) registerEncoding(enc) #print 'auto-constructing encoding %s' % encName return enc else: raise def findFontAndRegister(fontName): '''search for and register a font given its name''' fontName = str(fontName) assert type(fontName) is str, 'fontName=%s is not required type str' % ascii(fontName) #it might have a font-specific encoding e.g. Symbol # or Dingbats. If not, take the default. face = getTypeFace(fontName) if face.requiredEncoding: font = Font(fontName, fontName, face.requiredEncoding) else: font = Font(fontName, fontName, defaultEncoding) registerFont(font) return font def getFont(fontName): """Lazily constructs known fonts if not found. Names of form 'face-encoding' will be built if face and encoding are known. Also if the name is just one of the standard 14, it will make up a font in the default encoding.""" try: return _fonts[fontName] except KeyError: return findFontAndRegister(fontName) _notdefFont = getFont('ZapfDingbats') standardT1SubstitutionFonts.extend([getFont('Symbol'),_notdefFont]) def getAscentDescent(fontName,fontSize=None): font = getFont(fontName) try: ascent = font.ascent descent = font.descent except: ascent = font.face.ascent descent = font.face.descent if fontSize: norm = fontSize/1000. return ascent*norm, descent*norm else: return ascent, descent def getAscent(fontName,fontSize=None): return getAscentDescent(fontName,fontSize)[0] def getDescent(fontName,fontSize=None): return getAscentDescent(fontName,fontSize)[1] def getRegisteredFontNames(): "Returns what's in there" reg = list(_fonts.keys()) reg.sort() return reg def stringWidth(text, fontName, fontSize, encoding='utf8'): """Compute width of string in points; not accelerated as fast enough because of instanceStringWidthT1/TTF""" return getFont(fontName).stringWidth(text, fontSize, encoding=encoding) def dumpFontData(): print('Registered Encodings:') keys = list(_encodings.keys()) keys.sort() for encName in keys: print(' ',encName) print() print('Registered Typefaces:') faces = list(_typefaces.keys()) faces.sort() for faceName in faces: print(' ',faceName) print() print('Registered Fonts:') k = list(_fonts.keys()) k.sort() for key in k: font = _fonts[key] print(' %s (%s/%s)' % (font.fontName, font.face.name, font.encoding.name)) def test3widths(texts): # checks all 3 algorithms give same answer, note speed import time for fontName in standardFonts[0:1]: ## t0 = time.time() ## for text in texts: ## l1 = stringWidth(text, fontName, 10) ## t1 = time.time() ## print 'fast stringWidth took %0.4f' % (t1 - t0) t0 = time.time() w = getFont(fontName).widths for text in texts: l2 = 0 for ch in text: l2 = l2 + w[ord(ch)] t1 = time.time() print('slow stringWidth took %0.4f' % (t1 - t0)) t0 = time.time() for text in texts: l3 = getFont(fontName).stringWidth(text, 10) t1 = time.time() print('class lookup and stringWidth took %0.4f' % (t1 - t0)) print() def testStringWidthAlgorithms(): rawdata = open('../../rlextra/rml2pdf/doc/rml_user_guide.prep').read() print('rawdata length %d' % len(rawdata)) print('test one huge string...') test3widths([rawdata]) print() words = rawdata.split() print('test %d shorter strings (average length %0.2f chars)...' % (len(words), 1.0*len(rawdata)/len(words))) test3widths(words) def test(): helv = TypeFace('Helvetica') registerTypeFace(helv) print(helv.glyphNames[0:30]) wombat = TypeFace('Wombat') print(wombat.glyphNames) registerTypeFace(wombat) dumpFontData() #preserve the initial values here def _reset( initial_dicts = dict( _typefaces = _typefaces.copy(), _encodings = _encodings.copy(), _fonts = _fonts.copy(), _dynFaceNames = _dynFaceNames.copy(), ) ): for k,v in initial_dicts.items(): d=globals()[k] d.clear() d.update(v) rl_codecs.RL_Codecs.reset_dynamic_codecs() from reportlab.rl_config import register_reset register_reset(_reset) del register_reset if __name__=='__main__': test() testStringWidthAlgorithms() reportlab-3.5.34/src/reportlab/pdfbase/__init__.py0000775000175000017500000000042313544671343022706 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/__init__.py __version__='3.3.0' __doc__="""Internal functionality for creating PDF files - not part of API """ reportlab-3.5.34/src/reportlab/pdfbase/_can_cmap_data.py0000664000175000017500000000344313544671343024042 0ustar rptlabrptlab00000000000000# """ This is a utility to 'can' the widths data for certain CID fonts. Now we're using Unicode, we don't need 20 CMAP files for each Asian language, nor the widths of the non-normal characters encoded in each font. we just want a dictionary of the character widths in a given font which are NOT 1000 ems wide, keyed on Unicode character (not CID). Running off CMAP files we get the following widths...:: >>> font = UnicodeCIDFont('HeiseiMin-W3') >>> font.stringWidth(unicode(','), 10) 2.5 >>> font.stringWidth(unicode('m'), 10) 7.7800000000000002 >>> font.stringWidth(u'\u6771\u4EAC', 10) 20.0 >>> """ from pprint import pprint as pp from reportlab.pdfbase._cidfontdata import defaultUnicodeEncodings from reportlab.pdfbase.cidfonts import UnicodeCIDFont def run(): buf = [] buf.append('widthsByUnichar = {}') for fontName, (language, encName) in defaultUnicodeEncodings.items(): print('handling %s : %s : %s' % (fontName, language, encName)) #this does just about all of it for us, as all the info #we need is present. font = UnicodeCIDFont(fontName) widthsByCID = font.face._explicitWidths cmap = font.encoding._cmap nonStandardWidthsByUnichar = {} for codePoint, cid in cmap.items(): width = widthsByCID.get(cid, 1000) if width != 1000: nonStandardWidthsByUnichar[chr(codePoint)] = width print('created font width map (%d items). ' % len(nonStandardWidthsByUnichar)) buf.append('widthsByUnichar["%s"] = %s' % (fontName, repr(nonStandardWidthsByUnichar))) src = '\n'.join(buf) + '\n' open('canned_widths.py','w').write(src) print('wrote canned_widths.py') if __name__=='__main__': run() reportlab-3.5.34/src/reportlab/pdfbase/_cidfontdata.py0000664000175000017500000007645413554340114023572 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/_cidfontdata.py #$Header $ __version__='3.3.0' __doc__=""" This defines additional static data to support CID fonts. Canned data is provided for the Japanese fonts supported by Adobe. We can add Chinese, Korean and Vietnamese in due course. The data was extracted by creating very simple postscript documents and running through Distiller, then examining the resulting PDFs. Each font is described as a big nested dictionary. This lets us keep code out of the module altogether and avoid circular dependencies. The encoding and font data are grouped by some standard 'language prefixes':: chs = Chinese Simplified (mainland) cht = Chinese Traditional (Taiwan) kor = Korean jpn = Japanese """ languages = ['jpn', 'kor', 'cht', 'chs'] #breaking down the lists let us check if something is present #for a specific language typeFaces_chs = ['STSong-Light'] # to do typeFaces_cht = ['MSung-Light'] #, 'MHei-Medium'] # to do typeFaces_jpn = ['HeiseiMin-W3', 'HeiseiKakuGo-W5'] typeFaces_kor = ['HYSMyeongJo-Medium','HYGothic-Medium'] allowedTypeFaces = typeFaces_chs + typeFaces_cht + typeFaces_jpn + typeFaces_kor encodings_jpn = [ # official encoding names, comments taken verbatim from PDF Spec '83pv-RKSJ-H', #Macintosh, JIS X 0208 character set with KanjiTalk6 #extensions, Shift-JIS encoding, Script Manager code 1 '90ms-RKSJ-H', #Microsoft Code Page 932 (lfCharSet 0x80), JIS X 0208 #character set with NEC and IBM extensions '90ms-RKSJ-V', #Vertical version of 90ms-RKSJ-H '90msp-RKSJ-H', #Same as 90ms-RKSJ-H, but replaces half-width Latin #characters with proportional forms '90msp-RKSJ-V', #Vertical version of 90msp-RKSJ-H '90pv-RKSJ-H', #Macintosh, JIS X 0208 character set with KanjiTalk7 #extensions, Shift-JIS encoding, Script Manager code 1 'Add-RKSJ-H', #JIS X 0208 character set with Fujitsu FMR extensions, #Shift-JIS encoding 'Add-RKSJ-V', #Vertical version of Add-RKSJ-H 'EUC-H', #JIS X 0208 character set, EUC-JP encoding 'EUC-V', #Vertical version of EUC-H 'Ext-RKSJ-H', #JIS C 6226 (JIS78) character set with NEC extensions, #Shift-JIS encoding 'Ext-RKSJ-V', #Vertical version of Ext-RKSJ-H 'H', #JIS X 0208 character set, ISO-2022-JP encoding, 'V', #Vertical version of H 'UniJIS-UCS2-H', #Unicode (UCS-2) encoding for the Adobe-Japan1 character #collection 'UniJIS-UCS2-V', #Vertical version of UniJIS-UCS2-H 'UniJIS-UCS2-HW-H', #Same as UniJIS-UCS2-H, but replaces proportional Latin #characters with half-width forms 'UniJIS-UCS2-HW-V' #Vertical version of UniJIS-UCS2-HW-H ] encodings_kor = [ 'KSC-EUC-H', # KS X 1001:1992 character set, EUC-KR encoding 'KSC-EUC-V', # Vertical version of KSC-EUC-H 'KSCms-UHC-H', # Microsoft Code Page 949 (lfCharSet 0x81), KS X 1001:1992 #character set plus 8,822 additional hangul, Unified Hangul #Code (UHC) encoding 'KSCms-UHC-V', #Vertical version of KSCms-UHC-H 'KSCms-UHC-HW-H', #Same as KSCms-UHC-H, but replaces proportional Latin # characters with halfwidth forms 'KSCms-UHC-HW-V', #Vertical version of KSCms-UHC-HW-H 'KSCpc-EUC-H', #Macintosh, KS X 1001:1992 character set with MacOS-KH #extensions, Script Manager Code 3 'UniKS-UCS2-H', #Unicode (UCS-2) encoding for the Adobe-Korea1 character collection 'UniKS-UCS2-V' #Vertical version of UniKS-UCS2-H ] encodings_chs = [ 'GB-EUC-H', # Microsoft Code Page 936 (lfCharSet 0x86), GB 2312-80 # character set, EUC-CN encoding 'GB-EUC-V', # Vertical version of GB-EUC-H 'GBpc-EUC-H', # Macintosh, GB 2312-80 character set, EUC-CN encoding, # Script Manager code 2 'GBpc-EUC-V', # Vertical version of GBpc-EUC-H 'GBK-EUC-H', # Microsoft Code Page 936 (lfCharSet 0x86), GBK character # set, GBK encoding 'GBK-EUC-V', # Vertical version of GBK-EUC-V 'UniGB-UCS2-H', # Unicode (UCS-2) encoding for the Adobe-GB1 # character collection 'UniGB-UCS2-V' # Vertical version of UniGB-UCS2-H. ] encodings_cht = [ 'B5pc-H', # Macintosh, Big Five character set, Big Five encoding, # Script Manager code 2 'B5pc-V', # Vertical version of B5pc-H 'ETen-B5-H', # Microsoft Code Page 950 (lfCharSet 0x88), Big Five # character set with ETen extensions 'ETen-B5-V', # Vertical version of ETen-B5-H 'ETenms-B5-H', # Microsoft Code Page 950 (lfCharSet 0x88), Big Five # character set with ETen extensions; this uses proportional # forms for half-width Latin characters. 'ETenms-B5-V', # Vertical version of ETenms-B5-H 'CNS-EUC-H', # CNS 11643-1992 character set, EUC-TW encoding 'CNS-EUC-V', # Vertical version of CNS-EUC-H 'UniCNS-UCS2-H', # Unicode (UCS-2) encoding for the Adobe-CNS1 # character collection 'UniCNS-UCS2-V' # Vertical version of UniCNS-UCS2-H. ] # the Identity encodings simply dump out all character # in the font in the order they were defined. allowedEncodings = (['Identity-H', 'Identity-V'] + encodings_chs + encodings_cht + encodings_jpn + encodings_kor ) defaultUnicodeEncodings = { #we ddefine a default Unicode encoding for each face name; #this should be the most commonly used horizontal unicode encoding; #also define a 3-letter language code. 'HeiseiMin-W3': ('jpn','UniJIS-UCS2-H'), 'HeiseiKakuGo-W5': ('jpn','UniJIS-UCS2-H'), 'STSong-Light': ('chs', 'UniGB-UCS2-H'), 'MSung-Light': ('cht', 'UniGB-UCS2-H'), #'MHei-Medium': ('cht', 'UniGB-UCS2-H'), 'HYSMyeongJo-Medium': ('kor', 'UniKS-UCS2-H'), 'HYGothic-Medium': ('kor','UniKS-UCS2-H'), } typeFaces_chs = ['STSong-Light'] # to do typeFaces_cht = ['MSung-Light', 'MHei-Medium'] # to do typeFaces_jpn = ['HeiseiMin-W3', 'HeiseiKakuGo-W5'] typeFaces_kor = ['HYSMyeongJo-Medium','HYGothic-Medium'] #declare separately those used for unicode unicode_encodings = [enc for enc in allowedEncodings if 'UCS2' in enc] CIDFontInfo = {} #statically describe the fonts in Adobe's Japanese Language Packs CIDFontInfo['HeiseiMin-W3'] = { 'Type':'/Font', 'Subtype':'/Type0', 'Name': '/%(internalName)s' , #<-- the internal name 'BaseFont': '/HeiseiMin-W3', 'Encoding': '/%(encodings)s', #there could be several descendant fonts if it is an old-style #type 0 compound font. For CID fonts there is just one. 'DescendantFonts': [{ 'Type':'/Font', 'Subtype':'/CIDFontType0', 'BaseFont':'/HeiseiMin-W3', 'FontDescriptor': { 'Type': '/FontDescriptor', 'Ascent': 723, 'CapHeight': 709, 'Descent': -241, 'Flags': 6, 'FontBBox': (-123, -257, 1001, 910), 'FontName': '/HeiseiMin-W3', 'ItalicAngle': 0, 'StemV': 69, 'XHeight': 450#, # 'Style': {'Panose': '<010502020400000000000000>'} }, 'CIDSystemInfo': { 'Registry': '(Adobe)', 'Ordering': '(Japan1)', 'Supplement': 2 }, #default width is 1000 em units 'DW': 1000, #widths of any which are not the default. 'W': [1, [250, 333, 408, 500], 5, [500, 833, 778, 180, 333], 10, [333, 500, 564, 250, 333, 250, 278, 500], 18, 26, 500, 27, 28, 278, 29, 31, 564, 32, [444, 921, 722, 667], 36, [667, 722, 611, 556, 722], 41, [722, 333, 389, 722, 611, 889, 722], 48, [722, 556, 722, 667, 556, 611, 722], 55, [722, 944, 722], 58, [722, 611, 333, 500, 333, 469, 500, 333, 444, 500, 444, 500, 444, 333, 500], 73, [500, 278], 75, [278, 500, 278, 778, 500], 80, 82, 500, 83, [333, 389, 278, 500], 87, [500, 722, 500], 90, [500, 444, 480, 200, 480, 333], 97, [278], 99, [200], 101, [333, 500], 103, [500, 167], 107, [500], 109, [500, 333], 111, [333, 556], 113, [556, 500], 117, [250], 119, [350, 333, 444], 123, [500], 126, [444, 333], 128, 137, 333, 138, [1000, 889, 276, 611, 722, 889, 310, 667, 278], 147, [278, 500, 722, 500, 564, 760, 564, 760], 157, 158, 300, 159, [500, 300, 750], 162, 163, 750, 164, 169, 722, 170, [667, 611], 172, 174, 611, 175, 178, 333, 179, 185, 722, 187, 191, 722, 192, [556, 444], 194, 203, 444, 204, 207, 278, 208, 214, 500, 216, 222, 500, 223, [556, 722, 611, 500, 389, 980, 444], 231, [500], 323, [500], 325, [500], 327, 389, 500] ## 'W': ( ## # starting at character ID 1, next n characters have the widths given. ## 1, (277,305,500,668,668,906,727,305,445,445,508,668,305,379,305,539), ## # all Characters from ID 17 to 26 are 668 em units wide ## 17, 26, 668, ## 27, (305, 305, 668, 668, 668, 566, 871, 727, 637, 652, 699, 574, 555, ## 676, 687, 242, 492, 664, 582, 789, 707, 734, 582, 734, 605, 605, ## 641, 668, 727, 945, 609, 609, 574, 445, 668, 445, 668, 668, 590, ## 555, 609, 547, 602, 574, 391, 609, 582, 234, 277, 539, 234, 895, ## 582, 605, 602, 602, 387, 508, 441, 582, 562, 781, 531, 570, 555, ## 449, 246, 449, 668), ## # these must be half width katakana and the like. ## 231, 632, 500 ## ) }]# end list of descendant fonts } #end HeiseiMin-W3 CIDFontInfo['HeiseiKakuGo-W5'] = {'Type':'/Font', 'Subtype':'/Type0', 'Name': '/%(internalName)s', #<-- the internal name 'BaseFont': '/HeiseiKakuGo-W5', 'Encoding': '/%(encodings)s', 'DescendantFonts': [{'Type':'/Font', 'Subtype':'/CIDFontType0', 'BaseFont':'/HeiseiKakuGo-W5', 'FontDescriptor': { 'Type': '/FontDescriptor', 'Ascent': 752, 'CapHeight': 737, 'Descent': -221, 'Flags': 4, 'FontBBox': [-92, -250, 1010, 922], 'FontName': '/HeiseKakuGo-W5', 'ItalicAngle': 0, 'StemH': 0, 'StemV': 114, 'XHeight': 553, ## 'Style': {'Panose': '<0801020b0600000000000000>'} }, 'CIDSystemInfo': { 'Registry': '(Adobe)', 'Ordering': '(Japan1)', 'Supplement': 2 }, 'DW': 1000, 'W': ( 1, (277,305,500,668,668,906,727,305,445,445,508,668,305,379,305,539), 17, 26, 668, 27, (305, 305, 668, 668, 668, 566, 871, 727, 637, 652, 699, 574, 555, 676, 687, 242, 492, 664, 582, 789, 707, 734, 582, 734, 605, 605, 641, 668, 727, 945, 609, 609, 574, 445, 668, 445, 668, 668, 590, 555, 609, 547, 602, 574, 391, 609, 582, 234, 277, 539, 234, 895, 582, 605, 602, 602, 387, 508, 441, 582, 562, 781, 531, 570, 555, 449, 246, 449, 668), 231, 632, 500 ) }] # end descendant fonts } CIDFontInfo['HYGothic-Medium'] = {'Type':'/Font', 'Subtype':'/Type0', 'Name': '/%(internalName)s', #<-- the internal name 'BaseFont': '/' + 'HYGothic-Medium', 'Encoding': '/%(encodings)s', 'DescendantFonts': [{'Type':'/Font', 'Subtype':'/CIDFontType0', 'BaseFont':'/'+'HYGothic-Medium', 'FontDescriptor': { 'Type': '/FontDescriptor', 'Ascent': 752, 'AvgWidth': -271, 'CapHeight': 737, 'Descent': -142, 'Flags': 6, 'FontBBox': [-6, -145, 1003, 880], 'FontName': '/'+'HYSMyeongJo-Medium', 'ItalicAngle': 0, 'Leading': 148, 'MaxWidth': 1000, 'MissingWidth': 500, 'StemH': 0, 'StemV': 58, 'XHeight': 553 }, 'CIDSystemInfo': { 'Registry': '(Adobe)', 'Ordering': '(Korea1)', 'Supplement': 1 }, 'DW': 1000, 'W': (1, 94, 500) }] # end descendant fonts } CIDFontInfo['HYSMyeongJo-Medium'] = {'Type':'/Font', 'Subtype':'/Type0', 'Name': '/%(internalName)s', #<-- the internal name 'BaseFont': '/' + 'HYSMyeongJo-Medium', 'Encoding': '/%(encodings)s', 'DescendantFonts': [{'Type':'/Font', 'Subtype':'/CIDFontType2', 'BaseFont':'/'+'HYSMyeongJo-Medium', 'FontDescriptor': { 'Type': '/FontDescriptor', 'Ascent': 752, 'AvgWidth': 500, 'CapHeight': 737, 'Descent': -271, 'Flags': 6, 'FontBBox': [0, -148, 1001, 880], 'FontName': '/'+'HYSMyeongJo-Medium', 'ItalicAngle': 0, 'Leading': 148, 'MaxWidth': 1000, 'MissingWidth': 500, 'StemH': 91, 'StemV': 58, 'XHeight': 553 }, 'CIDSystemInfo': { 'Registry': '(Adobe)', 'Ordering': '(Korea1)', 'Supplement': 1 }, 'DW': 1000, 'W': [1, [333, 416], 3, [416, 833, 625, 916, 833, 250, 500], 10, 11, 500, 12, [833, 291, 833, 291, 375, 625], 18, 26, 625, 27, 28, 333, 29, 30, 833, 31, [916, 500, 1000, 791, 708], 36, [708, 750, 708, 666, 750, 791, 375, 500, 791, 666, 916, 791, 750, 666, 750, 708, 666, 791], 54, [791, 750, 1000, 708], 58, [708, 666, 500, 375, 500], 63, 64, 500, 65, [333, 541, 583, 541, 583], 70, [583, 375, 583], 73, [583, 291, 333, 583, 291, 875, 583], 80, 82, 583, 83, [458, 541, 375, 583], 87, [583, 833, 625], 90, [625, 500, 583], 93, 94, 583, 95, [750] ] }] # end descendant fonts } #WARNING - not checked, just copied Korean to get some output CIDFontInfo['STSong-Light'] = {'Type':'/Font', 'Subtype':'/Type0', 'Name': '/%(internalName)s', #<-- the internal name 'BaseFont': '/' + 'STSong-Light', 'Encoding': '/%(encodings)s', 'DescendantFonts': [{'Type':'/Font', 'Subtype':'/CIDFontType0', 'BaseFont':'/'+'STSong-Light', 'FontDescriptor': { 'Type': '/FontDescriptor', 'Ascent': 752, 'CapHeight': 737, 'Descent': -271, 'Flags': 6, 'FontBBox': [-25, -254, 1000, 880], 'FontName': '/'+'STSongStd-Light', 'ItalicAngle': 0, 'Leading': 148, 'MaxWidth': 1000, 'MissingWidth': 500, 'StemH': 91, 'StemV': 58, 'XHeight': 553 }, 'CIDSystemInfo': { 'Registry': '(Adobe)', 'Ordering': '(GB1)', 'Supplement': 0 }, 'DW': 1000, 'W': [1, [207, 270, 342, 467, 462, 797, 710, 239, 374], 10, [374, 423, 605, 238, 375, 238, 334, 462], 18, 26, 462, 27, 28, 238, 29, 31, 605, 32, [344, 748, 684, 560, 695, 739, 563, 511, 729, 793, 318, 312, 666, 526, 896, 758, 772, 544, 772, 628, 465, 607, 753, 711, 972, 647, 620, 607, 374, 333, 374, 606, 500, 239, 417, 503, 427, 529, 415, 264, 444, 518, 241, 230, 495, 228, 793, 527, 524], 81, [524, 504, 338, 336, 277, 517, 450, 652, 466, 452, 407, 370, 258, 370, 605] ] }] # end descendant fonts } CIDFontInfo['MSung-Light'] = {'Type':'/Font', 'Subtype':'/Type0', 'Name': '/%(internalName)s', #<-- the internal name 'BaseFont': '/' + 'MSung-Light', 'Encoding': '/%(encodings)s', 'DescendantFonts': [{'Type':'/Font', 'Subtype':'/CIDFontType0', 'BaseFont':'/'+'MSung-Light', 'FontDescriptor': { 'Type': '/FontDescriptor', 'Ascent': 752, 'CapHeight': 737, 'Descent': -271, 'Flags': 6, 'FontBBox': [-160, -249, 1015, 888], 'FontName': '/'+'MSung-Light', 'ItalicAngle': 0, 'Leading': 148, 'MaxWidth': 1000, 'MissingWidth': 500, 'StemH': 45, 'StemV': 58, 'XHeight': 553 }, 'CIDSystemInfo': { 'Registry': '(Adobe)', 'Ordering': '(CNS1)', 'Supplement': 1 }, 'DW': 1000, 'W': [1, 2, 250, 3, [408, 668, 490, 875, 698, 250, 240], 10, [240, 417, 667, 250, 313, 250, 520, 500], 18, 26, 500, 27, 28, 250, 29, 31, 667, 32, [396, 921, 677, 615, 719, 760, 625, 552, 771, 802, 354], 43, [354, 781, 604, 927, 750, 823, 563, 823, 729, 542, 698, 771, 729, 948, 771, 677, 635, 344, 520, 344, 469, 500, 250, 469, 521, 427, 521, 438, 271, 469, 531, 250], 75, [250, 458, 240, 802, 531, 500, 521], 82, [521, 365, 333, 292, 521, 458, 677, 479, 458, 427, 480, 496, 480, 667]] }] # end descendant fonts } #this data was derived from the above width information and removes all dependency on CMAP files as long as we only use the unicode fonts. widthsByUnichar = {} widthsByUnichar["MSung-Light"] = {u' ': 250, u'$': 490, u'(': 240, u',': 250, u'0': 500, u'4': 500, u'8': 500, u'<': 667, u'@': 921, u'D': 760, u'H': 802, u'L': 604, u'P': 563, u'T': 698, u'X': 771, u'\\': 520, u'`': 250, u'd': 521, u'h': 531, u'l': 240, u'p': 521, u't': 292, u'x': 479, u'|': 496, u'#': 668, u"'": 250, u'+': 667, u'/': 520, u'3': 500, u'7': 500, u';': 250, u'?': 396, u'C': 719, u'G': 771, u'K': 781, u'O': 823, u'S': 542, u'W': 948, u'[': 344, u'_': 500, u'c': 427, u'g': 469, u'k': 458, u'o': 500, u's': 333, u'w': 677, u'{': 480, u'"': 408, u'&': 698, u'*': 417, u'.': 250, u'2': 500, u'6': 500, u':': 250, u'>': 667, u'B': 615, u'F': 552, u'J': 354, u'N': 750, u'R': 729, u'V': 729, u'Z': 635, u'^': 469, u'b': 521, u'f': 271, u'j': 250, u'n': 531, u'r': 365, u'v': 458, u'z': 427, u'~': 667, u'!': 250, u'%': 875, u')': 240, u'-': 313, u'1': 500, u'5': 500, u'9': 500, u'=': 667, u'A': 677, u'E': 625, u'I': 354, u'M': 927, u'Q': 823, u'U': 771, u'Y': 677, u']': 344, u'a': 469, u'e': 438, u'i': 250, u'm': 802, u'q': 521, u'u': 521, u'y': 458, u'}': 480} widthsByUnichar["HeiseiKakuGo-W5"] = {u'\uff81': 500, u'\uff85': 500, u'\uff89': 500, u'\uff8d': 500, u'\uff91': 500, u'\uff95': 500, u'\uff99': 500, u'\uff9d': 500, u' ': 277, u'$': 668, u'(': 445, u',': 305, u'0': 668, u'\u0332': 668, u'4': 668, u'8': 668, u'<': 668, u'@': 871, u'D': 699, u'H': 687, u'L': 582, u'P': 582, u'T': 641, u'X': 609, u'`': 590, u'\uff62': 500, u'd': 602, u'\uff66': 500, u'h': 582, u'\uff6a': 500, u'l': 234, u'\uff6e': 500, u'p': 602, u'\uff72': 500, u't': 441, u'\uff76': 500, u'x': 531, u'\uff7a': 500, u'|': 246, u'\uff7e': 500, u'\uff82': 500, u'\uff86': 500, u'\uff8a': 500, u'\uff8e': 500, u'\uff92': 500, u'\uff96': 500, u'\uff9a': 500, u'\uff9e': 500, u'#': 668, u"'": 305, u'+': 668, u'/': 539, u'3': 668, u'7': 668, u';': 305, u'?': 566, u'C': 652, u'G': 676, u'K': 664, u'O': 734, u'S': 605, u'W': 945, u'[': 445, u'_': 668, u'\uff61': 500, u'c': 547, u'\uff65': 500, u'g': 609, u'\uff69': 500, u'k': 539, u'\uff6d': 500, u'o': 605, u'\uff71': 500, u's': 508, u'\uff75': 500, u'w': 781, u'\uff79': 500, u'{': 449, u'\uff7d': 500, u'\u0300': 590, u'\uff83': 500, u'\u2002': 500, u'\uff87': 500, u'\uff8b': 500, u'\uff8f': 500, u'\uff93': 500, u'\uff97': 500, u'\uff9b': 500, u'\uff9f': 500, u'"': 500, u'\xa5': 668, u'&': 727, u'*': 508, u'.': 305, u'2': 668, u'6': 668, u':': 305, u'>': 668, u'B': 637, u'F': 555, u'J': 492, u'N': 707, u'\u203e': 500, u'R': 605, u'V': 727, u'Z': 574, u'^': 668, u'b': 609, u'\uff64': 500, u'f': 391, u'\uff68': 500, u'j': 277, u'\uff6c': 500, u'n': 582, u'\uff70': 500, u'r': 387, u'\uff74': 500, u'v': 562, u'\uff78': 500, u'z': 555, u'\uff7c': 500, u'~': 668, u'\uff80': 500, u'\u0303': 668, u'\uff84': 500, u'\uff88': 500, u'\uff8c': 500, u'\u2011': 379, u'\uff90': 500, u'\uff94': 500, u'\uff98': 500, u'\uff9c': 500, u'!': 305, u'%': 906, u')': 445, u'-': 379, u'1': 668, u'5': 668, u'9': 668, u'=': 668, u'A': 727, u'E': 574, u'I': 242, u'M': 789, u'Q': 734, u'U': 668, u'Y': 609, u']': 445, u'a': 555, u'\uff63': 500, u'e': 574, u'\uff67': 500, u'i': 234, u'\uffe8': 500, u'\uff6b': 500, u'm': 895, u'\uff6f': 500, u'q': 602, u'\uff73': 500, u'u': 582, u'\uff77': 500, u'y': 570, u'\uff7b': 500, u'}': 449, u'\uff7f': 500} widthsByUnichar["HYSMyeongJo-Medium"] = {u' ': 333, u'$': 625, u'(': 500, u',': 291, u'0': 625, u'4': 625, u'8': 625, u'<': 833, u'D': 750, u'H': 791, u'L': 666, u'P': 666, u'T': 791, u'X': 708, u'\\': 375, u'`': 333, u'd': 583, u'h': 583, u'l': 291, u'p': 583, u't': 375, u'x': 625, u'|': 583, u'#': 833, u"'": 250, u'+': 833, u'/': 375, u'3': 625, u'7': 625, u';': 333, u'?': 500, u'C': 708, u'G': 750, u'K': 791, u'O': 750, u'S': 666, u'[': 500, u'_': 500, u'c': 541, u'g': 583, u'k': 583, u'o': 583, u's': 541, u'w': 833, u'{': 583, u'"': 416, u'&': 833, u'*': 500, u'.': 291, u'2': 625, u'6': 625, u':': 333, u'>': 916, u'B': 708, u'F': 666, u'J': 500, u'N': 791, u'R': 708, u'V': 750, u'Z': 666, u'^': 500, u'b': 583, u'f': 375, u'j': 333, u'n': 583, u'r': 458, u'v': 583, u'z': 500, u'~': 750, u'!': 416, u'%': 916, u')': 500, u'-': 833, u'1': 625, u'5': 625, u'9': 625, u'=': 833, u'A': 791, u'E': 708, u'I': 375, u'M': 916, u'Q': 750, u'U': 791, u'Y': 708, u']': 500, u'a': 541, u'e': 583, u'i': 291, u'm': 875, u'q': 583, u'u': 583, u'y': 625, u'}': 583} widthsByUnichar["STSong-Light"] = {u' ': 207, u'$': 462, u'(': 374, u',': 238, u'0': 462, u'4': 462, u'8': 462, u'<': 605, u'@': 748, u'D': 739, u'H': 793, u'L': 526, u'P': 544, u'T': 607, u'X': 647, u'\\': 333, u'`': 239, u'd': 529, u'h': 518, u'l': 228, u'p': 524, u't': 277, u'x': 466, u'|': 258, u'#': 467, u"'": 239, u'+': 605, u'/': 334, u'3': 462, u'7': 462, u';': 238, u'?': 344, u'C': 695, u'G': 729, u'K': 666, u'O': 772, u'S': 465, u'W': 972, u'[': 374, u'_': 500, u'c': 427, u'g': 444, u'k': 495, u'o': 524, u's': 336, u'w': 652, u'{': 370, u'"': 342, u'&': 710, u'*': 423, u'.': 238, u'2': 462, u'6': 462, u':': 238, u'>': 605, u'B': 560, u'F': 511, u'J': 312, u'N': 758, u'R': 628, u'V': 711, u'Z': 607, u'^': 606, u'b': 503, u'f': 264, u'j': 230, u'n': 527, u'r': 338, u'v': 450, u'z': 407, u'~': 605, u'!': 270, u'%': 797, u')': 374, u'-': 375, u'1': 462, u'5': 462, u'9': 462, u'=': 605, u'A': 684, u'E': 563, u'I': 318, u'M': 896, u'Q': 772, u'U': 753, u'Y': 620, u']': 374, u'a': 417, u'e': 415, u'i': 241, u'm': 793, u'q': 504, u'u': 517, u'y': 452, u'}': 370} widthsByUnichar["HeiseiMin-W3"] = {u'\uff81': 500, u'\u0302': 333, u'\uff85': 500, u'\u0306': 333, u'\uff89': 500, u'\u030a': 333, u'\uff8d': 500, u'\uff91': 500, u'\ufb02': 556, u'\uff95': 500, u'\uff99': 500, u'\uff9d': 500, u' ': 250, u'\xa3': 500, u'\u2122': 980, u'$': 500, u'(': 333, u'\xab': 500, u',': 250, u'\xaf': 333, u'0': 500, u'\xb3': 300, u'\u0332': 500, u'4': 500, u'\xb7': 250, u'8': 500, u'\xbb': 500, u'<': 564, u'\xbf': 444, u'@': 921, u'\xc3': 722, u'\u0142': 278, u'D': 722, u'\xc7': 667, u'H': 722, u'\xcb': 611, u'L': 611, u'\xcf': 333, u'P': 556, u'\xd3': 722, u'\u0152': 889, u'T': 611, u'X': 722, u'\xdb': 722, u'\\': 278, u'\xdf': 500, u'\uff64': 500, u'`': 333, u'\xe3': 444, u'\uff62': 500, u'd': 500, u'\xe7': 444, u'\uff66': 500, u'h': 500, u'\xeb': 444, u'\uff6a': 500, u'l': 278, u'\xef': 278, u'\uff6e': 500, u'p': 500, u'\xf3': 500, u'\uff72': 500, u't': 278, u'\uff76': 500, u'x': 500, u'\xfb': 500, u'\uff7a': 500, u'|': 200, u'\xff': 500, u'\u017e': 444, u'\u0301': 333, u'\uff82': 500, u'\u0305': 500, u'\uff86': 500, u'\uff8a': 500, u'\uff8e': 500, u'\u2013': 500, u'\uff92': 500, u'\uff96': 500, u'\uff9a': 500, u'\uff9e': 500, u'#': 500, u'\xa4': 500, u"'": 180, u'\u203a': 333, u'+': 564, u'\xac': 564, u'/': 278, u'\u0131': 278, u'3': 500, u'7': 500, u'\xb8': 333, u';': 278, u'\xbc': 750, u'?': 444, u'\u0141': 611, u'\xc0': 722, u'C': 667, u'\xc4': 722, u'G': 722, u'\xc8': 611, u'K': 722, u'\xcc': 333, u'O': 722, u'\xd0': 722, u'S': 556, u'\u2022': 350, u'\xd4': 722, u'W': 944, u'\uff78': 500, u'\xd8': 722, u'[': 333, u'\xdc': 722, u'_': 500, u'\u0161': 389, u'\xe0': 444, u'c': 444, u'\uff65': 500, u'\xe4': 444, u'g': 500, u'\uff69': 500, u'\xe8': 444, u'k': 500, u'\uff6d': 500, u'\xec': 278, u'o': 500, u'\uff71': 500, u'\xf0': 500, u's': 389, u'\uff75': 500, u'\xf4': 500, u'w': 722, u'\uff79': 500, u'\xf8': 500, u'{': 480, u'\uff7e': 500, u'\u017d': 611, u'\xfc': 500, u'\u0300': 333, u'\uff83': 500, u'\u2002': 500, u'\u0304': 333, u'\uff87': 500, u'\u0308': 333, u'\uff8b': 500, u'\u030c': 333, u'\uff8f': 500, u'\uff93': 500, u'\u2012': 500, u'\uff97': 500, u'\uff9b': 500, u'\u201a': 333, u'\uff9f': 500, u'\u201e': 444, u'\xa1': 333, u'"': 408, u'\xa5': 500, u'&': 778, u'\xa9': 760, u'\u0328': 333, u'*': 500, u'\xad': 564, u'.': 250, u'\uffe8': 500, u'2': 500, u'\xb5': 500, u'6': 500, u'\xb9': 300, u':': 278, u'\xbd': 750, u'>': 564, u'\xc1': 722, u'\uff61': 500, u'B': 667, u'\xc5': 722, u'F': 556, u'\xc9': 611, u'J': 389, u'\xcd': 333, u'N': 722, u'\xd1': 722, u'\u203e': 500, u'R': 667, u'\xd5': 722, u'V': 722, u'\xd9': 722, u'Z': 611, u'\xdd': 722, u'^': 469, u'\xe1': 444, u'\u0160': 556, u'b': 500, u'\xe5': 444, u'\u2039': 333, u'f': 333, u'\xe9': 444, u'\uff68': 500, u'j': 278, u'\xed': 278, u'\uff6c': 500, u'n': 500, u'\xf1': 500, u'\uff70': 500, u'r': 333, u'\xf5': 500, u'\uff74': 500, u'v': 500, u'\xf9': 500, u'\u0178': 722, u'z': 444, u'\xfd': 500, u'\uff7c': 500, u'~': 333, u'\uff80': 500, u'\u0303': 333, u'\uff84': 500, u'\u0307': 333, u'\uff88': 500, u'\u030b': 333, u'\uff8c': 500, u'\u2011': 333, u'\uff90': 500, u'\uff94': 500, u'\uff98': 500, u'\uff9c': 500, u'\u2044': 167, u'!': 333, u'\xa2': 500, u'%': 833, u'\u0327': 333, u'\xa6': 200, u')': 333, u'\xaa': 276, u'-': 333, u'\xae': 760, u'1': 500, u'\xb2': 300, u'5': 500, u'9': 500, u'\xba': 310, u'=': 564, u'\xbe': 750, u'A': 722, u'\u01c0': 200, u'\xc2': 722, u'E': 611, u'\xc6': 889, u'I': 333, u'\xca': 611, u'M': 889, u'\xce': 333, u'Q': 722, u'\u0153': 722, u'\xd2': 722, u'U': 722, u'\xd6': 722, u'Y': 722, u'\ufb01': 556, u'\xda': 722, u']': 333, u'\xde': 556, u'a': 444, u'\uff63': 500, u'\xe2': 444, u'e': 444, u'\uff67': 500, u'\xe6': 667, u'i': 278, u'\uff7d': 500, u'\uff6b': 500, u'\xea': 444, u'm': 778, u'\uff6f': 500, u'\xee': 278, u'q': 500, u'\uff73': 500, u'\xf2': 500, u'u': 500, u'\uff77': 500, u'\xf6': 500, u'y': 500, u'\uff7b': 500, u'\xfa': 500, u'}': 480, u'\uff7f': 500, u'\xfe': 500} widthsByUnichar["HYGothic-Medium"] = {u' ': 500, u'$': 500, u'(': 500, u',': 500, u'0': 500, u'4': 500, u'8': 500, u'<': 500, u'@': 500, u'D': 500, u'H': 500, u'L': 500, u'P': 500, u'T': 500, u'X': 500, u'\\': 500, u'`': 500, u'd': 500, u'h': 500, u'l': 500, u'p': 500, u't': 500, u'x': 500, u'|': 500, u'#': 500, u"'": 500, u'+': 500, u'/': 500, u'3': 500, u'7': 500, u';': 500, u'?': 500, u'C': 500, u'G': 500, u'K': 500, u'O': 500, u'S': 500, u'W': 500, u'[': 500, u'_': 500, u'c': 500, u'g': 500, u'k': 500, u'o': 500, u's': 500, u'w': 500, u'{': 500, u'"': 500, u'&': 500, u'*': 500, u'.': 500, u'2': 500, u'6': 500, u':': 500, u'>': 500, u'B': 500, u'F': 500, u'J': 500, u'N': 500, u'R': 500, u'V': 500, u'Z': 500, u'^': 500, u'b': 500, u'f': 500, u'j': 500, u'n': 500, u'r': 500, u'v': 500, u'z': 500, u'!': 500, u'%': 500, u')': 500, u'-': 500, u'1': 500, u'5': 500, u'9': 500, u'=': 500, u'A': 500, u'E': 500, u'I': 500, u'M': 500, u'Q': 500, u'U': 500, u'Y': 500, u']': 500, u'a': 500, u'e': 500, u'i': 500, u'm': 500, u'q': 500, u'u': 500, u'y': 500, u'}': 500} #shift-jis saying 'This is Heisei-Minchou' message1 = '\202\261\202\352\202\315\225\275\220\254\226\276\222\251\202\305\202\267\201B' message2 = '\202\261\202\352\202\315\225\275\220\254\212p\203S\203V\203b\203N\202\305\202\267\201B' ##def pswidths(text): ## words = text.split() ## out = [] ## for word in words: ## if word == '[': ## out.append(word) ## else: ## out.append(word + ',') ## return eval(''.join(out),{}) reportlab-3.5.34/src/reportlab/pdfbase/pdfdoc.py0000775000175000017500000026031713544671343022420 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/pdfbase/pdfdoc.py __version__='3.4.1' __doc__=""" The module pdfdoc.py handles the 'outer structure' of PDF documents, ensuring that all objects are properly cross-referenced and indexed to the nearest byte. The 'inner structure' - the page descriptions - are presumed to be generated before each page is saved. pdfgen.py calls this and provides a 'canvas' object to handle page marking operators. piddlePDF calls pdfgen and offers a high-level interface. The classes within this generally mirror structures in the PDF file and are not part of any public interface. Instead, canvas and font classes are made available elsewhere for users to manipulate. """ import types, binascii, codecs, time from collections import OrderedDict from reportlab.pdfbase import pdfutils from reportlab import rl_config, ascii from reportlab.lib.utils import import_zlib, open_for_read, makeFileName, isSeq, isBytes, isUnicode, _digester, isStr, bytestr, isPy3, annotateException, TimeStamp from reportlab.lib.rl_accel import escapePDF, fp_str, asciiBase85Encode, asciiBase85Decode from reportlab.pdfbase import pdfmetrics from hashlib import md5 from sys import platform from sys import version_info from sys import stderr if platform[:4] == 'java' and version_info[:2] == (2, 1): # workaround for list()-bug in Jython 2.1 (should be fixed in 2.2) def list(sequence): def f(x): return x return list(map(f, sequence)) class PDFError(Exception): pass # __InternalName__ is a special attribute that can only be set by the Document arbitrator __InternalName__ = "__InternalName__" # __RefOnly__ marks reference only elements that must be formatted on top level __RefOnly__ = "__RefOnly__" # __Comment__ provides a (one line) comment to inline with an object ref, if present # if it is more than one line then percentize it... __Comment__ = "__Comment__" # name for standard font dictionary BasicFonts = "BasicFonts" # name for the pages object Pages = "Pages" PDF_VERSION_DEFAULT = (1, 3) PDF_SUPPORT_VERSION = dict( #map keyword to min version that supports it transparency = (1, 4), ) if isPy3: def pdfdocEnc(x): return x.encode('extpdfdoc') if isinstance(x,str) else x else: def pdfdocEnc(x): return x.encode('extpdfdoc') if isinstance(x,unicode) else x def format(element, document, toplevel=0): """Indirection step for formatting. Ensures that document parameters alter behaviour of formatting for all elements. """ if isinstance(element,PDFObject): if not toplevel and hasattr(element, __RefOnly__): # the object cannot be a component at non top level. # make a reference to it and return it's format return document.Reference(element).format(document) else: f = element.format(document) if not rl_config.invariant and rl_config.pdfComments and hasattr(element, __Comment__): f = pdfdocEnc("%% %s\n" % element.__Comment__)+f return f elif type(element) in (float, int): #use a controlled number formatting routine #instead of str, so Jython/Python etc do not differ return pdfdocEnc(fp_str(element)) elif isBytes(element): return element elif isUnicode(element): return pdfdocEnc(element) else: return pdfdocEnc(str(element)) def xObjectName(externalname): return "FormXob.%s" % externalname # backwards compatibility formName = xObjectName # no encryption class NoEncryption: def encode(self, t): "encode a string, stream, text" return t def prepare(self, document): # get ready to do encryption pass def register(self, objnum, version): # enter a new direct object pass def info(self): # the representation of self in file if any (should be None or PDFDict) return None class PDFObject(object): pass class DummyDoc(PDFObject): "used to bypass encryption when required" encrypt = NoEncryption() ### the global document structure manager class PDFDocument(PDFObject): # set this to define filters defaultStreamFilters = None encrypt = NoEncryption() # default no encryption def __init__(self, dummyoutline=0, compression=rl_config.pageCompression, invariant=rl_config.invariant, filename=None, pdfVersion=PDF_VERSION_DEFAULT, lang=None, ): self._ID = None self.objectcounter = 0 self.shadingCounter = 0 self.inObject = None self.pageCounter = 1 # allow None value to be passed in to mean 'give system defaults' if invariant is None: self.invariant = rl_config.invariant else: self.invariant = invariant self.setCompression(compression) self._pdfVersion = pdfVersion # signature for creating PDF ID sig = self.signature = md5() sig.update(b"a reportlab document") self._timeStamp = TimeStamp(self.invariant) cat = self._timeStamp.t cat = ascii(cat) sig.update(bytestr(cat)) # initialize with timestamp digest # mapping of internal identifier ("Page001") to PDF objectnumber and generation number (34, 0) self.idToObjectNumberAndVersion = {} # mapping of internal identifier ("Page001") to PDF object (PDFPage instance) self.idToObject = {} # internal id to file location self.idToOffset = {} # number to id self.numberToId = {} cat = self.Catalog = self._catalog = PDFCatalog() pages = self.Pages = PDFPages() cat.Pages = pages lang = lang if lang else rl_config.documentLang if lang: cat.Lang = PDFString(lang) self.outline = self.Outlines = cat.Outlines = PDFOutlines0() if dummyoutline else PDFOutlines() self.info = PDFInfo() #self.Reference(self.Catalog) #self.Reference(self.Info) self.fontMapping = {} #make an empty font dictionary DD = PDFDictionary({}) DD.__Comment__ = "The standard fonts dictionary" self.Reference(DD, BasicFonts) self.delayedFonts = [] def setCompression(self, onoff): # XXX: maybe this should also set self.defaultStreamFilters? self.compression = onoff def ensureMinPdfVersion(self, *keys): "Ensure that the pdf version is greater than or equal to that specified by the keys" for k in keys: self._pdfVersion = max(self._pdfVersion, PDF_SUPPORT_VERSION[k]) def updateSignature(self, thing): "add information to the signature" if self._ID: return # but not if its used already! self.signature.update(bytestr(thing)) def ID(self): "A unique fingerprint for the file (unless in invariant mode)" if self._ID: return self._ID digest = self.signature.digest() doc = DummyDoc() IDs = PDFText(digest,enc='raw').format(doc) self._ID = (b'\n['+IDs+IDs+b']\n% ReportLab generated PDF document -- digest (http://www.reportlab.com)\n') return self._ID def SaveToFile(self, filename, canvas): if getattr(self,'_savedToFile',False): raise RuntimeError("class %s instances can only be saved once" % self.__class__.__name__) self._savedToFile = True if hasattr(getattr(filename, "write",None),'__call__'): myfile = 0 f = filename filename = getattr(f,'name','') if isinstance(filename,int): filename = ''% filename filename = makeFileName(filename) else : myfile = 1 filename = makeFileName(filename) f = open(filename, "wb") data = self.GetPDFData(canvas) if isUnicode(data): data = data.encode('latin1') f.write(data) if myfile: f.close() import os if os.name=='mac': from reportlab.lib.utils import markfilename markfilename(filename) # do platform specific file junk if getattr(canvas,'_verbosity',None): print('saved %s' % (filename,)) def GetPDFData(self, canvas): # realize delayed fonts for fnt in self.delayedFonts: fnt.addObjects(self) # add info stuff to signature self.info.invariant = self.invariant self.info.digest(self.signature) ### later: maybe add more info to sig? # prepare outline self.Reference(self.Catalog) self.Reference(self.info) self.Outlines.prepare(self, canvas) if self.Outlines.ready<0: self.Catalog.Outlines = None return self.format() def inPage(self): """specify the current object as a page (enables reference binding and other page features)""" if self.inObject is not None: if self.inObject=="page": return raise ValueError("can't go in page already in object %s" % self.inObject) self.inObject = "page" def inForm(self): """specify that we are in a form xobject (disable page features, etc)""" # don't need this check anymore since going in a form pushes old context at canvas level. #if self.inObject not in ["form", None]: # raise ValueError("can't go in form already in object %s" % self.inObject) self.inObject = "form" # don't need to do anything else, I think... def getInternalFontName(self, psfontname): fm = self.fontMapping if psfontname in fm: return fm[psfontname] else: try: # does pdfmetrics know about it? if so, add fontObj = pdfmetrics.getFont(psfontname) if fontObj._dynamicFont: raise PDFError("getInternalFontName(%s) called for a dynamic font" % repr(psfontname)) fontObj.addObjects(self) return fm[psfontname] except KeyError: raise PDFError("Font %s not known!" % repr(psfontname)) def thisPageName(self): return "Page"+repr(self.pageCounter) def thisPageRef(self): return PDFObjectReference(self.thisPageName()) def addPage(self, page): name = self.thisPageName() self.Reference(page, name) self.Pages.addPage(page) self.pageCounter += 1 self.inObject = None def addForm(self, name, form): """add a Form XObject.""" # XXX should check that name is a legal PDF name if self.inObject != "form": self.inForm() self.Reference(form, xObjectName(name)) self.inObject = None def annotationName(self, externalname): return "Annot.%s"%externalname def addAnnotation(self, name, annotation): self.Reference(annotation, self.annotationName(name)) def refAnnotation(self, name): internalname = self.annotationName(name) return PDFObjectReference(internalname) def addShading(self, shading): name = "Sh%d" % self.shadingCounter self.Reference(shading, name) self.shadingCounter += 1 return name def addColor(self,cmyk): sname = cmyk.spotName if not sname: if cmyk.cyan==0 and cmyk.magenta==0 and cmyk.yellow==0: sname = 'BLACK' elif cmyk.black==0 and cmyk.magenta==0 and cmyk.yellow==0: sname = 'CYAN' elif cmyk.cyan==0 and cmyk.black==0 and cmyk.yellow==0: sname = 'MAGENTA' elif cmyk.cyan==0 and cmyk.magenta==0 and cmyk.black==0: sname = 'YELLOW' if not sname: raise ValueError("CMYK colour %r used without a spotName" % cmyk) else: cmyk = cmyk.clone(spotName = sname) name = PDFName(sname)[1:] if name not in self.idToObject: sep = PDFSeparationCMYKColor(cmyk).value() #PDFArray([/Separation /name /DeviceCMYK tint_tf]) self.Reference(sep,name) return name,sname def setTitle(self, title): "embeds in PDF file" if title is None: self.info.title = '(anonymous)' else: self.info.title = title def setAuthor(self, author): "embedded in PDF file" #allow resetting to clear it if author is None: self.info.author = '(anonymous)' else: self.info.author = author def setSubject(self, subject): "embeds in PDF file" #allow resetting to clear it if subject is None: self.info.subject = '(unspecified)' else: self.info.subject = subject def setCreator(self, creator): "embeds in PDF file" if creator is None: #allow resetting to clear it self.info.creator = '(unspecified)' else: self.info.creator = creator def setProducer(self, producer): "embeds in PDF file" if producer is None: self.info.producer = _default_producer else: self.info.producer = producer def setKeywords(self, keywords): "embeds a string containing keywords in PDF file" #allow resetting to clear it but ensure it's a string if keywords is None: self.info.keywords = '' else: self.info.keywords = keywords def setDateFormatter(self, dateFormatter): self.info._dateFormatter = dateFormatter def getAvailableFonts(self): fontnames = list(self.fontMapping.keys()) # the standard 14 are also always available! (even if not initialized yet) from reportlab.pdfbase import _fontdata for name in _fontdata.standardFonts: if name not in fontnames: fontnames.append(name) fontnames.sort() return fontnames def format(self): # register the Catalog/INfo and then format the objects one by one until exhausted # (possible infinite loop if there is a bug that continually makes new objects/refs...) # Prepare encryption self.encrypt.prepare(self) cat = self.Catalog info = self.info self.Reference(cat) self.Reference(info) # register the encryption dictionary if present encryptref = None encryptinfo = self.encrypt.info() if encryptinfo: encryptref = self.Reference(encryptinfo) # make std fonts (this could be made optional counter = 0 # start at first object (object 1 after preincrement) ids = [] # the collection of object ids in object number order numbertoid = self.numberToId idToNV = self.idToObjectNumberAndVersion idToOb = self.idToObject idToOf = self.idToOffset ### note that new entries may be "appended" DURING FORMATTING # __accum__ allows objects to know where they are in the file etc etc self.__accum__ = File = PDFFile(self._pdfVersion) # output collector while True: counter += 1 # do next object... if counter not in numbertoid: break oid = numbertoid[counter] #printidToOb obj = idToOb[oid] IO = PDFIndirectObject(oid, obj) # register object number and version IOf = IO.format(self) # add a comment to the PDF output if not rl_config.invariant and rl_config.pdfComments: try: classname = obj.__class__.__name__ except: classname = ascii(obj) File.add("%% %s: class %s \n" % (ascii(oid), classname[:50])) offset = File.add(IOf) idToOf[oid] = offset ids.append(oid) del self.__accum__ # sanity checks (must happen AFTER formatting) lno = len(numbertoid) if counter-1!=lno: raise ValueError("counter %s doesn't match number to id dictionary %s" %(counter, lno)) # now add the xref xref = PDFCrossReferenceTable() xref.addsection(0, ids) xreff = xref.format(self) xrefoffset = File.add(xreff) # now add the trailer trailer = PDFTrailer( startxref = xrefoffset, Size = lno+1, Root = self.Reference(cat), Info = self.Reference(info), Encrypt = encryptref, ID = self.ID(), ) trailerf = trailer.format(self) File.add(trailerf) for ds in getattr(self,'_digiSigs',[]): ds.sign(File) # return string format for pdf file return File.format(self) def hasForm(self, name): """test for existence of named form""" internalname = xObjectName(name) return internalname in self.idToObject def getFormBBox(self, name, boxType="MediaBox"): """get the declared bounding box of the form as a list. If you specify a different PDF box definition (e.g. the ArtBox) and it has one, that's what you'll get.""" internalname = xObjectName(name) if internalname in self.idToObject: theform = self.idToObject[internalname] if hasattr(theform,'_extra_pageCatcher_info'): return theform._extra_pageCatcher_info[boxType] if isinstance(theform, PDFFormXObject): # internally defined form return theform.BBoxList() elif isinstance(theform, PDFStream): # externally defined form return list(theform.dictionary.dict[boxType].sequence) else: raise ValueError("I don't understand the form instance %s" % repr(name)) def getXObjectName(self, name): """Lets canvas find out what form is called internally. Never mind whether it is defined yet or not.""" return xObjectName(name) def xobjDict(self, formnames): """construct an xobject dict (for inclusion in a resource dict, usually) from a list of form names (images not yet supported)""" D = {} for name in formnames: internalname = xObjectName(name) reference = PDFObjectReference(internalname) D[internalname] = reference #print "xobjDict D", D return PDFDictionary(D) def Reference(self, obj, name=None): ### note references may "grow" during the final formatting pass: don't use d.keys()! # don't make references to other references, or non instances, unless they are named! iob = isinstance(obj,PDFObject) idToObject = self.idToObject if name is None and (not iob or obj.__class__ is PDFObjectReference): return obj if hasattr(obj, __InternalName__): # already registered intname = obj.__InternalName__ if name is not None and name!=intname: raise ValueError("attempt to reregister object %s with new name %s" % ( repr(intname), repr(name))) if intname not in idToObject: raise ValueError("object of type %s named as %s, but not registered" % (type(obj),ascii(intname))) return PDFObjectReference(intname) # otherwise register the new object objectcounter = self.objectcounter = self.objectcounter+1 if name is None: name = "R"+repr(objectcounter) if name in idToObject: other = idToObject[name] if other!=obj: raise ValueError("redefining named object: "+repr(name)) return PDFObjectReference(name) if iob: obj.__InternalName__ = name #print "name", name, "counter", objectcounter self.idToObjectNumberAndVersion[name] = (objectcounter, 0) self.numberToId[objectcounter] = name idToObject[name] = obj return PDFObjectReference(name) ### chapter 4 Objects PDFtrue = "true" PDFfalse = "false" PDFnull = "null" class PDFText(PDFObject): def __init__(self, t, enc='utf-8'): self.t = t self.enc = enc def format(self, document): t = self.t if isUnicode(t): t = t.encode(self.enc) result = binascii.hexlify(document.encrypt.encode(t)) return b"<" + result + b">" def __str__(self): dummydoc = DummyDoc() return self.format(dummydoc) def PDFnumber(n): return n import re _re_cleanparens=re.compile('[^()]') del re def _isbalanced(s): '''test whether a string is balanced in parens''' s = _re_cleanparens.sub('',s) n = 0 for c in s: if c=='(': n+=1 else: n -= 1 if n<0: return 0 return not n and 1 or 0 def _checkPdfdoc(utext): '''return true if no Pdfdoc encoding errors''' try: utext.encode('pdfdoc') return 1 except UnicodeEncodeError as e: return 0 class PDFString(PDFObject): def __init__(self, s, escape=1, enc='auto'): '''s can be unicode/utf8 or a PDFString if escape is true then the output will be passed through escape if enc is raw then the string will be left alone if enc is auto we'll try and automatically adapt to utf_16_be/utf_16_le if the effective string is not entirely in pdfdoc ''' if isinstance(s,PDFString): self.s = s.s self.escape = s.escape self.enc = s.enc else: self.s = s self.escape = escape self.enc = enc def format(self, document): s = self.s enc = getattr(self,'enc','auto') if isBytes(s): if enc == 'auto': try: if s.startswith(codecs.BOM_UTF16_BE): u = s.decode('utf_16_be') elif s.startswith(codecs.BOM_UTF16_LE): u = s.decode('utf_16_le') else: u = s.decode('utf8') if _checkPdfdoc(u): s = u.encode('pdfdoc') else: s = codecs.BOM_UTF16_BE+u.encode('utf_16_be') except: try: s.decode('pdfdoc') except: stderr.write('Error in %s' % (repr(s),)) raise elif isUnicode(s): if enc == 'auto': if _checkPdfdoc(s): s = s.encode('pdfdoc') else: s = codecs.BOM_UTF16_BE+s.encode('utf_16_be') else: s = codecs.BOM_UTF16_BE+s.encode('utf_16_be') else: raise ValueError('PDFString argument must be str/unicode not %s' % type(s)) escape = getattr(self,'escape',1) if not isinstance(document.encrypt,NoEncryption): s = document.encrypt.encode(s) escape = 1 if escape: try: es = "(%s)" % escapePDF(s) except: raise ValueError("cannot escape %s %s" % (s, repr(s))) if escape&2: es = es.replace('\\012','\n') if escape&4 and _isbalanced(es): es = es.replace('\\(','(').replace('\\)',')') return pdfdocEnc(es) else: return b'(' + s + b')' def __str__(self): return "(%s)" % escapePDF(self.s) def PDFName(data,lo=chr(0x21),hi=chr(0x7e)): # might need to change this to class for encryption # NOTE: RESULT MUST ALWAYS SUPPORT MEANINGFUL COMPARISONS (EQUALITY) AND HASH # first convert the name L = list(data) for i,c in enumerate(L): if chi or c in "%()<>{}[]#": L[i] = "#"+hex(ord(c))[2:] # forget the 0x thing... return "/"+(''.join(L)) class PDFDictionary(PDFObject): multiline = True def __init__(self, dict=None): """dict should be namestring to value eg "a": 122 NOT pdfname to value NOT "/a":122""" if dict is None: self.dict = {} else: self.dict = dict.copy() def __setitem__(self, name, value): self.dict[name] = value def __getitem__(self, a): return self.dict[a] def __contains__(self,a): return a in self.dict def Reference(self, name, document): self.dict[name] = document.Reference(self.dict[name]) def format(self, document,IND=b'\n '): dict = self.dict try: keys = list(dict.keys()) except: print(ascii(dict)) raise if not isinstance(dict,OrderedDict): keys.sort() L = [(format(PDFName(k),document)+b" "+format(dict[k],document)) for k in keys] if (self.multiline and rl_config.pdfMultiLine) or self.multiline=='forced': L = IND.join(L) else: # break up every 6 elements anyway t=L.insert for i in reversed(range(6, len(L), 6)): t(i,b'\n ') L = b" ".join(L) return b'<<\n'+L+b'\n>>' def copy(self): return PDFDictionary(self.dict) def normalize(self): #normalize the names to use RL standard ie Name not /Name D = self.dict K = [k for k in D.keys() if k.startswith('/')] for k in K: D[k[1:]] = D.pop(k) class checkPDFNames: def __init__(self,*names): self.names = list(map(PDFName,names)) def __call__(self,value): if not value.startswith('/'): value=PDFName(value) if value in self.names: return value def checkPDFBoolean(value): if value in ('true','false'): return value class CheckedPDFDictionary(PDFDictionary): validate = {} def __init__(self,dict=None,validate=None): PDFDictionary.__init__(self,dict) if validate: self.validate = validate def __setitem__(self,name,value): if name not in self.validate: raise ValueError('invalid key, %r' % name) cvalue = self.validate[name](value) if cvalue is None: raise ValueError('Bad value %r for key %r' % (value,name)) PDFDictionary.__setitem__(self,name,cvalue) class ViewerPreferencesPDFDictionary(CheckedPDFDictionary): validate=dict( HideToolbar=checkPDFBoolean, HideMenubar=checkPDFBoolean, HideWindowUI=checkPDFBoolean, FitWindow=checkPDFBoolean, CenterWindow=checkPDFBoolean, DisplayDocTitle=checkPDFBoolean, #contributed by mark Erbaugh NonFullScreenPageMode=checkPDFNames(*'UseNone UseOutlines UseThumbs UseOC'.split()), Direction=checkPDFNames(*'L2R R2L'.split()), ViewArea=checkPDFNames(*'MediaBox CropBox BleedBox TrimBox ArtBox'.split()), ViewClip=checkPDFNames(*'MediaBox CropBox BleedBox TrimBox ArtBox'.split()), PrintArea=checkPDFNames(*'MediaBox CropBox BleedBox TrimBox ArtBox'.split()), PrintClip=checkPDFNames(*'MediaBox CropBox BleedBox TrimBox ArtBox'.split()), PrintScaling=checkPDFNames(*'None AppDefault'.split()), ) # stream filters are objects to support round trip and # possibly in the future also support parameters class PDFStreamFilterZCompress: pdfname = "FlateDecode" def encode(self, text): from reportlab.lib.utils import import_zlib zlib = import_zlib() if not zlib: raise ImportError("cannot z-compress zlib unavailable") if isUnicode(text): text = text.encode('utf8') return zlib.compress(text) def decode(self, encoded): from reportlab.lib.utils import import_zlib zlib = import_zlib() if not zlib: raise ImportError("cannot z-decompress zlib unavailable") return zlib.decompress(encoded) # need only one of these, unless we implement parameters later PDFZCompress = PDFStreamFilterZCompress() class PDFStreamFilterBase85Encode: pdfname = "ASCII85Decode" def encode(self, text): from reportlab.pdfbase.pdfutils import _wrap text = asciiBase85Encode(text) if rl_config.wrapA85: text = _wrap(text) return text def decode(self, text): return asciiBase85Decode(text) # need only one of these too PDFBase85Encode = PDFStreamFilterBase85Encode() class PDFStream(PDFObject): '''set dictionary elements explicitly stream.dictionary[name]=value''' ### compression stuff not implemented yet __RefOnly__ = 1 # must be at top level def __init__(self, dictionary=None, content=None, filters=None): if dictionary is None: dictionary = PDFDictionary() self.dictionary = dictionary self.content = content self.filters = filters def format(self, document): dictionary = self.dictionary # copy it for modification dictionary = PDFDictionary(dictionary.dict.copy()) content = self.content filters = self.filters if self.content is None: raise ValueError("stream content not set") if filters is None: filters = document.defaultStreamFilters # only apply filters if they haven't been applied elsewhere if filters is not None and "Filter" not in dictionary.dict: # apply filters in reverse order listed rf = list(filters) rf.reverse() fnames = [] for f in rf: #print "*****************content:"; print repr(content[:200]) #print "*****************filter", f.pdfname content = f.encode(content) fnames.insert(0, PDFName(f.pdfname)) #print "*****************finally:"; print content[:200] #print "****** FILTERS", fnames #stop dictionary["Filter"] = PDFArray(fnames) # "stream encoding is done after all filters have been applied" content = document.encrypt.encode(content) fc = format(content, document) dictionary["Length"] = len(content) fd = format(dictionary, document) return fd+b'\nstream\n'+fc+b'endstream\n' def teststream(content=None): #content = "" # test if content is None: content = teststreamcontent content = content.strip() + '\n' S = PDFStream(content = content, filters=rl_config.useA85 and [PDFBase85Encode,PDFZCompress] or [PDFZCompress]) # nothing else needed... S.__Comment__ = "test stream" return S teststreamcontent = """ 1 0 0 1 0 0 cm BT /F9 12 Tf 14.4 TL ET 1.00 0.00 1.00 rg n 72.00 72.00 432.00 648.00 re B* """ class PDFArray(PDFObject): multiline = True def __init__(self, sequence): self.sequence = list(sequence) def References(self, document): """make all objects in sequence references""" self.sequence = list(map(document.Reference, self.sequence)) def format(self, document, IND=b'\n '): L = [format(e, document) for e in self.sequence] if (self.multiline and rl_config.pdfMultiLine) or self.multiline=='forced': L = IND.join(L) else: n=len(L) if n>10: # break up every 10 elements anyway t=L.insert for i in reversed(range(10, n, 10)): t(i,b'\n ') L = b' '.join(L) else: L = b' '.join(L) return b'[ ' + L + b' ]' class PDFArrayCompact(PDFArray): multiline=False class PDFIndirectObject(PDFObject): __RefOnly__ = 1 def __init__(self, name, content): self.name = name self.content = content def format(self, document): name = self.name n, v = document.idToObjectNumberAndVersion[name] # set encryption parameters document.encrypt.register(n, v) fcontent = format(self.content, document, toplevel=1) # yes this is at top level return (pdfdocEnc("%s %s obj\n"%(n,v)) +fcontent+ (b'' if fcontent.endswith(b'\n') else b'\n') +b'endobj\n') class PDFObjectReference(PDFObject): def __init__(self, name): self.name = name def format(self, document): try: return pdfdocEnc("%s %s R" % document.idToObjectNumberAndVersion[self.name]) except: raise KeyError("forward reference to %s not resolved upon final formatting" % repr(self.name)) class PDFFile(PDFObject): ### just accumulates strings: keeps track of current offset def __init__(self,pdfVersion=PDF_VERSION_DEFAULT): self.strings = [] self.write = self.strings.append self.offset = 0 ### chapter 5 # Following Ken Lunde's advice and the PDF spec, this includes # some high-order bytes. I chose the characters for Tokyo # in Shift-JIS encoding, as these cannot be mistaken for # any other encoding, and we'll be able to tell if something # has run our PDF files through a dodgy Unicode conversion. self.add((pdfdocEnc("%%PDF-%s.%s" % pdfVersion) + b'\n%\223\214\213\236 ReportLab Generated PDF document http://www.reportlab.com\n' )) def closeOrReset(self): pass def add(self, s): """should be constructed as late as possible, return position where placed""" s = pdfdocEnc(s) result = self.offset self.offset = result+len(s) self.write(s) return result def format(self, document): return b''.join(self.strings) class PDFCrossReferenceSubsection(PDFObject): def __init__(self, firstentrynumber, idsequence): self.firstentrynumber = firstentrynumber self.idsequence = idsequence def format(self, document): """id sequence should represent contiguous object nums else error. free numbers not supported (yet)""" firstentrynumber = self.firstentrynumber idsequence = self.idsequence entries = list(idsequence) nentries = len(idsequence) # special case: object number 0 is always free taken = {} if firstentrynumber==0: taken[0] = "standard free entry" nentries = nentries+1 entries.insert(0, "0000000000 65535 f ") idToNV = document.idToObjectNumberAndVersion idToOffset = document.idToOffset lastentrynumber = firstentrynumber+nentries-1 for id in idsequence: (num, version) = idToNV[id] if num in taken: raise ValueError("object number collision %s %s %s" % (num, repr(id), repr(taken[id]))) if num>lastentrynumber or num class DuplicatePageLabelPage(Exception): pass class PDFPageLabels(PDFCatalog): __comment__ = None __RefOnly__ = 0 __Defaults__ = {} __NoDefault__ = ["Nums"] __Refs__ = [] def __init__(self): self.labels = [] def addPageLabel(self, page, label): """ Adds a new PDFPageLabel to this catalog. The 'page' argument, an integer, is the page number in the PDF document with which the 'label' should be associated. Page numbering in the PDF starts at zero! Thus, to change the label on the first page, '0' should be provided as an argument, and to change the 6th page, '5' should be provided as the argument. The 'label' argument should be a PDFPageLabel instance, which describes the format of the labels starting on page 'page' in the PDF and continuing until the next encounter of a PDFPageLabel. The order in which labels are added is not important. """ self.labels.append((page, label)) def format(self, document): try: self.labels.sort() except DuplicatePageLabelPage: tmp = sorted([x[0] for x in self.labels]) annotateException('\n\n!!!!! Duplicate PageLabel seen for pages %r' % list(set([x for x in tmp if tmp.count(x)>1]))) labels = [] for page, label in self.labels: labels.append(page) labels.append(label) self.Nums = PDFArray(labels) #PDFArray makes a copy with list() return PDFCatalog.format(self, document) class PDFPageLabel(PDFCatalog): __Comment__ = None __RefOnly__ = 0 __Defaults__ = {} __NoDefault__ = "Type S P St".split() __convertible__ = 'ARABIC ROMAN_UPPER ROMAN_LOWER LETTERS_UPPER LETTERS_LOWER' ARABIC = 'D' ROMAN_UPPER = 'R' ROMAN_LOWER = 'r' LETTERS_UPPER = 'A' LETTERS_LOWER = 'a' def __init__(self, style=None, start=None, prefix=None): """ A PDFPageLabel changes the style of page numbering as displayed in a PDF viewer. PDF page labels have nothing to do with 'physical' page numbers printed on a canvas, but instead influence the 'logical' page numbers displayed by PDF viewers. However, when using roman numerals (i, ii, iii...) or page prefixes for appendecies (A.1, A.2...) on the physical pages PDF page labels are necessary to change the logical page numbers displayed by the PDF viewer to match up with the physical numbers. A PDFPageLabel changes the properties of numbering at the page on which it appears (see the class 'PDFPageLabels' for specifying where a PDFPageLabel is associated) and all subsequent pages, until a new PDFPageLabel is encountered. The arguments to this initialiser determine the properties of all subsequent page labels. 'style' determines the numberings style, arabic, roman, letters; 'start' specifies the starting number; and 'prefix' any prefix to be applied to the page numbers. All these arguments can be left out or set to None. * style: - None: No numbering, can be used to display the prefix only. - PDFPageLabel.ARABIC: Use arabic numbers: 1, 2, 3, 4... - PDFPageLabel.ROMAN_UPPER: Use upper case roman numerals: I, II, III... - PDFPageLabel.ROMAN_LOWER: Use lower case roman numerals: i, ii, iii... - PDFPageLabel.LETTERS_UPPER: Use upper case letters: A, B, C, D... - PDFPageLabel.LETTERS_LOWER: Use lower case letters: a, b, c, d... * start: - An integer specifying the starting number for this PDFPageLabel. This can be used when numbering style changes to reset the page number back to one, ie from roman to arabic, or from arabic to appendecies. Can be any positive integer or None. I'm not sure what the effect of specifying None is, probably that page numbering continues with the current sequence, I'd have to check the spec to clarify though. * prefix: - A string which is prefixed to the page numbers. Can be used to display appendecies in the format: A.1, A.2, ..., B.1, B.2, ... where a PDFPageLabel is used to set the properties for the first page of each appendix to restart the page numbering at one and set the prefix to the appropriate letter for current appendix. The prefix can also be used to display text only, if the 'style' is set to None. This can be used to display strings such as 'Front', 'Back', or 'Cover' for the covers on books. """ if style: if style.upper() in self.__convertible__: style = getattr(self,style.upper()) self.S = PDFName(style) if start: self.St = PDFnumber(start) if prefix: self.P = PDFString(prefix) def __lt__(self,oth): if rl_config.errorOnDuplicatePageLabelPage: raise DuplicatePageLabelPage() return False #ends code contributed by Christian Jacobs def testpage(document): P = PDFPage() P.Contents = teststream() pages = document.Pages P.Parent = document.Reference(pages) P.MediaBox = PDFArray([0, 0, 595, 841]) resources = PDFResourceDictionary() resources.allProcs() # enable all procsets resources.basicFonts() P.Resources = resources pages.addPage(P) #### DUMMY OUTLINES IMPLEMENTATION FOR testing DUMMYOUTLINE = """ << /Count 0 /Type /Outlines >>""" class PDFOutlines0(PDFObject): __Comment__ = "TEST OUTLINE!" text = DUMMYOUTLINE.replace("\n", '\n') __RefOnly__ = 1 def format(self, document): return pdfdocEnc(self.text) class OutlineEntryObject(PDFObject): "an entry in an outline" Title = Dest = Parent = Prev = Next = First = Last = Count = None def format(self, document): D = {} D["Title"] = PDFString(self.Title) D["Parent"] = self.Parent D["Dest"] = self.Dest for n in ("Prev", "Next", "First", "Last", "Count"): v = getattr(self, n) if v is not None: D[n] = v PD = PDFDictionary(D) return PD.format(document) class PDFOutlines(PDFObject): """ takes a recursive list of outline destinations like:: out = PDFOutline1() out.setNames(canvas, # requires canvas for name resolution "chapter1dest", ("chapter2dest", ["chapter2section1dest", "chapter2section2dest", "chapter2conclusiondest"] ), # end of chapter2 description "chapter3dest", ("chapter4dest", ["c4s1", "c4s2"]) ) Higher layers may build this structure incrementally. KISS at base level. """ # first attempt, many possible features missing. #no init for now mydestinations = ready = None counter = 0 currentlevel = -1 # ie, no levels yet def __init__(self): self.destinationnamestotitles = {} self.destinationstotitles = {} self.levelstack = [] self.buildtree = [] self.closedict = {} # dictionary of "closed" destinations in the outline def addOutlineEntry(self, destinationname, level=0, title=None, closed=None): """destinationname of None means "close the tree" """ if destinationname is None and level!=0: raise ValueError("close tree must have level of 0") if not isinstance(level,int): raise ValueError("level must be integer, got %s" % type(level)) if level<0: raise ValueError("negative levels not allowed") if title is None: title = destinationname currentlevel = self.currentlevel stack = self.levelstack tree = self.buildtree # adjust currentlevel and stack to match level if level>currentlevel: if level>currentlevel+1: raise ValueError("can't jump from outline level %s to level %s, need intermediates (destinationname=%r, title=%r)" %(currentlevel, level, destinationname, title)) level = currentlevel = currentlevel+1 stack.append([]) while levelref if isSeq(object): L = [] for o in object: L.append(self.translateNames(canvas, o)) if isinstance(object,tuple): return tuple(L) return L # bug contributed by Benjamin Dumke raise TypeError("in outline, destination name must be string: got a %s"%type(object)) def prepare(self, document, canvas): """prepare all data structures required for save operation (create related objects)""" if self.mydestinations is None: if self.levelstack: self.addOutlineEntry(None) # close the tree destnames = self.levelstack[0] #from pprint import pprint; pprint(destnames); stop self.mydestinations = self.translateNames(canvas, destnames) else: self.first = self.last = None self.count = 0 self.ready = -1 return #self.first = document.objectReference("Outline.First") #self.last = document.objectReference("Outline.Last") # XXXX this needs to be generalized for closed entries! self.count = count(self.mydestinations, self.closedict) (self.first, self.last) = self.maketree(document, self.mydestinations, toplevel=1) self.ready = 1 def maketree(self, document, destinationtree, Parent=None, toplevel=0): if toplevel: levelname = "Outline" Parent = document.Reference(document.Outlines) else: self.count += 1 levelname = "Outline.%s" % self.count if Parent is None: raise ValueError("non-top level outline elt parent must be specified") if not isSeq(destinationtree): raise ValueError("destinationtree must be list or tuple, got %s") nelts = len(destinationtree) lastindex = nelts-1 lastelt = firstref = lastref = None destinationnamestotitles = self.destinationnamestotitles closedict = self.closedict for index in range(nelts): eltobj = OutlineEntryObject() eltobj.Parent = Parent eltname = "%s.%s" % (levelname, index) eltref = document.Reference(eltobj, eltname) #document.add(eltname, eltobj) if lastelt is not None: lastelt.Next = eltref eltobj.Prev = lastref if firstref is None: firstref = eltref lastref = eltref lastelt = eltobj # advance eltobj lastref = eltref elt = destinationtree[index] if isinstance(elt,dict): # simple leaf {name: dest} leafdict = elt elif isinstance(elt,tuple): # leaf with subsections: ({name: ref}, subsections) XXXX should clean up (see count(...)) try: (leafdict, subsections) = elt except: raise ValueError("destination tree elt tuple should have two elts, got %s" % len(elt)) eltobj.Count = count(subsections, closedict) (eltobj.First, eltobj.Last) = self.maketree(document, subsections, eltref) else: raise ValueError("destination tree elt should be dict or tuple, got %s" % type(elt)) try: [(Title, Dest)] = list(leafdict.items()) except: raise ValueError("bad outline leaf dictionary, should have one entry "+bytestr(elt)) eltobj.Title = destinationnamestotitles[Title] eltobj.Dest = Dest if isinstance(elt,tuple) and Dest in closedict: # closed subsection, count should be negative eltobj.Count = -eltobj.Count return (firstref, lastref) def count(tree, closedict=None): """utility for outline: recursively count leaves in a tuple/list tree""" from operator import add if isinstance(tree,tuple): # leaf with subsections XXXX should clean up this structural usage (leafdict, subsections) = tree [(Title, Dest)] = list(leafdict.items()) if closedict and Dest in closedict: return 1 # closed tree element if isSeq(tree): #return reduce(add, map(count, tree)) counts = [] for e in tree: counts.append(count(e, closedict)) return sum(counts) #used to be: return reduce(add, counts) return 1 _default_producer = "ReportLab PDF Library - www.reportlab.com" class PDFInfo(PDFObject): """PDF documents can have basic information embedded, viewable from File | Document Info in Acrobat Reader. If this is wrong, you get Postscript errors while printing, even though it does not print.""" producer = _default_producer creator = "ReportLab PDF Library - www.reportlab.com" title = "untitled" author = "anonymous" subject = "unspecified" keywords = "" _dateFormatter = None def __init__(self): self.trapped = 'False' #could be 'True' or 'Unknown' def digest(self, md5object): # add self information to signature for x in (self.title, self.author, self.subject, self.keywords): md5object.update(bytestr(x)) def format(self, document): D = {} D["Title"] = PDFString(self.title) D["Author"] = PDFString(self.author) D['ModDate'] = D["CreationDate"] = PDFDate(ts=document._timeStamp,dateFormatter=self._dateFormatter) D["Producer"] = PDFString(self.producer) D["Creator"] = PDFString(self.creator) D["Subject"] = PDFString(self.subject) D["Keywords"] = PDFString(self.keywords) D["Trapped"] = PDFName(self.trapped) PD = PDFDictionary(D) return PD.format(document) def copy(self): "shallow copy - useful in pagecatchering" thing = self.__klass__() for k, v in self.__dict__.items(): setattr(thing, k, v) return thing # skipping thumbnails, etc class Annotation(PDFObject): """superclass for all annotations.""" defaults = [("Type", PDFName("Annot"),)] required = ("Type", "Rect", "Contents", "Subtype") permitted = required+( "Border", "C", "T", "M", "F", "H", "BS", "AA", "AS", "Popup", "P", "AP") def cvtdict(self, d, escape=1): """transform dict args from python form to pdf string rep as needed""" Rect = d["Rect"] if not isStr(Rect): d["Rect"] = PDFArray(Rect) d["Contents"] = PDFString(d["Contents"],escape) return d def AnnotationDict(self, **kw): if 'escape' in kw: escape = kw['escape'] del kw['escape'] else: escape = 1 d = {} for (name,val) in self.defaults: d[name] = val d.update(kw) for name in self.required: if name not in d: raise ValueError("keyword argument %s missing" % name) d = self.cvtdict(d,escape=escape) permitted = self.permitted for name in d.keys(): if name not in permitted: raise ValueError("bad annotation dictionary name %s" % name) return PDFDictionary(d) def Dict(self): raise ValueError("DictString undefined for virtual superclass Annotation, must overload") # but usually #return self.AnnotationDict(self, Rect=(a,b,c,d)) or whatever def format(self, document): D = self.Dict() return D.format(document) class TextAnnotation(Annotation): permitted = Annotation.permitted + ( "Open", "Name") def __init__(self, Rect, Contents, **kw): self.Rect = Rect self.Contents = Contents self.otherkw = kw def Dict(self): d = {} d.update(self.otherkw) d["Rect"] = self.Rect d["Contents"] = self.Contents d["Subtype"] = "/Text" return self.AnnotationDict(**d) class FreeTextAnnotation(Annotation): permitted = Annotation.permitted + ("DA",) def __init__(self, Rect, Contents, DA, **kw): self.Rect = Rect self.Contents = Contents self.DA = DA self.otherkw = kw def Dict(self): d = {} d.update(self.otherkw) d["Rect"] = self.Rect d["Contents"] = self.Contents d["DA"] = self.DA d["Subtype"] = "/FreeText" return self.AnnotationDict(**d) class LinkAnnotation(Annotation): permitted = Annotation.permitted + ( "Dest", "A", "PA") def __init__(self, Rect, Contents, Destination, Border="[0 0 1]", **kw): self.Border = Border self.Rect = Rect self.Contents = Contents self.Destination = Destination self.otherkw = kw def dummyDictString(self): # old, testing return """ << /Type /Annot /Subtype /Link /Rect [71 717 190 734] /Border [16 16 1] /Dest [23 0 R /Fit] >> """ def Dict(self): d = {} d.update(self.otherkw) d["Border"] = self.Border d["Rect"] = self.Rect d["Contents"] = self.Contents d["Subtype"] = "/Link" d["Dest"] = self.Destination return self.AnnotationDict(**d) class HighlightAnnotation(Annotation): """ HighlightAnnotation is an annotation that highlights the selected area. Rect is the mouseover area that will show the contents. QuadPoints is a list of points to highlight, you can have many groups of four QuadPoints to allow highlighting many lines. """ permitted = Annotation.permitted + ("QuadPoints", ) def __init__(self, Rect, Contents, QuadPoints, Color=[0.83, 0.89, 0.95], **kw): self.Rect = Rect self.Contents = Contents self.otherkw = kw self.QuadPoints = QuadPoints self.Color = Color def cvtdict(self, d, escape=1): """transform dict args from python form to pdf string rep as needed""" Rect = d["Rect"] Quad = d["QuadPoints"] Color = d["C"] if not isinstance(Rect, str): d["Rect"] = PDFArray(Rect).format(d, IND=b" ") if not isinstance(Quad, str): d["QuadPoints"] = PDFArray(Quad).format(d, IND=b" ") if not isinstance(Color, str): d["C"] = PDFArray(Color).format(d, IND=b" ") d["Contents"] = PDFString(d["Contents"], escape) return d def Dict(self): d = {} d.update(self.otherkw) d["Rect"] = self.Rect d["Contents"] = self.Contents d["Subtype"] = "/Highlight" d["QuadPoints"] = self.QuadPoints d["C"] = self.Color return self.AnnotationDict(**d) def rect_to_quad(Rect): """ Utility method to convert a Rect to a QuadPoint """ return [Rect[0], Rect[1], Rect[2], Rect[1], Rect[0], Rect[3], Rect[2], Rect[3]] # skipping names tree # skipping actions # skipping names trees # skipping to chapter 7 class PDFRectangle(PDFObject): def __init__(self, llx, lly, urx, ury): self.llx, self.lly, self.ulx, self.ury = llx, lly, urx, ury def format(self, document): A = PDFArray([self.llx, self.lly, self.ulx, self.ury]) return format(A, document) class PDFDate(PDFObject): # gmt offset now suppported properly def __init__(self, ts=None, dateFormatter=None): if ts is None: ts = TimeStamp() self._init(ts) self.dateFormatter = dateFormatter def _init(self,ts): self.date = ts.YMDhms self.dhh = ts.dhh self.dmm = ts.dmm def format(self, doc): dfmt = self.dateFormatter or ( lambda yyyy,mm,dd,hh,m,s: "D:%04d%02d%02d%02d%02d%02d%+03d'%02d'" % (yyyy,mm,dd,hh,m,s,self.dhh,self.dmm)) return format(PDFString(dfmt(*self.date)), doc) class Destination(PDFObject): """ not a PDFObject! This is a placeholder that can delegates to a pdf object only after it has been defined by the methods below. EG a Destination can refer to Appendix A before it has been defined, but only if Appendix A is explicitly noted as a destination and resolved before the document is generated... For example the following sequence causes resolution before doc generation. d = Destination() d.fit() # or other format defining method call d.setPage(p) (at present setPageRef is called on generation of the page). """ representation = format = page = None def __init__(self,name): self.name = name self.fmt = self.page = None def format(self, document): f = self.fmt if f is None: raise ValueError("format not resolved, probably missing URL scheme or undefined destination target for '%s'" % self.name) p = self.page if p is None: raise ValueError("Page not bound, probably missing URL scheme or undefined destination target for '%s'" % self.name) f.page = p return f.format(document) def xyz(self, left, top, zoom): # see pdfspec mar 11 99 pp184+ self.fmt = PDFDestinationXYZ(None, left, top, zoom) def fit(self): self.fmt = PDFDestinationFit(None) def fitb(self): self.fmt = PDFDestinationFitB(None) def fith(self, top): self.fmt = PDFDestinationFitH(None,top) def fitv(self, left): self.fmt = PDFDestinationFitV(None, left) def fitbh(self, top): self.fmt = PDFDestinationFitBH(None, top) def fitbv(self, left): self.fmt = PDFDestinationFitBV(None, left) def fitr(self, left, bottom, right, top): self.fmt = PDFDestinationFitR(None, left, bottom, right, top) def setPage(self, page): self.page = page #self.fmt.page = page # may not yet be defined! class PDFDestinationXYZ(PDFObject): typename = "XYZ" def __init__(self, page, left, top, zoom): self.page = page self.top = top self.zoom = zoom self.left = left def format(self, document): pageref = document.Reference(self.page) A = PDFArray( [ pageref, PDFName(self.typename), self.left, self.top, self.zoom ] ) return format(A, document) class PDFDestinationFit(PDFObject): typename = "Fit" def __init__(self, page): self.page = page def format(self, document): pageref = document.Reference(self.page) A = PDFArray( [ pageref, PDFName(self.typename) ] ) return format(A, document) class PDFDestinationFitB(PDFDestinationFit): typename = "FitB" class PDFDestinationFitH(PDFObject): typename = "FitH" def __init__(self, page, top): self.page = page; self.top=top def format(self, document): pageref = document.Reference(self.page) A = PDFArray( [ pageref, PDFName(self.typename), self.top ] ) return format(A, document) class PDFDestinationFitBH(PDFDestinationFitH): typename = "FitBH" class PDFDestinationFitV(PDFObject): typename = "FitV" def __init__(self, page, left): self.page = page; self.left=left def format(self, document): pageref = document.Reference(self.page) A = PDFArray( [ pageref, PDFName(self.typename), self.left ] ) return format(A, document) class PDFDestinationFitBV(PDFDestinationFitV): typename = "FitBV" class PDFDestinationFitR(PDFObject): typename = "FitR" def __init__(self, page, left, bottom, right, top): self.page = page; self.left=left; self.bottom=bottom; self.right=right; self.top=top def format(self, document): pageref = document.Reference(self.page) A = PDFArray( [ pageref, PDFName(self.typename), self.left, self.bottom, self.right, self.top] ) return format(A, document) # named destinations need nothing # skipping filespecs class PDFResourceDictionary(PDFObject): """each element *could* be reset to a reference if desired""" def __init__(self,**kwds): for _ in self.dict_attributes: setattr(self,_,kwds.pop(_,{})) # define the basicprocs self.basicProcs() if 'ProcSet' in kwds: self.ProcSet= kwds.pop('ProcSet') stdprocs = [PDFName(s) for s in "PDF Text ImageB ImageC ImageI".split()] dict_attributes = ("ColorSpace", "XObject", "ExtGState", "Font", "Pattern", "Properties", "Shading") def allProcs(self): # define all standard procsets self.ProcSet = self.stdprocs def basicProcs(self): self.ProcSet = self.stdprocs[:2] # just PDF and Text def basicFonts(self): self.Font = PDFObjectReference(BasicFonts) def setColorSpace(self,colorsUsed): for c,s in colorsUsed.items(): self.ColorSpace[s] = PDFObjectReference(c) def setShading(self,shadingUsed): for c,s in shadingUsed.items(): self.Shading[s] = PDFObjectReference(c) def format(self, document): D = {} for dname in self.dict_attributes: v = getattr(self, dname) if isinstance(v,dict): if v: dv = PDFDictionary(v) D[dname] = dv else: D[dname] = v v = self.ProcSet dname = "ProcSet" if isSeq(v): if v: dv = PDFArray(v) D[dname] = dv else: D[dname] = v DD = PDFDictionary(D) return format(DD, document) ############################################################################## # # Font objects - the PDFDocument.addFont() method knows which of these # to construct when given a user-facing Font object # ############################################################################## class PDFType1Font(PDFObject): """no init: set attributes explicitly""" __RefOnly__ = 1 # note! /Name appears to be an undocumented attribute.... name_attributes = "Type Subtype BaseFont Name".split() Type = "Font" Subtype = "Type1" # these attributes are assumed to already be of the right type local_attributes = "FirstChar LastChar Widths Encoding ToUnicode FontDescriptor".split() def format(self, document): D = {} for name in self.name_attributes: if hasattr(self, name): value = getattr(self, name) D[name] = PDFName(value) for name in self.local_attributes: if hasattr(self, name): value = getattr(self, name) D[name] = value #print D PD = PDFDictionary(D) return PD.format(document) ## These attribute listings will be useful in future, even if we ## put them elsewhere class PDFTrueTypeFont(PDFType1Font): Subtype = "TrueType" #local_attributes = "FirstChar LastChar Widths Encoding ToUnicode FontDescriptor".split() #same ##class PDFMMType1Font(PDFType1Font): ## Subtype = "MMType1" ## ##class PDFType3Font(PDFType1Font): ## Subtype = "Type3" ## local_attributes = "FirstChar LastChar Widths CharProcs FontBBox FontMatrix Resources Encoding".split() ## ##class PDFType0Font(PDFType1Font): ## Subtype = "Type0" ## local_attributes = "DescendantFonts Encoding".split( ## ##class PDFCIDFontType0(PDFType1Font): ## Subtype = "CIDFontType0" ## local_attributes = "CIDSystemInfo FontDescriptor DW W DW2 W2 Registry Ordering Supplement".split() ## ##class PDFCIDFontType0(PDFType1Font): ## Subtype = "CIDFontType2" ## local_attributes = "BaseFont CIDToGIDMap CIDSystemInfo FontDescriptor DW W DW2 W2".split() ## ##class PDFEncoding(PDFType1Font): ## Type = "Encoding" ## name_attributes = "Type BaseEncoding".split() ## # these attributes are assumed to already be of the right type ## local_attributes = ["Differences"] ## # UGLY ALERT - this needs turning into something O-O, it was hacked # across from the pdfmetrics.Encoding class to avoid circularity # skipping CMaps class PDFFormXObject(PDFObject): # like page requires .info set by some higher level (doc) # XXXX any resource used in a form must be propagated up to the page that (recursively) uses # the form!! (not implemented yet). XObjects = Annots = BBox = Matrix = Contents = stream = Resources = None hasImages = 1 # probably should change compression = 0 def __init__(self, lowerx, lowery, upperx, uppery): #not done self.lowerx = lowerx; self.lowery=lowery; self.upperx=upperx; self.uppery=uppery def setStreamList(self, data): if isSeq(data): data = '\n'.join(data) self.stream = pdfdocEnc(data) def BBoxList(self): "get the declared bounding box for the form as a list" if self.BBox: return list(self.BBox.sequence) else: return [self.lowerx, self.lowery, self.upperx, self.uppery] def format(self, document): self.BBox = self.BBox or PDFArray([self.lowerx, self.lowery, self.upperx, self.uppery]) self.Matrix = self.Matrix or PDFArray([1, 0, 0, 1, 0, 0]) if not self.Annots: self.Annots = None else: #these must be transferred to the page when the form is used raise ValueError("annotations don't work in PDFFormXObjects yet") if not self.Contents: stream = self.stream if not stream: self.Contents = teststream() else: S = PDFStream() S.content = stream # need to add filter stuff (?) S.__Comment__ = "xobject form stream" self.Contents = S if not self.Resources: resources = PDFResourceDictionary() # fonts! resources.basicFonts() if self.hasImages: resources.allProcs() else: resources.basicProcs() if self.XObjects: #print "XObjects", self.XObjects.dict resources.XObject = self.XObjects self.Resources=resources if self.compression: self.Contents.filters = rl_config.useA85 and [PDFBase85Encode, PDFZCompress] or [PDFZCompress] sdict = self.Contents.dictionary sdict["Type"] = PDFName("XObject") sdict["Subtype"] = PDFName("Form") sdict["FormType"] = 1 sdict["BBox"] = self.BBox sdict["Matrix"] = self.Matrix sdict["Resources"] = self.Resources return self.Contents.format(document) class PDFPostScriptXObject(PDFObject): "For embedding PD (e.g. tray commands) in PDF" def __init__(self, content=None): self.content = content def format(self, document): S = PDFStream() S.content = self.content S.__Comment__ = "xobject postscript stream" sdict = S.dictionary sdict["Type"] = PDFName("XObject") sdict["Subtype"] = PDFName("PS") return S.format(document) _mode2CS={'RGB':'DeviceRGB', 'L':'DeviceGray', 'CMYK':'DeviceCMYK'} class PDFImageXObject(PDFObject): # first attempts at a hard-coded one # in the file, Image XObjects are stream objects. We already # have a PDFStream object with 3 attributes: dictionary, content # and filters. So the job of this thing is to construct the # right PDFStream instance and ask it to format itself. def __init__(self, name, source=None, mask=None): self.name = name self.width = 24 self.height = 23 self.bitsPerComponent = 1 self.colorSpace = 'DeviceGray' self._filters = rl_config.useA85 and ('ASCII85Decode',) or () self.streamContent = """ 003B00 002700 002480 0E4940 114920 14B220 3CB650 75FE88 17FF8C 175F14 1C07E2 3803C4 703182 F8EDFC B2BBC2 BB6F84 31BFC2 18EA3C 0E3E00 07FC00 03F800 1E1800 1FF800> """ self.mask = mask if source is None: pass # use the canned one. elif hasattr(source,'jpeg_fh'): self.loadImageFromSRC(source) #it is already a PIL Image else: # it is a filename import os ext = os.path.splitext(source)[1].lower() src = open_for_read(source) try: if not(ext in ('.jpg', '.jpeg') and self.loadImageFromJPEG(src)): if rl_config.useA85: self.loadImageFromA85(src) else: self.loadImageFromRaw(src) finally: src.close() def loadImageFromA85(self,source): IMG=[] imagedata = pdfutils.makeA85Image(source,IMG=IMG,detectJpeg=True) if not imagedata: return self.loadImageFromSRC(IMG[0]) imagedata = [s.strip() for s in imagedata] words = imagedata[1].split() self.width, self.height = (int(words[1]),int(words[3])) self.colorSpace = {'/RGB':'DeviceRGB', '/G':'DeviceGray', '/CMYK':'DeviceCMYK'}[words[7]] self.bitsPerComponent = 8 self._filters = 'ASCII85Decode','FlateDecode' #'A85','Fl' if IMG: self._checkTransparency(IMG[0]) elif self.mask=='auto': self.mask = None self.streamContent = ''.join(imagedata[3:-1]) def loadImageFromJPEG(self,imageFile): try: try: info = pdfutils.readJPEGInfo(imageFile) finally: imageFile.seek(0) #reset file pointer except: return False self.width, self.height = info[0], info[1] self.bitsPerComponent = 8 if info[2] == 1: self.colorSpace = 'DeviceGray' elif info[2] == 3: self.colorSpace = 'DeviceRGB' else: #maybe should generate an error, is this right for CMYK? self.colorSpace = 'DeviceCMYK' self._dotrans = 1 self.streamContent = imageFile.read() if rl_config.useA85: self.streamContent = asciiBase85Encode(self.streamContent) self._filters = 'ASCII85Decode','DCTDecode' #'A85','DCT' else: self._filters = 'DCTDecode', #'DCT' self.mask = None return True def loadImageFromRaw(self,source): IMG=[] imagedata = pdfutils.makeRawImage(source,IMG=IMG,detectJpeg=True) if not imagedata: return self.loadImageFromSRC(IMG[0]) words = imagedata[1].split() self.width = int(words[1]) self.height = int(words[3]) self.colorSpace = {'/RGB':'DeviceRGB', '/G':'DeviceGray', '/CMYK':'DeviceCMYK'}[words[7]] self.bitsPerComponent = 8 self._filters = 'FlateDecode', #'Fl' if IMG: self._checkTransparency(IMG[0]) elif self.mask=='auto': self.mask = None self.streamContent = b''.join(imagedata[3:-1]) def _checkTransparency(self,im): if self.mask=='auto': if im._dataA: self.mask = None self._smask = PDFImageXObject(_digester(im._dataA.getRGBData()),im._dataA,mask=None) self._smask._decode = [0,1] else: tc = im.getTransparent() if tc: self.mask = (tc[0], tc[0], tc[1], tc[1], tc[2], tc[2]) else: self.mask = None elif hasattr(self.mask,'rgb'): _ = self.mask.rgb() self.mask = _[0],_[0],_[1],_[1],_[2],_[2] def loadImageFromSRC(self, im): "Extracts the stream, width and height" fp = im.jpeg_fh() if fp: self.loadImageFromJPEG(fp) else: zlib = import_zlib() if not zlib: return self.width, self.height = im.getSize() raw = im.getRGBData() #assert len(raw) == self.width*self.height, "Wrong amount of data for image expected %sx%s=%s got %s" % (self.width,self.height,self.width*self.height,len(raw)) self.streamContent = zlib.compress(raw) if rl_config.useA85: self.streamContent = asciiBase85Encode(self.streamContent) self._filters = 'ASCII85Decode','FlateDecode' #'A85','Fl' else: self._filters = 'FlateDecode', #'Fl' self.colorSpace= _mode2CS[im.mode] self.bitsPerComponent = 8 self._checkTransparency(im) def format(self, document): S = PDFStream(content = self.streamContent) dict = S.dictionary dict["Type"] = PDFName("XObject") dict["Subtype"] = PDFName("Image") dict["Width"] = self.width dict["Height"] = self.height dict["BitsPerComponent"] = self.bitsPerComponent dict["ColorSpace"] = PDFName(self.colorSpace) if self.colorSpace=='DeviceCMYK' and getattr(self,'_dotrans',0): dict["Decode"] = PDFArray([1,0,1,0,1,0,1,0]) elif getattr(self,'_decode',None): dict["Decode"] = PDFArray(self._decode) dict["Filter"] = PDFArray(map(PDFName,self._filters)) dict["Length"] = len(self.streamContent) if self.mask: dict["Mask"] = PDFArray(self.mask) if getattr(self,'smask',None): dict["SMask"] = self.smask return S.format(document) class PDFSeparationCMYKColor: def __init__(self, cmyk): from reportlab.lib.colors import CMYKColor if not isinstance(cmyk,CMYKColor): raise ValueError('%s needs a CMYKColor argument' % self.__class__.__name__) elif not cmyk.spotName: raise ValueError('%s needs a CMYKColor argument with a spotName' % self.__class__.__name__) self.cmyk = cmyk def _makeFuncPS(self): '''create the postscript code for the tint transfer function effectively this is tint*c, tint*y, ... tint*k''' R = [].append for i,v in enumerate(self.cmyk.cmyk()): v=float(v) if i==3: if v==0.0: R('pop') R('0.0') else: R(str(v)) R('mul') else: if v==0: R('0.0') else: R('dup') R(str(v)) R('mul') R('exch') return '{%s}' % (' '.join(R.__self__)) def value(self): return PDFArrayCompact(( PDFName('Separation'), PDFName(self.cmyk.spotName), PDFName('DeviceCMYK'), PDFStream( dictionary=PDFDictionary(dict( FunctionType=4, Domain=PDFArrayCompact((0,1)), Range=PDFArrayCompact((0,1,0,1,0,1,0,1)) )), content=self._makeFuncPS(), filters=None,#[PDFBase85Encode, PDFZCompress], ) )) class PDFFunction(PDFObject): """superclass for all function types.""" defaults = [] required = ("FunctionType", "Domain") permitted = required+("Range",) def FunctionDict(self, **kw): d = {} for (name,val) in self.defaults: d[name] = val d.update(kw) for name in self.required: if name not in d: raise ValueError("keyword argument %s missing" % name) permitted = self.permitted for name in d.keys(): if name not in permitted: raise ValueError("bad annotation dictionary name %s" % name) return PDFDictionary(d) def Dict(self, document): raise ValueError("Dict undefined for virtual superclass PDFShading, must overload") # but usually #return self.FunctionDict(self, ...) def format(self, document): D = self.Dict(document) return D.format(document) class PDFExponentialFunction(PDFFunction): defaults = PDFFunction.defaults + [("Domain", PDFArrayCompact((0.0, 1.0)))] required = PDFFunction.required + ("N",) permitted = PDFFunction.permitted + ("C0", "C1", "N") def __init__(self, C0, C1, N, **kw): self.C0 = C0 self.C1 = C1 self.N = N self.otherkw = kw def Dict(self, document): d = {} d.update(self.otherkw) d["FunctionType"] = 2 d["C0"] = PDFArrayCompact(self.C0) d["C1"] = PDFArrayCompact(self.C1) d["N"] = self.N return self.FunctionDict(**d) class PDFStitchingFunction(PDFFunction): required = PDFFunction.required + ("Functions", "Bounds", "Encode") permitted = PDFFunction.permitted + ("Functions", "Bounds", "Encode") def __init__(self, Functions, Bounds, Encode, **kw): self.Functions = Functions self.Bounds = Bounds self.Encode = Encode self.otherkw = kw def Dict(self, document): d = {} d.update(self.otherkw) d["FunctionType"] = 3 d["Functions"] = PDFArray([document.Reference(x) for x in self.Functions]) d["Bounds"] = PDFArray(self.Bounds) d["Encode"] = PDFArray(self.Encode) return self.FunctionDict(**d) class PDFShading(PDFObject): """superclass for all shading types.""" required = ("ShadingType", "ColorSpace") permitted = required+("Background", "BBox", "AntiAlias") def ShadingDict(self, **kw): d = {} d.update(kw) for name in self.required: if name not in d: raise ValueError("keyword argument %s missing" % name) permitted = self.permitted for name in d.keys(): if name not in permitted: raise ValueError("bad annotation dictionary name %s" % name) return PDFDictionary(d) def Dict(self, document): raise ValueError("Dict undefined for virtual superclass PDFShading, must overload") # but usually #return self.ShadingDict(self, ...) def format(self, document): D = self.Dict(document) return D.format(document) class PDFFunctionShading(PDFShading): required = PDFShading.required + ("Function",) permitted = PDFShading.permitted + ("Domain", "Matrix", "Function") def __init__(self, Function, ColorSpace, **kw): self.Function = Function self.ColorSpace = ColorSpace self.otherkw = kw def Dict(self, document): d = {} d.update(self.otherkw) d["ShadingType"] = 1 d["ColorSpace"] = PDFName(self.ColorSpace) d["Function"] = document.Reference(self.Function) return self.ShadingDict(**d) class PDFAxialShading(PDFShading): required = PDFShading.required + ("Coords", "Function") permitted = PDFShading.permitted + ( "Coords", "Domain", "Function", "Extend") def __init__(self, x0, y0, x1, y1, Function, ColorSpace, **kw): self.Coords = (x0, y0, x1, y1) self.Function = Function self.ColorSpace = ColorSpace self.otherkw = kw def Dict(self, document): d = {} d.update(self.otherkw) d["ShadingType"] = 2 d["ColorSpace"] = PDFName(self.ColorSpace) d["Coords"] = PDFArrayCompact(self.Coords) d["Function"] = document.Reference(self.Function) return self.ShadingDict(**d) class PDFRadialShading(PDFShading): required = PDFShading.required + ("Coords", "Function") permitted = PDFShading.permitted + ( "Coords", "Domain", "Function", "Extend") def __init__(self, x0, y0, r0, x1, y1, r1, Function, ColorSpace, **kw): self.Coords = (x0, y0, r0, x1, y1, r1) self.Function = Function self.ColorSpace = ColorSpace self.otherkw = kw def Dict(self, document): d = {} d.update(self.otherkw) d["ShadingType"] = 3 d["ColorSpace"] = PDFName(self.ColorSpace) d["Coords"] = PDFArrayCompact(self.Coords) d["Function"] = document.Reference(self.Function) return self.ShadingDict(**d) if __name__=="__main__": print("There is no script interpretation for pdfdoc.") reportlab-3.5.34/src/reportlab/pdfbase/_fontdata_enc_macroman.py0000664000175000017500000000556613544671343025622 0ustar rptlabrptlab00000000000000MacRomanEncoding = ( None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', None, 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', None, 'AE', 'Oslash', None, 'plusminus', None, None, 'yen', 'mu', None, None, None, None, None, 'ordfeminine', 'ordmasculine', None, 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', None, 'florin', None, None, 'guillemotleft', 'guillemotright', 'ellipsis', 'space', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', None, 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', None, 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron') reportlab-3.5.34/src/reportlab/rl_config.py0000664000175000017500000001013213544671343021500 0ustar rptlabrptlab00000000000000'''module that aggregates config information''' __all__=('_reset','register_reset') def _defaults_init(): ''' create & return defaults for all reportlab settings from reportlab.rl_settings.py reportlab.local_rl_settings.py reportlab_settings.py or ~/.reportlab_settings latter values override earlier ''' from reportlab.lib.utils import rl_exec import os _DEFAULTS={} rl_exec('from reportlab.rl_settings import *',_DEFAULTS) _overrides=_DEFAULTS.copy() try: rl_exec('from reportlab.local_rl_settings import *',_overrides) _DEFAULTS.update(_overrides) except ImportError: pass _overrides=_DEFAULTS.copy() try: rl_exec('from reportlab_settings import *',_overrides) _DEFAULTS.update(_overrides) except ImportError: _overrides=_DEFAULTS.copy() try: try: fn = os.path.expanduser(os.path.join('~','.reportlab_settings')) #appengine fails with KeyError/ImportError (dev/live) except (KeyError, ImportError): fn = None if fn: with open(fn,'rb') as f: rl_exec(f.read(),_overrides) _DEFAULTS.update(_overrides) except: pass return _DEFAULTS _DEFAULTS=_defaults_init() _SAVED = {} sys_version=None #this is used to set the options from def _setOpt(name, value, conv=None): '''set a module level value from environ/default''' from os import environ ename = 'RL_'+name if ename in environ: value = environ[ename] if conv: value = conv(value) globals()[name] = value def _startUp(): '''This function allows easy resetting to the global defaults If the environment contains 'RL_xxx' then we use the value else we use the given default''' import os, sys global sys_version, _unset_ sys_version = sys.version.split()[0] #strip off the other garbage from reportlab.lib import pagesizes from reportlab.lib.utils import rl_isdir if _SAVED=={}: _unset_ = getattr(sys,'_rl_config__unset_',None) if _unset_ is None: class _unset_: pass sys._rl_config__unset_ = _unset_ = _unset_() global __all__ A = list(__all__) for k,v in _DEFAULTS.items(): _SAVED[k] = globals()[k] = v if k not in __all__: A.append(k) __all__ = tuple(A) #places to search for Type 1 Font files import reportlab D = {'REPORTLAB_DIR': os.path.abspath(os.path.dirname(reportlab.__file__)), 'CWD': os.getcwd(), 'disk': os.getcwd().split(':')[0], 'sys_version': sys_version, 'XDG_DATA_HOME': os.environ.get('XDG_DATA_HOME','~/.local/share'), } for k in _SAVED: if k.endswith('SearchPath'): P=[] for p in _SAVED[k]: d = (p % D).replace('/',os.sep) if '~' in d: try: d = os.path.expanduser(d) #appengine fails with KeyError/ImportError (dev/live) except (KeyError, ImportError): continue if rl_isdir(d): P.append(d) _setOpt(k,os.pathsep.join(P),lambda x:x.split(os.pathsep)) globals()[k] = list(filter(rl_isdir,globals()[k])) else: v = _SAVED[k] if isinstance(v,(int,float)): conv = type(v) elif k=='defaultPageSize': conv = lambda v,M=pagesizes: getattr(M,v) else: conv = None _setOpt(k,v,conv) _registered_resets=[] def register_reset(func): '''register a function to be called by rl_config._reset''' _registered_resets[:] = [x for x in _registered_resets if x()] L = [x for x in _registered_resets if x() is func] if L: return from weakref import ref _registered_resets.append(ref(func)) def _reset(): '''attempt to reset reportlab and friends''' _startUp() #our reset for f in _registered_resets[:]: c = f() if c: c() else: _registered_resets.remove(f) _startUp() reportlab-3.5.34/src/reportlab/platypus/0000775000175000017500000000000013607302651021041 5ustar rptlabrptlab00000000000000reportlab-3.5.34/src/reportlab/platypus/tableofcontents.py0000664000175000017500000005147613554340114024617 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/platypus/tableofcontents.py __version__='3.5.32' __doc__="""Experimental class to generate Tables of Contents easily This module defines a single TableOfContents() class that can be used to create automatically a table of tontents for Platypus documents like this: story = [] toc = TableOfContents() story.append(toc) # some heading paragraphs here... doc = MyTemplate(path) doc.multiBuild(story) The data needed to create the table is a list of (level, text, pageNum) triplets, plus some paragraph styles for each level of the table itself. The triplets will usually be created in a document template's method like afterFlowable(), making notification calls using the notify() method with appropriate data like this: (level, text, pageNum) = ... self.notify('TOCEntry', (level, text, pageNum)) Optionally the list can contain four items in which case the last item is a destination key which the entry should point to. A bookmark with this key needs to be created first like this: key = 'ch%s' % self.seq.nextf('chapter') self.canv.bookmarkPage(key) self.notify('TOCEntry', (level, text, pageNum, key)) As the table of contents need at least two passes over the Platypus story which is why the multiBuild() method must be called. The levelParaStyle variables are the paragraph styles used to format the entries in the table of contents. Their indentation is calculated like this: each entry starts at a multiple of some constant named delta. If one entry spans more than one line, all lines after the first are indented by the same constant named epsilon. """ from reportlab.lib import enums from reportlab.lib.units import cm from reportlab.lib.utils import commasplit, escapeOnce, encode_label, decode_label, strTypes, asUnicode, asNative from reportlab.lib.styles import ParagraphStyle, _baseFontName from reportlab.lib import sequencer as rl_sequencer from reportlab.platypus.paragraph import Paragraph from reportlab.platypus.doctemplate import IndexingFlowable from reportlab.platypus.tables import TableStyle, Table from reportlab.platypus.flowables import Spacer, Flowable from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.pdfgen import canvas import unicodedata from ast import literal_eval def unquote(txt): from xml.sax.saxutils import unescape return unescape(txt, {"'": "'", """: '"'}) try: set except: class set(list): def add(self,x): if x not in self: list.append(self,x) def drawPageNumbers(canvas, style, pages, availWidth, availHeight, dot=' . ', formatter=None): ''' Draws pagestr on the canvas using the given style. If dot is None, pagestr is drawn at the current position in the canvas. If dot is a string, pagestr is drawn right-aligned. If the string is not empty, the gap is filled with it. ''' pagestr = ', '.join([str(p) for p, _ in pages]) x, y = canvas._curr_tx_info['cur_x'], canvas._curr_tx_info['cur_y'] fontSize = style.fontSize pagestrw = stringWidth(pagestr, style.fontName, fontSize) #if it's too long to fit, we need to shrink to fit in 10% increments. #it would be very hard to output multiline entries. #however, we impose a minimum size of 1 point as we don't want an #infinite loop. Ultimately we should allow a TOC entry to spill #over onto a second line if needed. freeWidth = availWidth-x while pagestrw > freeWidth and fontSize >= 1.0: fontSize = 0.9 * fontSize pagestrw = stringWidth(pagestr, style.fontName, fontSize) if isinstance(dot, strTypes): if dot: dotw = stringWidth(dot, style.fontName, fontSize) dotsn = int((availWidth-x-pagestrw)/dotw) else: dotsn = dotw = 0 text = '%s%s' % (dotsn * dot, pagestr) newx = availWidth - dotsn*dotw - pagestrw pagex = availWidth - pagestrw elif dot is None: text = ', ' + pagestr newx = x pagex = newx else: raise TypeError('Argument dot should either be None or an instance of basestring.') tx = canvas.beginText(newx, y) tx.setFont(style.fontName, fontSize) tx.setFillColor(style.textColor) tx.textLine(text) canvas.drawText(tx) commaw = stringWidth(', ', style.fontName, fontSize) for p, key in pages: if not key: continue w = stringWidth(str(p), style.fontName, fontSize) canvas.linkRect('', key, (pagex, y, pagex+w, y+style.leading), relative=1) pagex += w + commaw # Default paragraph styles for tables of contents. # (This could also be generated automatically or even # on-demand if it is not known how many levels the # TOC will finally need to display...) delta = 1*cm epsilon = 0.5*cm defaultLevelStyles = [ ParagraphStyle( name='Level 0', fontName=_baseFontName, fontSize=10, leading=11, firstLineIndent = 0, leftIndent = epsilon)] defaultTableStyle = \ TableStyle([ ('VALIGN', (0,0), (-1,-1), 'TOP'), ('RIGHTPADDING', (0,0), (-1,-1), 0), ('LEFTPADDING', (0,0), (-1,-1), 0), ]) class TableOfContents(IndexingFlowable): """This creates a formatted table of contents. It presumes a correct block of data is passed in. The data block contains a list of (level, text, pageNumber) triplets. You can supply a paragraph style for each level (starting at zero). Set dotsMinLevel to determine from which level on a line of dots should be drawn between the text and the page number. If dotsMinLevel is set to a negative value, no dotted lines are drawn. """ def __init__(self,**kwds): self.rightColumnWidth = kwds.pop('rightColumnWidth',72) self.levelStyles = kwds.pop('levelStyles',defaultLevelStyles) self.tableStyle = kwds.pop('tableStyle',defaultTableStyle) self.dotsMinLevel = kwds.pop('dotsMinLevel',1) self.formatter = kwds.pop('formatter',None) if kwds: raise ValueError('unexpected keyword arguments %s' % ', '.join(kwds.keys())) self._table = None self._entries = [] self._lastEntries = [] def beforeBuild(self): # keep track of the last run self._lastEntries = self._entries[:] self.clearEntries() def isIndexing(self): return 1 def isSatisfied(self): return (self._entries == self._lastEntries) def notify(self, kind, stuff): """The notification hook called to register all kinds of events. Here we are interested in 'TOCEntry' events only. """ if kind == 'TOCEntry': self.addEntry(*stuff) def clearEntries(self): self._entries = [] def getLevelStyle(self, n): '''Returns the style for level n, generating and caching styles on demand if not present.''' try: return self.levelStyles[n] except IndexError: prevstyle = self.getLevelStyle(n-1) self.levelStyles.append(ParagraphStyle( name='%s-%d-indented' % (prevstyle.name, n), parent=prevstyle, firstLineIndent = prevstyle.firstLineIndent+delta, leftIndent = prevstyle.leftIndent+delta)) return self.levelStyles[n] def addEntry(self, level, text, pageNum, key=None): """Adds one entry to the table of contents. This allows incremental buildup by a doctemplate. Requires that enough styles are defined.""" assert type(level) == type(1), "Level must be an integer" self._entries.append((level, text, pageNum, key)) def addEntries(self, listOfEntries): """Bulk creation of entries in the table of contents. If you knew the titles but not the page numbers, you could supply them to get sensible output on the first run.""" for entryargs in listOfEntries: self.addEntry(*entryargs) def wrap(self, availWidth, availHeight): "All table properties should be known by now." # makes an internal table which does all the work. # we draw the LAST RUN's entries! If there are # none, we make some dummy data to keep the table # from complaining if len(self._lastEntries) == 0: _tempEntries = [(0,'Placeholder for table of contents',0,None)] else: _tempEntries = self._lastEntries def drawTOCEntryEnd(canvas, kind, label): '''Callback to draw dots and page numbers after each entry.''' label = label.split(',') page, level, key = int(label[0]), int(label[1]), literal_eval(label[2]) style = self.getLevelStyle(level) if self.dotsMinLevel >= 0 and level >= self.dotsMinLevel: dot = ' . ' else: dot = '' if self.formatter: page = self.formatter(page) drawPageNumbers(canvas, style, [(page, key)], availWidth, availHeight, dot) self.canv.drawTOCEntryEnd = drawTOCEntryEnd tableData = [] for (level, text, pageNum, key) in _tempEntries: style = self.getLevelStyle(level) if key: text = '%s' % (key, text) keyVal = repr(key).replace(',','\\x2c').replace('"','\\x2c') else: keyVal = None para = Paragraph('%s' % (text, pageNum, level, keyVal), style) if style.spaceBefore: tableData.append([Spacer(1, style.spaceBefore),]) tableData.append([para,]) self._table = Table(tableData, colWidths=(availWidth,), style=self.tableStyle) self.width, self.height = self._table.wrapOn(self.canv,availWidth, availHeight) return (self.width, self.height) def split(self, availWidth, availHeight): """At this stage we do not care about splitting the entries, we will just return a list of platypus tables. Presumably the calling app has a pointer to the original TableOfContents object; Platypus just sees tables. """ return self._table.splitOn(self.canv,availWidth, availHeight) def drawOn(self, canvas, x, y, _sW=0): """Don't do this at home! The standard calls for implementing draw(); we are hooking this in order to delegate ALL the drawing work to the embedded table object. """ self._table.drawOn(canvas, x, y, _sW) def makeTuple(x): if isinstance(x,(list,tuple)): return tuple(x) return (x,) class SimpleIndex(IndexingFlowable): """Creates multi level indexes. The styling can be cutomized and alphabetic headers turned on and off. """ def __init__(self, **kwargs): """ Constructor of SimpleIndex. Accepts the same arguments as the setup method. """ #keep stuff in a dictionary while building self._entries = {} self._lastEntries = {} self._flowable = None self.setup(**kwargs) def getFormatFunc(self,formatName): try: return getattr(rl_sequencer,'_format_%s' % formatName) except ImportError: raise ValueError('Unknown sequencer format %r' % formatName) def setup(self, style=None, dot=None, tableStyle=None, headers=True, name=None, format='123', offset=0): """ This method makes it possible to change styling and other parameters on an existing object. style is the paragraph style to use for index entries. dot can either be None or a string. If it's None, entries are immediatly followed by their corresponding page numbers. If it's a string, page numbers are aligned on the right side of the document and the gap filled with a repeating sequence of the string. tableStyle is the style used by the table which the index uses to draw itself. Use this to change properties like spacing between elements. headers is a boolean. If it is True, alphabetic headers are displayed in the Index when the first letter changes. If False, we just output some extra space before the next item name makes it possible to use several indexes in one document. If you want this use this parameter to give each index a unique name. You can then index a term by refering to the name of the index which it should appear in: format can be 'I', 'i', '123', 'ABC', 'abc' """ if style is None: style = ParagraphStyle(name='index', fontName=_baseFontName, fontSize=11) self.textStyle = style self.tableStyle = tableStyle or defaultTableStyle self.dot = dot self.headers = headers if name is None: from reportlab.platypus.paraparser import DEFAULT_INDEX_NAME as name self.name = name self.formatFunc = self.getFormatFunc(format) self.offset = offset def __call__(self,canv,kind,label): label = asNative(label,'latin1') try: terms, format, offset = decode_label(label) except: terms = label format = offset = None if format is None: formatFunc = self.formatFunc else: formatFunc = self.getFormatFunc(format) if offset is None: offset = self.offset terms = commasplit(terms) cPN = canv.getPageNumber() pns = formatFunc(cPN-offset) key = 'ix_%s_%s_p_%s' % (self.name, label, pns) info = canv._curr_tx_info canv.bookmarkHorizontal(key, info['cur_x'], info['cur_y'] + info['leading']) self.addEntry(terms, (cPN,pns), key) def getCanvasMaker(self, canvasmaker=canvas.Canvas): def newcanvasmaker(*args, **kwargs): from reportlab.pdfgen import canvas c = canvasmaker(*args, **kwargs) setattr(c,self.name,self) return c return newcanvasmaker def isIndexing(self): return 1 def isSatisfied(self): return (self._entries == self._lastEntries) def beforeBuild(self): # keep track of the last run self._lastEntries = self._entries.copy() self.clearEntries() def clearEntries(self): self._entries = {} def notify(self, kind, stuff): """The notification hook called to register all kinds of events. Here we are interested in 'IndexEntry' events only. """ if kind == 'IndexEntry': text, pageNum = stuff self.addEntry(text, (self._canv.getPageNumber(),pageNum)) def addEntry(self, text, pageNum, key=None): """Allows incremental buildup""" self._entries.setdefault(makeTuple(text),set([])).add((pageNum, key)) def split(self, availWidth, availHeight): """At this stage we do not care about splitting the entries, we will just return a list of platypus tables. Presumably the calling app has a pointer to the original TableOfContents object; Platypus just sees tables. """ return self._flowable.splitOn(self.canv,availWidth, availHeight) def _getlastEntries(self, dummy=[(['Placeholder for index'],enumerate((None,)*3))]): '''Return the last run's entries! If there are none, returns dummy.''' lE = self._lastEntries or self._entries if not lE: return dummy return list(sorted(lE.items())) def _build(self,availWidth,availHeight): _tempEntries = [(tuple(asUnicode(t) for t in texts),pageNumbers) for texts, pageNumbers in self._getlastEntries()] def getkey(seq): return [''.join((c for c in unicodedata.normalize('NFD', x.upper()) if unicodedata.category(c) != 'Mn')) for x in seq[0]] _tempEntries.sort(key=getkey) leveloffset = self.headers and 1 or 0 def drawIndexEntryEnd(canvas, kind, label): '''Callback to draw dots and page numbers after each entry.''' style = self.getLevelStyle(leveloffset) pages = [(p[1],k) for p,k in sorted(decode_label(label))] drawPageNumbers(canvas, style, pages, availWidth, availHeight, self.dot) self.canv.drawIndexEntryEnd = drawIndexEntryEnd alpha = '' tableData = [] lastTexts = [] alphaStyle = self.getLevelStyle(0) for texts, pageNumbers in _tempEntries: texts = list(texts) #track when the first character changes; either output some extra #space, or the first letter on a row of its own. We cannot do #widow/orphan control, sadly. nalpha = ''.join((c for c in unicodedata.normalize('NFD', texts[0][0].upper()) if unicodedata.category(c) != 'Mn')) if alpha != nalpha: alpha = nalpha if self.headers: header = alpha else: header = ' ' tableData.append([Spacer(1, alphaStyle.spaceBefore),]) tableData.append([Paragraph(header, alphaStyle),]) tableData.append([Spacer(1, alphaStyle.spaceAfter),]) i, diff = listdiff(lastTexts, texts) if diff: lastTexts = texts texts = texts[i:] label = encode_label(list(pageNumbers)) texts[-1] = '%s' % (texts[-1], label) for text in texts: #Platypus and RML differ on how parsed XML attributes are escaped. #e.g. . The only place this seems to bite us is in #the index entries so work around it here. text = escapeOnce(text) style = self.getLevelStyle(i+leveloffset) para = Paragraph(text, style) if style.spaceBefore: tableData.append([Spacer(1, style.spaceBefore),]) tableData.append([para,]) i += 1 self._flowable = Table(tableData, colWidths=[availWidth], style=self.tableStyle) def wrap(self, availWidth, availHeight): "All table properties should be known by now." self._build(availWidth,availHeight) self.width, self.height = self._flowable.wrapOn(self.canv,availWidth, availHeight) return self.width, self.height def drawOn(self, canvas, x, y, _sW=0): """Don't do this at home! The standard calls for implementing draw(); we are hooking this in order to delegate ALL the drawing work to the embedded table object. """ self._flowable.drawOn(canvas, x, y, _sW) def draw(self): t = self._flowable ocanv = getattr(t,'canv',None) if not ocanv: t.canv = self.canv try: t.draw() finally: if not ocanv: del t.canv def getLevelStyle(self, n): '''Returns the style for level n, generating and caching styles on demand if not present.''' if not hasattr(self.textStyle, '__iter__'): self.textStyle = [self.textStyle] try: return self.textStyle[n] except IndexError: self.textStyle = list(self.textStyle) prevstyle = self.getLevelStyle(n-1) self.textStyle.append(ParagraphStyle( name='%s-%d-indented' % (prevstyle.name, n), parent=prevstyle, firstLineIndent = prevstyle.firstLineIndent+.2*cm, leftIndent = prevstyle.leftIndent+.2*cm)) return self.textStyle[n] AlphabeticIndex = SimpleIndex def listdiff(l1, l2): m = min(len(l1), len(l2)) for i in range(m): if l1[i] != l2[i]: return i, l2[i:] return m, l2[m:] class ReferenceText(IndexingFlowable): """Fakery to illustrate how a reference would work if we could put it in a paragraph.""" def __init__(self, textPattern, targetKey): self.textPattern = textPattern self.target = targetKey self.paraStyle = ParagraphStyle('tmp') self._lastPageNum = None self._pageNum = -999 self._para = None def beforeBuild(self): self._lastPageNum = self._pageNum def notify(self, kind, stuff): if kind == 'Target': (key, pageNum) = stuff if key == self.target: self._pageNum = pageNum def wrap(self, availWidth, availHeight): text = self.textPattern % self._lastPageNum self._para = Paragraph(text, self.paraStyle) return self._para.wrap(availWidth, availHeight) def drawOn(self, canvas, x, y, _sW=0): self._para.drawOn(canvas, x, y, _sW) reportlab-3.5.34/src/reportlab/platypus/paragraph.py0000664000175000017500000030415113544671343023373 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/platypus/paragraph.py __all__=( 'Paragraph', 'cleanBlockQuotedText', 'ParaLines', 'FragLine', ) __version__='3.5.20' __doc__='''The standard paragraph implementation''' from string import whitespace from operator import truth from unicodedata import category from reportlab.pdfbase.pdfmetrics import stringWidth, getFont, getAscentDescent from reportlab.platypus.paraparser import ParaParser, _PCT, _num as _parser_num, _re_us_value from reportlab.platypus.flowables import Flowable from reportlab.lib.colors import Color from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY from reportlab.lib.geomutils import normalizeTRBL from reportlab.lib.textsplit import wordSplit, ALL_CANNOT_START from copy import deepcopy from reportlab.lib.abag import ABag from reportlab.rl_config import platypus_link_underline, decimalSymbol, _FUZZ,\ paraFontSizeHeightOffset, hyphenationMinWordLength from reportlab.lib.utils import _className, isBytes, unicodeT, bytesT, isStr from reportlab.lib.rl_accel import sameFrag from reportlab import xrange import re from types import MethodType try: import pyphen except: pyphen = None #on UTF8/py33 branch, split and strip must be unicode-safe! #thanks to Dirk Holtwick for helpful discussions/insight #on this one _wsc = ''.join(( u'\u0009', # HORIZONTAL TABULATION u'\u000A', # LINE FEED u'\u000B', # VERTICAL TABULATION u'\u000C', # FORM FEED u'\u000D', # CARRIAGE RETURN u'\u001C', # FILE SEPARATOR u'\u001D', # GROUP SEPARATOR u'\u001E', # RECORD SEPARATOR u'\u001F', # UNIT SEPARATOR u'\u0020', # SPACE u'\u0085', # NEXT LINE #u'\u00A0', # NO-BREAK SPACE u'\u1680', # OGHAM SPACE MARK u'\u2000', # EN QUAD u'\u2001', # EM QUAD u'\u2002', # EN SPACE u'\u2003', # EM SPACE u'\u2004', # THREE-PER-EM SPACE u'\u2005', # FOUR-PER-EM SPACE u'\u2006', # SIX-PER-EM SPACE u'\u2007', # FIGURE SPACE u'\u2008', # PUNCTUATION SPACE u'\u2009', # THIN SPACE u'\u200A', # HAIR SPACE u'\u200B', # ZERO WIDTH SPACE u'\u2028', # LINE SEPARATOR u'\u2029', # PARAGRAPH SEPARATOR u'\u202F', # NARROW NO-BREAK SPACE u'\u205F', # MEDIUM MATHEMATICAL SPACE u'\u3000', # IDEOGRAPHIC SPACE )) _wsc_re_split=re.compile('[%s]+'% re.escape(_wsc)).split _wsc_end_search=re.compile('[%s]+$'% re.escape(_wsc)).search def _usConv(s, vMap, default=None): '''convert a strike/underline distance to a number''' if isStr(s): s = s.strip() if s: m = _re_us_value.match(s) if m: return float(m.group(1))*vMap[m.group(2)] else: return _parser_num(s,allowRelative=False) elif default: return default return s def split(text, delim=None): if isBytes(text): text = text.decode('utf8') if delim is not None and isBytes(delim): delim = delim.decode('utf8') return [uword for uword in (_wsc_re_split(text) if delim is None and u'\xa0' in text else text.split(delim))] def strip(text): if isBytes(text): text = text.decode('utf8') return text.strip(_wsc) def lstrip(text): if isBytes(text): text = text.decode('utf8') return text.lstrip(_wsc) def rstrip(text): if isBytes(text): text = text.decode('utf8') return text.rstrip(_wsc) class ParaLines(ABag): """ class ParaLines contains the broken into lines representation of Paragraphs kind=0 Simple fontName, fontSize, textColor apply to whole Paragraph lines [(extraSpace1,words1),....,(extraspaceN,wordsN)] kind==1 Complex lines [FragLine1,...,FragLineN] """ class FragLine(ABag): """ class FragLine contains a styled line (ie a line with more than one style):: extraSpace unused space for justification only wordCount 1+spaces in line for justification purposes words [ParaFrags] style text lumps to be concatenated together fontSize maximum fontSize seen on the line; not used at present, but could be used for line spacing. """ def _lineClean(L): return ' '.join(list(filter(truth,split(strip(L))))) def cleanBlockQuotedText(text,joiner=' '): """This is an internal utility which takes triple- quoted text form within the document and returns (hopefully) the paragraph the user intended originally.""" L=list(filter(truth,list(map(_lineClean, split(text, '\n'))))) return joiner.join(L) def setXPos(tx,dx): if dx>1e-6 or dx<-1e-6: tx.setXPos(dx) def _nbspCount(w): if isBytes(w): return w.count(b'\xc2\xa0') else: return w.count(u'\xa0') def _leftDrawParaLine( tx, offset, extraspace, words, last=0): simple = extraspace>-1e-8 or getattr(tx,'preformatted',False) text = ' '.join(words) setXPos(tx,offset) if not simple: nSpaces = len(words)+_nbspCount(text)-1 simple = not nSpaces if simple: tx._textOut(text,1) else: tx.setWordSpace(extraspace / float(nSpaces)) tx._textOut(text,1) tx.setWordSpace(0) setXPos(tx,-offset) return offset def _centerDrawParaLine( tx, offset, extraspace, words, last=0): simple = extraspace>-1e-8 or getattr(tx,'preformatted',False) text = ' '.join(words) if not simple: nSpaces = len(words)+_nbspCount(text)-1 simple = not nSpaces if simple: m = offset + 0.5 * extraspace setXPos(tx,m) tx._textOut(text,1) else: m = offset tx.setWordSpace(extraspace / float(nSpaces)) setXPos(tx,m) tx._textOut(text,1) tx.setWordSpace(0) setXPos(tx,-m) return m def _rightDrawParaLine( tx, offset, extraspace, words, last=0): simple = extraspace>-1e-8 or getattr(tx,'preformatted',False) text = ' '.join(words) if not simple: nSpaces = len(words)+_nbspCount(text)-1 simple = not nSpaces if simple: m = offset + extraspace setXPos(tx,m) tx._textOut(' '.join(words),1) else: m = offset tx.setWordSpace(extraspace / float(nSpaces)) setXPos(tx,m) tx._textOut(text,1) tx.setWordSpace(0) setXPos(tx,-m) return m def _justifyDrawParaLine( tx, offset, extraspace, words, last=0): setXPos(tx,offset) text = ' '.join(words) simple = last or (-1e-81e-8: cur_y = xcy tx.setTextOrigin(x0,cur_y) xs.cur_y = cur_y tx._olb = cur_y - descent tx._oleading = leading ws = getattr(tx,'_wordSpace',0) nSpaces = 0 words = line.words AL = [] LL = [] us_lines = xs.us_lines links = xs.links for i, f in enumerate(words): if hasattr(f,'cbDefn'): cbDefn = f.cbDefn kind = cbDefn.kind if kind=='img': #draw image cbDefn,cur_y,cur_x txfs = tx._fontsize if txfs is None: txfs = xs.style.fontSize w = imgNormV(cbDefn.width,xs.paraWidth) h = imgNormV(cbDefn.height,txfs) iy0,iy1 = imgVRange(h,cbDefn.valign,txfs) cur_x_s = cur_x + nSpaces*ws tx._canvas.drawImage(cbDefn.image,cur_x_s,cur_y+iy0,w,h,mask='auto') cur_x += w cur_x_s += w setXPos(tx,cur_x_s-tx._x0) else: name = cbDefn.name if kind=='anchor': tx._canvas.bookmarkHorizontal(name,cur_x,cur_y+leading) else: func = getattr(tx._canvas,name,None) if not func: raise AttributeError("Missing %s callback attribute '%s'" % (kind,name)) tx._canvas._curr_tx_info=dict(tx=tx,cur_x=cur_x,cur_y=cur_y,leading=leading,xs=tx.XtraState) try: func(tx._canvas,kind,getattr(cbDefn,'label',None)) finally: del tx._canvas._curr_tx_info if f is words[-1]: if not tx._fontname: tx.setFont(xs.style.fontName,xs.style.fontSize) tx._textOut('',1) else: cur_x_s = cur_x + nSpaces*ws end_x = cur_x_s fontSize = f.fontSize textColor = f.textColor rise = f.rise if i > 0: end_x = cur_x_s - (0 if preformatted else _trailingSpaceLength(words[i-1].text, tx)) if (tx._fontname,tx._fontsize)!=(f.fontName,fontSize): tx._setFont(f.fontName, fontSize) if xs.textColor!=textColor: xs.textColor = textColor tx.setFillColor(textColor) if xs.rise!=rise: xs.rise=rise tx.setRise(rise) text = f.text tx._textOut(text,f is words[-1]) # cheap textOut if LL != f.us_lines: S = set(LL) NS = set(f.us_lines) nL = NS - S #new lines eL = S - NS #ending lines for l in eL: us_lines[l] = us_lines[l],end_x for l in nL: us_lines[l] = (l,fontSize,textColor,cur_x_s),fontSize LL = f.us_lines if LL: for l in LL: l0, fsmax = us_lines[l] if fontSize>fsmax: us_lines[l] = l0, fontSize nlo = rise - 0.2*fontSize nhi = rise + fontSize if AL != f.link: S = set(AL) NS = set(f.link) nL = NS - S #new linkis eL = S - NS #ending links for l in eL: links[l] = links[l],end_x for l in nL: links[l] = (l,cur_x),nlo,nhi AL = f.link if AL: for l in AL: l0, lo, hi = links[l] if nlohi: links[l] = l0,min(nlo,lo),max(nhi,hi) bg = getattr(f,'backColor',None) if bg and not xs.backColor: xs.backColor = bg xs.backColor_x = cur_x_s elif xs.backColor: if not bg: xs.backColors.append( (xs.backColor_x, end_x, xs.backColor) ) xs.backColor = None elif f.backColor!=xs.backColor or xs.textColor!=xs.backColor: xs.backColors.append( (xs.backColor_x, end_x, xs.backColor) ) xs.backColor = bg xs.backColor_x = cur_x_s txtlen = tx._canvas.stringWidth(text, tx._fontname, tx._fontsize) cur_x += txtlen nSpaces += text.count(' ')+_nbspCount(text) cur_x_s = cur_x+(nSpaces-1)*ws if last and pKind!='right' and xs.style.endDots: _do_dots_frag(cur_x,cur_x_s,line.maxWidth,xs,tx) if LL: for l in LL: us_lines[l] = us_lines[l], cur_x_s if AL: for l in AL: links[l] = links[l], cur_x_s if xs.backColor: xs.backColors.append( (xs.backColor_x, cur_x_s, xs.backColor) ) if tx._x0!=x0: setXPos(tx,x0-tx._x0) def _do_dots_frag(cur_x, cur_x_s, maxWidth, xs, tx): text,fontName,fontSize,textColor,backColor,dy = _getDotsInfo(xs.style) txtlen = tx._canvas.stringWidth(text, fontName, fontSize) if cur_x_s+txtlen<=maxWidth: if tx._fontname!=fontName or tx._fontsize!=fontSize: tx.setFont(fontName,fontSize) maxWidth += getattr(tx,'_dotsOffsetX',tx._x0) tx.setTextOrigin(0,xs.cur_y+dy) setXPos(tx,cur_x_s-cur_x) n = int((maxWidth-cur_x_s)/txtlen) setXPos(tx,maxWidth - txtlen*n) if xs.textColor!=textColor: tx.setFillColor(textColor) if backColor: xs.backColors.append((cur_x,maxWidth,backColor)) tx._textOut(n*text,1) if dy: tx.setTextOrigin(tx._x0,xs.cur_y-dy) def _leftDrawParaLineX( tx, offset, line, last=0): setXPos(tx,offset) extraSpace = line.extraSpace simple = extraSpace>-1e-8 or getattr(line,'preformatted',False) if not simple: nSpaces = line.wordCount+sum([_nbspCount(w.text) for w in line.words if not hasattr(w,'cbDefn')])-1 simple = not nSpaces if simple: _putFragLine(offset, tx, line, last, 'left') else: tx.setWordSpace(extraSpace / float(nSpaces)) _putFragLine(offset, tx, line, last, 'left') tx.setWordSpace(0) setXPos(tx,-offset) def _centerDrawParaLineX( tx, offset, line, last=0): tx._dotsOffsetX = offset + tx._x0 try: extraSpace = line.extraSpace simple = extraSpace>-1e-8 or getattr(line,'preformatted',False) if not simple: nSpaces = line.wordCount+sum([_nbspCount(w.text) for w in line.words if not hasattr(w,'cbDefn')])-1 simple = not nSpaces if simple: m = offset+0.5*line.extraSpace setXPos(tx,m) _putFragLine(m, tx, line, last,'center') else: m = offset tx.setWordSpace(extraSpace / float(nSpaces)) _putFragLine(m, tx, line, last, 'center') tx.setWordSpace(0) setXPos(tx,-m) finally: del tx._dotsOffsetX def _rightDrawParaLineX( tx, offset, line, last=0): extraSpace = line.extraSpace simple = extraSpace>-1e-8 or getattr(line,'preformatted',False) if not simple: nSpaces = line.wordCount+sum([_nbspCount(w.text) for w in line.words if not hasattr(w,'cbDefn')])-1 simple = not nSpaces if simple: m = offset+line.extraSpace setXPos(tx,m) _putFragLine(m,tx, line, last, 'right') else: m = offset tx.setWordSpace(extraSpace / float(nSpaces)) _putFragLine(m, tx, line, last, 'right') tx.setWordSpace(0) setXPos(tx,-m) def _justifyDrawParaLineX( tx, offset, line, last=0): setXPos(tx,offset) extraSpace = line.extraSpace simple = last or abs(extraSpace)<=1e-8 or line.lineBreak if not simple: nSpaces = line.wordCount+sum([_nbspCount(w.text) for w in line.words if not hasattr(w,'cbDefn')])-1 simple = not nSpaces if not simple: tx.setWordSpace(extraSpace / float(nSpaces)) _putFragLine(offset, tx, line, last, 'justify') tx.setWordSpace(0) else: _putFragLine(offset, tx, line, last, 'justify') #no space modification setXPos(tx,-offset) def _trailingSpaceLength(text, tx): ws = _wsc_end_search(text) return tx._canvas.stringWidth(ws.group(), tx._fontname, tx._fontsize) if ws else 0 class _HSFrag(list): pass class _SplitFrag(list): '''a split frag''' pass class _SplitFragH(_SplitFrag): '''a split frag that's the head part of the split''' pass class _SplitFragHY(_SplitFragH): '''a head split frag that need '-' removing befire rejoining''' pass class _SplitFragHS(_SplitFrag,_HSFrag): """a split frag that's followed by a space""" pass def _processed_frags(frags): try: return isinstance(frags[0][0],(float,int)) except: return False _FK_TEXT = 0 _FK_IMG = 1 _FK_APPEND = 2 _FK_BREAK = 3 def _getFragWords(frags,maxWidth=None): ''' given a Parafrag list return a list of fragwords [[size, (f00,w00), ..., (f0n,w0n)],....,[size, (fm0,wm0), ..., (f0n,wmn)]] each pair f,w represents a style and some string each sublist represents a word ''' def _rescaleFrag(f): w = f[0] if isinstance(w,_PCT): if w._normalizer!=maxWidth: w._normalizer = maxWidth w = w.normalizedValue(maxWidth) f[0] = w R = [] aR = R.append W = [] if _processed_frags(frags): aW = W.append for f in frags: _rescaleFrag(f) if isinstance(f,_SplitFrag): f0 = f[0] if not W: W0t = type(f0) Wlen = 0 sty = None else: if isinstance(lf,_SplitFragHY): sty, t = W[-1] Wlen -= stringWidth(t[-1],sty.fontName,sty.fontSize) + 1e-8 W[-1] = (sty,t[:-1]) #strip the '-' Wlen += f0 for ts,t in f[1:]: if ts is sty: W[-1] = (sty,W[-1][1]+t) else: aW((ts,t)) sty = ts #W.extend(f[1:]) lf = f #latest f in W continue else: if W: #must end a joining aR((_HSFrag if isinstance(lf,_HSFrag) else list)([W0t(Wlen)]+W)) del W[:] aR(f) if W: #must end a joining aR((_HSFrag if isinstance(lf,_HSFrag) else list)([W0t(Wlen)]+W)) else: hangingSpace = False n = 0 hangingStrip = True for f in frags: text = f.text if text!='': f._fkind = _FK_TEXT if hangingStrip: text = lstrip(text) if not text: continue hangingStrip = False S = split(text) if text[0] in whitespace or not S: if W: W.insert(0,n) #end preceding word aR(W) whs = hangingSpace W = [] hangingSpace = False n = 0 else: whs = R and isinstance(R[-1],_HSFrag) if not whs: S.insert(0,'') elif not S: continue for w in S[:-1]: W.append((f,w)) n += stringWidth(w, f.fontName, f.fontSize) W.insert(0,n) aR(_HSFrag(W)) W = [] n = 0 hangingSpace = False w = S[-1] W.append((f,w)) n += stringWidth(w, f.fontName, f.fontSize) if text and text[-1] in whitespace: W.insert(0,n) aR(_HSFrag(W)) W = [] n = 0 elif hasattr(f,'cbDefn'): cb = f.cbDefn w = getattr(cb,'width',0) if w: if hasattr(w,'normalizedValue'): w._normalizer = maxWidth w = w.normalizedValue(maxWidth) if W: W.insert(0,n) aR(_HSFrag(W) if hangingSpace else W) W = [] hangingSpace = False n = 0 f._fkind = _FK_IMG aR([w,(f,'')]) hangingStrip = False else: f._fkind = _FK_APPEND if not W and R and isinstance(R[-1],_HSFrag): R[-1].append((f,'')) else: W.append((f,'')) elif hasattr(f, 'lineBreak'): #pass the frag through. The line breaker will scan for it. if W: W.insert(0,n) aR(W) W = [] n = 0 hangingSpace = False f._fkind = _FK_BREAK aR([0,(f,'')]) hangingStrip = True if W: W.insert(0,n) aR(W) if not R: if frags: f = frags[0] f._fkind = _FK_TEXT R = [[0,(f,u'')]] return R def _fragWordIter(w): for f, s in w[1:]: if hasattr(f,'cbDefn'): yield f, getattr(f,'width',0), s elif s: if isBytes(s): s = s.decode('utf8') #only encoding allowed for c in s: yield f, stringWidth(c,f.fontName, f.fontSize), c else: yield f, 0, s def _splitFragWord(w,maxWidth,maxWidths,lineno): '''given a frag word, w, as returned by getFragWords split it into frag words that fit in lines of length maxWidth maxWidths[lineno+1] ..... maxWidths[lineno+n] return the new word list which is either _SplitFrag....._SPlitFrag or _SplitFrag....._SplitFragHS if the word is hanging space. ''' R = [] maxlineno = len(maxWidths)-1 W = [] lineWidth = 0 fragText = u'' wordWidth = 0 f = w[1][0] for g,cw,c in _fragWordIter(w): newLineWidth = lineWidth+cw tooLong = newLineWidth>maxWidth if g is not f or tooLong: f = f.clone() if hasattr(f,'text'): f.text = fragText W.append((f,fragText)) if tooLong: W = _SplitFrag([wordWidth]+W) R.append(W) lineno += 1 maxWidth = maxWidths[min(maxlineno,lineno)] W = [] newLineWidth = cw wordWidth = 0 fragText = u'' f = g wordWidth += cw fragText += c lineWidth = newLineWidth W.append((f,fragText)) W = (_SplitFragHS if isinstance(w,_HSFrag) else _SplitFragH)([wordWidth]+W) R.append(W) return R #derived from Django validator #https://github.com/django/django/blob/master/django/core/validators.py uri_pat = re.compile(u'(^(?:[a-z0-9\\.\\-\\+]*)://)(?:\\S+(?::\\S*)?@)?(?:(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}|\\[[0-9a-f:\\.]+\\]|([a-z\xa1-\uffff0-9](?:[a-z\xa1-\uffff0-9-]{0,61}[a-z\xa1-\uffff0-9])?(?:\\.(?!-)[a-z\xa1-\uffff0-9-]{1,63}(?maxWidth or (uriWasteReduce and w0 <= (1-uriWasteReduce)*maxWidth): #we matched a uri and it makes sense to split for h, t in R: h = pfx+h t = t + sfx hw = stringWidth(h,fontName,fontSize) tw = w0 + hw if tw<=maxWidth: return u'',0,hw,ww-hw,h,t return H = _hy_shy_pat.split(s) if hyphenator and (_hy_letters_pat.match(s) or (_hy_shy_letters_pat.match(s) and u'' not in H)): hylen = stringWidth(u'-',fontName,fontSize) for h,t in hyphenator(s): h = pfx + h if not _hy_shy_pat.match(h[-1]): jc = u'-' jclen = hylen else: jc = u'' jclen = 0 t = t + sfx hw = stringWidth(h,fontName,fontSize) tw = hw+w0 + jclen if tw<=maxWidth: return jc,jclen,hw,ww-hw,h,t #even though the above tries for words with '-' it may be that no split ended with '-' #so this may succeed where the above does not n = len(H) if n>=3 and embeddedHyphenation and u'' not in H and _hy_shy_letters_pat.match(s): for i in reversed(xrange(2,n,2)): h = pfx + ''.join(H[:i]) t = ''.join(H[i:]) + sfx hw = stringWidth(h,fontName,fontSize) tw = hw+w0 if tw<=maxWidth: return u'',0,hw,ww-hw,h,t def _fragWordSplitRep(FW): '''takes a frag word and assembles a unicode word from it if a rise is seen or a non-zerowidth cbdefn then we return None. Otherwise we return (uword,([i1,c1],[i2,c2],...]) where each ii is the index of the word fragment in the word ''' cc = plen = 0 X = [] eX = X.extend U = [] aU = U.append for i in xrange(1,len(FW)): f, t = FW[i] if f.rise!=0: return None if hasattr(f,'cbDefn') and getattr(f.cbDefn,'width',0): return if not t: continue if isBytes(t): t = t.decode('utf8') aU(t) eX(len(t)*[(i,cc)]) cc += len(t) return u''.join(U),tuple(X) def _rebuildFragWord(F): '''F are the frags''' return [sum((stringWidth(u,s.fontName,s.fontSize) for s,u in F))]+F def _hyGenFragsPair(hyphenator, FW, newWidth, maxWidth, uriWasteReduce, embeddedHyphenation, hymwl): X = _fragWordSplitRep(FW) if not X: return s, X = X if isBytes(s): s = s.decode('utf8') #only encoding allowed m = _hy_pfx_pat.match(s) if m: pfx = m.group(0) s = s[len(pfx):] else: pfx = u'' m = _hy_sfx_pat.search(s) if m: sfx = m.group(0) s = s[:-len(sfx)] else: sfx = u'' if len(s) < hymwl: return ww = FW[0] w0 = newWidth - ww #try for a uri R = _uri_split_pairs(s) if R is not None: #a uri match was seen if ww>maxWidth or (uriWasteReduce and w0 <= (1-uriWasteReduce)*maxWidth): #we matched a uri and it makes sense to split for h, t in R: h = pfx+h pos = len(h) #FW[fx] is split fx, cc = X[pos] FL = FW[1:fx] ffx, sfx = FW[fx] sfxl = sfx[:pos-cc] if sfxl: FL.append((ffx,sfxl)) sfxr = sfx[pos-cc:] FR = FW[fx+1:] if sfxr: FR.insert(0,(ffx,sfxr)) h = _rebuildFragWord(FL) hw = h[0] t = [ww-hw]+FR tw = w0+hw if tw<=maxWidth: return u'',0,hw,ww-hw,h,t return H = _hy_shy_pat.split(s) if hyphenator and (_hy_letters_pat.match(s) or (_hy_shy_letters_pat.match(s) and u'' not in H)): #not too diffcult for now for h,t in hyphenator(s): h = pfx+h pos = len(h) #FW[fx] is split fx, cc = X[pos] FL = FW[1:fx] ffx, sfx = FW[fx] sfxl = sfx[:pos-cc] if not _hy_shy_pat.match(h[-1]): jc = u'-' else: jc = u'' if sfxl or jc: FL.append((ffx,sfxl+jc)) sfxr = sfx[pos-cc:] FR = FW[fx+1:] if sfxr: FR.insert(0,(ffx,sfxr)) h = _rebuildFragWord(FL) hw = h[0] ohw = stringWidth(sfxl,ffx.fontName,ffx.fontSize) t = [ww-ohw]+FR tw = w0+hw if tw<=maxWidth: return jc,hw-ohw,hw,ww-ohw,h,t #even though the above tries for words with '-' it may be that no split ended with '-' #so this may succeed where the above does not n = len(H) if n>=3 and embeddedHyphenation and u'' not in H and _hy_shy_letters_pat.match(s): for i in reversed(xrange(2,n,2)): pos = len(pfx + u''.join(H[:i])) fx, cc = X[pos] #FW[fx] is split FL = FW[1:fx] ffx, sfx = FW[fx] sfxl = sfx[:pos-cc] if sfxl: FL.append((ffx,sfxl)) sfxr = sfx[pos-cc:] FR = FW[fx+1:] if sfxr: FR.insert(0,(ffx,sfxr)) h = _rebuildFragWord(FL) hw = h[0] t = [ww-hw]+FR tw = w0+hw if tw<=maxWidth: return u'',0,hw,ww-hw,h,t def _hyphenateFragWord(hyphenator,FW,newWidth,maxWidth,uriWasteReduce,embeddedHyphenation, hymwl=hyphenationMinWordLength): ww = FW[0] if ww==0: return [] if len(FW)==2: f, s = FW[1] R = _hyGenPair(hyphenator, s, ww, newWidth, maxWidth, f.fontName, f.fontSize,uriWasteReduce,embeddedHyphenation, hymwl) if R: jc, hylen, hw, tw, h, t = R return [(_SplitFragHY if jc else _SplitFragH)([hw+hylen,(f,h+jc)]),(_SplitFragHS if isinstance(FW,_HSFrag) else _SplitFrag)([tw,(f,t)])] else: R = _hyGenFragsPair(hyphenator, FW, newWidth, maxWidth,uriWasteReduce,embeddedHyphenation, hymwl) if R: jc, hylen, hw, tw, h, t = R return [(_SplitFragHY if jc else _SplitFragH)(h),(_SplitFragHS if isinstance(FW,_HSFrag) else _SplitFrag)(t)] return None class _SplitWord(unicodeT): pass class _SplitWordH(unicodeT): pass class _SplitWordHY(_SplitWordH): '''head part of a hyphenation word pair''' pass def _hyphenateWord(hyphenator,fontName,fontSize,w,ww,newWidth,maxWidth, uriWasteReduce,embeddedHyphenation, hymwl=hyphenationMinWordLength): if ww==0: return [] R = _hyGenPair(hyphenator, w, ww, newWidth, maxWidth, fontName, fontSize, uriWasteReduce,embeddedHyphenation, hymwl) if R: hy, hylen, hw, tw, h, t = R return [(_SplitWordHY if hy else _SplitWordH)(h+hy),_SplitWord(t)] def _splitWord(w,maxWidth,maxWidths,lineno,fontName,fontSize,encoding='utf8'): ''' split w into words that fit in lines of length maxWidth maxWidths[lineno+1] ..... maxWidths[lineno+n] then push those new words onto words ''' #TODO fix this to use binary search for the split points R = [] aR = R.append maxlineno = len(maxWidths)-1 lineWidth = 0 wordText = u'' if isBytes(w): w = w.decode(encoding) for c in w: cw = stringWidth(c,fontName,fontSize,encoding) newLineWidth = lineWidth+cw if newLineWidth>maxWidth: aR(_SplitWord(wordText)) lineno += 1 maxWidth = maxWidths[min(maxlineno,lineno)] newLineWidth = cw wordText = u'' wordText += c lineWidth = newLineWidth aR(_SplitWord(wordText)) return [c for c in R if c] def _yieldBLParaWords(blPara,start,stop): state = 0 R = [] aR = R.append for l in blPara.lines[start:stop]: for w in l[1]: if isinstance(w,_SplitWord): if R and isinstance(R[-1],_SplitWordHY): R[-1] = R[-1][:-1] #remove unwanted - aR(w) continue else: if R: yield ''.join(R) del R[:] yield w if R: yield ''.join(R) def _split_blParaSimple(blPara,start,stop): f = blPara.clone() for a in ('lines', 'kind', 'text'): if hasattr(f,a): delattr(f,a) f.words = list(_yieldBLParaWords(blPara,start,stop)) return [f] def _split_blParaHard(blPara,start,stop): f = [] lines = blPara.lines[start:stop] for l in lines: for w in l.words: f.append(w) if l is not lines[-1]: i = len(f)-1 while i>=0 and hasattr(f[i],'cbDefn') and not getattr(f[i].cbDefn,'width',0): i -= 1 if i>=0: g = f[i] if not g.text: g.text = ' ' elif g.text[-1]!=' ': g.text += ' ' return f def _drawBullet(canvas, offset, cur_y, bulletText, style, rtl): '''draw a bullet text could be a simple string or a frag list''' bulletAnchor = style.bulletAnchor if rtl or style.bulletAnchor!='start': numeric = bulletAnchor=='numeric' if isStr(bulletText): t = bulletText q = numeric and decimalSymbol in t if q: t = t[:t.index(decimalSymbol)] bulletWidth = stringWidth(t, style.bulletFontName, style.bulletFontSize) if q: bulletWidth += 0.5 * stringWidth(decimalSymbol, style.bulletFontName, style.bulletFontSize) else: #it's a list of fragments bulletWidth = 0 for f in bulletText: t = f.text q = numeric and decimalSymbol in t if q: t = t[:t.index(decimalSymbol)] bulletWidth += 0.5 * stringWidth(decimalSymbol, f.fontName, f.fontSize) bulletWidth += stringWidth(t, f.fontName, f.fontSize) if q: break else: bulletWidth = 0 if bulletAnchor=='middle': bulletWidth *= 0.5 cur_y += getattr(style,"bulletOffsetY",0) if not rtl: tx2 = canvas.beginText(style.bulletIndent-bulletWidth,cur_y) else: width = rtl[0] bulletStart = width+style.rightIndent-(style.bulletIndent+bulletWidth) tx2 = canvas.beginText(bulletStart, cur_y) tx2.setFont(style.bulletFontName, style.bulletFontSize) tx2.setFillColor(getattr(style,'bulletColor',style.textColor)) if isStr(bulletText): tx2.textOut(bulletText) else: for f in bulletText: tx2.setFont(f.fontName, f.fontSize) tx2.setFillColor(f.textColor) tx2.textOut(f.text) canvas.drawText(tx2) if not rtl: #AR making definition lists a bit less ugly #bulletEnd = tx2.getX() bulletEnd = tx2.getX() + style.bulletFontSize * 0.6 offset = max(offset,bulletEnd - style.leftIndent) return offset def _handleBulletWidth(bulletText,style,maxWidths): '''work out bullet width and adjust maxWidths[0] if neccessary ''' if bulletText: if isStr(bulletText): bulletWidth = stringWidth( bulletText, style.bulletFontName, style.bulletFontSize) else: #it's a list of fragments bulletWidth = 0 for f in bulletText: bulletWidth += stringWidth(f.text, f.fontName, f.fontSize) bulletLen = style.bulletIndent + bulletWidth + 0.6 * style.bulletFontSize if style.wordWrap=='RTL': indent = style.rightIndent+style.firstLineIndent else: indent = style.leftIndent+style.firstLineIndent if bulletLen > indent: #..then it overruns, and we have less space available on line 1 maxWidths[0] -= (bulletLen - indent) def splitLines0(frags,widths): ''' given a list of ParaFrags we return a list of ParaLines each ParaLine has 1) ExtraSpace 2) blankCount 3) [textDefns....] each text definition is a (ParaFrag, start, limit) triplet ''' #initialise the algorithm lines = [] lineNum = 0 maxW = widths[lineNum] i = -1 l = len(frags) lim = start = 0 while 1: #find a non whitespace character while imaxW and line!=[]: cLen = cLen-w #this is the end of the line while g.text[lim]==' ': lim = lim - 1 nSpaces = nSpaces-1 break if j<0: j = lim if g[0] is f: g[2] = j #extend else: g = (f,start,j) line.append(g) if j==lim: i += 1 def _do_line(tx, x1, y1, x2, y2, nlw, nsc): canv = tx._canvas olw = canv._lineWidth if nlw!=olw: canv.setLineWidth(nlw) osc = canv._strokeColorObj if nsc!=osc: canv.setStrokeColor(nsc) canv.line(x1, y1, x2, y2) def _do_under_line(i, x1, ws, tx, us_lines): xs = tx.XtraState style = xs.style y0 = xs.cur_y - i*style.leading f = xs.f fs = f.fontSize tc = f.textColor values = dict(L=fs,F=fs,f=fs) dw = tx._defaultLineWidth x2 = x1 + tx._canvas.stringWidth(' '.join(tx.XtraState.lines[i][1]), tx._fontname, fs) for n,k,c,w,o,r,m,g in us_lines: underline = k=='underline' lw = _usConv(w,values,default=tx._defaultLineWidth) lg = _usConv(g,values,default=1) dy = lg+lw if not underline: dy = -dy y = y0 + r + _usConv(('-0.125*L' if underline else '0.25*L') if o=='' else o,values) if not c: c = tc while m>0: tx._do_line(x1, y, x2, y, lw, c) y -= dy m -= 1 _scheme_re = re.compile('^[a-zA-Z][-+a-zA-Z0-9]+$') def _doLink(tx,link,rect): if not link: return if link.startswith('#'): tx._canvas.linkRect("", link[1:], rect, relative=1) else: parts = link.split(':',1) scheme = len(parts)==2 and parts[0].lower() or '' if scheme=='document': tx._canvas.linkRect("", parts[1], rect, relative=1) elif _scheme_re.match(scheme): kind=scheme.lower()=='pdf' and 'GoToR' or 'URI' if kind=='GoToR': link = parts[1] tx._canvas.linkURL(link, rect, relative=1, kind=kind) else: tx._canvas.linkURL(link, rect, relative=1, kind='URI') def _do_link_line(i, t_off, ws, tx): xs = tx.XtraState leading = xs.style.leading y = xs.cur_y - i*leading - xs.f.fontSize/8.0 # 8.0 factor copied from para.py text = ' '.join(xs.lines[i][1]) textlen = tx._canvas.stringWidth(text, tx._fontname, tx._fontsize) for n, link in xs.link: _doLink(tx, link, (t_off, y, t_off+textlen, y+leading)) def _do_post_text(tx): xs = tx.XtraState y0 = xs.cur_y f = xs.f leading = xs.style.leading autoLeading = xs.autoLeading fontSize = f.fontSize if autoLeading=='max': leading = max(leading,1.2*fontSize) elif autoLeading=='min': leading = 1.2*fontSize if xs.backColors: yl = y0 + fontSize ydesc = yl - leading for x1,x2,c in xs.backColors: tx._canvas.setFillColor(c) tx._canvas.rect(x1,ydesc,x2-x1,leading,stroke=0,fill=1) xs.backColors=[] xs.backColor=None for (((n,link),x1),lo,hi),x2 in sorted(xs.links.values()): _doLink(tx, link, (x1, y0+lo, x2, y0+hi)) xs.links = {} if xs.us_lines: #print 'lines' dw = tx._defaultLineWidth values = dict(L=fontSize) for (((n,k,c,w,o,r,m,g),fs,tc,x1),fsmax),x2 in sorted(xs.us_lines.values()): underline = k=='underline' values['f'] = fs values['F'] = fsmax lw = _usConv(w,values,default=tx._defaultLineWidth) lg = _usConv(g,values,default=1) dy = lg+lw if not underline: dy = -dy y = y0 + r + _usConv(o if o!='' else ('-0.125*L' if underline else '0.25*L'),values) #print 'n=%s k=%s x1=%s x2=%s r=%s c=%s w=%r o=%r fs=%r tc=%s y=%s lw=%r offs=%r' % (n,k,x1,x2,r,(c.hexval() if c else ''),w,o,fs,tc.hexval(),y,lw,y-y0-r) if not c: c = tc while m>0: tx._do_line(x1, y, x2, y, lw, c) y -= dy m -= 1 xs.us_lines = {} xs.cur_y -= leading def textTransformFrags(frags,style): tt = style.textTransform if tt: tt=tt.lower() if tt=='lowercase': tt = unicodeT.lower elif tt=='uppercase': tt = unicodeT.upper elif tt=='capitalize': tt = unicodeT.title elif tt=='none': return else: raise ValueError('ParaStyle.textTransform value %r is invalid' % style.textTransform) n = len(frags) if n==1: #single fragment the easy case frags[0].text = tt(frags[0].text) elif tt is unicodeT.title: pb = True for f in frags: u = f.text if not u: continue if u.startswith(u' ') or pb: u = tt(u) else: i = u.find(u' ') if i>=0: u = u[:i]+tt(u[i:]) pb = u.endswith(u' ') f.text = u else: for f in frags: u = f.text if not u: continue f.text = tt(u) class cjkU(unicodeT): '''simple class to hold the frag corresponding to a str''' def __new__(cls,value,frag,encoding): self = unicodeT.__new__(cls,value) self._frag = frag if hasattr(frag,'cbDefn'): w = getattr(frag.cbDefn,'width',0) self._width = w else: self._width = stringWidth(value,frag.fontName,frag.fontSize) return self frag = property(lambda self: self._frag) width = property(lambda self: self._width) def makeCJKParaLine(U,maxWidth,widthUsed,extraSpace,lineBreak,calcBounds): words = [] CW = [] f0 = FragLine() maxSize = maxAscent = minDescent = 0 for u in U: f = u.frag fontSize = f.fontSize if calcBounds: cbDefn = getattr(f,'cbDefn',None) if getattr(cbDefn,'width',0): descent, ascent = imgVRange(imgNormV(cbDefn.height,fontSize),cbDefn.valign,fontSize) else: ascent, descent = getAscentDescent(f.fontName,fontSize) else: ascent, descent = getAscentDescent(f.fontName,fontSize) maxSize = max(maxSize,fontSize) maxAscent = max(maxAscent,ascent) minDescent = min(minDescent,descent) if not sameFrag(f0,f): f0=f0.clone() f0.text = u''.join(CW) words.append(f0) CW = [] f0 = f CW.append(u) if CW: f0=f0.clone() f0.text = u''.join(CW) words.append(f0) return FragLine(kind=1,extraSpace=extraSpace,wordCount=1,words=words[1:],fontSize=maxSize,ascent=maxAscent,descent=minDescent,maxWidth=maxWidth,currentWidth=widthUsed,lineBreak=lineBreak) def cjkFragSplit(frags, maxWidths, calcBounds, encoding='utf8'): '''This attempts to be wordSplit for frags using the dumb algorithm''' U = [] #get a list of single glyphs with their widths etc etc for f in frags: text = f.text if isBytes(text): text = text.decode(encoding) if text: U.extend([cjkU(t,f,encoding) for t in text]) else: U.append(cjkU(text,f,encoding)) lines = [] i = widthUsed = lineStartPos = 0 maxWidth = maxWidths[0] nU = len(U) while imaxWidth + _FUZZ and widthUsed>0) or lineBreak if endLine: extraSpace = maxWidth - widthUsed if not lineBreak: if ord(u)<0x3000: # we appear to be inside a non-Asian script section. # (this is a very crude test but quick to compute). # This is likely to be quite rare so the speed of the # code below is hopefully not a big issue. The main # situation requiring this is that a document title # with an english product name in it got cut. # we count back and look for # - a space-like character # - reversion to Kanji (which would be a good split point) # - in the worst case, roughly half way back along the line limitCheck = (lineStartPos+i)>>1 #(arbitrary taste issue) for j in xrange(i-1,limitCheck,-1): uj = U[j] if uj and category(uj)=='Zs' or ord(uj)>=0x3000: k = j+1 if k if u not in ALL_CANNOT_START and i>lineStartPos+1: #otherwise we need to push the character back #the i>lineStart+1 condition ensures progress i -= 1 extraSpace += w lines.append(makeCJKParaLine(U[lineStartPos:i],maxWidth,widthUsed,extraSpace,lineBreak,calcBounds)) try: maxWidth = maxWidths[len(lines)] except IndexError: maxWidth = maxWidths[-1] # use the last one lineStartPos = i widthUsed = 0 #any characters left? if widthUsed > 0: lines.append(makeCJKParaLine(U[lineStartPos:],maxWidth,widthUsed,maxWidth-widthUsed,False,calcBounds)) return ParaLines(kind=1,lines=lines) class Paragraph(Flowable): """ Paragraph(text, style, bulletText=None, caseSensitive=1) text a string of stuff to go into the paragraph. style is a style definition as in reportlab.lib.styles. bulletText is an optional bullet defintion. caseSensitive set this to 0 if you want the markup tags and their attributes to be case-insensitive. This class is a flowable that can format a block of text into a paragraph with a given style. The paragraph Text can contain XML-like markup including the tags: ... - bold < u [color="red"] [width="pts"] [offset="pts"]> < /u > - underline width and offset can be empty meaning use existing canvas line width or with an f/F suffix regarded as a fraction of the font size < strike > < /strike > - strike through has the same parameters as underline ... - italics ... - underline ... - strike through ... - superscript ... - subscript link text attributes of links size/fontSize/uwidth/uoffset=num name/face/fontName=name fg/textColor/color/ucolor=color backcolor/backColor/bgcolor=color dest/destination/target/href/link=target underline=bool turn on underline anchor text attributes of anchors size/fontSize/uwidth/uoffset=num fontName=name fg/textColor/color/ucolor=color backcolor/backColor/bgcolor=color href=href underline="yes|no" width="w%" --> fontSize*w/100 idea from Roberto Alsina height="h%" --> linewidth*h/100 The whole may be surrounded by tags The and tags will work for the built-in fonts (Helvetica /Times / Courier). For other fonts you need to register a family of 4 fonts using reportlab.pdfbase.pdfmetrics.registerFont; then use the addMapping function to tell the library that these 4 fonts form a family e.g. from reportlab.lib.fonts import addMapping addMapping('Vera', 0, 0, 'Vera') #normal addMapping('Vera', 0, 1, 'Vera-Italic') #italic addMapping('Vera', 1, 0, 'Vera-Bold') #bold addMapping('Vera', 1, 1, 'Vera-BoldItalic') #italic and bold It will also be able to handle any MathML specified Greek characters. """ def __init__(self, text, style, bulletText = None, frags=None, caseSensitive=1, encoding='utf8'): self.caseSensitive = caseSensitive self.encoding = encoding self._setup(text, style, bulletText or getattr(style,'bulletText',None), frags, cleanBlockQuotedText) def __repr__(self): n = self.__class__.__name__ L = [n+"("] keys = list(self.__dict__.keys()) for k in keys: L.append('%s: %s' % (repr(k).replace("\n", " ").replace(" "," "),repr(getattr(self, k)).replace("\n", " ").replace(" "," "))) L.append(") #"+n) return '\n'.join(L) def _setup(self, text, style, bulletText, frags, cleaner): #This used to be a global parser to save overhead. #In the interests of thread safety it is being instantiated per paragraph. #On the next release, we'll replace with a cElementTree parser if frags is None: text = cleaner(text) _parser = ParaParser() _parser.caseSensitive = self.caseSensitive style, frags, bulletTextFrags = _parser.parse(text,style) if frags is None: raise ValueError("xml parser error (%s) in paragraph beginning\n'%s'"\ % (_parser.errors[0],text[:min(30,len(text))])) textTransformFrags(frags,style) if bulletTextFrags: bulletText = bulletTextFrags #AR hack self.text = text self.frags = frags #either the parse fragments or frag word list self.style = style self.bulletText = bulletText self.debug = 0 #turn this on to see a pretty one with all the margins etc. def wrap(self, availWidth, availHeight): if availWidth<_FUZZ: #we cannot fit here return 0, 0x7fffffff # work out widths array for breaking self.width = availWidth style = self.style leftIndent = style.leftIndent first_line_width = availWidth - (leftIndent+style.firstLineIndent) - style.rightIndent later_widths = availWidth - leftIndent - style.rightIndent self._wrapWidths = [first_line_width, later_widths] if style.wordWrap == 'CJK': #use Asian text wrap algorithm to break characters blPara = self.breakLinesCJK(self._wrapWidths) else: blPara = self.breakLines(self._wrapWidths) self.blPara = blPara autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading','')) leading = style.leading if blPara.kind==1: if autoLeading not in ('','off'): height = 0 if autoLeading=='max': for l in blPara.lines: height += max(l.ascent-l.descent,leading) elif autoLeading=='min': for l in blPara.lines: height += l.ascent - l.descent else: raise ValueError('invalid autoLeading value %r' % autoLeading) else: height = len(blPara.lines) * leading else: if autoLeading=='max': leading = max(leading,blPara.ascent-blPara.descent) elif autoLeading=='min': leading = blPara.ascent-blPara.descent height = len(blPara.lines) * leading self.height = height return self.width, height def minWidth(self): 'Attempt to determine a minimum sensible width' frags = self.frags nFrags= len(frags) if not nFrags: return 0 if nFrags==1 and not _processed_frags(frags): f = frags[0] fS = f.fontSize fN = f.fontName return max(stringWidth(w,fN,fS) for w in (split(f.text, ' ') if hasattr(f,'text') else f.words)) else: return max(w[0] for w in _getFragWords(frags)) def _split_blParaProcessed(self,blPara,start,stop): if not stop: return [] lines = blPara.lines sFW = lines[start].sFW sFWN = lines[stop].sFW if stop!=len(lines) else len(self.frags) return self.frags[sFW:sFWN] def _get_split_blParaFunc(self): return (_split_blParaSimple if self.blPara.kind==0 else (_split_blParaHard if not _processed_frags(self.frags) else self._split_blParaProcessed)) def split(self,availWidth, availHeight): if len(self.frags)<=0 or availWidth<_FUZZ or availHeight<_FUZZ: return [] #the split information is all inside self.blPara if not hasattr(self,'blPara'): self.wrap(availWidth,availHeight) blPara = self.blPara style = self.style autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading','')) leading = style.leading lines = blPara.lines if blPara.kind==1 and autoLeading not in ('','off'): s = height = 0 if autoLeading=='max': for i,l in enumerate(blPara.lines): h = max(l.ascent-l.descent,leading) n = height+h if n>availHeight+1e-8: break height = n s = i+1 elif autoLeading=='min': for i,l in enumerate(blPara.lines): n = height+l.ascent-l.descent if n>availHeight+1e-8: break height = n s = i+1 else: raise ValueError('invalid autoLeading value %r' % autoLeading) else: l = leading if autoLeading=='max': l = max(leading,1.2*style.fontSize) elif autoLeading=='min': l = 1.2*style.fontSize s = int(availHeight/float(l)) height = s*l allowOrphans = getattr(self,'allowOrphans',getattr(style,'allowOrphans',0)) if (not allowOrphans and s<=1) or s==0: #orphan or not enough room del self.blPara return [] n = len(lines) allowWidows = getattr(self,'allowWidows',getattr(style,'allowWidows',1)) if n<=s: return [self] if not allowWidows: if n==s+1: #widow? if (allowOrphans and n==3) or n>3: s -= 1 #give the widow some company else: del self.blPara #no room for adjustment; force the whole para onwards return [] func = self._get_split_blParaFunc() if style.endDots: style1 = deepcopy(style) style1.endDots = None else: style1 = style P1=self.__class__(None,style1,bulletText=self.bulletText,frags=func(blPara,0,s)) #this is a major hack P1.blPara = ParaLines(kind=1,lines=blPara.lines[0:s],aH=availHeight,aW=availWidth) #do not justify text if linebreak was inserted after the text #bug reported and fix contributed by Niharika Singh P1._JustifyLast = not (isinstance(blPara.lines[s-1],FragLine) and hasattr(blPara.lines[s-1], 'lineBreak') and blPara.lines[s-1].lineBreak) P1._splitpara = 1 P1.height = height P1.width = availWidth if style.firstLineIndent != 0: style = deepcopy(style) style.firstLineIndent = 0 P2=self.__class__(None,style,bulletText=None,frags=func(blPara,s,n)) #propagate attributes that might be on self; suggestion from Dirk Holtwick for a in ('autoLeading', #possible attributes that might be directly on self. ): if hasattr(self,a): setattr(P1,a,getattr(self,a)) setattr(P2,a,getattr(self,a)) return [P1,P2] def draw(self): #call another method for historical reasons. Besides, I #suspect I will be playing with alternate drawing routines #so not doing it here makes it easier to switch. self.drawPara(self.debug) def breakLines(self, width): """ Returns a broken line structure. There are two cases A) For the simple case of a single formatting input fragment the output is A fragment specifier with - kind = 0 - fontName, fontSize, leading, textColor - lines= A list of lines Each line has two items. 1. unused width in points 2. word list B) When there is more than one input formatting fragment the output is A fragment specifier with - kind = 1 - lines= A list of fragments each having fields - extraspace (needed for justified) - fontSize - words=word list each word is itself a fragment with various settings in addition frags becomes a frag word list This structure can be used to easily draw paragraphs with the various alignments. You can supply either a single width or a list of widths; the latter will have its last item repeated until necessary. A 2-element list is useful when there is a different first line indent; a longer list could be created to facilitate custom wraps around irregular objects.""" self._width_max = 0 if not isinstance(width,(tuple,list)): maxWidths = [width] else: maxWidths = width lines = [] self.height = lineno = 0 maxlineno = len(maxWidths)-1 style = self.style hyphenator = getattr(style,'hyphenationLang','') if hyphenator: if isStr(hyphenator): hyphenator = hyphenator.strip() if hyphenator and pyphen: hyphenator = pyphen.Pyphen(lang=hyphenator).iterate else: hyphenator = None elif not callable(hyphenator): raise ValueError('hyphenator should be a language spec or a callable unicode --> pairs not %r' % hyphenator) else: hyphenator = None uriWasteReduce = style.uriWasteReduce embeddedHyphenation = style.embeddedHyphenation spaceShrinkage = style.spaceShrinkage splitLongWords = style.splitLongWords attemptHyphenation = hyphenator or uriWasteReduce or embeddedHyphenation if attemptHyphenation: hymwl = getattr(style,'hyphenationMinWordLength',hyphenationMinWordLength) self._splitLongWordCount = self._hyphenations = 0 #for bullets, work out width and ensure we wrap the right amount onto line one _handleBulletWidth(self.bulletText,style,maxWidths) maxWidth = maxWidths[0] autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading','')) calcBounds = autoLeading not in ('','off') frags = self.frags nFrags= len(frags) if (nFrags==1 and not (style.endDots or hasattr(frags[0],'cbDefn') or hasattr(frags[0],'backColor') or _processed_frags(frags))): f = frags[0] fontSize = f.fontSize fontName = f.fontName ascent, descent = getAscentDescent(fontName,fontSize) if hasattr(f,'text'): text = strip(f.text) if not text: return f.clone(kind=0, lines=[],ascent=ascent,descent=descent,fontSize=fontSize) else: words = split(text) else: words = f.words[:] for w in words: if strip(w): break else: return f.clone(kind=0, lines=[],ascent=ascent,descent=descent,fontSize=fontSize) spaceWidth = stringWidth(' ', fontName, fontSize, self.encoding) dSpaceShrink = spaceShrinkage*spaceWidth spaceShrink = 0 cLine = [] currentWidth = -spaceWidth # hack to get around extra space for word 1 while words: word = words.pop(0) #this underscores my feeling that Unicode throughout would be easier! wordWidth = stringWidth(word, fontName, fontSize, self.encoding) newWidth = currentWidth + spaceWidth + wordWidth if newWidth>maxWidth+spaceShrink and not isinstance(word,_SplitWordH): if attemptHyphenation: hyOk = not getattr(f,'nobr',False) hsw = _hyphenateWord(hyphenator if hyOk else None, fontName, fontSize, word, wordWidth, newWidth, maxWidth+spaceShrink, uriWasteReduce if hyOk else False, embeddedHyphenation and hyOk, hymwl) if hsw: words[0:0] = hsw self._hyphenations += 1 continue if splitLongWords and not isinstance(word,_SplitWord): nmw = min(lineno,maxlineno) if wordWidth>max(maxWidths[nmw:nmw+1]): #a long word words[0:0] = _splitWord(word,maxWidth-spaceWidth-currentWidth,maxWidths,lineno,fontName,fontSize,self.encoding) self._splitLongWordCount += 1 continue if newWidth <= (maxWidth+spaceShrink) or not len(cLine): # fit one more on this line cLine.append(word) currentWidth = newWidth spaceShrink += dSpaceShrink else: if currentWidth > self._width_max: self._width_max = currentWidth #end of line lines.append((maxWidth - currentWidth, cLine)) cLine = [word] spaceShrink = 0 currentWidth = wordWidth lineno += 1 maxWidth = maxWidths[min(maxlineno,lineno)] #deal with any leftovers on the final line if cLine!=[]: if currentWidth>self._width_max: self._width_max = currentWidth lines.append((maxWidth - currentWidth, cLine)) return f.clone(kind=0, lines=lines,ascent=ascent,descent=descent,fontSize=fontSize) elif nFrags<=0: return ParaLines(kind=0, fontSize=style.fontSize, fontName=style.fontName, textColor=style.textColor, ascent=style.fontSize,descent=-0.2*style.fontSize, lines=[]) else: njlbv = not style.justifyBreaks words = [] FW = [] aFW = FW.append _words = _getFragWords(frags,maxWidth) sFW = 0 while _words: w = _words.pop(0) aFW(w) f = w[-1][0] fontName = f.fontName fontSize = f.fontSize if not words: n = dSpaceShrink = spaceShrink = spaceWidth = currentWidth = 0 maxSize = fontSize maxAscent, minDescent = getAscentDescent(fontName,fontSize) wordWidth = w[0] f = w[1][0] if wordWidth>0: newWidth = currentWidth + spaceWidth + wordWidth else: newWidth = currentWidth #test to see if this frag is a line break. If it is we will only act on it #if the current width is non-negative or the previous thing was a deliberate lineBreak lineBreak = f._fkind==_FK_BREAK if not lineBreak and newWidth>(maxWidth+spaceShrink) and not isinstance(w,_SplitFragH): if attemptHyphenation: hyOk = not getattr(f,'nobr',False) hsw = _hyphenateFragWord(hyphenator if hyOk else None, w,newWidth,maxWidth+spaceShrink, uriWasteReduce if hyOk else False, embeddedHyphenation and hyOk, hymwl) if hsw: _words[0:0] = hsw FW.pop(-1) #remove this as we are doing this one again self._hyphenations += 1 continue if splitLongWords and not isinstance(w,_SplitFrag): nmw = min(lineno,maxlineno) if wordWidth>max(maxWidths[nmw:nmw+1]): #a long word _words[0:0] = _splitFragWord(w,maxWidth-spaceWidth-currentWidth,maxWidths,lineno) FW.pop(-1) #remove this as we are doing this one again self._splitLongWordCount += 1 continue endLine = (newWidth>(maxWidth+spaceShrink) and n>0) or lineBreak if not endLine: if lineBreak: continue #throw it away nText = w[1][1] if nText: n += 1 fontSize = f.fontSize if calcBounds: if f._fkind==_FK_IMG: descent,ascent = imgVRange(imgNormV(f.cbDefn.height,fontSize),f.cbDefn.valign,fontSize) else: ascent, descent = getAscentDescent(f.fontName,fontSize) else: ascent, descent = getAscentDescent(f.fontName,fontSize) maxSize = max(maxSize,fontSize) maxAscent = max(maxAscent,ascent) minDescent = min(minDescent,descent) if not words: g = f.clone() words = [g] g.text = nText elif not sameFrag(g,f): if spaceWidth: i = len(words)-1 while i>=0: wi = words[i] i -= 1 if wi._fkind==_FK_TEXT: if not wi.text.endswith(' '): wi.text += ' ' spaceShrink += dSpaceShrink break g = f.clone() words.append(g) g.text = nText elif spaceWidth: if not g.text.endswith(' '): g.text += ' ' + nText spaceShrink += dSpaceShrink else: g.text += nText else: g.text += nText spaceWidth = stringWidth(' ',fontName,fontSize) if isinstance(w,_HSFrag) else 0 #of the space following this word dSpaceShrink = spaceWidth*spaceShrinkage ni = 0 for i in w[2:]: g = i[0].clone() g.text=i[1] if g.text: ni = 1 words.append(g) fontSize = g.fontSize if calcBounds: if g._fkind==_FK_IMG: descent,ascent = imgVRange(imgNormV(g.cbDefn.height,fontSize),g.cbDefn.valign,fontSize) else: ascent, descent = getAscentDescent(g.fontName,fontSize) else: ascent, descent = getAscentDescent(g.fontName,fontSize) maxSize = max(maxSize,fontSize) maxAscent = max(maxAscent,ascent) minDescent = min(minDescent,descent) if not nText and ni: #one bit at least of the word was real n+=1 currentWidth = newWidth else: #either it won't fit, or it's a lineBreak tag if lineBreak: g = f.clone() #del g.lineBreak words.append(g) if currentWidth>self._width_max: self._width_max = currentWidth #end of line lines.append(FragLine(extraSpace=maxWidth-currentWidth, wordCount=n, lineBreak=lineBreak and njlbv, words=words, fontSize=maxSize, ascent=maxAscent, descent=minDescent, maxWidth=maxWidth, sFW=sFW)) sFW = len(FW)-1 #start new line lineno += 1 maxWidth = maxWidths[min(maxlineno,lineno)] if lineBreak: words = [] continue spaceWidth = stringWidth(' ',fontName,fontSize) if isinstance(w,_HSFrag) else 0 #of the space following this word dSpaceShrink = spaceWidth*spaceShrinkage currentWidth = wordWidth n = 1 spaceShrink = 0 g = f.clone() maxSize = g.fontSize if calcBounds: if g._fkind==_FK_IMG: descent,ascent = imgVRange(imgNormV(g.cbDefn.height,fontSize),g.cbDefn.valign,fontSize) else: maxAscent, minDescent = getAscentDescent(g.fontName,maxSize) else: maxAscent, minDescent = getAscentDescent(g.fontName,maxSize) words = [g] g.text = w[1][1] for i in w[2:]: g = i[0].clone() g.text=i[1] words.append(g) fontSize = g.fontSize if calcBounds: if g._fkind==_FK_IMG: descent,ascent = imgVRange(imgNormV(g.cbDefn.height,fontSize),g.cbDefn.valign,fontSize) else: ascent, descent = getAscentDescent(g.fontName,fontSize) else: ascent, descent = getAscentDescent(g.fontName,fontSize) maxSize = max(maxSize,fontSize) maxAscent = max(maxAscent,ascent) minDescent = min(minDescent,descent) #deal with any leftovers on the final line if words: if currentWidth>self._width_max: self._width_max = currentWidth lines.append(ParaLines(extraSpace=(maxWidth - currentWidth),wordCount=n,lineBreak=False, words=words, fontSize=maxSize,ascent=maxAscent,descent=minDescent,maxWidth=maxWidth,sFW=sFW)) self.frags = FW return ParaLines(kind=1, lines=lines) def breakLinesCJK(self, maxWidths): """Initially, the dumbest possible wrapping algorithm. Cannot handle font variations.""" if not isinstance(maxWidths,(list,tuple)): maxWidths = [maxWidths] style = self.style self.height = 0 #for bullets, work out width and ensure we wrap the right amount onto line one _handleBulletWidth(self.bulletText, style, maxWidths) frags = self.frags nFrags = len(frags) if nFrags==1 and not hasattr(frags[0],'cbDefn') and not style.endDots: f = frags[0] if hasattr(self,'blPara') and getattr(self,'_splitpara',0): return f.clone(kind=0, lines=self.blPara.lines) #single frag case lines = [] lineno = 0 if hasattr(f,'text'): text = f.text else: text = ''.join(getattr(f,'words',[])) from reportlab.lib.textsplit import wordSplit lines = wordSplit(text, maxWidths, f.fontName, f.fontSize) #the paragraph drawing routine assumes multiple frags per line, so we need an #extra list like this # [space, [text]] # wrappedLines = [(sp, [line]) for (sp, line) in lines] return f.clone(kind=0, lines=wrappedLines, ascent=f.fontSize, descent=-0.2*f.fontSize) elif nFrags<=0: return ParaLines(kind=0, fontSize=style.fontSize, fontName=style.fontName, textColor=style.textColor, lines=[],ascent=style.fontSize,descent=-0.2*style.fontSize) #general case nFrags>1 or special if hasattr(self,'blPara') and getattr(self,'_splitpara',0): return self.blPara autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading','')) calcBounds = autoLeading not in ('','off') return cjkFragSplit(frags, maxWidths, calcBounds) def beginText(self, x, y): return self.canv.beginText(x, y) def drawPara(self,debug=0): """Draws a paragraph according to the given style. Returns the final y position at the bottom. Not safe for paragraphs without spaces e.g. Japanese; wrapping algorithm will go infinite.""" #stash the key facts locally for speed canvas = self.canv style = self.style blPara = self.blPara lines = blPara.lines leading = style.leading autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading','')) #work out the origin for line 1 leftIndent = style.leftIndent cur_x = leftIndent if debug: bw = 0.5 bc = Color(1,1,0) bg = Color(0.9,0.9,0.9) else: bw = getattr(style,'borderWidth',None) bc = getattr(style,'borderColor',None) bg = style.backColor #if has a background or border, draw it if bg or (bc and bw): canvas.saveState() op = canvas.rect kwds = dict(fill=0,stroke=0) if bc and bw: canvas.setStrokeColor(bc) canvas.setLineWidth(bw) kwds['stroke'] = 1 br = getattr(style,'borderRadius',0) if br and not debug: op = canvas.roundRect kwds['radius'] = br if bg: canvas.setFillColor(bg) kwds['fill'] = 1 bp = getattr(style,'borderPadding',0) tbp, rbp, bbp, lbp = normalizeTRBL(bp) op(leftIndent - lbp, -bbp, self.width - (leftIndent+style.rightIndent) + lbp+rbp, self.height + tbp+bbp, **kwds) canvas.restoreState() nLines = len(lines) bulletText = self.bulletText if nLines > 0: _offsets = getattr(self,'_offsets',[0]) _offsets += (nLines-len(_offsets))*[_offsets[-1]] canvas.saveState() #canvas.addLiteral('%% %s.drawPara' % _className(self)) alignment = style.alignment offset = style.firstLineIndent+_offsets[0] lim = nLines-1 noJustifyLast = not getattr(self,'_JustifyLast',False) jllwc = style.justifyLastLine if blPara.kind==0: if alignment == TA_LEFT: dpl = _leftDrawParaLine elif alignment == TA_CENTER: dpl = _centerDrawParaLine elif self.style.alignment == TA_RIGHT: dpl = _rightDrawParaLine elif self.style.alignment == TA_JUSTIFY: dpl = _justifyDrawParaLine f = blPara if paraFontSizeHeightOffset: cur_y = self.height - f.fontSize else: cur_y = self.height - getattr(f,'ascent',f.fontSize) if bulletText: offset = _drawBullet(canvas,offset,cur_y,bulletText,style,rtl=style.wordWrap=='RTL' and self._wrapWidths or False) #set up the font etc. canvas.setFillColor(f.textColor) tx = self.beginText(cur_x, cur_y) tx.preformatted = 'preformatted' in self.__class__.__name__.lower() if autoLeading=='max': leading = max(leading,blPara.ascent-blPara.descent) elif autoLeading=='min': leading = blPara.ascent-blPara.descent # set the paragraph direction tx.direction = self.style.wordWrap #now the font for the rest of the paragraph tx.setFont(f.fontName, f.fontSize, leading) ws = lines[0][0] words = lines[0][1] lastLine = noJustifyLast and nLines==1 if lastLine and jllwc and len(words)>jllwc: lastLine=False t_off = dpl( tx, offset, ws, words, lastLine) if f.us_lines or f.link or style.endDots: tx._do_line = MethodType(_do_line,tx) tx.xs = xs = tx.XtraState = ABag() tx._defaultLineWidth = canvas._lineWidth xs.cur_y = cur_y xs.f = f xs.style = style xs.lines = lines xs.link=f.link xs.textColor = f.textColor xs.backColors = [] dx = t_off+leftIndent if dpl!=_justifyDrawParaLine: ws = 0 if f.us_lines: _do_under_line(0, dx, ws, tx, f.us_lines) if f.link: _do_link_line(0, dx, ws, tx) if lastLine and style.endDots and dpl!=_rightDrawParaLine: _do_dots(0, dx, ws, xs, tx, dpl) #now the middle of the paragraph, aligned with the left margin which is our origin. for i in xrange(1, nLines): ws = lines[i][0] words = lines[i][1] lastLine = noJustifyLast and i==lim if lastLine and jllwc and len(words)>jllwc: lastLine=False t_off = dpl( tx, _offsets[i], ws, words, lastLine) dx = t_off+leftIndent if dpl!=_justifyDrawParaLine: ws = 0 if f.us_lines: _do_under_line(i, t_off, ws, tx, f.us_lines) if f.link: _do_link_line(i, dx, ws, tx) if lastLine and style.endDots and dpl!=_rightDrawParaLine: _do_dots(i, dx, ws, xs, tx, dpl) else: for i in xrange(1, nLines): words = lines[i][1] lastLine = noJustifyLast and i==lim if lastLine and jllwc and len(words)>jllwc: lastLine=False dpl( tx, _offsets[i], lines[i][0], words, lastLine) else: if self.style.wordWrap == 'RTL': for line in lines: line.words = line.words[::-1] f = lines[0] if paraFontSizeHeightOffset: cur_y = self.height - f.fontSize else: cur_y = self.height - getattr(f,'ascent',f.fontSize) # default? dpl = _leftDrawParaLineX if bulletText: oo = offset offset = _drawBullet(canvas,offset,cur_y,bulletText,style, rtl=style.wordWrap=='RTL' and self._wrapWidths or False) if alignment == TA_LEFT: dpl = _leftDrawParaLineX elif alignment == TA_CENTER: dpl = _centerDrawParaLineX elif self.style.alignment == TA_RIGHT: dpl = _rightDrawParaLineX elif self.style.alignment == TA_JUSTIFY: dpl = _justifyDrawParaLineX else: raise ValueError("bad align %s" % repr(alignment)) #set up the font etc. tx = self.beginText(cur_x, cur_y) tx.preformatted = 'preformatted' in self.__class__.__name__.lower() tx._defaultLineWidth = canvas._lineWidth tx._underlineWidth = getattr(style,'underlineWidth','') tx._underlineOffset = getattr(style,'underlineOffset','') or '-0.125f' tx._strikeWidth = getattr(style,'strikeWidth','') tx._strikeOffset = getattr(style,'strikeOffset','') or '0.25f' tx._do_line = MethodType(_do_line,tx) # set the paragraph direction tx.direction = self.style.wordWrap xs = tx.XtraState=ABag() xs.textColor=None xs.backColor=None xs.rise=0 xs.backColors=[] xs.us_lines = {} xs.links = {} xs.link={} xs.leading = style.leading xs.leftIndent = leftIndent tx._leading = None tx._olb = None xs.cur_y = cur_y xs.f = f xs.style = style xs.autoLeading = autoLeading xs.paraWidth = self.width tx._fontname,tx._fontsize = None, None line = lines[0] lastLine = noJustifyLast and nLines==1 if lastLine and jllwc and line.wordCount>jllwc: lastLine=False dpl( tx, offset, line, lastLine) _do_post_text(tx) #now the middle of the paragraph, aligned with the left margin which is our origin. for i in xrange(1, nLines): line = lines[i] lastLine = noJustifyLast and i==lim if lastLine and jllwc and line.wordCount>jllwc: lastLine=False dpl( tx, _offsets[i], line, lastLine) _do_post_text(tx) canvas.drawText(tx) canvas.restoreState() def getPlainText(self,identify=None): """Convenience function for templates which want access to the raw text, without XML tags. """ frags = getattr(self,'frags',None) if frags: plains = [] plains_append = plains.append if _processed_frags(frags): for word in frags: for style,text in word[1:]: plains_append(text) if isinstance(word,_HSFrag): plains_append(' ') else: for frag in frags: if hasattr(frag, 'text'): plains_append(frag.text) return ''.join(plains) elif identify: text = getattr(self,'text',None) if text is None: text = repr(self) return text else: return '' def getActualLineWidths0(self): """Convenience function; tells you how wide each line actually is. For justified styles, this will be the same as the wrap width; for others it might be useful for seeing if paragraphs will fit in spaces.""" assert hasattr(self, 'width'), "Cannot call this method before wrap()" if self.blPara.kind: func = lambda frag, w=self.width: w - frag.extraSpace else: func = lambda frag, w=self.width: w - frag[0] return list(map(func,self.blPara.lines)) @staticmethod def dumpFrags(frags,indent=4,full=False): R = ['['] aR = R.append for i,f in enumerate(frags): if full: aR(' [%r,' % f[0]) for fx in f[1:]: aR(' (%s,)' % repr(fx[0])) aR(' %r),' % fx[1]) aR(' ], #%d %s' % (i,f.__class__.__name__)) aR(' ]') else: aR('[%r, %s], #%d %s' % (f[0],', '.join(('(%s,%r)' % (fx[0].__class__.__name__,fx[1]) for fx in f[1:])),i,f.__class__.__name__)) i = indent*' ' return i + ('\n'+i).join(R) if __name__=='__main__': #NORUNTESTS def dumpParagraphLines(P): print('dumpParagraphLines()' % id(P)) lines = P.blPara.lines outw = sys.stdout.write for l,line in enumerate(lines): line = lines[l] if hasattr(line,'words'): words = line.words else: words = line[1] nwords = len(words) outw('line%d: %d(%s)\n ' % (l,nwords,str(getattr(line,'wordCount','Unknown')))) for w in xrange(nwords): outw(" %d:'%s'"%(w,getattr(words[w],'text',words[w]))) print() def fragDump(w): R= ["'%s'" % w[1]] for a in ('fontName', 'fontSize', 'textColor', 'rise', 'underline', 'strike', 'link', 'cbDefn','lineBreak'): if hasattr(w[0],a): R.append('%s=%r' % (a,getattr(w[0],a))) return ', '.join(R) def dumpParagraphFrags(P): print('dumpParagraphFrags() minWidth() = %.2f' % (id(P), P.minWidth())) frags = P.frags n =len(frags) for l in xrange(n): print("frag%d: '%s' %s" % (l, frags[l].text,' '.join(['%s=%s' % (k,getattr(frags[l],k)) for k in frags[l].__dict__ if k!=text]))) outw = sys.stdout.write l = 0 cum = 0 for W in _getFragWords(frags,360): cum += W[0] outw("fragword%d: cum=%3d size=%d" % (l, cum, W[0])) for w in W[1:]: outw(' (%s)' % fragDump(w)) print() l += 1 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm import sys TESTS = sys.argv[1:] if TESTS==[]: TESTS=['4'] def flagged(i,TESTS=TESTS): return 'all' in TESTS or '*' in TESTS or str(i) in TESTS styleSheet = getSampleStyleSheet() B = styleSheet['BodyText'] style = ParagraphStyle("discussiontext", parent=B) style.fontName= 'Helvetica' if flagged(1): text='''The CMYK or subtractive method follows the way a printer mixes three pigments (cyan, magenta, and yellow) to form colors. Because mixing chemicals is more difficult than combining light there is a fourth parameter for darkness. For example a chemical combination of the CMY pigments generally never makes a perfect black -- instead producing a muddy color -- so, to get black printers don't use the CMY pigments but use a direct black ink. Because CMYK maps more directly to the way printer hardware works it may be the case that &| & | colors specified in CMYK will provide better fidelity and better control when printed. ''' P=Paragraph(text,style) dumpParagraphFrags(P) aW, aH = 456.0, 42.8 w,h = P.wrap(aW, aH) dumpParagraphLines(P) S = P.split(aW,aH) for s in S: s.wrap(aW,aH) dumpParagraphLines(s) aH = 500 if flagged(2): P=Paragraph("""Price*""", styleSheet['Normal']) dumpParagraphFrags(P) w,h = P.wrap(24, 200) dumpParagraphLines(P) if flagged(3): text = """Dieses Kapitel bietet eine schnelle Programme :: starten Eingabeaufforderung :: (>>>) >>> (Eingabeaufforderung) Einführung in Python Python :: Einführung . Das Ziel ist, die grundlegenden Eigenschaften von Python darzustellen, ohne sich zu sehr in speziellen Regeln oder Details zu verstricken. Dazu behandelt dieses Kapitel kurz die wesentlichen Konzepte wie Variablen, Ausdrücke, Kontrollfluss, Funktionen sowie Ein- und Ausgabe. Es erhebt nicht den Anspruch, umfassend zu sein.""" P=Paragraph(text, styleSheet['Code']) dumpParagraphFrags(P) w,h = P.wrap(6*72, 9.7*72) dumpParagraphLines(P) if flagged(4): text='''Die eingebaute Funktion range(i, j [, stride]) erzeugt eine Liste von Ganzzahlen und füllt sie mit Werten k, für die gilt: i <= k < j. Man kann auch eine optionale Schrittweite angeben. Die eingebaute Funktion xrange() erfüllt einen ähnlichen Zweck, gibt aber eine unveränderliche Sequenz vom Typ XRangeType zurück. Anstatt alle Werte in der Liste abzuspeichern, berechnet diese Liste ihre Werte, wann immer sie angefordert werden. Das ist sehr viel speicherschonender, wenn mit sehr langen Listen von Ganzzahlen gearbeitet wird. XRangeType kennt eine einzige Methode, s.tolist(), die seine Werte in eine Liste umwandelt.''' aW = 420 aH = 64.4 P=Paragraph(text, B) dumpParagraphFrags(P) w,h = P.wrap(aW,aH) print('After initial wrap',w,h) dumpParagraphLines(P) S = P.split(aW,aH) dumpParagraphFrags(S[0]) w0,h0 = S[0].wrap(aW,aH) print('After split wrap',w0,h0) dumpParagraphLines(S[0]) if flagged(5): text = ' %s & %s < >]]>' % (chr(163),chr(163)) P=Paragraph(text, styleSheet['Code']) dumpParagraphFrags(P) w,h = P.wrap(6*72, 9.7*72) dumpParagraphLines(P) if flagged(6): for text in ['''Here comes Helvetica 14 with strong emphasis.''', '''Here comes Helvetica 14 with strong emphasis.''', '''Here comes Courier 3cm and normal again.''', ]: P=Paragraph(text, styleSheet['Normal'], caseSensitive=0) dumpParagraphFrags(P) w,h = P.wrap(6*72, 9.7*72) dumpParagraphLines(P) if flagged(7): text = """Generated by:Dilbert""" P=Paragraph(text, styleSheet['Code']) dumpParagraphFrags(P) w,h = P.wrap(6*72, 9.7*72) dumpParagraphLines(P) if flagged(8): text ="""- bullet 0
- bullet 1
- bullet 2
- bullet 3
- bullet 4
- bullet 5""" P=Paragraph(text, styleSheet['Normal']) dumpParagraphFrags(P) w,h = P.wrap(6*72, 9.7*72) dumpParagraphLines(P) S = P.split(6*72,h/2.0) print(len(S)) dumpParagraphFrags(S[0]) dumpParagraphLines(S[0]) S[1].wrap(6*72, 9.7*72) dumpParagraphFrags(S[1]) dumpParagraphLines(S[1]) if flagged(9): text="""Furthermore, the fundamental error of regarding functional notions as categorial delimits a general convention regarding the forms of the
grammar. I suggested that these results would follow from the assumption that""" P=Paragraph(text,ParagraphStyle('aaa',parent=styleSheet['Normal'],align=TA_JUSTIFY)) dumpParagraphFrags(P) w,h = P.wrap(6*cm-12, 9.7*72) dumpParagraphLines(P) if flagged(10): text="""a b c\xc2\xa0d e f""" P=Paragraph(text,ParagraphStyle('aaa',parent=styleSheet['Normal'],align=TA_JUSTIFY)) dumpParagraphFrags(P) w,h = P.wrap(6*cm-12, 9.7*72) dumpParagraphLines(P) if flagged(11): text="""This page tests out a number of attributes of the paraStyle tag. This paragraph is in a style we have called "style1". It should be a normal paragraph, set in Courier 12 pt. It should be a normal paragraph, set in Courier (not bold). It should be a normal paragraph, set in Courier 12 pt.""" P=Paragraph(text,style=ParagraphStyle('style1',fontName="Courier",fontSize=10)) dumpParagraphFrags(P) w,h = P.wrap(6.27*72-12,10000) dumpParagraphLines(P) reportlab-3.5.34/src/reportlab/platypus/frames.py0000664000175000017500000002623213544671343022704 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/platypus/frames.py __version__='3.5.14' __doc__="""A frame is a container for content on a page. """ __all__ = ( 'ShowBoundaryValue', 'Frame', ) import logging logger = logging.getLogger('reportlab.platypus') _geomAttr=('x1', 'y1', 'width', 'height', 'leftPadding', 'bottomPadding', 'rightPadding', 'topPadding') from reportlab import rl_config, isPy3 from reportlab.lib.rl_accel import fp_str _FUZZ=rl_config._FUZZ class ShowBoundaryValue: def __init__(self,color=(0,0,0),width=0.1,dashArray=None): self.color = color self.width = width self.dashArray = dashArray if isPy3: def __bool__(self): return self.color is not None and self.width>=0 else: def __nonzero__(self): return self.color is not None and self.width>=0 class Frame: ''' A Frame is a piece of space in a document that is filled by the "flowables" in the story. For example in a book like document most pages have the text paragraphs in one or two frames. For generality a page might have several frames (for example for 3 column text or for text that wraps around a graphic). After creation a Frame is not usually manipulated directly by the applications program -- it is used internally by the platypus modules. Here is a diagramatid abstraction for the definitional part of a Frame:: width x2,y2 +---------------------------------+ | l top padding r | h | e +-------------------------+ i | e | f | | g | i | t | | h | g | | | t | h | p | | | t | a | | p | | d | | a | | | | d | | +-------------------------+ | | bottom padding | +---------------------------------+ (x1,y1) <-- lower left corner NOTE!! Frames are stateful objects. No single frame should be used in two documents at the same time (especially in the presence of multithreading. ''' def __init__(self, x1, y1, width,height, leftPadding=6, bottomPadding=6, rightPadding=6, topPadding=6, id=None, showBoundary=0, overlapAttachedSpace=None,_debug=None): self.id = id self._debug = _debug #these say where it goes on the page self.__dict__['_x1'] = x1 self.__dict__['_y1'] = y1 self.__dict__['_width'] = width self.__dict__['_height'] = height #these create some padding. self.__dict__['_leftPadding'] = leftPadding self.__dict__['_bottomPadding'] = bottomPadding self.__dict__['_rightPadding'] = rightPadding self.__dict__['_topPadding'] = topPadding # if we want a boundary to be shown self.showBoundary = showBoundary if overlapAttachedSpace is None: overlapAttachedSpace = rl_config.overlapAttachedSpace self._oASpace = overlapAttachedSpace self._geom() self._reset() def __getattr__(self,a): if a in _geomAttr: return self.__dict__['_'+a] raise AttributeError(a) def __setattr__(self,a,v): if a in _geomAttr: self.__dict__['_'+a] = v self._geom() else: self.__dict__[a] = v def _saveGeom(self, **kwds): if not self.__dict__.setdefault('_savedGeom',{}): for ga in _geomAttr: ga = '_'+ga self.__dict__['_savedGeom'][ga] = self.__dict__[ga] for k,v in kwds.items(): setattr(self,k,v) def _restoreGeom(self): if self.__dict__.get('_savedGeom',None): for ga in _geomAttr: ga = '_'+ga self.__dict__[ga] = self.__dict__[ga]['_savedGeom'] del self.__dict__['_savedGeom'] self._geom() def _geom(self): self._x2 = self._x1 + self._width self._y2 = self._y1 + self._height #efficiency self._y1p = self._y1 + self._bottomPadding #work out the available space self._aW = self._x2 - self._x1 - self._leftPadding - self._rightPadding self._aH = self._y2 - self._y1p - self._topPadding def _reset(self): self._restoreGeom() #drawing starts at top left self._x = self._x1 + self._leftPadding self._y = self._y2 - self._topPadding self._atTop = 1 self._prevASpace = 0 # these two should NOT be set on a frame. # they are used when Indenter flowables want # to adjust edges e.g. to do nested lists self._leftExtraIndent = 0.0 self._rightExtraIndent = 0.0 def _getAvailableWidth(self): return self._aW - self._leftExtraIndent - self._rightExtraIndent def _add(self, flowable, canv, trySplit=0): """ Draws the flowable at the current position. Returns 1 if successful, 0 if it would not fit. Raises a LayoutError if the object is too wide, or if it is too high for a totally empty frame, to avoid infinite loops""" flowable._frame = self flowable.canv = canv #so they can use stringWidth etc try: if getattr(flowable,'frameAction',None): flowable.frameAction(self) return 1 y = self._y p = self._y1p s = 0 aW = self._getAvailableWidth() zeroSize = getattr(flowable,'_ZEROSIZE',False) if not self._atTop: s =flowable.getSpaceBefore() if self._oASpace: if getattr(flowable,'_SPACETRANSFER',False) or zeroSize: s = self._prevASpace s = max(s-self._prevASpace,0) h = y - p - s if h>0 or zeroSize: w, h = flowable.wrap(aW, h) else: return 0 h += s y -= h if y < p-_FUZZ: if not rl_config.allowTableBoundsErrors and ((h>self._aH or w>aW) and not trySplit): from reportlab.platypus.doctemplate import LayoutError raise LayoutError("Flowable %s (%sx%s points) too large for frame (%sx%s points)." % ( flowable.__class__, w,h, aW,self._aH)) return 0 else: #now we can draw it, and update the current point. sa = flowable.getSpaceAfter() fbg = getattr(self,'_frameBGs',None) if fbg and fbg[-1].active: bg = fbg[-1] fbgl = bg.left fbgr = bg.right bgm = bg.start fbw = self._width-fbgl-fbgr fbx = self._x1+fbgl if not bgm: fbh = y + h + sa fby = max(p,y-sa) fbh = max(0,fbh-fby) else: fbh = y + h - s att = fbh>=self._y2 - self._topPadding if bgm=='frame' or bgm=='frame-permanent' or (att and bgm=='frame-permanent-1'): #first time or att top use fbh = max(0,(self._y2 if att else fbh)-self._y1) fby = self._y1 if bgm=='frame-permanent': fbg[-1].start = 'frame-permanent-1' else: fby = fbw = fbh = 0 bg.render(canv,self,fbx,fby,fbw,fbh) if bgm=='frame': fbg.pop() flowable.drawOn(canv, self._x + self._leftExtraIndent, y, _sW=aW-w) flowable.canv=canv if self._debug: logger.debug('drew %s' % flowable.identity()) y -= sa if self._oASpace: if getattr(flowable,'_SPACETRANSFER',False): sa = self._prevASpace self._prevASpace = sa if y!=self._y: self._atTop = 0 self._y = y return 1 finally: #sometimes canv/_frame aren't still on the flowable for a in ('canv', '_frame'): if hasattr(flowable,a): delattr(flowable,a) add = _add def split(self,flowable,canv): '''Ask the flowable to split using up the available space.''' y = self._y p = self._y1p s = 0 if not self._atTop: s = flowable.getSpaceBefore() if self._oASpace: s = max(s-self._prevASpace,0) h = y-p-s if h<=0 and not getattr(flowable,'_ZEROSIZE',False): return [] flowable._frame = self #some flowables might need these flowable.canv = canv try: r = flowable.split(self._aW, h) finally: #sometimes canv/_frame aren't still on the flowable for a in ('canv', '_frame'): if hasattr(flowable,a): delattr(flowable,a) return r @staticmethod def _drawBoundary(canv,sb,x1,y1,width,height): "draw the frame boundary as a rectangle (primarily for debugging)." from reportlab.lib.colors import Color, toColor ss = isinstance(sb,(str,tuple,list)) or isinstance(sb,Color) w = -1 da = None if ss: c = toColor(sb,-1) ss = c != -1 elif isinstance(sb,ShowBoundaryValue) and sb: c = toColor(sb.color,-1) ss = c != -1 if ss: w = sb.width da = sb.dashArray if ss: canv.saveState() canv.setStrokeColor(c) if w>=0: canv.setLineWidth(w) if da: canv.setDash(da) canv.rect(x1,y1,width,height) if ss: canv.restoreState() def drawBoundary(self,canv, __boundary__=None): self._drawBoundary(canv,__boundary__ or self.showBoundary, self._x1, self._y1, self._x2 - self._x1, self._y2 - self._y1) def addFromList(self, drawlist, canv): """Consumes objects from the front of the list until the frame is full. If it cannot fit one object, raises an exception.""" if self._debug: logger.debug("enter Frame.addFromlist() for frame %s" % self.id) if self.showBoundary: self.drawBoundary(canv) while len(drawlist) > 0: head = drawlist[0] if self.add(head,canv,trySplit=0): del drawlist[0] else: #leave it in the list for later break def add_generated_content(self,*C): self.__dict__.setdefault('_generated_content',[]).extend(C) def _aSpaceString(self): return '(%s x %s%s)' % (self._getAvailableWidth(),self._aH,self._atTop and '*' or '') reportlab-3.5.34/src/reportlab/platypus/tables.py0000775000175000017500000021401713556326125022702 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/platypus/tables.py __all__= ( 'Table', 'TableStyle', 'CellStyle', 'LongTable', ) __version__='3.5.21' __doc__=""" Tables are created by passing the constructor a tuple of column widths, a tuple of row heights and the data in row order. Drawing of the table can be controlled by using a TableStyle instance. This allows control of the color and weight of the lines (if any), and the font, alignment and padding of the text. None values in the sequence of row heights or column widths, mean that the corresponding rows or columns should be automatically sized. All the cell values should be convertible to strings; embedded newline '\\n' characters cause the value to wrap (ie are like a traditional linefeed). See the test output from running this module as a script for a discussion of the method for constructing tables and table styles. """ from reportlab.platypus.flowables import Flowable, Preformatted from reportlab import rl_config, xrange, ascii from reportlab.lib.styles import PropertySet, ParagraphStyle, _baseFontName from reportlab.lib import colors from reportlab.lib.utils import annotateException, IdentStr, flatten, isStr, asNative, strTypes from reportlab.lib.rl_accel import fp_str from reportlab.lib.abag import ABag as CellFrame from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.platypus.doctemplate import Indenter, NullActionFlowable from reportlab.platypus.flowables import LIIndenter LINECAPS={None: None, 'butt':0,'round':1,'projecting':2,'squared':2} LINEJOINS={None: None, 'miter':0, 'mitre':0, 'round':1,'bevel':2} class CellStyle(PropertySet): fontname = _baseFontName fontsize = 10 leading = 12 leftPadding = 6 rightPadding = 6 topPadding = 3 bottomPadding = 3 firstLineIndent = 0 color = 'black' alignment = 'LEFT' background = 'white' valign = "BOTTOM" href = None destination = None def __init__(self, name, parent=None): self.name = name if parent is not None: parent.copy(self) def copy(self, result=None): if result is None: result = CellStyle() for name in dir(self): setattr(result, name, getattr(self, name)) return result class TableStyle: def __init__(self, cmds=None, parent=None, **kw): #handle inheritance from parent first. if parent: # copy the parents list at construction time pcmds = parent.getCommands()[:] self._opts = parent._opts for a in ('spaceBefore','spaceAfter'): if hasattr(parent,a): setattr(self,a,getattr(parent,a)) else: pcmds = [] self._cmds = pcmds + list(cmds or []) self._opts={} self._opts.update(kw) def add(self, *cmd): self._cmds.append(cmd) def __repr__(self): return "TableStyle(\n%s\n) # end TableStyle" % " \n".join(map(repr, self._cmds)) def getCommands(self): return self._cmds def _rowLen(x): return not isinstance(x,(tuple,list)) and 1 or len(x) def _calc_pc(V,avail): '''check list V for percentage or * values 1) absolute values go through unchanged 2) percentages are used as weights for unconsumed space 3) if no None values were seen '*' weights are set equally with unclaimed space otherwise * weights are assigned as None''' R = [] r = R.append I = [] i = I.append J = [] j = J.append s = avail w = n = 0. for v in V: if isinstance(v,strTypes): v = str(v).strip() if not v: v = None n += 1 elif v.endswith('%'): v = float(v[:-1]) w += v i(len(R)) elif v=='*': j(len(R)) else: v = float(v) s -= v elif v is None: n += 1 else: s -= v r(v) s = max(0.,s) f = s/max(100.,w) for i in I: R[i] *= f s -= R[i] s = max(0.,s) m = len(J) if m: v = n==0 and s/m or None for j in J: R[j] = v return R def _hLine(canvLine, scp, ecp, y, hBlocks, FUZZ=rl_config._FUZZ): ''' Draw horizontal lines; do not draw through regions specified in hBlocks This also serves for vertical lines with a suitable canvLine ''' if hBlocks: hBlocks = hBlocks.get(y,None) if not hBlocks or scp>=hBlocks[-1][1]-FUZZ or ecp<=hBlocks[0][0]+FUZZ: canvLine(scp,y,ecp,y) else: i = 0 n = len(hBlocks) while scp=ecp-FUZZ: i += 1 continue i0 = max(scp,x0) i1 = min(ecp,x1) if i0>scp: canvLine(scp,y,i0,y) scp = i1 if scp=lim: continue x1 += 1 t = sum([V[x]+M.get(x,0) for x in xrange(x0,x1)]) if t>=v-FUZZ: continue #already good enough X = [x for x in xrange(x0,x1) if V0[x] is None] #variable candidates if not X: continue #something wrong here mate v -= t v /= float(len(X)) for x in X: M[x] = M.get(x,0)+v for x,v in M.items(): V[x] += v class _ExpandedCellTuple(tuple): pass class Table(Flowable): def __init__(self, data, colWidths=None, rowHeights=None, style=None, repeatRows=0, repeatCols=0, splitByRow=1, emptyTableAction=None, ident=None, hAlign=None,vAlign=None, normalizedData=0, cellStyles=None, rowSplitRange=None, spaceBefore=None,spaceAfter=None, longTableOptimize=None, minRowHeights=None): self.ident = ident self.hAlign = hAlign or 'CENTER' self.vAlign = vAlign or 'MIDDLE' if not isinstance(data,(tuple,list)): raise ValueError("%s invalid data type" % self.identity()) self._nrows = nrows = len(data) self._cellvalues = [] _seqCW = isinstance(colWidths,(tuple,list)) _seqRH = isinstance(rowHeights,(tuple,list)) if nrows: self._ncols = ncols = max(list(map(_rowLen,data))) elif colWidths and _seqCW: ncols = len(colWidths) else: ncols = 0 if not emptyTableAction: emptyTableAction = rl_config.emptyTableAction self._longTableOptimize = (getattr(self,'_longTableOptimize',rl_config.longTableOptimize) if longTableOptimize is None else longTableOptimize) if not (nrows and ncols): if emptyTableAction=='error': raise ValueError("%s must have at least a row and column" % self.identity()) elif emptyTableAction=='indicate': self.__class__ = Preformatted global _emptyTableStyle if '_emptyTableStyle' not in list(globals().keys()): _emptyTableStyle = ParagraphStyle('_emptyTableStyle') _emptyTableStyle.textColor = colors.red _emptyTableStyle.backColor = colors.yellow Preformatted.__init__(self,'%s(%d,%d)' % (self.__class__.__name__,nrows,ncols), _emptyTableStyle) elif emptyTableAction=='ignore': self.__class__ = NullActionFlowable else: raise ValueError('%s bad emptyTableAction: "%s"' % (self.identity(),emptyTableAction)) return # we need a cleanup pass to ensure data is strings - non-unicode and non-null if normalizedData: self._cellvalues = data else: self._cellvalues = data = self.normalizeData(data) if not _seqCW: colWidths = ncols*[colWidths] elif len(colWidths)!=ncols: if rl_config.allowShortTableRows and isinstance(colWidths,list): n = len(colWidths) if n%s" % (self.__class__.__name__, id(self), nr, nc, tallest, vx) def _cellListIter(self,C,aW,aH): canv = getattr(self,'canv',None) for c in C: if getattr(c,'__split_only__',None): for d in c.splitOn(canv,aW,aH): yield d else: yield c def _cellListProcess(self,C,aW,aH): if not isinstance(C,_ExpandedCellTuple): frame = None R = [].append for c in self._cellListIter(C,aW,aH): if isinstance(c,Indenter): if not frame: frame = CellFrame(_leftExtraIndent=0,_rightExtraIndent=0) c.frameAction(frame) if frame._leftExtraIndent<1e-8 and frame._rightExtraIndent<1e-8: frame = None continue if frame: R(LIIndenter(c,leftIndent=frame._leftExtraIndent,rightIndent=frame._rightExtraIndent)) else: R(c) C = _ExpandedCellTuple(R.__self__) return C def _listCellGeom(self, V,w,s,W=None,H=None,aH=72000): if not V: return 0,0 aW = w - s.leftPadding - s.rightPadding aH = aH - s.topPadding - s.bottomPadding t = 0 w = 0 canv = getattr(self,'canv',None) sb0 = None for v in V: vw, vh = v.wrapOn(canv, aW, aH) sb = v.getSpaceBefore() sa = v.getSpaceAfter() if W is not None: W.append(vw) if H is not None: H.append(vh) w = max(w,vw) t += vh + sa + sb if sb0 is None: sb0 = sb return w, t - sb0 - sa def _listValueWidth(self,V,aH=72000,aW=72000): if not V: return 0,0 t = 0 w = 0 canv = getattr(self,'canv',None) return max([v.wrapOn(canv,aW,aH)[0] for v in V]) def _calc_width(self,availWidth,W=None): if getattr(self,'_width_calculated_once',None): return #comments added by Andy to Robin's slightly terse variable names if not W: W = _calc_pc(self._argW,availWidth) #widths array if None in W: #some column widths are not given canv = getattr(self,'canv',None) saved = None if self._spanCmds: colSpanCells = self._colSpanCells spanRanges = self._spanRanges else: colSpanCells = () spanRanges = {} spanCons = {} if W is self._argW: W0 = W W = W[:] else: W0 = W[:] V = self._cellvalues S = self._cellStyles while None in W: j = W.index(None) #find first unspecified column w = 0 for i,Vi in enumerate(V): v = Vi[j] s = S[i][j] ji = j,i span = spanRanges.get(ji,None) if ji in colSpanCells and not span: #if the current cell is part of a spanned region, t = 0.0 #assume a zero size. else:#work out size t = self._elementWidth(v,s) if t is None: raise ValueError("Flowable %s in cell(%d,%d) can't have auto width\n%s" % (v.identity(30),i,j,self.identity(30))) t += s.leftPadding+s.rightPadding if span: c0 = span[0] c1 = span[2] if c0!=c1: x = c0,c1 spanCons[x] = max(spanCons.get(x,t),t) t = 0 if t>w: w = t #record a new maximum W[j] = w if spanCons: try: spanFixDim(W0,W,spanCons) except: annotateException('\nspanning problem in %s\nW0=%r W=%r\nspanCons=%r' % (self.identity(),W0,W,spanCons)) self._colWidths = W width = 0 self._colpositions = [0] #index -1 is right side boundary; we skip when processing cells for w in W: width = width + w self._colpositions.append(width) self._width = width self._width_calculated_once = 1 def _elementWidth(self,v,s): if isinstance(v,(list,tuple)): w = 0 for e in v: ew = self._elementWidth(e,s) if ew is None: return None w = max(w,ew) return w elif isinstance(v,Flowable) and v._fixedWidth: if hasattr(v, 'width') and isinstance(v.width,(int,float)): return v.width if hasattr(v, 'drawWidth') and isinstance(v.drawWidth,(int,float)): return v.drawWidth # Even if something is fixedWidth, the attribute to check is not # necessarily consistent (cf. Image.drawWidth). Therefore, we'll # be extra-careful and fall through to this code if necessary. if hasattr(v, 'minWidth'): try: w = v.minWidth() # should be all flowables if isinstance(w,(float,int)): return w except AttributeError: pass if v is None: return 0 else: try: v = str(v).split("\n") except: return 0 fontName = s.fontname fontSize = s.fontsize return max([stringWidth(x,fontName,fontSize) for x in v]) def _calc_height(self, availHeight, availWidth, H=None, W=None): H = self._argH if not W: W = _calc_pc(self._argW,availWidth) #widths array hmax = lim = len(H) longTable = self._longTableOptimize if None in H: minRowHeights = self._minRowHeights canv = getattr(self,'canv',None) saved = None #get a handy list of any cells which span rows. should be ignored for sizing if self._spanCmds: rowSpanCells = self._rowSpanCells colSpanCells = self._colSpanCells spanRanges = self._spanRanges colpositions = self._colpositions else: rowSpanCells = colSpanCells = () spanRanges = {} if canv: saved = canv._fontname, canv._fontsize, canv._leading H0 = H H = H[:] #make a copy as we'll change it self._rowHeights = H spanCons = {} FUZZ = rl_config._FUZZ while None in H: i = H.index(None) V = self._cellvalues[i] # values for row i S = self._cellStyles[i] # styles for row i h = 0 j = 0 for j,(v, s, w) in enumerate(list(zip(V, S, W))): # value, style, width (lengths must match) ji = j,i span = spanRanges.get(ji,None) if ji in rowSpanCells and not span: continue # don't count it, it's either occluded or unreliable else: if isinstance(v,(tuple,list,Flowable)): if isinstance(v,Flowable): v = (v,) else: v = flatten(v) v = V[j] = self._cellListProcess(v,w,None) if w is None and not self._canGetWidth(v): raise ValueError("Flowable %s in cell(%d,%d) can't have auto width in\n%s" % (v[0].identity(30),i,j,self.identity(30))) if canv: canv._fontname, canv._fontsize, canv._leading = s.fontname, s.fontsize, s.leading or 1.2*s.fontsize if ji in colSpanCells: if not span: continue w = max(colpositions[span[2]+1]-colpositions[span[0]],w or 0) dW,t = self._listCellGeom(v,w or self._listValueWidth(v),s) if canv: canv._fontname, canv._fontsize, canv._leading = saved dW = dW + s.leftPadding + s.rightPadding if not rl_config.allowTableBoundsErrors and dW>w: from reportlab.platypus.doctemplate import LayoutError raise LayoutError("Flowable %s (%sx%s points) too wide for cell(%d,%d) (%sx* points) in\n%s" % (v[0].identity(30),fp_str(dW),fp_str(t),i,j, fp_str(w), self.identity(30))) else: v = (v is not None and str(v) or '').split("\n") t = (s.leading or 1.2*s.fontsize)*len(v) t += s.bottomPadding+s.topPadding if span: r0 = span[1] r1 = span[3] if r0!=r1: x = r0,r1 spanCons[x] = max(spanCons.get(x,t),t) t = 0 if t>h: h = t #record a new maximum # If a minimum height has been specified use that, otherwise allow the cell to grow H[i] = max(minRowHeights[i],h) if minRowHeights else h # we can stop if we have filled up all available room if longTable: hmax = i+1 #we computed H[i] so known len == i+1 height = sum(H[:hmax]) if height > availHeight: #we can terminate if all spans are complete in H[:hmax] if spanCons: msr = max(x[1] for x in spanCons.keys()) #RS=[endrowspan,.....] if hmax>msr: break if None not in H: hmax = lim if spanCons: try: spanFixDim(H0,H,spanCons) except: annotateException('\nspanning problem in %s hmax=%s lim=%s avail=%s x %s\nH0=%r H=%r\nspanCons=%r' % (self.identity(),hmax,lim,availWidth,availHeight,H0,H,spanCons)) #iterate backwards through the heights to get rowpositions in reversed order self._rowpositions = j = [] height = c = 0 for i in xrange(hmax-1,-1,-1): j.append(height) y = H[i] - c t = height + y c = (t - height) - y height = t j.append(height) self._height = height j.reverse() #reverse the reversed list of row positions self._hmax = hmax def _calc(self, availWidth, availHeight): #if hasattr(self,'_width'): return #in some cases there are unsizable things in #cells. If so, apply a different algorithm #and assign some withs in a less (thanks to Gary Poster) dumb way. #this CHANGES the widths array. if (None in self._colWidths or '*' in self._colWidths) and self._hasVariWidthElements(): W = self._calcPreliminaryWidths(availWidth) #widths else: W = None # need to know which cells are part of spanned # ranges, so _calc_height and _calc_width can ignore them # in sizing if self._spanCmds: self._calcSpanRanges() if None in self._argH: self._calc_width(availWidth,W=W) if self._nosplitCmds: self._calcNoSplitRanges() # calculate the full table height self._calc_height(availHeight,availWidth,W=W) # calculate the full table width self._calc_width(availWidth,W=W) if self._spanCmds: #now work out the actual rect for each spanned cell from the underlying grid self._calcSpanRects() def _culprit(self): """Return a string describing the tallest element. Usually this is what causes tables to fail to split. Currently tables are the only items to have a '_culprit' method. Doctemplate checks for it. """ rh = self._rowHeights tallest = max(rh) rowNum = rh.index(tallest) #rowNum of limited interest as usually it's a split one #and we see row #1. Text might be a nice addition. return 'tallest cell %0.1f points' % tallest def _hasVariWidthElements(self, upToRow=None): """Check for flowables in table cells and warn up front. Allow a couple which we know are fixed size such as images and graphics.""" if upToRow is None: upToRow = self._nrows for row in xrange(min(self._nrows, upToRow)): for col in xrange(self._ncols): value = self._cellvalues[row][col] if not self._canGetWidth(value): return 1 return 0 def _canGetWidth(self, thing): "Can we work out the width quickly?" if isinstance(thing,(list, tuple)): for elem in thing: if not self._canGetWidth(elem): return 0 return 1 elif isinstance(thing, Flowable): return thing._fixedWidth # must loosen this up else: #str, number, None etc. #anything else gets passed to str(...) # so should be sizable return 1 def _calcPreliminaryWidths(self, availWidth): """Fallback algorithm for when main one fails. Where exact width info not given but things like paragraphs might be present, do a preliminary scan and assign some best-guess values.""" W = list(self._argW) # _calc_pc(self._argW,availWidth) verbose = 0 totalDefined = 0.0 percentDefined = 0 percentTotal = 0 numberUndefined = 0 numberGreedyUndefined = 0 for w in W: if w is None: numberUndefined += 1 elif w == '*': numberUndefined += 1 numberGreedyUndefined += 1 elif _endswith(w,'%'): percentDefined += 1 percentTotal += float(w[:-1]) else: assert isinstance(w,(int,float)) totalDefined = totalDefined + w if verbose: print('prelim width calculation. %d columns, %d undefined width, %0.2f units remain' % ( self._ncols, numberUndefined, availWidth - totalDefined)) #check columnwise in each None column to see if they are sizable. given = [] sizeable = [] unsizeable = [] minimums = {} totalMinimum = 0 elementWidth = self._elementWidth for colNo in xrange(self._ncols): w = W[colNo] if w is None or w=='*' or _endswith(w,'%'): siz = 1 final = 0 for rowNo in xrange(self._nrows): value = self._cellvalues[rowNo][colNo] style = self._cellStyles[rowNo][colNo] new = elementWidth(value,style) or 0 new += style.leftPadding+style.rightPadding final = max(final, new) siz = siz and self._canGetWidth(value) # irrelevant now? if siz: sizeable.append(colNo) else: unsizeable.append(colNo) minimums[colNo] = final totalMinimum += final else: given.append(colNo) if len(given) == self._ncols: return if verbose: print('predefined width: ',given) if verbose: print('uncomputable width: ',unsizeable) if verbose: print('computable width: ',sizeable) # how much width is left: remaining = availWidth - (totalMinimum + totalDefined) if remaining > 0: # we have some room left; fill it. definedPercentage = (totalDefined/availWidth)*100 percentTotal += definedPercentage if numberUndefined and percentTotal < 100: undefined = numberGreedyUndefined or numberUndefined defaultWeight = (100-percentTotal)/undefined percentTotal = 100 defaultDesired = (defaultWeight/percentTotal)*availWidth else: defaultWeight = defaultDesired = 1 # we now calculate how wide each column wanted to be, and then # proportionately shrink that down to fit the remaining available # space. A column may not shrink less than its minimum width, # however, which makes this a bit more complicated. desiredWidths = [] totalDesired = 0 effectiveRemaining = remaining for colNo, minimum in minimums.items(): w = W[colNo] if _endswith(w,'%'): desired = (float(w[:-1])/percentTotal)*availWidth elif w == '*': desired = defaultDesired else: desired = not numberGreedyUndefined and defaultDesired or 1 if desired <= minimum: W[colNo] = minimum else: desiredWidths.append( (desired-minimum, minimum, desired, colNo)) totalDesired += desired effectiveRemaining += minimum if desiredWidths: # else we're done # let's say we have two variable columns. One wanted # 88 points, and one wanted 264 points. The first has a # minWidth of 66, and the second of 55. We have 71 points # to divide up in addition to the totalMinimum (i.e., # remaining==71). Our algorithm tries to keep the proportion # of these variable columns. # # To do this, we add up the minimum widths of the variable # columns and the remaining width. That's 192. We add up the # totalDesired width. That's 352. That means we'll try to # shrink the widths by a proportion of 192/352--.545454. # That would make the first column 48 points, and the second # 144 points--adding up to the desired 192. # # Unfortunately, that's too small for the first column. It # must be 66 points. Therefore, we go ahead and save that # column width as 88 points. That leaves (192-88==) 104 # points remaining. The proportion to shrink the remaining # column is (104/264), which, multiplied by the desired # width of 264, is 104: the amount assigned to the remaining # column. proportion = effectiveRemaining/totalDesired # we sort the desired widths by difference between desired and # and minimum values, a value called "disappointment" in the # code. This means that the columns with a bigger # disappointment will have a better chance of getting more of # the available space. desiredWidths.sort() finalSet = [] for disappointment, minimum, desired, colNo in desiredWidths: adjusted = proportion * desired if adjusted < minimum: W[colNo] = minimum totalDesired -= desired effectiveRemaining -= minimum if totalDesired: proportion = effectiveRemaining/totalDesired else: finalSet.append((minimum, desired, colNo)) for minimum, desired, colNo in finalSet: adjusted = proportion * desired assert adjusted >= minimum W[colNo] = adjusted else: for colNo, minimum in minimums.items(): W[colNo] = minimum if verbose: print('new widths are:', W) self._argW = self._colWidths = W return W def minWidth(self): W = list(self._argW) width = 0 elementWidth = self._elementWidth rowNos = xrange(self._nrows) values = self._cellvalues styles = self._cellStyles for colNo in xrange(len(W)): w = W[colNo] if w is None or w=='*' or _endswith(w,'%'): final = 0 for rowNo in rowNos: value = values[rowNo][colNo] style = styles[rowNo][colNo] new = (elementWidth(value,style)+ style.leftPadding+style.rightPadding) final = max(final, new) width += final else: width += float(w) return width # XXX + 1/2*(left and right border widths) def _calcSpanRanges(self): """Work out rects for tables which do row and column spanning. This creates some mappings to let the later code determine if a cell is part of a "spanned" range. self._spanRanges shows the 'coords' in integers of each 'cell range', or None if it was clobbered: (col, row) -> (col0, row0, col1, row1) Any cell not in the key is not part of a spanned region """ self._spanRanges = spanRanges = {} for x in xrange(self._ncols): for y in xrange(self._nrows): spanRanges[x,y] = (x, y, x, y) self._colSpanCells = [] self._rowSpanCells = [] csa = self._colSpanCells.append rsa = self._rowSpanCells.append for (cmd, start, stop) in self._spanCmds: x0, y0 = start x1, y1 = stop #normalize if x0 < 0: x0 = x0 + self._ncols if x1 < 0: x1 = x1 + self._ncols if y0 < 0: y0 = y0 + self._nrows if y1 < 0: y1 = y1 + self._nrows if x0 > x1: x0, x1 = x1, x0 if y0 > y1: y0, y1 = y1, y0 if x0!=x1 or y0!=y1: if x0!=x1: #column span for y in xrange(y0, y1+1): for x in xrange(x0,x1+1): csa((x,y)) if y0!=y1: #row span for y in xrange(y0, y1+1): for x in xrange(x0,x1+1): rsa((x,y)) for y in xrange(y0, y1+1): for x in xrange(x0,x1+1): spanRanges[x,y] = None # set the main entry spanRanges[x0,y0] = (x0, y0, x1, y1) def _calcNoSplitRanges(self): """ This creates some mappings to let the later code determine if a cell is part of a "nosplit" range. self._nosplitRanges shows the 'coords' in integers of each 'cell range', or None if it was clobbered: (col, row) -> (col0, row0, col1, row1) Any cell not in the key is not part of a spanned region """ self._nosplitRanges = nosplitRanges = {} for x in xrange(self._ncols): for y in xrange(self._nrows): nosplitRanges[x,y] = (x, y, x, y) self._colNoSplitCells = [] self._rowNoSplitCells = [] csa = self._colNoSplitCells.append rsa = self._rowNoSplitCells.append for (cmd, start, stop) in self._nosplitCmds: x0, y0 = start x1, y1 = stop #normalize if x0 < 0: x0 = x0 + self._ncols if x1 < 0: x1 = x1 + self._ncols if y0 < 0: y0 = y0 + self._nrows if y1 < 0: y1 = y1 + self._nrows if x0 > x1: x0, x1 = x1, x0 if y0 > y1: y0, y1 = y1, y0 if x0!=x1 or y0!=y1: #column span if x0!=x1: for y in xrange(y0, y1+1): for x in xrange(x0,x1+1): csa((x,y)) #row span if y0!=y1: for y in xrange(y0, y1+1): for x in xrange(x0,x1+1): rsa((x,y)) for y in xrange(y0, y1+1): for x in xrange(x0,x1+1): nosplitRanges[x,y] = None # set the main entry nosplitRanges[x0,y0] = (x0, y0, x1, y1) def _calcSpanRects(self): """Work out rects for tables which do row and column spanning. Based on self._spanRanges, which is already known, and the widths which were given or previously calculated, self._spanRects shows the real coords for drawing: (col, row) -> (x, y, width, height) for each cell. Any cell which 'does not exist' as another has spanned over it will get a None entry on the right """ spanRects = getattr(self,'_spanRects',{}) hmax = getattr(self,'_hmax',None) longTable = self._longTableOptimize if spanRects and (longTable and hmax==self._hmax_spanRects or not longTable): return colpositions = self._colpositions rowpositions = self._rowpositions vBlocks = {} hBlocks = {} rlim = len(rowpositions)-1 for (coord, value) in self._spanRanges.items(): if value is None: spanRects[coord] = None else: try: col0, row0, col1, row1 = value if row1>=rlim: continue col,row = coord if col1-col0>0: for _ in xrange(col0+1,col1+1): vBlocks.setdefault(colpositions[_],[]).append((rowpositions[row1+1],rowpositions[row0])) if row1-row0>0: for _ in xrange(row0+1,row1+1): hBlocks.setdefault(rowpositions[_],[]).append((colpositions[col0],colpositions[col1+1])) x = colpositions[col0] y = rowpositions[row1+1] width = colpositions[col1+1] - x height = rowpositions[row0] - y spanRects[coord] = (x, y, width, height) except: annotateException('\nspanning problem in %s' % (self.identity(),)) for _ in hBlocks, vBlocks: for value in _.values(): value.sort() self._spanRects = spanRects self._vBlocks = vBlocks self._hBlocks = hBlocks self._hmax_spanRects = hmax def setStyle(self, tblstyle): if not isinstance(tblstyle,TableStyle): tblstyle = TableStyle(tblstyle) for cmd in tblstyle.getCommands(): self._addCommand(cmd) for k,v in tblstyle._opts.items(): setattr(self,k,v) for a in ('spaceBefore','spaceAfter'): if not hasattr(self,a) and hasattr(tblstyle,a): setattr(self,a,getattr(tblstyle,a)) def _addCommand(self,cmd): if cmd[0] in ('BACKGROUND','ROWBACKGROUNDS','COLBACKGROUNDS'): self._bkgrndcmds.append(cmd) elif cmd[0] == 'SPAN': self._spanCmds.append(cmd) elif cmd[0] == 'NOSPLIT': # we expect op, start, stop self._nosplitCmds.append(cmd) elif _isLineCommand(cmd): # we expect op, start, stop, weight, colour, cap, dashes, join cmd = list(cmd) if len(cmd)<5: raise ValueError('bad line command '+ascii(cmd)) #determine line cap value at position 5. This can be str or numeric. if len(cmd)<6: cmd.append(1) else: cap = _convert2int(cmd[5], LINECAPS, 0, 2, 'cap', cmd) cmd[5] = cap #dashes at index 6 - this is a dash array: if len(cmd)<7: cmd.append(None) #join mode at index 7 - can be str or numeric, look up as for caps if len(cmd)<8: cmd.append(1) else: join = _convert2int(cmd[7], LINEJOINS, 0, 2, 'join', cmd) cmd[7] = join #linecount at index 8. Default is 1, set to 2 for double line. if len(cmd)<9: cmd.append(1) else: lineCount = cmd[8] if lineCount is None: lineCount = 1 cmd[8] = lineCount assert lineCount >= 1 #linespacing at index 9. Not applicable unless 2+ lines, defaults to line #width so you get a visible gap between centres if len(cmd)<10: cmd.append(cmd[3]) else: space = cmd[9] if space is None: space = cmd[3] cmd[9] = space assert len(cmd) == 10 self._linecmds.append(tuple(cmd)) else: (op, (sc, sr), (ec, er)), values = cmd[:3] , cmd[3:] if sr in ('splitfirst','splitlast'): self._srflcmds.append(cmd) else: if sc < 0: sc = sc + self._ncols if ec < 0: ec = ec + self._ncols if sr < 0: sr = sr + self._nrows if er < 0: er = er + self._nrows for i in xrange(sr, er+1): for j in xrange(sc, ec+1): _setCellStyle(self._cellStyles, i, j, op, values) def _drawLines(self): ccap, cdash, cjoin = None, None, None self.canv.saveState() for op, (sc,sr), (ec,er), weight, color, cap, dash, join, count, space in self._linecmds: if isinstance(sr,strTypes) and sr.startswith('split'): continue if sc < 0: sc = sc + self._ncols if ec < 0: ec = ec + self._ncols if sr < 0: sr = sr + self._nrows if er < 0: er = er + self._nrows if cap!=None and ccap!=cap: self.canv.setLineCap(cap) ccap = cap if dash is None or dash == []: if cdash is not None: self.canv.setDash() cdash = None elif dash != cdash: self.canv.setDash(dash) cdash = dash if join is not None and cjoin!=join: self.canv.setLineJoin(join) cjoin = join getattr(self,_LineOpMap.get(op, '_drawUnknown' ))( (sc, sr), (ec, er), weight, color, count, space) self.canv.restoreState() self._curcolor = None def _drawUnknown(self, start, end, weight, color, count, space): #we are only called from _drawLines which is one level up import sys op = sys._getframe(1).f_locals['op'] raise ValueError("Unknown line command '%s'" % op) def _drawGrid(self, start, end, weight, color, count, space): self._drawBox( start, end, weight, color, count, space) self._drawInnerGrid( start, end, weight, color, count, space) def _drawBox(self, start, end, weight, color, count, space): sc,sr = start ec,er = end self._drawHLines((sc, sr), (ec, sr), weight, color, count, space) self._drawHLines((sc, er+1), (ec, er+1), weight, color, count, space) self._drawVLines((sc, sr), (sc, er), weight, color, count, space) self._drawVLines((ec+1, sr), (ec+1, er), weight, color, count, space) def _drawInnerGrid(self, start, end, weight, color, count, space): sc,sr = start ec,er = end self._drawHLines((sc, sr+1), (ec, er), weight, color, count, space) self._drawVLines((sc+1, sr), (ec, er), weight, color, count, space) def _prepLine(self, weight, color): if color and color!=self._curcolor: self.canv.setStrokeColor(color) self._curcolor = color if weight and weight!=self._curweight: self.canv.setLineWidth(weight) self._curweight = weight def _drawHLines(self, start, end, weight, color, count, space): sc,sr = start ec,er = end ecp = self._colpositions[sc:ec+2] rp = self._rowpositions[sr:er+1] if len(ecp)<=1 or len(rp)<1: return self._prepLine(weight, color) scp = ecp[0] ecp = ecp[-1] hBlocks = getattr(self,'_hBlocks',{}) canvLine = self.canv.line if count == 1: for y in rp: _hLine(canvLine, scp, ecp, y, hBlocks) else: lf = lambda x0,y0,x1,y1,canvLine=canvLine, ws=weight+space, count=count: _multiLine(x0,x1,y0,canvLine,ws,count) for y in rp: _hLine(lf, scp, ecp, y, hBlocks) def _drawHLinesB(self, start, end, weight, color, count, space): sc,sr = start ec,er = end self._drawHLines((sc, sr+1), (ec, er+1), weight, color, count, space) def _drawVLines(self, start, end, weight, color, count, space): sc,sr = start ec,er = end erp = self._rowpositions[sr:er+2] cp = self._colpositions[sc:ec+1] if len(erp)<=1 or len(cp)<1: return self._prepLine(weight, color) srp = erp[0] erp = erp[-1] vBlocks = getattr(self,'_vBlocks',{}) canvLine = lambda y0, x0, y1, x1, _line=self.canv.line: _line(x0,y0,x1,y1) if count == 1: for x in cp: _hLine(canvLine, erp, srp, x, vBlocks) else: lf = lambda x0,y0,x1,y1,canvLine=canvLine, ws=weight+space, count=count: _multiLine(x0,x1,y0,canvLine,ws,count) for x in cp: _hLine(lf, erp, srp, x, vBlocks) def _drawVLinesA(self, start, end, weight, color, count, space): sc,sr = start ec,er = end self._drawVLines((sc+1, sr), (ec+1, er), weight, color, count, space) def wrap(self, availWidth, availHeight): self._calc(availWidth, availHeight) self.availWidth = availWidth return (self._width, self._height) def onSplit(self,T,byRow=1): ''' This method will be called when the Table is split. Special purpose tables can override to do special stuff. ''' pass def _cr_0(self,n,cmds,nr0,_srflMode=False): for c in cmds: (sc,sr), (ec,er) = c[1:3] if sr in ('splitfirst','splitlast'): if not _srflMode: continue self._addCommand(c) #re-append the command if sr=='splitfirst': continue sr = er = n-1 if sr<0: sr += nr0 if sr>=n: continue if er>=n: er = n-1 self._addCommand((c[0],)+((sc, sr), (ec, er))+tuple(c[3:])) def _cr_1_1(self, n, nRows, repeatRows, cmds, _srflMode=False): nrr = len(repeatRows) rrS = set(repeatRows) for c in cmds: (sc,sr), (ec,er) = c[1:3] if sr in ('splitfirst','splitlast'): if not _srflMode: continue self._addCommand(c) if sr=='splitlast': continue sr = er = n if sr<0: sr += nRows if er<0: er += nRows cS = set(xrange(sr,er+1)) & rrS if cS: #it's a repeat row cS = list(cS) self._addCommand((c[0],)+((sc, repeatRows.index(min(cS))), (ec, repeatRows.index(max(cS))))+tuple(c[3:])) if er=0 and er=0 and sr=n: sr -= n if er>=n: er -= n self._addCommand((c[0],)+((sc, sr), (ec, er))+tuple(c[3:])) def _splitRows(self,availHeight): n=self._getFirstPossibleSplitRowPosition(availHeight) repeatRows = self.repeatRows if n<= (repeatRows if isinstance(repeatRows,int) else (max(repeatRows)+1)): return [] lim = len(self._rowHeights) if n==lim: return [self] lo = self._rowSplitRange if lo: lo, hi = lo if lo<0: lo += lim if hi<0: hi += lim if n>hi: return self._splitRows(availHeight - sum(self._rowHeights[hi:n])) elif n=n: # we have to split the BOX A.append(('LINEABOVE',(sc,sr), (ec,sr), weight, color, cap, dash, join, count, space)) A.append(('LINEBEFORE',(sc,sr), (sc,er), weight, color, cap, dash, join, count, space)) A.append(('LINEAFTER',(ec,sr), (ec,er), weight, color, cap, dash, join, count, space)) A.append(('LINEBELOW',(sc,er), (ec,er), weight, color, cap, dash, join, count, space)) if op=='GRID': A.append(('LINEBELOW',(sc,n-1), (ec,n-1), weight, color, cap, dash, join, count, space)) A.append(('LINEABOVE',(sc,n), (ec,n), weight, color, cap, dash, join, count, space)) A.append(('INNERGRID',(sc,sr), (ec,er), weight, color, cap, dash, join, count, space)) else: A.append((op,(sc,sr), (ec,er), weight, color, cap, dash, join, count, space)) elif op == 'INNERGRID': if sr=n: A.append(('LINEBELOW',(sc,n-1), (ec,n-1), weight, color, cap, dash, join, count, space)) A.append(('LINEABOVE',(sc,n), (ec,n), weight, color, cap, dash, join, count, space)) A.append((op,(sc,sr), (ec,er), weight, color, cap, dash, join, count, space)) elif op == 'LINEBELOW': if sr=(n-1): A.append(('LINEABOVE',(sc,n), (ec,n), weight, color, cap, dash, join, count, space)) A.append((op,(sc,sr), (ec,er), weight, color, cap, dash, join, count, space)) elif op == 'LINEABOVE': if sr<=n and er>=n: A.append(('LINEBELOW',(sc,n-1), (ec,n-1), weight, color, cap, dash, join, count, space)) A.append((op,(sc,sr), (ec,er), weight, color, cap, dash, join, count, space)) else: A.append((op,(sc,sr), (ec,er), weight, color, cap, dash, join, count, space)) R0._cr_0(n,A,nrows) R0._cr_0(n,self._bkgrndcmds,nrows,_srflMode=True) R0._cr_0(n,self._spanCmds,nrows) R0._cr_0(n,self._nosplitCmds,nrows) for c in self._srflcmds: R0._addCommand(c) if c[1][1]!='splitlast': continue (sc,sr), (ec,er) = c[1:3] R0._addCommand((c[0],)+((sc, n-1), (ec, n-1))+tuple(c[3:])) if ident: ident = IdentStr(ident) if repeatRows: if isinstance(repeatRows,int): iRows = data[:repeatRows] iRowH = splitH[:repeatRows] iCS = self._cellStyles[:repeatRows] repeatRows = list(xrange(repeatRows)) else: #we have a list of repeated rows eg (1,3) repeatRows = list(sorted(repeatRows)) iRows = [data[i] for i in repeatRows] iRowH = [splitH[i] for i in repeatRows] iCS = [self._cellStyles[i] for i in repeatRows] R1 = self.__class__(iRows+data[n:],colWidths=self._colWidths, rowHeights=iRowH+splitH[n:], repeatRows=len(repeatRows), repeatCols=repeatCols, splitByRow=splitByRow, normalizedData=1, cellStyles=iCS+self._cellStyles[n:], ident=ident, spaceAfter=getattr(self,'spaceAfter',None), longTableOptimize=lto, ) R1._cr_1_1(n,nrows,repeatRows,A) #linecommands R1._cr_1_1(n,nrows,repeatRows,self._bkgrndcmds,_srflMode=True) R1._cr_1_1(n,nrows,repeatRows,self._spanCmds) R1._cr_1_1(n,nrows,repeatRows,self._nosplitCmds) else: #R1 = slelf.__class__(data[n:], self._argW, self._argH[n:], R1 = self.__class__(data[n:], colWidths=self._colWidths, rowHeights=self._argH[n:], repeatRows=repeatRows, repeatCols=repeatCols, splitByRow=splitByRow, normalizedData=1, cellStyles=self._cellStyles[n:], ident=ident, spaceAfter=getattr(self,'spaceAfter',None), longTableOptimize=lto, ) R1._cr_1_0(n,A) R1._cr_1_0(n,self._bkgrndcmds,_srflMode=True) R1._cr_1_0(n,self._spanCmds) R1._cr_1_0(n,self._nosplitCmds) for c in self._srflcmds: R1._addCommand(c) if c[1][1]!='splitfirst': continue (sc,sr), (ec,er) = c[1:3] R1._addCommand((c[0],)+((sc, 0), (ec, 0))+tuple(c[3:])) R0.hAlign = R1.hAlign = self.hAlign R0.vAlign = R1.vAlign = self.vAlign self.onSplit(R0) self.onSplit(R1) return [R0,R1] def _getRowImpossible(impossible,cells,ranges): for xy in cells: r=ranges[xy] if r!=None: y1,y2=r[1],r[3] if y1!=y2: ymin=min(y1,y2) #normalize ymax=max(y1,y2) #normalize y=ymin+1 while 1: if y>ymax: break impossible[y]=None #split at position y is impossible because of overlapping rowspan y+=1 _getRowImpossible=staticmethod(_getRowImpossible) def _getFirstPossibleSplitRowPosition(self,availHeight): impossible={} if self._spanCmds: self._getRowImpossible(impossible,self._rowSpanCells,self._spanRanges) if self._nosplitCmds: self._getRowImpossible(impossible,self._rowNoSplitCells,self._nosplitRanges) h = 0 n = 1 split_at = 0 # from this point of view 0 is the first position where the table may *always* be splitted for rh in self._rowHeights: if h+rh>availHeight: break if n not in impossible: split_at=n h=h+rh n=n+1 return split_at def split(self, availWidth, availHeight): self._calc(availWidth, availHeight) if self.splitByRow: if not rl_config.allowTableBoundsErrors and self._width>availWidth: return [] return self._splitRows(availHeight) else: raise NotImplementedError def draw(self): self._curweight = self._curcolor = self._curcellstyle = None self._drawBkgrnd() if not self._spanCmds: # old fashioned case, no spanning, steam on and do each cell for row, rowstyle, rowpos, rowheight in zip(self._cellvalues, self._cellStyles, self._rowpositions[1:], self._rowHeights): for cellval, cellstyle, colpos, colwidth in zip(row, rowstyle, self._colpositions[:-1], self._colWidths): self._drawCell(cellval, cellstyle, (colpos, rowpos), (colwidth, rowheight)) else: # we have some row or col spans, need a more complex algorithm # to find the rect for each for rowNo in xrange(self._nrows): for colNo in xrange(self._ncols): cellRect = self._spanRects[colNo, rowNo] if cellRect is not None: (x, y, width, height) = cellRect cellval = self._cellvalues[rowNo][colNo] cellstyle = self._cellStyles[rowNo][colNo] self._drawCell(cellval, cellstyle, (x, y), (width, height)) self._drawLines() def _drawBkgrnd(self): nrows = self._nrows ncols = self._ncols canv = self.canv colpositions = self._colpositions rowpositions = self._rowpositions rowHeights = self._rowHeights colWidths = self._colWidths spanRects = getattr(self,'_spanRects',None) for cmd, (sc, sr), (ec, er), arg in self._bkgrndcmds: if sr in ('splitfirst','splitlast'): continue if sc < 0: sc = sc + ncols if ec < 0: ec = ec + ncols if sr < 0: sr = sr + nrows if er < 0: er = er + nrows x0 = colpositions[sc] y0 = rowpositions[sr] x1 = colpositions[min(ec+1,ncols)] y1 = rowpositions[min(er+1,nrows)] w, h = x1-x0, y1-y0 if hasattr(arg,'__call__'): arg(self,canv, x0, y0, w, h) elif cmd == 'ROWBACKGROUNDS': #Need a list of colors to cycle through. The arguments #might be already colours, or convertible to colors, or # None, or the str 'None'. #It's very common to alternate a pale shade with None. colorCycle = list(map(colors.toColorOrNone, arg)) count = len(colorCycle) rowCount = er - sr + 1 for i in xrange(rowCount): color = colorCycle[i%count] h = rowHeights[sr + i] if color: canv.setFillColor(color) canv.rect(x0, y0, w, -h, stroke=0,fill=1) y0 = y0 - h elif cmd == 'COLBACKGROUNDS': #cycle through colours columnwise colorCycle = list(map(colors.toColorOrNone, arg)) count = len(colorCycle) colCount = ec - sc + 1 for i in xrange(colCount): color = colorCycle[i%count] w = colWidths[sc + i] if color: canv.setFillColor(color) canv.rect(x0, y0, w, h, stroke=0,fill=1) x0 = x0 +w else: #cmd=='BACKGROUND' if arg and isinstance(arg,(list,tuple)) and arg[0] in ('VERTICAL','HORIZONTAL'): # # Arg is a list, assume we are going for a gradient fill # where we expect a containing a direction for the gradient # and the starting an final gradient colors. For example: # ['HORIZONTAL', colors.white, colors.grey] or # ['VERTICAL', colors.red, colors.blue] # canv.saveState() if ec==sc and er==sr and spanRects: xywh = spanRects.get((sc,sr)) if xywh: #it's a single cell x0, y0, w, h = xywh p = canv.beginPath() p.rect(x0, y0, w, h) canv.clipPath(p, stroke=0) direction=arg.pop(0) if direction=="HORIZONTAL": canv.linearGradient(x0,y0,x0+w,y0,arg,extend=False) else: #VERTICAL canv.linearGradient(x0,y0,x0,y0+h,arg,extend=False) canv.restoreState() else: color = colors.toColorOrNone(arg) if color: if ec==sc and er==sr and spanRects: xywh = spanRects.get((sc,sr)) if xywh: #it's a single cell x0, y0, w, h = xywh canv.setFillColor(color) canv.rect(x0, y0, w, h, stroke=0,fill=1) def _drawCell(self, cellval, cellstyle, pos, size): colpos, rowpos = pos colwidth, rowheight = size if self._curcellstyle is not cellstyle: cur = self._curcellstyle if cur is None or cellstyle.color != cur.color: self.canv.setFillColor(cellstyle.color) if cur is None or cellstyle.leading != cur.leading or cellstyle.fontname != cur.fontname or cellstyle.fontsize != cur.fontsize: self.canv.setFont(cellstyle.fontname, cellstyle.fontsize, cellstyle.leading) self._curcellstyle = cellstyle just = cellstyle.alignment valign = cellstyle.valign if isinstance(cellval,(tuple,list,Flowable)): if not isinstance(cellval,(tuple,list)): cellval = (cellval,) # we assume it's a list of Flowables W = [] H = [] w, h = self._listCellGeom(cellval,colwidth,cellstyle,W=W, H=H,aH=rowheight) if valign=='TOP': y = rowpos + rowheight - cellstyle.topPadding elif valign=='BOTTOM': y = rowpos+cellstyle.bottomPadding + h else: y = rowpos+(rowheight+cellstyle.bottomPadding-cellstyle.topPadding+h)/2.0 if cellval: y += cellval[0].getSpaceBefore() for v, w, h in zip(cellval,W,H): if just=='LEFT': x = colpos+cellstyle.leftPadding elif just=='RIGHT': x = colpos+colwidth-cellstyle.rightPadding - w elif just in ('CENTRE', 'CENTER'): x = colpos+(colwidth+cellstyle.leftPadding-cellstyle.rightPadding-w)/2.0 else: raise ValueError('Invalid justification %s' % just) y -= v.getSpaceBefore() y -= h v.drawOn(self.canv,x,y) y -= v.getSpaceAfter() else: if just == 'LEFT': draw = self.canv.drawString x = colpos + cellstyle.leftPadding elif just in ('CENTRE', 'CENTER'): draw = self.canv.drawCentredString x = colpos+(colwidth+cellstyle.leftPadding-cellstyle.rightPadding)*0.5 elif just == 'RIGHT': draw = self.canv.drawRightString x = colpos + colwidth - cellstyle.rightPadding elif just == 'DECIMAL': draw = self.canv.drawAlignedString x = colpos + colwidth - cellstyle.rightPadding else: raise ValueError('Invalid justification %s' % just) vals = str(cellval).split("\n") n = len(vals) leading = cellstyle.leading fontsize = cellstyle.fontsize if valign=='BOTTOM': y = rowpos + cellstyle.bottomPadding+n*leading-fontsize elif valign=='TOP': y = rowpos + rowheight - cellstyle.topPadding - fontsize elif valign=='MIDDLE': #tim roberts pointed out missing fontsize correction 2004-10-04 y = rowpos + (cellstyle.bottomPadding + rowheight-cellstyle.topPadding+n*leading)/2.0 - fontsize else: raise ValueError("Bad valign: '%s'" % str(valign)) for v in vals: draw(x, y, v) y -= leading onDraw = getattr(cellval,'onDraw',None) if onDraw: onDraw(self.canv,cellval.kind,cellval.label) if cellstyle.href: #external hyperlink self.canv.linkURL(cellstyle.href, (colpos, rowpos, colpos + colwidth, rowpos + rowheight), relative=1) if cellstyle.destination: #external hyperlink self.canv.linkRect("", cellstyle.destination, Rect=(colpos, rowpos, colpos + colwidth, rowpos + rowheight), relative=1) _LineOpMap = { 'GRID':'_drawGrid', 'BOX':'_drawBox', 'OUTLINE':'_drawBox', 'INNERGRID':'_drawInnerGrid', 'LINEBELOW':'_drawHLinesB', 'LINEABOVE':'_drawHLines', 'LINEBEFORE':'_drawVLines', 'LINEAFTER':'_drawVLinesA', } class LongTable(Table): '''Henning von Bargen's changes will be active''' _longTableOptimize = 1 LINECOMMANDS = list(_LineOpMap.keys()) def _isLineCommand(cmd): return cmd[0] in LINECOMMANDS def _setCellStyle(cellStyles, i, j, op, values): #new = CellStyle('<%d, %d>' % (i,j), cellStyles[i][j]) #cellStyles[i][j] = new ## modify in place!!! new = cellStyles[i][j] if op == 'FONT': n = len(values) new.fontname = values[0] if n>1: new.fontsize = values[1] if n>2: new.leading = values[2] else: new.leading = new.fontsize*1.2 elif op in ('FONTNAME', 'FACE'): new.fontname = values[0] elif op in ('SIZE', 'FONTSIZE'): new.fontsize = values[0] elif op == 'LEADING': new.leading = values[0] elif op == 'TEXTCOLOR': new.color = colors.toColor(values[0], colors.Color(0,0,0)) elif op in ('ALIGN', 'ALIGNMENT'): new.alignment = values[0] elif op == 'VALIGN': new.valign = values[0] elif op == 'LEFTPADDING': new.leftPadding = values[0] elif op == 'RIGHTPADDING': new.rightPadding = values[0] elif op == 'TOPPADDING': new.topPadding = values[0] elif op == 'BOTTOMPADDING': new.bottomPadding = values[0] elif op == 'HREF': new.href = values[0] elif op == 'DESTINATION': new.destination = values[0] GRID_STYLE = TableStyle( [('GRID', (0,0), (-1,-1), 0.25, colors.black), ('ALIGN', (1,1), (-1,-1), 'RIGHT')] ) BOX_STYLE = TableStyle( [('BOX', (0,0), (-1,-1), 0.50, colors.black), ('ALIGN', (1,1), (-1,-1), 'RIGHT')] ) LABELED_GRID_STYLE = TableStyle( [('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 2, colors.black), ('LINEBELOW', (0,0), (-1,0), 2, colors.black), ('LINEAFTER', (0,0), (0,-1), 2, colors.black), ('ALIGN', (1,1), (-1,-1), 'RIGHT')] ) COLORED_GRID_STYLE = TableStyle( [('INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('BOX', (0,0), (-1,-1), 2, colors.red), ('LINEBELOW', (0,0), (-1,0), 2, colors.black), ('LINEAFTER', (0,0), (0,-1), 2, colors.black), ('ALIGN', (1,1), (-1,-1), 'RIGHT')] ) LIST_STYLE = TableStyle( [('LINEABOVE', (0,0), (-1,0), 2, colors.green), ('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black), ('LINEBELOW', (0,-1), (-1,-1), 2, colors.green), ('ALIGN', (1,1), (-1,-1), 'RIGHT')] ) # experimental iterator which can apply a sequence # of colors e.g. Blue, None, Blue, None as you move # down. if __name__ == '__main__': from tests.test_platypus_tables import old_tables_test old_tables_test() reportlab-3.5.34/src/reportlab/platypus/xpreformatted.py0000664000175000017500000003125113544671343024310 0ustar rptlabrptlab00000000000000#Copyright ReportLab Europe Ltd. 2000-2017 #see license.txt for license details #history https://hg.reportlab.com/hg-public/reportlab/log/tip/src/reportlab/platypus/xpreformatted.py __all__ = ( 'XPreformatted', 'PythonPreformatted', ) __version__='3.5.20' __doc__='''A 'rich preformatted text' widget allowing internal markup''' from reportlab.lib import PyFontify from reportlab.platypus.paragraph import Paragraph, cleanBlockQuotedText, _handleBulletWidth, \ ParaLines, _getFragWords, stringWidth, getAscentDescent, imgVRange, imgNormV from reportlab.lib.utils import isSeq from reportlab.platypus.flowables import _dedenter def _getFragLines(frags): lines = [] cline = [] W = frags[:] while W != []: w = W[0] t = w.text del W[0] i = t.find('\n') if i>=0: tleft = t[i+1:] cline.append(w.clone(text=t[:i])) lines.append(cline) cline = [] if tleft!='': W.insert(0,w.clone(text=tleft)) else: cline.append(w) if cline!=[]: lines.append(cline) return lines def _split_blPara(blPara,start,stop): f = blPara.clone() for a in ('lines', 'text'): if hasattr(f,a): delattr(f,a) f.lines = blPara.lines[start:stop] return [f] # Will be removed shortly. def _countSpaces(text): return text.count(' ') ## i = 0 ## s = 0 ## while 1: ## j = text.find(' ',i) ## if j<0: return s ## s = s + 1 ## i = j + 1 def _getFragWord(frags,maxWidth): ''' given a fragment list return a list of lists [size, spaces, (f00,w00), ..., (f0n,w0n)] each pair f,w represents a style and some string ''' W = [] n = 0 s = 0 for f in frags: text = f.text[:] W.append((f,text)) cb = getattr(f,'cbDefn',None) if cb: _w = getattr(cb,'width',0) if hasattr(_w,'normalizedValue'): _w._normalizer = maxWidth n += stringWidth(text, f.fontName, f.fontSize) #s = s + _countSpaces(text) s += text.count(' ') # much faster for many blanks #del f.text # we can't do this until we sort out splitting # of paragraphs return n, s, W class XPreformatted(Paragraph): def __init__(self, text, style, bulletText = None, frags=None, caseSensitive=1, dedent=0): self.caseSensitive = caseSensitive cleaner = lambda text, dedent=dedent: '\n'.join(_dedenter(text or '',dedent)) self._setup(text, style, bulletText, frags, cleaner) def breakLines(self, width): """ Returns a broken line structure. There are two cases A) For the simple case of a single formatting input fragment the output is A fragment specifier with - kind = 0 - fontName, fontSize, leading, textColor - lines= A list of lines Each line has two items: 1. unused width in points 2. a list of words B) When there is more than one input formatting fragment the out put is A fragment specifier with - kind = 1 - lines = A list of fragments each having fields: - extraspace (needed for justified) - fontSize - words=word list - each word is itself a fragment with - various settings This structure can be used to easily draw paragraphs with the various alignments. You can supply either a single width or a list of widths; the latter will have its last item repeated until necessary. A 2-element list is useful when there is a different first line indent; a longer list could be created to facilitate custom wraps around irregular objects.""" self._width_max = 0 if not isSeq(width): maxWidths = [width] else: maxWidths = width lines = [] lineno = 0 maxWidth = maxWidths[lineno] style = self.style fFontSize = float(style.fontSize) requiredWidth = 0 #for bullets, work out width and ensure we wrap the right amount onto line one _handleBulletWidth(self.bulletText,style,maxWidths) self.height = 0 autoLeading = getattr(self,'autoLeading',getattr(style,'autoLeading','')) calcBounds = autoLeading not in ('','off') frags = self.frags nFrags= len(frags) if nFrags==1: f = frags[0] if hasattr(f,'text'): fontSize = f.fontSize fontName = f.fontName ascent, descent = getAscentDescent(fontName,fontSize) kind = 0 L=f.text.split('\n') for l in L: currentWidth = stringWidth(l,fontName,fontSize) if currentWidth > self._width_max: self._width_max = currentWidth requiredWidth = max(currentWidth,requiredWidth) extraSpace = maxWidth-currentWidth lines.append((extraSpace,l.split(' '),currentWidth)) lineno = lineno+1 maxWidth = lineno self._width_max: self._width_max = currentWidth lines.append(ParaLines(extraSpace=extraSpace,wordCount=n, words=words, fontSize=maxSize, ascent=maxAscent,descent=minDescent,currentWidth=currentWidth,preformatted=True)) self.width = max(self.width,requiredWidth) return ParaLines(kind=1, lines=lines) return lines breakLinesCJK = breakLines #TODO fixme fixme fixme # we need this her to get the right splitter def _get_split_blParaFunc(self): return _split_blPara class PythonPreformatted(XPreformatted): """Used for syntax-colored Python code, otherwise like XPreformatted. """ formats = { 'rest' : ('', ''), 'comment' : ('', ''), 'keyword' : ('', ''), 'parameter' : ('', ''), 'identifier' : ('', ''), 'string' : ('', '') } def __init__(self, text, style, bulletText = None, dedent=0, frags=None): if text: text = self.fontify(self.escapeHtml(text)) XPreformatted.__init__(self, text, style,bulletText=bulletText,dedent=dedent,frags=frags) def escapeHtml(self, text): s = text.replace('&', '&') s = s.replace('<', '<') s = s.replace('>', '>') return s def fontify(self, code): "Return a fontified version of some Python code." if code[0] == '\n': code = code[1:] tags = PyFontify.fontify(code) fontifiedCode = '' pos = 0 for k, i, j, dummy in tags: fontifiedCode = fontifiedCode + code[pos:i] s, e = self.formats[k] fontifiedCode = fontifiedCode + s + code[i:j] + e pos = j fontifiedCode = fontifiedCode + code[pos:] return fontifiedCode if __name__=='__main__': #NORUNTESTS import sys def dumpXPreformattedLines(P): print('\n############dumpXPreforemattedLines(%s)' % str(P)) lines = P.blPara.lines n =len(lines) outw=sys.stdout.write for l in range(n): line = lines[l] words = line.words nwords = len(words) outw('line%d: %d(%d)\n ' % (l,nwords,line.wordCount)) for w in range(nwords): outw(" %d:'%s'"%(w,words[w].text)) print() def dumpXPreformattedFrags(P): print('\n############dumpXPreforemattedFrags(%s)' % str(P)) frags = P.frags n =len(frags) for l in range(n): print("frag%d: '%s'" % (l, frags[l].text)) outw=sys.stdout.write l = 0 for L in _getFragLines(frags): n=0 for W in _getFragWords(L,360): outw("frag%d.%d: size=%d" % (l, n, W[0])) n = n + 1 for w in W[1:]: outw(" '%s'" % w[1]) print() l = l + 1 def try_it(text,style,dedent,aW,aH): P=XPreformatted(text,style,dedent=dedent) dumpXPreformattedFrags(P) w,h = P.wrap(aW, aH) dumpXPreformattedLines(P) S = P.split(aW,aH) dumpXPreformattedLines(P) for s in S: s.wrap(aW,aH) dumpXPreformattedLines(s) aH = 500 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle styleSheet = getSampleStyleSheet() B = styleSheet['BodyText'] DTstyle = ParagraphStyle("discussiontext", parent=B) DTstyle.fontName= 'Helvetica' for (text,dedent,style, aW, aH, active) in [(''' The CMYK or subtractive method follows the way a printer mixes three pigments (cyan, magenta, and yellow) to form colors. Because mixing chemicals is more difficult than combining light there is a fourth parameter for darkness. For example a chemical combination of the CMY pigments generally never makes a perfect black -- instead producing a muddy color -- so, to get black printers don't use the CMY pigments but use a direct black ink. Because CMYK maps more directly to the way printer hardware works it may be the case that &| & | colors specified in CMYK will provide better fidelity and better control when printed. ''',0,DTstyle, 456.0, 42.8, 0), (''' This is a non rearranging form of the Paragraph class; XML tags are allowed in text and have the same meanings as for the Paragraph class. As for Preformatted, if dedent is non zero dedent common leading spaces will be removed from the front of each line. ''',3, DTstyle, 456.0, 42.8, 0), ("""\ class FastXMLParser: # Nonsense method def nonsense(self): self.foo = 'bar' """,0, styleSheet['Code'], 456.0, 4.8, 1), ]: if active: try_it(text,style,dedent,aW,aH) reportlab-3.5.34/src/reportlab/platypus/para.py0000664000175000017500000026600413544671343022355 0ustar rptlabrptlab00000000000000"""new experimental paragraph implementation Intended to allow support for paragraphs in paragraphs, hotlinks, embedded flowables, and underlining. The main entry point is the function def Paragraph(text, style, bulletText=None, frags=None) Which is intended to be plug compatible with the "usual" platypus paragraph except that it supports more functionality. In this implementation you may embed paragraphs inside paragraphs to create hierarchically organized documents. This implementation adds the following paragraph-like tags (which support the same attributes as paragraphs, for font specification, etc). - Unnumberred lists (ala html)::
  • first one
  • second one
Also